diff --git a/DEPS b/DEPS
index 4704b37..e7d7f9c 100644
--- a/DEPS
+++ b/DEPS
@@ -162,11 +162,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'cb52badca04a32ccb7935facce6f35abac7f62e3',
+  'skia_revision': '86c48abc94f387fd2897bdfc87c7cedcf138ad44',
   # 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': 'dd10454c1d60bbad90a077ac2e4cf2f300b50bbe',
+  'v8_revision': '2a8c719952225d7bd00967c16f1613e694e1ad49',
   # 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.
@@ -174,7 +174,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'd32dae1bb37ce71dcdebfff22bfab04e03382e93',
+  'angle_revision': '8f08fed925c54835c4faee4d7dd61d6ed2964ffd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -213,7 +213,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '3de1b8d0b0983cf49a187a4227e7950395a3b08f',
+  'freetype_revision': 'cc17f852d575a8a66f9be51461af550d0f413891',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling HarfBuzz
   # and whatever else without interference from each other.
@@ -225,7 +225,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'ecd10922eec536ad7795c0f30ff7349952d211ff',
+  'catapult_revision': '914862e8ec8a95b835c02d4dba5540dae61ac170',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -233,7 +233,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-node-modules
   # and whatever else without interference from each other.
-  'devtools_node_modules_revision': '08f835aae2a552cd8b449ec1be9d292cbacbfb8b',
+  'devtools_node_modules_revision': '9f563a2b5303b181a5a938ed3cca7b015d8ddb46',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -853,7 +853,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '6fe107e0feca91dd58f6e279ec673bccaac2e1f1',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '51ac9ed8487b485c668258f07c26ccdc478be9a0',
       'condition': 'checkout_linux',
   },
 
@@ -1257,7 +1257,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '899716dc32408cf7b93b71868074d2b06f757f39',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '88f90b40111e2c5274de49e8f30297af87961db9',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1425,7 +1425,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'abaae129d9a0c6e1e092067e0b105475df43352e',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'fcbe4071ce4608c552bfe9d8b55fc26b7b0e688c',
+    Var('webrtc_git') + '/src.git' + '@' + '7bf7a427bfcc9f398d90632aad54dc32372d8578',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1487,7 +1487,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a5cce89fe5f6e733cd9303a8d98e30f2fd2665ca',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@717df7b6ee6aafd0086f339305017361f9b24f56',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/WATCHLISTS b/WATCHLISTS
index 3d4620a..82ccaf4 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -1547,9 +1547,6 @@
     'service_worker': {
       'filepath': 'content/(browser|renderer|child|common)/service_worker/',
     },
-    'services_public': {
-      'filepath': 'services/([^/]*/)*public/',
-    },
     'settings': {
       'filepath': 'chrome/browser/resources/settings/'\
                   '|chrome/browser/ui/webui/settings/'\
@@ -2259,8 +2256,7 @@
                      'vmpstr+watch@chromium.org'],
     'clipboard': ['dcheng@chromium.org'],
     'codereview_settings': ['agable+watch@chromium.org'],
-    'components_deps': ['blundell+watchlist@chromium.org',
-                        'droger+watchlist@chromium.org'],
+    'components_deps': ['droger+watchlist@chromium.org'],
     'compositor_animator': ['mdjones+watch@chromium.org'],
     'content_bluetooth': ['mattreynolds+watch@chromium.org',
                           'ortuno+watch@chromium.org'],
@@ -2541,7 +2537,6 @@
                        'nhiroki@chromium.org',
                        'serviceworker-reviews@chromium.org',
                        'shimazu+serviceworker@chromium.org'],
-    'services_public': ['blundell+services-watchlist@chromium.org'],
     'settings': ['dbeam+watch-settings@chromium.org',
                  'michaelpg+watch-md-settings@chromium.org',
                  'stevenjb+watch-md-settings@chromium.org',
diff --git a/ash/app_list/views/assistant/privacy_info_view.cc b/ash/app_list/views/assistant/privacy_info_view.cc
index d5ea8b9f..4f738210 100644
--- a/ash/app_list/views/assistant/privacy_info_view.cc
+++ b/ash/app_list/views/assistant/privacy_info_view.cc
@@ -18,6 +18,7 @@
 #include "ui/views/controls/styled_label.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/fill_layout.h"
+#include "ui/views/layout/layout_provider.h"
 #include "ui/views/vector_icons.h"
 #include "ui/views/view_class_properties.h"
 
@@ -121,7 +122,10 @@
   layout_manager->set_cross_axis_alignment(
       views::BoxLayout::CrossAxisAlignment::kCenter);
   row_container_->SetBorder(views::CreateRoundedRectBorder(
-      /*thickness=*/1, /*corner_radius=*/4, gfx::kGoogleGrey300));
+      /*thickness=*/1,
+      views::LayoutProvider::Get()->GetCornerRadiusMetric(
+          views::EMPHASIS_MEDIUM),
+      gfx::kGoogleGrey300));
 
   // Info icon.
   InitInfoIcon();
diff --git a/ash/components/strings/ash_components_strings_ar.xtb b/ash/components/strings/ash_components_strings_ar.xtb
index d1340ff..5c220df 100644
--- a/ash/components/strings/ash_components_strings_ar.xtb
+++ b/ash/components/strings/ash_components_strings_ar.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">‏إضافة .www وcom. إلى الإدخال في شريط العناوين، ثم فتح الصفحة</translation>
+<translation id="1872219238824176091">إزالة سطح المكتب الحالي</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />، ثم <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> أو <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">الانتقال إلى علامة التبويب التالية</translation>
 <translation id="2010818616644390445">الانتقال إلى علامة التبويب الأخيرة في النافذة</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">التبديل بين النوافذ بسرعة</translation>
 <translation id="2454251766545114447">تصغير العرض</translation>
 <translation id="2478303094958140141">‏تفعيل ChromeVox (التعليقات والملاحظات المنطوقة) أو إيقافه</translation>
+<translation id="2488661730534396940">تفعيل سطح المكتب على يمين الصفحة</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">التمرير إلى أسفل صفحة الويب</translation>
 <translation id="2574014812750545982">إعادة ضبط مستوى التكبير/التصغير في الصفحة</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />، ثم <ph name="TAB" /> أو <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">إعادة تحميل الصفحة الحالية</translation>
 <translation id="2764005613199379871">التركيز على البحث في شريط العناوين</translation>
+<translation id="2774822903829597107">إنشاء سطح مكتب جديد</translation>
 <translation id="2789868185375229787">التصغير في الصفحة</translation>
 <translation id="2804480015716812239">اضغط على <ph name="ALT" /> وانقر على رابط</translation>
 <translation id="2830827904629746450">إرساء نافذة على اليسار</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">أخذ لقطة شاشة جزئية</translation>
 <translation id="4698850295812410683">عرض أدوات قلم الشاشة</translation>
 <translation id="4801989101741319327">الانتقال إلى نهاية الكلمة التالية</translation>
+<translation id="4866066940972151697">تفعيل سطح المكتب على يسار الصفحة</translation>
 <translation id="4916163929714267752">فتح الرابط في نافذة جديدة</translation>
 <translation id="5030659775136592441">عرض "مدير الإشارات"</translation>
 <translation id="5034421018520995080">الانتقال إلى أعلى الصفحة</translation>
diff --git a/ash/components/strings/ash_components_strings_bg.xtb b/ash/components/strings/ash_components_strings_bg.xtb
index 479e8959..0892b54 100644
--- a/ash/components/strings/ash_components_strings_bg.xtb
+++ b/ash/components/strings/ash_components_strings_bg.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Добавяне на www. и .com към въведеното в адресната лента и отваряне на съответната страница</translation>
+<translation id="1872219238824176091">Премахване на текущия работен кът</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> и след това <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> или <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Към следващия раздел</translation>
 <translation id="2010818616644390445">Преминаване към последния раздел в прозореца</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Бързо превключване между прозорците</translation>
 <translation id="2454251766545114447">Намаляване на мащаба на екрана</translation>
 <translation id="2478303094958140141">Включване или изключване на ChromeVox (обратна връзка с говор)</translation>
+<translation id="2488661730534396940">Активиране на работния кът отляво</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Превъртане на уеб страницата надолу</translation>
 <translation id="2574014812750545982">Повторно задаване на мащаба на страницата</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> и след това <ph name="TAB" /> или <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Презареждане на текущата страница</translation>
 <translation id="2764005613199379871">Поставяне на фокуса в адресната лента за търсене</translation>
+<translation id="2774822903829597107">Създаване на нов работен кът</translation>
 <translation id="2789868185375229787">Намаляване на мащаба на страницата</translation>
 <translation id="2804480015716812239">Натиснете <ph name="ALT" /> и кликнете върху връзка</translation>
 <translation id="2830827904629746450">Закрепване на прозорец отдясно</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Създаване на частична екранна снимка</translation>
 <translation id="4698850295812410683">Показване на инструментите за писане</translation>
 <translation id="4801989101741319327">Преместване в края на следващата дума</translation>
+<translation id="4866066940972151697">Активиране на работния кът отдясно</translation>
 <translation id="4916163929714267752">Отваряне на връзката в нов прозорец</translation>
 <translation id="5030659775136592441">Показване на диспечера на отметките</translation>
 <translation id="5034421018520995080">Преминаване в началото на страницата</translation>
diff --git a/ash/components/strings/ash_components_strings_ca.xtb b/ash/components/strings/ash_components_strings_ca.xtb
index 4dbf1f5..41576d0 100644
--- a/ash/components/strings/ash_components_strings_ca.xtb
+++ b/ash/components/strings/ash_components_strings_ca.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Maj</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Afegeix www. i .com al text de la barra d'adreces i obre la pàgina</translation>
+<translation id="1872219238824176091">Suprimeix l'escriptori actual</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> i després <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> o <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Ves a la pestanya següent</translation>
 <translation id="2010818616644390445">Ves a l'última pestanya de la finestra</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Canvia de finestra ràpidament</translation>
 <translation id="2454251766545114447">Redueix el contingut de la pantalla</translation>
 <translation id="2478303094958140141">Activa o desactiva ChromeVox (avisos de veu)</translation>
+<translation id="2488661730534396940">Activa l'escriptori de l'esquerra</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Desplaça la pàgina web cap avall</translation>
 <translation id="2574014812750545982">Restableix el nivell de zoom de la pàgina</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> i després <ph name="TAB" /> o <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Torna a carregar la pàgina actual</translation>
 <translation id="2764005613199379871">Situa el focus a la barra d'adreces</translation>
+<translation id="2774822903829597107">Crea un escriptori nou</translation>
 <translation id="2789868185375229787">Redueix la pàgina</translation>
 <translation id="2804480015716812239">Prem <ph name="ALT" /> i fes clic en un enllaç</translation>
 <translation id="2830827904629746450">Fixa una finestra a la dreta</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Fes una captura de pantalla parcial</translation>
 <translation id="4698850295812410683">Mostra les eines del llapis òptic</translation>
 <translation id="4801989101741319327">Mou el cursor al final de la paraula següent</translation>
+<translation id="4866066940972151697">Activa l'escriptori de la dreta</translation>
 <translation id="4916163929714267752">Obre l'enllaç en una finestra nova</translation>
 <translation id="5030659775136592441">Mostra el gestor d'adreces d'interès</translation>
 <translation id="5034421018520995080">Ves a la part superior de la pàgina</translation>
diff --git a/ash/components/strings/ash_components_strings_cs.xtb b/ash/components/strings/ash_components_strings_cs.xtb
index 66eb0da..26b3a9d 100644
--- a/ash/components/strings/ash_components_strings_cs.xtb
+++ b/ash/components/strings/ash_components_strings_cs.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Přidat k zadanému řetězci na adresním řádku www. a .com a poté otevřít stránku</translation>
+<translation id="1872219238824176091">Odstranit aktuální plochu</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> a poté <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> nebo <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Přejít na další kartu</translation>
 <translation id="2010818616644390445">Přejít na poslední kartu v okně</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Rychle přepnout mezi okny</translation>
 <translation id="2454251766545114447">Oddálit zobrazení</translation>
 <translation id="2478303094958140141">Zapnout nebo vypnout ChromeVox (hlasovou zpětnou vazbu)</translation>
+<translation id="2488661730534396940">Aktivovat plochu vlevo</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Posunout webovou stránku dolů</translation>
 <translation id="2574014812750545982">Resetovat úroveň přiblížení na stránce</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> a poté <ph name="TAB" /> nebo <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Znovu načíst aktuální stránku</translation>
 <translation id="2764005613199379871">Přejít do vyhledávacího adresního řádku</translation>
+<translation id="2774822903829597107">Vytvořit novou plochu</translation>
 <translation id="2789868185375229787">Oddálit stránku</translation>
 <translation id="2804480015716812239">Stiskněte klávesu <ph name="ALT" /> a klikněte na odkaz</translation>
 <translation id="2830827904629746450">Ukotvit okno vpravo</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Pořídit částečný snímek obrazovky</translation>
 <translation id="4698850295812410683">Zobrazit nástroje pro dotykové pero</translation>
 <translation id="4801989101741319327">Přesunout kurzor na konec dalšího slova.</translation>
+<translation id="4866066940972151697">Aktivovat plochu vpravo</translation>
 <translation id="4916163929714267752">Otevřít odkaz v novém okně</translation>
 <translation id="5030659775136592441">Zobrazit správce záložek</translation>
 <translation id="5034421018520995080">Přejít na začátek stránky</translation>
diff --git a/ash/components/strings/ash_components_strings_da.xtb b/ash/components/strings/ash_components_strings_da.xtb
index 6c0bd67..4a28be1 100644
--- a/ash/components/strings/ash_components_strings_da.xtb
+++ b/ash/components/strings/ash_components_strings_da.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Føj www. og .com til dit input i adresselinjen, og åbn siden</translation>
+<translation id="1872219238824176091">Fjern det aktuelle skrivebord</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> og derefter <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> eller <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Gå til næste fane</translation>
 <translation id="2010818616644390445">Gå til den sidste fane i vinduet</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Skift hurtigt mellem vinduer</translation>
 <translation id="2454251766545114447">Zoom ud på skærmen</translation>
 <translation id="2478303094958140141">Slå ChromeVox (oplæsning) til eller fra</translation>
+<translation id="2488661730534396940">Aktivér skrivebordet i venstre side</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Rul ned på websiden</translation>
 <translation id="2574014812750545982">Nulstil zoomniveauet på siden</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> og derefter <ph name="TAB" /> eller <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Genindlæs den aktuelle side</translation>
 <translation id="2764005613199379871">Fokuser på søgning i adresselinjen</translation>
+<translation id="2774822903829597107">Opret et nyt skrivebord</translation>
 <translation id="2789868185375229787">Zoom ud fra siden</translation>
 <translation id="2804480015716812239">Tryk på <ph name="ALT" />, og klik på et link</translation>
 <translation id="2830827904629746450">Fastgør et vindue i højre side</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Tag et delvist screenshot</translation>
 <translation id="4698850295812410683">Vis styluspenværktøjer</translation>
 <translation id="4801989101741319327">Flyt til slutningen af det næste ord</translation>
+<translation id="4866066940972151697">Aktivér skrivebordet i højre side</translation>
 <translation id="4916163929714267752">Åbn linket i et nyt vindue</translation>
 <translation id="5030659775136592441">Vis bogmærkeadministrator</translation>
 <translation id="5034421018520995080">Gå til toppen af siden</translation>
diff --git a/ash/components/strings/ash_components_strings_de.xtb b/ash/components/strings/ash_components_strings_de.xtb
index c55ec2d..28931be 100644
--- a/ash/components/strings/ash_components_strings_de.xtb
+++ b/ash/components/strings/ash_components_strings_de.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Umschalttaste</translation>
 <translation id="1732295673545939435">"<ph name="MODIFIER1" />" <ph name="SEPARATOR1" /> "<ph name="MODIFIER2" />" <ph name="SEPARATOR2" /> "<ph name="KEY" />"</translation>
 <translation id="1733525068429116555">"www." und ".com" zur Eingabe in der Adressleiste hinzufügen und die Seite dann öffnen</translation>
+<translation id="1872219238824176091">Aktuellen Arbeitsbereich entfernen</translation>
 <translation id="1920446759863417809">"<ph name="SHIFT1" />" <ph name="SEPARATOR1" /> "<ph name="ALT" />" <ph name="SEPARATOR2" /> "<ph name="L" />", dann "<ph name="SHIFT2" />" <ph name="SEPARATOR3" /> "<ph name="TAB" />" oder "<ph name="LEFT" />"</translation>
 <translation id="1996162290124031907">Auf den nächsten Tab klicken</translation>
 <translation id="2010818616644390445">Auf den letzten Tab im Fenster klicken</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Schnell zwischen Fenstern wechseln</translation>
 <translation id="2454251766545114447">Display herauszoomen</translation>
 <translation id="2478303094958140141">ChromeVox für gesprochenes Feedback aktivieren oder deaktivieren</translation>
+<translation id="2488661730534396940">Linken Arbeitsbereich aktivieren</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Auf der Webseite nach unten scrollen</translation>
 <translation id="2574014812750545982">Zoomfaktor auf der Seite zurücksetzen</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446">"<ph name="SHIFT" />" <ph name="SEPARATOR1" /> "<ph name="ALT" />" <ph name="SEPARATOR2" /> "<ph name="L" />", dann "<ph name="TAB" />" oder "<ph name="RIGHT" />"</translation>
 <translation id="2750942583782703988">Aktuelle Seite neu laden</translation>
 <translation id="2764005613199379871">Fokus auf Such- und Adressleiste setzen</translation>
+<translation id="2774822903829597107">Neuen Arbeitsbereich erstellen</translation>
 <translation id="2789868185375229787">Seite herauszoomen</translation>
 <translation id="2804480015716812239">"<ph name="ALT" />" gedrückt halten und auf einen Link klicken</translation>
 <translation id="2830827904629746450">Fenster rechts andocken</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Screenshot eines Bildschirmausschnitts erstellen</translation>
 <translation id="4698850295812410683">Eingabestift-Tools einblenden</translation>
 <translation id="4801989101741319327">Zum Ende des nächsten Wortes springen</translation>
+<translation id="4866066940972151697">Rechten Arbeitsbereich aktivieren</translation>
 <translation id="4916163929714267752">Link in einem neuen Fenster öffnen</translation>
 <translation id="5030659775136592441">Lesezeichenmanager einblenden</translation>
 <translation id="5034421018520995080">Zum Seitenanfang springen</translation>
diff --git a/ash/components/strings/ash_components_strings_el.xtb b/ash/components/strings/ash_components_strings_el.xtb
index 2916bf6..07e875e 100644
--- a/ash/components/strings/ash_components_strings_el.xtb
+++ b/ash/components/strings/ash_components_strings_el.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Προσθέστε το www. και το .com στο κείμενο που έχετε πληκτρολογήσει στη γραμμή διευθύνσεων και έπειτα ανοίξτε τη σελίδα</translation>
+<translation id="1872219238824176091">Κατάργηση της τρέχουσας επιφάνειας εργασίας</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> και έπειτα <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> ή <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Μετάβαση στην επόμενη καρτέλα</translation>
 <translation id="2010818616644390445">Μετάβαση στην τελευταία καρτέλα στο παράθυρο</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Γρήγορη εναλλαγή μεταξύ παραθύρων</translation>
 <translation id="2454251766545114447">Σμίκρυνση οθόνης</translation>
 <translation id="2478303094958140141">Ενεργοποίηση ή απενεργοποίηση του ChromeVox (εκφωνημένα σχόλια)</translation>
+<translation id="2488661730534396940">Ενεργοποίηση επιφάνειας εργασίας στα αριστερά</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Κύλιση στην ιστοσελίδα προς τα κάτω</translation>
 <translation id="2574014812750545982">Επαναφορά επιπέδου εστίασης στη σελίδα</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> και έπειτα <ph name="TAB" /> ή <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Επανάληψη φόρτωσης της τρέχουσας σελίδας</translation>
 <translation id="2764005613199379871">Εστίαση στη γραμμή διευθύνσεων αναζήτησης</translation>
+<translation id="2774822903829597107">Δημιουργία νέας επιφάνειας εργασίας</translation>
 <translation id="2789868185375229787">Σμίκρυνση της σελίδας</translation>
 <translation id="2804480015716812239">Πατήστε <ph name="ALT" /> και κάντε κλικ σε έναν σύνδεσμο</translation>
 <translation id="2830827904629746450">Αγκύρωση παραθύρου στα δεξιά</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Λήψη μερικού στιγμιότυπου οθόνης</translation>
 <translation id="4698850295812410683">Εμφάνιση εργαλείων γραφίδας</translation>
 <translation id="4801989101741319327">Μετακίνηση στο τέλος της επόμενης λέξης</translation>
+<translation id="4866066940972151697">Ενεργοποίηση επιφάνειας εργασίας στα δεξιά</translation>
 <translation id="4916163929714267752">Άνοιγμα του συνδέσμου σε νέο παράθυρο</translation>
 <translation id="5030659775136592441">Εμφάνιση διαχείρισης σελιδοδεικτών</translation>
 <translation id="5034421018520995080">Μετάβαση στο επάνω μέρος της σελίδας</translation>
diff --git a/ash/components/strings/ash_components_strings_es-419.xtb b/ash/components/strings/ash_components_strings_es-419.xtb
index 82df8a2..25c624d 100644
--- a/ash/components/strings/ash_components_strings_es-419.xtb
+++ b/ash/components/strings/ash_components_strings_es-419.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Agregar www. y .com a la entrada en la barra de direcciones y, luego, abrir la página</translation>
+<translation id="1872219238824176091">Quita el escritorio actual</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, luego <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> o <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Ir a la pestaña siguiente</translation>
 <translation id="2010818616644390445">Ir a la última pestaña de la ventana</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Cambiar de ventana rápidamente</translation>
 <translation id="2454251766545114447">Alejar la pantalla</translation>
 <translation id="2478303094958140141">Activar o desactivar ChromeVox (comentarios por voz)</translation>
+<translation id="2488661730534396940">Activa el escritorio de la izquierda</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Desplazarse hacia abajo por la página web</translation>
 <translation id="2574014812750545982">Restablecer el nivel de zoom en la página</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, luego <ph name="TAB" /> o <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Volver a cargar la página actual</translation>
 <translation id="2764005613199379871">Hacer foco en la barra de direcciones en la búsqueda</translation>
+<translation id="2774822903829597107">Crea un escritorio nuevo</translation>
 <translation id="2789868185375229787">Alejar la página</translation>
 <translation id="2804480015716812239">Presiona <ph name="ALT" /> y haz clic en un vínculo</translation>
 <translation id="2830827904629746450">Acoplar una ventana a la derecha</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Realizar una captura de pantalla parcial</translation>
 <translation id="4698850295812410683">Mostrar herramientas de pluma stylus</translation>
 <translation id="4801989101741319327">Ir al final de la palabra siguiente</translation>
+<translation id="4866066940972151697">Activa el escritorio de la derecha</translation>
 <translation id="4916163929714267752">Abrir el vínculo en una ventana nueva</translation>
 <translation id="5030659775136592441">Mostrar el Administrador de favoritos</translation>
 <translation id="5034421018520995080">Ir a la parte superior de la página</translation>
diff --git a/ash/components/strings/ash_components_strings_es.xtb b/ash/components/strings/ash_components_strings_es.xtb
index 53fadcf..102a866e 100644
--- a/ash/components/strings/ash_components_strings_es.xtb
+++ b/ash/components/strings/ash_components_strings_es.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Mayús</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Añadir www. y .com al texto introducido en la barra de direcciones y abrir la página</translation>
+<translation id="1872219238824176091">Quitar el escritorio actual</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> y <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> o <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Ir a la siguiente pestaña</translation>
 <translation id="2010818616644390445">Ir a la última pestaña de la ventana</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Pasar de una ventana a otra rápidamente</translation>
 <translation id="2454251766545114447">Reducir el contenido de la pantalla</translation>
 <translation id="2478303094958140141">Activar o desactivar ChromeVox (mensajes de voz)</translation>
+<translation id="2488661730534396940">Activar el escritorio de la izquierda</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Desplazarse hacia abajo por la página web</translation>
 <translation id="2574014812750545982">Restablecer el nivel de zoom de la página</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> y <ph name="TAB" /> o <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Volver a cargar la página actual</translation>
 <translation id="2764005613199379871">Seleccionar la barra de direcciones</translation>
+<translation id="2774822903829597107">Crear un nuevo escritorio</translation>
 <translation id="2789868185375229787">Reducir la página</translation>
 <translation id="2804480015716812239">Pulsa <ph name="ALT" /> y haz clic en un enlace</translation>
 <translation id="2830827904629746450">Anclar una ventana en la derecha</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Hacer una captura de pantalla parcial</translation>
 <translation id="4698850295812410683">Mostrar herramientas del lápiz óptico</translation>
 <translation id="4801989101741319327">Desplazarse al final de la siguiente palabra</translation>
+<translation id="4866066940972151697">Activar el escritorio de la derecha</translation>
 <translation id="4916163929714267752">Abrir el enlace en una ventana nueva</translation>
 <translation id="5030659775136592441">Mostrar administrador de marcadores</translation>
 <translation id="5034421018520995080">Ir a la parte superior de la página</translation>
diff --git a/ash/components/strings/ash_components_strings_et.xtb b/ash/components/strings/ash_components_strings_et.xtb
index cccdc2f..2366895 100644
--- a/ash/components/strings/ash_components_strings_et.xtb
+++ b/ash/components/strings/ash_components_strings_et.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Tõstuklahv</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /> <ph name="SEPARATOR1" /> <ph name="MODIFIER2" /> <ph name="SEPARATOR2" /> <ph name="KEY" /></translation>
 <translation id="1733525068429116555">Laiendite www. ja .com lisamine aadressiribale ning siis lehe avamine</translation>
+<translation id="1872219238824176091">Praeguse töölaua eemaldamine</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /> <ph name="SEPARATOR1" /> <ph name="ALT" /> <ph name="SEPARATOR2" /> <ph name="L" />, seejärel <ph name="SHIFT2" /> <ph name="SEPARATOR3" /> <ph name="TAB" /> või <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Järgmisele vahelehele liikumine</translation>
 <translation id="2010818616644390445">Aknas viimasele vahelehele liikumine</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Kiirelt akende vahel vahetamine</translation>
 <translation id="2454251766545114447">Ekraanil väljasuumimine</translation>
 <translation id="2478303094958140141">ChromeVoxi (suuline tagasiside) sisse- või väljalülitamine</translation>
+<translation id="2488661730534396940">Vasakpoolse töölaua aktiveerimine</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Veebilehel alla kerimine</translation>
 <translation id="2574014812750545982">Lehe suumitaseme lähtestamine</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /> <ph name="SEPARATOR1" /> <ph name="ALT" /> <ph name="SEPARATOR2" /> <ph name="L" />, seejärel <ph name="TAB" /> või <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Aktiivse lehe uuesti laadimine</translation>
 <translation id="2764005613199379871">Fookuse viimine otsingu- ja aadressiribale</translation>
+<translation id="2774822903829597107">Uue töölaua loomine</translation>
 <translation id="2789868185375229787">Lehel väljasuumimine</translation>
 <translation id="2804480015716812239">Vajutage klahvi <ph name="ALT" /> ja klõpsake lingil</translation>
 <translation id="2830827904629746450">Paremal oleva akna dokkimine</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Osalise ekraanipildi jäädvustamine</translation>
 <translation id="4698850295812410683">Kuvab elektronpliiatsi tööriistad</translation>
 <translation id="4801989101741319327">Järgmise sõna lõppu liikumine</translation>
+<translation id="4866066940972151697">Parempoolse töölaua aktiveerimine</translation>
 <translation id="4916163929714267752">Lingi avamine uues aknas</translation>
 <translation id="5030659775136592441">Kuvab järjehoidjate halduri</translation>
 <translation id="5034421018520995080">Lehe algusesse liikumine</translation>
diff --git a/ash/components/strings/ash_components_strings_fa.xtb b/ash/components/strings/ash_components_strings_fa.xtb
index 9c3c48d..87c52d44 100644
--- a/ash/components/strings/ash_components_strings_fa.xtb
+++ b/ash/components/strings/ash_components_strings_fa.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">تبدیل</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">‏افزودن www.‎ و ‎.com به ورودی‌تان در نوار نشانی و سپس باز کردن صفحه</translation>
+<translation id="1872219238824176091">برداشتن میز فعلی</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> و سپس <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> یا <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">رفتن به برگه بعدی</translation>
 <translation id="2010818616644390445">رفتن به آخرین برگه در پنجره</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">جابه‌جا شدن سریع بین پنجره‌ها</translation>
 <translation id="2454251766545114447">دورنمایی صفحه‌نمایش</translation>
 <translation id="2478303094958140141">‏روشن یا خاموش کردن ChromeVox (بازخورد گفتاری)</translation>
+<translation id="2488661730534396940">میز در سمت راست فعال شود</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">پیمایش به پایین صفحه وب</translation>
 <translation id="2574014812750545982">بازنشانی میزان بزرگ‌نمایی صفحه</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> و سپس <ph name="TAB" /> یا <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">بارگیری مجدد صفحه کنونی</translation>
 <translation id="2764005613199379871">قرار دادن تمرکز روی نوار نشانی جستجو</translation>
+<translation id="2774822903829597107">ایجاد میز جدید</translation>
 <translation id="2789868185375229787">دورنمایی کردن روی صفحه</translation>
 <translation id="2804480015716812239"><ph name="ALT" /> را فشار دهید و روی پیوند کلیک کنید</translation>
 <translation id="2830827904629746450">ثابت کردن یک پنجره در سمت راست</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">گرفتن عکس از قسمتی از صفحه‌نمایش</translation>
 <translation id="4698850295812410683">نمایش ابزار قلم</translation>
 <translation id="4801989101741319327">رفتن به انتهای کلمه بعد</translation>
+<translation id="4866066940972151697">میز در سمت چپ فعال شود</translation>
 <translation id="4916163929714267752">بازکردن پیوند در پنجره جدید</translation>
 <translation id="5030659775136592441">نمایش مدیر نشانک</translation>
 <translation id="5034421018520995080">رفتن به بالای صفحه</translation>
diff --git a/ash/components/strings/ash_components_strings_fi.xtb b/ash/components/strings/ash_components_strings_fi.xtb
index 3825906..f87e3fd 100644
--- a/ash/components/strings/ash_components_strings_fi.xtb
+++ b/ash/components/strings/ash_components_strings_fi.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Lisää osoitekentässä olevaan tekstiin www. ja .com, ja avaa sitten sivu</translation>
+<translation id="1872219238824176091">Poista nykyinen työpöytä</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, sitten <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> tai <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Siirry seuraavalle välilehdelle</translation>
 <translation id="2010818616644390445">Siirry ikkunan viimeiselle välilehdelle</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Siirry nopeasti ikkunoiden välillä</translation>
 <translation id="2454251766545114447">Näytön loitonnus</translation>
 <translation id="2478303094958140141">Ota ChromeVox (äänipalaute) käyttöön tai poista se käytöstä</translation>
+<translation id="2488661730534396940">Aktivoi vasemmalla oleva työpöytä</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Vieritä sivun alareunaan</translation>
 <translation id="2574014812750545982">Nollaa sivun zoomaustaso</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, sitten <ph name="TAB" /> tai <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Päivitä nykyinen sivu</translation>
 <translation id="2764005613199379871">Aktivoi osoite- ja hakupalkki</translation>
+<translation id="2774822903829597107">Luo uusi työpöytä</translation>
 <translation id="2789868185375229787">Loitonna sivunäkymää</translation>
 <translation id="2804480015716812239">Paina <ph name="ALT" /> ja klikkaa linkkiä.</translation>
 <translation id="2830827904629746450">Telakoi ikkuna oikealle</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Ota osittainen kuvakaappaus</translation>
 <translation id="4698850295812410683">Näyttää näyttökynän työkalut</translation>
 <translation id="4801989101741319327">Siirry seuraavan sanan loppuun</translation>
+<translation id="4866066940972151697">Aktivoi oikealla oleva työpöytä</translation>
 <translation id="4916163929714267752">Avaa linkki uudessa ikkunassa</translation>
 <translation id="5030659775136592441">Näyttää kirjanmerkkien hallinnan</translation>
 <translation id="5034421018520995080">Siirry sivun yläreunaan</translation>
diff --git a/ash/components/strings/ash_components_strings_fr.xtb b/ash/components/strings/ash_components_strings_fr.xtb
index e1243df7..2286bdd 100644
--- a/ash/components/strings/ash_components_strings_fr.xtb
+++ b/ash/components/strings/ash_components_strings_fr.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Maj</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Ajouter "www." et ".com" à votre saisie dans la barre d'adresse et ouvrir la page</translation>
+<translation id="1872219238824176091">Supprimer le bureau actuel</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, puis <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> ou <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Accéder à l'onglet suivant</translation>
 <translation id="2010818616644390445">Accéder au dernier onglet dans la fenêtre</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Changer de fenêtre rapidement</translation>
 <translation id="2454251766545114447">Zoom arrière de l'écran</translation>
 <translation id="2478303094958140141">Activer ou désactiver ChromeVox (commentaires audio)</translation>
+<translation id="2488661730534396940">Activer le bureau à gauche</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Faire défiler la page Web vers le bas</translation>
 <translation id="2574014812750545982">Réinitialiser le niveau de zoom de la page</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, puis <ph name="TAB" /> ou <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Actualiser la page active</translation>
 <translation id="2764005613199379871">Mettre en évidence la barre d'adresse et de recherche</translation>
+<translation id="2774822903829597107">Créer un bureau</translation>
 <translation id="2789868185375229787">Faire un zoom arrière sur la page</translation>
 <translation id="2804480015716812239">Appuyez sur <ph name="ALT" /> et cliquez sur un lien</translation>
 <translation id="2830827904629746450">Ancrer une fenêtre sur la droite</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Faire une capture d'écran partielle</translation>
 <translation id="4698850295812410683">Afficher les outils de stylet</translation>
 <translation id="4801989101741319327">Atteindre la fin du mot suivant</translation>
+<translation id="4866066940972151697">Activer le bureau à droite</translation>
 <translation id="4916163929714267752">Ouvrir le lien dans une nouvelle fenêtre</translation>
 <translation id="5030659775136592441">Afficher le gestionnaire de favoris</translation>
 <translation id="5034421018520995080">Accéder au haut de la page</translation>
diff --git a/ash/components/strings/ash_components_strings_hr.xtb b/ash/components/strings/ash_components_strings_hr.xtb
index 561984cf..fc7fb81c 100644
--- a/ash/components/strings/ash_components_strings_hr.xtb
+++ b/ash/components/strings/ash_components_strings_hr.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Dodavanje elementa www. ili .com unosu u adresnoj traci i otvaranje stranice</translation>
+<translation id="1872219238824176091">Uklanjanje trenutačne radne površine</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, a zatim <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> ili <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Prelazak na sljedeću karticu</translation>
 <translation id="2010818616644390445">Prelazak na zadnju karticu u prozoru</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Brzo prebacivanje na druge prozore</translation>
 <translation id="2454251766545114447">Smanjenje prikaza</translation>
 <translation id="2478303094958140141">Uključivanje ili isključivanje ChromeVoxa (govornih povratnih informacija)</translation>
+<translation id="2488661730534396940">Aktiviranje radne površine slijeva</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Pomicanje prema dolje po web-stranici</translation>
 <translation id="2574014812750545982">Vraćanje razine zumiranja na stranici na zadano</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, a zatim <ph name="TAB" /> ili <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Ponovno učitavanje trenutačne stranice</translation>
 <translation id="2764005613199379871">Postavljanje fokusa na adresnu traku za pretraživanje</translation>
+<translation id="2774822903829597107">Izrada nove radne površine</translation>
 <translation id="2789868185375229787">Smanjivanje stranice</translation>
 <translation id="2804480015716812239">Pritisnite <ph name="ALT" /> i kliknite vezu</translation>
 <translation id="2830827904629746450">Fiksiranje prozora na desnoj strani</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Snimanje dijela zaslona</translation>
 <translation id="4698850295812410683">Prikaz alata pisaljke</translation>
 <translation id="4801989101741319327">Prelazak na kraj sljedeće riječi</translation>
+<translation id="4866066940972151697">Aktiviranje radne površine zdesna</translation>
 <translation id="4916163929714267752">Otvaranje veze u novom prozoru</translation>
 <translation id="5030659775136592441">Prikaz upravitelja oznaka</translation>
 <translation id="5034421018520995080">Prelazak na vrh stranice</translation>
diff --git a/ash/components/strings/ash_components_strings_hu.xtb b/ash/components/strings/ash_components_strings_hu.xtb
index 21981618..621aeeb6 100644
--- a/ash/components/strings/ash_components_strings_hu.xtb
+++ b/ash/components/strings/ash_components_strings_hu.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">www. és .com hozzáadása a címsávba beírt szöveghez, majd az oldal megnyitása</translation>
+<translation id="1872219238824176091">Aktuális asztal eltávolítása</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, majd <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> vagy <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Ugrás a következő lapra</translation>
 <translation id="2010818616644390445">Ugrás az ablak utolsó lapjára</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Gyors váltás ablakok között</translation>
 <translation id="2454251766545114447">Képernyő kicsinyítése</translation>
 <translation id="2478303094958140141">A ChromeVox (hangos visszajelzés) be- vagy kikapcsolása</translation>
+<translation id="2488661730534396940">A bal oldali asztal aktiválása</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">A weboldal lefelé görgetése</translation>
 <translation id="2574014812750545982">Nagyítási szint visszaállítása az oldalon</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, majd <ph name="TAB" /> vagy <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Az aktuális oldal újratöltése</translation>
 <translation id="2764005613199379871">Váltás a keresési címsávra</translation>
+<translation id="2774822903829597107">Új asztal létrehozása</translation>
 <translation id="2789868185375229787">Kicsinyítés az oldalon</translation>
 <translation id="2804480015716812239"><ph name="ALT" />+kattintás a linkre</translation>
 <translation id="2830827904629746450">Ablak rögzítése a jobb oldalon</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Részleges képernyőkép készítése</translation>
 <translation id="4698850295812410683">Érintőceruza-eszközök megjelenítése</translation>
 <translation id="4801989101741319327">Ugrás a következő szó végére</translation>
+<translation id="4866066940972151697">A jobb oldali asztal aktiválása</translation>
 <translation id="4916163929714267752">Link megnyitása új ablakban</translation>
 <translation id="5030659775136592441">A könyvjelzőkezelő megjelenítése</translation>
 <translation id="5034421018520995080">Ugrás az oldal tetejére</translation>
diff --git a/ash/components/strings/ash_components_strings_it.xtb b/ash/components/strings/ash_components_strings_it.xtb
index a920ef048..a3ca73a 100644
--- a/ash/components/strings/ash_components_strings_it.xtb
+++ b/ash/components/strings/ash_components_strings_it.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Maiusc</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Aggiunge www. e .com all'indirizzo inserito nella barra degli indirizzi, quindi apre la pagina</translation>
+<translation id="1872219238824176091">Rimuovi il desktop corrente</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, quindi <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> o <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Passa alla scheda successiva</translation>
 <translation id="2010818616644390445">Passa all'ultima scheda della finestra</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Passa velocemente da una finestra all'altra</translation>
 <translation id="2454251766545114447">Diminuisci lo zoom dello schermo</translation>
 <translation id="2478303094958140141">Attiva o disattiva ChromeVox (funzione di lettura vocale)</translation>
+<translation id="2488661730534396940">Attiva il desktop a sinistra</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Scorre la pagina web verso il basso</translation>
 <translation id="2574014812750545982">Reimposta il livello di zoom nella pagina</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, quindi <ph name="TAB" /> o <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Carica di nuovo la pagina corrente</translation>
 <translation id="2764005613199379871">Consente di impostare lo stato attivo nella barra degli indirizzi di ricerca</translation>
+<translation id="2774822903829597107">Crea un nuovo desktop</translation>
 <translation id="2789868185375229787">Diminuisce lo zoom nella pagina</translation>
 <translation id="2804480015716812239">Premi <ph name="ALT" /> e fai clic su un link</translation>
 <translation id="2830827904629746450">Aggancia una finestra a destra</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Acquisisce lo screenshot parziale</translation>
 <translation id="4698850295812410683">Consente di mostrare gli strumenti stilo</translation>
 <translation id="4801989101741319327">Passa alla fine della parola successiva</translation>
+<translation id="4866066940972151697">Attiva il desktop a destra</translation>
 <translation id="4916163929714267752">Apre il link in una nuova finestra</translation>
 <translation id="5030659775136592441">Consente di mostrare Gestione Preferiti</translation>
 <translation id="5034421018520995080">Passa alla parte superiore della pagina</translation>
diff --git a/ash/components/strings/ash_components_strings_iw.xtb b/ash/components/strings/ash_components_strings_iw.xtb
index 8a6b65e..5bcd0bb 100644
--- a/ash/components/strings/ash_components_strings_iw.xtb
+++ b/ash/components/strings/ash_components_strings_iw.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">‏הוספת www. ו-‎ .comלקלט בשורת כתובת האתר, ולאחר מכן פתיחת הדף</translation>
+<translation id="1872219238824176091">הסרת שולחן העבודה הנוכחי</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> ואז <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> או <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">מעבר לכרטיסייה הבאה</translation>
 <translation id="2010818616644390445">מעבר לכרטיסייה האחרונה בחלון</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">מעבר מהיר בין חלונות</translation>
 <translation id="2454251766545114447">התרחקות מהתצוגה</translation>
 <translation id="2478303094958140141">‏הפעלה או השבתה של ChromeVox (קורא מסך קולי)</translation>
+<translation id="2488661730534396940">הפעל את שולחן העבודה בצד ימין</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">גלילת דף האינטרנט למטה</translation>
 <translation id="2574014812750545982">איפוס רמת הזום בדף</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, ואז <ph name="TAB" /> או <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">טעינה מחדש של הדף הנוכחי</translation>
 <translation id="2764005613199379871">העברת המיקוד לשורת כתובת האתר</translation>
+<translation id="2774822903829597107">יצירת שולחן עבודה חדש</translation>
 <translation id="2789868185375229787">התרחקות מהדף</translation>
 <translation id="2804480015716812239">הקשה על <ph name="ALT" /> ולחיצה על קישור</translation>
 <translation id="2830827904629746450">עגינת חלון בצד ימין</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">יצירת צילום מסך חלקי</translation>
 <translation id="4698850295812410683">הצגת כלי הסטיילוס</translation>
 <translation id="4801989101741319327">מעבר אל סוף המילה הבאה</translation>
+<translation id="4866066940972151697">הפעל את שולחן העבודה בצד שמאל</translation>
 <translation id="4916163929714267752">פתיחת הקישור בחלון חדש</translation>
 <translation id="5030659775136592441">הצגת ניהול הסימניות</translation>
 <translation id="5034421018520995080">מעבר אל ראש הדף</translation>
diff --git a/ash/components/strings/ash_components_strings_ja.xtb b/ash/components/strings/ash_components_strings_ja.xtb
index 91d68a4..054f0572 100644
--- a/ash/components/strings/ash_components_strings_ja.xtb
+++ b/ash/components/strings/ash_components_strings_ja.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /> キーを押す</translation>
 <translation id="1733525068429116555">アドレスバーに入力した語句に www. と .com を追加してページを開く</translation>
+<translation id="1872219238824176091">現在のデスクを削除します</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> キーを押した状態で <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> キーまたは <ph name="LEFT" /> キーを押す</translation>
 <translation id="1996162290124031907">次のタブに移動する</translation>
 <translation id="2010818616644390445">ウィンドウ内の最後のタブに移動する</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">ウィンドウを切り替える</translation>
 <translation id="2454251766545114447">ディスプレイをズームアウト</translation>
 <translation id="2478303094958140141">ChromeVox(音声フィードバック)を有効または無効にする</translation>
+<translation id="2488661730534396940">左のデスクを有効にします</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">ウェブページを下にスクロールする</translation>
 <translation id="2574014812750545982">ページのズームレベルをリセット</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> キーを押した状態で <ph name="TAB" /> キーまたは<ph name="RIGHT" />キーを押す</translation>
 <translation id="2750942583782703988">現在のページを再読み込みする</translation>
 <translation id="2764005613199379871">検索アドレスバーにフォーカスします</translation>
+<translation id="2774822903829597107">新しいデスクを作成します</translation>
 <translation id="2789868185375229787">ページを縮小表示する</translation>
 <translation id="2804480015716812239"><ph name="ALT" /> キーを押しながらリンクをクリックする</translation>
 <translation id="2830827904629746450">ウィンドウを右側に固定する</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">画面の一部のスクリーンショットを撮影する</translation>
 <translation id="4698850295812410683">タッチペン ツールを表示します</translation>
 <translation id="4801989101741319327">次の単語の末尾に移動する</translation>
+<translation id="4866066940972151697">右のデスクを有効にします</translation>
 <translation id="4916163929714267752">新しいウィンドウでリンクを開く</translation>
 <translation id="5030659775136592441">ブックマーク マネージャを表示します</translation>
 <translation id="5034421018520995080">ページの一番上に移動する</translation>
diff --git a/ash/components/strings/ash_components_strings_kn.xtb b/ash/components/strings/ash_components_strings_kn.xtb
index ecee5b7..4972784c 100644
--- a/ash/components/strings/ash_components_strings_kn.xtb
+++ b/ash/components/strings/ash_components_strings_kn.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">ವಿಳಾಸ ಪಟ್ಟಿಯಲ್ಲಿ ನಿಮ್ಮ ಇನ್‌ಪುಟ್‌ಗೆ www. ಮತ್ತು .com ಅನ್ನು ಸೇರಿಸಿ, ನಂತರ ಪುಟವನ್ನು ತೆರೆಯಿರಿ</translation>
+<translation id="1872219238824176091">ಪ್ರಸ್ತುತ ಡೆಸ್ಕ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, ನಂತರ <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> ಅಥವಾ <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">ಮುಂದಿನ ಟ್ಯಾಬ್‌ಗೆ ಹೋಗಿ</translation>
 <translation id="2010818616644390445">ವಿಂಡೋದಲ್ಲಿ ಕೊನೆಯ ಟ್ಯಾಬ್‌ಗೆ ಹೋಗಿ</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">ವಿಂಡೋಗಳ ನಡುವೆ ತ್ವರಿತವಾಗಿ ಬದಲಿಸಿ</translation>
 <translation id="2454251766545114447">ಡಿಸ್‌ಪ್ಲೇ ಅನ್ನು ಝೂಮ್ ಔಟ್ ಮಾಡಿ</translation>
 <translation id="2478303094958140141">ChromeVox (ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆ) ಆನ್‌ ಅಥವಾ ಆಫ್‌ ಮಾಡಿ</translation>
+<translation id="2488661730534396940">ಎಡಭಾಗದಲ್ಲಿರುವ ಡೆಸ್ಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">ವೆಬ್‌ ಪುಟವನ್ನು ಸ್ಕ್ರಾಲ್ ಡೌನ್ ಮಾಡಿ</translation>
 <translation id="2574014812750545982">ಪುಟದಲ್ಲಿನ ಝೂಮ್ ಮಟ್ಟವನ್ನು ಮರುಹೊಂದಿಸಿ</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, ನಂತರ <ph name="TAB" /> ಅಥವಾ <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಪುಟವನ್ನು ಮರುಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="2764005613199379871">ಹುಡುಕಾಟ ವಿಳಾಸ ಪಟ್ಟಿಯಲ್ಲಿ ಫೋಕಸ್ ಇರಿಸಿ</translation>
+<translation id="2774822903829597107">ಹೊಸ ಡೆಸ್ಕ್ ಒಂದನ್ನು ರಚಿಸಿ</translation>
 <translation id="2789868185375229787">ಪುಟದಲ್ಲಿ ಝೂಮ್ ಔಟ್ ಮಾಡಿ</translation>
 <translation id="2804480015716812239"><ph name="ALT" /> ಅನ್ನು ಒತ್ತಿರಿ ಮತ್ತು ಲಿಂಕ್‌ ಅನ್ನು ಕ್ಲಿಕ್‌ ಮಾಡಿ</translation>
 <translation id="2830827904629746450">ಬಲಭಾಗದಲ್ಲಿ ವಿಂಡೋವನ್ನು ಡಾಕ್‌ ಮಾಡಿ</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">ಭಾಗಶಃ ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ</translation>
 <translation id="4698850295812410683">ಸ್ಟೈಲಸ್‌ ಪರಿಕರಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="4801989101741319327">ಮುಂದಿನ ಅಕ್ಷರದ ಕೊನೆಗೆ ಸರಿಸಿ</translation>
+<translation id="4866066940972151697">ಬಲಭಾಗದಲ್ಲಿರುವ ಡೆಸ್ಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="4916163929714267752">ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಲಿಂಕ್ ತೆರೆಯಿರಿ</translation>
 <translation id="5030659775136592441">ಬುಕ್‌ಮಾರ್ಕ್ ನಿರ್ವಾಹಕವನ್ನು ತೋರಿಸಿ</translation>
 <translation id="5034421018520995080">ಪುಟದ ಮೇಲಿನ ಭಾಗಕ್ಕೆ ಹೋಗಿ</translation>
diff --git a/ash/components/strings/ash_components_strings_lv.xtb b/ash/components/strings/ash_components_strings_lv.xtb
index 9767e69..ff09291 100644
--- a/ash/components/strings/ash_components_strings_lv.xtb
+++ b/ash/components/strings/ash_components_strings_lv.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Pievienot www. un .com ievadītajam tekstam adreses joslā, pēc tam atvērt lapu</translation>
+<translation id="1872219238824176091">Noņemt pašreizējo darbvietu</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, pēc tam <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> vai <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Pāriet uz nākamo cilni</translation>
 <translation id="2010818616644390445">Pāriet uz loga pēdējo cilni</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Ātri pārslēgt logus</translation>
 <translation id="2454251766545114447">Tālināt displeja attēlu</translation>
 <translation id="2478303094958140141">Ieslēgt vai izslēgt ChromeVox (balss komentārus)</translation>
+<translation id="2488661730534396940">Aktivizēt darbvietu kreisajā pusē</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Ritināt tīmekļa lapu uz leju</translation>
 <translation id="2574014812750545982">Atiestatīt lapas tālummaiņas līmeni</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, pēc tam <ph name="TAB" /> vai <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Atkārtoti ielādēt pašreizējo lapu</translation>
 <translation id="2764005613199379871">Pārvietot kursoru meklēšanas adreses joslā</translation>
+<translation id="2774822903829597107">Izveidot jaunu darbvietu</translation>
 <translation id="2789868185375229787">Tālināt lapas saturu</translation>
 <translation id="2804480015716812239">Nospiediet <ph name="ALT" /> un noklikšķiniet uz saites</translation>
 <translation id="2830827904629746450">Dokot logu labajā pusē</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Iegūt daļēju ekrānuzņēmumu</translation>
 <translation id="4698850295812410683">Rādīt skārienekrāna pildspalvas rīkus</translation>
 <translation id="4801989101741319327">Pāriet uz nākamā vārda beigām</translation>
+<translation id="4866066940972151697">Aktivizēt darbvietu labajā pusē</translation>
 <translation id="4916163929714267752">Atvērt saiti jaunā logā</translation>
 <translation id="5030659775136592441">Rādīt grāmatzīmju pārvaldnieku</translation>
 <translation id="5034421018520995080">Pāriet uz lapas sākumu</translation>
diff --git a/ash/components/strings/ash_components_strings_ms.xtb b/ash/components/strings/ash_components_strings_ms.xtb
index e2f1871..980c5cc 100644
--- a/ash/components/strings/ash_components_strings_ms.xtb
+++ b/ash/components/strings/ash_components_strings_ms.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Tambahkan www. dan .com pada input dalam bar alamat, kemudian buka halaman</translation>
+<translation id="1872219238824176091">Alih keluar meja semasa</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, kemudian <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> atau <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Pergi ke tab seterusnya</translation>
 <translation id="2010818616644390445">Pergi ke tab terakhir dalam tetingkap</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Beralih antara tetingkap dengan cepat</translation>
 <translation id="2454251766545114447">Paparkan Zum keluar</translation>
 <translation id="2478303094958140141">Hidupkan atau matikan ChromeVox (maklum balas yang dituturkan)</translation>
+<translation id="2488661730534396940">Aktifkan meja di sebelah kiri</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Tatal ke bawah halaman web</translation>
 <translation id="2574014812750545982">Tetapkan semula tahap zum pada halaman</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, kemudian <ph name="TAB" /> atau <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Muat semula halaman semasa anda</translation>
 <translation id="2764005613199379871">Letakkan fokus dalam bar alamat carian</translation>
+<translation id="2774822903829597107">Buat meja baharu</translation>
 <translation id="2789868185375229787">Zum keluar pada halaman</translation>
 <translation id="2804480015716812239">Tekan <ph name="ALT" /> dan klik pautan</translation>
 <translation id="2830827904629746450">Dokkan tetingkap di sebelah kanan</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Ambil tangkapan skrin separa</translation>
 <translation id="4698850295812410683">Tunjukkan alatan stilus</translation>
 <translation id="4801989101741319327">Alihkan ke akhir perkataan seterusnya</translation>
+<translation id="4866066940972151697">Aktifkan meja di sebelah kanan</translation>
 <translation id="4916163929714267752">Buka pautan dalam tetingkap baharu</translation>
 <translation id="5030659775136592441">Tunjukkan pengurus penanda halaman</translation>
 <translation id="5034421018520995080">Pergi ke bahagian atas halaman</translation>
diff --git a/ash/components/strings/ash_components_strings_nl.xtb b/ash/components/strings/ash_components_strings_nl.xtb
index 8cbd2ca..889c44d 100644
--- a/ash/components/strings/ash_components_strings_nl.xtb
+++ b/ash/components/strings/ash_components_strings_nl.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">www. en .com toevoegen aan je invoer in de adresbalk en de pagina vervolgens openen</translation>
+<translation id="1872219238824176091">Het huidige bureaublad verwijderen</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, en dan <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> of <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Naar het volgende tabblad gaan</translation>
 <translation id="2010818616644390445">Naar het laatste tabblad in het venster gaan</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Snel schakelen tussen vensters</translation>
 <translation id="2454251766545114447">Display uitzoomen</translation>
 <translation id="2478303094958140141">ChromeVox (gesproken feedback) in- of uitschakelen</translation>
+<translation id="2488661730534396940">Het bureaublad aan de linkerkant activeren</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Omlaag bladeren op de webpagina</translation>
 <translation id="2574014812750545982">Zoomniveau op de pagina resetten</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, en dan <ph name="TAB" /> of <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">De huidige pagina opnieuw laden</translation>
 <translation id="2764005613199379871">De focus in de zoek-/adresbalk plaatsen</translation>
+<translation id="2774822903829597107">Een nieuw bureaublad maken</translation>
 <translation id="2789868185375229787">Uitzoomen op de pagina</translation>
 <translation id="2804480015716812239">Druk op <ph name="ALT" /> en klik op een link</translation>
 <translation id="2830827904629746450">Een venster aan de rechterkant docken</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Gedeeltelijk screenshot maken</translation>
 <translation id="4698850295812410683">Stylustools weergeven</translation>
 <translation id="4801989101741319327">Naar het eind van het volgende woord gaan</translation>
+<translation id="4866066940972151697">Het bureaublad aan de rechterkant activeren</translation>
 <translation id="4916163929714267752">De link openen in een nieuw venster</translation>
 <translation id="5030659775136592441">Bookmarkmanager weergeven</translation>
 <translation id="5034421018520995080">Naar bovenkant van pagina gaan</translation>
diff --git a/ash/components/strings/ash_components_strings_pl.xtb b/ash/components/strings/ash_components_strings_pl.xtb
index 48ee79b..fb60a80a 100644
--- a/ash/components/strings/ash_components_strings_pl.xtb
+++ b/ash/components/strings/ash_components_strings_pl.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Dodaj www. i .com do ciągu wpisanego w pasku adresu i otwórz stronę</translation>
+<translation id="1872219238824176091">Usuń bieżące biurko</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, a następnie <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> lub <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Przejdź do następnej karty</translation>
 <translation id="2010818616644390445">Przejdź do ostatniej karty w oknie</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Przejdź szybko do innego okna</translation>
 <translation id="2454251766545114447">Pomniejsz obraz na ekranie</translation>
 <translation id="2478303094958140141">Włącz lub wyłącz ChromeVox (komunikaty głosowe)</translation>
+<translation id="2488661730534396940">Aktywuj biurko po lewej</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Przewiń stronę internetową w dół</translation>
 <translation id="2574014812750545982">Zresetuj poziom powiększenia na stronie</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, a następnie <ph name="TAB" /> lub <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Ponownie załaduj bieżącą stronę</translation>
 <translation id="2764005613199379871">Ustaw zaznaczenie na pasku adresu i wyszukiwania</translation>
+<translation id="2774822903829597107">Utwórz nowe biurko</translation>
 <translation id="2789868185375229787">Pomniejsz widok strony</translation>
 <translation id="2804480015716812239">Naciśnij <ph name="ALT" /> i kliknij link</translation>
 <translation id="2830827904629746450">Zadokuj okno po prawej stronie</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Zrób zrzut części ekranu</translation>
 <translation id="4698850295812410683">Pokaż narzędzia rysika</translation>
 <translation id="4801989101741319327">Przejdź na koniec następnego słowa</translation>
+<translation id="4866066940972151697">Aktywuj biurko po prawej</translation>
 <translation id="4916163929714267752">Otwórz link w nowym oknie</translation>
 <translation id="5030659775136592441">Pokaż menedżera zakładek</translation>
 <translation id="5034421018520995080">Przejdź na górę strony</translation>
diff --git a/ash/components/strings/ash_components_strings_pt-BR.xtb b/ash/components/strings/ash_components_strings_pt-BR.xtb
index 6b19327..e62d0df 100644
--- a/ash/components/strings/ash_components_strings_pt-BR.xtb
+++ b/ash/components/strings/ash_components_strings_pt-BR.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Adicionar www. e .com à entrada na barra de endereço e depois abrir a página</translation>
+<translation id="1872219238824176091">Remover a área de trabalho atual</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> e depois <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> ou <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Ir para a próxima guia</translation>
 <translation id="2010818616644390445">Ir para a última guia da janela</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Alternar rapidamente entre janelas</translation>
 <translation id="2454251766545114447">Diminuir zoom da tela</translation>
 <translation id="2478303094958140141">Ativar ou desativar o ChromeVox (feedback falado)</translation>
+<translation id="2488661730534396940">Ativar área de trabalho à esquerda</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Rolar a página da Web para baixo</translation>
 <translation id="2574014812750545982">Redefinir nível de zoom na página</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> e depois <ph name="TAB" /> ou <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Atualizar a página atual</translation>
 <translation id="2764005613199379871">Colocar o foco na barra de endereço de pesquisa</translation>
+<translation id="2774822903829597107">Criar uma nova área de trabalho</translation>
 <translation id="2789868185375229787">Diminuir zoom na página</translation>
 <translation id="2804480015716812239">Pressione <ph name="ALT" /> e clique em um link</translation>
 <translation id="2830827904629746450">Ancorar uma janela à direita</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Fazer uma captura de tela parcial</translation>
 <translation id="4698850295812410683">Mostrar ferramentas da stylus</translation>
 <translation id="4801989101741319327">Mover para o fim da próxima palavra</translation>
+<translation id="4866066940972151697">Ativar a área de trabalho à direita</translation>
 <translation id="4916163929714267752">Abrir o link em uma nova janela</translation>
 <translation id="5030659775136592441">Mostrar gerenciador de favoritos</translation>
 <translation id="5034421018520995080">Ir para a parte superior da página</translation>
diff --git a/ash/components/strings/ash_components_strings_pt-PT.xtb b/ash/components/strings/ash_components_strings_pt-PT.xtb
index bdc29c4..d312b05 100644
--- a/ash/components/strings/ash_components_strings_pt-PT.xtb
+++ b/ash/components/strings/ash_components_strings_pt-PT.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Adicionar www. e .com à informação introduzida na barra de endereço e, em seguida, abrir a página</translation>
+<translation id="1872219238824176091">Remova o espaço de trabalho atual.</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> e, em seguida, <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> ou <ph name="LEFT" />.</translation>
 <translation id="1996162290124031907">Aceder ao separador seguinte</translation>
 <translation id="2010818616644390445">Ir para o último separador na janela</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Alternar rapidamente entre janelas</translation>
 <translation id="2454251766545114447">Diminuir zoom do ecrã</translation>
 <translation id="2478303094958140141">Ativar ou desativar o ChromeVox (comentários de voz)</translation>
+<translation id="2488661730534396940">Ative o espaço de trabalho à esquerda.</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Deslocar-se para baixo na página Web</translation>
 <translation id="2574014812750545982">Repor o nível de zoom na página</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> e, em seguida, <ph name="TAB" /> ou <ph name="RIGHT" />.</translation>
 <translation id="2750942583782703988">Atualizar a página atual</translation>
 <translation id="2764005613199379871">Focar a barra de endereço da pesquisa</translation>
+<translation id="2774822903829597107">Crie um novo espaço de trabalho.</translation>
 <translation id="2789868185375229787">Reduzir a página</translation>
 <translation id="2804480015716812239">Prima <ph name="ALT" /> e clique num link.</translation>
 <translation id="2830827904629746450">Ancorar uma janela à direita</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Criar uma captura de ecrã parcial</translation>
 <translation id="4698850295812410683">Mostrar ferramentas da caneta stylus</translation>
 <translation id="4801989101741319327">Ir para o fim da palavra seguinte</translation>
+<translation id="4866066940972151697">Ative o espaço de trabalho à direita.</translation>
 <translation id="4916163929714267752">Abrir o link numa nova janela</translation>
 <translation id="5030659775136592441">Mostrar o gestor de marcadores</translation>
 <translation id="5034421018520995080">Ir para a parte superior da página</translation>
diff --git a/ash/components/strings/ash_components_strings_ro.xtb b/ash/components/strings/ash_components_strings_ro.xtb
index f26f45e..27b9924 100644
--- a/ash/components/strings/ash_components_strings_ro.xtb
+++ b/ash/components/strings/ash_components_strings_ro.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Adăugă www. și .com la ce ai introdus în bara de adrese, apoi deschide pagina</translation>
+<translation id="1872219238824176091">Elimină desktopul actual</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, apoi <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> sau <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Accesează fila următoare</translation>
 <translation id="2010818616644390445">Accesează ultima filă din fereastră</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Comută rapid între ferestre</translation>
 <translation id="2454251766545114447">Micșorare</translation>
 <translation id="2478303094958140141">Activează sau dezactivează ChromeVox (feedback rostit)</translation>
+<translation id="2488661730534396940">Activează desktopul din stânga</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Derulează în jos pagina web</translation>
 <translation id="2574014812750545982">Resetează nivelul de zoom al paginii</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, apoi <ph name="TAB" /> sau <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Reîncarcă pagina curentă</translation>
 <translation id="2764005613199379871">Focalizează pe bara de adrese pentru căutare</translation>
+<translation id="2774822903829597107">Creează un nou desktop</translation>
 <translation id="2789868185375229787">Micșorează pagina</translation>
 <translation id="2804480015716812239">Apasă pe <ph name="ALT" /> și dă clic pe un link</translation>
 <translation id="2830827904629746450">Andochează o fereastră în partea dreaptă</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Realizează o captură de ecran parțială</translation>
 <translation id="4698850295812410683">Afișează instrumentele pentru creion</translation>
 <translation id="4801989101741319327">Mută cursorul la finalul următorului cuvânt</translation>
+<translation id="4866066940972151697">Activează desktopul din dreapta</translation>
 <translation id="4916163929714267752">Deschide linkul într-o fereastră nouă</translation>
 <translation id="5030659775136592441">Afișează managerul de marcaje</translation>
 <translation id="5034421018520995080">Navighează la începutul paginii</translation>
diff --git a/ash/components/strings/ash_components_strings_ru.xtb b/ash/components/strings/ash_components_strings_ru.xtb
index 0a80acb..cb78161a 100644
--- a/ash/components/strings/ash_components_strings_ru.xtb
+++ b/ash/components/strings/ash_components_strings_ru.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Добавить www. и .com к тексту в адресной строке и открыть веб-страницу</translation>
+<translation id="1872219238824176091">Удалить текущий рабочий стол</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, затем <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> или <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Перейти на следующую вкладку</translation>
 <translation id="2010818616644390445">Перейти на последнюю вкладку в окне</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Перейти в другое окно</translation>
 <translation id="2454251766545114447">Уменьшить масштаб экрана</translation>
 <translation id="2478303094958140141">Включить или отключить ChromeVox (озвучивание действий)</translation>
+<translation id="2488661730534396940">Включить рабочий стол слева</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Прокрутить веб-страницу вниз</translation>
 <translation id="2574014812750545982">Восстановить исходный масштаб страницы</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, затем <ph name="TAB" /> или <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Обновить страницу</translation>
 <translation id="2764005613199379871">Переместить курсор в адресную строку.</translation>
+<translation id="2774822903829597107">Создать рабочий стол</translation>
 <translation id="2789868185375229787">Уменьшить масштаб страницы</translation>
 <translation id="2804480015716812239">Нажать <ph name="ALT" /> и перейти по ссылке</translation>
 <translation id="2830827904629746450">Закрепить окно справа</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Сделать скриншот части экрана</translation>
 <translation id="4698850295812410683">Показать инструменты стилуса</translation>
 <translation id="4801989101741319327">Перейти к концу следующего слова</translation>
+<translation id="4866066940972151697">Включить рабочий стол справа</translation>
 <translation id="4916163929714267752">Открыть ссылку в новом окне</translation>
 <translation id="5030659775136592441">Открыть диспетчер закладок</translation>
 <translation id="5034421018520995080">Перейти к верхней части экрана</translation>
diff --git a/ash/components/strings/ash_components_strings_sk.xtb b/ash/components/strings/ash_components_strings_sk.xtb
index 3e7bcc4..2584113b 100644
--- a/ash/components/strings/ash_components_strings_sk.xtb
+++ b/ash/components/strings/ash_components_strings_sk.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Pridanie predpony www. a prípony .com k zadanému vstupu v paneli s adresou a následné otvorenie stránky</translation>
+<translation id="1872219238824176091">Odstrániť aktuálne pracovné prostredie</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, potom <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> alebo <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Prechod na ďalšiu kartu</translation>
 <translation id="2010818616644390445">Prechod na poslednú kartu v okne</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Rýchle prepínanie okien</translation>
 <translation id="2454251766545114447">Oddialenie zobrazenia</translation>
 <translation id="2478303094958140141">Zapnutie alebo vypnutie funkcie ChromeVox (hovorená spätná väzba)</translation>
+<translation id="2488661730534396940">Aktivovať pracovné prostredie naľavo</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Posunutie nadol na webovej stránke</translation>
 <translation id="2574014812750545982">Obnovenie úrovne priblíženia/oddialenia na stránke</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, potom <ph name="TAB" /> alebo <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Obnovenie aktuálnej stránky</translation>
 <translation id="2764005613199379871">Umiestnenie zamerania do panela s adresou vyhľadávania</translation>
+<translation id="2774822903829597107">Vytvoriť nové pracovné prostredie</translation>
 <translation id="2789868185375229787">Oddialenie stránky</translation>
 <translation id="2804480015716812239">Stlačenie klávesa <ph name="ALT" /> a kliknutie na odkaz</translation>
 <translation id="2830827904629746450">Ukotvenie okna vpravo</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Vytvorenie čiastočnej snímky obrazovky</translation>
 <translation id="4698850295812410683">Zobrazenie nástrojov dotykového pera</translation>
 <translation id="4801989101741319327">Posunutie kurzora na koniec ďalšieho slova</translation>
+<translation id="4866066940972151697">Aktivovať pracovné prostredie napravo</translation>
 <translation id="4916163929714267752">Otvorenie odkazu v novom okne</translation>
 <translation id="5030659775136592441">Zobrazenie správcu záložiek</translation>
 <translation id="5034421018520995080">Prechod na začiatok stránky</translation>
diff --git a/ash/components/strings/ash_components_strings_sl.xtb b/ash/components/strings/ash_components_strings_sl.xtb
index 6b98f87..3fdf562 100644
--- a/ash/components/strings/ash_components_strings_sl.xtb
+++ b/ash/components/strings/ash_components_strings_sl.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /> <ph name="SEPARATOR1" /> <ph name="MODIFIER2" /> <ph name="SEPARATOR2" /> <ph name="KEY" /></translation>
 <translation id="1733525068429116555">Dodajanje www. in .com vnosu v naslovni vrstici, nato pa odpiranje strani</translation>
+<translation id="1872219238824176091">Odstranitev trenutne delovne površine</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /> <ph name="SEPARATOR1" /> <ph name="ALT" /> <ph name="SEPARATOR2" /> <ph name="L" />, nato <ph name="SHIFT2" /> <ph name="SEPARATOR3" /> <ph name="TAB" /> ali <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Premik na naslednji zavihek</translation>
 <translation id="2010818616644390445">Premik na zadnji zavihek v oknu</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Hitro preklapljanje med okni</translation>
 <translation id="2454251766545114447">Pomanjšava prikaza</translation>
 <translation id="2478303094958140141">Vklop ali izklop ChromeVoxa (glasovni odziv)</translation>
+<translation id="2488661730534396940">Aktiviranje namizja na levi</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Pomikanje navzdol po spletni strani</translation>
 <translation id="2574014812750545982">Ponastavitev povečave/pomanjšave na strani</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /> <ph name="SEPARATOR1" /> <ph name="ALT" /> <ph name="SEPARATOR2" /> <ph name="L" />, nato <ph name="TAB" /> ali <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Vnovično nalaganje trenutne strani</translation>
 <translation id="2764005613199379871">Preklop v naslovno vrstico za iskanje</translation>
+<translation id="2774822903829597107">Ustvarjanje novega namizja</translation>
 <translation id="2789868185375229787">Pomanjšanje strani</translation>
 <translation id="2804480015716812239">Pritisnite <ph name="ALT" /> in kliknite povezavo</translation>
 <translation id="2830827904629746450">Zasidranje okna na desni</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Ustvarjanje delnega posnetka zaslona</translation>
 <translation id="4698850295812410683">Prikaz orodij pisala</translation>
 <translation id="4801989101741319327">Premik na konec naslednje besede</translation>
+<translation id="4866066940972151697">Aktiviranje namizja na desni</translation>
 <translation id="4916163929714267752">Odpiranje povezave v novem oknu</translation>
 <translation id="5030659775136592441">Prikaz upravitelja zaznamkov</translation>
 <translation id="5034421018520995080">Premik na vrh strani</translation>
diff --git a/ash/components/strings/ash_components_strings_sr.xtb b/ash/components/strings/ash_components_strings_sr.xtb
index 3f0b55a..bb85d94 100644
--- a/ash/components/strings/ash_components_strings_sr.xtb
+++ b/ash/components/strings/ash_components_strings_sr.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Додајте елементе www. и .com уносу у траци за адресу, па отворите страницу</translation>
+<translation id="1872219238824176091">Уклоните актуелну радну површину</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, па <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> или <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Идите на следећу картицу</translation>
 <translation id="2010818616644390445">Идите на последњу картицу у прозору</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Брзо прелазите са једног прозора на други</translation>
 <translation id="2454251766545114447">Умањите приказ</translation>
 <translation id="2478303094958140141">Укључите или искључите ChromeVox (говорне повратне информације)</translation>
+<translation id="2488661730534396940">Активирајте радну површину на левој страни</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Померајте се надоле на веб-страници</translation>
 <translation id="2574014812750545982">Ресетујте ниво зумирања на страници</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, па <ph name="TAB" /> или <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Поново учитајте тренутну страницу</translation>
 <translation id="2764005613199379871">Поставите фокус на траку за адресу и претрагу</translation>
+<translation id="2774822903829597107">Направите нову радну површину</translation>
 <translation id="2789868185375229787">Умањите страницу</translation>
 <translation id="2804480015716812239">Притисните <ph name="ALT" /> и кликните на линк</translation>
 <translation id="2830827904629746450">Закачите прозор на десној страни</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Направите делимичан снимак екрана</translation>
 <translation id="4698850295812410683">Прикажите алатке за писаљку</translation>
 <translation id="4801989101741319327">Померите на крај следеће речи</translation>
+<translation id="4866066940972151697">Активирајте радну површину на десној страни</translation>
 <translation id="4916163929714267752">Отворите линк у новом прозору</translation>
 <translation id="5030659775136592441">Прикажите менаџер обележивача</translation>
 <translation id="5034421018520995080">Идите на врх странице</translation>
diff --git a/ash/components/strings/ash_components_strings_ta.xtb b/ash/components/strings/ash_components_strings_ta.xtb
index 1c4e901..6420e86 100644
--- a/ash/components/strings/ash_components_strings_ta.xtb
+++ b/ash/components/strings/ash_components_strings_ta.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">முகவரிப் பட்டியில் உங்கள் உள்ளீட்டில் www., .com ஆகியவற்றைச் சேர்த்து, பின்னர் பக்கத்தைத் திறக்கும்</translation>
+<translation id="1872219238824176091">தற்போதைய டெஸ்க்கை அகற்றும்</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, பின்னர் <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> அல்லது <ph name="LEFT" />ஐ அழுத்தவும்</translation>
 <translation id="1996162290124031907">அடுத்த தாவலுக்குச் செல்லும்</translation>
 <translation id="2010818616644390445">சாளரத்தில் கடைசித் தாவலுக்குச் செல்லும்</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">சாளரங்களுக்கிடையே விரைவாக மாற்றும்</translation>
 <translation id="2454251766545114447">காட்சியின் அளவைச் சிறிதாக்கும்</translation>
 <translation id="2478303094958140141">ChromeVoxஐ (பேச்சுவடிவக் கருத்து) இயக்கும் அல்லது முடக்கும்</translation>
+<translation id="2488661730534396940">இடதுபுறத்தில் உள்ள டெஸ்க்கை ஆக்டிவேட் செய்யும்</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">இணையப் பக்கத்தில் கீழே செல்லும்</translation>
 <translation id="2574014812750545982">பக்கத்தில், இயல்பான அளவிற்குக் காட்சியை மீட்டமைக்கும்</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, பின்னர் <ph name="TAB" /> அல்லது <ph name="RIGHT" />ஐ அழுத்தவும்</translation>
 <translation id="2750942583782703988">உங்கள் தற்போதைய பக்கத்தை மீண்டும் ஏற்றும்</translation>
 <translation id="2764005613199379871">தேடல் முகவரிப் பட்டியில் ஃபோகஸ் செய்யும்</translation>
+<translation id="2774822903829597107">புதிய டெஸ்க்கை உருவாக்கும்</translation>
 <translation id="2789868185375229787">பக்கத்தைச் சிறிதாக்கிக் காட்டும்</translation>
 <translation id="2804480015716812239"><ph name="ALT" />ஐ அழுத்தி, இணைப்பைக் கிளிக் செய்யவும்</translation>
 <translation id="2830827904629746450">சாளரத்தை வலதுபுறத்தில் டாக் செய்யும்</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">பகுதியளவு ஸ்கிரீன்ஷாட்டை எடுக்கும்</translation>
 <translation id="4698850295812410683">ஸ்டைலஸ் கருவிகளைக் காட்டும்</translation>
 <translation id="4801989101741319327">அடுத்த சொல்லின் முடிவுக்கு நகர்த்தும்</translation>
+<translation id="4866066940972151697">வலதுபுறத்தில் உள்ள டெஸ்க்கை ஆக்டிவேட் செய்யும்</translation>
 <translation id="4916163929714267752">இணைப்பை புதிய சாளரத்தில் திறக்கும்</translation>
 <translation id="5030659775136592441">புத்தகக்குறி நிர்வாகியைக் காட்டும்</translation>
 <translation id="5034421018520995080">பக்கத்தின் மேல்பக்கத்திற்குச் செல்லும்</translation>
diff --git a/ash/components/strings/ash_components_strings_th.xtb b/ash/components/strings/ash_components_strings_th.xtb
index fe81a7f4..3ef142f6 100644
--- a/ash/components/strings/ash_components_strings_th.xtb
+++ b/ash/components/strings/ash_components_strings_th.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">เพิ่ม www. และ .com ในข้อมูลที่คุณป้อนลงในแถบที่อยู่ แล้วเปิดหน้าเว็บนั้น</translation>
+<translation id="1872219238824176091">นำพื้นที่ทำงานปัจจุบันออก</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> แล้วกด <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> หรือ <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">ไปที่แท็บถัดไป</translation>
 <translation id="2010818616644390445">ไปที่แท็บสุดท้ายในหน้าต่าง</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">สลับไปมาระหว่างหน้าต่างอย่างรวดเร็ว</translation>
 <translation id="2454251766545114447">ซูมหน้าจอออก</translation>
 <translation id="2478303094958140141">เปิดหรือปิด ChromeVox (อธิบายและอ่านออกเสียง)</translation>
+<translation id="2488661730534396940">เปิดใช้งานพื้นที่ทำงานด้านซ้าย</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">เลื่อนหน้าเว็บลง</translation>
 <translation id="2574014812750545982">รีเซ็ตระดับการซูมในหน้าเว็บ</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> แล้วกด <ph name="TAB" /> หรือ <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">โหลดหน้าเว็บปัจจุบันซ้ำ</translation>
 <translation id="2764005613199379871">วางโฟกัสบนแถบที่อยู่การค้นหา</translation>
+<translation id="2774822903829597107">สร้างพื้นที่ทำงานใหม่</translation>
 <translation id="2789868185375229787">ย่อหน้าเว็บ</translation>
 <translation id="2804480015716812239">กด <ph name="ALT" /> และคลิกลิงก์</translation>
 <translation id="2830827904629746450">จัดวางหน้าต่างทางด้านขวา</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">ถ่ายภาพหน้าจอบางส่วน</translation>
 <translation id="4698850295812410683">แสดงเครื่องมือสไตลัส</translation>
 <translation id="4801989101741319327">ย้ายไปท้ายคำถัดไป</translation>
+<translation id="4866066940972151697">เปิดใช้งานพื้นที่ทำงานด้านขวา</translation>
 <translation id="4916163929714267752">เปิดลิงก์ในหน้าต่างใหม่</translation>
 <translation id="5030659775136592441">แสดงการจัดการบุ๊กมาร์ก</translation>
 <translation id="5034421018520995080">ไปที่ด้านบนสุดของหน้า</translation>
diff --git a/ash/components/strings/ash_components_strings_uk.xtb b/ash/components/strings/ash_components_strings_uk.xtb
index 05b49ef9..823044b 100644
--- a/ash/components/strings/ash_components_strings_uk.xtb
+++ b/ash/components/strings/ash_components_strings_uk.xtb
@@ -23,6 +23,7 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1732295673545939435"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="KEY" /></translation>
 <translation id="1733525068429116555">Додати www. та .com до тексту в адресному рядку й відкрити сторінку</translation>
+<translation id="1872219238824176091">Видалити поточний робочий стіл</translation>
 <translation id="1920446759863417809"><ph name="SHIFT1" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, а тоді <ph name="SHIFT2" /><ph name="SEPARATOR3" /><ph name="TAB" /> або <ph name="LEFT" /></translation>
 <translation id="1996162290124031907">Перейти на наступну вкладку</translation>
 <translation id="2010818616644390445">Перейти на останню вкладку у вікні</translation>
@@ -42,6 +43,7 @@
 <translation id="2441202986792279177">Швидко переходити між вікнами</translation>
 <translation id="2454251766545114447">Віддаляє екран</translation>
 <translation id="2478303094958140141">Увімкнути або вимкнути ChromeVox (голосові підказки)</translation>
+<translation id="2488661730534396940">Активувати робочий стіл ліворуч</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Прокрутити веб-сторінку вниз</translation>
 <translation id="2574014812750545982">Скидає масштабування на сторінці</translation>
@@ -49,6 +51,7 @@
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, а тоді <ph name="TAB" /> або <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Оновити поточну сторінку</translation>
 <translation id="2764005613199379871">Перейти в адресний рядок пошуку</translation>
+<translation id="2774822903829597107">Створити новий робочий стіл</translation>
 <translation id="2789868185375229787">Зменшити масштаб сторінки</translation>
 <translation id="2804480015716812239">Натисніть <ph name="ALT" /> і посилання</translation>
 <translation id="2830827904629746450">Закріпити вікно праворуч</translation>
@@ -100,6 +103,7 @@
 <translation id="4642092649622328492">Зробити частковий знімок екрана</translation>
 <translation id="4698850295812410683">Показати інструменти стилуса</translation>
 <translation id="4801989101741319327">Перейти в кінець наступного слова</translation>
+<translation id="4866066940972151697">Активувати робочий стіл праворуч</translation>
 <translation id="4916163929714267752">Відкрити посилання в новому вікні</translation>
 <translation id="5030659775136592441">Показати диспетчер закладок</translation>
 <translation id="5034421018520995080">Перейти вгору сторінки</translation>
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc
index f66026d6..f4e662b 100644
--- a/ash/display/display_manager_unittest.cc
+++ b/ash/display/display_manager_unittest.cc
@@ -4433,7 +4433,8 @@
   EXPECT_EQ(gfx::RectF(0.0f, 100.0f, 800.0f, 600.0f), transformed_rect3);
 }
 
-TEST_F(DisplayManagerTest, SoftwareMirrorRotationForNonTablet) {
+// crbug.com/1003339
+TEST_F(DisplayManagerTest, DISABLED_SoftwareMirrorRotationForNonTablet) {
   MirrorWindowTestApi test_api;
   UpdateDisplay("400x300,800x800");
 
diff --git a/ash/shelf/overflow_bubble_view.cc b/ash/shelf/overflow_bubble_view.cc
index a47745ac..ee613501 100644
--- a/ash/shelf/overflow_bubble_view.cc
+++ b/ash/shelf/overflow_bubble_view.cc
@@ -22,6 +22,7 @@
 #include "ui/events/event.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/scoped_canvas.h"
+#include "ui/views/layout/layout_provider.h"
 #include "ui/views/view_model.h"
 #include "ui/views/widget/widget.h"
 
@@ -230,7 +231,9 @@
   DCHECK(shelf_view_);
   DCHECK(GetShelf());
 
-  set_border_radius(ShelfConfig::Get()->shelf_size() / 2);
+  const int shelf_size = ShelfConfig::Get()->shelf_size() / 2;
+  set_border_radius(views::LayoutProvider::Get()->GetCornerRadiusMetric(
+      views::EMPHASIS_MAXIMUM, {shelf_size, shelf_size}));
   SetArrow(views::BubbleBorder::NONE);
   SetBackground(nullptr);
   set_shadow(views::BubbleBorder::NO_ASSETS);
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index fa3595a..6ad9096 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">شاحن منخفض الطاقة</translation>
 <translation id="2135456203358955318">المكبّر الذي تم إرساؤه</translation>
 <translation id="2144487987174258011">‏إعادة التشغيل لتحديث Adobe Flash Player</translation>
+<translation id="2148902151539191989">رجوع</translation>
 <translation id="2208323208084708176">وضع سطح المكتب الموحد</translation>
 <translation id="2220572644011485463">رقم التعريف الشخصي أو كلمة المرور</translation>
 <translation id="225680501294068881">جارٍ البحث عن أجهزة...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">‏لا يتوفَّر "مساعد Google" في جلسة تجريبية.</translation>
 <translation id="479989351350248267">بحث</translation>
 <translation id="4804818685124855865">قطع الاتصال</translation>
+<translation id="4814539958450445987">شاشة تسجيل الدخول</translation>
 <translation id="4831034276697007977">هل تريد فعلاً إيقاف النقرات التلقائية؟</translation>
 <translation id="4849058404725798627">تمييز الكائن باستخدام تركيز لوحة المفاتيح</translation>
 <translation id="485592688953820832">عدم اتخاذ أي إجراء (إيقاف مؤقَّت)</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 604cc45..694eac7e 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Зарядно устройство с малка мощност</translation>
 <translation id="2135456203358955318">Лупа в прикрепен режим</translation>
 <translation id="2144487987174258011">Рестартирайте, за да актуализирате Adobe Flash Player</translation>
+<translation id="2148902151539191989">НАЗАД</translation>
 <translation id="2208323208084708176">Режим на обединен работен плот</translation>
 <translation id="2220572644011485463">ПИН код или парола</translation>
 <translation id="225680501294068881">Сканира се за устройства...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google Асистент не е налице по време на демонстрационна сесия.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Изключване</translation>
+<translation id="4814539958450445987">Екран за вход</translation>
 <translation id="4831034276697007977">Наистина ли искате да изключите автоматичните кликвания?</translation>
 <translation id="4849058404725798627">Открояване на обекта, върху който е фокусът от клавиатурата</translation>
 <translation id="485592688953820832">Без действие (пауза)</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 5b3472b..659912a 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Carregador de baix consum</translation>
 <translation id="2135456203358955318">Lupa acoblada</translation>
 <translation id="2144487987174258011">Reinicia per actualitzar Adobe Flash Player</translation>
+<translation id="2148902151539191989">ENRERE</translation>
 <translation id="2208323208084708176">Mode d'escriptori unificat</translation>
 <translation id="2220572644011485463">PIN o contrasenya</translation>
 <translation id="225680501294068881">S'estan cercant dispositius...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">L'Assistent de Google no està disponible en les sessions de demostració.</translation>
 <translation id="479989351350248267">cerca</translation>
 <translation id="4804818685124855865">Desconnecta</translation>
+<translation id="4814539958450445987">Pantalla d'inici de sessió</translation>
 <translation id="4831034276697007977">Confirmes que vols desactivar els clics automàtics?</translation>
 <translation id="4849058404725798627">Ressalta l'objecte amb el focus del teclat</translation>
 <translation id="485592688953820832">No facis res (pausa)</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index e7a2ba9..62690e8 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Nabíječka má příliš nízký výkon</translation>
 <translation id="2135456203358955318">Zadokovaná lupa</translation>
 <translation id="2144487987174258011">Aktualizace přehrávače Adobe Flash Player vyžaduje restart</translation>
+<translation id="2148902151539191989">ZPĚT</translation>
 <translation id="2208323208084708176">Jednotný režim klasické plochy</translation>
 <translation id="2220572644011485463">PIN nebo heslo</translation>
 <translation id="225680501294068881">Vyhledávání zařízení…</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Asistent Google není v ukázkové relaci k dispozici.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Odpojit</translation>
+<translation id="4814539958450445987">Přihlašovací obrazovka</translation>
 <translation id="4831034276697007977">Opravdu chcete automatická kliknutí vypnout?</translation>
 <translation id="4849058404725798627">Zvýraznit objekt se zaměřením pro zadávání</translation>
 <translation id="485592688953820832">Žádná akce (pozastavit)</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index a04b7b2..e77ecf8a 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Oplader ved lav kraft</translation>
 <translation id="2135456203358955318">Fastgjort lupvindue</translation>
 <translation id="2144487987174258011">Genstart for at opdatere Adobe Flash Player</translation>
+<translation id="2148902151539191989">TILBAGE</translation>
 <translation id="2208323208084708176">Samlet skrivebordstilstand</translation>
 <translation id="2220572644011485463">Pin- eller adgangskode</translation>
 <translation id="225680501294068881">Søger efter enheder...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google Assistent er ikke tilgængelig i en demosession.</translation>
 <translation id="479989351350248267">søg</translation>
 <translation id="4804818685124855865">Afbryd</translation>
+<translation id="4814539958450445987">Loginskærm</translation>
 <translation id="4831034276697007977">Er du sikker på, at du vil deaktivere automatiske klik?</translation>
 <translation id="4849058404725798627">Fremhæv element med tastaturfokus</translation>
 <translation id="485592688953820832">Ingen handling (pause)</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 5751db0..bfa105c9 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Schwaches Ladegerät</translation>
 <translation id="2135456203358955318">Angedockte Lupe</translation>
 <translation id="2144487987174258011">Neu starten, um den Adobe Flash Player zu aktualisieren</translation>
+<translation id="2148902151539191989">ZURÜCK</translation>
 <translation id="2208323208084708176">Unified Desktop-Modus</translation>
 <translation id="2220572644011485463">PIN oder Passwort</translation>
 <translation id="225680501294068881">Nach Geräten wird gesucht...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">In Demositzungen ist Google Assistant nicht verfügbar.</translation>
 <translation id="479989351350248267">Suchen</translation>
 <translation id="4804818685124855865">Verbindung trennen</translation>
+<translation id="4814539958450445987">Anmeldebildschirm</translation>
 <translation id="4831034276697007977">Möchten Sie automatische Klicks wirklich deaktivieren?</translation>
 <translation id="4849058404725798627">Objekt mit Tastaturfokus hervorheben</translation>
 <translation id="485592688953820832">Keine Aktion (Pause)</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 4c59e54..47293c3 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Χαμηλή ισχύς φορτιστή</translation>
 <translation id="2135456203358955318">Μεγεθυντικός φακός σε παράθυρο</translation>
 <translation id="2144487987174258011">Κάντε επανεκκίνηση για να ενημερώσετε το Adobe Flash Player</translation>
+<translation id="2148902151539191989">ΠΙΣΩ</translation>
 <translation id="2208323208084708176">Ενιαία λειτουργία επιφάνειας εργασίας.</translation>
 <translation id="2220572644011485463">PIN ή κωδικός πρόσβασης</translation>
 <translation id="225680501294068881">Σάρωση για συσκευές…</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Ο Βοηθός Google δεν είναι διαθέσιμος σε περίοδο λειτουργίας επίδειξης.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Αποσύνδεση</translation>
+<translation id="4814539958450445987">Οθόνη σύνδεσης</translation>
 <translation id="4831034276697007977">Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε τα αυτόματα κλικ;</translation>
 <translation id="4849058404725798627">Επισήμανση αντικειμένου με εστίαση στο πληκτρολόγιο</translation>
 <translation id="485592688953820832">Καμία ενέργεια (παύση)</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 6592e6e2..5dd9a750 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Carga lenta</translation>
 <translation id="2135456203358955318">Lupa con vista acoplada</translation>
 <translation id="2144487987174258011">Reinicia para actualizar Adobe Flash Player</translation>
+<translation id="2148902151539191989">ATRÁS</translation>
 <translation id="2208323208084708176">Modo de escritorio unificado</translation>
 <translation id="2220572644011485463">PIN o contraseña</translation>
 <translation id="225680501294068881">Buscando dispositivos...</translation>
@@ -263,6 +264,7 @@
 <translation id="4778095205580009397">El Asistente de Google no está disponible en la sesión de demostración.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Desconectar</translation>
+<translation id="4814539958450445987">Pantalla de acceso</translation>
 <translation id="4831034276697007977">¿Confirmas que quieres desactivar los clics automáticos?</translation>
 <translation id="4849058404725798627">Resaltar el objeto con el enfoque del teclado</translation>
 <translation id="485592688953820832">No es necesaria ninguna acción (pausa)</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 43171d7d..8544fe7 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Carga lenta</translation>
 <translation id="2135456203358955318">Lupa fijada</translation>
 <translation id="2144487987174258011">Reinicia para actualizar Adobe Flash Player</translation>
+<translation id="2148902151539191989">ATRÁS</translation>
 <translation id="2208323208084708176">Modo de escritorio unificado</translation>
 <translation id="2220572644011485463">PIN o contraseña</translation>
 <translation id="225680501294068881">Buscando dispositivos...</translation>
@@ -263,6 +264,7 @@
 <translation id="4778095205580009397">El Asistente de Google no está disponible en las sesiones de demostración.</translation>
 <translation id="479989351350248267">buscar</translation>
 <translation id="4804818685124855865">Desvincular</translation>
+<translation id="4814539958450445987">Pantalla de inicio de sesión</translation>
 <translation id="4831034276697007977">¿Seguro que quieres desactivar los clics automáticos?</translation>
 <translation id="4849058404725798627">Resaltar el objeto con el foco del teclado</translation>
 <translation id="485592688953820832">Ninguna acción (pausa)</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 20c0f1be..130cc2c 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Väikese energiakuluga laadija</translation>
 <translation id="2135456203358955318">Dokitud luup</translation>
 <translation id="2144487987174258011">Taaskäivitage Adobe Flash Playeri värskendamiseks</translation>
+<translation id="2148902151539191989">TAGASI</translation>
 <translation id="2208323208084708176">Ühendatud töölaua režiim</translation>
 <translation id="2220572644011485463">PIN-kood või parool</translation>
 <translation id="225680501294068881">Seadmete skannimine ...</translation>
@@ -263,6 +264,7 @@
 <translation id="4778095205580009397">Google'i assistent ei ole demoseansi puhul saadaval.</translation>
 <translation id="479989351350248267">otsing</translation>
 <translation id="4804818685124855865">Katkesta ühendus</translation>
+<translation id="4814539958450445987">Sisselogimiskuva</translation>
 <translation id="4831034276697007977">Kas soovite automaatsed klikid kindlasti välja lülitada?</translation>
 <translation id="4849058404725798627">Klaviatuuri fookusega objekti esiletõstmine</translation>
 <translation id="485592688953820832">Toiming puudub (peatamine)</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index e27a33f..71100a3 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">شارژر برق ضعیف</translation>
 <translation id="2135456203358955318">ذره‌بین متصل</translation>
 <translation id="2144487987174258011">‏برای به‌روزرسانی Adobe Flash Player، راه‌اندازی مجدد کنید</translation>
+<translation id="2148902151539191989">برگشت</translation>
 <translation id="2208323208084708176">حالت میزکار یکپارچه</translation>
 <translation id="2220572644011485463">پین یا گذرواژه</translation>
 <translation id="225680501294068881">درحال جستجو برای دستگاه‌ها...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">‏«دستیار Google» در جلسه نمایشی در دسترس نیست.</translation>
 <translation id="479989351350248267">جستجو</translation>
 <translation id="4804818685124855865">قطع اتصال</translation>
+<translation id="4814539958450445987">صفحه ورود به سیستم</translation>
 <translation id="4831034276697007977">مطمئنید می‌خواهید کلیک‌های خودکار را خاموش کنید؟</translation>
 <translation id="4849058404725798627">برجسته کردن شیء با فوکوس صفحه‌کلید</translation>
 <translation id="485592688953820832">بی‌حرکت (مکث)</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 59174e7d..6bf891c 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Pienitehoinen laturi</translation>
 <translation id="2135456203358955318">Kiinnitetty suurennus</translation>
 <translation id="2144487987174258011">Päivitä Adobe Flash Player käynnistämällä uudelleen.</translation>
+<translation id="2148902151539191989">TAKAISIN</translation>
 <translation id="2208323208084708176">Yhtenäisen työpöydän tila</translation>
 <translation id="2220572644011485463">PIN-koodi tai salasana</translation>
 <translation id="225680501294068881">Etsitään laitteita...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google Assistantia ei voi käyttää demo-käyttökerralla.</translation>
 <translation id="479989351350248267">haku</translation>
 <translation id="4804818685124855865">Katkaise yhteys</translation>
+<translation id="4814539958450445987">Kirjautumisnäyttö</translation>
 <translation id="4831034276697007977">Haluatko varmasti lopettaa automaattisen klikkaamisen?</translation>
 <translation id="4849058404725798627">Korosta tekstin syöttökohde</translation>
 <translation id="485592688953820832">Ei toimenpiteitä (keskeytä)</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 28425e54..65526bf 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Chargeur de faible puissance</translation>
 <translation id="2135456203358955318">Loupe ancrée</translation>
 <translation id="2144487987174258011">Redémarrez pour mettre Adobe Flash Player à jour</translation>
+<translation id="2148902151539191989">RETOUR</translation>
 <translation id="2208323208084708176">Mode bureau unifié</translation>
 <translation id="2220572644011485463">Code ou mot de passe</translation>
 <translation id="225680501294068881">Recherche d'appareils…</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">L'Assistant Google n'est pas disponible dans une session de démonstration.</translation>
 <translation id="479989351350248267">rechercher</translation>
 <translation id="4804818685124855865">Se déconnecter</translation>
+<translation id="4814539958450445987">Écran de connexion</translation>
 <translation id="4831034276697007977">Voulez-vous vraiment désactiver les clics automatiques ?</translation>
 <translation id="4849058404725798627">Mettre l'objet sélectionné au clavier en surbrillance</translation>
 <translation id="485592688953820832">Aucune action (pause)</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 1249468..c61c849 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -224,6 +224,7 @@
 <translation id="4181841719683918333">भाषाएं</translation>
 <translation id="4195877955194704651">ऑटोमैटिक क्लिक बटन</translation>
 <translation id="4217571870635786043">लिखवाना</translation>
+<translation id="421885205185866088"><ph name="USER_EMAIL_ADDRESS" /> के लिए स्मार्ट कार्ड पिन</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4261870227682513959">सूचना सेटिंग दिखाएं. सूचनाएं बंद हैं</translation>
 <translation id="4269883910223712419">इस डिवाइस के एडमिन ये काम कर सकते हैं:</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index ac38e4b..4103ef3 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Punjač male snage</translation>
 <translation id="2135456203358955318">Usidreno povećalo</translation>
 <translation id="2144487987174258011">Ponovno pokrenite da biste ažurirali Adobe Flash Player</translation>
+<translation id="2148902151539191989">NATRAG</translation>
 <translation id="2208323208084708176">Način jedinstvene radne površine</translation>
 <translation id="2220572644011485463">PIN ili zaporka</translation>
 <translation id="225680501294068881">Pretraživanje uređaja...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google asistent nije dostupan u demosesiji.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Prekini vezu</translation>
+<translation id="4814539958450445987">Zaslon za prijavu</translation>
 <translation id="4831034276697007977">Jeste li sigurni da želite isključiti automatske klikove?</translation>
 <translation id="4849058404725798627">Istakni objekt fokusom na tipkovnici</translation>
 <translation id="485592688953820832">Nema radnje (pauza)</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index c14f226..ea440ca 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Kis teljesítményű töltő</translation>
 <translation id="2135456203358955318">Dokkolt nagyító</translation>
 <translation id="2144487987174258011">Az Adobe Flash Player frissítéséhez újraindítás szükséges</translation>
+<translation id="2148902151539191989">VISSZA</translation>
 <translation id="2208323208084708176">Egységes asztali mód</translation>
 <translation id="2220572644011485463">PIN-kód vagy jelszó</translation>
 <translation id="225680501294068881">Eszközök keresése...</translation>
@@ -263,6 +264,7 @@
 <translation id="4778095205580009397">A Google Segéd nem áll rendelkezésre bemutató munkamenetben.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Kapcsolat bontása</translation>
+<translation id="4814539958450445987">Bejelentkezési képernyő</translation>
 <translation id="4831034276697007977">Biztosan kikapcsolja az automatikus kattintásokat?</translation>
 <translation id="4849058404725798627">Objektum kiemelése billentyűzetfókusszal</translation>
 <translation id="485592688953820832">Nincs művelet (szünet)</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index 5783fd0..e6ae426f 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Caricabatterie a basso consumo</translation>
 <translation id="2135456203358955318">Lente d'ingrandimento ancorata</translation>
 <translation id="2144487987174258011">Riavvia per aggiornare Adobe Flash Player</translation>
+<translation id="2148902151539191989">INDIETRO</translation>
 <translation id="2208323208084708176">Modalità desktop unificato</translation>
 <translation id="2220572644011485463">PIN o password</translation>
 <translation id="225680501294068881">Ricerca dispositivi in corso...</translation>
@@ -263,6 +264,7 @@
 <translation id="4778095205580009397">L'Assistente Google non è disponibile in una sessione demo.</translation>
 <translation id="479989351350248267">ricerca</translation>
 <translation id="4804818685124855865">Disconnetti</translation>
+<translation id="4814539958450445987">Schermata di accesso</translation>
 <translation id="4831034276697007977">Vuoi disattivare i clic automatici?</translation>
 <translation id="4849058404725798627">Evidenzia oggetto con stato attivo della tastiera</translation>
 <translation id="485592688953820832">Nessuna azione (pausa)</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 5fff3486..b8c2415 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">מטען בעל מתח נמוך</translation>
 <translation id="2135456203358955318">מגדיל במצב מעוגן</translation>
 <translation id="2144487987174258011">‏הפעל מחדש כדי לעדכן את Adobe Flash Player</translation>
+<translation id="2148902151539191989">הקודם</translation>
 <translation id="2208323208084708176">מצב שולחן עבודה מאוחד</translation>
 <translation id="2220572644011485463">‏PIN או סיסמה</translation>
 <translation id="225680501294068881">סורק לאיתור מכשירים...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">‏Google Assistant אינו זמין בסשן הדגמה.</translation>
 <translation id="479989351350248267">Search</translation>
 <translation id="4804818685124855865">נתק</translation>
+<translation id="4814539958450445987">מסך הכניסה</translation>
 <translation id="4831034276697007977">הקליקים האוטומטיים יושבתו. האם להמשיך?</translation>
 <translation id="4849058404725798627">הדגשה של האובייקט במיקוד המקלדת</translation>
 <translation id="485592688953820832">ללא פעולה (השהיה)</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 15619381..74e7eb45 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">低電力の充電器</translation>
 <translation id="2135456203358955318">拡大鏡(ドッキング)</translation>
 <translation id="2144487987174258011">Adobe Flash Player を更新するには再起動してください</translation>
+<translation id="2148902151539191989">戻る</translation>
 <translation id="2208323208084708176">デスクトップ統合モード</translation>
 <translation id="2220572644011485463">PIN またはパスワード</translation>
 <translation id="225680501294068881">デバイスをスキャンしています...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google アシスタントは、デモセッションではご利用いただけません。</translation>
 <translation id="479989351350248267">検索</translation>
 <translation id="4804818685124855865">切断</translation>
+<translation id="4814539958450445987">ログイン画面</translation>
 <translation id="4831034276697007977">自動クリックをオフにしてもよろしいですか?</translation>
 <translation id="4849058404725798627">キーボードのフォーカスがある項目をハイライト表示する</translation>
 <translation id="485592688953820832">なし(一時停止)</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 9d441a8..884e71f 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">ಕಡಿಮೆ ವಿದ್ಯುತ್ ಚಾರ್ಜರ್</translation>
 <translation id="2135456203358955318">ಡಾಕ್‌‌ ಮಾಡಿರುವ ವರ್ಧಕ</translation>
 <translation id="2144487987174258011">Adobe Flash Player ಅಪ್‌ಡೇಟ್ ಮಾಡಲು ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
+<translation id="2148902151539191989">ಹಿಂದೆ</translation>
 <translation id="2208323208084708176">ಏಕೀಕೃತ ಡೆಸ್ಕ್‌ಟಾಪ್ ಮೋಡ್</translation>
 <translation id="2220572644011485463">ಪಿನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್</translation>
 <translation id="225680501294068881">ಸಾಧನಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
@@ -223,6 +224,7 @@
 <translation id="4181841719683918333">ಭಾಷೆಗಳು</translation>
 <translation id="4195877955194704651">ಸ್ವಯಂಚಾಲಿತ ಕ್ಲಿಕ್‌ಗಳ ಬಟನ್</translation>
 <translation id="4217571870635786043">ಉಕ್ತಲೇಖನ</translation>
+<translation id="421885205185866088"><ph name="USER_EMAIL_ADDRESS" /> ಗಾಗಿ ಸ್ಮಾರ್ಟ್ ಕಾರ್ಡ್ ಪಿನ್‌‌</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4261870227682513959">ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೋರಿಸಿ. ಅಧಿಸೂಚನೆಗಳು ಆಫ್ ಆಗಿವೆ</translation>
 <translation id="4269883910223712419">ಈ ಸಾಧನದ ನಿರ್ವಾಹಕರು ಈ ಕೆಳಗಿನ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೊಂದಿದ್ದಾರೆ:</translation>
@@ -261,6 +263,7 @@
 <translation id="4778095205580009397">Google ಅಸಿಸ್ಟೆಂಟ್‌ ಡೆಮೊ ಸೆಶನ್‌ನಲ್ಲಿ ಲಭ್ಯವಿಲ್ಲ.</translation>
 <translation id="479989351350248267">ಹುಡುಕಾಡಿ</translation>
 <translation id="4804818685124855865">ಡಿಸ್‌ಕನೆಕ್ಟ್</translation>
+<translation id="4814539958450445987">ಲಾಗಿನ್ ಪರದೆ</translation>
 <translation id="4831034276697007977">ಸ್ವಯಂಚಾಲಿತ ಕ್ಲಿಕ್‌ಗಳನ್ನು ಖಚಿತವಾಗಿಯೂ ಆಫ್ ಮಾಡಲು ಬಯಸುವಿರಾ?</translation>
 <translation id="4849058404725798627">ಕೀಬೋರ್ಡ್‌ ಫೋಕಸ್‌ ಮೂಲಕ ವಿಷಯವನ್ನು ಎದ್ದುಗಾಣಿಸಿ</translation>
 <translation id="485592688953820832">ಯಾವುದೇ ಕ್ರಮ ಕೈಗೊಳ್ಳಬೇಡಿ (ವಿರಾಮಗೊಳಿಸಿ)</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index d8a12f2..cc0bd35 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Lādētājs ar mazu strāvas padevi</translation>
 <translation id="2135456203358955318">Dokota lupa</translation>
 <translation id="2144487987174258011">Restartējiet, lai atjauninātu Adobe Flash Player</translation>
+<translation id="2148902151539191989">ATPAKAĻ</translation>
 <translation id="2208323208084708176">Vienots darbvirsmas režīms</translation>
 <translation id="2220572644011485463">PIN vai parole</translation>
 <translation id="225680501294068881">Notiek ierīču meklēšana...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google asistents nav pieejams demonstrācijas sesijā.</translation>
 <translation id="479989351350248267">meklēt</translation>
 <translation id="4804818685124855865">Atvienot</translation>
+<translation id="4814539958450445987">Pierakstīšanās ekrāns</translation>
 <translation id="4831034276697007977">Vai tiešām vēlaties izslēgt automātiskos klikšķus?</translation>
 <translation id="4849058404725798627">Izcelt objektu ar tastatūras fokusu</translation>
 <translation id="485592688953820832">Neveikt darbību (pārtraukt)</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index fb63031f..2b432ff 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Pengecas berkuasa rendah</translation>
 <translation id="2135456203358955318">Penggadang didok</translation>
 <translation id="2144487987174258011">Mulakan semula untuk mengemas kini Pemain Adobe Flash</translation>
+<translation id="2148902151539191989">KEMBALI</translation>
 <translation id="2208323208084708176">Mod desktop bersatu</translation>
 <translation id="2220572644011485463">PIN atau kata laluan</translation>
 <translation id="225680501294068881">Mengimbas untuk peranti...</translation>
@@ -263,6 +264,7 @@
 <translation id="4778095205580009397">Google Assistant tidak tersedia dalam sesi tunjuk cara.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Putuskan sambungan</translation>
+<translation id="4814539958450445987">Skrin Log Masuk</translation>
 <translation id="4831034276697007977">Adakah anda pasti mahu mematikan klik automatik?</translation>
 <translation id="4849058404725798627">Serlahkan objek dengan fokus papan kekunci</translation>
 <translation id="485592688953820832">Tiada tindakan (jeda)</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index efe00b4..b81f6b2 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Laag-vermogen-lader</translation>
 <translation id="2135456203358955318">Gedockt vergrootglas</translation>
 <translation id="2144487987174258011">Start opnieuw op om Adobe Flash Player te updaten</translation>
+<translation id="2148902151539191989">TERUG</translation>
 <translation id="2208323208084708176">Samengestelde desktopmodus</translation>
 <translation id="2220572644011485463">Pincode of wachtwoord</translation>
 <translation id="225680501294068881">Zoeken naar apparaten...</translation>
@@ -223,7 +224,7 @@
 <translation id="4181841719683918333">Talen</translation>
 <translation id="4195877955194704651">Knop 'Automatische klikken'</translation>
 <translation id="4217571870635786043">Dicteren</translation>
-<translation id="421885205185866088">Pincode voor smartkaart voor <ph name="USER_EMAIL_ADDRESS" /></translation>
+<translation id="421885205185866088">Pincode voor smartkaart van <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4261870227682513959">Instellingen voor meldingen weergeven. Meldingen zijn uitgeschakeld</translation>
 <translation id="4269883910223712419">De beheerder van dit apparaat kan het volgende doen:</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">De Google Assistent is niet beschikbaar in een demosessie.</translation>
 <translation id="479989351350248267">zoeken</translation>
 <translation id="4804818685124855865">Verbinding verbreken</translation>
+<translation id="4814539958450445987">Inlogscherm</translation>
 <translation id="4831034276697007977">Weet je zeker dat je automatische klikken wilt uitschakelen?</translation>
 <translation id="4849058404725798627">Object met toetsenbordfocus markeren</translation>
 <translation id="485592688953820832">Geen actie (onderbreken)</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index 171b4c3..d8c5a8d 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Ładowarka o małej mocy</translation>
 <translation id="2135456203358955318">Lupa zadokowana</translation>
 <translation id="2144487987174258011">Uruchom ponownie, by zaktualizować Adobe Flash Playera</translation>
+<translation id="2148902151539191989">WSTECZ</translation>
 <translation id="2208323208084708176">Tryb ujednoliconego pulpitu</translation>
 <translation id="2220572644011485463">Kod PIN lub hasło</translation>
 <translation id="225680501294068881">Skanowanie w poszukiwaniu urządzeń...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Asystent Google jest niedostępny w sesji demonstracyjnej.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Rozłącz</translation>
+<translation id="4814539958450445987">Ekran logowania</translation>
 <translation id="4831034276697007977">Czy na pewno chcesz wyłączyć automatyczne kliknięcia?</translation>
 <translation id="4849058404725798627">Podświetlaj obiekt wybrany za pomocą klawiatury</translation>
 <translation id="485592688953820832">Brak działania (wstrzymaj)</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index 254708e..7237e11 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Carregador de baixa potência</translation>
 <translation id="2135456203358955318">Lupa ancorada</translation>
 <translation id="2144487987174258011">Reinicie para atualizar o Adobe Flash Player</translation>
+<translation id="2148902151539191989">VOLTAR</translation>
 <translation id="2208323208084708176">Modo de área de trabalho unificada.</translation>
 <translation id="2220572644011485463">PIN ou senha</translation>
 <translation id="225680501294068881">Procurando dispositivos...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">O Google Assistente não está disponível para uma sessão de demonstração.</translation>
 <translation id="479989351350248267">pesquisar</translation>
 <translation id="4804818685124855865">Desconectar</translation>
+<translation id="4814539958450445987">Tela de login</translation>
 <translation id="4831034276697007977">Tem certeza de que você quer desativar os cliques automáticos?</translation>
 <translation id="4849058404725798627">Destacar objeto com o foco de teclado</translation>
 <translation id="485592688953820832">Nenhuma ação (pausar)</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index e92b6bf..a3e1b7c7 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Carregador de baixo consumo</translation>
 <translation id="2135456203358955318">Lupa ancorada</translation>
 <translation id="2144487987174258011">Reinicie para atualizar o Adobe Flash Player</translation>
+<translation id="2148902151539191989">ANTERIOR</translation>
 <translation id="2208323208084708176">Modo de ambiente de trabalho unificado</translation>
 <translation id="2220572644011485463">PIN ou palavra-passe</translation>
 <translation id="225680501294068881">A procurar dispositivos...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">O Assistente Google não está disponível numa sessão de demonstração.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Desligar</translation>
+<translation id="4814539958450445987">Ecrã de início de sessão</translation>
 <translation id="4831034276697007977">Tem a certeza de que pretende desativar os cliques automáticos?</translation>
 <translation id="4849058404725798627">Realçar objeto com foco do teclado</translation>
 <translation id="485592688953820832">Nenhuma ação (colocar em pausa)</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index cbb4b9d6b..373262f 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Încărcător de putere joasă</translation>
 <translation id="2135456203358955318">Lupă andocată</translation>
 <translation id="2144487987174258011">Repornește ca să actualizezi Adobe Flash Player</translation>
+<translation id="2148902151539191989">ÎNAPOI</translation>
 <translation id="2208323208084708176">Modul Desktop unificat</translation>
 <translation id="2220572644011485463">PIN sau parolă</translation>
 <translation id="225680501294068881">Se caută gadgeturi...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Asistentul Google nu este disponibil într-o sesiune demonstrativă.</translation>
 <translation id="479989351350248267">căutați</translation>
 <translation id="4804818685124855865">Deconectează-te</translation>
+<translation id="4814539958450445987">Ecranul de conectare</translation>
 <translation id="4831034276697007977">Sigur vrei să dezactivezi clicurile automate?</translation>
 <translation id="4849058404725798627">Evidențiază obiectul focalizat de la tastatură</translation>
 <translation id="485592688953820832">Nicio acțiune (pauză)</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index d82f1e0..350e25d2 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Маломощное зарядное устройство</translation>
 <translation id="2135456203358955318">Закрепленная лупа</translation>
 <translation id="2144487987174258011">Перезагрузите, чтобы обновить Adobe Flash Player</translation>
+<translation id="2148902151539191989">НАЗАД</translation>
 <translation id="2208323208084708176">Единый рабочий стол</translation>
 <translation id="2220572644011485463">PIN-код или пароль</translation>
 <translation id="225680501294068881">Поиск устройств…</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google Ассистент в демонстрационном сеансе недоступен</translation>
 <translation id="479989351350248267">поиск</translation>
 <translation id="4804818685124855865">Отключиться</translation>
+<translation id="4814539958450445987">Экран входа</translation>
 <translation id="4831034276697007977">Вы уверены, что хотите отключить функцию автоматического нажатия?</translation>
 <translation id="4849058404725798627">Выделять элементы, выбранные с помощью клавиатуры</translation>
 <translation id="485592688953820832">Отсутствие действий (пауза)</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 6aa7ffe..34067c9 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Nabíjačka s nízkym výkonom</translation>
 <translation id="2135456203358955318">Ukotvená lupa</translation>
 <translation id="2144487987174258011">Reštartujte a aktualizujte tak Adobe Flash Player</translation>
+<translation id="2148902151539191989">SPÄŤ</translation>
 <translation id="2208323208084708176">Režim zjednotenej pracovnej plochy</translation>
 <translation id="2220572644011485463">PIN alebo heslo</translation>
 <translation id="225680501294068881">Hľadajú sa zariadenia...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Asistent Google nie je k dispozícii v relácii ukážky.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Odpojiť</translation>
+<translation id="4814539958450445987">Prihlasovacia obrazovka</translation>
 <translation id="4831034276697007977">Naozaj chcete vypnúť automatické kliknutia?</translation>
 <translation id="4849058404725798627">Zvýrazniť objekt so zameraním klávesnice</translation>
 <translation id="485592688953820832">Žiadna akcia (pozastaviť)</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 615422f..6e4958a 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Nizkoenergijski polnilnik</translation>
 <translation id="2135456203358955318">Zasidrana lupa</translation>
 <translation id="2144487987174258011">Če želite posodobiti Adobe Flash Player, znova zaženite</translation>
+<translation id="2148902151539191989">NAZAJ</translation>
 <translation id="2208323208084708176">Način enotnega namizja</translation>
 <translation id="2220572644011485463">Koda PIN ali geslo</translation>
 <translation id="225680501294068881">Iskanje naprav ...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Pomočnik Google ni na voljo v predstavitveni seji.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Prekini povezavo</translation>
+<translation id="4814539958450445987">Zaslon za prijavo</translation>
 <translation id="4831034276697007977">Ali ste prepričani, da želite izklopiti samodejne klike?</translation>
 <translation id="4849058404725798627">Označitev predmeta s fokusom na tipkovnici</translation>
 <translation id="485592688953820832">Brez dejanj (zaustavitev)</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 5866a970..32ac1c3 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Пуњач мале снаге</translation>
 <translation id="2135456203358955318">Монтирана лупа екрана</translation>
 <translation id="2144487987174258011">Покрените поново да бисте ажурирали Adobe Flash Player</translation>
+<translation id="2148902151539191989">НАЗАД</translation>
 <translation id="2208323208084708176">Режим спојених радних површина</translation>
 <translation id="2220572644011485463">PIN или лозинка</translation>
 <translation id="225680501294068881">Скенирање уређаја...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google помоћник није доступан у сесији демонстрације.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Прекини везу</translation>
+<translation id="4814539958450445987">Екран за пријављивање</translation>
 <translation id="4831034276697007977">Желите ли стварно да искључите аутоматске кликове?</translation>
 <translation id="4849058404725798627">Истакни објекат помоћу фокуса тастатуре</translation>
 <translation id="485592688953820832">Ништа се не предузима (паузирање)</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 22ad3c6..bb90d70 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">குறைந்த சக்திகொண்ட சார்ஜர்</translation>
 <translation id="2135456203358955318">டாக் செய்யப்பட்ட பெரிதாக்கி</translation>
 <translation id="2144487987174258011">Adobe Flash Playerஐப் புதுப்பிக்க, மீண்டும் தொடங்கவும்</translation>
+<translation id="2148902151539191989">பின்செல்</translation>
 <translation id="2208323208084708176">ஒன்றிணைந்த டெஸ்க்டாப் பயன்முறை</translation>
 <translation id="2220572644011485463">பின் அல்லது கடவுச்சொல்</translation>
 <translation id="225680501294068881">சாதனங்களைக் கண்டறிகிறது...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">டெமோ அமர்வில் Google அசிஸ்டண்ட்டைப் பயன்படுத்த முடியாது.</translation>
 <translation id="479989351350248267">தேடல்</translation>
 <translation id="4804818685124855865">தொடர்பைத் துண்டி</translation>
+<translation id="4814539958450445987">உள்நுழைவுத் திரை</translation>
 <translation id="4831034276697007977">தானாகக் கிளிக் செய்யும் அம்சத்தை ஆஃப் செய்ய விரும்புகிறீர்களா?</translation>
 <translation id="4849058404725798627">விசைப்பலகை ஃபோகஸ் மூலம் ஆப்ஜெக்ட்டைத் தனிப்படுத்து</translation>
 <translation id="485592688953820832">எந்தச் செயலும் இல்லை (இடைநிறுத்தும்)</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index e0b4684..0ed4713 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">ที่ชาร์จพลังงานต่ำ</translation>
 <translation id="2135456203358955318">แว่นขยายหน้าจอบางส่วน</translation>
 <translation id="2144487987174258011">รีสตาร์ทเพื่ออัปเดต Adobe Flash Player</translation>
+<translation id="2148902151539191989">กลับ</translation>
 <translation id="2208323208084708176">โหมดเดสก์ท็อปแบบรวม</translation>
 <translation id="2220572644011485463">PIN หรือรหัสผ่าน</translation>
 <translation id="225680501294068881">กำลังสแกนหาอุปกรณ์...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google Assistant ไม่พร้อมใช้งานในเซสชันสาธิต</translation>
 <translation id="479989351350248267">ค้นหา</translation>
 <translation id="4804818685124855865">ตัดการเชื่อมต่อ</translation>
+<translation id="4814539958450445987">หน้าจอการเข้าสู่ระบบ</translation>
 <translation id="4831034276697007977">แน่ใจไหมว่าต้องการปิดการคลิกอัตโนมัติ</translation>
 <translation id="4849058404725798627">ไฮไลต์วัตถุที่มีโฟกัสแป้นพิมพ์</translation>
 <translation id="485592688953820832">ไม่มีการดำเนินการ (หยุดชั่วคราว)</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 468f9cd..e55657a4 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -88,6 +88,7 @@
 <translation id="2127372758936585790">Зарядний пристрій низької потужності</translation>
 <translation id="2135456203358955318">Закріплена лупа</translation>
 <translation id="2144487987174258011">Перезапустіть Chrome, щоб оновити Adobe Flash Player</translation>
+<translation id="2148902151539191989">НАЗАД</translation>
 <translation id="2208323208084708176">Режим уніфікованого комп’ютера</translation>
 <translation id="2220572644011485463">PIN-код або пароль</translation>
 <translation id="225680501294068881">Пошук пристроїв...</translation>
@@ -262,6 +263,7 @@
 <translation id="4778095205580009397">Google Асистент недоступний у демонстраційному сеансі.</translation>
 <translation id="479989351350248267">пошук</translation>
 <translation id="4804818685124855865">Від'єднатися</translation>
+<translation id="4814539958450445987">Екран входу</translation>
 <translation id="4831034276697007977">Вимкнути автоматичні кліки?</translation>
 <translation id="4849058404725798627">Підсвічувати об’єкт, вибраний на клавіатурі</translation>
 <translation id="485592688953820832">Нічого не робити (призупинити)</translation>
diff --git a/ash/system/overview/overview_button_tray_unittest.cc b/ash/system/overview/overview_button_tray_unittest.cc
index 22a170a..494cec4 100644
--- a/ash/system/overview/overview_button_tray_unittest.cc
+++ b/ash/system/overview/overview_button_tray_unittest.cc
@@ -398,9 +398,9 @@
   // Splitview is only available in tablet mode.
   TabletModeControllerTestApi().EnterTabletMode();
 
-  std::unique_ptr<aura::Window> window3 = CreateTestWindow();
   std::unique_ptr<aura::Window> window1 = CreateTestWindow();
   std::unique_ptr<aura::Window> window2 = CreateTestWindow();
+  std::unique_ptr<aura::Window> window3 = CreateTestWindow();
 
   // Enter splitview mode. Snap |window1| to the left, this will be the default
   // splitview window.
@@ -410,6 +410,7 @@
   split_view_controller->SnapWindow(window1.get(), SplitViewController::LEFT);
   split_view_controller->SnapWindow(window2.get(), SplitViewController::RIGHT);
   ASSERT_EQ(window1.get(), split_view_controller->GetDefaultSnappedWindow());
+  EXPECT_EQ(window2.get(), window_util::GetActiveWindow());
 
   // Verify that after double tapping, we have switched to |window3|, even
   // though |window1| is more recently used.
diff --git a/ash/wm/overview/drop_target_view.cc b/ash/wm/overview/drop_target_view.cc
index 27a2eb61..17c2970c 100644
--- a/ash/wm/overview/drop_target_view.cc
+++ b/ash/wm/overview/drop_target_view.cc
@@ -11,6 +11,7 @@
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/image_view.h"
+#include "ui/views/layout/layout_provider.h"
 
 namespace ash {
 namespace {
@@ -52,8 +53,10 @@
   background_view_->SetPaintToLayer(ui::LAYER_SOLID_COLOR);
   background_view_->layer()->SetColor(kDropTargetBackgroundColor);
   background_view_->layer()->SetOpacity(kDropTargetBackgroundOpacity);
-  constexpr gfx::RoundedCornersF kRadii(kOverviewWindowRoundingDp);
-  background_view_->layer()->SetRoundedCornerRadius(kRadii);
+  const int corner_radius =
+      views::LayoutProvider::Get()->GetCornerRadiusMetric(views::EMPHASIS_LOW);
+  background_view_->layer()->SetRoundedCornerRadius(
+      gfx::RoundedCornersF(corner_radius));
   background_view_->layer()->SetIsFastRoundedCorner(true);
   AddChildView(background_view_);
 
@@ -62,9 +65,8 @@
     AddChildView(plus_icon_);
   }
 
-  SetBorder(views::CreateRoundedRectBorder(kDropTargetBorderThickness,
-                                           kOverviewWindowRoundingDp,
-                                           kDropTargetBorderColor));
+  SetBorder(views::CreateRoundedRectBorder(
+      kDropTargetBorderThickness, corner_radius, kDropTargetBorderColor));
 }
 
 void DropTargetView::UpdateBackgroundVisibility(bool visible) {
diff --git a/ash/wm/overview/overview_constants.h b/ash/wm/overview/overview_constants.h
index c35fa24..0ea40491 100644
--- a/ash/wm/overview/overview_constants.h
+++ b/ash/wm/overview/overview_constants.h
@@ -30,9 +30,6 @@
 // the grid.
 constexpr float kShieldOpacity = 0.4f;
 
-// The amount of rounding on window edges in overview mode.
-constexpr int kOverviewWindowRoundingDp = 4;
-
 // Amount of blur to apply on the wallpaper when we enter or exit overview
 // mode.
 constexpr float kWallpaperBlurSigma = 10.f;
diff --git a/ash/wm/overview/overview_item.cc b/ash/wm/overview/overview_item.cc
index 33c78e6..80ef5576e4 100644
--- a/ash/wm/overview/overview_item.cc
+++ b/ash/wm/overview/overview_item.cc
@@ -50,6 +50,7 @@
 #include "ui/views/animation/ink_drop_impl.h"
 #include "ui/views/animation/ink_drop_mask.h"
 #include "ui/views/controls/button/image_button.h"
+#include "ui/views/layout/layout_provider.h"
 #include "ui/views/widget/widget.h"
 #include "ui/wm/core/coordinate_conversion.h"
 #include "ui/wm/core/shadow_types.h"
@@ -698,7 +699,9 @@
                       : base::nullopt);
   if (transform_window_.IsMinimized()) {
     caption_container_view_->UpdatePreviewRoundedCorners(
-        should_show_rounded_corners, kOverviewWindowRoundingDp);
+        should_show_rounded_corners,
+        views::LayoutProvider::Get()->GetCornerRadiusMetric(
+            views::EMPHASIS_LOW));
   }
 }
 
diff --git a/ash/wm/overview/overview_session.cc b/ash/wm/overview/overview_session.cc
index d70c548c7..5d7dfc0b 100644
--- a/ash/wm/overview/overview_session.cc
+++ b/ash/wm/overview/overview_session.cc
@@ -650,21 +650,10 @@
   if (canceled)
     return;
   if (overview_focus_widget_) {
-    if (should_focus_overview) {
+    if (should_focus_overview)
       overview_focus_widget_->Show();
-    } else {
+    else
       overview_focus_widget_->ShowInactive();
-
-      // Check if the active window is in overview. There is at least one
-      // workflow where it will be: the active window is being dragged, and the
-      // previous window carries over from clamshell mode to tablet split view.
-      if (IsWindowInOverview(window_util::GetActiveWindow())) {
-        // We do not want an active window in overview. It will cause blatantly
-        // broken behavior as in the video linked in crbug.com/992223.
-        wm::ActivateWindow(
-            Shell::Get()->split_view_controller()->GetDefaultSnappedWindow());
-      }
-    }
   }
   Shell::Get()->overview_controller()->DelayedUpdateRoundedCornersAndShadow();
 }
diff --git a/ash/wm/overview/overview_window_drag_controller.cc b/ash/wm/overview/overview_window_drag_controller.cc
index 239b932f..8741b97 100644
--- a/ash/wm/overview/overview_window_drag_controller.cc
+++ b/ash/wm/overview/overview_window_drag_controller.cc
@@ -716,11 +716,9 @@
 
   // |item_| will be deleted after SplitViewController::SnapWindow().
   DCHECK(!Shell::Get()->split_view_controller()->IsDividerAnimating());
-  aura::Window* window = item_->GetWindow();
-  split_view_controller_->SnapWindow(window, snap_position,
+  split_view_controller_->SnapWindow(item_->GetWindow(), snap_position,
                                      /*use_divider_spawn_animation=*/true);
   item_ = nullptr;
-  wm::ActivateWindow(window);
 }
 
 }  // namespace ash
diff --git a/ash/wm/overview/scoped_overview_transform_window.cc b/ash/wm/overview/scoped_overview_transform_window.cc
index 2a55d78..9e1bd18 100644
--- a/ash/wm/overview/scoped_overview_transform_window.cc
+++ b/ash/wm/overview/scoped_overview_transform_window.cc
@@ -35,6 +35,7 @@
 #include "ui/compositor/paint_recorder.h"
 #include "ui/gfx/geometry/safe_integer_conversions.h"
 #include "ui/gfx/transform_util.h"
+#include "ui/views/layout/layout_provider.h"
 #include "ui/views/widget/widget.h"
 #include "ui/wm/core/coordinate_conversion.h"
 #include "ui/wm/core/shadow_controller.h"
@@ -418,8 +419,9 @@
   // shadow around the window.
   ui::Layer* layer = window_->layer();
   const float scale = layer->transform().Scale2d().x();
-  const gfx::RoundedCornersF radii(
-      show_corners ? kOverviewWindowRoundingDp / scale : 0.0f);
+  const int radius =
+      views::LayoutProvider::Get()->GetCornerRadiusMetric(views::EMPHASIS_LOW);
+  const gfx::RoundedCornersF radii(show_corners ? (radius / scale) : 0.0f);
   layer->SetRoundedCornerRadius(radii);
   layer->SetIsFastRoundedCorner(true);
 
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc
index 458f918d..6dec3f0 100644
--- a/ash/wm/splitview/split_view_controller.cc
+++ b/ash/wm/splitview/split_view_controller.cc
@@ -422,8 +422,9 @@
 
     OnWindowSnapped(window);
   } else {
-    // Otherwise, try to snap it first. The split view state will be updated
-    // after the window is snapped.
+    // Otherwise, try to snap it first. It will be activated later after the
+    // window is snapped. The split view state will also be updated after the
+    // window is snapped.
     const WMEvent event((snap_position == LEFT) ? WM_EVENT_SNAP_LEFT
                                                 : WM_EVENT_SNAP_RIGHT);
     WindowState::Get(window)->OnWMEvent(&event);
@@ -1523,7 +1524,7 @@
 void SplitViewController::OnWindowSnapped(aura::Window* window) {
   RestoreTransformIfApplicable(window);
   UpdateSplitViewStateAndNotifyObservers();
-  UpdateWindowStackingAfterSnap(window);
+  ActivateSnappedWindowAndUpdateStacking(window);
 
   // If there are two window snapped in clamshell mode, splitview mode is ended.
   if (state_ == SplitViewState::kBothSnapped &&
@@ -1718,19 +1719,16 @@
   }
 }
 
-void SplitViewController::UpdateWindowStackingAfterSnap(
-    aura::Window* newly_snapped) {
-  if (split_view_divider_)
-    split_view_divider_->SetAlwaysOnTop(true);
-
-  aura::Window* other_snapped =
-      newly_snapped == left_window_ ? right_window_ : left_window_;
-  if (other_snapped) {
-    DCHECK(newly_snapped == left_window_ || newly_snapped == right_window_);
-    other_snapped->parent()->StackChildAtTop(other_snapped);
+void SplitViewController::ActivateSnappedWindowAndUpdateStacking(
+    aura::Window* window) {
+  aura::Window* other_window =
+      window == left_window_ ? right_window_ : left_window_;
+  if (other_window) {
+    DCHECK(window == left_window_ || window == right_window_);
+    other_window->parent()->StackChildAtTop(other_window);
   }
 
-  newly_snapped->parent()->StackChildAtTop(newly_snapped);
+  wm::ActivateWindow(window);
 }
 
 void SplitViewController::SetWindowsTransformDuringResizing() {
@@ -1901,7 +1899,6 @@
       // location. Note if there is already a window at |desired_snap_postion|,
       // SnapWindow() will put the previous snapped window in overview.
       SnapWindow(window, GetSnapPosition(window, last_location_in_screen));
-      wm::ActivateWindow(window);
     } else {
       // Restore the dragged window's transform first if it's not identity. It
       // needs to be called before the transformed window's bounds change so
@@ -1937,7 +1934,6 @@
     // |desired_snap_position| in overview.
     SnapWindow(window, desired_snap_position,
                /*use_divider_spawn_animation=*/!initiator_window);
-    wm::ActivateWindow(window);
 
     if (!was_splitview_active) {
       // If splitview mode was not active before snapping the dragged
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h
index d8eeea0..2e493ff 100644
--- a/ash/wm/splitview/split_view_controller.h
+++ b/ash/wm/splitview/split_view_controller.h
@@ -337,8 +337,11 @@
   // Restores |window| transform to identity transform if applicable.
   void RestoreTransformIfApplicable(aura::Window* window);
 
-  // Called after |newly_snapped| gets snapped. Updates window stacking.
-  void UpdateWindowStackingAfterSnap(aura::Window* newly_snapped);
+  // Activates the newly snapped window |window| and updates window stacking. In
+  // clamshell mode, if there is only one overview window and you drag and snap
+  // it to enter split view, then this function is called after split view mode
+  // has already been ended. Then it just activates |window|.
+  void ActivateSnappedWindowAndUpdateStacking(aura::Window* window);
 
   // During resizing, it's possible that the resizing bounds of the snapped
   // window is smaller than its minimum bounds, in this case we apply a
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc
index 309757e..4e88482 100644
--- a/ash/wm/splitview/split_view_controller_unittest.cc
+++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -470,11 +470,6 @@
 
   // 2 - Then test two snapped window scenario.
   std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
-  // Reactivate |window1| because it is the one that we will be maximizing and
-  // fullscreening. When |window1| goes out of scope at the end of the test, it
-  // will be a full screen window, and if it is not the active window, then the
-  // destructor will cause a |DCHECK| failure in |ash::WindowState::Get|.
-  wm::ActivateWindow(window1.get());
   split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT);
   split_view_controller()->SnapWindow(window2.get(),
                                       SplitViewController::RIGHT);
@@ -558,14 +553,10 @@
   EXPECT_EQ(split_view_controller()->InSplitViewMode(), true);
   EXPECT_EQ(split_view_controller()->state(), SplitViewState::kLeftSnapped);
   EXPECT_EQ(split_view_controller()->left_window(), window1.get());
-  // Activate |window1| in preparation to verify that it stays active when
-  // overview mode is ended.
-  wm::ActivateWindow(window1.get());
 
   ToggleOverview();
   EXPECT_EQ(split_view_controller()->state(), SplitViewState::kBothSnapped);
   EXPECT_EQ(split_view_controller()->right_window(), window3.get());
-  EXPECT_TRUE(wm::IsActiveWindow(window1.get()));
   CheckOverviewEnterExitHistogram("ExitInSplitView", {1, 0}, {0, 1});
 }
 
@@ -2849,7 +2840,6 @@
   EXPECT_EQ(split_view_controller()->state(), SplitViewState::kBothSnapped);
   EXPECT_FALSE(Shell::Get()->overview_controller()->InOverviewSession());
   EXPECT_TRUE(window1->GetProperty(kCanAttachToAnotherWindowKey));
-  EXPECT_EQ(window1.get(), window_util::GetActiveWindow());
 
   EndSplitView();
   EXPECT_FALSE(split_view_controller()->InSplitViewMode());
diff --git a/ash/wm/splitview/split_view_divider.cc b/ash/wm/splitview/split_view_divider.cc
index a1e7237..98f9fec6 100644
--- a/ash/wm/splitview/split_view_divider.cc
+++ b/ash/wm/splitview/split_view_divider.cc
@@ -331,22 +331,6 @@
                                   is_dragging);
 }
 
-void SplitViewDivider::SetAlwaysOnTop(bool on_top) {
-  if (on_top) {
-    divider_widget_->SetZOrderLevel(ui::ZOrderLevel::kFloatingUIElement);
-
-    // Special handling when put divider into always_on_top container. We want
-    // to put it at the bottom so it won't block other always_on_top windows.
-    aura::Window* always_on_top_container =
-        Shell::GetContainer(divider_widget_->GetNativeWindow()->GetRootWindow(),
-                            kShellWindowId_AlwaysOnTopContainer);
-    always_on_top_container->StackChildAtBottom(
-        divider_widget_->GetNativeWindow());
-  } else {
-    divider_widget_->SetZOrderLevel(ui::ZOrderLevel::kNormal);
-  }
-}
-
 void SplitViewDivider::AddObservedWindow(aura::Window* window) {
   if (!base::Contains(observed_windows_, window)) {
     window->AddObserver(this);
@@ -463,4 +447,20 @@
   divider_widget_->Show();
 }
 
+void SplitViewDivider::SetAlwaysOnTop(bool on_top) {
+  if (on_top) {
+    divider_widget_->SetZOrderLevel(ui::ZOrderLevel::kFloatingUIElement);
+
+    // Special handling when put divider into always_on_top container. We want
+    // to put it at the bottom so it won't block other always_on_top windows.
+    aura::Window* always_on_top_container =
+        Shell::GetContainer(divider_widget_->GetNativeWindow()->GetRootWindow(),
+                            kShellWindowId_AlwaysOnTopContainer);
+    always_on_top_container->StackChildAtBottom(
+        divider_widget_->GetNativeWindow());
+  } else {
+    divider_widget_->SetZOrderLevel(ui::ZOrderLevel::kNormal);
+  }
+}
+
 }  // namespace ash
diff --git a/ash/wm/splitview/split_view_divider.h b/ash/wm/splitview/split_view_divider.h
index 6822e2f..eb9eb80 100644
--- a/ash/wm/splitview/split_view_divider.h
+++ b/ash/wm/splitview/split_view_divider.h
@@ -67,8 +67,6 @@
   // position.
   gfx::Rect GetDividerBoundsInScreen(bool is_dragging);
 
-  void SetAlwaysOnTop(bool on_top);
-
   void AddObservedWindow(aura::Window* window);
   void RemoveObservedWindow(aura::Window* window);
 
@@ -99,6 +97,7 @@
 
  private:
   void CreateDividerWidget(aura::Window* root_window);
+  void SetAlwaysOnTop(bool on_top);
 
   SplitViewController* controller_;
 
diff --git a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
index de52668..92280eda 100644
--- a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
+++ b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
@@ -28,7 +28,6 @@
 #include "ash/wm/splitview/split_view_controller.h"
 #include "ash/wm/splitview/split_view_utils.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller_test_api.h"
-#include "ash/wm/toplevel_window_event_handler.h"
 #include "ash/wm/window_util.h"
 #include "ash/wm/wm_event.h"
 #include "base/command_line.h"
@@ -50,7 +49,6 @@
 #include "ui/events/devices/input_device.h"
 #include "ui/events/event_handler.h"
 #include "ui/events/test/event_generator.h"
-#include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/vector3d_f.h"
 #include "ui/message_center/message_center.h"
 #include "ui/wm/core/window_util.h"
@@ -1183,7 +1181,6 @@
   EXPECT_EQ(left_window.get(), split_view_controller->left_window());
   EXPECT_EQ(right_window.get(), split_view_controller->right_window());
   EXPECT_FALSE(Shell::Get()->overview_controller()->InOverviewSession());
-  EXPECT_EQ(left_window.get(), window_util::GetActiveWindow());
 }
 
 // Test that if before tablet mode, the active window is snapped on the right
@@ -1201,7 +1198,6 @@
   EXPECT_EQ(left_window.get(), split_view_controller->left_window());
   EXPECT_EQ(right_window.get(), split_view_controller->right_window());
   EXPECT_FALSE(Shell::Get()->overview_controller()->InOverviewSession());
-  EXPECT_EQ(right_window.get(), window_util::GetActiveWindow());
 }
 
 // Test that if before tablet mode, the active window is an ARC window snapped
@@ -1261,7 +1257,7 @@
   EXPECT_EQ(SplitViewState::kLeftSnapped, split_view_controller->state());
   EXPECT_EQ(parent.get(), split_view_controller->left_window());
   EXPECT_TRUE(Shell::Get()->overview_controller()->InOverviewSession());
-  EXPECT_EQ(child.get(), window_util::GetActiveWindow());
+  EXPECT_EQ(parent.get(), window_util::GetActiveWindow());
 }
 
 // Test that if before tablet mode, the active window is the app list and the
@@ -1288,12 +1284,15 @@
   SplitViewController* split_view_controller =
       Shell::Get()->split_view_controller();
   std::unique_ptr<aura::Window> dragged_window = CreateTestWindow();
+  WindowState* dragged_window_state = WindowState::Get(dragged_window.get());
+  dragged_window_state->CreateDragDetails(
+      gfx::Point(), HTNOWHERE,
+      ::wm::WindowMoveSource::WINDOW_MOVE_SOURCE_MOUSE);
+  dragged_window_state->OnDragStarted(HTNOWHERE);
+  ASSERT_TRUE(dragged_window_state->is_dragged());
   std::unique_ptr<aura::Window> snapped_window =
       CreateDesktopWindowSnappedLeft();
   wm::ActivateWindow(dragged_window.get());
-  ASSERT_TRUE(Shell::Get()->toplevel_window_event_handler()->AttemptToStartDrag(
-      dragged_window.get(), gfx::Point(), HTCAPTION,
-      ash::ToplevelWindowEventHandler::EndClosure()));
   tablet_mode_controller()->SetEnabledForTest(true);
   EXPECT_EQ(SplitViewState::kLeftSnapped, split_view_controller->state());
   EXPECT_EQ(snapped_window.get(), split_view_controller->left_window());
@@ -1321,30 +1320,6 @@
   EXPECT_EQ(snapped_window.get(), window_util::GetActiveWindow());
 }
 
-// Test that if before tablet mode, the active window is being dragged and the
-// previous window is a transient child of a window snapped on the left, then
-// split view is activated with the parent on the left.
-TEST_F(TabletModeControllerTest,
-       StartTabletActiveDraggedPreviousTransientChildOfLeftSnap) {
-  SplitViewController* split_view_controller =
-      Shell::Get()->split_view_controller();
-  std::unique_ptr<aura::Window> dragged_window = CreateTestWindow();
-  std::unique_ptr<aura::Window> parent = CreateDesktopWindowSnappedLeft();
-  std::unique_ptr<aura::Window> child =
-      CreateTestWindow(gfx::Rect(), aura::client::WINDOW_TYPE_POPUP);
-  ::wm::AddTransientChild(parent.get(), child.get());
-  wm::ActivateWindow(child.get());
-  wm::ActivateWindow(dragged_window.get());
-  ASSERT_TRUE(Shell::Get()->toplevel_window_event_handler()->AttemptToStartDrag(
-      dragged_window.get(), gfx::Point(), HTCAPTION,
-      ash::ToplevelWindowEventHandler::EndClosure()));
-  tablet_mode_controller()->SetEnabledForTest(true);
-  EXPECT_EQ(SplitViewState::kLeftSnapped, split_view_controller->state());
-  EXPECT_EQ(parent.get(), split_view_controller->left_window());
-  EXPECT_TRUE(Shell::Get()->overview_controller()->InOverviewSession());
-  EXPECT_EQ(parent.get(), window_util::GetActiveWindow());
-}
-
 // Test that if before tablet mode, the active window is snapped on the left but
 // does not meet the requirements to be snapped in split view, and the previous
 // window is snapped on the right, then split view is not activated.
diff --git a/base/immediate_crash.h b/base/immediate_crash.h
index 94ee14f..94158fe 100644
--- a/base/immediate_crash.h
+++ b/base/immediate_crash.h
@@ -101,20 +101,14 @@
 
 #define TRAP_SEQUENCE1_() __asm volatile("brk #0\n")
 // Intentionally empty: __builtin_unreachable() is always part of the sequence
-// (see IMMEDIATE_CRASH below) and already emits a ud2 on Win64
+// (see IMMEDIATE_CRASH below) and already emits a ud2 on Win64,
+// https://crbug.com/958373
 #define TRAP_SEQUENCE2_() __asm volatile("")
 
 #else
 
 #define TRAP_SEQUENCE1_() asm volatile("int3")
-
-#if defined(ARCH_CPU_64_BITS)
-// Intentionally empty: __builtin_unreachable() is always part of the sequence
-// (see IMMEDIATE_CRASH below) and already emits a ud2 on Win64
-#define TRAP_SEQUENCE2_() asm volatile("")
-#else
 #define TRAP_SEQUENCE2_() asm volatile("ud2")
-#endif  // defined(ARCH_CPU_64_bits)
 
 #endif  // __clang__
 
diff --git a/base/immediate_crash_unittest.cc b/base/immediate_crash_unittest.cc
index 34c059f..8fc9d38 100644
--- a/base/immediate_crash_unittest.cc
+++ b/base/immediate_crash_unittest.cc
@@ -88,10 +88,6 @@
   for (int i = 0; i < 2; ++i) {
     // INT 3
     EXPECT_EQ(0xCC, *++it);
-    // TODO(1002498): Remove this and update immediate_crash.h in the next clang
-    // roll.
-    if (*std::next(it) == 0xCC)
-      continue;
     // UD2
     EXPECT_EQ(0x0F, *++it);
     EXPECT_EQ(0x0B, *++it);
diff --git a/base/task/promise/abstract_promise.cc b/base/task/promise/abstract_promise.cc
index 0f80c8a..315cfd3 100644
--- a/base/task/promise/abstract_promise.cc
+++ b/base/task/promise/abstract_promise.cc
@@ -66,6 +66,10 @@
   OnCanceled();
 }
 
+void AbstractPromise::EmplaceResolvedVoid() {
+  emplace(Resolved<void>());
+}
+
 bool AbstractPromise::IsCanceled() const {
   if (dependents_.IsCanceled())
     return true;
diff --git a/base/task/promise/abstract_promise.h b/base/task/promise/abstract_promise.h
index 2c105d5..c16132c 100644
--- a/base/task/promise/abstract_promise.h
+++ b/base/task/promise/abstract_promise.h
@@ -407,7 +407,9 @@
    public:
     PromiseValue& value() { return value_; }
 
+#if DCHECK_IS_ON()
     ~ValueHandle() { value_.reset(); }
+#endif
 
    private:
     friend class AbstractPromise;
@@ -417,6 +419,8 @@
     PromiseValue& value_;
   };
 
+  // Used for promise results that require move semantics.  E.g. a promise chain
+  // involving a std::unique_ptr<>.
   ValueHandle TakeValue() { return ValueHandle(value_); }
 
   // Returns nullptr if there isn't a curried promise.
@@ -440,6 +444,10 @@
                   "Use scoped_refptr<AbstractPromise> instead");
   }
 
+  // An out-of line emplace(Resolved<void>()); Useful for reducing binary
+  // bloat in executor templates.
+  void EmplaceResolvedVoid();
+
   // This is separate from AbstractPromise to reduce the memory footprint of
   // regular PostTask without promise chains.
   class BASE_EXPORT AdjacencyList {
diff --git a/base/task/promise/finally_executor.h b/base/task/promise/finally_executor.h
index 7dc1c79..a80f81c5 100644
--- a/base/task/promise/finally_executor.h
+++ b/base/task/promise/finally_executor.h
@@ -43,9 +43,15 @@
 
   void Execute(AbstractPromise* promise) {
     AbstractPromise* prerequisite = promise->GetOnlyPrerequisite();
-    CallbackT* resolve_executor = static_cast<CallbackT*>(&common_.callback_);
-    RunHelper<CallbackT, void, ResolveStorage, RejectStorage>::Run(
-        std::move(*resolve_executor), prerequisite, promise);
+    // Internally RunHelper uses const RepeatingCallback<>& to avoid the
+    // binary size overhead of moving a scoped_refptr<> about.  We respect
+    // the onceness of the callback and RunHelper will overwrite the callback
+    // with the result.
+    using RepeatingCB = typename ToRepeatingCallback<CallbackT>::value;
+    RepeatingCB* resolve_executor =
+        static_cast<RepeatingCB*>(&common_.callback_);
+    RunHelper<RepeatingCB, void, ResolveStorage, RejectStorage>::Run(
+        *resolve_executor, prerequisite, promise);
   }
 
 #if DCHECK_IS_ON()
diff --git a/base/task/promise/helpers.h b/base/task/promise/helpers.h
index 28e1009..87d9ff6 100644
--- a/base/task/promise/helpers.h
+++ b/base/task/promise/helpers.h
@@ -407,9 +407,26 @@
   }
 };
 
+// Helper for converting a callback to its repeating variant.
+template <typename Cb>
+struct ToRepeatingCallback;
+
+template <typename Cb>
+struct ToRepeatingCallback<OnceCallback<Cb>> {
+  using value = RepeatingCallback<Cb>;
+};
+
+template <typename Cb>
+struct ToRepeatingCallback<RepeatingCallback<Cb>> {
+  using value = RepeatingCallback<Cb>;
+};
+
 // Helper for running a promise callback and storing the result if any.
 //
-// Callback = signature of the callback to execute,
+// Callback = signature of the callback to execute. Note we use repeating
+// callbacks to avoid the binary size overhead of a once callback which will
+// generate a destructor which is redundant because we overwrite the executor
+// with the promise result which also triggers the destructor.
 // ArgStorageType = type of the callback parameter (or void if none)
 // ResolveStorage = type to use for resolve, usually Resolved<T>.
 // RejectStorage = type to use for reject, usually Rejected<T>.
@@ -426,18 +443,18 @@
           typename ArgStorageType,
           typename ResolveStorage,
           typename RejectStorage>
-struct RunHelper<OnceCallback<CbResult(CbArg)>,
+struct RunHelper<RepeatingCallback<CbResult(CbArg)>,
                  ArgStorageType,
                  ResolveStorage,
                  RejectStorage> {
-  using Callback = OnceCallback<CbResult(CbArg)>;
+  using Callback = RepeatingCallback<CbResult(CbArg)>;
 
-  static void Run(Callback&& executor,
+  static void Run(const Callback& executor,
                   AbstractPromise* arg,
                   AbstractPromise* result) {
     EmplaceHelper<ResolveStorage, RejectStorage>::Emplace(
-        result, std::move(executor).Run(
-                    ArgMoveSemanticsHelper<CbArg, ArgStorageType>::Get(arg)));
+        result,
+        executor.Run(ArgMoveSemanticsHelper<CbArg, ArgStorageType>::Get(arg)));
   }
 };
 
@@ -446,19 +463,18 @@
           typename ArgStorageType,
           typename ResolveStorage,
           typename RejectStorage>
-struct RunHelper<OnceCallback<void(CbArg)>,
+struct RunHelper<RepeatingCallback<void(CbArg)>,
                  ArgStorageType,
                  ResolveStorage,
                  RejectStorage> {
-  using Callback = OnceCallback<void(CbArg)>;
+  using Callback = RepeatingCallback<void(CbArg)>;
 
-  static void Run(Callback&& executor,
+  static void Run(const Callback& executor,
                   AbstractPromise* arg,
                   AbstractPromise* result) {
     static_assert(std::is_void<typename ResolveStorage::Type>::value, "");
-    std::move(executor).Run(
-        ArgMoveSemanticsHelper<CbArg, ArgStorageType>::Get(arg));
-    result->emplace(Resolved<void>());
+    executor.Run(ArgMoveSemanticsHelper<CbArg, ArgStorageType>::Get(arg));
+    result->EmplaceResolvedVoid();
   }
 };
 
@@ -467,17 +483,17 @@
           typename ArgStorageType,
           typename ResolveStorage,
           typename RejectStorage>
-struct RunHelper<OnceCallback<CbResult()>,
+struct RunHelper<RepeatingCallback<CbResult()>,
                  ArgStorageType,
                  ResolveStorage,
                  RejectStorage> {
-  using Callback = OnceCallback<CbResult()>;
+  using Callback = RepeatingCallback<CbResult()>;
 
-  static void Run(Callback&& executor,
+  static void Run(const Callback& executor,
                   AbstractPromise* arg,
                   AbstractPromise* result) {
-    EmplaceHelper<ResolveStorage, RejectStorage>::Emplace(
-        result, std::move(executor).Run());
+    EmplaceHelper<ResolveStorage, RejectStorage>::Emplace(result,
+                                                          executor.Run());
   }
 };
 
@@ -485,16 +501,16 @@
 template <typename ArgStorageType,
           typename ResolveStorage,
           typename RejectStorage>
-struct RunHelper<OnceCallback<void()>,
+struct RunHelper<RepeatingCallback<void()>,
                  ArgStorageType,
                  ResolveStorage,
                  RejectStorage> {
-  static void Run(OnceCallback<void()>&& executor,
+  static void Run(const RepeatingCallback<void()>& executor,
                   AbstractPromise* arg,
                   AbstractPromise* result) {
     static_assert(std::is_void<typename ResolveStorage::Type>::value, "");
-    std::move(executor).Run();
-    result->emplace(Resolved<void>());
+    executor.Run();
+    result->EmplaceResolvedVoid();
   }
 };
 
@@ -533,47 +549,45 @@
           typename... CbArgs,
           typename ResolveStorage,
           typename RejectStorage>
-struct RunHelper<OnceCallback<CbResult(CbArgs...)>,
+struct RunHelper<RepeatingCallback<CbResult(CbArgs...)>,
                  Resolved<std::tuple<CbArgs...>>,
                  ResolveStorage,
                  RejectStorage> {
-  using Callback = OnceCallback<CbResult(CbArgs...)>;
+  using Callback = RepeatingCallback<CbResult(CbArgs...)>;
   using StorageType = Resolved<std::tuple<CbArgs...>>;
   using IndexSequence = std::index_sequence_for<CbArgs...>;
 
-  static void Run(Callback&& executor,
+  static void Run(const Callback& executor,
                   AbstractPromise* arg,
                   AbstractPromise* result) {
     AbstractPromise::ValueHandle value = arg->TakeValue();
     std::tuple<CbArgs...>& tuple = value.value().Get<StorageType>()->value;
-    RunInternal(std::move(executor), tuple, result,
+    RunInternal(executor, tuple, result,
                 std::integral_constant<bool, std::is_void<CbResult>::value>(),
                 IndexSequence{});
   }
 
  private:
   template <typename Callback, size_t... Indices>
-  static void RunInternal(Callback&& executor,
+  static void RunInternal(const Callback& executor,
                           std::tuple<CbArgs...>& tuple,
                           AbstractPromise* result,
                           std::false_type void_result,
                           std::index_sequence<Indices...>) {
-    EmplaceHelper<ResolveStorage, RejectStorage>::Emplace(
-        std::move(executor).Run(
-            TupleArgMoveSemanticsHelper<Callback, std::tuple<CbArgs...>,
-                                        Indices>::Get(tuple)...));
+    EmplaceHelper<ResolveStorage, RejectStorage>::Emplace(executor.Run(
+        TupleArgMoveSemanticsHelper<Callback, std::tuple<CbArgs...>,
+                                    Indices>::Get(tuple)...));
   }
 
   template <typename Callback, size_t... Indices>
-  static void RunInternal(Callback&& executor,
+  static void RunInternal(const Callback& executor,
                           std::tuple<CbArgs...>& tuple,
                           AbstractPromise* result,
                           std::true_type void_result,
                           std::index_sequence<Indices...>) {
-    std::move(executor).Run(
-        TupleArgMoveSemanticsHelper<Callback, std::tuple<CbArgs...>,
-                                    Indices>::Get(tuple)...);
-    result->emplace(Resolved<void>());
+    executor.Run(TupleArgMoveSemanticsHelper<Callback, std::tuple<CbArgs...>,
+                                             Indices>::Get(tuple)...);
+    result->EmplaceResolvedVoid();
   }
 };
 
diff --git a/base/task/promise/helpers_unittest.cc b/base/task/promise/helpers_unittest.cc
index 16f4f9ae..f13fb5c 100644
--- a/base/task/promise/helpers_unittest.cc
+++ b/base/task/promise/helpers_unittest.cc
@@ -244,8 +244,8 @@
   scoped_refptr<AbstractPromise> result =
       DoNothingPromiseBuilder(FROM_HERE).SetCanResolve(true);
 
-  RunHelper<OnceCallback<int()>, Resolved<void>, Resolved<int>,
-            Rejected<std::string>>::Run(BindOnce([]() { return 123; }),
+  RunHelper<RepeatingCallback<int()>, Resolved<void>, Resolved<int>,
+            Rejected<std::string>>::Run(BindRepeating([]() { return 123; }),
                                         arg.get(), result.get());
 
   EXPECT_EQ(result->value().template Get<Resolved<int>>()->value, 123);
@@ -256,8 +256,8 @@
   scoped_refptr<AbstractPromise> result =
       DoNothingPromiseBuilder(FROM_HERE).SetCanResolve(true);
 
-  RunHelper<OnceCallback<void()>, Resolved<void>, Resolved<void>,
-            Rejected<std::string>>::Run(BindOnce([]() {}), arg.get(),
+  RunHelper<RepeatingCallback<void()>, Resolved<void>, Resolved<void>,
+            Rejected<std::string>>::Run(BindRepeating([]() {}), arg.get(),
                                         result.get());
 
   EXPECT_TRUE(result->value().ContainsResolved());
@@ -269,8 +269,8 @@
       DoNothingPromiseBuilder(FROM_HERE).SetCanResolve(true);
   arg->emplace(Resolved<int>(123));
 
-  RunHelper<OnceCallback<int(int)>, Resolved<int>, Resolved<int>,
-            Rejected<std::string>>::Run(BindOnce([](int value) {
+  RunHelper<RepeatingCallback<int(int)>, Resolved<int>, Resolved<int>,
+            Rejected<std::string>>::Run(BindRepeating([](int value) {
                                           return value + 1;
                                         }),
                                         arg.get(), result.get());
@@ -285,7 +285,7 @@
   arg->emplace(Resolved<int>(123));
 
   int value;
-  RunHelper<OnceCallback<void(int)>, Resolved<int>, Resolved<void>,
+  RunHelper<RepeatingCallback<void(int)>, Resolved<int>, Resolved<void>,
             Rejected<std::string>>::Run(BindLambdaForTesting([&](int arg) {
                                           value = arg;
                                         }),
diff --git a/base/task/promise/post_task_executor.h b/base/task/promise/post_task_executor.h
index c018113..e3882ba17 100644
--- a/base/task/promise/post_task_executor.h
+++ b/base/task/promise/post_task_executor.h
@@ -52,10 +52,14 @@
     static_assert(sizeof(CallbackBase) == sizeof(OnceCallback<ReturnType()>),
                   "We assume it's possible to cast from CallbackBase to "
                   "OnceCallback<ReturnType()>");
-    OnceCallback<ReturnType()>* task =
-        static_cast<OnceCallback<ReturnType()>*>(&task_);
-    internal::RunHelper<OnceCallback<ReturnType()>, void, ResolveStorage,
-                        RejectStorage>::Run(std::move(*task), nullptr, promise);
+    // Internally RunHelper uses const RepeatingCallback<>& to avoid the
+    // binary size overhead of moving a scoped_refptr<> about.  We respect
+    // the onceness of the callback and RunHelper will overwrite the callback
+    // with the result.
+    RepeatingCallback<ReturnType()>* task =
+        static_cast<RepeatingCallback<ReturnType()>*>(&task_);
+    internal::RunHelper<RepeatingCallback<ReturnType()>, void, ResolveStorage,
+                        RejectStorage>::Run(*task, nullptr, promise);
   }
 
  private:
diff --git a/base/task/promise/then_and_catch_executor.h b/base/task/promise/then_and_catch_executor.h
index 56d30ba2..37d522b 100644
--- a/base/task/promise/then_and_catch_executor.h
+++ b/base/task/promise/then_and_catch_executor.h
@@ -130,10 +130,16 @@
                                   AbstractPromise* promise,
                                   CallbackBase* resolve_callback,
                                   std::true_type can_resolve) {
-    RunHelper<ResolveOnceCallback, Resolved<ArgResolve>, ResolveStorage,
-              RejectStorage>::
-        Run(std::move(*static_cast<ResolveOnceCallback*>(resolve_callback)),
-            prerequisite, promise);
+    // Internally RunHelper uses const RepeatingCallback<>& to avoid the
+    // binary size overhead of moving a scoped_refptr<> about.  We respect
+    // the onceness of the callback and RunHelper will overwrite the callback
+    // with the result.
+    using RepeatingResolveCB =
+        typename ToRepeatingCallback<ResolveOnceCallback>::value;
+    RunHelper<
+        RepeatingResolveCB, Resolved<ArgResolve>, ResolveStorage,
+        RejectStorage>::Run(*static_cast<RepeatingResolveCB*>(resolve_callback),
+                            prerequisite, promise);
   }
 
   static void ExecuteThenInternal(AbstractPromise* prerequisite,
@@ -147,10 +153,16 @@
                                    AbstractPromise* promise,
                                    CallbackBase* reject_callback,
                                    std::true_type can_reject) {
-    RunHelper<RejectOnceCallback, Rejected<ArgReject>, ResolveStorage,
-              RejectStorage>::
-        Run(std::move(*static_cast<RejectOnceCallback*>(reject_callback)),
-            prerequisite, promise);
+    // Internally RunHelper uses const RepeatingCallback<>& to avoid the
+    // binary size overhead of moving a scoped_refptr<> about.  We respect
+    // the onceness of the callback and RunHelper will overwrite the callback
+    // with the result.
+    using RepeatingRejectCB =
+        typename ToRepeatingCallback<RejectOnceCallback>::value;
+    RunHelper<
+        RepeatingRejectCB, Rejected<ArgReject>, ResolveStorage,
+        RejectStorage>::Run(*static_cast<RepeatingRejectCB*>(reject_callback),
+                            prerequisite, promise);
   }
 
   static void ExecuteCatchInternal(AbstractPromise* prerequisite,
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index bf12525..289dc9a 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1526,20 +1526,15 @@
 
           # TODO(https://crbug.com/999886): Clean up, enable.
           "-Wno-final-dtor-non-final-class",
+
+          # TODO(https://crbug.com/1002945): Evaluate and possibly enable.
+          "-Wno-sizeof-array-div",
         ]
 
         cflags_c += [
           # TODO(https://crbug.com/995993): Clean up and enable.
           "-Wno-implicit-fallthrough",
         ]
-
-        if (llvm_force_head_revision) {
-          cflags += [
-            # TODO(https://crbug.com/1002945): Evaluate and possibly enable.
-            "-Wno-error=sizeof-array-div",
-          ]
-        }
-
       }
     }
   }
diff --git a/build/config/locales.gni b/build/config/locales.gni
index 5f70fb49..1d0df553 100644
--- a/build/config/locales.gni
+++ b/build/config/locales.gni
@@ -37,12 +37,11 @@
 ]
 
 # These list are defined even when not building for Android or iOS for the
-# sake of build/locale_tool.py. These asserts ensure that GN doesn't complain
-# about them being unused.
-assert(android_chrome_omitted_locales != [])
-assert(ios_unsupported_locales != [])
+# sake of build/locale_tool.py. Ensure that GN doesn't complain about them
+# being unused.
+not_needed([ "android_chrome_omitted_locales" ])
+not_needed([ "ios_unsupported_locales" ])
 
-# Note: keep in sync with below.
 locales = [
   "am",
   "ar",
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 63dcb9d..8f259e6 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-8902218341216194016
\ No newline at end of file
+8902165776636496112
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index a3a3eba..72796f7 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-8902265867695084032
\ No newline at end of file
+8902165780797463872
\ No newline at end of file
diff --git a/cc/test/property_tree_test_utils.cc b/cc/test/property_tree_test_utils.cc
index 0d5159a..1142eaa 100644
--- a/cc/test/property_tree_test_utils.cc
+++ b/cc/test/property_tree_test_utils.cc
@@ -141,7 +141,6 @@
   transform_node->should_be_snapped = true;
   transform_node->scrolls = true;
 
-  scroll_tree.SetScrollOffset(layer->element_id(), gfx::ScrollOffset());
   scroll_tree.set_needs_update(true);
   return *node;
 }
@@ -268,11 +267,11 @@
                    scoped_refptr<Layer> outer_viewport_scroll_layer,
                    const gfx::Size& outer_viewport_size) {
   DCHECK(root);
-  DCHECK_EQ(root, root->layer_tree_host()->root_layer());
-  DCHECK(root->layer_tree_host()->IsUsingLayerLists());
-
+  bool is_using_layer_lists = root->layer_tree_host()->IsUsingLayerLists();
   scoped_refptr<Layer> inner_viewport_container_layer = Layer::Create();
   scoped_refptr<Layer> overscroll_elasticity_layer;
+  if (!is_using_layer_lists)
+    overscroll_elasticity_layer = Layer::Create();
   scoped_refptr<Layer> page_scale_layer = Layer::Create();
   scoped_refptr<Layer> inner_viewport_scroll_layer = Layer::Create();
   scoped_refptr<Layer> outer_viewport_container_layer = Layer::Create();
@@ -286,15 +285,25 @@
   outer_viewport_scroll_layer->SetHitTestable(true);
 
   root->AddChild(inner_viewport_container_layer);
-  root->AddChild(page_scale_layer);
-  root->AddChild(inner_viewport_scroll_layer);
-  root->AddChild(outer_viewport_container_layer);
-  root->AddChild(outer_viewport_scroll_layer);
+  if (root->layer_tree_host()->IsUsingLayerLists()) {
+    root->AddChild(page_scale_layer);
+    root->AddChild(inner_viewport_scroll_layer);
+    root->AddChild(outer_viewport_container_layer);
+    root->AddChild(outer_viewport_scroll_layer);
+  } else {
+    inner_viewport_container_layer->AddChild(overscroll_elasticity_layer);
+    overscroll_elasticity_layer->AddChild(page_scale_layer);
+    page_scale_layer->AddChild(inner_viewport_scroll_layer);
+    inner_viewport_scroll_layer->AddChild(outer_viewport_container_layer);
+    outer_viewport_container_layer->AddChild(outer_viewport_scroll_layer);
+    root->layer_tree_host()->property_trees()->needs_rebuild = true;
+  }
 
   root->layer_tree_host()->SetElementIdsForTesting();
   ViewportLayers viewport_layers;
   viewport_layers.overscroll_elasticity_element_id =
-      OverscrollElasticityElementId();
+      is_using_layer_lists ? OverscrollElasticityElementId()
+                           : overscroll_elasticity_layer->element_id();
   viewport_layers.page_scale = page_scale_layer;
   viewport_layers.inner_viewport_container = inner_viewport_container_layer;
   viewport_layers.outer_viewport_container = outer_viewport_container_layer;
@@ -302,10 +311,12 @@
   viewport_layers.outer_viewport_scroll = outer_viewport_scroll_layer;
   root->layer_tree_host()->RegisterViewportLayers(viewport_layers);
 
-  SetupViewportProperties(
-      root, page_scale_layer.get(), inner_viewport_container_layer.get(),
-      inner_viewport_scroll_layer.get(), outer_viewport_container_layer.get(),
-      outer_viewport_scroll_layer.get());
+  if (root->layer_tree_host()->IsUsingLayerLists()) {
+    SetupViewportProperties(
+        root, page_scale_layer.get(), inner_viewport_container_layer.get(),
+        inner_viewport_scroll_layer.get(), outer_viewport_container_layer.get(),
+        outer_viewport_scroll_layer.get());
+  }
 }
 
 void SetupViewport(Layer* root,
@@ -326,7 +337,6 @@
   LayerTreeImpl* layer_tree_impl = root->layer_tree_impl();
   DCHECK(!layer_tree_impl->InnerViewportScrollLayer());
   DCHECK(layer_tree_impl->settings().use_layer_lists);
-  DCHECK_EQ(root, layer_tree_impl->root_layer_for_testing());
 
   std::unique_ptr<LayerImpl> inner_viewport_container_layer =
       LayerImpl::Create(layer_tree_impl, 10000);
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index a480efec..30b2b7a5 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -200,8 +200,7 @@
   mutator_host_->SetMutatorHostClient(nullptr);
 
   // We must clear any pointers into the layer tree prior to destroying it.
-  if (IsUsingLayerLists())
-    RegisterViewportLayers(ViewportLayers());
+  RegisterViewportLayers(ViewportLayers());
 
   if (root_layer_) {
     root_layer_->SetLayerTreeHost(nullptr);
@@ -802,7 +801,13 @@
   // need to be built here.
   if (!IsUsingLayerLists()) {
     TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::BuildPropertyTrees");
-    PropertyTreeBuilder::BuildPropertyTrees(this);
+    Layer* page_scale_layer = viewport_layers_.page_scale.get();
+    gfx::Transform identity_transform;
+    PropertyTreeBuilder::BuildPropertyTrees(
+        root_layer_.get(), page_scale_layer, inner_viewport_scroll_layer(),
+        outer_viewport_scroll_layer(), overscroll_elasticity_element_id(),
+        elastic_overscroll_, page_scale_factor_, device_scale_factor_,
+        device_viewport_rect_, identity_transform, &property_trees_);
     TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
                          "LayerTreeHost::UpdateLayers_BuiltPropertyTrees",
                          TRACE_EVENT_SCOPE_THREAD, "property_trees",
@@ -1105,7 +1110,12 @@
   //     overscroll elasticity (optional)
   //       page scale
   //         inner viewport scroll
-  DCHECK(IsUsingLayerLists());
+  DCHECK(IsUsingLayerLists() || !layers.page_scale ||
+         layers.inner_viewport_scroll->parent() == layers.page_scale);
+  DCHECK(IsUsingLayerLists() || !layers.page_scale ||
+         layers.page_scale->parent()->element_id() ==
+             layers.overscroll_elasticity_element_id ||
+         layers.page_scale->parent() == layers.inner_viewport_container);
   viewport_layers_.overscroll_elasticity_element_id =
       layers.overscroll_elasticity_element_id;
   viewport_layers_.page_scale = layers.page_scale;
@@ -1683,7 +1693,12 @@
 }
 
 void LayerTreeHost::BuildPropertyTreesForTesting() {
-  PropertyTreeBuilder::BuildPropertyTrees(this);
+  gfx::Transform identity_transform;
+  PropertyTreeBuilder::BuildPropertyTrees(
+      root_layer(), page_scale_layer(), inner_viewport_scroll_layer(),
+      outer_viewport_scroll_layer(), overscroll_elasticity_element_id(),
+      elastic_overscroll(), page_scale_factor(), device_scale_factor(),
+      device_viewport_rect(), identity_transform, property_trees());
 }
 
 bool LayerTreeHost::IsElementInPropertyTrees(ElementId element_id,
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc
index 86e02f9..a3a63ffd 100644
--- a/cc/trees/layer_tree_host_common.cc
+++ b/cc/trees/layer_tree_host_common.cc
@@ -31,6 +31,7 @@
 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting::
     CalcDrawPropsMainInputsForTesting(Layer* root_layer,
                                       const gfx::Rect& device_viewport_rect,
+                                      const gfx::Transform& device_transform,
                                       float device_scale_factor,
                                       float page_scale_factor,
                                       const Layer* page_scale_layer,
@@ -38,6 +39,7 @@
                                       const Layer* outer_viewport_scroll_layer)
     : root_layer(root_layer),
       device_viewport_rect(device_viewport_rect),
+      device_transform(device_transform),
       device_scale_factor(device_scale_factor),
       page_scale_factor(page_scale_factor),
       page_scale_layer(page_scale_layer),
@@ -46,15 +48,24 @@
 
 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting::
     CalcDrawPropsMainInputsForTesting(Layer* root_layer,
-                                      const gfx::Rect& device_viewport_rect)
+                                      const gfx::Rect& device_viewport_rect,
+                                      const gfx::Transform& device_transform)
     : CalcDrawPropsMainInputsForTesting(root_layer,
                                         device_viewport_rect,
+                                        device_transform,
                                         1.f,
                                         1.f,
                                         nullptr,
                                         nullptr,
                                         nullptr) {}
 
+LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting::
+    CalcDrawPropsMainInputsForTesting(Layer* root_layer,
+                                      const gfx::Rect& device_viewport_rect)
+    : CalcDrawPropsMainInputsForTesting(root_layer,
+                                        device_viewport_rect,
+                                        gfx::Transform()) {}
+
 LayerTreeHostCommon::CalcDrawPropsImplInputs::CalcDrawPropsImplInputs(
     LayerImpl* root_layer,
     const gfx::Rect& device_viewport_rect,
@@ -589,18 +600,13 @@
     // unnecessary setting of the flag in layer list mode.
     property_trees->needs_rebuild = false;
   } else {
-    DCHECK_EQ(1.f, inputs->page_scale_factor);
-    DCHECK(!inputs->page_scale_layer);
-    DCHECK(!inputs->inner_viewport_scroll_layer);
-    DCHECK(!inputs->outer_viewport_scroll_layer);
-    LayerTreeHost* layer_tree_host = inputs->root_layer->layer_tree_host();
-    // TODO(wangxianzhu): Cleanup LayerTreeHostCommon methods and let caller
-    // sets these inputs on LayerTreeHost directly.
-    layer_tree_host->SetViewportRectAndScale(inputs->device_viewport_rect,
-                                             inputs->device_scale_factor,
-                                             viz::LocalSurfaceIdAllocation());
+    gfx::Vector2dF elastic_overscroll;
     PropertyTreeBuilder::BuildPropertyTrees(
-        inputs->root_layer->layer_tree_host());
+        inputs->root_layer, inputs->page_scale_layer,
+        inputs->inner_viewport_scroll_layer,
+        inputs->outer_viewport_scroll_layer, ElementId(), elastic_overscroll,
+        inputs->page_scale_factor, inputs->device_scale_factor,
+        inputs->device_viewport_rect, inputs->device_transform, property_trees);
   }
   draw_property_utils::UpdatePropertyTrees(
       inputs->root_layer->layer_tree_host(), property_trees);
diff --git a/cc/trees/layer_tree_host_common.h b/cc/trees/layer_tree_host_common.h
index 9657c46..6c9dfd5f 100644
--- a/cc/trees/layer_tree_host_common.h
+++ b/cc/trees/layer_tree_host_common.h
@@ -38,15 +38,20 @@
    public:
     CalcDrawPropsMainInputsForTesting(Layer* root_layer,
                                       const gfx::Rect& device_viewport_rect,
+                                      const gfx::Transform& device_transform,
                                       float device_scale_factor,
                                       float page_scale_factor,
                                       const Layer* page_scale_layer,
                                       const Layer* inner_viewport_scroll_layer,
                                       const Layer* outer_viewport_scroll_layer);
     CalcDrawPropsMainInputsForTesting(Layer* root_layer,
+                                      const gfx::Rect& device_viewport_rect,
+                                      const gfx::Transform& device_transform);
+    CalcDrawPropsMainInputsForTesting(Layer* root_layer,
                                       const gfx::Rect& device_viewport_rect);
     Layer* root_layer;
     gfx::Rect device_viewport_rect;
+    gfx::Transform device_transform;
     float device_scale_factor;
     float page_scale_factor;
     const Layer* page_scale_layer;
diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc
index b34f461..b02852cd 100644
--- a/cc/trees/layer_tree_host_common_unittest.cc
+++ b/cc/trees/layer_tree_host_common_unittest.cc
@@ -104,11 +104,11 @@
                                       float device_scale_factor = 1.0f,
                                       float page_scale_factor = 1.0f,
                                       Layer* page_scale_layer = nullptr) {
-    if (!host()->IsUsingLayerLists() &&
-        device_scale_factor != host()->device_scale_factor()) {
-      DCHECK_EQ(1.0f, page_scale_factor);
-      DCHECK(!page_scale_layer);
-      host()->property_trees()->needs_rebuild = true;
+    if (!host()->IsUsingLayerLists()) {
+      if (device_scale_factor != host()->device_scale_factor() ||
+          page_scale_factor != host()->page_scale_factor()) {
+        host()->property_trees()->needs_rebuild = true;
+      }
     }
 
     EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f));
@@ -7034,8 +7034,9 @@
 }
 
 // Needs layer tree mode: mask layer.
-TEST_F(LayerTreeHostCommonTestWithLayerTree, DrawPropertyDeviceScale) {
+TEST_F(LayerTreeHostCommonTestWithLayerTree, DrawPropertyScales) {
   auto root = Layer::Create();
+  auto page_scale = Layer::Create();
   auto child1 = Layer::Create();
   auto child2 = Layer::Create();
 
@@ -7054,11 +7055,14 @@
   mask->SetBounds(child1->bounds());
   child1->SetMaskLayer(mask);
 
-  root->AddChild(child1);
-  root->AddChild(child2);
+  page_scale->AddChild(child1);
+  page_scale->AddChild(child2);
+  root->AddChild(page_scale);
   host()->SetRootLayer(root);
   host()->SetElementIdsForTesting();
 
+  CommitAndActivate();
+
   TransformOperations scale;
   scale.AppendScale(5.f, 8.f, 3.f);
 
@@ -7071,72 +7075,9 @@
   CommitAndActivate();
 
   EXPECT_FLOAT_EQ(1.f, ImplOf(root)->GetIdealContentsScale());
-  EXPECT_FLOAT_EQ(3.f, ImplOf(child1)->GetIdealContentsScale());
-  EXPECT_FLOAT_EQ(3.f, ImplOf(mask)->GetIdealContentsScale());
-  EXPECT_FLOAT_EQ(5.f, ImplOf(child2)->GetIdealContentsScale());
-
-  EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(ImplOf(root)));
-  EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(ImplOf(child1)));
-  EXPECT_FLOAT_EQ(8.f, GetMaximumAnimationScale(ImplOf(child2)));
-
-  // Changing device-scale would affect ideal_contents_scale and
-  // maximum_animation_contents_scale.
-
-  float device_scale_factor = 4.0f;
-  CommitAndActivate(device_scale_factor);
-
-  EXPECT_FLOAT_EQ(4.f, ImplOf(root)->GetIdealContentsScale());
-  EXPECT_FLOAT_EQ(12.f, ImplOf(child1)->GetIdealContentsScale());
-  EXPECT_FLOAT_EQ(12.f, ImplOf(mask)->GetIdealContentsScale());
-  EXPECT_FLOAT_EQ(20.f, ImplOf(child2)->GetIdealContentsScale());
-
-  EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(ImplOf(root)));
-  EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(ImplOf(child1)));
-  EXPECT_FLOAT_EQ(32.f, GetMaximumAnimationScale(ImplOf(child2)));
-}
-
-TEST_F(LayerTreeHostCommonTest, DrawPropertyScales) {
-  auto root = Layer::Create();
-  auto page_scale = Layer::Create();
-  auto child1 = Layer::Create();
-  auto child2 = Layer::Create();
-
-  gfx::Transform scale_transform_child1, scale_transform_child2;
-  scale_transform_child1.Scale(2, 3);
-  scale_transform_child2.Scale(4, 5);
-
-  root->SetBounds(gfx::Size(1, 1));
-  root->SetIsDrawable(true);
-  child1->SetBounds(gfx::Size(1, 1));
-  child1->SetIsDrawable(true);
-  child2->SetBounds(gfx::Size(1, 1));
-  child2->SetIsDrawable(true);
-
-  root->AddChild(child1);
-  root->AddChild(child2);
-  root->AddChild(page_scale);
-  host()->SetRootLayer(root);
-  host()->SetElementIdsForTesting();
-
-  SetupRootProperties(root.get());
-  CopyProperties(root.get(), page_scale.get());
-  CreateTransformNode(page_scale.get());
-  CopyProperties(page_scale.get(), child1.get());
-  CreateTransformNode(child1.get()).local = scale_transform_child1;
-  CopyProperties(page_scale.get(), child2.get());
-  CreateTransformNode(child2.get()).local = scale_transform_child2;
-
-  TransformOperations scale;
-  scale.AppendScale(5.f, 8.f, 3.f);
-
-  AddAnimatedTransformToElementWithAnimation(child2->element_id(), timeline(),
-                                             1.0, TransformOperations(), scale);
-
-  CommitAndActivate();
-
-  EXPECT_FLOAT_EQ(1.f, ImplOf(root)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(1.f, ImplOf(page_scale)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(3.f, ImplOf(child1)->GetIdealContentsScale());
+  EXPECT_FLOAT_EQ(3.f, ImplOf(mask)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(5.f, ImplOf(child2)->GetIdealContentsScale());
 
   EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(ImplOf(root)));
@@ -7154,6 +7095,7 @@
   EXPECT_FLOAT_EQ(1.f, ImplOf(root)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(3.f, ImplOf(page_scale)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(9.f, ImplOf(child1)->GetIdealContentsScale());
+  EXPECT_FLOAT_EQ(9.f, ImplOf(mask)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(15.f, ImplOf(child2)->GetIdealContentsScale());
 
   EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(ImplOf(root)));
@@ -7170,6 +7112,7 @@
   EXPECT_FLOAT_EQ(4.f, ImplOf(root)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(12.f, ImplOf(page_scale)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(36.f, ImplOf(child1)->GetIdealContentsScale());
+  EXPECT_FLOAT_EQ(36.f, ImplOf(mask)->GetIdealContentsScale());
   EXPECT_FLOAT_EQ(60.f, ImplOf(child2)->GetIdealContentsScale());
 
   EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(ImplOf(root)));
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 90bca1a0..400bb14 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -945,11 +945,11 @@
   auto* root = SetupDefaultRootLayer(gfx::Size(110, 110));
   root->SetHitTestable(true);
   root->SetScrollable(gfx::Size(10, 10));
-  CreateScrollNode(root);
   root->layer_tree_impl()
       ->property_trees()
       ->scroll_tree.UpdateScrollOffsetBaseForTesting(root->element_id(),
                                                      scroll_offset);
+  CreateScrollNode(root);
   UpdateDrawProperties(host_impl_->active_tree());
 
   std::unique_ptr<ScrollAndScaleSet> scroll_info;
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 81dc18b..5a10a10 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -3106,15 +3106,16 @@
 // from LayerTreeHost to LayerTreeHostImpl in the MT compositor.
 class LayerTreeHostTestStartPageScaleAnimation : public LayerTreeHostTest {
  public:
-  LayerTreeHostTestStartPageScaleAnimation() { SetUseLayerLists(); }
+  LayerTreeHostTestStartPageScaleAnimation() = default;
 
   void SetupTree() override {
     LayerTreeHostTest::SetupTree();
 
     Layer* root_layer = layer_tree_host()->root_layer();
 
-    scroll_layer_ = FakePictureLayer::Create(&client_);
-    scroll_layer_->set_always_update_resources(true);
+    scoped_refptr<FakePictureLayer> layer = FakePictureLayer::Create(&client_);
+    layer->set_always_update_resources(true);
+    scroll_layer_ = layer;
 
     scroll_layer_->SetBounds(gfx::Size(2 * root_layer->bounds().width(),
                                        2 * root_layer->bounds().height()));
@@ -3168,7 +3169,7 @@
   }
 
   FakeContentLayerClient client_;
-  scoped_refptr<FakePictureLayer> scroll_layer_;
+  scoped_refptr<Layer> scroll_layer_;
 };
 
 // Single thread proxy does not support impl-side page scale changes.
@@ -3176,16 +3177,28 @@
 
 class ViewportDeltasAppliedDuringPinch : public LayerTreeHostTest {
  protected:
-  ViewportDeltasAppliedDuringPinch() : sent_gesture_(false) {
-    SetUseLayerLists();
-  }
+  ViewportDeltasAppliedDuringPinch() : sent_gesture_(false) {}
 
   void SetupTree() override {
-    SetInitialRootBounds(gfx::Size(200, 200));
-    LayerTreeHostTest::SetupTree();
-    Layer* root = layer_tree_host()->root_layer();
-    SetupViewport(root, gfx::Size(500, 500), gfx::Size(500, 500));
+    scoped_refptr<Layer> root_clip = Layer::Create();
+    root_clip->SetBounds(gfx::Size(500, 500));
+    scoped_refptr<Layer> page_scale_layer = Layer::Create();
+    page_scale_layer->SetBounds(gfx::Size(500, 500));
+
+    scoped_refptr<Layer> pinch = Layer::Create();
+    pinch->SetBounds(gfx::Size(500, 500));
+    pinch->SetScrollable(gfx::Size(200, 200));
+    page_scale_layer->AddChild(pinch);
+    root_clip->AddChild(page_scale_layer);
+
+    ViewportLayers viewport_layers;
+    viewport_layers.page_scale = page_scale_layer;
+    viewport_layers.inner_viewport_container = root_clip;
+    viewport_layers.inner_viewport_scroll = pinch;
+    layer_tree_host()->RegisterViewportLayers(viewport_layers);
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 1.f, 4.f);
+    layer_tree_host()->SetRootLayer(root_clip);
+    LayerTreeHostTest::SetupTree();
   }
 
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
@@ -5367,26 +5380,45 @@
 class LayerTreeHostTestElasticOverscroll : public LayerTreeHostTest {
  public:
   LayerTreeHostTestElasticOverscroll()
-      : scroll_elasticity_helper_(nullptr), num_draws_(0) {
-    SetUseLayerLists();
-  }
+      : scroll_elasticity_helper_(nullptr), num_draws_(0) {}
 
   void InitializeSettings(LayerTreeSettings* settings) override {
     settings->enable_elastic_overscroll = true;
   }
 
   void SetupTree() override {
-    LayerTreeHostTest::SetupTree();
-    root_layer_ = layer_tree_host()->root_layer();
-    SetupViewport(root_layer_, root_layer_->bounds(), root_layer_->bounds());
+    root_layer_ = Layer::Create();
+    root_layer_->SetBounds(gfx::Size(10, 10));
+
+    scoped_refptr<Layer> inner_viewport_container_layer = Layer::Create();
+    inner_viewport_container_layer->SetBounds(gfx::Size(10, 10));
+    scoped_refptr<Layer> overscroll_elasticity_layer = Layer::Create();
+    overscroll_elasticity_layer->SetElementId(
+        LayerIdToElementIdForTesting(overscroll_elasticity_layer->id()));
+    scoped_refptr<Layer> page_scale_layer = Layer::Create();
+    scoped_refptr<Layer> inner_viewport_scroll_layer = Layer::Create();
+    inner_viewport_scroll_layer->SetScrollable(
+        inner_viewport_container_layer->bounds());
+
+    root_layer_->AddChild(inner_viewport_container_layer);
+    inner_viewport_container_layer->AddChild(overscroll_elasticity_layer);
+    overscroll_elasticity_layer->AddChild(page_scale_layer);
+    page_scale_layer->AddChild(inner_viewport_scroll_layer);
 
     scoped_refptr<Layer> content_layer = FakePictureLayer::Create(&client_);
     content_layer_id_ = content_layer->id();
     content_layer->SetBounds(gfx::Size(10, 10));
-    CopyProperties(layer_tree_host()->outer_viewport_scroll_layer(),
-                   content_layer.get());
-    root_layer_->AddChild(content_layer);
+    inner_viewport_scroll_layer->AddChild(content_layer);
 
+    layer_tree_host()->SetRootLayer(root_layer_);
+    ViewportLayers viewport_layers;
+    viewport_layers.overscroll_elasticity_element_id =
+        overscroll_elasticity_layer->element_id();
+    viewport_layers.page_scale = page_scale_layer;
+    viewport_layers.inner_viewport_container = inner_viewport_container_layer;
+    viewport_layers.inner_viewport_scroll = inner_viewport_scroll_layer;
+    layer_tree_host()->RegisterViewportLayers(viewport_layers);
+    LayerTreeHostTest::SetupTree();
     client_.set_bounds(content_layer->bounds());
   }
 
@@ -5435,7 +5467,7 @@
 
  private:
   FakeContentLayerClient client_;
-  Layer* root_layer_;
+  scoped_refptr<Layer> root_layer_;
   ScrollElasticityHelper* scroll_elasticity_helper_;
   int content_layer_id_;
   int num_draws_;
@@ -6857,19 +6889,23 @@
  protected:
   LayerTreeHostTestCrispUpAfterPinchEnds()
       : playback_allowed_event_(base::WaitableEvent::ResetPolicy::MANUAL,
-                                base::WaitableEvent::InitialState::SIGNALED) {
-    SetUseLayerLists();
-  }
+                                base::WaitableEvent::InitialState::SIGNALED) {}
 
   void SetupTree() override {
     frame_ = 1;
     posted_ = false;
     client_.set_fill_with_nonsolid_color(true);
 
-    SetInitialRootBounds(gfx::Size(500, 500));
-    LayerTreeHostTest::SetupTree();
-    Layer* root = layer_tree_host()->root_layer();
-    SetupViewport(root, root->bounds(), root->bounds());
+    scoped_refptr<Layer> root_clip = Layer::Create();
+    root_clip->SetBounds(gfx::Size(500, 500));
+    scoped_refptr<Layer> page_scale_layer = Layer::Create();
+    page_scale_layer->SetBounds(gfx::Size(500, 500));
+
+    scoped_refptr<Layer> pinch = Layer::Create();
+    pinch->SetBounds(gfx::Size(500, 500));
+    pinch->SetScrollable(gfx::Size(500, 500));
+    page_scale_layer->AddChild(pinch);
+    root_clip->AddChild(page_scale_layer);
 
     std::unique_ptr<FakeRecordingSource> recording(new FakeRecordingSource);
     recording->SetPlaybackAllowedEvent(&playback_allowed_event_);
@@ -6880,12 +6916,17 @@
     layer->SetContentsOpaque(true);
     // Avoid LCD text on the layer so we don't cause extra commits when we
     // pinch.
-    CopyProperties(layer_tree_host()->inner_viewport_scroll_layer(),
-                   layer.get());
-    root->AddChild(layer);
+    pinch->AddChild(layer);
 
+    ViewportLayers viewport_layers;
+    viewport_layers.page_scale = page_scale_layer;
+    viewport_layers.inner_viewport_container = root_clip;
+    viewport_layers.inner_viewport_scroll = pinch;
+    layer_tree_host()->RegisterViewportLayers(viewport_layers);
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 1.f, 4.f);
-    client_.set_bounds(root->bounds());
+    layer_tree_host()->SetRootLayer(root_clip);
+    LayerTreeHostTest::SetupTree();
+    client_.set_bounds(root_clip->bounds());
   }
 
   // Returns the delta scale of all quads in the frame's root pass from their
@@ -7152,20 +7193,23 @@
  protected:
   LayerTreeHostTestContinuousDrawWhenCreatingVisibleTiles()
       : playback_allowed_event_(base::WaitableEvent::ResetPolicy::MANUAL,
-                                base::WaitableEvent::InitialState::SIGNALED) {
-    SetUseLayerLists();
-  }
+                                base::WaitableEvent::InitialState::SIGNALED) {}
 
   void SetupTree() override {
     step_ = 1;
     continuous_draws_ = 0;
     client_.set_fill_with_nonsolid_color(true);
 
-    SetInitialRootBounds(gfx::Size(500, 500));
-    LayerTreeHostTest::SetupTree();
+    scoped_refptr<Layer> root_clip = Layer::Create();
+    root_clip->SetBounds(gfx::Size(500, 500));
+    scoped_refptr<Layer> page_scale_layer = Layer::Create();
+    page_scale_layer->SetBounds(gfx::Size(500, 500));
 
-    Layer* root = layer_tree_host()->root_layer();
-    SetupViewport(root, root->bounds(), root->bounds());
+    scoped_refptr<Layer> pinch = Layer::Create();
+    pinch->SetBounds(gfx::Size(500, 500));
+    pinch->SetScrollable(gfx::Size(500, 500));
+    page_scale_layer->AddChild(pinch);
+    root_clip->AddChild(page_scale_layer);
 
     std::unique_ptr<FakeRecordingSource> recording(new FakeRecordingSource);
     recording->SetPlaybackAllowedEvent(&playback_allowed_event_);
@@ -7174,12 +7218,19 @@
                                                     std::move(recording));
     layer->SetBounds(gfx::Size(500, 500));
     layer->SetContentsOpaque(true);
-    CopyProperties(layer_tree_host()->inner_viewport_scroll_layer(),
-                   layer.get());
-    root->AddChild(layer);
+    // Avoid LCD text on the layer so we don't cause extra commits when we
+    // pinch.
+    pinch->AddChild(layer);
 
+    ViewportLayers viewport_layers;
+    viewport_layers.page_scale = page_scale_layer;
+    viewport_layers.inner_viewport_container = root_clip;
+    viewport_layers.inner_viewport_scroll = pinch;
+    layer_tree_host()->RegisterViewportLayers(viewport_layers);
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 1.f, 4.f);
-    client_.set_bounds(root->bounds());
+    layer_tree_host()->SetRootLayer(root_clip);
+    LayerTreeHostTest::SetupTree();
+    client_.set_bounds(root_clip->bounds());
   }
 
   // Returns the delta scale of all quads in the frame's root pass from their
@@ -7512,42 +7563,44 @@
 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestUpdateCopyRequests);
 
 class LayerTreeTestPageScaleFlags : public LayerTreeTest {
- public:
-  LayerTreeTestPageScaleFlags() { SetUseLayerLists(); }
-
  protected:
   void SetupTree() override {
     // -root
     //   -pre page scale
-    //   -viewport layers
+    //   -page scale
+    //     -inner viewport scroll
+    //       -page scale grandchild
     //   -post page scale
 
-    LayerTreeTest::SetupTree();
-    Layer* root = layer_tree_host()->root_layer();
-
+    scoped_refptr<Layer> root = Layer::Create();
     scoped_refptr<Layer> pre_page_scale = Layer::Create();
-    CopyProperties(root, pre_page_scale.get());
-    root->AddChild(pre_page_scale);
-
-    SetupViewport(root, root->bounds(), root->bounds());
-
+    scoped_refptr<Layer> page_scale = Layer::Create();
+    scoped_refptr<Layer> inner_viewport_scroll = Layer::Create();
+    scoped_refptr<Layer> page_scale_grandchild = Layer::Create();
     scoped_refptr<Layer> post_page_scale = Layer::Create();
-    CopyProperties(root, post_page_scale.get());
+
+    root->AddChild(pre_page_scale);
+    root->AddChild(page_scale);
     root->AddChild(post_page_scale);
 
-    affected_by_page_scale_.push_back(
-        layer_tree_host()->page_scale_layer()->id());
-    affected_by_page_scale_.push_back(
-        layer_tree_host()->inner_viewport_scroll_layer()->id());
-    affected_by_page_scale_.push_back(
-        layer_tree_host()->outer_viewport_container_layer()->id());
-    affected_by_page_scale_.push_back(
-        layer_tree_host()->outer_viewport_scroll_layer()->id());
+    page_scale->AddChild(inner_viewport_scroll);
+    inner_viewport_scroll->AddChild(page_scale_grandchild);
+
+    layer_tree_host()->SetRootLayer(root);
+    LayerTreeTest::SetupTree();
+
+    ViewportLayers viewport_layers;
+    viewport_layers.inner_viewport_container = root;
+    viewport_layers.page_scale = page_scale;
+    viewport_layers.inner_viewport_scroll = inner_viewport_scroll;
+    layer_tree_host()->RegisterViewportLayers(viewport_layers);
+
+    affected_by_page_scale_.push_back(page_scale->id());
+    affected_by_page_scale_.push_back(inner_viewport_scroll->id());
+    affected_by_page_scale_.push_back(page_scale_grandchild->id());
 
     not_affected_by_page_scale_.push_back(root->id());
     not_affected_by_page_scale_.push_back(pre_page_scale->id());
-    not_affected_by_page_scale_.push_back(
-        layer_tree_host()->inner_viewport_container_layer()->id());
     not_affected_by_page_scale_.push_back(post_page_scale->id());
   }
 
@@ -8762,8 +8815,6 @@
 class LayerTreeHostTopControlsDeltaTriggersViewportUpdate
     : public LayerTreeHostTest {
  public:
-  LayerTreeHostTopControlsDeltaTriggersViewportUpdate() { SetUseLayerLists(); }
-
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
   void SetupTree() override {
diff --git a/cc/trees/layer_tree_host_unittest_masks.cc b/cc/trees/layer_tree_host_unittest_masks.cc
index 41a9958..d81d3c3 100644
--- a/cc/trees/layer_tree_host_unittest_masks.cc
+++ b/cc/trees/layer_tree_host_unittest_masks.cc
@@ -22,9 +22,7 @@
     // the surface bounds to be larger. It also has a parent that clips the
     // masked layer and its surface.
 
-    SetInitialRootBounds(gfx::Size(100, 100));
-    LayerTreeTest::SetupTree();
-    Layer* root = layer_tree_host()->root_layer();
+    scoped_refptr<Layer> root = Layer::Create();
 
     scoped_refptr<FakePictureLayer> content_layer =
         FakePictureLayer::Create(&client_);
@@ -44,6 +42,9 @@
             &client_, std::move(recording_source));
     content_layer->SetMaskLayer(mask_layer);
 
+    gfx::Size root_size(100, 100);
+    root->SetBounds(root_size);
+
     gfx::Size layer_size(100, 100);
     content_layer->SetBounds(layer_size);
 
@@ -51,23 +52,16 @@
     mask_layer->SetBounds(mask_size);
     mask_layer_id_ = mask_layer->id();
 
-    scoped_refptr<Layer> clip_layer = Layer::Create();
-    clip_layer->SetBounds(gfx::Size(50, 50));
-    clip_layer->SetMasksToBounds(true);
-
-    scoped_refptr<Layer> scroll_layer = Layer::Create();
-    scroll_layer->SetBounds(layer_size);
-    scroll_layer->SetScrollable(gfx::Size(50, 50));
-    scroll_layer->SetMasksToBounds(true);
-    scroll_layer->SetElementId(
-        LayerIdToElementIdForTesting(scroll_layer->id()));
-
-    root->AddChild(clip_layer);
-    clip_layer->AddChild(scroll_layer);
-    scroll_layer->AddChild(content_layer);
+    layer_tree_host()->SetRootLayer(root);
+    LayerTreeTest::SetupTree();
+    scoped_refptr<Layer> outer_viewport_scroll_layer = Layer::Create();
+    outer_viewport_scroll_layer->SetBounds(layer_size);
+    SetupViewport(root.get(), outer_viewport_scroll_layer, gfx::Size(50, 50));
+    layer_tree_host()->outer_viewport_container_layer()->SetMasksToBounds(true);
+    outer_viewport_scroll_layer->AddChild(content_layer);
 
     client_.set_bounds(root->bounds());
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
+    outer_viewport_scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
   }
 
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc
index 4a92483b..c1063631 100644
--- a/cc/trees/layer_tree_host_unittest_scroll.cc
+++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -75,8 +75,6 @@
 
 class LayerTreeHostScrollTest : public LayerTreeTest {
  protected:
-  LayerTreeHostScrollTest() { SetUseLayerLists(); }
-
   void SetupTree() override {
     LayerTreeTest::SetupTree();
     Layer* root_layer = layer_tree_host()->root_layer();
@@ -86,39 +84,26 @@
                                   root_layer->bounds().height() + 100);
 
     SetupViewport(root_layer, root_layer->bounds(), scroll_layer_bounds);
-    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
-        base::BindRepeating(&LayerTreeHostScrollTest::DidScrollOuterViewport,
-                            base::Unretained(this)));
   }
-
-  // This is set as did_scroll_callback of scroll layers to automatically
-  // synchronize scroll delta from impl-side, which simulates cc client (e.g.
-  // Blink) behavior when handling impl-side scrolls.
-  void SyncScrollFromImpl(const gfx::ScrollOffset& scroll_offset,
-                          const ElementId& element_id) {
-    SetScrollOffset(layer_tree_host()->LayerByElementId(element_id),
-                    scroll_offset);
-  }
-
-  virtual void DidScrollOuterViewport(const gfx::ScrollOffset& scroll_offset,
-                                      const ElementId& element_id) {
-    SyncScrollFromImpl(scroll_offset, element_id);
-    num_outer_viewport_scrolls_++;
-  }
-
-  int num_outer_viewport_scrolls_ = 0;
 };
 
 class LayerTreeHostScrollTestScrollSimple : public LayerTreeHostScrollTest {
  public:
   LayerTreeHostScrollTestScrollSimple()
-      : initial_scroll_(10, 20), second_scroll_(40, 5), scroll_amount_(2, -1) {}
+      : initial_scroll_(10, 20),
+        second_scroll_(40, 5),
+        scroll_amount_(2, -1),
+        num_scrolls_(0) {}
 
   void BeginTest() override {
     outer_viewport_container_layer_id_ =
         layer_tree_host()->outer_viewport_container_layer()->id();
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->SetScrollOffset(
+        initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
+        base::BindRepeating(
+            &LayerTreeHostScrollTestScrollSimple::DidScrollOuterViewport,
+            base::Unretained(this)));
     PostSetNeedsCommitToMainThread();
   }
 
@@ -132,7 +117,7 @@
           scroll_layer->CurrentScrollOffset());
 
       // Pretend like Javascript updated the scroll position itself.
-      SetScrollOffset(scroll_layer, second_scroll_);
+      scroll_layer->SetScrollOffset(second_scroll_);
     }
   }
 
@@ -163,12 +148,17 @@
     }
   }
 
-  void AfterTest() override { EXPECT_EQ(1, num_outer_viewport_scrolls_); }
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
+    num_scrolls_++;
+  }
+
+  void AfterTest() override { EXPECT_EQ(1, num_scrolls_); }
 
  private:
   gfx::ScrollOffset initial_scroll_;
   gfx::ScrollOffset second_scroll_;
   gfx::Vector2dF scroll_amount_;
+  int num_scrolls_;
   int outer_viewport_container_layer_id_;
 };
 
@@ -178,11 +168,14 @@
     : public LayerTreeHostScrollTest {
  public:
   LayerTreeHostScrollTestScrollMultipleRedraw()
-      : initial_scroll_(40, 10), scroll_amount_(-3, 17) {}
+      : initial_scroll_(40, 10), scroll_amount_(-3, 17), num_scrolls_(0) {}
 
   void BeginTest() override {
     scroll_layer_ = layer_tree_host()->outer_viewport_scroll_layer();
-    SetScrollOffset(scroll_layer_.get(), initial_scroll_);
+    scroll_layer_->SetScrollOffset(initial_scroll_);
+    scroll_layer_->set_did_scroll_callback(base::BindRepeating(
+        &LayerTreeHostScrollTestScrollMultipleRedraw::DidScrollOuterViewport,
+        base::Unretained(this)));
     PostSetNeedsCommitToMainThread();
   }
 
@@ -234,11 +227,16 @@
     }
   }
 
-  void AfterTest() override { EXPECT_EQ(1, num_outer_viewport_scrolls_); }
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
+    num_scrolls_++;
+  }
+
+  void AfterTest() override { EXPECT_EQ(1, num_scrolls_); }
 
  private:
   gfx::ScrollOffset initial_scroll_;
   gfx::Vector2dF scroll_amount_;
+  int num_scrolls_;
   scoped_refptr<Layer> scroll_layer_;
 };
 
@@ -256,11 +254,16 @@
         num_did_begin_main_frames_(0),
         num_will_commits_(0),
         num_did_commits_(0),
-        num_impl_commits_(0) {}
+        num_impl_commits_(0),
+        num_impl_scrolls_(0) {}
 
   void BeginTest() override {
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->SetScrollOffset(
+        initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
+        base::BindRepeating(
+            &LayerTreeHostScrollTestScrollAbortedCommit::DidScrollOuterViewport,
+            base::Unretained(this)));
     PostSetNeedsCommitToMainThread();
   }
 
@@ -279,7 +282,7 @@
     switch (num_will_begin_main_frames_) {
       case 1:
         // This will not be aborted because of the initial prop changes.
-        EXPECT_EQ(0, num_outer_viewport_scrolls_);
+        EXPECT_EQ(0, num_impl_scrolls_);
         EXPECT_EQ(0, layer_tree_host()->SourceFrameNumber());
         EXPECT_VECTOR_EQ(initial_scroll_,
                          root_scroll_layer->CurrentScrollOffset());
@@ -288,7 +291,7 @@
       case 2:
         // This commit will be aborted, and another commit will be
         // initiated from the redraw.
-        EXPECT_EQ(1, num_outer_viewport_scrolls_);
+        EXPECT_EQ(1, num_impl_scrolls_);
         EXPECT_EQ(1, layer_tree_host()->SourceFrameNumber());
         EXPECT_VECTOR_EQ(
             gfx::ScrollOffsetWithDelta(initial_scroll_, impl_scroll_),
@@ -298,7 +301,7 @@
         break;
       case 3:
         // This commit will not be aborted because of the scroll change.
-        EXPECT_EQ(2, num_outer_viewport_scrolls_);
+        EXPECT_EQ(2, num_impl_scrolls_);
         // The source frame number still increases even with the abort.
         EXPECT_EQ(2, layer_tree_host()->SourceFrameNumber());
         EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(
@@ -306,14 +309,12 @@
                          root_scroll_layer->CurrentScrollOffset());
         EXPECT_EQ(impl_scale_ * impl_scale_,
                   layer_tree_host()->page_scale_factor());
-        SetScrollOffset(
-            root_scroll_layer,
-            gfx::ScrollOffsetWithDelta(root_scroll_layer->CurrentScrollOffset(),
-                                       second_main_scroll_));
+        root_scroll_layer->SetScrollOffset(gfx::ScrollOffsetWithDelta(
+            root_scroll_layer->CurrentScrollOffset(), second_main_scroll_));
         break;
       case 4:
         // This commit will also be aborted.
-        EXPECT_EQ(3, num_outer_viewport_scrolls_);
+        EXPECT_EQ(3, num_impl_scrolls_);
         EXPECT_EQ(3, layer_tree_host()->SourceFrameNumber());
         gfx::Vector2dF delta =
             impl_scroll_ + impl_scroll_ + impl_scroll_ + second_main_scroll_;
@@ -411,8 +412,12 @@
     }
   }
 
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
+    num_impl_scrolls_++;
+  }
+
   void AfterTest() override {
-    EXPECT_EQ(3, num_outer_viewport_scrolls_);
+    EXPECT_EQ(3, num_impl_scrolls_);
     // Verify that the embedder sees aborted commits as real commits.
     EXPECT_EQ(4, num_will_begin_main_frames_);
     EXPECT_EQ(4, num_did_begin_main_frames_);
@@ -432,6 +437,7 @@
   int num_will_commits_;
   int num_did_commits_;
   int num_impl_commits_;
+  int num_impl_scrolls_;
 };
 
 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestScrollAbortedCommit);
@@ -498,41 +504,20 @@
 
   void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
-
-    scoped_refptr<Layer> container = Layer::Create();
-    container->SetBounds(gfx::Size(100, 100));
-    CopyProperties(layer_tree_host()->outer_viewport_scroll_layer(),
-                   container.get());
-    CreateTransformNode(container.get()).post_translation =
-        gfx::Vector2dF(0.25, 0);
-    CreateEffectNode(container.get()).render_surface_reason =
-        RenderSurfaceReason::kTest;
-    layer_tree_host()->root_layer()->AddChild(container);
-
-    scroll_layer_ = Layer::Create();
-    scroll_layer_->SetBounds(gfx::Size(200, 200));
-    scroll_layer_->SetScrollable(gfx::Size(100, 100));
-    scroll_layer_->SetIsDrawable(true);
-    scroll_layer_->SetElementId(
-        LayerIdToElementIdForTesting(scroll_layer_->id()));
-    CopyProperties(container.get(), scroll_layer_.get());
-    CreateTransformNode(scroll_layer_.get());
-    CreateScrollNode(scroll_layer_.get());
-    layer_tree_host()->root_layer()->AddChild(scroll_layer_);
-
-    scroll_layer_->set_did_scroll_callback(base::BindRepeating(
-        &LayerTreeHostScrollTestScrollSnapping::SyncScrollFromImpl,
-        base::Unretained(this)));
-
+    layer_tree_host()
+        ->outer_viewport_container_layer()
+        ->SetForceRenderSurfaceForTesting(true);
+    gfx::Transform translate;
+    translate.Translate(0.25f, 0.f);
+    layer_tree_host()->outer_viewport_container_layer()->SetTransform(
+        translate);
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.1f, 100.f);
   }
 
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
   void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
-    LayerImpl* scroll_layer =
-        impl->active_tree()->LayerById(scroll_layer_->id());
-
+    LayerImpl* scroll_layer = impl->OuterViewportScrollLayer();
     gfx::Transform translate;
 
     // Check that screen space transform of the scrollable layer is correctly
@@ -560,7 +545,6 @@
   }
 
  private:
-  scoped_refptr<Layer> scroll_layer_;
   gfx::Vector2dF scroll_amount_;
 };
 
@@ -571,16 +555,25 @@
   LayerTreeHostScrollTestCaseWithChild()
       : initial_offset_(10, 20),
         javascript_scroll_(40, 5),
-        scroll_amount_(2, -1) {}
+        scroll_amount_(2, -1),
+        num_scrolls_(0) {}
 
   void SetupTree() override {
     SetInitialDeviceScaleFactor(device_scale_factor_);
     SetInitialRootBounds(gfx::Size(10, 10));
     LayerTreeHostScrollTest::SetupTree();
     Layer* root_layer = layer_tree_host()->root_layer();
-    Layer* root_scroll_layer = layer_tree_host()->outer_viewport_scroll_layer();
 
-    child_layer_ = Layer::Create();
+    root_scroll_layer_ = FakePictureLayer::Create(&fake_content_layer_client_);
+    root_scroll_layer_->SetElementId(
+        LayerIdToElementIdForTesting(root_scroll_layer_->id()));
+    root_scroll_layer_->SetBounds(gfx::Size(110, 110));
+    root_scroll_layer_->SetPosition(gfx::PointF());
+    root_scroll_layer_->SetIsDrawable(true);
+
+    SetupViewport(root_layer, root_scroll_layer_, root_layer->bounds());
+
+    child_layer_ = FakePictureLayer::Create(&fake_content_layer_client_);
     child_layer_->set_did_scroll_callback(
         base::BindRepeating(&LayerTreeHostScrollTestCaseWithChild::DidScroll,
                             base::Unretained(this)));
@@ -588,15 +581,14 @@
         LayerIdToElementIdForTesting(child_layer_->id()));
     child_layer_->SetBounds(gfx::Size(110, 110));
 
-    gfx::Vector2dF child_layer_offset;
-    // Adjust the child layer horizontally so that scrolls will never hit it.
     if (scroll_child_layer_) {
       // Scrolls on the child layer will happen at 5, 5. If they are treated
       // like device pixels, and device scale factor is 2, then they will
       // be considered at 2.5, 2.5 in logical pixels, and will miss this layer.
-      child_layer_offset = gfx::Vector2dF(5.f, 5.f);
+      child_layer_->SetPosition(gfx::PointF(5.f, 5.f));
     } else {
-      child_layer_offset = gfx::Vector2dF(60.f, 5.f);
+      // Adjust the child layer horizontally so that scrolls will never hit it.
+      child_layer_->SetPosition(gfx::PointF(60.f, 5.f));
     }
 
     child_layer_->SetIsDrawable(true);
@@ -604,23 +596,24 @@
     child_layer_->SetHitTestable(true);
     child_layer_->SetElementId(
         LayerIdToElementIdForTesting(child_layer_->id()));
-    child_layer_->SetBounds(root_scroll_layer->bounds());
-    root_layer->AddChild(child_layer_);
-
-    CopyProperties(root_scroll_layer, child_layer_.get());
-    CreateTransformNode(child_layer_.get()).post_translation =
-        child_layer_offset;
-    CreateScrollNode(child_layer_.get());
+    child_layer_->SetBounds(root_scroll_layer_->bounds());
+    root_scroll_layer_->AddChild(child_layer_);
 
     if (scroll_child_layer_) {
-      expected_scroll_layer_ = child_layer_.get();
-      expected_no_scroll_layer_ = root_scroll_layer;
+      expected_scroll_layer_ = child_layer_;
+      expected_no_scroll_layer_ = root_scroll_layer_;
     } else {
-      expected_scroll_layer_ = root_scroll_layer;
-      expected_no_scroll_layer_ = child_layer_.get();
+      expected_scroll_layer_ = root_scroll_layer_;
+      expected_no_scroll_layer_ = child_layer_;
     }
 
-    SetScrollOffset(expected_scroll_layer_, initial_offset_);
+    expected_scroll_layer_->SetScrollOffset(initial_offset_);
+    fake_content_layer_client_.set_bounds(root_layer->bounds());
+
+    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
+        base::BindRepeating(
+            &LayerTreeHostScrollTestCaseWithChild::DidScrollOuterViewport,
+            base::Unretained(this)));
   }
 
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
@@ -634,12 +627,15 @@
   }
 
   void DidScroll(const gfx::ScrollOffset& offset, const ElementId& element_id) {
-    SyncScrollFromImpl(offset, element_id);
     final_scroll_offset_ = expected_scroll_layer_->CurrentScrollOffset();
     EXPECT_VECTOR_EQ(offset, final_scroll_offset_);
     EXPECT_EQ(element_id, expected_scroll_layer_->element_id());
   }
 
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
+    num_scrolls_++;
+  }
+
   void UpdateLayerTreeHost() override {
     EXPECT_VECTOR_EQ(gfx::Vector2d(),
                      expected_no_scroll_layer_->CurrentScrollOffset());
@@ -655,7 +651,7 @@
             expected_scroll_layer_->CurrentScrollOffset());
 
         // Pretend like Javascript updated the scroll position itself.
-        SetScrollOffset(expected_scroll_layer_, javascript_scroll_);
+        expected_scroll_layer_->SetScrollOffset(javascript_scroll_);
         break;
       case 2:
         EXPECT_VECTOR_EQ(
@@ -753,12 +749,12 @@
 
   void AfterTest() override {
     if (scroll_child_layer_) {
-      EXPECT_EQ(0, num_outer_viewport_scrolls_);
+      EXPECT_EQ(0, num_scrolls_);
       EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(javascript_scroll_,
                                                   scroll_amount_),
                        final_scroll_offset_);
     } else {
-      EXPECT_EQ(2, num_outer_viewport_scrolls_);
+      EXPECT_EQ(2, num_scrolls_);
       EXPECT_VECTOR_EQ(gfx::ScrollOffset(), final_scroll_offset_);
     }
   }
@@ -770,11 +766,15 @@
   gfx::ScrollOffset initial_offset_;
   gfx::ScrollOffset javascript_scroll_;
   gfx::Vector2d scroll_amount_;
+  int num_scrolls_;
   gfx::ScrollOffset final_scroll_offset_;
 
+  FakeContentLayerClient fake_content_layer_client_;
+
+  scoped_refptr<Layer> root_scroll_layer_;
   scoped_refptr<Layer> child_layer_;
-  Layer* expected_scroll_layer_;
-  Layer* expected_no_scroll_layer_;
+  scoped_refptr<Layer> expected_scroll_layer_;
+  scoped_refptr<Layer> expected_no_scroll_layer_;
 };
 
 TEST_F(LayerTreeHostScrollTestCaseWithChild, DeviceScaleFactor1_ScrollChild) {
@@ -822,7 +822,8 @@
       : initial_scroll_(10, 20),
         main_thread_scroll_(40, 5),
         impl_thread_scroll1_(2, -1),
-        impl_thread_scroll2_(-3, 10) {}
+        impl_thread_scroll2_(-3, 10),
+        num_scrolls_(0) {}
 
   void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
@@ -830,8 +831,12 @@
   }
 
   void BeginTest() override {
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->SetScrollOffset(
+        initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
+        base::BindRepeating(
+            &LayerTreeHostScrollTestSimple::DidScrollOuterViewport,
+            base::Unretained(this)));
     PostSetNeedsCommitToMainThread();
   }
 
@@ -846,8 +851,7 @@
 
       // Pretend like Javascript updated the scroll position itself with a
       // change of main_thread_scroll.
-      SetScrollOffset(
-          scroll_layer,
+      scroll_layer->SetScrollOffset(
           gfx::ScrollOffsetWithDelta(
               initial_scroll_, main_thread_scroll_ + impl_thread_scroll1_));
     }
@@ -923,13 +927,18 @@
     }
   }
 
-  void AfterTest() override { EXPECT_EQ(1, num_outer_viewport_scrolls_); }
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
+    num_scrolls_++;
+  }
+
+  void AfterTest() override { EXPECT_EQ(1, num_scrolls_); }
 
  private:
   gfx::ScrollOffset initial_scroll_;
   gfx::Vector2dF main_thread_scroll_;
   gfx::Vector2dF impl_thread_scroll1_;
   gfx::Vector2dF impl_thread_scroll2_;
+  int num_scrolls_;
 };
 
 // This tests scrolling on the impl side which is only possible with a thread.
@@ -950,8 +959,8 @@
   }
 
   void BeginTest() override {
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->SetScrollOffset(
+        initial_scroll_);
     PostSetNeedsCommitToMainThread();
   }
 
@@ -1099,6 +1108,10 @@
  public:
   LayerTreeHostScrollTestScrollZeroMaxScrollOffset() = default;
 
+  void InitializeSettings(LayerTreeSettings* settings) override {
+    settings->use_layer_lists = true;
+  }
+
   void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
 
@@ -1114,7 +1127,7 @@
                    scroller_.get());
     CreateTransformNode(scroller_.get());
     CreateScrollNode(scroller_.get());
-    layer_tree_host()->root_layer()->AddChild(scroller_.get());
+    layer_tree_host()->outer_viewport_scroll_layer()->AddChild(scroller_.get());
   }
 
   void BeginTest() override {
@@ -1190,8 +1203,8 @@
   void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
     layer_tree_host()->outer_viewport_scroll_layer()->SetIsDrawable(false);
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    gfx::ScrollOffset(20.f, 20.f));
+    layer_tree_host()->outer_viewport_scroll_layer()->SetScrollOffset(
+        gfx::ScrollOffset(20.f, 20.f));
     layer_tree_host()
         ->outer_viewport_scroll_layer()
         ->SetNonFastScrollableRegion(gfx::Rect(20, 20, 20, 20));
@@ -1228,9 +1241,10 @@
 
   void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
-    GetScrollNode(layer_tree_host()->inner_viewport_scroll_layer())
-        ->main_thread_scrolling_reasons =
-        MainThreadScrollingReason::kScrollbarScrolling;
+    layer_tree_host()
+        ->inner_viewport_scroll_layer()
+        ->AddMainThreadScrollingReasons(
+            MainThreadScrollingReason::kScrollbarScrolling);
   }
 
   void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
@@ -1322,8 +1336,12 @@
       : scroll_destroy_whole_tree_(false) {}
 
   void SetupTree() override {
-    LayerTreeHostScrollTest::SetupTree();
+    LayerTreeTest::SetupTree();
     Layer* root_layer = layer_tree_host()->root_layer();
+    root_layer->SetBounds(gfx::Size(10, 10));
+
+    SetupViewport(root_layer, root_layer->bounds(), root_layer->bounds());
+
     Layer* outer_scroll_layer =
         layer_tree_host()->outer_viewport_scroll_layer();
 
@@ -1384,6 +1402,7 @@
   Layer* CreateScrollLayer(Layer* parent, FakeLayerScrollClient* client) {
     scoped_refptr<PictureLayer> scroll_layer =
         PictureLayer::Create(&fake_content_layer_client_);
+    scroll_layer->SetPosition(gfx::PointF());
     scroll_layer->SetIsDrawable(true);
     scroll_layer->SetScrollable(parent->bounds());
     scroll_layer->SetHitTestable(true);
@@ -1395,12 +1414,7 @@
         &FakeLayerScrollClient::DidScroll, base::Unretained(client)));
     client->owner_ = this;
     client->layer_ = scroll_layer.get();
-
-    CopyProperties(parent, scroll_layer.get());
-    CreateTransformNode(scroll_layer.get());
-    CreateScrollNode(scroll_layer.get());
-    layer_tree_host()->root_layer()->AddChild(scroll_layer);
-
+    parent->AddChild(scroll_layer);
     return scroll_layer.get();
   }
 
@@ -1442,18 +1456,22 @@
         second_scroll_(40, 5),
         third_scroll_(20, 10),
         scroll_amount_(2, -1),
-        num_commits_(0) {}
+        num_commits_(0),
+        num_scrolls_(0) {}
 
   void InitializeSettings(LayerTreeSettings* settings) override {
-    LayerTreeHostScrollTest::InitializeSettings(settings);
     settings->main_frame_before_activation_enabled = true;
   }
 
   void BeginTest() override {
     outer_viewport_container_layer_id_ =
         layer_tree_host()->outer_viewport_container_layer()->id();
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->SetScrollOffset(
+        initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
+        base::BindRepeating(
+            &LayerTreeHostScrollTestScrollMFBA::DidScrollOuterViewport,
+            base::Unretained(this)));
     PostSetNeedsCommitToMainThread();
   }
 
@@ -1484,14 +1502,14 @@
             gfx::ScrollOffsetWithDelta(initial_scroll_, scroll_amount_),
             scroll_layer->CurrentScrollOffset());
         // Pretend like Javascript updated the scroll position itself.
-        SetScrollOffset(scroll_layer, second_scroll_);
+        scroll_layer->SetScrollOffset(second_scroll_);
         break;
       case 2:
         // Third frame does not see a scroll delta because we only did one
         // scroll for the second and third frames.
         EXPECT_VECTOR_EQ(second_scroll_, scroll_layer->CurrentScrollOffset());
         // Pretend like Javascript updated the scroll position itself.
-        SetScrollOffset(scroll_layer, third_scroll_);
+        scroll_layer->SetScrollOffset(third_scroll_);
         break;
     }
   }
@@ -1528,9 +1546,13 @@
     }
   }
 
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
+    num_scrolls_++;
+  }
+
   void AfterTest() override {
     EXPECT_EQ(3, num_commits_);
-    EXPECT_EQ(1, num_outer_viewport_scrolls_);
+    EXPECT_EQ(1, num_scrolls_);
   }
 
  private:
@@ -1548,6 +1570,7 @@
   gfx::ScrollOffset third_scroll_;
   gfx::Vector2dF scroll_amount_;
   int num_commits_;
+  int num_scrolls_;
   int outer_viewport_container_layer_id_;
 };
 
@@ -1566,16 +1589,20 @@
         num_did_commits_(0),
         num_impl_commits_(0),
         num_aborted_commits_(0),
+        num_impl_scrolls_(0),
         num_draws_(0) {}
 
   void InitializeSettings(LayerTreeSettings* settings) override {
-    LayerTreeHostScrollTest::InitializeSettings(settings);
     settings->main_frame_before_activation_enabled = true;
   }
 
   void BeginTest() override {
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->SetScrollOffset(
+        initial_scroll_);
+    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
+        base::BindRepeating(&LayerTreeHostScrollTestScrollAbortedCommitMFBA::
+                                DidScrollOuterViewport,
+                            base::Unretained(this)));
     PostSetNeedsCommitToMainThread();
   }
 
@@ -1594,26 +1621,24 @@
     switch (num_will_begin_main_frames_) {
       case 1:
         // This will not be aborted because of the initial prop changes.
-        EXPECT_EQ(0, num_outer_viewport_scrolls_);
+        EXPECT_EQ(0, num_impl_scrolls_);
         EXPECT_EQ(0, layer_tree_host()->SourceFrameNumber());
         EXPECT_VECTOR_EQ(initial_scroll_,
                          root_scroll_layer->CurrentScrollOffset());
         break;
       case 2:
         // This commit will not be aborted because of the scroll change.
-        EXPECT_EQ(1, num_outer_viewport_scrolls_);
+        EXPECT_EQ(1, num_impl_scrolls_);
         EXPECT_EQ(1, layer_tree_host()->SourceFrameNumber());
         EXPECT_VECTOR_EQ(
             gfx::ScrollOffsetWithDelta(initial_scroll_, impl_scroll_),
             root_scroll_layer->CurrentScrollOffset());
-        SetScrollOffset(
-            root_scroll_layer,
-            gfx::ScrollOffsetWithDelta(root_scroll_layer->CurrentScrollOffset(),
-                                       second_main_scroll_));
+        root_scroll_layer->SetScrollOffset(gfx::ScrollOffsetWithDelta(
+            root_scroll_layer->CurrentScrollOffset(), second_main_scroll_));
         break;
       case 3: {
         // This commit will be aborted.
-        EXPECT_EQ(2, num_outer_viewport_scrolls_);
+        EXPECT_EQ(2, num_impl_scrolls_);
         // The source frame number still increases even with the abort.
         EXPECT_EQ(2, layer_tree_host()->SourceFrameNumber());
         gfx::Vector2dF delta =
@@ -1624,7 +1649,7 @@
       }
       case 4: {
         // This commit will also be aborted.
-        EXPECT_EQ(3, num_outer_viewport_scrolls_);
+        EXPECT_EQ(3, num_impl_scrolls_);
         EXPECT_EQ(3, layer_tree_host()->SourceFrameNumber());
         gfx::Vector2dF delta =
             impl_scroll_ + impl_scroll_ + impl_scroll_ + second_main_scroll_;
@@ -1743,8 +1768,12 @@
     num_draws_++;
   }
 
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
+    num_impl_scrolls_++;
+  }
+
   void AfterTest() override {
-    EXPECT_EQ(3, num_outer_viewport_scrolls_);
+    EXPECT_EQ(3, num_impl_scrolls_);
     // Verify that the embedder sees aborted commits as real commits.
     EXPECT_EQ(4, num_will_begin_main_frames_);
     EXPECT_EQ(4, num_did_begin_main_frames_);
@@ -1768,6 +1797,7 @@
   int num_did_commits_;
   int num_impl_commits_;
   int num_aborted_commits_;
+  int num_impl_scrolls_;
   int num_draws_;
 };
 
@@ -1802,7 +1832,6 @@
         num_begin_main_frames_main_thread_(0) {}
 
   void InitializeSettings(LayerTreeSettings* settings) override {
-    LayerTreeHostScrollTest::InitializeSettings(settings);
     settings->enable_elastic_overscroll = true;
   }
 
@@ -1956,42 +1985,52 @@
       : initial_scroll_(10, 20), second_scroll_(0, 0) {}
 
   void BeginTest() override {
-    SetScrollOffset(layer_tree_host()->outer_viewport_scroll_layer(),
-                    initial_scroll_);
+    layer_tree_host()->inner_viewport_scroll_layer()->SetScrollOffset(
+        initial_scroll_);
+    layer_tree_host()->inner_viewport_scroll_layer()->SetBounds(
+        gfx::Size(100, 100));
     PostSetNeedsCommitToMainThread();
   }
 
   void UpdateLayerTreeHost() override {
-    Layer* scroll_layer = layer_tree_host()->outer_viewport_scroll_layer();
+    Layer* scroll_layer = layer_tree_host()->inner_viewport_scroll_layer();
     if (layer_tree_host()->SourceFrameNumber() == 0) {
       EXPECT_VECTOR_EQ(initial_scroll_, scroll_layer->CurrentScrollOffset());
     } else {
       EXPECT_VECTOR_EQ(
           gfx::ScrollOffsetWithDelta(initial_scroll_, scroll_amount_),
           scroll_layer->CurrentScrollOffset());
-      SetScrollOffset(scroll_layer, second_scroll_);
-      SetOpacity(scroll_layer, 0.5f);
+      scroll_layer->SetScrollOffset(second_scroll_);
+      scroll_layer->SetOpacity(0.5f);
     }
   }
 
   void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
-    LayerImpl* scroll_layer = impl->OuterViewportScrollLayer();
+    LayerImpl* scroll_layer = impl->InnerViewportScrollLayer();
 
     switch (impl->active_tree()->source_frame_number()) {
       case 0:
         EXPECT_VECTOR_EQ(initial_scroll_, ScrollTreeForLayer(scroll_layer)
                                               ->GetScrollOffsetBaseForTesting(
                                                   scroll_layer->element_id()));
-        EXPECT_VECTOR_EQ(initial_scroll_,
-                         GetTransformNode(scroll_layer)->scroll_offset);
+        EXPECT_VECTOR_EQ(
+            initial_scroll_,
+            scroll_layer->layer_tree_impl()
+                ->property_trees()
+                ->transform_tree.Node(scroll_layer->transform_tree_index())
+                ->scroll_offset);
         PostSetNeedsCommitToMainThread();
         break;
       case 1:
         EXPECT_VECTOR_EQ(second_scroll_, ScrollTreeForLayer(scroll_layer)
                                              ->GetScrollOffsetBaseForTesting(
                                                  scroll_layer->element_id()));
-        EXPECT_VECTOR_EQ(second_scroll_,
-                         GetTransformNode(scroll_layer)->scroll_offset);
+        EXPECT_VECTOR_EQ(
+            second_scroll_,
+            scroll_layer->layer_tree_impl()
+                ->property_trees()
+                ->transform_tree.Node(scroll_layer->transform_tree_index())
+                ->scroll_offset);
         EndTest();
         break;
     }
@@ -2008,13 +2047,14 @@
 class LayerTreeHostScrollTestImplSideInvalidation
     : public LayerTreeHostScrollTest {
   void BeginTest() override {
+    layer_tree_host()->outer_viewport_scroll_layer()->set_did_scroll_callback(
+        base::BindRepeating(&LayerTreeHostScrollTestImplSideInvalidation::
+                                DidScrollOuterViewport,
+                            base::Unretained(this)));
     PostSetNeedsCommitToMainThread();
   }
 
-  void DidScrollOuterViewport(const gfx::ScrollOffset& offset,
-                              const ElementId& element_id) override {
-    LayerTreeHostScrollTest::DidScrollOuterViewport(offset, element_id);
-
+  void DidScrollOuterViewport(const gfx::ScrollOffset&, const ElementId&) {
     // Defer responding to the main frame until an impl-side pending tree is
     // created for the invalidation request.
     {
@@ -2036,8 +2076,7 @@
             layer_tree_host()->outer_viewport_scroll_layer();
         gfx::ScrollOffset delta_to_send =
             outer_viewport_offsets_[2] - outer_viewport_offsets_[1];
-        SetScrollOffset(
-            outer_viewport_layer,
+        outer_viewport_layer->SetScrollOffset(
             outer_viewport_layer->CurrentScrollOffset() + delta_to_send);
       } break;
       case 2:
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
index f13dad3..4ba9d91 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -17,7 +17,7 @@
 #include "cc/trees/clip_node.h"
 #include "cc/trees/draw_property_utils.h"
 #include "cc/trees/effect_node.h"
-#include "cc/trees/layer_tree_host.h"
+#include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/layer_tree_settings.h"
 #include "cc/trees/mutator_host.h"
 #include "cc/trees/scroll_node.h"
@@ -39,6 +39,8 @@
   int closest_ancestor_with_copy_request;
   uint32_t main_thread_scrolling_reasons;
   SkColor safe_opaque_background_color;
+  bool in_subtree_of_page_scale_layer;
+  bool affected_by_outer_viewport_bounds_delta;
   bool should_flatten;
   bool scroll_tree_parent_created_by_uninheritable_criteria;
   bool animation_axis_aligned_since_render_target;
@@ -49,24 +51,34 @@
 
 class PropertyTreeBuilderContext {
  public:
-  explicit PropertyTreeBuilderContext(LayerTreeHost* layer_tree_host)
-      : layer_tree_host_(layer_tree_host),
-        root_layer_(layer_tree_host->root_layer()),
-        mutator_host_(*layer_tree_host->mutator_host()),
-        property_trees_(*layer_tree_host->property_trees()),
-        transform_tree_(property_trees_.transform_tree),
-        clip_tree_(property_trees_.clip_tree),
-        effect_tree_(property_trees_.effect_tree),
-        scroll_tree_(property_trees_.scroll_tree) {
-    // This class is for UI compositor only
-    DCHECK(!layer_tree_host->page_scale_layer());
-    DCHECK(!layer_tree_host->inner_viewport_scroll_layer());
-    DCHECK(!layer_tree_host->outer_viewport_scroll_layer());
-    DCHECK(!layer_tree_host->overscroll_elasticity_element_id());
-    DCHECK(layer_tree_host->elastic_overscroll().IsZero());
-  }
+  PropertyTreeBuilderContext(Layer* root_layer,
+                             const Layer* page_scale_layer,
+                             const Layer* inner_viewport_scroll_layer,
+                             const Layer* outer_viewport_scroll_layer,
+                             const ElementId overscroll_elasticity_element_id,
+                             const gfx::Vector2dF& elastic_overscroll,
+                             float page_scale_factor,
+                             const gfx::Transform& device_transform,
+                             MutatorHost* mutator_host,
+                             PropertyTrees* property_trees)
+      : root_layer_(root_layer),
+        page_scale_layer_(page_scale_layer),
+        inner_viewport_scroll_layer_(inner_viewport_scroll_layer),
+        outer_viewport_scroll_layer_(outer_viewport_scroll_layer),
+        overscroll_elasticity_element_id_(overscroll_elasticity_element_id),
+        elastic_overscroll_(elastic_overscroll),
+        page_scale_factor_(page_scale_factor),
+        device_transform_(device_transform),
+        mutator_host_(*mutator_host),
+        property_trees_(*property_trees),
+        transform_tree_(property_trees->transform_tree),
+        clip_tree_(property_trees->clip_tree),
+        effect_tree_(property_trees->effect_tree),
+        scroll_tree_(property_trees->scroll_tree) {}
 
-  void BuildPropertyTrees();
+  void BuildPropertyTrees(float device_scale_factor,
+                          const gfx::Rect& viewport,
+                          SkColor root_background_color) const;
 
  private:
   void BuildPropertyTreesInternal(
@@ -96,8 +108,14 @@
                                    bool subtree_has_rounded_corner,
                                    bool created_transform_node) const;
 
-  LayerTreeHost* layer_tree_host_;
   Layer* root_layer_;
+  const Layer* page_scale_layer_;
+  const Layer* inner_viewport_scroll_layer_;
+  const Layer* outer_viewport_scroll_layer_;
+  const ElementId overscroll_elasticity_element_id_;
+  const gfx::Vector2dF elastic_overscroll_;
+  float page_scale_factor_;
+  const gfx::Transform& device_transform_;
   MutatorHost& mutator_host_;
   PropertyTrees& property_trees_;
   TransformTree& transform_tree_;
@@ -227,6 +245,10 @@
     bool created_render_surface,
     DataForRecursion* data_for_children) const {
   const bool is_root = !layer->parent();
+  const bool is_page_scale_layer = layer == page_scale_layer_;
+  const bool is_overscroll_elasticity_layer =
+      overscroll_elasticity_element_id_ &&
+      layer->element_id() == overscroll_elasticity_element_id_;
   const bool is_scrollable = layer->scrollable();
   // Scrolling a layer should not move it from being pixel-aligned to moving off
   // the pixel grid and becoming fuzzy. So always snap scrollable things to the
@@ -255,6 +277,7 @@
   DCHECK(!is_scrollable || is_snapped);
   bool requires_node = is_root || is_snapped || has_significant_transform ||
                        has_any_transform_animation || has_surface ||
+                       is_page_scale_layer || is_overscroll_elasticity_layer ||
                        is_at_boundary_of_3d_rendering_context ||
                        layer->HasRoundedCorner();
 
@@ -297,14 +320,22 @@
   node->flattens_inherited_transform = data_for_children->should_flatten;
   node->sorting_context_id = layer->sorting_context_id();
 
-  if (is_root) {
+  if (is_root || is_page_scale_layer) {
     // Root layer and page scale layer should not have transform or offset.
     DCHECK(layer->position().IsOrigin());
     DCHECK(parent_offset.IsZero());
     DCHECK(layer->transform().IsIdentity());
 
-    transform_tree_.SetRootScaleAndTransform(
-        transform_tree_.device_scale_factor(), gfx::Transform());
+    if (is_root) {
+      DCHECK(!is_page_scale_layer);
+      transform_tree_.SetRootScaleAndTransform(
+          transform_tree_.device_scale_factor(), device_transform_);
+    } else {
+      DCHECK(is_page_scale_layer);
+      transform_tree_.set_page_scale_factor(page_scale_factor_);
+      node->local.Scale(page_scale_factor_, page_scale_factor_);
+      data_for_children->in_subtree_of_page_scale_layer = true;
+    }
   } else {
     node->local = layer->transform();
     node->origin = layer->transform_origin();
@@ -312,6 +343,9 @@
         parent_offset + layer->position().OffsetFromOrigin();
   }
 
+  node->in_subtree_of_page_scale_layer =
+      data_for_children->in_subtree_of_page_scale_layer;
+
   // Surfaces inherently flatten transforms.
   data_for_children->should_flatten =
       layer->should_flatten_transform() || has_surface;
@@ -321,7 +355,12 @@
   GetAnimationScales(mutator_host_, layer, &node->maximum_animation_scale,
                      &node->starting_animation_scale);
 
-  node->scroll_offset = layer->CurrentScrollOffset();
+  if (is_overscroll_elasticity_layer) {
+    DCHECK(!is_scrollable);
+    node->scroll_offset = gfx::ScrollOffset(elastic_overscroll_);
+  } else {
+    node->scroll_offset = layer->CurrentScrollOffset();
+  }
 
   node->needs_local_transform_update = true;
   transform_tree_.UpdateTransforms(node->id);
@@ -452,7 +491,7 @@
   return RenderSurfaceReason::kNone;
 }
 
-bool UpdateSubtreeHasCopyRequestRecursive(Layer* layer) {
+static bool UpdateSubtreeHasCopyRequestRecursive(Layer* layer) {
   bool subtree_has_copy_request = false;
   if (layer->HasCopyRequest())
     subtree_has_copy_request = true;
@@ -569,11 +608,12 @@
     }
     node->clip_id = data_from_ancestor.clip_tree_parent;
   } else {
-    // The root render surface acts as the unbounded and untransformed surface
-    // into which content is drawn. The transform node created from the root
-    // layer (which includes device scale factor) and the clip node created from
-    // the root layer apply to the root render surface's content, but not to the
-    // root render surface itself.
+    // The root render surface acts as the unbounded and untransformed
+    // surface into which content is drawn. The transform node created
+    // from the root layer (which includes device scale factor) and
+    // the clip node created from the root layer (which includes
+    // viewports) apply to the root render surface's content, but not
+    // to the root render surface itself.
     node->transform_id = TransformTree::kRootNodeId;
     node->clip_id = ClipTree::kViewportNodeId;
   }
@@ -682,6 +722,14 @@
     ScrollNode node;
     node.scrollable = scrollable;
     node.main_thread_scrolling_reasons = main_thread_scrolling_reasons;
+    node.scrolls_inner_viewport = layer == inner_viewport_scroll_layer_;
+    node.scrolls_outer_viewport = layer == outer_viewport_scroll_layer_;
+
+    if (node.scrolls_inner_viewport &&
+        data_from_ancestor.in_subtree_of_page_scale_layer) {
+      node.max_scroll_offset_affected_by_page_scale = true;
+    }
+
     node.bounds = layer->bounds();
     node.container_bounds = layer->scroll_container_bounds();
     node.offset_to_transform_parent = layer->offset_to_transform_parent();
@@ -800,21 +848,29 @@
   }
 }
 
-void PropertyTreeBuilderContext::BuildPropertyTrees() {
-  property_trees_.is_main_thread = true;
-  property_trees_.is_active = false;
-
-  if (layer_tree_host_->has_copy_request())
-    UpdateSubtreeHasCopyRequestRecursive(root_layer_);
-
+void PropertyTreeBuilderContext::BuildPropertyTrees(
+    float device_scale_factor,
+    const gfx::Rect& viewport,
+    SkColor root_background_color) const {
   if (!property_trees_.needs_rebuild) {
-    clip_tree_.SetViewportClip(
-        gfx::RectF(layer_tree_host_->device_viewport_rect()));
+    DCHECK_NE(page_scale_layer_, root_layer_);
+    if (page_scale_layer_) {
+      DCHECK_GE(page_scale_layer_->transform_tree_index(),
+                TransformTree::kRootNodeId);
+      TransformNode* node = property_trees_.transform_tree.Node(
+          page_scale_layer_->transform_tree_index());
+      draw_property_utils::UpdatePageScaleFactor(&property_trees_, node,
+                                                 page_scale_factor_);
+    }
+    draw_property_utils::UpdateElasticOverscroll(
+        &property_trees_, overscroll_elasticity_element_id_,
+        elastic_overscroll_);
+    clip_tree_.SetViewportClip(gfx::RectF(viewport));
     // SetRootScaleAndTransform will be incorrect if the root layer has
     // non-zero position, so ensure it is zero.
     DCHECK(root_layer_->position().IsOrigin());
-    transform_tree_.SetRootScaleAndTransform(
-        layer_tree_host_->device_scale_factor(), gfx::Transform());
+    transform_tree_.SetRootScaleAndTransform(device_scale_factor,
+                                             device_transform_);
     return;
   }
 
@@ -827,6 +883,8 @@
       EffectTree::kInvalidNodeId;
   data_for_recursion.closest_ancestor_with_copy_request =
       EffectTree::kInvalidNodeId;
+  data_for_recursion.in_subtree_of_page_scale_layer = false;
+  data_for_recursion.affected_by_outer_viewport_bounds_delta = false;
   data_for_recursion.should_flatten = false;
   data_for_recursion.main_thread_scrolling_reasons =
       MainThreadScrollingReason::kNotScrollingOnMain;
@@ -835,18 +893,13 @@
   data_for_recursion.compound_transform_since_render_target = gfx::Transform();
   data_for_recursion.animation_axis_aligned_since_render_target = true;
   data_for_recursion.not_axis_aligned_since_last_clip = false;
-
-  SkColor root_background_color = layer_tree_host_->background_color();
-  if (SkColorGetA(root_background_color) != 255)
-    root_background_color = SkColorSetA(root_background_color, 255);
   data_for_recursion.safe_opaque_background_color = root_background_color;
 
   property_trees_.clear();
-  transform_tree_.set_device_scale_factor(
-      layer_tree_host_->device_scale_factor());
+  transform_tree_.set_device_scale_factor(device_scale_factor);
   ClipNode root_clip;
   root_clip.clip_type = ClipNode::ClipType::APPLIES_LOCAL_CLIP;
-  root_clip.clip = gfx::RectF(layer_tree_host_->device_viewport_rect());
+  root_clip.clip = gfx::RectF(viewport);
   root_clip.transform_id = TransformTree::kRootNodeId;
   data_for_recursion.clip_tree_parent =
       clip_tree_.Insert(root_clip, ClipTree::kRootNodeId);
@@ -868,15 +921,37 @@
 
 }  // namespace
 
-void PropertyTreeBuilder::BuildPropertyTrees(LayerTreeHost* layer_tree_host) {
-  PropertyTreeBuilderContext(layer_tree_host).BuildPropertyTrees();
-
-  layer_tree_host->property_trees()->ResetCachedData();
+void PropertyTreeBuilder::BuildPropertyTrees(
+    Layer* root_layer,
+    const Layer* page_scale_layer,
+    const Layer* inner_viewport_scroll_layer,
+    const Layer* outer_viewport_scroll_layer,
+    const ElementId overscroll_elasticity_element_id,
+    const gfx::Vector2dF& elastic_overscroll,
+    float page_scale_factor,
+    float device_scale_factor,
+    const gfx::Rect& viewport,
+    const gfx::Transform& device_transform,
+    PropertyTrees* property_trees) {
+  property_trees->is_main_thread = true;
+  property_trees->is_active = false;
+  SkColor color = root_layer->layer_tree_host()->background_color();
+  if (SkColorGetA(color) != 255)
+    color = SkColorSetA(color, 255);
+  if (root_layer->layer_tree_host()->has_copy_request())
+    UpdateSubtreeHasCopyRequestRecursive(root_layer);
+  PropertyTreeBuilderContext(
+      root_layer, page_scale_layer, inner_viewport_scroll_layer,
+      outer_viewport_scroll_layer, overscroll_elasticity_element_id,
+      elastic_overscroll, page_scale_factor, device_transform,
+      root_layer->layer_tree_host()->mutator_host(), property_trees)
+      .BuildPropertyTrees(device_scale_factor, viewport, color);
+  property_trees->ResetCachedData();
   // During building property trees, all copy requests are moved from layers to
   // effect tree, which are then pushed at commit to compositor thread and
   // handled there. LayerTreeHost::has_copy_request is only required to
   // decide if we want to create a effect node. So, it can be reset now.
-  layer_tree_host->SetHasCopyRequest(false);
+  root_layer->layer_tree_host()->SetHasCopyRequest(false);
 }
 
 }  // namespace cc
diff --git a/cc/trees/property_tree_builder.h b/cc/trees/property_tree_builder.h
index 8103a91e..92860f2b 100644
--- a/cc/trees/property_tree_builder.h
+++ b/cc/trees/property_tree_builder.h
@@ -7,15 +7,25 @@
 
 #include <vector>
 
-#include "cc/cc_export.h"
+#include "cc/trees/layer_tree_host_common.h"
+#include "cc/trees/property_tree.h"
 
 namespace cc {
 
-class LayerTreeHost;
-
 class PropertyTreeBuilder {
  public:
-  static void CC_EXPORT BuildPropertyTrees(LayerTreeHost*);
+  static void CC_EXPORT
+  BuildPropertyTrees(Layer* root_layer,
+                     const Layer* page_scale_layer,
+                     const Layer* inner_viewport_scroll_layer,
+                     const Layer* outer_viewport_scroll_layer,
+                     const ElementId overscroll_elasticity_element_id,
+                     const gfx::Vector2dF& elastic_overscroll,
+                     float page_scale_factor,
+                     float device_scale_factor,
+                     const gfx::Rect& viewport,
+                     const gfx::Transform& device_transform,
+                     PropertyTrees* property_trees);
 };
 
 }  // namespace cc
diff --git a/chrome/VERSION b/chrome/VERSION
index fc3edf42..18016e9 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=79
 MINOR=0
-BUILD=3914
+BUILD=3915
 PATCH=0
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb
index 732da036..17f2b63 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ar">
 <translation id="1566281227936819866">عرض طرق الدفع المحفوظة</translation>
+<translation id="2354494097381247142">اقتراحات الملء متاحة في ملحق لوحة المفاتيح</translation>
 <translation id="2610239185026711824">اقتراح كلمة مرور</translation>
 <translation id="2803478378562657435">عرض كلمات المرور المحفوظة وخيارات كلمة المرور</translation>
 <translation id="2903493209154104877">العناوين</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb
index d206e7f..b550722 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="bg">
 <translation id="1566281227936819866">Показани са запазените начини на плащане</translation>
+<translation id="2354494097381247142">Предложенията за попълване са достъпни чрез аксесоара за клавиатура</translation>
 <translation id="2610239185026711824">Предложение за парола</translation>
 <translation id="2803478378562657435">Запазените пароли и опциите за пароли са показани</translation>
 <translation id="2903493209154104877">Адреси</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb
index e3fb7a1..7d3ed32 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ca">
 <translation id="1566281227936819866">S'estan mostrant les formes de pagament desades</translation>
+<translation id="2354494097381247142">L'accessori del teclat mostra suggeriments d'emplenament</translation>
 <translation id="2610239185026711824">Suggereix una contrasenya</translation>
 <translation id="2803478378562657435">S'estan mostrant les contrasenyes desades i les opcions de contrasenyes</translation>
 <translation id="2903493209154104877">Adreces</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb
index f2fe556..67d31b9 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="cs">
 <translation id="1566281227936819866">Zobrazují se uložené platební metody</translation>
+<translation id="2354494097381247142">Návrhy vyplnění dostupné v příslušenství klávesnice</translation>
 <translation id="2610239185026711824">Navrhnout heslo</translation>
 <translation id="2803478378562657435">Zobrazování uložených hesel a možností hesel</translation>
 <translation id="2903493209154104877">Adresy</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb
index 87ee9d4..b639a42 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="da">
 <translation id="1566281227936819866">Viser gemte betalingsmetoder</translation>
+<translation id="2354494097381247142">Der er tilgængelige forslag til udfyldning i tastaturtilbehøret</translation>
 <translation id="2610239185026711824">Foreslå en adgangskode</translation>
 <translation id="2803478378562657435">Viser gemte adgangskoder og valgmuligheder for adgangskoder</translation>
 <translation id="2903493209154104877">Adresser</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb
index fa049ed..59c44a9 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="de">
 <translation id="1566281227936819866">Gespeicherte Zahlungsmethoden werden angezeigt</translation>
+<translation id="2354494097381247142">Im Tastaturzubehör sind AutoFill-Vorschläge verfügbar</translation>
 <translation id="2610239185026711824">Passwort vorschlagen</translation>
 <translation id="2803478378562657435">Gespeicherte Passwörter und Passwortoptionen werden angezeigt</translation>
 <translation id="2903493209154104877">Adressen</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb
index aced991..50c1dc3e 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="el">
 <translation id="1566281227936819866">Εμφάνιση αποθηκευμένων τρόπων πληρωμής</translation>
+<translation id="2354494097381247142">Η συμπλήρωση προτάσεων είναι διαθέσιμη στο αξεσουάρ πληκτρολογίου</translation>
 <translation id="2610239185026711824">Πρόταση κωδικού πρόσβασης</translation>
 <translation id="2803478378562657435">Εμφάνιση αποθηκευμένων κωδικών πρόσβασης και επιλογών κωδικού πρόσβασης</translation>
 <translation id="2903493209154104877">Διευθύνσεις</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb
index 52b99640..c576687 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="es-419">
 <translation id="1566281227936819866">Mostrando las formas de pago guardadas</translation>
+<translation id="2354494097381247142">El accesorio de teclado muestra sugerencias para completar</translation>
 <translation id="2610239185026711824">Sugerir contraseña</translation>
 <translation id="2803478378562657435">Se muestran las contraseñas guardadas y las opciones de contraseña</translation>
 <translation id="2903493209154104877">Direcciones</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb
index 67ddb54..f76014e 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="es">
 <translation id="1566281227936819866">Mostrando métodos de pago guardados</translation>
+<translation id="2354494097381247142">Las sugerencias de Autocompletar están disponibles en los accesorios de teclado</translation>
 <translation id="2610239185026711824">Sugerir contraseña</translation>
 <translation id="2803478378562657435">Mostrando contraseñas guardadas y opciones de contraseña</translation>
 <translation id="2903493209154104877">Direcciones</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb
index 8a1b313..e5b510c 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="et">
 <translation id="1566281227936819866">Kuvatud on salvestatud makseviisid</translation>
+<translation id="2354494097381247142">Automaattäite soovitused on saadaval klaviatuuritarvikus</translation>
 <translation id="2610239185026711824">Soovita parooli</translation>
 <translation id="2803478378562657435">Kuvatud on salvestatud paroolid ja paroolivalikud</translation>
 <translation id="2903493209154104877">Aadressid</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb
index 97c91a3..d67da240 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fa">
 <translation id="1566281227936819866">درحال نمایش روش‌های پرداخت ذخیره‌شده</translation>
+<translation id="2354494097381247142">پیشنهادهای تکمیل خودکار دردسترس در وسیله جانبی صفحه‌کلید</translation>
 <translation id="2610239185026711824">پیشنهاد گذرواژه</translation>
 <translation id="2803478378562657435">درحال نمایش گذرواژه‌های ذخیره‌شده و گزینه‌های گذرواژه</translation>
 <translation id="2903493209154104877">آدرس‌ها</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb
index 2eb498c2..a5a26c4 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fi">
 <translation id="1566281227936819866">Näytetään tallennetut maksutavat</translation>
+<translation id="2354494097381247142">Automaattisen täytön ehdotuksia saatavilla erillisessä näppäimistössä</translation>
 <translation id="2610239185026711824">Ehdota salasanaa</translation>
 <translation id="2803478378562657435">Näytetään tallennetut salasanat ja salasana-asetukset</translation>
 <translation id="2903493209154104877">Osoitteet</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb
index 5008c7d..e9b2a28 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fr">
 <translation id="1566281227936819866">Affichage des modes de paiement enregistrés en cours</translation>
+<translation id="2354494097381247142">Suggestions de saisie automatique disponibles via le clavier</translation>
 <translation id="2610239185026711824">Suggérer un mot de passe</translation>
 <translation id="2803478378562657435">Affichage des mots de passe enregistrés et des options de mot de passe</translation>
 <translation id="2903493209154104877">Adresses</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb
index fab1b20..647c027 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="hr">
 <translation id="1566281227936819866">Prikazuju se spremljeni načini plaćanja</translation>
+<translation id="2354494097381247142">Prijedlozi za popunjavanje dostupni u dodatku tipkovnice</translation>
 <translation id="2610239185026711824">Predloži zaporku</translation>
 <translation id="2803478378562657435">Prikazivanje spremljenih zaporki i opcija zaporki</translation>
 <translation id="2903493209154104877">Adrese</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb
index b9c4b5a..20cebff 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="hu">
 <translation id="1566281227936819866">Mentett fizetési módok megjelenítése</translation>
+<translation id="2354494097381247142">A billentyűzet kiegészítő részén kitöltési javaslatok találhatók</translation>
 <translation id="2610239185026711824">Jelszó ajánlása</translation>
 <translation id="2803478378562657435">Mentett jelszavak és jelszóbeállítások megjelenítve</translation>
 <translation id="2903493209154104877">Címek</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb
index 650b72cd..73528391 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="it">
 <translation id="1566281227936819866">Ecco i metodi di pagamento salvati</translation>
+<translation id="2354494097381247142">Compilazione in corso dei suggerimenti disponibili nell'accessorio per la tastiera</translation>
 <translation id="2610239185026711824">Suggerisci password</translation>
 <translation id="2803478378562657435">Mostra password salvate e opzioni password</translation>
 <translation id="2903493209154104877">Indirizzi</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb
index 34a07f6d..b111af61 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="iw">
 <translation id="1566281227936819866">מוצגים אמצעי התשלום השמורים</translation>
+<translation id="2354494097381247142">הצעות למילוי זמינות באביזר המקלדת</translation>
 <translation id="2610239185026711824">הצעת סיסמה</translation>
 <translation id="2803478378562657435">הצגת סיסמאות שמורות ואפשרויות סיסמה</translation>
 <translation id="2903493209154104877">כתובות</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb
index 9bd9f61..5ab54ad 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ja">
 <translation id="1566281227936819866">保存されているお支払い方法を表示します</translation>
+<translation id="2354494097381247142">キーボード アクセサリで選択できる入力候補です</translation>
 <translation id="2610239185026711824">パスワードを自動生成</translation>
 <translation id="2803478378562657435">保存したパスワードとパスワードのオプションを表示しています</translation>
 <translation id="2903493209154104877">住所</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb
index c5a0f9c..8284ab9 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="kn">
 <translation id="1566281227936819866">ಉಳಿಸಲಾದ ಪಾವತಿ ವಿಧಾನಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ</translation>
+<translation id="2354494097381247142">ಕೀಬೋರ್ಡ್ ಪರಿಕರಗಳಲ್ಲಿ ಲಭ್ಯವಿರುವ ಸಲಹೆಗಳನ್ನು ಭರ್ತಿ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
 <translation id="2610239185026711824">ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಸೂಚಿಸಿ</translation>
 <translation id="2803478378562657435">ಉಳಿಸಿದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="2903493209154104877">ವಿಳಾಸಗಳು</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb
index 3380ec61..abb072e 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="lv">
 <translation id="1566281227936819866">Tiek rādīti saglabātie maksājumu veidi</translation>
+<translation id="2354494097381247142">Aizpildīšanas ieteikumi, kas pieejami tastatūras piederumā</translation>
 <translation id="2610239185026711824">Ieteikt paroli</translation>
 <translation id="2803478378562657435">Tiek rādītas saglabātās paroles un paroļu iespējas</translation>
 <translation id="2903493209154104877">Adreses</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb
index 44e9d16..032b17e 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ms">
 <translation id="1566281227936819866">Menunjukkan kaedah pembayaran yang disimpan</translation>
+<translation id="2354494097381247142">Mengisi cadangan yang tersedia dalam aksesori papan kekunci</translation>
 <translation id="2610239185026711824">Cadangkan kata laluan</translation>
 <translation id="2803478378562657435">Menunjukkan kata laluan yang disimpan dan pilihan kata laluan</translation>
 <translation id="2903493209154104877">Alamat</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb
index 8b64cf8..cf0b2a3 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="nl">
 <translation id="1566281227936819866">Opgeslagen betaalmethoden weergeven</translation>
+<translation id="2354494097381247142">Aanvulsuggesties beschikbaar in toetsenbordaccessoire</translation>
 <translation id="2610239185026711824">Wachtwoord voorstellen</translation>
 <translation id="2803478378562657435">Opgeslagen wachtwoorden en wachtwoordopties weergeven</translation>
 <translation id="2903493209154104877">Adressen</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb
index eda42c6..d476867 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pl">
 <translation id="1566281227936819866">Pokazuję zapisane formy płatności</translation>
+<translation id="2354494097381247142">Sugestie dotyczące wypełniania dostępne w akcesorium do klawiatury</translation>
 <translation id="2610239185026711824">Zaproponuj hasło</translation>
 <translation id="2803478378562657435">Wyświetlam zapisane hasła i opcje haseł</translation>
 <translation id="2903493209154104877">Adresy</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb
index ccddf442..90e0d07 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-BR">
 <translation id="1566281227936819866">Mostrando formas de pagamento salvas</translation>
+<translation id="2354494097381247142">Preenchendo sugestões disponíveis no acessório de teclado</translation>
 <translation id="2610239185026711824">Sugerir senha</translation>
 <translation id="2803478378562657435">Mostrando as senhas salvas e as opções de senha</translation>
 <translation id="2903493209154104877">Endereços</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb
index bc6f9dbe..a82c018 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-PT">
 <translation id="1566281227936819866">A mostrar métodos de pagamento guardados…</translation>
+<translation id="2354494097381247142">As sugestões de preenchimento estão disponíveis no acessório de teclado.</translation>
 <translation id="2610239185026711824">Sugerir palavra-passe</translation>
 <translation id="2803478378562657435">A mostrar palavras-passe guardadas e opções de palavra-passe</translation>
 <translation id="2903493209154104877">Endereços</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb
index 68cd2685..80f08bd 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ro">
 <translation id="1566281227936819866">Se afișează metodele de plată salvate</translation>
+<translation id="2354494097381247142">Sugestii de completare disponibile în accesoriul tastaturii</translation>
 <translation id="2610239185026711824">Sugerează o parolă</translation>
 <translation id="2803478378562657435">Se afișează parolele salvate și opțiunile pentru parole</translation>
 <translation id="2903493209154104877">Adrese</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb
index a0a409a..9fb9c012 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ru">
 <translation id="1566281227936819866">Показаны сохраненные способы оплаты</translation>
+<translation id="2354494097381247142">Доступные варианты автозаполнения</translation>
 <translation id="2610239185026711824">Сгенерировать пароль</translation>
 <translation id="2803478378562657435">На экране показаны сохраненные пароли и настройки паролей</translation>
 <translation id="2903493209154104877">Адреса</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb
index f97ec162..9ea21de 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sk">
 <translation id="1566281227936819866">Zobrazujú sa uložené spôsoby platby</translation>
+<translation id="2354494097381247142">Návrhy na doplnenie sú k dispozícii v príslušenstve klávesnice</translation>
 <translation id="2610239185026711824">Navrhnúť heslo</translation>
 <translation id="2803478378562657435">Zobrazujú sa uložené heslá a možnosti hesiel</translation>
 <translation id="2903493209154104877">Adresy</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb
index 4aa42f8..f44bc62 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sl">
 <translation id="1566281227936819866">Prikaz shranjenih plačilnih sredstev</translation>
+<translation id="2354494097381247142">Predlogi za izpolnjevanje, na voljo v dodatku za tipkovnice</translation>
 <translation id="2610239185026711824">Predlagaj geslo</translation>
 <translation id="2803478378562657435">Prikazovanje shranjenih gesel in možnosti za gesla</translation>
 <translation id="2903493209154104877">Naslovi</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb
index 261ac37..1391209e 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sr">
 <translation id="1566281227936819866">Приказују се сачувани начини плаћања</translation>
+<translation id="2354494097381247142">Предлози за попуњавање доступни су на тастатури</translation>
 <translation id="2610239185026711824">Предложи лозинку</translation>
 <translation id="2803478378562657435">Приказују се сачуване лозинке и опције за лозинке</translation>
 <translation id="2903493209154104877">Адресе</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb
index 80c6f0c..b7f4a598 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ta">
 <translation id="1566281227936819866">சேமித்துள்ள கட்டண முறைகளைக் காட்டுகிறது</translation>
+<translation id="2354494097381247142">கீபோர்ட் துணைக்கருவியில் தானாக நிரப்பும் பரிந்துரைகள் கிடைக்கும்</translation>
 <translation id="2610239185026711824">கடவுச்சொல்லைப் பரிந்துரை</translation>
 <translation id="2803478378562657435">சேமித்த கடவுச்சொற்களையும் கடவுச்சொல் விருப்பங்களையும் காண்பிக்கிறது</translation>
 <translation id="2903493209154104877">முகவரிகள்</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
index 7e3d48a7..8e75412 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="th">
 <translation id="1566281227936819866">กำลังแสดงวิธีการชำระเงินที่บันทึกไว้</translation>
+<translation id="2354494097381247142">การแนะนำการกรอกข้อมูลพร้อมให้ใช้งานในอุปกรณ์เสริมแป้นพิมพ์</translation>
 <translation id="2610239185026711824">แนะนำรหัสผ่าน</translation>
 <translation id="2803478378562657435">กำลังแสดงรหัสผ่านที่บันทึกไว้และตัวเลือกรหัสผ่าน</translation>
 <translation id="2903493209154104877">ที่อยู่</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb
index f9db08c..4952c0a1 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb
@@ -2,6 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="uk">
 <translation id="1566281227936819866">Показано збережені способи оплати</translation>
+<translation id="2354494097381247142">Пропозиції для заповнення доступні на клавіатурі</translation>
 <translation id="2610239185026711824">Запропонувати пароль</translation>
 <translation id="2803478378562657435">Показано збережені паролі та їх параметри</translation>
 <translation id="2903493209154104877">Адреси</translation>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml
index 31f69dfa..d302dc1 100644
--- a/chrome/android/java/res/values/dimens.xml
+++ b/chrome/android/java/res/values/dimens.xml
@@ -676,7 +676,7 @@
     <dimen name="navigation_sheet_toolbar_bottom_padding">44dp</dimen>
     <dimen name="navigation_sheet_content_top_padding">18dp</dimen>
     <dimen name="navigation_sheet_content_bottom_padding">4dp</dimen>
-    <dimen name="navigation_sheet_content_wrap_padding">4dp</dimen>
+    <dimen name="navigation_sheet_content_wrap_padding">12dp</dimen>
 
     <!-- ChromeTextInputLayout dimensions -->
     <dimen name="text_input_layout_padding_start">3dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskScheduler.java b/chrome/android/java/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskScheduler.java
index 3faf046c..1e7927a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskScheduler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskScheduler.java
@@ -125,9 +125,13 @@
         Bundle taskExtras = new Bundle();
         taskExtras.putLong(SOONEST_EXPECTED_WAKETIME, System.currentTimeMillis() + minDelayMs);
 
+        // We setWindowEndTime to Long.MAX_VALUE to wait a long time for network connectivity,
+        // so that we can process the pending sync event. setExpiresAfterWindowEndTime ensures
+        // that we never wake up Chrome without network connectivity.
         TaskInfo.TimingInfo timingInfo = TaskInfo.OneOffInfo.create()
                                                  .setWindowStartTimeMs(minDelayMs)
-                                                 .setWindowEndTimeMs(Integer.MAX_VALUE)
+                                                 .setWindowEndTimeMs(Long.MAX_VALUE)
+                                                 .setExpiresAfterWindowEndTime(true)
                                                  .build();
         TaskInfo taskInfo = TaskInfo.createTask(getAppropriateTaskId(taskType), timingInfo)
                                     .setRequiredNetworkType(TaskInfo.NetworkType.ANY)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetCoordinator.java
index 4e485763..7ea2ccc4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetCoordinator.java
@@ -6,6 +6,7 @@
 
 import android.content.Context;
 import android.os.Handler;
+import android.support.annotation.IdRes;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
@@ -78,6 +79,10 @@
     private final ModelList mModelList = new ModelList();
     private final ModelListAdapter mModelAdapter = new ModelListAdapter(mModelList);
 
+    private final int mItemHeight;
+    private final int mContentPadding;
+    private final View mParentView;
+
     private static class NavigationItemViewBinder {
         public static void bind(PropertyModel model, View view, PropertyKey propertyKey) {
             if (ItemProperties.ICON == propertyKey) {
@@ -104,6 +109,7 @@
      */
     NavigationSheetCoordinator(
             View parent, Supplier<BottomSheetController> bottomSheetController, Delegate delegate) {
+        mParentView = parent;
         mBottomSheetController = bottomSheetController;
         mDelegate = delegate;
         Context context = parent.getContext();
@@ -132,12 +138,21 @@
         mLongSwipePeekThreshold = Math.min(
                 context.getResources().getDisplayMetrics().density * LONG_SWIPE_PEEK_THRESHOLD_DP,
                 parent.getWidth() / 2);
+        mItemHeight = getSizePx(context, R.dimen.navigation_popup_item_height);
+        mContentPadding = getSizePx(context, R.dimen.navigation_sheet_content_top_padding)
+                + getSizePx(context, R.dimen.navigation_sheet_content_bottom_padding)
+                + getSizePx(context, R.dimen.navigation_sheet_content_wrap_padding);
+    }
+
+    private static int getSizePx(Context context, @IdRes int id) {
+        return context.getResources().getDimensionPixelSize(id);
     }
 
     // Transition to either peeked or expanded state.
     private void openSheet() {
         NavigationHistory history = mDelegate.getHistory(mForward);
         mMediator.populateEntries(history);
+        mContentView.requestListViewLayout();
         mBottomSheetController.get().requestShowContent(this, true);
         mBottomSheetController.get().getBottomSheet().addObserver(mSheetObserver);
         mSheetTriggered = true;
@@ -272,7 +287,23 @@
 
     @Override
     public boolean wrapContentEnabled() {
-        return true;
+        return false;
+    }
+
+    @Override
+    public float getCustomHalfRatio() {
+        return getCappedHeightRatio(mParentView.getHeight() / 2 + mItemHeight / 2);
+    }
+
+    @Override
+    public float getCustomFullRatio() {
+        return getCappedHeightRatio(mParentView.getHeight());
+    }
+
+    private float getCappedHeightRatio(float maxHeight) {
+        int entryCount = mModelAdapter.getCount();
+        return Math.min(maxHeight, entryCount * mItemHeight + mContentPadding)
+                / mParentView.getHeight();
     }
 
     @Override
@@ -292,8 +323,7 @@
 
     @Override
     public int getSheetHalfHeightAccessibilityStringId() {
-        assert false : "No half state exists. Should not be invoked.";
-        return -1;
+        return R.string.overscroll_navigation_sheet_opened_half;
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetView.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetView.java
index 7d31c10..083651a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetView.java
@@ -10,8 +10,6 @@
 import android.widget.ListView;
 import android.widget.RelativeLayout;
 
-import androidx.annotation.IdRes;
-
 import org.chromium.chrome.R;
 
 /**
@@ -19,11 +17,7 @@
  * {@link BottomSheet}.
  */
 public class NavigationSheetView extends RelativeLayout {
-    private final int mItemHeight;
-    private final int mContentPadding;
-
     private ListView mListView;
-    private int mEntryCount;
 
     public NavigationSheetView(Context context) {
         this(context, null);
@@ -31,14 +25,6 @@
 
     public NavigationSheetView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        mItemHeight = getResources().getDimensionPixelSize(R.dimen.navigation_popup_item_height);
-        mContentPadding = getSizePx(context, R.dimen.navigation_sheet_content_top_padding)
-                + getSizePx(context, R.dimen.navigation_sheet_content_bottom_padding)
-                + getSizePx(context, R.dimen.navigation_sheet_content_wrap_padding);
-    }
-
-    private static int getSizePx(Context context, @IdRes int id) {
-        return context.getResources().getDimensionPixelSize(id);
     }
 
     /**
@@ -49,23 +35,16 @@
         return v == null ? 0 : -(v.getTop() - mListView.getPaddingTop());
     }
 
+    /**
+     * Request layout for the containing listview.
+     */
+    void requestListViewLayout() {
+        mListView.requestLayout();
+    }
+
     @Override
     public void onFinishInflate() {
         super.onFinishInflate();
         mListView = findViewById(R.id.navigation_entries);
     }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        if (MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.EXACTLY) {
-            int entryCount = mListView.getAdapter() != null ? mListView.getAdapter().getCount() : 0;
-
-            // Makes the sheet height at most the half the screen height when there are
-            // more items than it can show. The list then becomes scrollable.
-            int height = Math.min(MeasureSpec.getSize(heightMeasureSpec) / 2 + mItemHeight / 2,
-                    entryCount * mItemHeight + mContentPadding);
-            heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
-        }
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
index 503d3fdc..afdd650 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
@@ -237,18 +237,20 @@
      */
     @CalledByNative
     private static SigninManager create(long nativeSigninManagerAndroid,
-            AccountTrackerService accountTrackerService, IdentityManager identityManager) {
+            AccountTrackerService accountTrackerService, IdentityManager identityManager,
+            IdentityMutator identityMutator) {
         assert nativeSigninManagerAndroid != 0;
         assert accountTrackerService != null;
         assert identityManager != null;
+        assert identityMutator != null;
         return new SigninManager(ContextUtils.getApplicationContext(), nativeSigninManagerAndroid,
-                accountTrackerService, identityManager, AndroidSyncSettings.get());
+                accountTrackerService, identityManager, identityMutator, AndroidSyncSettings.get());
     }
 
     @VisibleForTesting
     SigninManager(Context context, long nativeSigninManagerAndroid,
             AccountTrackerService accountTrackerService, IdentityManager identityManager,
-            AndroidSyncSettings androidSyncSettings) {
+            IdentityMutator identityMutator, AndroidSyncSettings androidSyncSettings) {
         ThreadUtils.assertOnUiThread();
         assert context != null;
         assert androidSyncSettings != null;
@@ -256,7 +258,7 @@
         mNativeSigninManagerAndroid = nativeSigninManagerAndroid;
         mAccountTrackerService = accountTrackerService;
         mIdentityManager = identityManager;
-        mIdentityMutator = identityManager.getIdentityMutator();
+        mIdentityMutator = identityMutator;
         mAndroidSyncSettings = androidSyncSettings;
 
         mSigninAllowedByPolicy =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
index 07223126..5833a2e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -125,6 +125,9 @@
     /** The desired height of a content that has just been shown or whose height was invalidated. */
     private static final float HEIGHT_UNSPECIFIED = -1.0f;
 
+    /** Invalid height ratio. When specified, a default value is used. */
+    private static final float INVALID_HEIGHT_RATIO = -1.0f;
+
     /** The interpolator that the height animator uses. */
     private final Interpolator mInterpolator = new DecelerateInterpolator(1.0f);
 
@@ -295,6 +298,26 @@
         }
 
         /**
+         * TODO(jinsukkim): Revise the API in favor of those specifying the height and its behavior
+         *         for each state.
+         * @return Height of the sheet in half state with respect to the container height.
+         *         This is INVALID_HEIGHT_RATIO by default, which lets the BottomSheet use
+         *         a predefined value ({@link #HALF_HEIGHT_RATIO}).
+         */
+        default float getCustomHalfRatio() {
+            return INVALID_HEIGHT_RATIO;
+        }
+
+        /**
+         * @return Height of the sheet in full state with respect to container height.
+         *         This is -1 by default, which lets the BottomSheet use the container height
+         *         minus the top shadow height.
+         */
+        default float getCustomFullRatio() {
+            return INVALID_HEIGHT_RATIO;
+        }
+
+        /**
          * Set a {@link ContentSizeListener} that should be notified when the size of the content
          * has changed. This will be called only if {@link #wrapContentEnabled()} returns {@code
          * true}. Note that you need to implement this method only if the content view height
@@ -1004,7 +1027,9 @@
     @VisibleForTesting
     float getHalfRatio() {
         if (mContainerHeight <= 0) return 0;
-        return HALF_HEIGHT_RATIO;
+        float customHalfRatio =
+                mSheetContent != null ? mSheetContent.getCustomHalfRatio() : INVALID_HEIGHT_RATIO;
+        return customHalfRatio < 0 ? HALF_HEIGHT_RATIO : customHalfRatio;
     }
 
     /**
@@ -1013,7 +1038,10 @@
     @VisibleForTesting
     float getFullRatio() {
         if (mContainerHeight <= 0) return 0;
-        return (mContainerHeight + mToolbarShadowHeight) / mContainerHeight;
+        float customFullRatio =
+                mSheetContent != null ? mSheetContent.getCustomFullRatio() : INVALID_HEIGHT_RATIO;
+        return customFullRatio < 0 ? mContainerHeight / (mContainerHeight + mToolbarShadowHeight)
+                                   : customFullRatio;
     }
 
     /**
@@ -1305,7 +1333,8 @@
 
     public boolean isSmallScreen() {
         // A small screen is defined by there being less than 160dp between half and full states.
-        float fullToHalfDiff = (getFullRatio() - getHalfRatio()) * mContainerHeight;
+        float fullHeightRatio = mContainerHeight / (mContainerHeight + mToolbarShadowHeight);
+        float fullToHalfDiff = (fullHeightRatio - HALF_HEIGHT_RATIO) * mContainerHeight;
         return fullToHalfDiff < mMinHalfFullDistance;
     }
 
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index 7713636..fef95bd 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -3429,7 +3429,10 @@
       <message name="IDS_OVERSCROLL_NAVIGATION_SHEET_DESCRIPTION" desc="The content description of the navigation bottom sheet.">
         Navigation history
       </message>
-      <message name="IDS_OVERSCROLL_NAVIGATION_SHEET_OPENED_FULL" desc="Accessibility string read when the navigation bottom sheet is opened at full height. The sheet will occupy up to half the screen.">
+      <message name="IDS_OVERSCROLL_NAVIGATION_SHEET_OPENED_HALF" desc="Accessibility string read when the navigation bottom sheet is opened at half height. The sheet will occupy up to half the screen.">
+        Navigation history is half-opened
+      </message>
+      <message name="IDS_OVERSCROLL_NAVIGATION_SHEET_OPENED_FULL" desc="Accessibility string read when the navigation bottom sheet is opened at full height. The sheet will occupy up to the full screen.">
         Navigation history is opened
       </message>
       <message name="IDS_OVERSCROLL_NAVIGATION_SHEET_CLOSED" desc="Accessibility string read when the navigation bottom sheet is closed.">
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
index a04646d..9db91cca 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">فتح الكل</translation>
 <translation id="1409426117486808224">عرض مبسَّط لعلامات التبويب المفتوحة</translation>
 <translation id="1409879593029778104">مُنع تنزيل الملف <ph name="FILE_NAME" /> لأنه موجود بالفعل.</translation>
+<translation id="1413136574162415971">‏بإمكان Google التحقُّق مما إذا تم استخدام كلمات المرور في عملية اختراق البيانات. سيتم تفعيل هذه الميزة عند تسجيل الدخول باستخدام حسابك على Google وتفعيل المزامنة.</translation>
 <translation id="1414981605391750300">‏جارٍ الاتصال بـ Google. قد يستغرق ذلك دقيقة واحدة...</translation>
 <translation id="1416550906796893042">إصدار التطبيق</translation>
 <translation id="1430915738399379752">طباعة</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">الصوت</translation>
 <translation id="2096012225669085171">المزامنة والتخصيص على الأجهزة</translation>
 <translation id="2100273922101894616">تسجيل الدخول تلقائيًا</translation>
+<translation id="2100314319871056947">يُرجى تجربة مشاركة النص في مجموعات أصغر</translation>
 <translation id="2107397443965016585">السؤال أولاً قبل السماح لمواقع الويب بتشغيل المحتوى المَحمي (موصى به)</translation>
 <translation id="2111511281910874386">الانتقال إلى الصفحة</translation>
 <translation id="2122601567107267586">تعذر فتح التطبيق</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">المس زر الرجوع للخروج من وضع ملء الشاشة.</translation>
 <translation id="2842985007712546952">المجلد الرئيسي</translation>
 <translation id="2858138569776157458">أهم المواقع</translation>
+<translation id="2860954141821109167">يُرجى التأكُّد من تفعيل تطبيق الهاتف على هذا الجهاز</translation>
 <translation id="2870560284913253234">الموقع</translation>
 <translation id="2874939134665556319">المقطع الصوتي السابق</translation>
 <translation id="2876369937070532032">‏يتم إرسال عناوين URL لبعض الصفحات التي تزورها إلى Google، عندما يكون أمانك في خطر</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">إنشاء عبارة المرور</translation>
 <translation id="2996809686854298943">‏عنوان URL المطلوب</translation>
 <translation id="300526633675317032">سيؤدي هذا إلى محو مساحة التخزين البالغة <ph name="SIZE_IN_KB" /> بأكملها من مساحة تخزين مواقع الويب.</translation>
+<translation id="3016635187733453316">يُرجى التأكُّد من اتصال هذا الجهاز بالإنترنت</translation>
 <translation id="3029613699374795922">تم التنزيل بحجم <ph name="KBS" /> كيلوبايت</translation>
 <translation id="3029704984691124060">عبارات المرور غير متطابقة</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />الحصول على مساعدة<ph name="END_LINK" /></translation>
@@ -350,7 +354,7 @@
 <translation id="3599863153486145794">‏يمسح السجل من كل الأجهزة التي تم تسجيل الدخول عليها. وقد يتضمن حسابك في Google نماذج أخرى من سجل التصفح في <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3600792891314830896">كتم صوت مواقع الويب التي تشغّل الصوت</translation>
 <translation id="3616113530831147358">المقاطع الصوتية</translation>
-<translation id="3631987586758005671">جارٍ المشاركة إلى الجهاز <ph name="DEVICE_NAME" /></translation>
+<translation id="3631987586758005671">جارٍ المشاركة مع <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">كشف كلمة المرور</translation>
 <translation id="363596933471559332">يمكنك تسجيل الدخول تلقائيًا إلى مواقع الويب باستخدام بيانات الاعتماد المخزّنة. وعندما تكون هذه الميزة غير مفعّلة، سيُطلب منك التحقّق من بيانات الاعتماد في كل مرة قبل تسجيل الدخول إلى موقع ويب.</translation>
 <translation id="3658159451045945436">تؤدي إعادة الضبط إلى محو سِجلّ البيانات المحفوظة، بما في ذلك قائمة المواقع الإلكترونية التي تمت زيارتها.</translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">تحديد الصور</translation>
 <translation id="7233236755231902816">‏للاطّلاع على الويب بلغتك، يمكنك الحصول على أحدث إصدار من Chrome.</translation>
 <translation id="7243308994586599757">الخيارات المتاحة بالقرب من الجزء السفلي من الشاشة</translation>
+<translation id="7248069434667874558">‏يُرجى التأكّد من تفعيل مزامنة الجهاز <ph name="TARGET_DEVICE_NAME" /> في Chrome</translation>
 <translation id="7250468141469952378">تم اختيار <ph name="ITEM_COUNT" /> عنصراً</translation>
 <translation id="7274013316676448362">الموقع المحظور</translation>
 <translation id="7290209999329137901">إعادة التسمية غير متوفرة</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">تم إيقافه لهذا الجهاز</translation>
 <translation id="8013372441983637696">‏محو بيانات Chrome من هذا الجهاز أيضًا</translation>
 <translation id="8015452622527143194">إعادة كل محتويات الصفحة إلى الحجم التلقائي</translation>
+<translation id="8015780634880457457">‏بإمكان Google التحقُّق مما إذا تم استخدام كلمات المرور في عملية اختراق البيانات.</translation>
 <translation id="802154636333426148">تعذّر التنزيل</translation>
 <translation id="8026334261755873520">محو بيانات التصفُّح</translation>
 <translation id="8035133914807600019">مجلد جديد...</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">يتعذّر تصدير كلمات المرور</translation>
 <translation id="8447861592752582886">إبطال إذن الجهاز</translation>
 <translation id="8461694314515752532">تشفير البيانات المتزامنة باستخدام عبارة مرور المزامنة الخاصة بك</translation>
+<translation id="8466613982764129868">يُرجى التأكُّد من اتصال الجهاز <ph name="TARGET_DEVICE_NAME" /> بالإنترنت</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">التوفر بلا إنترنت</translation>
 <translation id="8489271220582375723">فتح صفحة السجل</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">تسجيل الخروج من الحساب المُدار</translation>
 <translation id="9204836675896933765">ملف واحد متبقٍ</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">تعذّر إجراء المكالمات</translation>
 <translation id="9219103736887031265">الصور</translation>
 <translation id="926205370408745186">‏إزالة نشاط Chrome من الرفاهية الرقمية</translation>
 <translation id="932327136139879170">الصفحة الرئيسية</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
index a9b2e98..fc52885 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Отваряне на всички</translation>
 <translation id="1409426117486808224">Опростен изглед на отворените раздели</translation>
 <translation id="1409879593029778104">Изтеглянето на „<ph name="FILE_NAME" />“ е предотвратено, защото файлът вече съществува.</translation>
+<translation id="1413136574162415971">Google може да проверява дали паролите ви са изтекли при нарушение на сигурността на данните. Функцията ще бъде включена, когато влезете с профила си в Google и включите синхронизирането.</translation>
 <translation id="1414981605391750300">Установява се връзка с Google. Това може да отнеме известно време…</translation>
 <translation id="1416550906796893042">Версия на приложението</translation>
 <translation id="1430915738399379752">Печат</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2096012225669085171">Синхронизиране и персонализиране на всички устройства</translation>
 <translation id="2100273922101894616">Автоматичен вход</translation>
+<translation id="2100314319871056947">Опитайте да споделите текста на по-малки части</translation>
 <translation id="2107397443965016585">Запитване преди разрешаване на сайтовете да възпроизвеждат защитено съдържание (препоръчително)</translation>
 <translation id="2111511281910874386">Към страницата</translation>
 <translation id="2122601567107267586">Приложението не можа да бъде отворено</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Докоснете бутона за връщане назад, за да излезете от режима на цял екран.</translation>
 <translation id="2842985007712546952">Основна папка</translation>
 <translation id="2858138569776157458">Водещи сайтове</translation>
+<translation id="2860954141821109167">Трябва да има активирано приложение за телефон на устройството</translation>
 <translation id="2870560284913253234">Сайт</translation>
 <translation id="2874939134665556319">Предишен запис</translation>
 <translation id="2876369937070532032">Когато сигурността ви е застрашена, изпраща до Google URL адресите на някои от страниците, които посещавате.</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Създаване на пропуск</translation>
 <translation id="2996809686854298943">Изисква се URL адрес</translation>
 <translation id="300526633675317032">Така ще се изчистят всички съхранявани данни от уебсайтове (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">Уверете се, че това устройство е свързано с интернет</translation>
 <translation id="3029613699374795922">Изтеглено: <ph name="KBS" /> КБ</translation>
 <translation id="3029704984691124060">Пропуските не са идентични</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Получете помощ<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Избиране на изображения</translation>
 <translation id="7233236755231902816">За да виждате съдържанието в мрежата на своя език, изтеглете най-новата версия на Chrome</translation>
 <translation id="7243308994586599757">Опциите са в долната част на екрана</translation>
+<translation id="7248069434667874558">Уверете се, че синхронизирането в Chrome е включено за <ph name="TARGET_DEVICE_NAME" /></translation>
 <translation id="7250468141469952378">Избрани: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Блокиран сайт</translation>
 <translation id="7290209999329137901">Преименуването не е възможно</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Изключено за това устройство</translation>
 <translation id="8013372441983637696">Изчистване на данните ви в Chrome и от това устройство</translation>
 <translation id="8015452622527143194">Стандартен размер на всички елементи на страницата</translation>
+<translation id="8015780634880457457">Google може да проверява дали паролите ви са изтекли при нарушение на сигурността на данните</translation>
 <translation id="802154636333426148">Изтеглянето не бе успешно</translation>
 <translation id="8026334261755873520">Изчистване на данните за сърфирането</translation>
 <translation id="8035133914807600019">Нова папка…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Паролите не могат да бъдат експортирани</translation>
 <translation id="8447861592752582886">Отмяна на разрешението за достъп до устройството</translation>
 <translation id="8461694314515752532">Шифроване на синхронизираните данни със собствения ви пропуск за синхронизиране</translation>
+<translation id="8466613982764129868">Уверете се, че устройството <ph name="TARGET_DEVICE_NAME" /> е съврзано с интернет</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /><ph name="SEPARATOR" /><ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Налице офлайн</translation>
 <translation id="8489271220582375723">Отваряне на страницата „История“</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Излизане от управляван профил</translation>
 <translation id="9204836675896933765">Остава 1 файл</translation>
 <translation id="9206873250291191720">А</translation>
+<translation id="9209888181064652401">Не могат да се извършват обаждания</translation>
 <translation id="9219103736887031265">Изображения</translation>
 <translation id="926205370408745186">Премахване на активността ви в Chrome от „Дигитално благополучие“</translation>
 <translation id="932327136139879170">Начална страница</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
index 11f7bda..f970a95 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Obre-les totes</translation>
 <translation id="1409426117486808224">Visualització simplificada de les pestanyes obertes</translation>
 <translation id="1409879593029778104">No s'ha baixat el fitxer <ph name="FILE_NAME" /> perquè ja existeix.</translation>
+<translation id="1413136574162415971">Google pot comprovar si les teves contrasenyes han patit una violació de les dades. Aquesta opció s'activarà quan iniciïs la sessió amb el Compte de Google i activis la sincronització.</translation>
 <translation id="1414981605391750300">S'està contactant amb Google. Aquest procés pot trigar una estona…</translation>
 <translation id="1416550906796893042">Versió de l'aplicació</translation>
 <translation id="1430915738399379752">Imprimeix</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">So</translation>
 <translation id="2096012225669085171">Sincronitza i personalitza el contingut en tots els dispositius</translation>
 <translation id="2100273922101894616">Inici de sessió automàtic</translation>
+<translation id="2100314319871056947">Prova de compartir el text en fragments més petits</translation>
 <translation id="2107397443965016585">Pregunta'm abans de permetre que els llocs web reprodueixin contingut protegit (opció recomanada)</translation>
 <translation id="2111511281910874386">Ves a la pàgina</translation>
 <translation id="2122601567107267586">L'aplicació no s'ha pogut obrir</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Toqueu el botó Enrere per sortir de la pantalla completa.</translation>
 <translation id="2842985007712546952">Carpeta principal</translation>
 <translation id="2858138569776157458">Llocs populars</translation>
+<translation id="2860954141821109167">Comprova que hi hagi una aplicació de telèfon activada en aquest dispositiu</translation>
 <translation id="2870560284913253234">Lloc web</translation>
 <translation id="2874939134665556319">Pista anterior</translation>
 <translation id="2876369937070532032">Envia a Google els URL d'algunes de les pàgines que visites quan la teva seguretat està en risc</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Creeu una frase de contrasenya</translation>
 <translation id="2996809686854298943">Es necessita un URL</translation>
 <translation id="300526633675317032">Amb aquesta acció s'esborraran <ph name="SIZE_IN_KB" /> d'emmagatzematge del lloc web.</translation>
+<translation id="3016635187733453316">Comprova que el dispositiu estigui connectat a Internet</translation>
 <translation id="3029613699374795922">S'han baixat <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Les frases de contrasenya no coincideixen</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obteniu ajuda<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Selecciona imatges</translation>
 <translation id="7233236755231902816">Per veure el web en el teu idioma, actualitza Chrome a la versió més recent.</translation>
 <translation id="7243308994586599757">Opcions disponibles a la part inferior de la pantalla</translation>
+<translation id="7248069434667874558">Comprova que <ph name="TARGET_DEVICE_NAME" /> tingui la sincronització activada a Chrome</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elements seleccionats</translation>
 <translation id="7274013316676448362">Lloc bloquejat</translation>
 <translation id="7290209999329137901">No es pot canviar el nom</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Aquesta ubicació està desactivada per a aquest dispositiu</translation>
 <translation id="8013372441983637696">Esborra també les teves dades de Chrome d'aquest dispositiu</translation>
 <translation id="8015452622527143194">Restableix la mida de tots els elements de la pàgina</translation>
+<translation id="8015780634880457457">Google pot comprovar si les teves contrasenyes han patit una violació de les dades</translation>
 <translation id="802154636333426148">Error de baixada</translation>
 <translation id="8026334261755873520">Esborra les dades de navegació</translation>
 <translation id="8035133914807600019">Carpeta nova…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">No es poden exportar les contrasenyes</translation>
 <translation id="8447861592752582886">Revoca el permís d'accés al dispositiu</translation>
 <translation id="8461694314515752532">Encripta les dades sincronitzades amb la teva frase de contrasenya de sincronització</translation>
+<translation id="8466613982764129868">Comprova que el dispositiu <ph name="TARGET_DEVICE_NAME" /> estigui connectat a Internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponible sense connexió</translation>
 <translation id="8489271220582375723">Obre la pàgina de l'historial</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Tanqueu la sessió del compte gestionat</translation>
 <translation id="9204836675896933765">Queda 1 fitxer</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">No es poden fer trucades</translation>
 <translation id="9219103736887031265">Imatges</translation>
 <translation id="926205370408745186">Suprimeix l'activitat de Chrome de l'aplicació Benestar digital</translation>
 <translation id="932327136139879170">Inici</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
index 7a5c2ed..1358e36 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Otevřít vše</translation>
 <translation id="1409426117486808224">Zjednodušené zobrazení otevřených karet</translation>
 <translation id="1409879593029778104">Stažení souboru <ph name="FILE_NAME" /> bylo zabráněno, protože soubor již existuje.</translation>
+<translation id="1413136574162415971">Google může kontrolovat, zda vaše hesla nebyla součástí úniku dat. Pokud se přihlásíte pomocí účtu Google a zapnete synchronizaci, tato funkce bude zapnutá.</translation>
 <translation id="1414981605391750300">Kontaktování Googlu. Může to chvíli trvat…</translation>
 <translation id="1416550906796893042">Verze aplikace</translation>
 <translation id="1430915738399379752">Tisk</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2096012225669085171">Synchronizovat a přizpůsobit na různých zařízeních</translation>
 <translation id="2100273922101894616">Přihlásit se automaticky</translation>
+<translation id="2100314319871056947">Zkuste text sdílet po menších částech</translation>
 <translation id="2107397443965016585">Před povolením spuštění chráněného obsahu na webu se zeptat (doporučeno)</translation>
 <translation id="2111511281910874386">Přejít na stránku</translation>
 <translation id="2122601567107267586">Aplikaci nelze otevřít</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Režim celé obrazovky ukončíte klepnutím na tlačítko Zpět.</translation>
 <translation id="2842985007712546952">Nadřazená složka</translation>
 <translation id="2858138569776157458">Top weby</translation>
+<translation id="2860954141821109167">Zkontrolujte zda je na tomto zařízení povolená aplikace k telefonování</translation>
 <translation id="2870560284913253234">Stránky</translation>
 <translation id="2874939134665556319">Předchozí skladba</translation>
 <translation id="2876369937070532032">Když je ohrožena vaše bezpečnost, odesílá adresy URL některých navštívených stránek do Googlu</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Vytvoření heslové fráze</translation>
 <translation id="2996809686854298943">Je požadována adresa URL</translation>
 <translation id="300526633675317032">Tímto vymažete celé úložiště webů (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">Zkontrolujte, zda je toto zařízení připojeno k internetu</translation>
 <translation id="3029613699374795922">Staženo: <ph name="KBS" /> kB</translation>
 <translation id="3029704984691124060">Heslové fráze se neshodují</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Zobrazit nápovědu<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Vyberte fotky</translation>
 <translation id="7233236755231902816">Chcete-li si web prohlížet ve svém jazyce, stáhněte si nejnovější verzi Chromu</translation>
 <translation id="7243308994586599757">Možnosti jsou k dispozici ve spodní části obrazovky</translation>
+<translation id="7248069434667874558">Zkontrolujte, zda je v Chromu na zařízení <ph name="TARGET_DEVICE_NAME" /> zapnutá synchronizace</translation>
 <translation id="7250468141469952378">Vybráno: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Blokovaný web</translation>
 <translation id="7290209999329137901">Přejmenování není k dispozici</translation>
@@ -880,7 +885,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (aktualizováno <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">uspořená data</translation>
 <translation id="7498271377022651285">Čekejte prosím…</translation>
-<translation id="7510943789645525906">Upozorní vás, pokud vaše heslo bylo součástí porušení zabezpečení údajů</translation>
+<translation id="7510943789645525906">Upozorní vás, pokud vaše heslo bylo součástí úniku dat</translation>
 <translation id="7514365320538308">Stáhnout</translation>
 <translation id="751961395872307827">K webu se nelze připojit</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Vypnuto v tomto zařízení</translation>
 <translation id="8013372441983637696">Vymazat data prohlížeče Chrome také z tohoto zařízení</translation>
 <translation id="8015452622527143194">Vrátit veškerý obsah stránky na původní velikost</translation>
+<translation id="8015780634880457457">Google může kontrolovat, zda vaše hesla nebyla součástí úniku dat</translation>
 <translation id="802154636333426148">Stažení se nezdařilo</translation>
 <translation id="8026334261755873520">Vymazat údaje o prohlížení</translation>
 <translation id="8035133914807600019">Nová složka…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Hesla se nepodařilo exportovat</translation>
 <translation id="8447861592752582886">Zrušit oprávnění zařízení</translation>
 <translation id="8461694314515752532">Šifrovat synchronizovaná data pomocí vlastní heslové fráze pro synchronizaci</translation>
+<translation id="8466613982764129868">Zkontrolujte, zda je zařízení<ph name="TARGET_DEVICE_NAME" /> připojené k internetu</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Dostupné offline</translation>
 <translation id="8489271220582375723">Otevřít stránku historie</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Odhlásit se ze spravovaného účtu</translation>
 <translation id="9204836675896933765">Zbývá 1 soubor</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Nelze uskutečňovat hovory</translation>
 <translation id="9219103736887031265">Obrázky</translation>
 <translation id="926205370408745186">Odstranit vaši aktivitu v Chromu z digitální rovnováhy</translation>
 <translation id="932327136139879170">Domovská stránka</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
index d8bb9920..c7b35fe 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Åbn alle</translation>
 <translation id="1409426117486808224">Enkel visning af åbne faner</translation>
 <translation id="1409879593029778104">Download af <ph name="FILE_NAME" /> blev forhindret, fordi filen allerede findes.</translation>
+<translation id="1413136574162415971">Google kan tjekke, om dine adgangskoder har været del af et brud på datasikkerheden. Denne funktion aktiveres, når du logger ind med din Google-konto og aktiverer synkronisering.</translation>
 <translation id="1414981605391750300">Kontakter Google. Dette kan tage et øjeblik…</translation>
 <translation id="1416550906796893042">Appversion</translation>
 <translation id="1430915738399379752">Udskriv</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Lyd</translation>
 <translation id="2096012225669085171">Synkroniser og tilpas på flere enheder</translation>
 <translation id="2100273922101894616">Automatisk login</translation>
+<translation id="2100314319871056947">Prøv at opdele teksten i mindre stykker</translation>
 <translation id="2107397443965016585">Spørg, før websites får tilladelse til at afspille beskyttet indhold (anbefales)</translation>
 <translation id="2111511281910874386">Gå til side</translation>
 <translation id="2122601567107267586">Appen kunne ikke åbnes</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Tryk på tilbageknappen for at afslutte fuld skærm.</translation>
 <translation id="2842985007712546952">Overordnet mappe</translation>
 <translation id="2858138569776157458">Topwebsites</translation>
+<translation id="2860954141821109167">Sørg for, at opkaldsappen er aktiveret på denne enhed</translation>
 <translation id="2870560284913253234">Website</translation>
 <translation id="2874939134665556319">Forrige nummer</translation>
 <translation id="2876369937070532032">Sender webadresser på nogle sider, som du besøger, til Google, når din sikkerhed er truet</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Opret adgangssætning</translation>
 <translation id="2996809686854298943">En webadresse er påkrævet</translation>
 <translation id="300526633675317032">Dette rydder alle <ph name="SIZE_IN_KB" /> i websitelagerpladsen.</translation>
+<translation id="3016635187733453316">Sørg for, at din enhed har forbindelse til internettet</translation>
 <translation id="3029613699374795922">Der er downloadet <ph name="KBS" /> kB</translation>
 <translation id="3029704984691124060">Adgangssætningerne stemmer ikke overens</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Få hjælp<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Vælg billeder</translation>
 <translation id="7233236755231902816">Hent den nyeste version af Chrome for at bruge browseren på dit eget sprog</translation>
 <translation id="7243308994586599757">Du finder indstillingerne nederst på skærmen</translation>
+<translation id="7248069434667874558">Sørg for, at synkronisering er aktiveret i Chrome på <ph name="TARGET_DEVICE_NAME" /></translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> er markeret</translation>
 <translation id="7274013316676448362">Blokeret website</translation>
 <translation id="7290209999329137901">Elementet kan ikke omdøbes.</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Deaktiveret på denne enhed</translation>
 <translation id="8013372441983637696">Ryd også dine Chrome-data fra enheden</translation>
 <translation id="8015452622527143194">Nulstil alt på siden til standardstørrelsen</translation>
+<translation id="8015780634880457457">Google kan tjekke, om dine adgangskoder har været del af et brud på datasikkerheden</translation>
 <translation id="802154636333426148">Download mislykkedes</translation>
 <translation id="8026334261755873520">Ryd browserdata</translation>
 <translation id="8035133914807600019">Ny mappe…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Der kan ikke eksporteres adgangskoder</translation>
 <translation id="8447861592752582886">Tilbagekald adgangstilladelsen til enheden</translation>
 <translation id="8461694314515752532">Kryptér synkroniserede data med din egen adgangssætning til synkronisering</translation>
+<translation id="8466613982764129868">Sørg for, at <ph name="TARGET_DEVICE_NAME" /> har forbindelse til internettet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Tilgængelig offline</translation>
 <translation id="8489271220582375723">Åbn siden med historik</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Log ud af den administrerede konto</translation>
 <translation id="9204836675896933765">1 fil tilbage</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Det er ikke muligt at foretage opkald</translation>
 <translation id="9219103736887031265">Billeder</translation>
 <translation id="926205370408745186">Fjern din Chrome-aktivitet fra Digital balance</translation>
 <translation id="932327136139879170">Start</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
index 8a4780c..a4398bf5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Alle öffnen</translation>
 <translation id="1409426117486808224">Vereinfachte Ansicht für geöffnete Tabs</translation>
 <translation id="1409879593029778104"><ph name="FILE_NAME" /> konnte nicht heruntergeladen werden, da die Datei bereits vorhanden ist.</translation>
+<translation id="1413136574162415971">Google kann prüfen, ob Ihre Passwörter von einer Datenpanne betroffen sind. Diese Funktion wird aktiviert, wenn Sie sich mit Ihrem Google-Konto anmelden und die Synchronisierung aktivieren.</translation>
 <translation id="1414981605391750300">Google wird kontaktiert. Das kann einen Moment dauern.</translation>
 <translation id="1416550906796893042">Anwendungsversion</translation>
 <translation id="1430915738399379752">Drucken</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Ton</translation>
 <translation id="2096012225669085171">Geräteübergreifend synchronisieren und personalisieren</translation>
 <translation id="2100273922101894616">Automatisch anmelden</translation>
+<translation id="2100314319871056947">Bitte teilen Sie den Text in mehrere Abschnitte ein</translation>
 <translation id="2107397443965016585">Fragen, bevor Websites erlaubt wird, geschützten Inhalt wiederzugeben (empfohlen)</translation>
 <translation id="2111511281910874386">Seite aufrufen</translation>
 <translation id="2122601567107267586">App konnte nicht geöffnet werden</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Tippen Sie zum Beenden des Vollbildmodus auf die Zurück-Taste.</translation>
 <translation id="2842985007712546952">Übergeordneter Ordner</translation>
 <translation id="2858138569776157458">Top-Websites</translation>
+<translation id="2860954141821109167">Prüfen Sie, ob auf diesem Gerät eine Telefon-App aktiviert ist</translation>
 <translation id="2870560284913253234">Website</translation>
 <translation id="2874939134665556319">Vorheriger Titel</translation>
 <translation id="2876369937070532032">URLs einiger von mir besuchter Seiten an Google senden, wenn meine Sicherheit gefährdet ist</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Passphrase erstellen</translation>
 <translation id="2996809686854298943">URL erforderlich</translation>
 <translation id="300526633675317032">Der gesamte Websitespeicher (<ph name="SIZE_IN_KB" />) wird gelöscht.</translation>
+<translation id="3016635187733453316">Prüfen Sie, ob das Gerät mit dem Internet verbunden ist</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> KB heruntergeladen</translation>
 <translation id="3029704984691124060">Passphrasen stimmen nicht überein.</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Hilfe aufrufen<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Bilder auswählen</translation>
 <translation id="7233236755231902816">Das Web in Ihrer Sprache – mit der aktuellen Version von Chrome</translation>
 <translation id="7243308994586599757">Optionen unten auf dem Bildschirm verfügbar</translation>
+<translation id="7248069434667874558">Prüfen Sie, ob auf "<ph name="TARGET_DEVICE_NAME" />" die Synchronisierung in Chrome aktiviert ist</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ausgewählt</translation>
 <translation id="7274013316676448362">Blockierte Website</translation>
 <translation id="7290209999329137901">Umbenennen nicht verfügbar</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Für dieses Gerät deaktiviert</translation>
 <translation id="8013372441983637696">Meine Chrome-Daten auch von diesem Gerät löschen</translation>
 <translation id="8015452622527143194">Gesamten Seiteninhalt auf Standardgröße zurücksetzen</translation>
+<translation id="8015780634880457457">Google kann prüfen, ob Ihre Passwörter von einer Datenpanne betroffen sind</translation>
 <translation id="802154636333426148">Downloadfehler</translation>
 <translation id="8026334261755873520">Browserdaten löschen</translation>
 <translation id="8035133914807600019">Neuer Ordner…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Passwörter können nicht exportiert werden</translation>
 <translation id="8447861592752582886">Zugriffsberechtigung auf Gerät widerrufen</translation>
 <translation id="8461694314515752532">Synchronisierte Daten mit eigener Synchronisierungspassphrase verschlüsseln</translation>
+<translation id="8466613982764129868">Prüfen Sie, ob "<ph name="TARGET_DEVICE_NAME" />" mit dem Internet verbunden ist</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Offline verfügbar</translation>
 <translation id="8489271220582375723">Verlaufsseite öffnen</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Von verwaltetem Konto abmelden</translation>
 <translation id="9204836675896933765">Noch 1 Datei</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Es können keine Anrufe getätigt werden</translation>
 <translation id="9219103736887031265">Bilder</translation>
 <translation id="926205370408745186">Chrome-Aktivitäten aus Digital Wellbeing entfernen</translation>
 <translation id="932327136139879170">Privat</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
index 77c660c..cebfc05 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Άνοιγμα όλων</translation>
 <translation id="1409426117486808224">Απλοποιημένη προβολή για ανοικτές καρτέλες</translation>
 <translation id="1409879593029778104">Η λήψη του αρχείου <ph name="FILE_NAME" /> απετράπη, επειδή το αρχείο υπάρχει ήδη.</translation>
+<translation id="1413136574162415971">Το Google μπορεί να ελέγχει εάν οι κωδικοί πρόσβασής σας ήταν μέρος της παραβίασης δεδομένων. Αυτή η λειτουργία θα ενεργοποιείται όταν συνδέεστε με τον Λογαριασμό σας Google και ενεργοποιείτε τον συγχρονισμό.</translation>
 <translation id="1414981605391750300">Επικοινωνία με Google… Αυτή η διαδικασία μπορεί να διαρκέσει μερικά λεπτά…</translation>
 <translation id="1416550906796893042">Έκδοση εφαρμογής</translation>
 <translation id="1430915738399379752">Εκτύπωση</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Ήχος</translation>
 <translation id="2096012225669085171">Συγχρονισμός και εξατομίκευση σε όλες τις συσκευές</translation>
 <translation id="2100273922101894616">Αυτόματη σύνδεση</translation>
+<translation id="2100314319871056947">Δοκιμάστε να κοινοποιήσετε το κείμενο σε μικρότερα τμήματα.</translation>
 <translation id="2107397443965016585">Να γίνεται ερώτηση προτού επιτραπεί στους ιστοτόπους η αναπαραγωγή προστατευόμενου περιεχομένου (συνιστάται)</translation>
 <translation id="2111511281910874386">Μετάβαση στη σελίδα</translation>
 <translation id="2122601567107267586">Δεν ήταν δυνατό το άνοιγμα της εφαρμογής</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Πατήστε το κουμπί επιστροφής για έξοδο από την πλήρη οθόνη.</translation>
 <translation id="2842985007712546952">Γονικός φάκελος</translation>
 <translation id="2858138569776157458">Κορ. ιστότοποι</translation>
+<translation id="2860954141821109167">Βεβαιωθείτε ότι είναι ενεργοποιημένη μια εφαρμογή τηλεφώνου σε αυτήν τη συσκευή.</translation>
 <translation id="2870560284913253234">Ιστότοπος</translation>
 <translation id="2874939134665556319">Προηγούμενο κομμάτι</translation>
 <translation id="2876369937070532032">Στέλνει URL από ορισμένες σελίδες που επισκέπτεστε στο Google, όταν η ασφάλειά σας βρίσκεται σε κίνδυνο</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Δημιουργία φράσης πρόσβασης</translation>
 <translation id="2996809686854298943">Απαιτείται διεύθυνση URL</translation>
 <translation id="300526633675317032">Αυτό θα διαγράψει και τα <ph name="SIZE_IN_KB" /> του αποθηκευτικού χώρου ιστοτόπων.</translation>
+<translation id="3016635187733453316">Βεβαιωθείτε ότι η συσκευή είναι συνδεδεμένη στο διαδίκτυο.</translation>
 <translation id="3029613699374795922">Έγινε λήψη <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Οι φράσεις πρόσβασης δεν συμφωνούν</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Λάβετε βοήθεια<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Επιλέξτε εικόνες</translation>
 <translation id="7233236755231902816">Για να δείτε τον ιστό στη γλώσσα σας, κατεβάστε την πιο πρόσφατη έκδοση του Chrome</translation>
 <translation id="7243308994586599757">Διαθέσιμες επιλογές κοντά κάτω μέρος της οθόνης</translation>
+<translation id="7248069434667874558">Βεβαιωθείτε ότι ο συγχρονισμός στο Chrome έχει ενεργοποιηθεί για τη συσκευή <ph name="TARGET_DEVICE_NAME" />.</translation>
 <translation id="7250468141469952378">Επιλέχθηκαν <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Αποκλεισμένος ιστότοπος</translation>
 <translation id="7290209999329137901">Η μετονομασία δεν είναι διαθέσιμη</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Έχει απενεργοποιηθεί για αυτήν τη συσκευή</translation>
 <translation id="8013372441983637696">Επίσης, να διαγραφούν τα δεδομένα Chrome από αυτήν τη συσκευή.</translation>
 <translation id="8015452622527143194">Επαναφορά στοιχείων σελίδας σε κανονικό μέγεθος</translation>
+<translation id="8015780634880457457">Το Google μπορεί να ελέγχει εάν οι κωδικοί πρόσβασής σας ήταν μέρος της παραβίασης δεδομένων.</translation>
 <translation id="802154636333426148">Η λήψη απέτυχε</translation>
 <translation id="8026334261755873520">Διαγραφή δεδομένων περιήγησης</translation>
 <translation id="8035133914807600019">Νέος φάκελος…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Δεν είναι δυνατή η εξαγωγή κωδικών πρόσβασης</translation>
 <translation id="8447861592752582886">Ανάκληση άδειας συσκευής</translation>
 <translation id="8461694314515752532">Κρυπτογράφηση συγχρονισμένων δεδομένων με τη δική σας φράση πρόσβασης συγχρονισμού</translation>
+<translation id="8466613982764129868">Βεβαιωθείτε ότι η συσκευή <ph name="TARGET_DEVICE_NAME" /> είναι συνδεδεμένη στο διαδίκτυο.</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Διαθέσιμο εκτός σύνδεσης</translation>
 <translation id="8489271220582375723">Άνοιγμα σελίδας "Ιστορικό"</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Αποσύνδεση από διαχειριζόμενο λογαριασμό</translation>
 <translation id="9204836675896933765">1 αρχείο απομένει</translation>
 <translation id="9206873250291191720">Α</translation>
+<translation id="9209888181064652401">Δεν είναι δυνατή η πραγματοποίηση κλήσεων</translation>
 <translation id="9219103736887031265">Εικόνες</translation>
 <translation id="926205370408745186">Κατάργηση της δραστηριότητάς σας στο Chrome από το Digital Wellbeing</translation>
 <translation id="932327136139879170">Αρχική σελίδα</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
index 4d6390c..be51289 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Abrir todas</translation>
 <translation id="1409426117486808224">Vista simplificada para las pestañas abiertas</translation>
 <translation id="1409879593029778104">Se impidió la descarga de <ph name="FILE_NAME" /> porque el archivo ya existe.</translation>
+<translation id="1413136574162415971">Google puede determinar si tus contraseñas formaron parte de un incumplimiento de datos. Se activará esta opción cuando accedas con tu Cuenta de Google y habilites la sincronización.</translation>
 <translation id="1414981605391750300">Se está estableciendo la comunicación con Google. Esta acción puede demorar unos minutos…</translation>
 <translation id="1416550906796893042">Versión de la aplicación</translation>
 <translation id="1430915738399379752">Imprimir</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2096012225669085171">Sincroniza y personaliza contenido en diferentes dispositivos</translation>
 <translation id="2100273922101894616">Acceso automático</translation>
+<translation id="2100314319871056947">Intenta compartir el texto en fragmentos más pequeños</translation>
 <translation id="2107397443965016585">Preguntar antes de permitir que los sitios reproduzcan contenido protegido (recomendado)</translation>
 <translation id="2111511281910874386">Ir a la página</translation>
 <translation id="2122601567107267586">No se pudo abrir la app</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Toca el botón Atrás para salir de la pantalla completa.</translation>
 <translation id="2842985007712546952">Carpeta principal</translation>
 <translation id="2858138569776157458">Populares</translation>
+<translation id="2860954141821109167">Comprueba que este dispositivo tenga una app de teléfono habilitada</translation>
 <translation id="2870560284913253234">Sitio</translation>
 <translation id="2874939134665556319">Pista anterior</translation>
 <translation id="2876369937070532032">Enviar a Google las URL de algunas páginas que visitas, cuando tu seguridad esté en riesgo</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Crear frase de contraseña</translation>
 <translation id="2996809686854298943">URL obligatoria</translation>
 <translation id="300526633675317032">Se borrarán <ph name="SIZE_IN_KB" /> del almacenamiento del sitio web.</translation>
+<translation id="3016635187733453316">Comprueba que este dispositivo tenga conexión a Internet</translation>
 <translation id="3029613699374795922">Se descargaron <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Las frases de contraseña no coinciden.</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obtener ayuda<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Seleccionar imágenes</translation>
 <translation id="7233236755231902816">Para ver la Web en tu idioma, obtén la versión más reciente de Chrome</translation>
 <translation id="7243308994586599757">Opciones disponibles junto a la parte inferior de la pantalla</translation>
+<translation id="7248069434667874558">Comprueba que <ph name="TARGET_DEVICE_NAME" /> tenga activada la sincronización en Chrome</translation>
 <translation id="7250468141469952378">Elementos seleccionados: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Sitio bloqueado</translation>
 <translation id="7290209999329137901">No se puede renombrar el elemento porque no está disponible</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Desactivado para este dispositivo</translation>
 <translation id="8013372441983637696">Borrar también los datos de Chrome de este dispositivo</translation>
 <translation id="8015452622527143194">Restablecer tamaño de los elementos de la página</translation>
+<translation id="8015780634880457457">Google puede determinar si tus contraseñas formaron parte de un incumplimiento de datos</translation>
 <translation id="802154636333426148">Error en la descarga</translation>
 <translation id="8026334261755873520">Eliminar datos de navegación</translation>
 <translation id="8035133914807600019">Nueva carpeta…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">No se pueden exportar las contraseñas</translation>
 <translation id="8447861592752582886">Revocar permiso para el dispositivo</translation>
 <translation id="8461694314515752532">Encriptar los datos sincronizados con tu propia frase de contraseña de sincronización</translation>
+<translation id="8466613982764129868">Comprueba que <ph name="TARGET_DEVICE_NAME" /> tenga conexión a Internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponible sin conexión</translation>
 <translation id="8489271220582375723">Abrir la página del historial</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Salir de la cuenta administrada</translation>
 <translation id="9204836675896933765">Queda 1 archivo</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">No se pueden realizar llamadas</translation>
 <translation id="9219103736887031265">Imágenes</translation>
 <translation id="926205370408745186">Quita tu actividad en Chrome de Bienestar digital</translation>
 <translation id="932327136139879170">Página principal</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
index 2f4a221..2b162f4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -41,7 +41,7 @@
 <translation id="1258753120186372309">Doodles de Google: <ph name="DOODLE_DESCRIPTION" /></translation>
 <translation id="1260236875608242557">Buscar y explorar</translation>
 <translation id="1264974993859112054">Deportes</translation>
-<translation id="1266864766717917324">No se ha podido compartir <ph name="CONTENT_TYPE" /></translation>
+<translation id="1266864766717917324">No se ha podido compartir: <ph name="CONTENT_TYPE" /></translation>
 <translation id="1272079795634619415">Interrumpir</translation>
 <translation id="1283039547216852943">Toca para ampliar</translation>
 <translation id="1285320974508926690">No traducir nunca este sitio</translation>
@@ -66,12 +66,13 @@
 <translation id="1407135791313364759">Abrir todas</translation>
 <translation id="1409426117486808224">Vista simplificada de las pestañas abiertas</translation>
 <translation id="1409879593029778104">No se ha descargado <ph name="FILE_NAME" /> porque este archivo ya existe.</translation>
+<translation id="1413136574162415971">Google puede comprobar si tus contraseñas se han visto afectadas por una quiebra de seguridad de datos. Esta función se activará cuando inicies sesión con tu cuenta de Google y actives la sincronización.</translation>
 <translation id="1414981605391750300">Contactando con Google. Esto puede tardar un minuto…</translation>
 <translation id="1416550906796893042">Versión de la aplicación</translation>
 <translation id="1430915738399379752">Imprimir</translation>
 <translation id="1445680696957526815">Los componentes de Chrome no son compatibles entre sí. Es posible que Chrome se esté actualizando. Vuelve a intentarlo dentro de unos minutos. Si el problema persiste, prueba a desinstalar Chrome y volver a instalarlo.</translation>
 <translation id="1446450296470737166">Control total dispositivos MIDI</translation>
-<translation id="1450753235335490080">No se ha podido compartir <ph name="CONTENT_TYPE" /></translation>
+<translation id="1450753235335490080">No se ha podido compartir: <ph name="CONTENT_TYPE" /></translation>
 <translation id="145097072038377568">Ajustes de Android desactivados</translation>
 <translation id="1477626028522505441">No se ha podido descargar <ph name="FILE_NAME" /> debido a problemas con el servidor.</translation>
 <translation id="1501480321619201731">Eliminar grupo</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2096012225669085171">Sincroniza y personaliza todos tus dispositivos</translation>
 <translation id="2100273922101894616">Iniciar sesión automáticamente</translation>
+<translation id="2100314319871056947">Prueba a compartir el texto dividiéndolo en partes más pequeñas</translation>
 <translation id="2107397443965016585">Preguntar antes de permitir que los sitios web reproduzcan contenido protegido (opción recomendada)</translation>
 <translation id="2111511281910874386">Ir a la página</translation>
 <translation id="2122601567107267586">No se ha podido abrir la aplicación</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Toca el botón de retroceso para salir de la pantalla completa.</translation>
 <translation id="2842985007712546952">Carpeta principal</translation>
 <translation id="2858138569776157458">Populares</translation>
+<translation id="2860954141821109167">Comprueba que se haya habilitado una aplicación de teléfono en este dispositivo</translation>
 <translation id="2870560284913253234">Sitio</translation>
 <translation id="2874939134665556319">Pista anterior</translation>
 <translation id="2876369937070532032">Envía a Google las URL de algunas de las páginas que visitas cuando tu seguridad corre peligro</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Crea una frase de contraseña</translation>
 <translation id="2996809686854298943">URL necesaria</translation>
 <translation id="300526633675317032">Se borrarán los <ph name="SIZE_IN_KB" /> de almacenamiento del sitio web.</translation>
+<translation id="3016635187733453316">Comprueba que este dispositivo esté conectado a Internet.</translation>
 <translation id="3029613699374795922">kB descargados: <ph name="KBS" /></translation>
 <translation id="3029704984691124060">Las frases de contraseña no coinciden</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obtener ayuda<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Seleccionar imágenes</translation>
 <translation id="7233236755231902816">Si quieres ver la Web en tu idioma, consigue la última versión de Chrome</translation>
 <translation id="7243308994586599757">Opciones disponibles cerca de la parte inferior de la pantalla</translation>
+<translation id="7248069434667874558">Asegúrate de que la sincronización de tu <ph name="TARGET_DEVICE_NAME" /> está activada en Chrome</translation>
 <translation id="7250468141469952378">Elementos seleccionados: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Sitio web bloqueado</translation>
 <translation id="7290209999329137901">El cambio de nombre no está disponible</translation>
@@ -880,7 +885,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (actualizada el <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">de datos ahorrados</translation>
 <translation id="7498271377022651285">Espera…</translation>
-<translation id="7510943789645525906">Te avisa si una de tus contraseñas se ha visto afectada por una quiebra de seguridad de datos</translation>
+<translation id="7510943789645525906">Te avisa si alguna de tus contraseñas se ha visto afectada por una quiebra de seguridad de datos</translation>
 <translation id="7514365320538308">Descargar</translation>
 <translation id="751961395872307827">No se puede establecer conexión con el sitio web</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Desactivada para este dispositivo</translation>
 <translation id="8013372441983637696">Borrar también los datos de Chrome de este dispositivo</translation>
 <translation id="8015452622527143194">Restaura el tamaño predeterminado del contenido</translation>
+<translation id="8015780634880457457">Google puede comprobar si tus contraseñas se han vistos afectadas por una quiebra de seguridad de datos</translation>
 <translation id="802154636333426148">No se ha podido descargar el archivo</translation>
 <translation id="8026334261755873520">Borrar datos de navegación</translation>
 <translation id="8035133914807600019">Nueva carpeta…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">No se pueden exportar las contraseñas</translation>
 <translation id="8447861592752582886">Revocar permiso de dispositivo</translation>
 <translation id="8461694314515752532">Cifrar los datos sincronizados con tu propia frase de contraseña de sincronización</translation>
+<translation id="8466613982764129868">Comprueba que tu <ph name="TARGET_DEVICE_NAME" /> esté conectado a Internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponible sin conexión</translation>
 <translation id="8489271220582375723">Abre la página Historial</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Cierra sesión en la cuenta gestionada</translation>
 <translation id="9204836675896933765">1 archivo restante</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">No se pueden hacer llamadas</translation>
 <translation id="9219103736887031265">Imágenes</translation>
 <translation id="926205370408745186">Eliminar tu actividad de Chrome de Bienestar digital</translation>
 <translation id="932327136139879170">Página principal</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
index df85f76..f4380be 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Ava kõik</translation>
 <translation id="1409426117486808224">Avatud vahelehtede lihtsustatud vaade</translation>
 <translation id="1409879593029778104">Faili <ph name="FILE_NAME" /> ei laaditud alla, kuna fail on juba olemas.</translation>
+<translation id="1413136574162415971">Google saab kontrollida, kas teie paroolid olid osa andmetega seotud rikkumisest. See lülitatakse sisse, kui logite sisse oma Google'i kontoga ja lülitate sünkroonimise sisse.</translation>
 <translation id="1414981605391750300">Google'iga ühenduse võtmine. See võib natuke aega võtta …</translation>
 <translation id="1416550906796893042">Rakenduse versioon</translation>
 <translation id="1430915738399379752">Printimine</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Heli</translation>
 <translation id="2096012225669085171">Seadmete vahel sünkroonimine ja isikupärastamine</translation>
 <translation id="2100273922101894616">Automaatne sisselogimine</translation>
+<translation id="2100314319871056947">Proovige teksti jagada väiksemate lõikudena</translation>
 <translation id="2107397443965016585">Küsi enne saidile kaitstud sisu esitamiseks loa andmist (soovitatav)</translation>
 <translation id="2111511281910874386">Minge lehele</translation>
 <translation id="2122601567107267586">Rakendust ei õnnestunud avada</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Täisekraanilt väljumiseks puudutage tagasinuppu.</translation>
 <translation id="2842985007712546952">Emakaust</translation>
 <translation id="2858138569776157458">Popid saidid</translation>
+<translation id="2860954141821109167">Veenduge, et telefonirakendus oleks selles seadmes lubatud</translation>
 <translation id="2870560284913253234">Sait</translation>
 <translation id="2874939134665556319">Eelmine lugu</translation>
 <translation id="2876369937070532032">Saadab mõnede teie külastatud lehtede URL-id Google'ile, kui teie turvalisus ohtu satub</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Parooli loomine</translation>
 <translation id="2996809686854298943">Vaja on URL-i</translation>
 <translation id="300526633675317032">See tühjendab veebisaidi salvestusruumi mahuga <ph name="SIZE_IN_KB" />.</translation>
+<translation id="3016635187733453316">Veenduge, et seadmel oleks internetiühendus</translation>
 <translation id="3029613699374795922">Alla on laaditud <ph name="KBS" /> kB</translation>
 <translation id="3029704984691124060">Paroolid ei ühti</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Küsige abi<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Kujutiste valimine</translation>
 <translation id="7233236755231902816">Hankige Chrome'i uusim versioon, et saaksite oma keeles veebi sirvida</translation>
 <translation id="7243308994586599757">Valikud on saadaval ekraani allosas</translation>
+<translation id="7248069434667874558">Veenduge, et seadmes <ph name="TARGET_DEVICE_NAME" /> oleks Chrome'i sünkroonimine sisse lülitatud</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> on valitud</translation>
 <translation id="7274013316676448362">Blokeeritud sait</translation>
 <translation id="7290209999329137901">Ümbernimetamine ei ole võimalik</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Selle seadme puhul on välja lülitatud</translation>
 <translation id="8013372441983637696">Kustuta sellest seadmest ka Chrome'i andmed</translation>
 <translation id="8015452622527143194">Lehel kuvatud sisu vaikesuuruses kuvamine</translation>
+<translation id="8015780634880457457">Google saab kontrollida, kas teie paroolid olid osa andmetega seotud rikkumisest</translation>
 <translation id="802154636333426148">Allalaadimine ebaõnnestus</translation>
 <translation id="8026334261755873520">Sirvimisandmete kustutamine</translation>
 <translation id="8035133914807600019">Uus kaust …</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Paroole ei saa eksportida</translation>
 <translation id="8447861592752582886">Seadme loa tühistamine</translation>
 <translation id="8461694314515752532">Krüpteeri sünkroonitud andmed sünkroonimisparooliga</translation>
+<translation id="8466613982764129868">Veenduge, et seadmel <ph name="TARGET_DEVICE_NAME" /> oleks internetiühendus</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Võrguühenduseta saadaval</translation>
 <translation id="8489271220582375723">Lehe Ajalugu avamine</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Hallatud kontolt väljalogimine</translation>
 <translation id="9204836675896933765">Üks fail on jäänud</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Ei saa helistada</translation>
 <translation id="9219103736887031265">Pildid</translation>
 <translation id="926205370408745186">Chrome'i tegevuste eemaldamine teenusest Digitaalne heaolu</translation>
 <translation id="932327136139879170">Kodu</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
index aa3ac96a..1b9030d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">باز کردن همه</translation>
 <translation id="1409426117486808224">نمای ساده‌شده برای برگه‌های باز</translation>
 <translation id="1409879593029778104">بارگیری <ph name="FILE_NAME" /> انجام نشد زیرا فایل از قبل موجود است.</translation>
+<translation id="1413136574162415971">‏Google می‌تواند بررسی کند آیا گذرواژه‌هایتان بخشی از نقض داده‌ها بوده است یا نه. اگر با حساب Google به سیستم وارد شوید و همگام‌سازی را روشن کرده باشید، این ویژگی روشن خواهد شد.</translation>
 <translation id="1414981605391750300">‏درحال اتصال به Google. ممکن است یک دقیقه طول بکشد…</translation>
 <translation id="1416550906796893042">نسخه برنامه</translation>
 <translation id="1430915738399379752">چاپ</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">صدا</translation>
 <translation id="2096012225669085171">همگام‌سازی و شخصی‌سازی در همه دستگاه‌ها</translation>
 <translation id="2100273922101894616">ورود به سیستم خودکار</translation>
+<translation id="2100314319871056947">بخش‌های کوچک‌تری از نوشتار را به اشتراک بگذارید</translation>
 <translation id="2107397443965016585">قبل از اجازه به سایت‌ها برای پخش محتوای محافظت‌شده سؤال شود (توصیه می‌شود)</translation>
 <translation id="2111511281910874386">رفتن به صفحه</translation>
 <translation id="2122601567107267586">باز کردن برنامه امکان‌پذیر نیست</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">برای خروج از حالت تمام صفحه، دکمه برگشت را لمس کنید.</translation>
 <translation id="2842985007712546952">پوشه اصلی</translation>
 <translation id="2858138569776157458">سایت‌های برتر</translation>
+<translation id="2860954141821109167">مطمئن شوید برنامه تلفن در این دستگاه فعال باشد</translation>
 <translation id="2870560284913253234">سایت</translation>
 <translation id="2874939134665556319">آهنگ قبلی</translation>
 <translation id="2876369937070532032">‏اگر امنیتتان درخطر باشد، نشانی وب برخی از صفحه‌هایی را که بازدید می‌کنید به Google می‌فرستد</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">ایجاد عبارت عبور</translation>
 <translation id="2996809686854298943">نشانی وب لازم است</translation>
 <translation id="300526633675317032">این کار کل <ph name="SIZE_IN_KB" /> فضای ذخیره‌سازی وب‌سایت را پاک می‌کند.</translation>
+<translation id="3016635187733453316">مطمئن شوید این دستگاه به اینترنت متصل باشد</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> کیلوبایت بارگیری شد</translation>
 <translation id="3029704984691124060">عبارت‌های عبور مطابقت ندارند</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />دریافت راهنمایی<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">انتخاب تصاویر</translation>
 <translation id="7233236755231902816">‏برای اینکه وب را به زبان خود ببینید، آخرین نسخه Chrome را دریافت کنید</translation>
 <translation id="7243308994586599757">گزینه‌ها در نزدیک پایین صفحه نمایش در دسترس هستند</translation>
+<translation id="7248069434667874558">‏مطمئن شوید همگام‌سازی <ph name="TARGET_DEVICE_NAME" /> در Chrome روشن باشد</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> مورد انتخاب شد</translation>
 <translation id="7274013316676448362">سایت مسدودشده</translation>
 <translation id="7290209999329137901">عدم‌دسترسی به تغییر نام</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">برای این دستگاه غیرفعال شد</translation>
 <translation id="8013372441983637696">‏داده‌های این Chrome هم از این دستگاه پاک شود</translation>
 <translation id="8015452622527143194">برگرداندن همه‌چیز در صفحه به‌اندازه پیش‌فرض</translation>
+<translation id="8015780634880457457">‏Google می‌تواند بررسی کند که آیا گذرواژه‌هایتان بخشی از نقض داده بوده است یا نه</translation>
 <translation id="802154636333426148">بارگیری نشد</translation>
 <translation id="8026334261755873520">پاک کردن داده‌های مرور</translation>
 <translation id="8035133914807600019">پوشه جدید…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">گذرواژه‌ها صادر نشدند</translation>
 <translation id="8447861592752582886">لغو مجوز دستگاه</translation>
 <translation id="8461694314515752532">رمزگذاری داده‌های همگام‌سازی‌شده با عبارت عبور همگام‌سازی خودتان</translation>
+<translation id="8466613982764129868">مطمئن شوید <ph name="TARGET_DEVICE_NAME" /> به اینترنت متصل باشد</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">امکان دسترسی به صورت آفلاین</translation>
 <translation id="8489271220582375723">باز کردن صفحه سابقه</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">خروج از حساب مدیریت‌شده</translation>
 <translation id="9204836675896933765">۱ فایل باقی مانده است</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">برقراری تماس ممکن نیست</translation>
 <translation id="9219103736887031265">تصاویر</translation>
 <translation id="926205370408745186">‏فعالیت Chrome شما از «آسایش دیجیتالی» برداشته شود</translation>
 <translation id="932327136139879170">منزل</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
index 0672ae5..21ecb47 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Avaa kaikki</translation>
 <translation id="1409426117486808224">Yksinkertaisempi avoimien välilehtien näkymä</translation>
 <translation id="1409879593029778104">Tiedoston <ph name="FILE_NAME" /> lataus estettiin, koska tiedosto on jo olemassa.</translation>
+<translation id="1413136574162415971">Google voi tarkistaa, olivatko salasanasi osallisina tietosuojaloukkauksessa. Tämä otetaan käyttöön, kun kirjaudut sisään Google-tililläsi ja otat synkronoinnin käyttöön.</translation>
 <translation id="1414981605391750300">Otetaan yhteyttä Googleen. Tämä voi kestää hetken…</translation>
 <translation id="1416550906796893042">Sovellusversio</translation>
 <translation id="1430915738399379752">Tulosta</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Ääni</translation>
 <translation id="2096012225669085171">Synkronoi ja yksilöi kaikilla laitteilla</translation>
 <translation id="2100273922101894616">Automaattinen kirjautuminen</translation>
+<translation id="2100314319871056947">Kokeile jakaa teksti pienempinä pätkinä</translation>
 <translation id="2107397443965016585">Kysy, saavatko sivustot toistaa suojattua sisältöä (suositus)</translation>
 <translation id="2111511281910874386">Siirry sivulle</translation>
 <translation id="2122601567107267586">Sovelluksen avaaminen epäonnistui</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Poistu koko näytön tilasta Takaisin-painikkeella.</translation>
 <translation id="2842985007712546952">Ylätason kansio</translation>
 <translation id="2858138569776157458">Suosituimmat</translation>
+<translation id="2860954141821109167">Varmista, että puhelinsovellus on käytössä tällä laitteella</translation>
 <translation id="2870560284913253234">Sivusto</translation>
 <translation id="2874939134665556319">Edellinen kappale</translation>
 <translation id="2876369937070532032">Lähettää joidenkin avattujen sivujen URL-osoitteet Googlelle, kun turvallisuutesi on vaarassa</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Luo tunnuslause</translation>
 <translation id="2996809686854298943">URL-osoite vaaditaan</translation>
 <translation id="300526633675317032">Tämä tyhjentää yhteensä <ph name="SIZE_IN_KB" /> tallennettuja sivustotietoja.</translation>
+<translation id="3016635187733453316">Varmista, että laite on yhteydessä internetiin</translation>
 <translation id="3029613699374795922">Ladattu: <ph name="KBS" /> kt</translation>
 <translation id="3029704984691124060">Tunnuslauseet eivät vastaa toisiaan.</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Tutustu ohjeisiin<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Valitse kuvat</translation>
 <translation id="7233236755231902816">Päivitä Chrome uusimpaan versioon, niin näet verkon sisällön omalla kielelläsi</translation>
 <translation id="7243308994586599757">Asetukset löytyvät näytön alalaidasta.</translation>
+<translation id="7248069434667874558">Varmista, että <ph name="TARGET_DEVICE_NAME" /> käyttää synkronointia Chromessa</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> valittu</translation>
 <translation id="7274013316676448362">Estetty sivusto</translation>
 <translation id="7290209999329137901">Uudelleennimeäminen ei saatavilla</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Ei käytössä tällä laitteella</translation>
 <translation id="8013372441983637696">Poistetaanko Chrome-data tältä laitteelta?</translation>
 <translation id="8015452622527143194">Palauta sivun kaiken sisällön oletuskoko</translation>
+<translation id="8015780634880457457">Google voi tarkistaa, olivatko salasanasi osallisina tietosuojaloukkauksessa</translation>
 <translation id="802154636333426148">Lataus epäonnistui.</translation>
 <translation id="8026334261755873520">Poista selaustiedot</translation>
 <translation id="8035133914807600019">Uusi kansio…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Salasanojen vienti epäonnistui</translation>
 <translation id="8447861592752582886">Peruuta laitteen käyttöoikeus</translation>
 <translation id="8461694314515752532">Salaa synkronoidut tiedot oman synkronoinnin tunnuslauseesi avulla</translation>
+<translation id="8466613982764129868">Varmista, että <ph name="TARGET_DEVICE_NAME" /> on yhteydessä internetiin</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Käytettävissä offline-tilassa</translation>
 <translation id="8489271220582375723">Avaa Historia-sivu</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Kirjaudu ulos hallinnoidulta tililtä</translation>
 <translation id="9204836675896933765">1 tiedosto jäljellä</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Puheluiden soittaminen ei onnistu</translation>
 <translation id="9219103736887031265">Kuvat</translation>
 <translation id="926205370408745186">Poista Chrome-toimintasi Digitaalisesta hyvinvoinnista</translation>
 <translation id="932327136139879170">Etusivu</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
index 0389c2c..8ccfe52c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Tout ouvrir</translation>
 <translation id="1409426117486808224">Vue simplifiée pour les onglets ouverts</translation>
 <translation id="1409879593029778104">Le téléchargement du fichier "<ph name="FILE_NAME" />" a été bloqué, car le fichier existe déjà.</translation>
+<translation id="1413136574162415971">Google peut vérifier si vos mots de passe ont été piratés suite à une violation de données. Cette option sera activée si vous vous connectez avec votre compte Google et si vous activez la synchronisation.</translation>
 <translation id="1414981605391750300">Mise en relation avec Google. Cette opération peut prendre une minute…</translation>
 <translation id="1416550906796893042">Version de l'application</translation>
 <translation id="1430915738399379752">Imprimer</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Son</translation>
 <translation id="2096012225669085171">Synchroniser et personnaliser les données sur tous les appareils</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
+<translation id="2100314319871056947">Essayez de partager le texte en plusieurs fois</translation>
 <translation id="2107397443965016585">Demander avant d'autoriser les sites à lire les contenus protégés (recommandé)</translation>
 <translation id="2111511281910874386">Accéder à la page</translation>
 <translation id="2122601567107267586">Impossible d'ouvrir l'application</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Appuyez sur le bouton Retour pour quitter le mode plein écran.</translation>
 <translation id="2842985007712546952">Dossier parent</translation>
 <translation id="2858138569776157458">Sites populaires</translation>
+<translation id="2860954141821109167">Assurez-vous qu'une application Téléphone est activée sur cet appareil</translation>
 <translation id="2870560284913253234">Site</translation>
 <translation id="2874939134665556319">Piste précédente</translation>
 <translation id="2876369937070532032">Envoyer à Google les URL des pages que vous consultez présentant un risque pour votre sécurité</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Créer une phrase secrète</translation>
 <translation id="2996809686854298943">Veuillez saisir une URL.</translation>
 <translation id="300526633675317032">Cette action aura pour effet de libérer l'espace de stockage utilisé pour les données de site (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">Assurez-vous que cet appareil est bien connecté à Internet</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> Ko téléchargé(s)</translation>
 <translation id="3029704984691124060">Les phrases secrètes ne correspondent pas.</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obtenir de l'aide<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Sélectionner des images</translation>
 <translation id="7233236755231902816">Pour afficher le Web dans votre langue, téléchargez la dernière version de Chrome</translation>
 <translation id="7243308994586599757">Options disponibles au bas de l'écran</translation>
+<translation id="7248069434667874558">Assurez-vous que la synchronisation est activée sur votre <ph name="TARGET_DEVICE_NAME" /> dans Chrome</translation>
 <translation id="7250468141469952378">Nombre d'éléments sélectionnés : <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Site bloqué</translation>
 <translation id="7290209999329137901">Option de changement de nom indisponible</translation>
@@ -880,7 +885,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (Dernière mise à jour <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">de données économisées</translation>
 <translation id="7498271377022651285">Veuillez patienter…</translation>
-<translation id="7510943789645525906">Recevez une alerte si l'un de vos mots de passe est compromis suite à une violation de données</translation>
+<translation id="7510943789645525906">Recevoir une alerte si l'un de vos mots de passe est compromis suite à une violation de données</translation>
 <translation id="7514365320538308">Télécharger</translation>
 <translation id="751961395872307827">Impossible de se connecter au site</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Désactivée pour cet appareil</translation>
 <translation id="8013372441983637696">Supprimer également vos données Chrome sur cet appareil</translation>
 <translation id="8015452622527143194">Rétablir taille par défaut des éléments de la page</translation>
+<translation id="8015780634880457457">Google peut vérifier si vos mots de passe ont été piratés suite à une violation de données</translation>
 <translation id="802154636333426148">Échec du téléchargement</translation>
 <translation id="8026334261755873520">Effacer les données de navigation</translation>
 <translation id="8035133914807600019">Nouveau dossier…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Impossible d'exporter les mots de passe</translation>
 <translation id="8447861592752582886">Révoquer l'autorisation d'accès à l'appareil</translation>
 <translation id="8461694314515752532">Chiffrer les données synchronisées avec votre propre phrase secrète de synchronisation</translation>
+<translation id="8466613982764129868">Assurez-vous que <ph name="TARGET_DEVICE_NAME" /> est connecté à Internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponible hors connexion</translation>
 <translation id="8489271220582375723">Ouvrir la page "Historique"</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Se déconnecter d'un compte géré</translation>
 <translation id="9204836675896933765">1 fichier restant</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Impossible de passer des appels</translation>
 <translation id="9219103736887031265">Images</translation>
 <translation id="926205370408745186">Supprimer votre activité Chrome de Bien-être numérique</translation>
 <translation id="932327136139879170">Accueil</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
index 2fbf39f..18a3004 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -41,6 +41,7 @@
 <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation>
 <translation id="1260236875608242557">खोजें और एक्सप्लोर करें</translation>
 <translation id="1264974993859112054">खेल-कूद</translation>
+<translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> शेयर नहीं किया जा सका</translation>
 <translation id="1272079795634619415">रोकें</translation>
 <translation id="1283039547216852943">पूरा खोलने के लिए टैप करें</translation>
 <translation id="1285320974508926690">कभी भी इस साइट का अनुवाद न करें</translation>
@@ -70,6 +71,7 @@
 <translation id="1430915738399379752">प्रिंट करें</translation>
 <translation id="1445680696957526815">Chrome के घटक एक-दूसरे से असंगत हैं. संभवत: Chrome अपग्रेड हो रहा है, कृपया कुछ ही देर में फिर से प्रयास करें. अगर समस्या बनी रहती है, तो Chrome को अनइंस्टॉल करके और फिर से इंस्टॉल करके देखें.</translation>
 <translation id="1446450296470737166">MIDI डिवाइस के पूरे नियंत्रण की अनुमति दें</translation>
+<translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> शेयर नहीं किया जा सकता</translation>
 <translation id="145097072038377568">Android सेटिंग में बंद कर दिया गया है</translation>
 <translation id="1477626028522505441">सर्वर संबधी समस्‍याओं के कारण <ph name="FILE_NAME" /> डाउनलोड विफल रहा.</translation>
 <translation id="1501480321619201731">समूह मिटाएं</translation>
@@ -152,6 +154,7 @@
 <translation id="2049961518639794558">फ़ाइल का एक्सटेंशन बदलने से अनचाहा बर्ताव हो सकता है जिससे आपके डिवाइस को नुकसान पहुंच सकता है.</translation>
 <translation id="2056878612599315956">साइट रोकी गई</translation>
 <translation id="2063713494490388661">खोजने के लिए टैप करें</translation>
+<translation id="2067805253194386918">टेक्स्ट</translation>
 <translation id="2079545284768500474">वापस लाएं</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> में से <ph name="RESULT_NUMBER" /> परिणाम</translation>
 <translation id="2091887806945687916">आवाज़</translation>
@@ -322,6 +325,7 @@
 <translation id="3384347053049321195">इमेज शेयर करें</translation>
 <translation id="3386292677130313581">साइटों को अपनी जगह की जानकारी देने से पहले अनुमति लेना ज़रूरी बनाएं (सुझाया गया)</translation>
 <translation id="3387650086002190359">सिस्‍टम त्रुटियों के कारण <ph name="FILE_NAME" /> डाउनलोड विफल रहा.</translation>
+<translation id="3389286852084373014">टेक्स्ट बहुत बड़ा है</translation>
 <translation id="3398320232533725830">बुकमार्क प्रबंधक खोलें</translation>
 <translation id="3414952576877147120">आकार:</translation>
 <translation id="3443221991560634068">वर्तमान पेज फिर से लोड करें</translation>
@@ -346,6 +350,7 @@
 <translation id="3599863153486145794">साइन इन किए हुए सभी डिवाइसों से इतिहास साफ़ कर देता है. आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर अन्य प्रकार के ब्राउज़िंग इतिहास हो सकते हैं.</translation>
 <translation id="3600792891314830896">आवाज़ चलाने वाली साइटों की आवाज़ बंद करें</translation>
 <translation id="3616113530831147358">ऑडियो</translation>
+<translation id="3631987586758005671"><ph name="DEVICE_NAME" /> के साथ शेयर किया जा रहा है</translation>
 <translation id="3632295766818638029">पासवर्ड दिखाएं</translation>
 <translation id="363596933471559332">स्टोर किए गए क्रेडेंशियल का इस्तेमाल करके वेबसाइटों में अपने आप साइन इन करें. सुविधा के बंद होने पर, किसी वेबसाइट में साइन इन करने से पहले आपसे हर बार पुष्टि करने को कहा जाएगा.</translation>
 <translation id="3658159451045945436">रीसेट करने से आपकी देखी गई साइटों की सूची के साथ ही, डेटा बचाने का आपका इतिहास हमेशा के लिए मिट जाता है.</translation>
@@ -574,6 +579,7 @@
 <translation id="5324858694974489420">अभिभावकीय सेटिंग</translation>
 <translation id="5327248766486351172">नाम</translation>
 <translation id="5335288049665977812">साइटों को JavaScript चलाने की अनुमति दें (हम इस सेटिंग को चालू रखने का सुझाव देते हैं)</translation>
+<translation id="5342314432463739672">अनुमति से जुड़े अनुरोध</translation>
 <translation id="5357811892247919462">टैब मिला</translation>
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> टैब खुला है, एक टैब से दूसरे टैब पर जाने के लिए टैप करें}one{<ph name="OPEN_TABS_MANY" /> टैब खुले हैं, एक टैब से दूसरे टैब पर जाने के लिए टैप करें}other{<ph name="OPEN_TABS_MANY" /> टैब खुले हैं, एक टैब से दूसरे टैब पर जाने के लिए टैप करें}}</translation>
 <translation id="5391532827096253100">इस साइट से आपका कनेक्शन सुरक्षित नहीं है. साइट की जानकारी</translation>
@@ -743,6 +749,7 @@
 <translation id="6532866250404780454">आप Chrome में जिन साइटों पर जाते हैं, वे नहीं दिखाई देंगी. साइट के सभी टाइमर मिटा दिए जाएंगे.</translation>
 <translation id="6534565668554028783">Google को प्रतिक्रिया देने में बहुत ज़्यादा समय लगा</translation>
 <translation id="6538442820324228105"><ph name="GBS" /> जीबी डाउनलोड किया गया</translation>
+<translation id="6539092367496845964">कोई गड़बड़ी हुई. बाद में कोशिश करें.</translation>
 <translation id="654446541061731451">बीम के लिए टैब को चुनें</translation>
 <translation id="6545017243486555795">सभी डेटा साफ़ करें</translation>
 <translation id="6545864417968258051">ब्लूटूथ स्कैन करना</translation>
@@ -873,6 +880,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (<ph name="TIME_SINCE_UPDATE" /> अपडेट किया गया)</translation>
 <translation id="7494974237137038751">डेटा बचाया गया</translation>
 <translation id="7498271377022651285">कृपया प्रतीक्षा करें...</translation>
+<translation id="7510943789645525906">अगर आपने ऐसा पासवर्ड डाला है जो डेटा के उल्लंघन के तहत आता है, तो आपको चेतावनी मिलती है</translation>
 <translation id="7514365320538308">डाउनलोड करें</translation>
 <translation id="751961395872307827">साइट से कनेक्ट नहीं किया जा सका</translation>
 <translation id="7521387064766892559">JavaScript</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
index 5276da4..02af094 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Otvori sve</translation>
 <translation id="1409426117486808224">Pojednostavljeni prikaz za otvorene kartice</translation>
 <translation id="1409879593029778104">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspjelo jer datoteka već postoji.</translation>
+<translation id="1413136574162415971">Google može provjeriti jesu li vaše zaporke bile obuhvaćene povredom podataka. To će se uključiti kada se prijavite na svoj Google račun i uključite sinkronizaciju.</translation>
 <translation id="1414981605391750300">Kontaktiranje Googlea. To bi moglo potrajati…</translation>
 <translation id="1416550906796893042">Verzija aplikacije</translation>
 <translation id="1430915738399379752">Ispis</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2096012225669085171">Sinkronizacija i prilagodba na svim uređajima</translation>
 <translation id="2100273922101894616">Automatska prijava</translation>
+<translation id="2100314319871056947">Pokušajte podijeliti tekst na manje dijelove</translation>
 <translation id="2107397443965016585">Web-lokacije moraju tražiti dopuštenje za reprodukciju zaštićenog sadržaja (preporučeno)</translation>
 <translation id="2111511281910874386">Idi na stranicu</translation>
 <translation id="2122601567107267586">Otvaranje aplikacije nije uspjelo</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Dodirnite gumb Natrag da biste zatvorili prikaz na cijelom zaslonu.</translation>
 <translation id="2842985007712546952">Nadređena mapa</translation>
 <translation id="2858138569776157458">Najpopularnije web-lokacije</translation>
+<translation id="2860954141821109167">Provjerite je li na uređaju omogućena aplikacija telefona</translation>
 <translation id="2870560284913253234">Web lokacija</translation>
 <translation id="2874939134665556319">Prethodna pjesma</translation>
 <translation id="2876369937070532032">Googleu šalje URL-ove nekih stranica koje posjećujete kada je ugrožena vaša sigurnost</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Stvaranje zaporke</translation>
 <translation id="2996809686854298943">Potreban URL</translation>
 <translation id="300526633675317032">Time će se izbrisati cijela pohrana web-lokacije veličine <ph name="SIZE_IN_KB" />.</translation>
+<translation id="3016635187733453316">Provjerite je li uređaj povezan s internetom</translation>
 <translation id="3029613699374795922">Preuzeto <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Zaporke se ne podudaraju</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Potražite pomoć<ph name="END_LINK" /></translation>
@@ -579,7 +583,7 @@
 <translation id="5324858694974489420">Postavke nadređenog računa</translation>
 <translation id="5327248766486351172">Naziv</translation>
 <translation id="5335288049665977812">Web-lokacije mogu pokretati JavaScript (preporučeno)</translation>
-<translation id="5342314432463739672">Zahtjevi za dopuštenje</translation>
+<translation id="5342314432463739672">Zahtjevi za dopuštenja</translation>
 <translation id="5357811892247919462">Primljena je kartica</translation>
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> otvorena kartica, dodirnite da biste prešli na drugu karticu}one{<ph name="OPEN_TABS_MANY" /> otvorena kartica, dodirnite da biste prešli na drugu karticu}few{<ph name="OPEN_TABS_MANY" /> otvorene kartice, dodirnite da biste prešli na drugu karticu}other{<ph name="OPEN_TABS_MANY" /> otvorenih kartica, dodirnite da biste prešli na drugu karticu}}</translation>
 <translation id="5391532827096253100">Veza s web-lokacijom nije sigurna. Informacije o web-lokaciji</translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Odaberite slike</translation>
 <translation id="7233236755231902816">Za prikaz weba na vašem jeziku preuzmite najnoviju verziju Chromea</translation>
 <translation id="7243308994586599757">Opcije dostupne pri dnu zaslona</translation>
+<translation id="7248069434667874558">Provjerite je li na uređaju <ph name="TARGET_DEVICE_NAME" /> uključena sinkronizacija u Chromeu</translation>
 <translation id="7250468141469952378">Odabrano: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Blokirana web-lokacija</translation>
 <translation id="7290209999329137901">Promjena naziva nije dostupna</translation>
@@ -880,7 +885,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (ažurirano <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">spremljeni podaci</translation>
 <translation id="7498271377022651285">Pričekajte…</translation>
-<translation id="7510943789645525906">Upozorava ako je zaporka koju upotrebljavate bila obuhvaćena povredom podataka</translation>
+<translation id="7510943789645525906">Upozorava ako je zaporka koju upotrebljavate ugrožena zbog povrede podataka</translation>
 <translation id="7514365320538308">Preuzmi</translation>
 <translation id="751961395872307827">Povezivanje s web-lokacijom nije uspjelo</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Isključeno za ovaj uređaj</translation>
 <translation id="8013372441983637696">Izbriši podatke iz Chromea i s ovog uređaja</translation>
 <translation id="8015452622527143194">Vraćanje svega na stranici na zadanu veličinu</translation>
+<translation id="8015780634880457457">Google može provjeriti jesu li vaše zaporke bile obuhvaćene povredom podataka</translation>
 <translation id="802154636333426148">Preuzimanje nije uspjelo</translation>
 <translation id="8026334261755873520">Brisanje podataka o pregledavanju</translation>
 <translation id="8035133914807600019">Nova mapa…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Izvoz zaporki nije moguć</translation>
 <translation id="8447861592752582886">Opozovi odobrenje uređaja</translation>
 <translation id="8461694314515752532">Kriptiraj sinkronizirane podatke vlastitom šifrom za sinkronizaciju</translation>
+<translation id="8466613982764129868">Provjerite je li <ph name="TARGET_DEVICE_NAME" /> povezan s internetom</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Dostupno izvanmrežno</translation>
 <translation id="8489271220582375723">Prikaz stranice povijesti</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Odjava s upravljanog računa</translation>
 <translation id="9204836675896933765">Preostala je 1 datoteka</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Upućivanje poziva nije moguće</translation>
 <translation id="9219103736887031265">Slike</translation>
 <translation id="926205370408745186">Uklanjanje vaše aktivnosti u Chromeu iz Digitalne ravnoteže</translation>
 <translation id="932327136139879170">Početna stranica</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
index 81549c5..df67143 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Összes megnyitása</translation>
 <translation id="1409426117486808224">A megnyitott lapok egyszerűsített nézete</translation>
 <translation id="1409879593029778104">A következő fájl letöltését a böngésző megakadályozta, mert a fájl már létezik: <ph name="FILE_NAME" />.</translation>
+<translation id="1413136574162415971">A Google ellenőrizheti, hogy érintik-e adatvédelmi incidensek az Ön jelszavait. Ez a funkció akkor kapcsol be, amikor bejelentkezik Google-fiókjával, és bekapcsolja a szinkronizálást.</translation>
 <translation id="1414981605391750300">Kapcsolatfelvétel a Google-lal… ez eltarthat pár percig…</translation>
 <translation id="1416550906796893042">Alkalmazás verziószáma</translation>
 <translation id="1430915738399379752">Nyomtatás</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Hang</translation>
 <translation id="2096012225669085171">Szinkronizálás és személyre szabás az eszközök között</translation>
 <translation id="2100273922101894616">Automatikus bejelentkezés</translation>
+<translation id="2100314319871056947">Próbálja meg kisebb részletekben megosztani a szöveget</translation>
 <translation id="2107397443965016585">Kérdezzen rá, mielőtt engedélyezné a webhelyek számára védett tartalmak lejátszását (ajánlott)</translation>
 <translation id="2111511281910874386">Ugrás az oldalhoz</translation>
 <translation id="2122601567107267586">Nem sikerült megnyitni az alkalmazást</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">A teljes képernyős megjelenítésből való kilépéshez koppintson a vissza gombra.</translation>
 <translation id="2842985007712546952">Szülőmappa</translation>
 <translation id="2858138569776157458">Népszerűek</translation>
+<translation id="2860954141821109167">Győződjön meg arról, hogy van engedélyezett telefonalkalmazás ezen az eszközön</translation>
 <translation id="2870560284913253234">Webhely</translation>
 <translation id="2874939134665556319">Előző szám</translation>
 <translation id="2876369937070532032">Elküldi egyes felkeresett oldalak URL-jét a Google-nak, ha veszélyben van az Ön biztonsága</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Összetett jelszó létrehozása</translation>
 <translation id="2996809686854298943">URL szükséges</translation>
 <translation id="300526633675317032">Ezzel törli a webhely teljes tárhelyét: <ph name="SIZE_IN_KB" />.</translation>
+<translation id="3016635187733453316">Ellenőrizze, hogy az eszköz csatlakozik-e az internethez</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> kB letöltve</translation>
 <translation id="3029704984691124060">Az összetett jelszavak nem egyeznek</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Kérjen segítséget<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Képek kiválasztása</translation>
 <translation id="7233236755231902816">Ha saját nyelvén szeretné böngészni az internetet, szerezze be a Chrome legújabb verzióját</translation>
 <translation id="7243308994586599757">A beállítások a képernyő alsó részén találhatók</translation>
+<translation id="7248069434667874558">Győződjön meg arról, hogy a(z) <ph name="TARGET_DEVICE_NAME" /> szinkronizálása be van kapcsolva a Chrome-ban</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elem kiválasztva</translation>
 <translation id="7274013316676448362">Letiltott oldal</translation>
 <translation id="7290209999329137901">Nem lehetséges az átnevezés</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Kikapcsolva ezen az eszközön</translation>
 <translation id="8013372441983637696">Az Ön Chrome-adatai is törlődjenek erről az eszközről</translation>
 <translation id="8015452622527143194">Minden visszaállítása alapértelmezett méretűre</translation>
+<translation id="8015780634880457457">A Google ellenőrizheti, hogy érintik-e adatvédelmi incidensek az Ön jelszavait</translation>
 <translation id="802154636333426148">Nem sikerült a letöltés</translation>
 <translation id="8026334261755873520">Böngészési adatok törlése</translation>
 <translation id="8035133914807600019">Új mappa…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Nem sikerült a jelszavak exportálása</translation>
 <translation id="8447861592752582886">Eszközengedély visszavonása</translation>
 <translation id="8461694314515752532">A szinkronizált adatok titkosítása saját összetett szinkronizálási jelszóval</translation>
+<translation id="8466613982764129868">Győződjön meg arról, hogy a(z) <ph name="TARGET_DEVICE_NAME" /> eszköz csatlakozik az internethez</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Offline elérhető</translation>
 <translation id="8489271220582375723">Az Előzmények oldal megnyitása</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Kijelentkezés felügyelt fiókból</translation>
 <translation id="9204836675896933765">1 fájl maradt</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Nem lehet hívást indítani</translation>
 <translation id="9219103736887031265">Képek</translation>
 <translation id="926205370408745186">Chrome-beli tevékenység eltávolítása a digitális jóllét funkcióból</translation>
 <translation id="932327136139879170">Főoldal</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
index 4b0514c4..17cf580 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Apri tutte</translation>
 <translation id="1409426117486808224">Visualizzazione semplificata delle schede aperte</translation>
 <translation id="1409879593029778104">Download di <ph name="FILE_NAME" /> impedito perché il file esiste già.</translation>
+<translation id="1413136574162415971">Google può controllare se le tue password sono state oggetto di una violazione dei dati. Questa impostazione viene attivata se accedi con il tuo Account Google e attivi la sincronizzazione.</translation>
 <translation id="1414981605391750300">Connessione a Google in corso. L'operazione potrebbe richiedere un minuto…</translation>
 <translation id="1416550906796893042">Versione applicazione</translation>
 <translation id="1430915738399379752">Stampa</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Audio</translation>
 <translation id="2096012225669085171">Sincronizza e personalizza su tutti i dispositivi</translation>
 <translation id="2100273922101894616">Accesso automatico</translation>
+<translation id="2100314319871056947">Prova a condividere il testo in parti più piccole</translation>
 <translation id="2107397443965016585">Chiedi prima di consentire ai siti di riprodurre contenuti protetti (opzione consigliata)</translation>
 <translation id="2111511281910874386">Vai alla pagina</translation>
 <translation id="2122601567107267586">Impossibile aprire l'app</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Tocca il pulsante Indietro per uscire dalla modalità a schermo intero.</translation>
 <translation id="2842985007712546952">Cartella principale</translation>
 <translation id="2858138569776157458">Siti princ.</translation>
+<translation id="2860954141821109167">Assicurati che su questo dispositivo ci sia un'app per telefono attiva</translation>
 <translation id="2870560284913253234">Sito</translation>
 <translation id="2874939134665556319">Traccia precedente</translation>
 <translation id="2876369937070532032">Invia a Google gli URL di alcune pagine che visiti quando la tua sicurezza è a rischio</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Crea passphrase</translation>
 <translation id="2996809686854298943">URL obbligatorio</translation>
 <translation id="300526633675317032">Verranno cancellati tutti i <ph name="SIZE_IN_KB" /> di memoria utilizzata dai siti web.</translation>
+<translation id="3016635187733453316">Assicurati che questo dispositivo sia connesso a Internet</translation>
 <translation id="3029613699374795922">Sono stati scricati <ph name="KBS" /> kB</translation>
 <translation id="3029704984691124060">Le passphrase non corrispondono</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Richiedi assistenza<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Seleziona immagini</translation>
 <translation id="7233236755231902816">Per navigare sul Web nella tua lingua, scarica l'ultima versione di Chrome</translation>
 <translation id="7243308994586599757">Opzioni disponibili nella parte inferiore dello schermo</translation>
+<translation id="7248069434667874558">Assicurati che in Chrome sia attiva la sincronizzazione di <ph name="TARGET_DEVICE_NAME" /></translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elementi selezionati</translation>
 <translation id="7274013316676448362">Sito bloccato</translation>
 <translation id="7290209999329137901">Impossibile rinominare</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Disattivata per questo dispositivo</translation>
 <translation id="8013372441983637696">Cancella i tuoi dati di Chrome anche da questo dispositivo</translation>
 <translation id="8015452622527143194">Ripristina le dimensioni predefinite della pagina</translation>
+<translation id="8015780634880457457">Google può controllare se le tue password sono state oggetto di una violazione dei dati</translation>
 <translation id="802154636333426148">Download non riuscito</translation>
 <translation id="8026334261755873520">Cancella dati di navigazione</translation>
 <translation id="8035133914807600019">Nuova cartella…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Impossibile esportare le password</translation>
 <translation id="8447861592752582886">Revoca autorizzazione dispositivo</translation>
 <translation id="8461694314515752532">Cripta i dati sincronizzati con la tua passphrase di sincronizzazione</translation>
+<translation id="8466613982764129868">Assicurati che il dispositivo <ph name="TARGET_DEVICE_NAME" /> sia connesso a Internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponibile offline</translation>
 <translation id="8489271220582375723">Apri la pagina Cronologia</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Esci dall'account gestito</translation>
 <translation id="9204836675896933765">1 file rimanente</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Impossibile effettuare chiamate</translation>
 <translation id="9219103736887031265">Immagini</translation>
 <translation id="926205370408745186">Rimuovi la tua attività di Chrome da Benessere digitale</translation>
 <translation id="932327136139879170">Home page</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
index 3355756..34cab26 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">פתח הכל</translation>
 <translation id="1409426117486808224">תצוגה פשוטה של כרטיסיות פתוחות</translation>
 <translation id="1409879593029778104">הורדת <ph name="FILE_NAME" /> נמנעה מכיוון שהקובץ כבר קיים.</translation>
+<translation id="1413136574162415971">‏Google יכולה לבדוק אם הסיסמאות שלך היו חלק מפרצה באבטחת המידע. האפשרות הזאת תופעל אחרי כניסה באמצעות חשבון Google והפעלת הסנכרון.</translation>
 <translation id="1414981605391750300">‏המערכת יוצרת קשר עם Google. עוד מעט מסיימים…</translation>
 <translation id="1416550906796893042">גרסת אפליקציה</translation>
 <translation id="1430915738399379752">הדפסה</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">צליל</translation>
 <translation id="2096012225669085171">סנכרון והתאמה אישית במכשירים שונים</translation>
 <translation id="2100273922101894616">כניסה אוטומטית</translation>
+<translation id="2100314319871056947">כדאי לשתף את הטקסט במקטעים קטנים יותר</translation>
 <translation id="2107397443965016585">יש לבקש ממני אישור לפני מתן הרשאה לאתרים להציג תוכן מוגן (מומלץ)</translation>
 <translation id="2111511281910874386">מעבר לדף</translation>
 <translation id="2122601567107267586">לא ניתן היה לפתוח את היישום</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">כדי לצאת ממסך מלא, גע בלחצן 'הקודם'.</translation>
 <translation id="2842985007712546952">תיקיית אב</translation>
 <translation id="2858138569776157458">אתרים נבחרים</translation>
+<translation id="2860954141821109167">יש לוודא שמופעלת במכשיר הזה אפליקציה לטלפון</translation>
 <translation id="2870560284913253234">אתר</translation>
 <translation id="2874939134665556319">הרצועה הקודמת</translation>
 <translation id="2876369937070532032">‏שולחת ל-Google כתובות URL של חלק מהדפים שאליהם נכנסת, אם מתגלה סיכון אבטחה</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">יצירת ביטוי סיסמה</translation>
 <translation id="2996809686854298943">דרושה כתובת אתר</translation>
 <translation id="300526633675317032">פעולה זו תמחק את כל נתוני האתר המאוחסנים (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">יש לוודא שהמכשיר הזה מחובר לאינטרנט</translation>
 <translation id="3029613699374795922">‏בוצעה הורדה של KB <ph name="KBS" /></translation>
 <translation id="3029704984691124060">ביטויי הסיסמה אינם תואמים</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />קבל עזרה<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">בחר תמונות</translation>
 <translation id="7233236755231902816">‏כדי לראות באינטרנט תוכן בשפה שלך, יש להוריד את הגרסה האחרונה של Chrome</translation>
 <translation id="7243308994586599757">אפשרויות הזמינות באזור החלק התחתון של המסך</translation>
+<translation id="7248069434667874558">‏יש לוודא שהסנכרון ב-Chrome הופעל ב-<ph name="TARGET_DEVICE_NAME" /></translation>
 <translation id="7250468141469952378">נבחרו <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">אתר חסום</translation>
 <translation id="7290209999329137901">לא ניתן היה לשנת את השם מפני שהפריט לא זמין</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">כבוי בשביל המכשיר הזה</translation>
 <translation id="8013372441983637696">‏יש לנקות גם את נתוני Chrome מהמכשיר הזה</translation>
 <translation id="8015452622527143194">החזר את כל מה שמופיע בדף לגודל ברירת המחדל</translation>
+<translation id="8015780634880457457">‏Google יכולה לבדוק אם הסיסמאות שלך היו חלק מפרצה באבטחת המידע</translation>
 <translation id="802154636333426148">ההורדה נכשלה</translation>
 <translation id="8026334261755873520">ניקוי נתוני גלישה</translation>
 <translation id="8035133914807600019">תיקייה חדשה…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">אי אפשר לייצא סיסמאות</translation>
 <translation id="8447861592752582886">שלול הרשאות מכשיר</translation>
 <translation id="8461694314515752532">הצפנת נתונים מסונכרנים בעזרת ביטוי סיסמה אישי לסנכרון</translation>
+<translation id="8466613982764129868">יש לוודא ש-<ph name="TARGET_DEVICE_NAME" /> מחובר לאינטרנט</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">זמין במצב לא מקוון</translation>
 <translation id="8489271220582375723">פתח את דף ההיסטוריה</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">צא מהחשבון המנוהל</translation>
 <translation id="9204836675896933765">נותר קובץ אחד</translation>
 <translation id="9206873250291191720">א</translation>
+<translation id="9209888181064652401">לא ניתן לבצע שיחות</translation>
 <translation id="9219103736887031265">תמונות</translation>
 <translation id="926205370408745186">‏הסרת הפעילות שלך ב-Chrome מ'שימוש חכם בדיגיטל'.</translation>
 <translation id="932327136139879170">בית</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
index 3b674b7..a03a9fa 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">すべて開く</translation>
 <translation id="1409426117486808224">開いているタブの簡易表示</translation>
 <translation id="1409879593029778104"><ph name="FILE_NAME" /> は既に存在しているためダウンロードできませんでした。</translation>
+<translation id="1413136574162415971">Google ではお使いのパスワードがデータ侵害の対象になっていたかを確認できます。この機能は、Google アカウントにログインして同期をオンにすると有効になります。</translation>
 <translation id="1414981605391750300">Google に問い合わせています。これには 1 分ほどかかる場合があります…</translation>
 <translation id="1416550906796893042">アプリケーションのバージョン</translation>
 <translation id="1430915738399379752">印刷</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">音声</translation>
 <translation id="2096012225669085171">デバイス間の同期とカスタマイズ</translation>
 <translation id="2100273922101894616">自動ログイン</translation>
+<translation id="2100314319871056947">共有するテキスト ブロックを小さくしてください</translation>
 <translation id="2107397443965016585">保護されたコンテンツの再生をサイトに許可する前に確認する(推奨)</translation>
 <translation id="2111511281910874386">ページを開く</translation>
 <translation id="2122601567107267586">アプリを開けませんでした</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">全画面表示を終了するには戻るボタンをタップします。</translation>
 <translation id="2842985007712546952">親フォルダ</translation>
 <translation id="2858138569776157458">上位のサイト</translation>
+<translation id="2860954141821109167">このデバイスで通話アプリが有効になっていることを確認してください</translation>
 <translation id="2870560284913253234">サイト</translation>
 <translation id="2874939134665556319">前のトラック</translation>
 <translation id="2876369937070532032">セキュリティ上のリスクがある場合に、アクセスした一部のページの URL が Google に送信されます</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">パスフレーズの作成</translation>
 <translation id="2996809686854298943">URLが必要です</translation>
 <translation id="300526633675317032">ウェブサイトのストレージ <ph name="SIZE_IN_KB" /> のデータをすべて削除します。</translation>
+<translation id="3016635187733453316">このデバイスがインターネットに接続していることを確認してください</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> KB をダウンロード済み</translation>
 <translation id="3029704984691124060">パスフレーズが一致しません</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />ヘルプ<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">画像を選択</translation>
 <translation id="7233236755231902816">お使いの言語でウェブを表示するには、Chrome の最新バージョンを入手してください</translation>
 <translation id="7243308994586599757">画面の下の方にオプションがあります</translation>
+<translation id="7248069434667874558">Chrome で <ph name="TARGET_DEVICE_NAME" /> の同期がオンになっていることを確認してください</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> 件選択されています</translation>
 <translation id="7274013316676448362">ブロック中のサイト</translation>
 <translation id="7290209999329137901">名前の変更はできません</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">このデバイスに対して無効</translation>
 <translation id="8013372441983637696">Chrome データもこのデバイスから削除する</translation>
 <translation id="8015452622527143194">ページ上のすべての要素をデフォルトのサイズに戻す</translation>
+<translation id="8015780634880457457">Google ではお使いのパスワードがデータ侵害の対象になっていたかを確認できます</translation>
 <translation id="802154636333426148">ダウンロード エラー</translation>
 <translation id="8026334261755873520">閲覧履歴データの削除</translation>
 <translation id="8035133914807600019">新しいフォルダ...</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">パスワードをエクスポートできません</translation>
 <translation id="8447861592752582886">デバイスの許可を取り消します</translation>
 <translation id="8461694314515752532">同期データを同期パスフレーズで暗号化する</translation>
+<translation id="8466613982764129868"><ph name="TARGET_DEVICE_NAME" />がインターネットに接続していることを確認してください</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">オフラインでの利用</translation>
 <translation id="8489271220582375723">履歴ページを開く</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">管理対象アカウントからログアウトする</translation>
 <translation id="9204836675896933765">残り 1 ファイル</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">通話ができません</translation>
 <translation id="9219103736887031265">画像</translation>
 <translation id="926205370408745186">Chrome のアクティビティを Digital Wellbeing から削除</translation>
 <translation id="932327136139879170">ホーム</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
index 812fa6c4..eef29b6 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
@@ -41,6 +41,7 @@
 <translation id="1258753120186372309">Google ಡೂಡಲ್‌: <ph name="DOODLE_DESCRIPTION" /></translation>
 <translation id="1260236875608242557">ಹುಡುಕಿ ಮತ್ತು ಎಕ್ಸ್‌ಪ್ಲೋರ್‌‌ ಮಾಡಿ</translation>
 <translation id="1264974993859112054">ಕ್ರೀಡೆ</translation>
+<translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="1272079795634619415">ನಿಲ್ಲಿಸಿ</translation>
 <translation id="1283039547216852943">ವಿಸ್ತರಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="1285320974508926690">ಈ ಸೈಟ್ ಅನ್ನು ಎಂದಿಗೂ ಭಾಷಾಂತರಿಸದಿರಿ</translation>
@@ -65,11 +66,13 @@
 <translation id="1407135791313364759">ಎಲ್ಲವನ್ನೂ ತೆರೆಯಿರಿ</translation>
 <translation id="1409426117486808224">ತೆರೆದ ಟ್ಯಾಬ್‌ಗಳಿಗಾಗಿ ಸರಳೀಕೃತ ವೀಕ್ಷಣೆ</translation>
 <translation id="1409879593029778104">ಫೈಲ್ ಈಗಾಗಲೇ ಇರುವುದರಿಂದ <ph name="FILE_NAME" /> ಡೌನ್‌ಲೋಡ್ ತಡೆಯಲಾಗಿದೆ.</translation>
+<translation id="1413136574162415971">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಭಾಗವಾಗಿತ್ತೇ ಎಂದು Google ಪರಿಶೀಲಿಸಬಹುದು. ನಿಮ್ಮ Google ಖಾತೆಯೊಂದಿಗೆ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ ಮತ್ತು ಸಿಂಕ್ ಆನ್ ಮಾಡಿದಾಗ ಇದನ್ನು ಆನ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation>
 <translation id="1414981605391750300">Google ಅನ್ನು ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ. ಇದು ಒಂದು ನಿಮಿಷದಷ್ಟು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು...</translation>
 <translation id="1416550906796893042">ಅಪ್ಲಿಕೇಶನ್ ಆವೃತ್ತಿ</translation>
 <translation id="1430915738399379752">ಮುದ್ರಿಸು</translation>
 <translation id="1445680696957526815">Chrome ನ ಅಂಶಗಳು ಒಂದಕ್ಕೊಂದು ಹೊಂದಾಣಿಕೆ ಹೊಂದಿಲ್ಲ. Chrome ಅಪ್‌ಗ್ರೇಡ್‌ ಮಾಡುತ್ತಿರಬಹುದು, ದಯವಿಟ್ಟು ಕೆಲವು ನಿಮಿಷಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. ಸಮಸ್ಯೆ ಮುಂದುವರಿದರೆ, Chrome ಅಸ್ಥಾಪಿಸಲು ಮತ್ತು ಮರುಸ್ಥಾಪಿಸಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1446450296470737166">MIDI ಸಾಧನಗಳ ಪೂರ್ಣ ನಿಯಂತ್ರಣ ಅನುಮತಿಸಿ</translation>
+<translation id="1450753235335490080"><ph name="CONTENT_TYPE" />ವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="145097072038377568">Android ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಆಫ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="1477626028522505441">ಸರ್ವರ್ ಸಮಸ್ಯೆಗಳ ಕಾರಣದಿಂದಾಗಿ <ph name="FILE_NAME" /> ಡೌನ್‌ಲೋಡ್ ವಿಫಲವಾಗಿದೆ.</translation>
 <translation id="1501480321619201731">ಗುಂಪನ್ನು ಅಳಿಸಿ</translation>
@@ -153,11 +156,13 @@
 <translation id="2049961518639794558">ಫೈಲ್‌ನ ವಿಸ್ತರಣೆಯನ್ನು ಬದಲಿಸಿದರೆ, ಅದು ಅನಿರೀಕ್ಷಿತ ವರ್ತನೆಗೆ ಕಾರಣವಾಗಬಹುದು ಅಥವಾ ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಹಾನಿ ಮಾಡಬಹುದು.</translation>
 <translation id="2056878612599315956">ಸೈಟ್ ಅನ್ನು ಅಮಾನತುಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="2063713494490388661">ಹುಡುಕಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ</translation>
+<translation id="2067805253194386918">ಪಠ್ಯ</translation>
 <translation id="2079545284768500474">ರದ್ದುಮಾಡಿ</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> ರಲ್ಲಿ <ph name="RESULT_NUMBER" /> ಫಲಿತಾಂಶಗಳು</translation>
 <translation id="2091887806945687916">ಶಬ್ಧ</translation>
 <translation id="2096012225669085171">ಸಾಧನಗಳಾದ್ಯಂತ ಸಿಂಕ್ ಮಾಡಿ ಮತ್ತು ವೈಯಕ್ತೀಕರಿಸಿ</translation>
 <translation id="2100273922101894616">ಸ್ವಯಂ ಸೈನ್-ಇನ್</translation>
+<translation id="2100314319871056947">ಪಠ್ಯವನ್ನು ಸಣ್ಣ ಭಾಗಗಳಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="2107397443965016585">ಸಂರಕ್ಷಿತ ವಿಷಯವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸುವ ಮೊದಲು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="2111511281910874386">ಪುಟಕ್ಕೆ ಹೋಗಿ</translation>
 <translation id="2122601567107267586">ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
@@ -251,6 +256,7 @@
 <translation id="2836148919159985482">ಪೂರ್ಣಪರದೆಯನ್ನು ನಿರ್ಗಮಿಸಲು ಹಿಂದೆ ಬಟನ್ ಸ್ಪರ್ಶಿಸಿ.</translation>
 <translation id="2842985007712546952">ಮೂಲ ಫೋಲ್ಡರ್‌</translation>
 <translation id="2858138569776157458">ಟಾಪ್ ಸೈಟ್</translation>
+<translation id="2860954141821109167">ಈ ಸಾಧನದಲ್ಲಿ ಫೋನ್ ಆ್ಯಪ್‌ ಒಂದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="2870560284913253234">ಸೈಟ್</translation>
 <translation id="2874939134665556319">ಹಿಂದಿನ ಟ್ರ್ಯಾಕ್</translation>
 <translation id="2876369937070532032">ನಿಮ್ಮ ಭದ್ರತೆಯು ಅಪಾಯದಲ್ಲಿದ್ದಾಗ, ನೀವು ಭೇಟಿ ನೀಡುವ ಕೆಲವು ಪುಟಗಳ URL ಗಳನ್ನು Google ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation>
@@ -275,6 +281,7 @@
 <translation id="2996291259634659425">ಪಾಸ್‌ಫ್ರೇಸ್ ರಚಿಸಿ</translation>
 <translation id="2996809686854298943">URL ಅಗತ್ಯವಿದೆ</translation>
 <translation id="300526633675317032">ಇದು ವೆಬ್‌ಸೈಟ್ ಸಂಗ್ರಹಣೆಯ ಎಲ್ಲಾ <ph name="SIZE_IN_KB" /> ಅನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ.</translation>
+<translation id="3016635187733453316">ಈ ಸಾಧನವು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> KB ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="3029704984691124060">ಪಾಸ್‌ಫ್ರೇಸ್‌ಗಳು ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />ಸಹಾಯ ಪಡೆಯಿರಿ<ph name="END_LINK" /></translation>
@@ -323,6 +330,7 @@
 <translation id="3384347053049321195">ಚಿತ್ರ ಹಂಚಿಕೊಳ್ಳಿ</translation>
 <translation id="3386292677130313581">ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ತಿಳಿಯಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸುವ ಮೊದಲು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="3387650086002190359">ಫೈಲ್ ಸಿಸ್ಟಂ ದೋಷಗಳ ಕಾರಣದಿಂದಾಗಿ <ph name="FILE_NAME" /> ಡೌನ್‌ಲೋಡ್ ವಿಫಲವಾಗಿದೆ.</translation>
+<translation id="3389286852084373014">ಪಠ್ಯ ತುಂಬಾ ದೊಡ್ಡದಾಗಿದೆ</translation>
 <translation id="3398320232533725830">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳ ಮ್ಯಾನೇಜರ್ ತೆರೆಯಿರಿ</translation>
 <translation id="3414952576877147120">ಗಾತ್ರ:</translation>
 <translation id="3443221991560634068">ಪ್ರಸ್ತುತ ಪುಟ ಮರುಲೋಡ್ ಮಾಡಿ</translation>
@@ -347,6 +355,7 @@
 <translation id="3599863153486145794">ಸೈನ್-ಇನ್ ಮಾಡಿರುವ ಎಲ್ಲ ಸಾಧನಗಳಿಂದ ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ. ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಇತರ ವಿಧಗಳ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಹೊಂದಿರಬಹುದು.</translation>
 <translation id="3600792891314830896">ಕೆಲವು ಸೈಟ್‌ಗಳಲ್ಲಿ ಧ್ವನಿ ಪ್ಲೇ ಆಗುವುದನ್ನು ಮ್ಯೂಟ್ ಮಾಡಿ</translation>
 <translation id="3616113530831147358">ಆಡಿಯೋ</translation>
+<translation id="3631987586758005671"><ph name="DEVICE_NAME" /> ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ</translation>
 <translation id="3632295766818638029">ಪಾಸ್‌ವರ್ಡ್ ಅನ್‌ಮಾಸ್ಕ್ ಮಾಡಿ</translation>
 <translation id="363596933471559332">ಸಂಗ್ರಹಿಸಲಾದ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡಿ. ವೈಶಿಷ್ಟ್ಯವು ಆಫ್ ಆಗಿರುವಾಗ, ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವ ಮೊದಲು ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮಗೆ ಪರಿಶೀಲನೆ ಮಾಡಲು ಕೇಳಲಾಗುವುದು.</translation>
 <translation id="3658159451045945436">ಮರುಹೊಂದಿಸುವುದರಿಂದ, ಭೇಟಿ ನೀಡಿದ ಸೈಟ್‌ಗಳ ಪಟ್ಟಿ ಸೇರಿದಂತೆ ನಿಮ್ಮ ಡೇಟಾ ಉಳಿತಾಯದ ಇತಿಹಾಸವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ.</translation>
@@ -574,6 +583,7 @@
 <translation id="5324858694974489420">ಪೋಷಕ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="5327248766486351172">ಹೆಸರು</translation>
 <translation id="5335288049665977812">JavaScript ರನ್ ಮಾಡಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
+<translation id="5342314432463739672">ಅನುಮತಿ ವಿನಂತಿಗಳು</translation>
 <translation id="5357811892247919462">ಟ್ಯಾಬ್ ಸ್ವೀಕರಿಸಲಾಗಿದೆ</translation>
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> ಟ್ಯಾಬ್ ತೆರೆದಿದೆ, ಟ್ಯಾಬ್‌ಗಳನ್ನು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ}one{<ph name="OPEN_TABS_MANY" /> ಟ್ಯಾಬ್‌ಗಳು ತೆರೆದಿವೆ, ಟ್ಯಾಬ್‌ಗಳನ್ನು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ}other{<ph name="OPEN_TABS_MANY" /> ಟ್ಯಾಬ್‌ಗಳು ತೆರೆದಿವೆ, ಟ್ಯಾಬ್‌ಗಳನ್ನು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ}}</translation>
 <translation id="5391532827096253100">ಈ ಸೈಟ್‌ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕವು ಸುರಕ್ಷಿತವಾಗಿಲ್ಲ. ಸೈಟ್ ಮಾಹಿತಿ</translation>
@@ -743,6 +753,7 @@
 <translation id="6532866250404780454">Chrome ನಲ್ಲಿ ನೀವು ಭೇಟಿ ನೀಡುವ ಸೈಟ್‌ಗಳನ್ನು ತೋರಿಸುವುದಿಲ್ಲ. ಎಲ್ಲಾ ಸೈಟ್‌ ಟೈಮರ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗುವುದು.</translation>
 <translation id="6534565668554028783">ಪ್ರತಿಕ್ರಿಯಿಸಲು Google ತೀರಾ ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಂಡಿದೆ.</translation>
 <translation id="6538442820324228105"><ph name="GBS" /> GB ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation>
+<translation id="6539092367496845964">ಏನೋ ತಪ್ಪಾಗಿದೆ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="654446541061731451">ಬೀಮ್‌ ಗೆ ಟ್ಯಾಬ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="6545017243486555795">ಎಲ್ಲಾ ಡೇಟಾ ತೆರವುಗೊಳಿಸು</translation>
 <translation id="6545864417968258051">ಬ್ಲೂಟೂತ್ ಸ್ಕ್ಯಾನಿಂಗ್</translation>
@@ -835,6 +846,7 @@
 <translation id="723171743924126238">ಚಿತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="7233236755231902816">ನಿಮ್ಮ ಭಾಷೆಯಲ್ಲಿ ವೆಬ್ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಲು, ಇತ್ತೀಚಿನ Chrome ಆವೃತ್ತಿಯನ್ನು ಪಡೆಯಿರಿ</translation>
 <translation id="7243308994586599757">ಪರದೆಯ ಕೆಳಗೆ ಲಭ್ಯವಿರುವ ಆಯ್ಕೆಗಳು</translation>
+<translation id="7248069434667874558">Chrome ನಲ್ಲಿ <ph name="TARGET_DEVICE_NAME" /> ಸಾಧನದ ಸಿಂಕ್ ಆನ್ ಆಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ಅನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation>
 <translation id="7274013316676448362">ನಿರ್ಬಂಧಿಸಿರುವ ಸೈಟ್</translation>
 <translation id="7290209999329137901">ಮರುಹೆಸರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
@@ -874,6 +886,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (<ph name="TIME_SINCE_UPDATE" /> ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="7494974237137038751">ಉಳಿತಾಯವಾದ ಡೇಟಾ</translation>
 <translation id="7498271377022651285">ದಯವಿಟ್ಟು ಕಾಯಿರಿ...</translation>
+<translation id="7510943789645525906">ನೀವು ಬಳಸುವ ಪಾಸ್‌ವರ್ಡ್ ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಭಾಗವಾಗಿದ್ದರೆ ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ</translation>
 <translation id="7514365320538308">ಡೌನ್‌ಲೋಡ್</translation>
 <translation id="751961395872307827">ಸೈಟ್‌ಗೆ ಸಂಪರ್ಕಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -948,6 +961,7 @@
 <translation id="8007176423574883786">ಈ ಸಾಧನಕ್ಕೆ ಆಫ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="8013372441983637696">ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ Chrome ಡೇಟಾವನ್ನು ಸಹ ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="8015452622527143194">ಪುಟದಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದನ್ನೂ ಡೀಫಾಲ್ಟ್ ಗಾತ್ರಕ್ಕೆ ಹಿಂತಿರುಗಿಸಿ</translation>
+<translation id="8015780634880457457">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಭಾಗವಾಗಿತ್ತೇ ಎಂದು Google ಪರಿಶೀಲಿಸಬಹುದು</translation>
 <translation id="802154636333426148">ಡೌನ್‌ಲೋಡ್‌ ವಿಫಲಗೊಂಡಿದೆ</translation>
 <translation id="8026334261755873520">ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="8035133914807600019">ಹೊಸ ಫೋಲ್ಡರ್‌…</translation>
@@ -1010,6 +1024,7 @@
 <translation id="8445448999790540984">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಎಕ್ಸ್‌ಪೋರ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="8447861592752582886">ಸಾಧನ ಅನುಮತಿಯನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ</translation>
 <translation id="8461694314515752532">ನಿಮ್ಮ ಸ್ವಂತ ಸಿಂಕ್ ಪಾಸ್‌ಫ್ರೇಸ್‌ ಬಳಸಿಕೊಂಡು ಸಿಂಕ್ ಮಾಡಿದ ಡೇಟಾವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿ</translation>
+<translation id="8466613982764129868"><ph name="TARGET_DEVICE_NAME" /> ಸಾಧನವು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">ಆಫ್‌ಲೈನ್ ಲಭ್ಯವಿದೆ</translation>
 <translation id="8489271220582375723">ಇತಿಹಾಸ ಪುಟ ತೆರೆಯಿರಿ</translation>
@@ -1100,6 +1115,7 @@
 <translation id="9188680907066685419">ನಿರ್ವಹಿಸಲಾದ ಖಾತೆಯಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡಿ</translation>
 <translation id="9204836675896933765">1 ಫೈಲ್ ಬಾಕಿ ಉಳಿದಿದೆ</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">ಕರೆಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="9219103736887031265">ಚಿತ್ರಗಳು</translation>
 <translation id="926205370408745186">ಡಿಜಿಟಲ್ ಯೋಗಕ್ಷೇಮದಿಂದ ನಿಮ್ಮ Chrome ಚಟುವಟಿಕೆಯನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
 <translation id="932327136139879170">ಹೋಮ್</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
index caff8ea..9ba203b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Atvērt visas</translation>
 <translation id="1409426117486808224">Vienkāršots atvērtu ciļņu skatījums</translation>
 <translation id="1409879593029778104">Fails <ph name="FILE_NAME" /> netika lejupielādēts, jo tas jau pastāv.</translation>
+<translation id="1413136574162415971">Google var pārbaudīt, vai jūsu paroles ir nopludinātas datu pārkāpuma dēļ. Šī funkcija tiks ieslēgta, kad pierakstīsieties Google kontā un ieslēgsiet sinhronizāciju.</translation>
 <translation id="1414981605391750300">Notiek sazināšanās ar Google. Tas var ilgt kādu minūti...</translation>
 <translation id="1416550906796893042">Lietojumprogrammas versija</translation>
 <translation id="1430915738399379752">Drukāt</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Signāls</translation>
 <translation id="2096012225669085171">Sinhronizējiet un personalizējiet vairākās ierīcēs</translation>
 <translation id="2100273922101894616">Automātiski pierakstīties</translation>
+<translation id="2100314319871056947">Kopīgojiet mazākus teksta fragmentus</translation>
 <translation id="2107397443965016585">Vaicāt, pirms atļaut vietnēm atskaņot aizsargātu saturu (ieteicams)</translation>
 <translation id="2111511281910874386">Doties uz lapu</translation>
 <translation id="2122601567107267586">Nevarēja atvērt lietotni</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Lai izietu no pilnekrāna režīma, pieskarieties pogai Atpakaļ.</translation>
 <translation id="2842985007712546952">Vecākmape</translation>
 <translation id="2858138569776157458">Populāras</translation>
+<translation id="2860954141821109167">Šajā ierīcē jābūt iespējotai tālruņa lietotnei</translation>
 <translation id="2870560284913253234">Vietne</translation>
 <translation id="2874939134665556319">Iepriekšējais ieraksts</translation>
 <translation id="2876369937070532032">Nosūta Google serveriem dažu apmeklēto lapu vietrāžus URL, ja jūsu drošība ir apdraudēta</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Ieejas frāzes izveide</translation>
 <translation id="2996809686854298943">URL ir jānorāda obligāti.</translation>
 <translation id="300526633675317032">Tādējādi tiks notīrīti visi vietnes krātuves dati (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">Pārbaudiet, vai šajā ierīcē ir izveidots interneta savienojums</translation>
 <translation id="3029613699374795922">Lejupielādēts: <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Ieejas frāzes neatbilst.</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Saņemt palīdzību<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Atlasīt attēlus</translation>
 <translation id="7233236755231902816">Lai skatītu tīmekli savā valodā, iegūstiet jaunāko Chrome versiju</translation>
 <translation id="7243308994586599757">Opcijas, kas pieejamas ekrāna apakšējā daļā</translation>
+<translation id="7248069434667874558">Ierīcē <ph name="TARGET_DEVICE_NAME" /> ieslēdziet Chrome sinhronizāciju</translation>
 <translation id="7250468141469952378">Atlasīti vienumi: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Bloķēta vietne</translation>
 <translation id="7290209999329137901">Pārdēvēšana nav pieejama</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Izslēgts šai ierīcei</translation>
 <translation id="8013372441983637696">Arī noņemt jūsu Chrome datus no šīs ierīces</translation>
 <translation id="8015452622527143194">Atjaunot visam lapas saturam noklusējuma lielumu</translation>
+<translation id="8015780634880457457">Google var pārbaudīt, vai jūsu paroles ir nopludinātas datu pārkāpumā</translation>
 <translation id="802154636333426148">Lejupielāde neizdevās</translation>
 <translation id="8026334261755873520">Notīrīt pārlūkošanas datus</translation>
 <translation id="8035133914807600019">Jauna mape…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Nevar eksportēt paroles</translation>
 <translation id="8447861592752582886">Atsaukt ierīces atļauju</translation>
 <translation id="8461694314515752532">Šifrējiet sinhronizētos datus, izmantojot savu sinhronizācijas ieejas frāzi</translation>
+<translation id="8466613982764129868">Ierīcē <ph name="TARGET_DEVICE_NAME" /> ir jābūt izveidotam interneta savienojumam</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Pieejams bezsaistē</translation>
 <translation id="8489271220582375723">Atvērt vēstures lapu</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Izrakstīšanās no pārvaldīta konta</translation>
 <translation id="9204836675896933765">Atlicis 1 fails</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Nevar zvanīt</translation>
 <translation id="9219103736887031265">Attēli</translation>
 <translation id="926205370408745186">Chrome darbību noņemšana no Digitālās labjutības</translation>
 <translation id="932327136139879170">Sākums</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
index 19d23aa..4f51f0d4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Buka semua</translation>
 <translation id="1409426117486808224">Paparan ringkas bagi tab terbuka</translation>
 <translation id="1409879593029778104">Muat turun <ph name="FILE_NAME" /> dihalang kerana fail ini sudah wujud.</translation>
+<translation id="1413136574162415971">Google boleh menyemak sama ada kata laluan anda terlibat dalam pelanggaran data. Semakan ini akan dihidupkan apabila anda log masuk dengan Akaun Google anda dan menghidupkan penyegerakan.</translation>
 <translation id="1414981605391750300">Menghubungi Google. Mungkin mengambil sedikit masa…</translation>
 <translation id="1416550906796893042">Versi aplikasi</translation>
 <translation id="1430915738399379752">Cetak</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Bunyi</translation>
 <translation id="2096012225669085171">Segerakkan dan peribadikan pada semua peranti</translation>
 <translation id="2100273922101894616">Auto Log masuk</translation>
+<translation id="2100314319871056947">Cuba kongsikan teks itu dalam bahagian yang lebih kecil</translation>
 <translation id="2107397443965016585">Tanya sebelum membenarkan tapak memainkan kandungan yang dilindungi (disyorkan)</translation>
 <translation id="2111511281910874386">Pergi ke halaman</translation>
 <translation id="2122601567107267586">Tidak dapat membuka apl</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Sentuh butang kembali untuk keluar daripada skrin penuh.</translation>
 <translation id="2842985007712546952">Folder induk</translation>
 <translation id="2858138569776157458">Tapak popular</translation>
+<translation id="2860954141821109167">Pastikan apl telefon didayakan pada peranti ini</translation>
 <translation id="2870560284913253234">Tapak</translation>
 <translation id="2874939134665556319">Lagu sebelumnya</translation>
 <translation id="2876369937070532032">Menghantar URL sesetengah halaman yang anda lawati kepada Google, apabila keselamatan anda terancam</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Buat ungkapan laluan</translation>
 <translation id="2996809686854298943">URL yang diperlukan</translation>
 <translation id="300526633675317032">Tindakan ini akan menghapuskan semua <ph name="SIZE_IN_KB" /> daripada storan tapak web.</translation>
+<translation id="3016635187733453316">Pastikan peranti ini disambungkan ke Internet</translation>
 <translation id="3029613699374795922">Dimuat turun <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Frasa laluan tidak sepadan</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Dapatkan bantuan<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Pilih imej</translation>
 <translation id="7233236755231902816">Untuk melihat web dalam bahasa anda, dapatkan versi terkini Chrome</translation>
 <translation id="7243308994586599757">Pilihan tersedia berhampiran bahagian bawah skrin</translation>
+<translation id="7248069434667874558">Pastikan penyegerakan telah dihidupkan dalam Chrome pada <ph name="TARGET_DEVICE_NAME" /></translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> dipilih</translation>
 <translation id="7274013316676448362">Tapak yang disekat</translation>
 <translation id="7290209999329137901">Penamaan semula tidak tersedia</translation>
@@ -880,7 +885,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (Dikemas kini <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">data disimpan</translation>
 <translation id="7498271377022651285">Sila tunggu…</translation>
-<translation id="7510943789645525906">Memberi anda amaran jika kata laluan yang anda gunakan adalah sebahagian daripada pelanggaran data.</translation>
+<translation id="7510943789645525906">Memberi anda amaran jika kata laluan yang anda gunakan adalah sebahagian daripada pelanggaran data</translation>
 <translation id="7514365320538308">Muat Turun</translation>
 <translation id="751961395872307827">Tidak dapat menyambung ke tapak</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Dimatikan untuk peranti ini</translation>
 <translation id="8013372441983637696">Selain itu, kosongkan data Chrome anda daripada peranti ini</translation>
 <translation id="8015452622527143194">Kembalikan semua yg ada pd halaman kpd saiz lalai</translation>
+<translation id="8015780634880457457">Google boleh menyemak sama ada kata laluan anda terlibat dalam pelanggaran data</translation>
 <translation id="802154636333426148">Muat turun gagal</translation>
 <translation id="8026334261755873520">Kosongkan data semakan imbas</translation>
 <translation id="8035133914807600019">Folder baharu...</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Tidak dapat mengeskport kata laluan</translation>
 <translation id="8447861592752582886">Batalkan kebenaran peranti</translation>
 <translation id="8461694314515752532">Sulitkan data yang disegerakkan dengan ungkapan laluan penyegerakan anda sendiri</translation>
+<translation id="8466613982764129868">Pastikan <ph name="TARGET_DEVICE_NAME" /> disambungkan ke Internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Tersedia di luar talian</translation>
 <translation id="8489271220582375723">Buka halaman sejarah</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Log keluar daripada akaun terurus</translation>
 <translation id="9204836675896933765">1 fail lagi</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Tidak dapat membuat panggilan</translation>
 <translation id="9219103736887031265">Imej</translation>
 <translation id="926205370408745186">Alih keluar aktiviti Chrome anda daripada Kesejahteraan Digital</translation>
 <translation id="932327136139879170">Laman Utama</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
index 0bec6b0..ed58d1a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Alles openen</translation>
 <translation id="1409426117486808224">Vereenvoudigde weergave voor geopende tabbladen</translation>
 <translation id="1409879593029778104">Downloaden van <ph name="FILE_NAME" /> is voorkomen omdat het bestand al bestaat.</translation>
+<translation id="1413136574162415971">Google kan controleren of je wachtwoorden betrokken waren bij een gegevenslek. Dit wordt ingeschakeld wanneer je inlogt met je Google-account en synchroniseren inschakelt.</translation>
 <translation id="1414981605391750300">Contact opnemen met Google. Dit kan even duren…</translation>
 <translation id="1416550906796893042">Appversie</translation>
 <translation id="1430915738399379752">Afdrukken</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Geluid</translation>
 <translation id="2096012225669085171">Synchronisatie en personalisatie op meerdere apparaten</translation>
 <translation id="2100273922101894616">Automatisch inloggen</translation>
+<translation id="2100314319871056947">Probeer de tekst in kleinere gedeelten te delen</translation>
 <translation id="2107397443965016585">Vragen voordat sites beschermde content mogen afspelen (aanbevolen)</translation>
 <translation id="2111511281910874386">Ga naar pagina</translation>
 <translation id="2122601567107267586">Kan app niet openen</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Tik op de knop Terug om het volledige scherm te sluiten.</translation>
 <translation id="2842985007712546952">Bovenliggende map</translation>
 <translation id="2858138569776157458">Topsites</translation>
+<translation id="2860954141821109167">Zorg ervoor dat een telefoon-app is ingeschakeld op dit apparaat</translation>
 <translation id="2870560284913253234">Site</translation>
 <translation id="2874939134665556319">Vorig nummer</translation>
 <translation id="2876369937070532032">Verzendt URL's van bepaalde pagina's die je bezoekt naar Google wanneer je beveiliging risico loopt</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Wachtwoordzin maken</translation>
 <translation id="2996809686854298943">URL vereist</translation>
 <translation id="300526633675317032">Hiermee wordt de volledige <ph name="SIZE_IN_KB" /> aan site-opslag gewist.</translation>
+<translation id="3016635187733453316">Controleer of dit apparaat verbinding heeft met internet</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> KB gedownload</translation>
 <translation id="3029704984691124060">Wachtwoordzinnen komen niet overeen</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Hulp krijgen<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Afbeeldingen selecteren</translation>
 <translation id="7233236755231902816">Als je webpagina's in je eigen taal wilt kunnen lezen, download je de nieuwste versie van Chrome</translation>
 <translation id="7243308994586599757">Opties beschikbaar onder aan het scherm</translation>
+<translation id="7248069434667874558">Zorg dat synchronisatie in Chrome is ingeschakeld voor <ph name="TARGET_DEVICE_NAME" /></translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> geselecteerd</translation>
 <translation id="7274013316676448362">Geblokkeerde site</translation>
 <translation id="7290209999329137901">Naam wijzigen niet beschikbaar</translation>
@@ -880,7 +885,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (geüpdatet: <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">data bespaard</translation>
 <translation id="7498271377022651285">Een ogenblik geduld…</translation>
-<translation id="7510943789645525906">Hiermee word je gewaarschuwd als een wachtwoord dat je gebruikt, betrokken was bij een gegevenslek</translation>
+<translation id="7510943789645525906">Je krijgt een waarschuwing als je wachtwoord betrokken was bij een gegevenslek</translation>
 <translation id="7514365320538308">Downloaden</translation>
 <translation id="751961395872307827">Kan geen verbinding maken met de site</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Uitgeschakeld voor dit apparaat</translation>
 <translation id="8013372441983637696">Je Chrome-gegevens ook wissen op dit apparaat</translation>
 <translation id="8015452622527143194">Standaardgrootte van alles op de pagina herstellen</translation>
+<translation id="8015780634880457457">Google kan controleren of je wachtwoorden betrokken waren bij een gegevenslek</translation>
 <translation id="802154636333426148">Downloaden mislukt</translation>
 <translation id="8026334261755873520">Browsegegevens wissen</translation>
 <translation id="8035133914807600019">Nieuwe map…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Wachtwoorden kunnen niet worden geëxporteerd</translation>
 <translation id="8447861592752582886">Toegang tot apparaat intrekken</translation>
 <translation id="8461694314515752532">Gesynchroniseerde gegevens versleutelen met een eigen wachtwoordzin</translation>
+<translation id="8466613982764129868">Zorg dat <ph name="TARGET_DEVICE_NAME" /> is verbonden met internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Offline beschikbaar</translation>
 <translation id="8489271220582375723">De pagina Geschiedenis openen</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Uitloggen van beheerd account</translation>
 <translation id="9204836675896933765">1 bestand over</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Kan niet bellen</translation>
 <translation id="9219103736887031265">Afbeeldingen</translation>
 <translation id="926205370408745186">Je Chrome-activiteit verwijderen uit Digitaal welzijn</translation>
 <translation id="932327136139879170">Homepage</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
index 2d9f72f..6ca7f86 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -41,7 +41,7 @@
 <translation id="1258753120186372309">Doodle Google: <ph name="DOODLE_DESCRIPTION" /></translation>
 <translation id="1260236875608242557">Szukaj i przeglądaj</translation>
 <translation id="1264974993859112054">Sport</translation>
-<translation id="1266864766717917324">Nie udało się udostępnić <ph name="CONTENT_TYPE" /></translation>
+<translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> – nie udało się udostępnić</translation>
 <translation id="1272079795634619415">Zatrzymaj</translation>
 <translation id="1283039547216852943">Kliknij, by rozwinąć</translation>
 <translation id="1285320974508926690">Nigdy nie tłumacz tej witryny</translation>
@@ -66,12 +66,13 @@
 <translation id="1407135791313364759">Otwórz wszystkie</translation>
 <translation id="1409426117486808224">Uproszczony widok otwartych kart</translation>
 <translation id="1409879593029778104">Plik <ph name="FILE_NAME" /> nie został pobrany, bo już istnieje.</translation>
+<translation id="1413136574162415971">Google może sprawdzić, czy bezpieczeństwo Twoich haseł zostało naruszone. Ta funkcja zostanie włączona, gdy zalogujesz się na swoje konto Google i włączysz synchronizację.</translation>
 <translation id="1414981605391750300">Łączę się z Google. Może to chwilę potrwać…</translation>
 <translation id="1416550906796893042">Wersja aplikacji</translation>
 <translation id="1430915738399379752">Drukuj</translation>
 <translation id="1445680696957526815">Komponenty Chrome są ze sobą niezgodne. Być może przeglądarka się uaktualnia. Spróbuj ponownie za kilka minut. Jeśli problem nie ustąpi, odinstaluj i ponownie zainstaluj Chrome.</translation>
 <translation id="1446450296470737166">Pełne sterowanie urządzeniami MIDI</translation>
-<translation id="1450753235335490080">Nie udało się udostępnić <ph name="CONTENT_TYPE" /></translation>
+<translation id="1450753235335490080"><ph name="CONTENT_TYPE" />: nie udało się udostępnić</translation>
 <translation id="145097072038377568">Wyłączone w ustawieniach Androida</translation>
 <translation id="1477626028522505441">Nie udało się pobrać pliku <ph name="FILE_NAME" /> z powodu problemów z serwerem.</translation>
 <translation id="1501480321619201731">Usuń grupę</translation>
@@ -154,12 +155,13 @@
 <translation id="2049961518639794558">Zmiana rozszerzenia pliku może spowodować nieoczekiwane zachowanie i uszkodzić urządzenie.</translation>
 <translation id="2056878612599315956">Strona wstrzymana</translation>
 <translation id="2063713494490388661">Kliknij, by wyszukać</translation>
-<translation id="2067805253194386918">tekstu</translation>
+<translation id="2067805253194386918">Tekst</translation>
 <translation id="2079545284768500474">Cofnij</translation>
 <translation id="2082238445998314030">Wynik <ph name="RESULT_NUMBER" /> z <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2091887806945687916">Dźwięk</translation>
 <translation id="2096012225669085171">Synchronizacja i personalizacja na urządzeniach</translation>
 <translation id="2100273922101894616">Automatyczne logowanie</translation>
+<translation id="2100314319871056947">Spróbuj udostępnić mniejsze fragmenty tekstu</translation>
 <translation id="2107397443965016585">Pytaj, zanim pozwolisz stronom na odtwarzanie treści chronionej (zalecane)</translation>
 <translation id="2111511281910874386">Przejdź do strony</translation>
 <translation id="2122601567107267586">Nie udało się otworzyć aplikacji</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Kliknij przycisk Wstecz, by wyjść z trybu pełnoekranowego.</translation>
 <translation id="2842985007712546952">Folder nadrzędny</translation>
 <translation id="2858138569776157458">Popularne</translation>
+<translation id="2860954141821109167">Sprawdź, czy na urządzeniu jest włączona aplikacja telefonu</translation>
 <translation id="2870560284913253234">Witryna</translation>
 <translation id="2874939134665556319">Poprzedni utwór</translation>
 <translation id="2876369937070532032">Gdy Twoje bezpieczeństwo jest zagrożone, wysyła do Google adresy URL odwiedzanych stron</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Utwórz hasło</translation>
 <translation id="2996809686854298943">Wymagany adres URL</translation>
 <translation id="300526633675317032">Spowoduje to usunięcie <ph name="SIZE_IN_KB" /> danych witryn.</translation>
+<translation id="3016635187733453316">Sprawdź, czy to urządzenie jest połączone z internetem</translation>
 <translation id="3029613699374795922">Pobrano <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Hasła nie pasują do siebie</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Poproś o pomoc<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Wybierz zdjęcia</translation>
 <translation id="7233236755231902816">Aby wyświetlać strony internetowe w swoim języku, pobierz najnowszą wersję Chrome</translation>
 <translation id="7243308994586599757">Opcje dostępne u dołu ekranu</translation>
+<translation id="7248069434667874558">Sprawdź, czy <ph name="TARGET_DEVICE_NAME" /> ma włączoną synchronizację w Chrome</translation>
 <translation id="7250468141469952378">Wybrano <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Zablokowana witryna</translation>
 <translation id="7290209999329137901">Nie można zmienić nazwy</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Wyłączona na tym urządzeniu</translation>
 <translation id="8013372441983637696">Usuń też swoje dane Chrome z tego urządzenia</translation>
 <translation id="8015452622527143194">Powróć do normalnego rozmiaru całej treści strony</translation>
+<translation id="8015780634880457457">Google może sprawdzić, czy bezpieczeństwo Twoich haseł zostało naruszone</translation>
 <translation id="802154636333426148">Nie udało się pobrać</translation>
 <translation id="8026334261755873520">Wyczyść dane przeglądania</translation>
 <translation id="8035133914807600019">Nowy folder…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Nie można wyeksportować haseł</translation>
 <translation id="8447861592752582886">Cofnij zgodę na dostęp do urządzenia</translation>
 <translation id="8461694314515752532">Szyfruj synchronizowane dane własnym hasłem synchronizacji</translation>
+<translation id="8466613982764129868">Sprawdź, czy <ph name="TARGET_DEVICE_NAME" /> ma połączenie z internetem</translation>
 <translation id="8485434340281759656"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation>
 <translation id="8487700953926739672">Dostępny offline</translation>
 <translation id="8489271220582375723">Otwórz stronę historii</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Wyloguj się z konta zarządzanego</translation>
 <translation id="9204836675896933765">Pozostał jeden plik</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Nie można wykonywać połączeń</translation>
 <translation id="9219103736887031265">Grafika</translation>
 <translation id="926205370408745186">Usuwa Twoją aktywność w Chrome z Cyfrowej równowagi</translation>
 <translation id="932327136139879170">Strona główna</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
index fef076c..351bd562 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Abrir todas</translation>
 <translation id="1409426117486808224">Versão simplificada das guias abertas</translation>
 <translation id="1409879593029778104">O download de <ph name="FILE_NAME" /> foi impedido porque o arquivo já existe.</translation>
+<translation id="1413136574162415971">O Google pode verificar se suas senhas estavam em uma violação de dados. Isso será ativado quando você fizer login com sua Conta Google e ativar a sincronização.</translation>
 <translation id="1414981605391750300">Entrando em contato com o Google. Isso pode levar um minuto…</translation>
 <translation id="1416550906796893042">Versão do aplicativo</translation>
 <translation id="1430915738399379752">Imprimir</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Som</translation>
 <translation id="2096012225669085171">Sincronizar e personalizar entre dispositivos</translation>
 <translation id="2100273922101894616">Login automático</translation>
+<translation id="2100314319871056947">Tente compartilhar o texto em segmentos menores</translation>
 <translation id="2107397443965016585">Perguntar antes de permitir que sites reproduzam conteúdo protegido (recomendado)</translation>
 <translation id="2111511281910874386">Ir para a página</translation>
 <translation id="2122601567107267586">Não foi possível abrir o aplicativo</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Toque no botão "Voltar" para sair da tela cheia.</translation>
 <translation id="2842985007712546952">Pasta mãe</translation>
 <translation id="2858138569776157458">Sites famosos</translation>
+<translation id="2860954141821109167">Verifique se há um aplicativo para telefones ativado neste dispositivo</translation>
 <translation id="2870560284913253234">Site</translation>
 <translation id="2874939134665556319">Faixa anterior</translation>
 <translation id="2876369937070532032">Quando há risco de segurança, envia para o Google os URLs de algumas páginas que você visita</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Criar senha longa</translation>
 <translation id="2996809686854298943">O URL é obrigatório</translation>
 <translation id="300526633675317032">Essa ação limpará tudo, <ph name="SIZE_IN_KB" /> de dados de armazenamento de sites.</translation>
+<translation id="3016635187733453316">Verifique se o dispositivo está conectado à Internet</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> KB transferido(s) por download</translation>
 <translation id="3029704984691124060">As senhas não correspondem</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Receber ajuda<ph name="END_LINK" /></translation>
@@ -842,6 +846,7 @@
 <translation id="723171743924126238">Selecionar imagens</translation>
 <translation id="7233236755231902816">Para ver as páginas da Web no seu idioma, instale a versão mais recente do Chrome</translation>
 <translation id="7243308994586599757">Opções disponíveis perto da parte inferior da tela</translation>
+<translation id="7248069434667874558">Verifique se a sincronização do <ph name="TARGET_DEVICE_NAME" /> está ativada no Chrome</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> itens selecionados</translation>
 <translation id="7274013316676448362">Site bloqueado</translation>
 <translation id="7290209999329137901">Ação de renomear indisponível</translation>
@@ -881,7 +886,7 @@
 <translation id="7493994139787901920"><ph name="VERSION" /> (atualizada <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">de dados economizados</translation>
 <translation id="7498271377022651285">Aguarde...</translation>
-<translation id="7510943789645525906">Avisa se uma senha que você usa for parte de uma violação de dados</translation>
+<translation id="7510943789645525906">Avisa se uma senha que você usa estava em uma violação de dados</translation>
 <translation id="7514365320538308">Fazer o download</translation>
 <translation id="751961395872307827">Não foi possível se conectar ao site</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -956,6 +961,7 @@
 <translation id="8007176423574883786">Desativado neste dispositivo</translation>
 <translation id="8013372441983637696">Limpar também seus dados do Chrome deste dispositivo</translation>
 <translation id="8015452622527143194">Retornar tudo na página para o tamanho padrão</translation>
+<translation id="8015780634880457457">O Google pode verificar se suas senhas estavam em uma violação de dados</translation>
 <translation id="802154636333426148">Falha no download</translation>
 <translation id="8026334261755873520">Limpar dados de navegação</translation>
 <translation id="8035133914807600019">Nova pasta...</translation>
@@ -1018,6 +1024,7 @@
 <translation id="8445448999790540984">Não é possível exportar senhas</translation>
 <translation id="8447861592752582886">Revogar permissão do dispositivo</translation>
 <translation id="8461694314515752532">Criptografar dados sincronizados com sua senha de sincronização</translation>
+<translation id="8466613982764129868">Verifique se o <ph name="TARGET_DEVICE_NAME" /> está conectado à Internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponível off-line</translation>
 <translation id="8489271220582375723">Abrir Histórico</translation>
@@ -1108,6 +1115,7 @@
 <translation id="9188680907066685419">Sair da conta gerenciada</translation>
 <translation id="9204836675896933765">1 arquivo restante</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Não é possível fazer chamadas</translation>
 <translation id="9219103736887031265">Imagens</translation>
 <translation id="926205370408745186">Remover sua atividade do Chorme do Bem-estar digital</translation>
 <translation id="932327136139879170">Início</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
index 8c84b3b..16c2178 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Abrir tudo</translation>
 <translation id="1409426117486808224">Vista simplificada dos separadores abertos</translation>
 <translation id="1409879593029778104">A transferência de <ph name="FILE_NAME" /> foi impedida porque o ficheiro já existe.</translation>
+<translation id="1413136574162415971">A Google pode verificar se as suas palavras-passe estiveram envolvidas numa violação de dados. Esta funcionalidade será ativada quando iniciar sessão com a sua Conta Google e ativar a sincronização.</translation>
 <translation id="1414981605391750300">A contactar a Google… Isto pode demorar um pouco…</translation>
 <translation id="1416550906796893042">Versão da aplicação</translation>
 <translation id="1430915738399379752">Imprimir</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Som</translation>
 <translation id="2096012225669085171">Sincronizar e personalizar entre dispositivos</translation>
 <translation id="2100273922101894616">Início de sessão automático</translation>
+<translation id="2100314319871056947">Experimente partilhar o texto em partes mais pequenas.</translation>
 <translation id="2107397443965016585">Perguntar antes de permitir que os sites reproduzam conteúdos protegidos (recomendado)</translation>
 <translation id="2111511281910874386">Ir para a página</translation>
 <translation id="2122601567107267586">Não foi possível abrir a aplicação.</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Toque no botão de retrocesso para sair do ecrã inteiro.</translation>
 <translation id="2842985007712546952">Pasta superior</translation>
 <translation id="2858138569776157458">Princ. sites</translation>
+<translation id="2860954141821109167">Certifique-se de que uma aplicação de telefone está ativada neste dispositivo.</translation>
 <translation id="2870560284913253234">Site</translation>
 <translation id="2874939134665556319">Faixa anterior</translation>
 <translation id="2876369937070532032">Quando a sua segurança está em risco, envia para a Google URLs de algumas páginas que visita.</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Criar frase de acesso</translation>
 <translation id="2996809686854298943">URL obrigatório</translation>
 <translation id="300526633675317032">Esta ação elimina os <ph name="SIZE_IN_KB" /> de armazenamento do Website.</translation>
+<translation id="3016635187733453316">Certifique-se de que este dispositivo está ligado à Internet.</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> KB transferido(s)</translation>
 <translation id="3029704984691124060">As frases de acesso não coincidem</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obter ajuda<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Selecionar imagens</translation>
 <translation id="7233236755231902816">Para ver a Web no seu idioma, obtenha a versão mais recente do Chrome.</translation>
 <translation id="7243308994586599757">Opções disponíveis junto à parte inferior do ecrã</translation>
+<translation id="7248069434667874558">Certifique-se de que o <ph name="TARGET_DEVICE_NAME" /> tem a sincronização ativada no Chrome.</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> selecionado(s).</translation>
 <translation id="7274013316676448362">Site bloqueado</translation>
 <translation id="7290209999329137901">Opção de mudar o nome não disponível</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Desativada para este dispositivo</translation>
 <translation id="8013372441983637696">Limpar também os dados do Chrome deste dispositivo</translation>
 <translation id="8015452622527143194">Repor tamanho predefinido dos itens na página</translation>
+<translation id="8015780634880457457">A Google pode verificar se as suas palavras-passe estiveram envolvidas numa violação de dados.</translation>
 <translation id="802154636333426148">Falha ao transferir</translation>
 <translation id="8026334261755873520">Limpar dados de navegação</translation>
 <translation id="8035133914807600019">Nova pasta…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Não é possível exportar as palavras-passe</translation>
 <translation id="8447861592752582886">Revogar autorização do dispositivo</translation>
 <translation id="8461694314515752532">Encriptar dados sincronizados com a sua própria frase de acesso de sincronização</translation>
+<translation id="8466613982764129868">Certifique-se de que o <ph name="TARGET_DEVICE_NAME" /> está ligado à Internet.</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponível offline</translation>
 <translation id="8489271220582375723">Abrir a página do histórico</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Terminar sessão na conta gerida</translation>
 <translation id="9204836675896933765">Falta 1 ficheiro</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Não é possível efetuar chamadas</translation>
 <translation id="9219103736887031265">Imagens</translation>
 <translation id="926205370408745186">Remova a atividade do Chrome do Bem-estar digital</translation>
 <translation id="932327136139879170">Página inicial</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
index a741f45a..497de11 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Deschideți-le pe toate</translation>
 <translation id="1409426117486808224">Afișare simplificată pentru filele deschise</translation>
 <translation id="1409879593029778104">Descărcarea fișierului <ph name="FILE_NAME" /> a fost împiedicată, deoarece fișierul există deja.</translation>
+<translation id="1413136574162415971">Google poate verifica dacă parolele tale fac parte dintr-o încălcare a securității datelor. Opțiunea va fi activată atunci când te conectezi cu Contul Google și activezi sincronizarea.</translation>
 <translation id="1414981605391750300">Se contactează Google. Poate dura un minut...</translation>
 <translation id="1416550906796893042">Versiunea aplicației</translation>
 <translation id="1430915738399379752">Printează</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Sunet</translation>
 <translation id="2096012225669085171">Sincronizează și personalizează pe toate dispozitivele</translation>
 <translation id="2100273922101894616">Conectare automată</translation>
+<translation id="2100314319871056947">Împarte textul în fragmente mai mici</translation>
 <translation id="2107397443965016585">Întreabă înainte de a permite site-urilor să redea conținut protejat (recomandat)</translation>
 <translation id="2111511281910874386">Accesează pagina</translation>
 <translation id="2122601567107267586">Aplicația nu poate fi deschisă</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Atinge butonul Înapoi pentru a ieși din ecranul complet.</translation>
 <translation id="2842985007712546952">Dosar părinte</translation>
 <translation id="2858138569776157458">Site-uri de top</translation>
+<translation id="2860954141821109167">Verifică dacă pe dispozitiv este activată o aplicație de telefon</translation>
 <translation id="2870560284913253234">Site</translation>
 <translation id="2874939134665556319">Melodia anterioară</translation>
 <translation id="2876369937070532032">Trimite la Google adrese URL ale unor pagini pe care le accesezi, când securitatea este în pericol</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Creează o expresie de acces</translation>
 <translation id="2996809686854298943">Adresă URL obligatorie</translation>
 <translation id="300526633675317032">Astfel, se vor șterge <ph name="SIZE_IN_KB" /> din stocarea site-urilor.</translation>
+<translation id="3016635187733453316">Verifică dacă dispozitivul este conectat la internet</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> KB descărcați</translation>
 <translation id="3029704984691124060">Expresiile de acces nu corespund</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obține ajutor<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Selectează imagini</translation>
 <translation id="7233236755231902816">Pentru a naviga pe internet în limba ta, este necesară cea mai recentă versiune de Chrome</translation>
 <translation id="7243308994586599757">Opțiuni disponibile în partea de jos a ecranului</translation>
+<translation id="7248069434667874558">Verifică dacă <ph name="TARGET_DEVICE_NAME" /> are sincronizarea activată în Chrome</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> selectate</translation>
 <translation id="7274013316676448362">Site blocat</translation>
 <translation id="7290209999329137901">Nu se poate redenumi</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Dezactivată pentru acest dispozitiv</translation>
 <translation id="8013372441983637696">Șterge și datele Chrome de pe acest dispozitiv</translation>
 <translation id="8015452622527143194">Readuce pagina la dimensiunea prestabilită</translation>
+<translation id="8015780634880457457">Google poate verifica dacă parolele tale fac parte dintr-o încălcare a securității datelor</translation>
 <translation id="802154636333426148">Descărcarea nu a reușit</translation>
 <translation id="8026334261755873520">Șterge datele de navigare</translation>
 <translation id="8035133914807600019">Dosar nou…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Nu se pot exporta parole</translation>
 <translation id="8447861592752582886">Revocă permisiunea de accesare a dispozitivului</translation>
 <translation id="8461694314515752532">Criptează datele sincronizate folosind propria expresie de acces pentru sincronizare</translation>
+<translation id="8466613982764129868">Asigură-te că <ph name="TARGET_DEVICE_NAME" /> este conectat la internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Disponibil offline</translation>
 <translation id="8489271220582375723">Deschide pagina Istoric</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Deconectează-te de la contul gestionat</translation>
 <translation id="9204836675896933765">1 fișier rămas</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Nu pot apela</translation>
 <translation id="9219103736887031265">Imagini</translation>
 <translation id="926205370408745186">Elimină activitatea în Chrome din Bunăstarea digitală</translation>
 <translation id="932327136139879170">Pagina de pornire</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
index 3cde349..96f6d12 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Открыть все</translation>
 <translation id="1409426117486808224">Упрощенный просмотр открытых вкладок</translation>
 <translation id="1409879593029778104">Скачивание файла <ph name="FILE_NAME" /> остановлено, так как он уже существует.</translation>
+<translation id="1413136574162415971">Google может проверять, были ли ваши пароли скомпрометированы в результате утечки данных. Эта функция будет включена, когда вы войдете в аккаунт Google и активируете синхронизацию.</translation>
 <translation id="1414981605391750300">Подключение к Google. Подождите…</translation>
 <translation id="1416550906796893042">Версия приложения</translation>
 <translation id="1430915738399379752">Печать</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2096012225669085171">Синхронизация и персонализация данных на всех устройствах.</translation>
 <translation id="2100273922101894616">Автоматический вход</translation>
+<translation id="2100314319871056947">Перед отправкой разбейте текст на несколько частей.</translation>
 <translation id="2107397443965016585">Запрашивать разрешение на воспроизведение защищенного контента (рекомендуется)</translation>
 <translation id="2111511281910874386">Перейти на страницу</translation>
 <translation id="2122601567107267586">Не удалось открыть приложение</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Чтобы выйти из полноэкранного режима, нажмите кнопку "Назад".</translation>
 <translation id="2842985007712546952">Родительская папка</translation>
 <translation id="2858138569776157458">Топ сайтов</translation>
+<translation id="2860954141821109167">Убедитесь, что на устройстве доступно приложение "Телефон".</translation>
 <translation id="2870560284913253234">Сайт</translation>
 <translation id="2874939134665556319">Предыдущий трек</translation>
 <translation id="2876369937070532032">При угрозе безопасности отправлять в Google URL некоторых страниц, которые вы открываете</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Придумайте кодовую фразу</translation>
 <translation id="2996809686854298943">Необходимо указать URL</translation>
 <translation id="300526633675317032">Будут удалены все данные сайтов (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">Убедитесь, что устройство подключено к Интернету.</translation>
 <translation id="3029613699374795922">Скачано <ph name="KBS" /> КБ</translation>
 <translation id="3029704984691124060">Кодовые фразы не совпадают</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Справка<ph name="END_LINK" /></translation>
@@ -579,7 +583,7 @@
 <translation id="5324858694974489420">Родительские настройки</translation>
 <translation id="5327248766486351172">Название</translation>
 <translation id="5335288049665977812">Разрешить сайтам использовать JavaScript (рекомендуется)</translation>
-<translation id="5342314432463739672">Запросы на получение разрешений</translation>
+<translation id="5342314432463739672">Запросы разрешений</translation>
 <translation id="5357811892247919462">Вкладка получена.</translation>
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{Открыта <ph name="OPEN_TABS_ONE" /> вкладка. Нажмите для переключения.}one{Открыта <ph name="OPEN_TABS_MANY" /> вкладка. Нажмите для переключения.}few{Открыто <ph name="OPEN_TABS_MANY" /> вкладки. Нажмите для переключения.}many{Открыто <ph name="OPEN_TABS_MANY" /> вкладок. Нажмите для переключения.}other{Открыто <ph name="OPEN_TABS_MANY" /> вкладки. Нажмите для переключения.}}</translation>
 <translation id="5391532827096253100">Подключение к сайту не защищено. Информация о сайте</translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Выберите изображения</translation>
 <translation id="7233236755231902816">Чтобы просматривать веб-страницы на своем языке, обновите Chrome до последней версии.</translation>
 <translation id="7243308994586599757">Доступные параметры указаны в нижней части экрана</translation>
+<translation id="7248069434667874558">Убедитесь, что в браузере Chrome на устройстве <ph name="TARGET_DEVICE_NAME" /> включена синхронизация.</translation>
 <translation id="7250468141469952378">Выбрано: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Заблокированный сайт</translation>
 <translation id="7290209999329137901">Переименование невозможно</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Отключено для этого устройства</translation>
 <translation id="8013372441983637696">Удалить данные Chrome с этого устройства</translation>
 <translation id="8015452622527143194">Восстановить масштаб страницы по умолчанию</translation>
+<translation id="8015780634880457457">Google может проверять, были ли ваши пароли скомпрометированы в результате утечки данных.</translation>
 <translation id="802154636333426148">Ошибка скачивания</translation>
 <translation id="8026334261755873520">Очистить историю</translation>
 <translation id="8035133914807600019">Создать папку…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Не удалось экспортировать пароли</translation>
 <translation id="8447861592752582886">Отключить доступ к устройству</translation>
 <translation id="8461694314515752532">Задать кодовую фразу для шифрования синхронизированных данных</translation>
+<translation id="8466613982764129868">Проверьте, подключено ли устройство <ph name="TARGET_DEVICE_NAME" /> к Интернету.</translation>
 <translation id="8485434340281759656"><ph name="DESCRIPTION" /> <ph name="FILE_SIZE" /> <ph name="SEPARATOR" /></translation>
 <translation id="8487700953926739672">Доступно в автономном режиме</translation>
 <translation id="8489271220582375723">Открыть страницу "История"</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Выход из управляемого аккаунта</translation>
 <translation id="9204836675896933765">Остался 1 файл</translation>
 <translation id="9206873250291191720">А</translation>
+<translation id="9209888181064652401">Не удается совершить звонок</translation>
 <translation id="9219103736887031265">Картинки</translation>
 <translation id="926205370408745186">Удалить данные о действиях в Chrome из сервиса "Цифровое благополучие"</translation>
 <translation id="932327136139879170">Главная страница</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
index 7858401..176c4116 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Otvoriť všetko</translation>
 <translation id="1409426117486808224">Jednoduché zobrazenie otvorených kariet</translation>
 <translation id="1409879593029778104">Sťahovanie súboru <ph name="FILE_NAME" /> bolo zrušené, pretože daný súbor už existuje.</translation>
+<translation id="1413136574162415971">Google môže skontrolovať, či vaše heslá boli súčasťou porušenia ochrany údajov. Táto funkcia bude zapnutá, keď sa prihlásite pomocou svojho účtu Google a zapnete synchronizáciu.</translation>
 <translation id="1414981605391750300">Kontaktuje sa Google. Môže to chvíľu trvať…</translation>
 <translation id="1416550906796893042">Verzia aplikácie</translation>
 <translation id="1430915738399379752">Tlačiť</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2096012225669085171">Synchronizovať a prispôsobiť v rôznych zariadeniach</translation>
 <translation id="2100273922101894616">Automaticky prihlasovať</translation>
+<translation id="2100314319871056947">Skúste text zdieľať po menších častiach</translation>
 <translation id="2107397443965016585">Pýtať sa, či chcete povoliť webu prehrávať chránený obsah (odporúčané)</translation>
 <translation id="2111511281910874386">Prejdite na stránku</translation>
 <translation id="2122601567107267586">Aplikáciu sa nepodarilo otvoriť</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Ukončite režim celej obrazovky klepnutím na tlačidlo Späť.</translation>
 <translation id="2842985007712546952">Nadradený priečinok</translation>
 <translation id="2858138569776157458">Hlavné weby</translation>
+<translation id="2860954141821109167">Skontrolujte, či je v tomto zariadení povolená aplikácia pre telefóny</translation>
 <translation id="2870560284913253234">Web</translation>
 <translation id="2874939134665556319">Predchádzajúca skladba</translation>
 <translation id="2876369937070532032">Pri ohrození zabezpečenia odosiela Googlu webové adresy niektorých navštívených stránok</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Vytvorenie prístupovej frázy</translation>
 <translation id="2996809686854298943">Vyžaduje sa webová adresa</translation>
 <translation id="300526633675317032">Vymažete celé úložisko webu (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">Skontrolujte, či je toto zariadenie pripojené k internetu</translation>
 <translation id="3029613699374795922">Stiahnuté: <ph name="KBS" /> kB</translation>
 <translation id="3029704984691124060">Prístupové frázy sa nezhodujú</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Získať pomoc<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Výber obrázkov</translation>
 <translation id="7233236755231902816">Ak chcete príslušný web zobraziť vo svojom jazyku, nainštalujte si najnovšiu verziu Chromu</translation>
 <translation id="7243308994586599757">Možnosti sú k dispozícii v dolnej časti obrazovky</translation>
+<translation id="7248069434667874558">Skontrolujte, či má <ph name="TARGET_DEVICE_NAME" /> v Chrome zapnutú synchronizáciu</translation>
 <translation id="7250468141469952378">Vybrané: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Blokovaný web</translation>
 <translation id="7290209999329137901">Premenovanie nie je k dispozícii</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Vypnuté v tomto zariadení</translation>
 <translation id="8013372441983637696">Tiež vymazať údaje Chromu z tohto zariadenia</translation>
 <translation id="8015452622527143194">Vrátenie obsahu stránky na predvolenú veľkosť</translation>
+<translation id="8015780634880457457">Google môže skontrolovať, či vaše heslá boli súčasťou porušenia ochrany údajov.</translation>
 <translation id="802154636333426148">Stiahnutie zlyhalo</translation>
 <translation id="8026334261755873520">Vymazať dáta prehliadania</translation>
 <translation id="8035133914807600019">Nový priečinok…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Heslá sa nepodarilo exportovať</translation>
 <translation id="8447861592752582886">Odvolať povolenie pre zariadenie</translation>
 <translation id="8461694314515752532">Šifrovať synchronizované údaje pomocou vlastnej prístupovej frázy synchronizácie</translation>
+<translation id="8466613982764129868">Skontrolujte, či je zariadenie <ph name="TARGET_DEVICE_NAME" /> pripojené k internetu</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">K dispozícii offline</translation>
 <translation id="8489271220582375723">Otvorenie stránky História</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Odhlásenie zo spravovaného účtu</translation>
 <translation id="9204836675896933765">Zostáva 1 súbor</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Nedá sa volať</translation>
 <translation id="9219103736887031265">Obrázky</translation>
 <translation id="926205370408745186">Odstránenie aktivity v Chrome z digitálnej rovnováhy</translation>
 <translation id="932327136139879170">Domov</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
index 708ef85d..16a9a245 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Odpri vse</translation>
 <translation id="1409426117486808224">Poenostavljen pogled za odprte zavihke</translation>
 <translation id="1409879593029778104">Prenos datoteke <ph name="FILE_NAME" /> je bil preprečen, ker datoteka že obstaja.</translation>
+<translation id="1413136574162415971">Google lahko preveri, ali so bila vaša gesla del podatkovne kršitve. To je vklopljeno, če se prijavite z računom Google in vklopite sinhronizacijo.</translation>
 <translation id="1414981605391750300">Vzpostavljanje stika z Googlom. To lahko traja kakšno minuto …</translation>
 <translation id="1416550906796893042">Različica aplikacije</translation>
 <translation id="1430915738399379752">Natisni</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Zvok</translation>
 <translation id="2096012225669085171">Sinhronizacija in prilagajanje med napravami</translation>
 <translation id="2100273922101894616">Samodejna prijava</translation>
+<translation id="2100314319871056947">Poskusite deliti besedilo v manjših kosih</translation>
 <translation id="2107397443965016585">Prikaži poziv, preden se spletnim mestom dovoli predvajanje zaščitene vsebine (priporočeno)</translation>
 <translation id="2111511281910874386">Pojdi na stran</translation>
 <translation id="2122601567107267586">Aplikacije ni bilo mogoče odpreti</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Dotaknite se gumba za nazaj, če želite zapreti celozaslonski način.</translation>
 <translation id="2842985007712546952">Nadrejena mapa</translation>
 <translation id="2858138569776157458">Najb. prilj.</translation>
+<translation id="2860954141821109167">V tej napravi mora biti omogočena aplikacija Telefon</translation>
 <translation id="2870560284913253234">Spletno mesto</translation>
 <translation id="2874939134665556319">Prejšnja skladba</translation>
 <translation id="2876369937070532032">Googlu pošlje URL-je nekaterih strani, ki jih obiščete, kadar je ogrožena vaša varnost</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Ustvarjanje gesla</translation>
 <translation id="2996809686854298943">URL je obvezen</translation>
 <translation id="300526633675317032">S tem bo izbrisanih vseh <ph name="SIZE_IN_KB" /> shranjenih podatkov spletnega mesta.</translation>
+<translation id="3016635187733453316">Naprava mora biti povezana z internetom</translation>
 <translation id="3029613699374795922">Preneseno <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">Gesli se ne ujemata</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Poiščite pomoč<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Izberite slike</translation>
 <translation id="7233236755231902816">Če si želite splet ogledovati v svojem jeziku, posodobite Chrome na najnovejšo različico</translation>
 <translation id="7243308994586599757">Možnosti so na voljo pri dnu zaslona</translation>
+<translation id="7248069434667874558">Poskrbite, da ima naprava <ph name="TARGET_DEVICE_NAME" /> vklopljeno sinhronizacijo v Chromu</translation>
 <translation id="7250468141469952378">Št. izbranih: <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Blokirano spletno mesto</translation>
 <translation id="7290209999329137901">Preimenovanje ni na voljo</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Izklopljeno za to napravo</translation>
 <translation id="8013372441983637696">Prav tako izbriši podatke v Chromu iz te naprave</translation>
 <translation id="8015452622527143194">Vrnitev vsebine strani na privzeto velikost</translation>
+<translation id="8015780634880457457">Google lahko preveri, ali so bila vaša gesla del podatkovne kršitve</translation>
 <translation id="802154636333426148">Prenos ni uspel</translation>
 <translation id="8026334261755873520">Izbriši podatke brskanja</translation>
 <translation id="8035133914807600019">Nova mapa …</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Gesel ni mogoče izvoziti</translation>
 <translation id="8447861592752582886">Umik dovoljenja za dostop do naprave</translation>
 <translation id="8461694314515752532">Šifriranje sinhroniziranih podatkov z vašim geslom za sinhronizacijo</translation>
+<translation id="8466613982764129868">Naprava <ph name="TARGET_DEVICE_NAME" /> mora biti povezana v internet</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /><ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Na voljo brez povezave</translation>
 <translation id="8489271220582375723">Odpiranje strani z zgodovino</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Odjava iz upravljanega računa</translation>
 <translation id="9204836675896933765">Še 1 datoteka</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Ni mogoče klicati</translation>
 <translation id="9219103736887031265">Slike</translation>
 <translation id="926205370408745186">Odstranitev dejavnosti v Chromu iz Digitalne dobrobiti</translation>
 <translation id="932327136139879170">Domov</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
index c549629..29509e7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">Отвори све</translation>
 <translation id="1409426117486808224">Поједностављен приказ отворених картица</translation>
 <translation id="1409879593029778104">Преузимање датотеке <ph name="FILE_NAME" /> је спречено јер она већ постоји.</translation>
+<translation id="1413136574162415971">Google може да провери да ли су ваше лозинке биле део упада у податке. То ће се укључити када се пријавите помоћу Google налога и укључите синхронизацију.</translation>
 <translation id="1414981605391750300">Контактирамо Google. То може мало да потраје...</translation>
 <translation id="1416550906796893042">Верзија апликације</translation>
 <translation id="1430915738399379752">Штампај</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2096012225669085171">Синхронизација и персонализација на свим уређајима</translation>
 <translation id="2100273922101894616">Аутоматско пријављивање</translation>
+<translation id="2100314319871056947">Пробајте да делите текст у мањим сегментима</translation>
 <translation id="2107397443965016585">Упит се приказује пре него што дозволите сајтовима да пуштају заштићени садржај (препоручено)</translation>
 <translation id="2111511281910874386">Иди на страницу</translation>
 <translation id="2122601567107267586">Отварање апликације није успело</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Додирните дугме Назад да бисте изашли из режима целог екрана.</translation>
 <translation id="2842985007712546952">Надређени директоријум</translation>
 <translation id="2858138569776157458">Најбољи сајтови</translation>
+<translation id="2860954141821109167">Уверите се да је апликација Телефон омогућена на овом уређају</translation>
 <translation id="2870560284913253234">Сајт</translation>
 <translation id="2874939134665556319">Претходна песма</translation>
 <translation id="2876369937070532032">Шаље URL-ове неких страница које посећујете Google-у када је безбедност угрожена</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Направите приступну фразу</translation>
 <translation id="2996809686854298943">URL је обавезан</translation>
 <translation id="300526633675317032">Овим ћете обрисати цео меморијски простор веб-сајта од <ph name="SIZE_IN_KB" />.</translation>
+<translation id="3016635187733453316">Уверите се да је уређај повезан на интернет</translation>
 <translation id="3029613699374795922">Преузели сте <ph name="KBS" /> kB</translation>
 <translation id="3029704984691124060">Приступне фразе се не подударају</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Потражите помоћ<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Изаберите слике</translation>
 <translation id="7233236755231902816">Да бисте прегледали веб на свом језику, преузмите најновију верзију Chrome-а</translation>
 <translation id="7243308994586599757">Опције су доступне у дну екрана</translation>
+<translation id="7248069434667874558">Уверите се да је синхронизација за <ph name="TARGET_DEVICE_NAME" /> укључена у Chrome-у</translation>
 <translation id="7250468141469952378">Изабрали сте <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Сајт је блокиран</translation>
 <translation id="7290209999329137901">Промена назива није могућа</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Искључено је за овај уређај</translation>
 <translation id="8013372441983637696">Обриши Chrome податке и са овог уређаја</translation>
 <translation id="8015452622527143194">Враћање целокупног приказа странице на подразумевану величину</translation>
+<translation id="8015780634880457457">Google може да провери да ли су ваше лозинке биле део упада у податке</translation>
 <translation id="802154636333426148">Преузимање није успело</translation>
 <translation id="8026334261755873520">Обришите податке прегледања</translation>
 <translation id="8035133914807600019">Нови директоријум...</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Извоз лозинки није успео</translation>
 <translation id="8447861592752582886">Опозови дозволу за уређај</translation>
 <translation id="8461694314515752532">Шифрујте синхронизоване податке помоћу сопствене приступне фразе за синхронизацију</translation>
+<translation id="8466613982764129868">Уверите се да је <ph name="TARGET_DEVICE_NAME" /> повезан на интернет</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Доступно ван мреже</translation>
 <translation id="8489271220582375723">Отварање странице историја</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Одјавите се са налога којим се управља</translation>
 <translation id="9204836675896933765">Преостала је 1 датотека</translation>
 <translation id="9206873250291191720">А</translation>
+<translation id="9209888181064652401">Упућивање позива није успело</translation>
 <translation id="9219103736887031265">Слике</translation>
 <translation id="926205370408745186">Уклоните Chrome активности из Дигиталног благостања</translation>
 <translation id="932327136139879170">Почетна</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
index 087f93f..6d911ba6 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
@@ -66,6 +66,7 @@
 <translation id="1407135791313364759">எல்லாவற்றையும் திற</translation>
 <translation id="1409426117486808224">திறக்கப்பட்டுள்ள தாவல்களுக்கான எளிதாக்கப்பட்ட காட்சி</translation>
 <translation id="1409879593029778104">கோப்பு ஏற்கனவே இருப்பதால் <ph name="FILE_NAME" /> இன் பதிவிறக்கம் தடுக்கப்பட்டது.</translation>
+<translation id="1413136574162415971">உங்கள் கடவுச்சொற்கள் தரவு மீறலில் பாதிக்கப்பட்டுள்ளதா என்று Google சரிபார்க்கும். உங்கள் Google கணக்கின் மூலம் உள்நுழைந்து ஒத்திசைவை இயக்கினால் இது ஆன் ஆகும்.</translation>
 <translation id="1414981605391750300">Googleஐத் தொடர்புகொள்கிறது. இதற்குச் சில வினாடிகள் ஆகலாம்…</translation>
 <translation id="1416550906796893042">ஆப்ஸின் பதிப்பு</translation>
 <translation id="1430915738399379752">அச்சிடுக</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">ஒலி</translation>
 <translation id="2096012225669085171">பல சாதனங்களுக்கிடையில் ஒத்திசைக்கலாம், தனிப்பயனாக்கலாம்</translation>
 <translation id="2100273922101894616">தானாக உள்நுழையவும்</translation>
+<translation id="2100314319871056947">சிறுசிறு பகுதியாக உரையைப் பகிர முயலவும்</translation>
 <translation id="2107397443965016585">பாதுகாக்கப்பட்ட உள்ளடக்கத்தை இயக்குவதற்குத் தளங்களை அனுமதிக்கும் முன்பு அனுமதி கோரும் (பரிந்துரைக்கப்படுவது)</translation>
 <translation id="2111511281910874386">பக்கத்திற்குச் செல்லவும்</translation>
 <translation id="2122601567107267586">பயன்பாட்டைத் திறக்க முடியவில்லை</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">முழுத்திரையிலிருந்து வெளியேற, "முந்தையது" பொத்தானைத் தொடவும்.</translation>
 <translation id="2842985007712546952">மூலக் கோப்புறை</translation>
 <translation id="2858138569776157458">பிரபலமானவை</translation>
+<translation id="2860954141821109167">இந்தச் சாதனத்தில் ஃபோன் ஆப்ஸ் இயக்கப்பட்டுள்ளதை உறுதிசெய்து கொள்ளவும்</translation>
 <translation id="2870560284913253234">தளம்</translation>
 <translation id="2874939134665556319">முந்தைய ட்ராக்</translation>
 <translation id="2876369937070532032">ஆபத்தான தளங்களைப் பார்ப்பதால் உங்கள் பாதுகாப்பிற்கு ஆபத்து ஏற்படும்போது நீங்கள் பார்வையிடும் சில பக்கங்களின் URLகளை Googleளுக்கு அனுப்பும்</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">கடவுச்சொற்றொடரை உருவாக்கு</translation>
 <translation id="2996809686854298943">URL தேவை</translation>
 <translation id="300526633675317032">இணையதளச் சேமிப்பகத்தில் உள்ள <ph name="SIZE_IN_KB" /> தரவையும் இது அழிக்கும்.</translation>
+<translation id="3016635187733453316">இந்தச் சாதனம் இணையத்துடன் இணைக்கப்பட்டுள்ளதை உறுதி செய்யவும்</translation>
 <translation id="3029613699374795922"><ph name="KBS" /> கி.பை. பதிவிறக்கப்பட்டது</translation>
 <translation id="3029704984691124060">கடவுத்தொடர்கள் பொருந்தவில்லை</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />உதவி பெறுக<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">படங்களைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="7233236755231902816">உங்கள் மொழியில் இணையதளங்களைப் பார்க்க Chromeமின் சமீபத்திய பதிப்பைப் பெறுங்கள்</translation>
 <translation id="7243308994586599757">திரையின் கீழ்ப்பகுதிக்கு அருகில் கிடைக்கும் விருப்பங்கள்</translation>
+<translation id="7248069434667874558">Chromeமில் <ph name="TARGET_DEVICE_NAME" /> சாதன ஒத்திசைவு ஆன் செய்யப்பட்டுள்ளதை உறுதி செய்யவும்</translation>
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> தேர்ந்தெடுக்கப்பட்டன</translation>
 <translation id="7274013316676448362">தடுக்கப்பட்ட தளம்</translation>
 <translation id="7290209999329137901">இதை மறுபெயரிட இயலாது</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">இந்தச் சாதனத்திற்கு முடக்கப்பட்டுள்ளது</translation>
 <translation id="8013372441983637696">அத்துடன் இந்தச் சாதனத்திலிருந்து எனது Chrome தரவையும் அழி</translation>
 <translation id="8015452622527143194">பக்கத்திலுள்ள அனைத்தையும் இயல்பு அளவுக்கு மாற்றும்</translation>
+<translation id="8015780634880457457">உங்கள் கடவுச்சொற்கள் தரவு மீறலில் பாதிக்கப்பட்டுள்ளதா என்று Google சரிபார்க்கும்</translation>
 <translation id="802154636333426148">பதிவிறக்க முடியவில்லை</translation>
 <translation id="8026334261755873520">உலாவிய தரவை அழி</translation>
 <translation id="8035133914807600019">புதிய கோப்புறை…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">கடவுச்சொற்களை ஏற்ற முடியவில்லை</translation>
 <translation id="8447861592752582886">சாதன அனுமதியை ரத்துசெய்யும்</translation>
 <translation id="8461694314515752532">ஒத்திசைக்கப்பட்ட தரவை எனது ஒத்திசைவுக் கடவுச்சொற்றொடர் மூலம் என்கிரிப்ட் செய்</translation>
+<translation id="8466613982764129868"><ph name="TARGET_DEVICE_NAME" /> சாதனம் இணையத்துடன் இணைக்கப்பட்டுள்ளதை உறுதி செய்யவும்</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">ஆஃப்லைனில் இருக்கிறது</translation>
 <translation id="8489271220582375723">வரலாறு பக்கத்தைத் திறக்கும்</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">நிர்வகிக்கப்படும் கணக்கிலிருந்து வெளியேறு</translation>
 <translation id="9204836675896933765">1 கோப்பு மீதமுள்ளது</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">அழைப்புகளைச் செய்ய இயலவில்லை</translation>
 <translation id="9219103736887031265">படங்கள்</translation>
 <translation id="926205370408745186">Chrome செயல்பாட்டை டிஜிட்டல் வெல்பீயிங்கிலிருந்து நீக்குதல்</translation>
 <translation id="932327136139879170">முகப்பு</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
index 239233f..2256c116 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -66,12 +66,13 @@
 <translation id="1407135791313364759">เปิดทั้งหมด</translation>
 <translation id="1409426117486808224">มุมมองอย่างง่ายสำหรับแท็บที่เปิดไว้</translation>
 <translation id="1409879593029778104">ระบบป้องกันการดาวน์โหลด <ph name="FILE_NAME" /> เพราะมีไฟล์นี้อยู่แล้ว</translation>
+<translation id="1413136574162415971">Google จะตรวจสอบได้ว่ารหัสผ่านของคุณรวมอยู่ในการละเมิดข้อมูลหรือไม่ ฟีเจอร์นี้จะเปิดขึ้นเมื่อคุณลงชื่อเข้าใช้ด้วยบัญชี Google และเปิดการซิงค์</translation>
 <translation id="1414981605391750300">กำลังติดต่อ Google อาจใช้เวลาประมาณ 1 นาที…</translation>
 <translation id="1416550906796893042">เวอร์ชันของแอปพลิเคชัน</translation>
 <translation id="1430915738399379752">พิมพ์</translation>
 <translation id="1445680696957526815">คอมโพเนนต์ของ Chrome ไม่สามารถทำงานร่วมกันได้ Chrome อาจกำลังอัปเกรด โปรดรอสักครู่แล้วลองอีกครั้ง หากยังมีปัญหาอยู่ ให้ลองถอนการติดตั้งและติดตั้ง Chrome ใหม่อีกครั้ง</translation>
 <translation id="1446450296470737166">ควบคุมอุปกรณ์ MIDI ได้สมบูรณ์</translation>
-<translation id="1450753235335490080">แชร์<ph name="CONTENT_TYPE" />ไม่ได้</translation>
+<translation id="1450753235335490080">แชร์<ph name="CONTENT_TYPE" />ไม่สำเร็จ</translation>
 <translation id="145097072038377568">ปิดในการตั้งค่า Android</translation>
 <translation id="1477626028522505441">การดาวน์โหลด <ph name="FILE_NAME" /> ล้มเหลวเพราะเซิร์ฟเวอร์มีปัญหา</translation>
 <translation id="1501480321619201731">ลบกลุ่ม</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">เสียง</translation>
 <translation id="2096012225669085171">ซิงค์และปรับแต่งในอุปกรณ์ทุกเครื่อง</translation>
 <translation id="2100273922101894616">ลงชื่อเข้าใช้อัตโนมัติ</translation>
+<translation id="2100314319871056947">ลองแชร์ข้อความโดยแบ่งเป็นส่วนเล็กๆ หลายส่วน</translation>
 <translation id="2107397443965016585">ถามก่อนอนุญาตให้เว็บไซต์เล่นเนื้อหาที่ได้รับความคุ้มครอง (แนะนำ)</translation>
 <translation id="2111511281910874386">ไปที่หน้า</translation>
 <translation id="2122601567107267586">เปิดแอปไม่ได้</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">แตะปุ่มกลับเพื่อออกจากโหมดเต็มหน้าจอ</translation>
 <translation id="2842985007712546952">โฟลเดอร์ระดับบนสุด</translation>
 <translation id="2858138569776157458">เว็บไซต์อันดับสูงสุด</translation>
+<translation id="2860954141821109167">ตรวจสอบว่ามีการเปิดใช้แอปโทรศัพท์ในอุปกรณ์นี้แล้ว</translation>
 <translation id="2870560284913253234">เว็บไซต์</translation>
 <translation id="2874939134665556319">แทร็กก่อนหน้า</translation>
 <translation id="2876369937070532032">ส่ง URL ของหน้าบางส่วนที่คุณเข้าชมไปให้ Google เมื่อการรักษาความปลอดภัยมีความเสี่ยง</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">สร้างรหัสผ่าน</translation>
 <translation id="2996809686854298943">ต้องระบุ URL</translation>
 <translation id="300526633675317032">การดำเนินการนี้จะล้างพื้นที่เก็บข้อมูลเว็บไซต์ทั้ง <ph name="SIZE_IN_KB" /></translation>
+<translation id="3016635187733453316">ตรวจสอบว่าอุปกรณ์นี้เชื่อมต่ออินเทอร์เน็ตอยู่</translation>
 <translation id="3029613699374795922">ดาวน์โหลดแล้ว <ph name="KBS" /> KB</translation>
 <translation id="3029704984691124060">รหัสผ่านไม่ตรงกัน</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />ขอความช่วยเหลือ<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">เลือกภาพ</translation>
 <translation id="7233236755231902816">โปรดอัปเดต Chrome เป็นเวอร์ชันล่าสุดเพื่อดูเว็บเป็นภาษาของคุณ</translation>
 <translation id="7243308994586599757">มีตัวเลือกอยู่ทางด้านล่างของหน้าจอ</translation>
+<translation id="7248069434667874558">ตรวจสอบว่าการซิงค์ <ph name="TARGET_DEVICE_NAME" /> ใน Chrome เปิดอยู่</translation>
 <translation id="7250468141469952378">เลือกไว้ <ph name="ITEM_COUNT" /> รายการ</translation>
 <translation id="7274013316676448362">เว็บไซต์ที่ถูกบล็อก</translation>
 <translation id="7290209999329137901">เปลี่ยนชื่อไม่ได้</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">ปิดสำหรับอุปกรณ์นี้</translation>
 <translation id="8013372441983637696">ล้างข้อมูล Chrome ของคุณออกจากอุปกรณ์นี้ด้วย</translation>
 <translation id="8015452622527143194">เปลี่ยนทุกอย่างบนหน้ากลับไปเป็นขนาดเริ่มต้น</translation>
+<translation id="8015780634880457457">Google จะตรวจสอบได้ว่ารหัสผ่านของคุณรวมอยู่ในการละเมิดข้อมูลหรือไม่</translation>
 <translation id="802154636333426148">การดาวน์โหลดล้มเหลว</translation>
 <translation id="8026334261755873520">ล้างข้อมูลการท่องเว็บ</translation>
 <translation id="8035133914807600019">โฟลเดอร์ใหม่…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">ส่งออกรหัสผ่านไม่ได้</translation>
 <translation id="8447861592752582886">เพิกถอนสิทธิ์ของอุปกรณ์</translation>
 <translation id="8461694314515752532">เข้ารหัสลับข้อมูลที่ซิงค์ด้วยรหัสผ่านการซิงค์ของคุณเอง</translation>
+<translation id="8466613982764129868">ตรวจสอบว่า <ph name="TARGET_DEVICE_NAME" /> เชื่อมต่ออินเทอร์เน็ตอยู่</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">ใช้งานแบบออฟไลน์ได้</translation>
 <translation id="8489271220582375723">เปิดหน้าประวัติการเข้าชม</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">ออกจากระบบบัญชีที่มีการจัดการ</translation>
 <translation id="9204836675896933765">เหลืออีก 1 ไฟล์</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">โทรออกไม่ได้</translation>
 <translation id="9219103736887031265">ภาพ</translation>
 <translation id="926205370408745186">นำกิจกรรม Chrome ออกจากไลฟ์สไตล์ดิจิทัล</translation>
 <translation id="932327136139879170">หน้าแรก</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
index 9995957d1..e38312f3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -41,7 +41,7 @@
 <translation id="1258753120186372309">Дудл Google: <ph name="DOODLE_DESCRIPTION" /></translation>
 <translation id="1260236875608242557">Пошук і огляд</translation>
 <translation id="1264974993859112054">Спорт</translation>
-<translation id="1266864766717917324">Не вдалося надіслати контент (<ph name="CONTENT_TYPE" />)</translation>
+<translation id="1266864766717917324">Не вдалося надіслати: <ph name="CONTENT_TYPE" /></translation>
 <translation id="1272079795634619415">Зупинити</translation>
 <translation id="1283039547216852943">Торкніться, щоб розгорнути</translation>
 <translation id="1285320974508926690">Ніколи не перекладати цей сайт</translation>
@@ -66,12 +66,13 @@
 <translation id="1407135791313364759">Відкрити все</translation>
 <translation id="1409426117486808224">Спрощений перегляд відкритих вкладок</translation>
 <translation id="1409879593029778104">Файл <ph name="FILE_NAME" /> не завантажено, оскільки він уже є.</translation>
+<translation id="1413136574162415971">Ми можемо перевірити, чи ваші паролі не було розкрито внаслідок порушення безпеки даних. Цю функцію буде ввімкнено, коли ви ввійдете в обліковий запис Google і ввімкнете синхронізацію.</translation>
 <translation id="1414981605391750300">З’єднання з Google. Це може зайняти хвилину…</translation>
 <translation id="1416550906796893042">Версія додатка</translation>
 <translation id="1430915738399379752">Друк</translation>
 <translation id="1445680696957526815">Компоненти Chrome несумісні одне з одним. Веб-переглядач може оновлюватися, спробуйте через декілька хвилин. Якщо проблема не зникне, видаліть Chrome і встановіть його знову.</translation>
 <translation id="1446450296470737166">Повний контроль пристроїв MIDI</translation>
-<translation id="1450753235335490080">Не вдалося надіслати контент (<ph name="CONTENT_TYPE" />)</translation>
+<translation id="1450753235335490080">Не вдалося надіслати: <ph name="CONTENT_TYPE" /></translation>
 <translation id="145097072038377568">Вимкнено в налаштуваннях Android</translation>
 <translation id="1477626028522505441">Файл <ph name="FILE_NAME" /> не завантажено через проблеми із сервером.</translation>
 <translation id="1501480321619201731">Видалити групу</translation>
@@ -160,6 +161,7 @@
 <translation id="2091887806945687916">Сигнал</translation>
 <translation id="2096012225669085171">Синхронізація та персоналізація на всіх пристроях</translation>
 <translation id="2100273922101894616">Автоматичний вхід</translation>
+<translation id="2100314319871056947">Спробуйте надіслати текст меншими частинами</translation>
 <translation id="2107397443965016585">Запитувати, перш ніж дозволяти сайтам відтворювати захищений вміст (рекомендовано)</translation>
 <translation id="2111511281910874386">Перейти на сторінку</translation>
 <translation id="2122601567107267586">Не вдалося відкрити додаток</translation>
@@ -253,6 +255,7 @@
 <translation id="2836148919159985482">Щоб вийти з повноекранного режиму, торкніться кнопки "Назад".</translation>
 <translation id="2842985007712546952">Батьківська папка</translation>
 <translation id="2858138569776157458">Популярні сайти</translation>
+<translation id="2860954141821109167">Переконайтеся, що на цьому пристрої ввімкнено додаток Телефон</translation>
 <translation id="2870560284913253234">Сайт</translation>
 <translation id="2874939134665556319">Попередня композиція</translation>
 <translation id="2876369937070532032">Надсилає в Google URL-адреси деяких відвіданих сторінок, коли ваша безпека під загрозою</translation>
@@ -277,6 +280,7 @@
 <translation id="2996291259634659425">Створити парольну фразу</translation>
 <translation id="2996809686854298943">Потрібна URL-адреса</translation>
 <translation id="300526633675317032">Буде видалено всі дані сайтів (<ph name="SIZE_IN_KB" />).</translation>
+<translation id="3016635187733453316">Перевірте, чи пристрій підключено до Інтернету</translation>
 <translation id="3029613699374795922">Завантажено <ph name="KBS" /> КБ</translation>
 <translation id="3029704984691124060">Парольні фрази не збігаються</translation>
 <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Довідка<ph name="END_LINK" /></translation>
@@ -841,6 +845,7 @@
 <translation id="723171743924126238">Вибрати зображення</translation>
 <translation id="7233236755231902816">Щоб переглядати сторінки вашою мовою, установіть останню версію Chrome</translation>
 <translation id="7243308994586599757">Опції можна знайти внизу екрана</translation>
+<translation id="7248069434667874558">Переконайтеся, що на пристрої <ph name="TARGET_DEVICE_NAME" /> увімкнено синхронізацію в Chrome</translation>
 <translation id="7250468141469952378">Вибрано <ph name="ITEM_COUNT" /></translation>
 <translation id="7274013316676448362">Заблокований сайт</translation>
 <translation id="7290209999329137901">Не можна перейменувати</translation>
@@ -955,6 +960,7 @@
 <translation id="8007176423574883786">Вимкнено для цього пристрою</translation>
 <translation id="8013372441983637696">Також видалити дані Chrome із цього пристрою</translation>
 <translation id="8015452622527143194">Відновити розміри всіх елементів за умовчанням</translation>
+<translation id="8015780634880457457">Ми можемо перевірити, чи не було ваші паролі розкрито внаслідок порушення безпеки даних</translation>
 <translation id="802154636333426148">Не вдалося завантажити</translation>
 <translation id="8026334261755873520">Очистити історію</translation>
 <translation id="8035133914807600019">Нова папка…</translation>
@@ -1017,6 +1023,7 @@
 <translation id="8445448999790540984">Не вдається експортувати паролі</translation>
 <translation id="8447861592752582886">Скасувати доступ до пристрою</translation>
 <translation id="8461694314515752532">Шифрувати синхронізовані дані за допомогою власної парольної фрази</translation>
+<translation id="8466613982764129868">Переконайтеся, що пристрій <ph name="TARGET_DEVICE_NAME" /> підключено до Інтернету</translation>
 <translation id="8485434340281759656"><ph name="FILE_SIZE" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation>
 <translation id="8487700953926739672">Доступ у режимі офлайн</translation>
 <translation id="8489271220582375723">Відкрити сторінку "Історія"</translation>
@@ -1107,6 +1114,7 @@
 <translation id="9188680907066685419">Вийти з керованого облікового запису</translation>
 <translation id="9204836675896933765">Залишився 1 файл</translation>
 <translation id="9206873250291191720">A</translation>
+<translation id="9209888181064652401">Неможливо здійснювати виклики</translation>
 <translation id="9219103736887031265">Зображення</translation>
 <translation id="926205370408745186">Видалити активність у Chrome із Цифрового добробуту</translation>
 <translation id="932327136139879170">Домашня сторінка</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java
index 623312a..a9783a4 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java
@@ -176,7 +176,10 @@
         expandSheet();
         openNewTabInBackground();
 
-        assertEquals("The bottom sheet should be expanded.", BottomSheet.SheetState.HALF,
+        @BottomSheet.SheetState
+        int expectedState = mBottomSheet.isSmallScreen() ? BottomSheet.SheetState.FULL
+                                                         : BottomSheet.SheetState.HALF;
+        assertEquals("The bottom sheet should be expanded.", expectedState,
                 mBottomSheet.getSheetState());
         assertEquals("The bottom sheet is showing incorrect content.", mLowPriorityContent,
                 mBottomSheet.getCurrentSheetContent());
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskSchedulerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskSchedulerTest.java
index ae09311..dbd9f67 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskSchedulerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTaskSchedulerTest.java
@@ -77,6 +77,7 @@
         assertEquals(taskClass, info.getBackgroundTaskClass());
         assertTrue(info.isPersisted());
         assertFalse(info.isPeriodic());
+        assertTrue(info.getOneOffInfo().expiresAfterWindowEndTime());
         assertEquals(TaskInfo.NetworkType.ANY, info.getRequiredNetworkType());
 
         long expectedSoonestDelayTime = info.getExtras().getLong(
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
index fdf127d8..21efd081 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
@@ -71,14 +71,13 @@
 
         mIdentityMutator = mock(IdentityMutator.class);
 
-        mIdentityManager =
-                spy(new IdentityManager(0 /* nativeIdentityManager */, mIdentityMutator));
+        mIdentityManager = spy(new IdentityManager(0 /* nativeIdentityManager */));
 
         AndroidSyncSettings androidSyncSettings = mock(AndroidSyncSettings.class);
 
         mSigninManager = new SigninManager(ContextUtils.getApplicationContext(),
                 0 /* nativeSigninManagerAndroid */, mAccountTrackerService, mIdentityManager,
-                androidSyncSettings);
+                mIdentityMutator, androidSyncSettings);
 
         mAccount = new CoreAccountInfo(new CoreAccountId("gaia-id-user"),
                 AccountManagerFacade.createAccountFromName("user@domain.com"), "gaia-id-user");
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb
index 44af3df..2d43c53 100644
--- a/chrome/app/resources/chromium_strings_ar.xtb
+++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">‏هل ترغب في ربط بياناتك في Chromium بهذا الحساب؟</translation>
 <translation id="4271805377592243930">‏الحصول على مساعدة في Chromium</translation>
 <translation id="4285930937574705105">‏تعذّر إتمام عملية التثبيت بسبب خطأ غير محدد. إذا كان Chromium في حالة التشغيل حاليًا، فالرجاء إغلاقه وإعادة المحاولة.</translation>
+<translation id="4371648796594901282">‏بالنسبة إلى تفاصيل نظام تشغيل Chromium، يُرجى الاطّلاع على <ph name="LINK_BEGIN" />
+      لمحة عن نظام التشغيل Chromium<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">‏هل تريد الخروج من Chromium على أي حال؟</translation>
 <translation id="4415566066719264597">‏السماح بتشغيل Chromium في الخلفية</translation>
 <translation id="4423735387467980091">‏تخصيص Chromium والتحكم فيه</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{‏يتوفر تحديث لمتصفح Chromium}=1{‏يتوفر تحديث لمتصفح Chromium}two{‏يتوفر تحديث لمتصفح Chromium منذ يومين}few{‏يتوفر تحديث لمتصفح Chromium منذ # أيام}many{‏يتوفر تحديث لمتصفح Chromium منذ # يومًا}other{‏يتوفر تحديث لمتصفح Chromium منذ # يوم}}</translation>
 <translation id="5631814766731275228">‏الاسم والصورة على Chromium</translation>
 <translation id="5634636535844844681">‏يتطلب Chromium نظام التشغيل Windows 7 أو إصدارًا أحدث.</translation>
+<translation id="5653831366781983928">‏يُرجى إعادة تشغيل Chromium الآن</translation>
 <translation id="5680901439334282664">‏تسجيل الدخول إلى Chromium</translation>
 <translation id="5698481217667032250">‏عرض Chromium بهذه اللغة</translation>
 <translation id="5820394555380036790">‏نظام التشغيل Chromium</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">‏تح&amp;ديث Chromium</translation>
 <translation id="6734291798041940871">‏يتم تثبيت Chromium بالفعل لجميع المستخدمين على جهاز الكمبيوتر.</translation>
 <translation id="6810143991807788455">‏ساعد في تحسين Chromium بالإبلاغ عن الإعدادات الحالية</translation>
+<translation id="6847869444787758381">‏يتم إعلامك من خلال Chromium في حال تم اختراق كلمات المرور في أي وقت.</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">‏Google Pay (تم النسخ إلى Chromium)</translation>
 <translation id="6868056391275687737">‏هناك نُسخ أخرى من Chromium قيد التشغيل. يُرجى إغلاقها لإجراء التحديث.</translation>
@@ -194,7 +198,7 @@
 <translation id="753534427205733210">{0,plural, =1{‏ستتم إعادة تشغيل Chromium في غضون دقيقة واحدة}zero{‏ستتم إعادة تشغيل Chromium في غضون # دقيقة}two{‏ستتم إعادة تشغيل Chromium في غضون دقيقتين}few{‏ستتم إعادة تشغيل Chromium في غضون # دقائق}many{‏ستتم إعادة تشغيل Chromium في غضون # دقيقةً}other{‏ستتم إعادة تشغيل Chromium في غضون # دقيقة}}</translation>
 <translation id="7549178288319965365">‏حول نظام التشغيل Chromium</translation>
 <translation id="7561906087460245826">‏محو البيانات من Chromium أيضًا (<ph name="URL" />)</translation>
-<translation id="7585853947355360626">‏في حال عدم عرض إعداد على هذه الصفحة، ابحث عن <ph name="LINK_BEGIN" />
+<translation id="7585853947355360626">‏في حال عدم عرض إعداد على هذه الصفحة، انتقل إلى <ph name="LINK_BEGIN" />
     إعدادات نظام التشغيل Chromium<ph name="LINK_END" /></translation>
 <translation id="761356813943268536">‏يستخدم Chromium الكاميرا والميكروفون.</translation>
 <translation id="7617377681829253106">‏Chromium أصبح أفضل</translation>
@@ -229,7 +233,7 @@
 <translation id="8619360774459241877">‏جارٍ إطلاق Chromium...</translation>
 <translation id="8621669128220841554">‏تعذّر التثبيت نظرًا لحدوث خطأ غير محدد. يُرجى إعادة تنزيل Chromium.</translation>
 <translation id="8667808506758191620">جهاز <ph name="DEVICE_TYPE" /> مُحدّث.</translation>
-<translation id="8682540261359803721">‏في حال عدم عرض إعداد على هذه الصفحة، ابحث عن <ph name="LINK_BEGIN" />
+<translation id="8682540261359803721">‏في حال عدم عرض إعداد على هذه الصفحة، اذهب إلى <ph name="LINK_BEGIN" />
     إعدادات متصفِّح Chromium<ph name="LINK_END" /></translation>
 <translation id="8697124171261953979">‏كما أنها تتحكم في الصفحة التي تظهر عند تشغيل Chromium أو إجراء بحث من المربع متعدد الاستخدامات.</translation>
 <translation id="8704119203788522458">‏هذا هو Chromium الخاص بك</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb
index 952170d..1efc603 100644
--- a/chrome/app/resources/chromium_strings_bg.xtb
+++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -88,6 +88,8 @@
 <translation id="4230135487732243613">Да се свържат ли данните ви в Chromium с този профил?</translation>
 <translation id="4271805377592243930">Получаване на помощ за Chromium</translation>
 <translation id="4285930937574705105">Инсталирането не бе успешно поради неизвестна грешка. Ако Chromium понастоящем се изпълнява, моля, затворете го и опитайте отново.</translation>
+<translation id="4371648796594901282">За подробности относно Chromium OS, моля, вижте
+<ph name="LINK_BEGIN" />Всичко за Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Искате ли да излезете от Chromium въпреки това?</translation>
 <translation id="4415566066719264597">Разрешаване на Chromium да се изпълнява на заден план</translation>
 <translation id="4423735387467980091">Персонализиране и контролиране на Chromium</translation>
@@ -120,6 +122,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Налице е актуализация за Chromium}=1{Налице е актуализация за Chromium}other{Налице е актуализация за Chromium от # дни}}</translation>
 <translation id="5631814766731275228">Име и снимка за Chromium</translation>
 <translation id="5634636535844844681">За Chromium се изисква Windows 7 или по-нова версия.</translation>
+<translation id="5653831366781983928">Моля, рестартирайте Chromium сега</translation>
 <translation id="5680901439334282664">Влезте в Chromium</translation>
 <translation id="5698481217667032250">Показване на Chromium на този език</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -160,6 +163,7 @@
 <translation id="6734080038664603509">Актуализиране на &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium вече е инсталиран за всички потребители на компютъра ви.</translation>
 <translation id="6810143991807788455">Помогнете за подобряването на Chromium, като подадете сигнал за текущите настройки</translation>
+<translation id="6847869444787758381">Chromium ви уведомява, ако паролите ви бъдат компрометирани</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (копирано в Chromium)</translation>
 <translation id="6868056391275687737">Изпълняват се други копия на Chromium. Затворете ги, за да актуализирате.</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb
index c445ff6..90503d2 100644
--- a/chrome/app/resources/chromium_strings_ca.xtb
+++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -90,6 +90,7 @@
 <translation id="4230135487732243613">Voleu enllaçar les vostres dades de Chromium amb aquest compte?</translation>
 <translation id="4271805377592243930">Obtén ajuda per a Chromium</translation>
 <translation id="4285930937574705105">S'ha produït un error no especificat durant la instal·lació. Si Chromium s'està executant en aquests moments, tanqueu-lo i torneu-ho a provar.</translation>
+<translation id="4371648796594901282">Per obtenir informació sobre Chromium OS, consulta <ph name="LINK_BEGIN" />Sobre Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Vols sortir de Chromium igualment?</translation>
 <translation id="4415566066719264597">Permet que Chromium s'executi en segon pla</translation>
 <translation id="4423735387467980091">Personalitza i controla Chromium</translation>
@@ -122,6 +123,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Hi ha una actualització de Chromium disponible}=1{Hi ha una actualització de Chromium disponible}other{Fa # dies que hi ha una actualització de Chromium disponible}}</translation>
 <translation id="5631814766731275228">Nom i foto de Chromium</translation>
 <translation id="5634636535844844681">Chromium requereix Windows 7 o una versió posterior.</translation>
+<translation id="5653831366781983928">Reinicia Chromium ara</translation>
 <translation id="5680901439334282664">Inicia la sessió a Chromium</translation>
 <translation id="5698481217667032250">Mostra Chromium en aquest idioma</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +166,7 @@
 <translation id="6734080038664603509">Actualitza &amp;Chromium</translation>
 <translation id="6734291798041940871">Ja tens instal·lat Chromium per a tots els usuaris de l'ordinador.</translation>
 <translation id="6810143991807788455">Informa de la configuració actual per ajudar-nos a millorar Chromium</translation>
+<translation id="6847869444787758381">Chromium et permet saber si les contrasenyes s'han posat en perill</translation>
 <translation id="6857782730669500492">Chromium: <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiada a Chromium)</translation>
 <translation id="6868056391275687737">S'estan executant altres còpies de Chromium. Tanca-les per poder fer l'actualització.</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb
index d022591..974d109 100644
--- a/chrome/app/resources/chromium_strings_cs.xtb
+++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -92,6 +92,7 @@
 <translation id="4230135487732243613">Opravdu chcete propojit údaje prohlížeče Chromium s tímto účtem?</translation>
 <translation id="4271805377592243930">Pomoc s prohlížečem Chromium</translation>
 <translation id="4285930937574705105">Došlo k nespecifikované chybě, instalace se nezdařila. Pokud je prohlížeč Chromium právě spuštěný, zavřete jej prosím a zkuste to znovu.</translation>
+<translation id="4371648796594901282">Podrobnosti o systému Chromium OS najdete na stránce <ph name="LINK_BEGIN" />O operačním systému Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Přesto Chromium ukončit?</translation>
 <translation id="4415566066719264597">Nechat Chromium běžet na pozadí</translation>
 <translation id="4423735387467980091">Přizpůsobit a ovládat Chromium</translation>
@@ -124,6 +125,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Je k dispozici aktualizace prohlížeče Chromium}=1{Je k dispozici aktualizace prohlížeče Chromium}few{Již # dny je k dispozici aktualizace prohlížeče Chromium}many{Již # dne je k dispozici aktualizace prohlížeče Chromium}other{Již # dní je k dispozici aktualizace prohlížeče Chromium}}</translation>
 <translation id="5631814766731275228">Jméno a fotka v profilu Chromium</translation>
 <translation id="5634636535844844681">Chromium vyžaduje systém Windows 7 nebo vyšší.</translation>
+<translation id="5653831366781983928">Restartujte Chromium</translation>
 <translation id="5680901439334282664">přihlaste se do prohlížeče Chromium</translation>
 <translation id="5698481217667032250">Zobrazit Chromium v tomto jazyce</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -166,6 +168,7 @@
 <translation id="6734080038664603509">Aktualizovat &amp;Chromium</translation>
 <translation id="6734291798041940871">Prohlížeč Chromium je na tomto počítači již nainstalován pro všechny uživatele.</translation>
 <translation id="6810143991807788455">Pomoci s vylepšováním prohlížeče Chromium prostřednictvím nahlášení aktuálního nastavení</translation>
+<translation id="6847869444787758381">Pokud vaše hesla někdo prolomí, Chromium vás o tom bude informovat</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (zkopírováno do prohlížeče Chromium)</translation>
 <translation id="6868056391275687737">Jsou spuštěné další kopie prohlížeče Chromium. Chcete-li jej aktualizovat, zavřete je.</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb
index 0788733..eeb6cd8 100644
--- a/chrome/app/resources/chromium_strings_da.xtb
+++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Vil du linke dine Chromium-data til denne konto?</translation>
 <translation id="4271805377592243930">Få hjælp til Chromium</translation>
 <translation id="4285930937574705105">Installationen mislykkedes på grund af en ikke-specificeret fejl. Hvis Chromium kører, skal du lukke programmet og prøve igen.</translation>
+<translation id="4371648796594901282">Få flere oplysninger om Chromium OS i <ph name="LINK_BEGIN" />
+      Om Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Vil du afslutte Chromium alligevel?</translation>
 <translation id="4415566066719264597">Lad Chromium køre i baggrunden</translation>
 <translation id="4423735387467980091">Tilpas og kontrollér Chromium</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Der er en tilgængelig Chromium-opdatering}=1{Der er en tilgængelig Chromium-opdatering}one{En Chromium-opdatering har været tilgængelig i # dag}other{En Chromium-opdatering har været tilgængelig i # dage}}</translation>
 <translation id="5631814766731275228">Chromium-navn og -billede</translation>
 <translation id="5634636535844844681">Chromium kræver Windows 7 eller nyere.</translation>
+<translation id="5653831366781983928">Genstart Chromium nu</translation>
 <translation id="5680901439334282664">log ind på Chromium</translation>
 <translation id="5698481217667032250">Vis Chromium på dette sprog</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Opdater &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium er allerede installeret for alle brugere på computeren.</translation>
 <translation id="6810143991807788455">Hjælp med at gøre Chromium bedre ved at rapportere de aktuelle indstillinger</translation>
+<translation id="6847869444787758381">Chromium giver dig besked, hvis dine adgangskoder kompromitteres</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (kopieret til Chromium)</translation>
 <translation id="6868056391275687737">Der kører andre kopier af Chromium. Luk dem for at fortsætte opdateringen.</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index edc86bf9..c61defd1 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Ihre Chromium-Daten mit diesem Konto verknüpfen?</translation>
 <translation id="4271805377592243930">Hilfe für Chromium aufrufen</translation>
 <translation id="4285930937574705105">Die Installation konnte aufgrund eines undefinierten Fehlers nicht abgeschlossen werden. Falls Chromium derzeit ausgeführt wird, schließen Sie es bitte und versuchen Sie es erneut.</translation>
+<translation id="4371648796594901282">Details zu Chromium OS finden Sie unter <ph name="LINK_BEGIN" />
+      Über Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Chromium trotzdem beenden?</translation>
 <translation id="4415566066719264597">Chromium im Hintergrund ausführen</translation>
 <translation id="4423735387467980091">Chromium anpassen und einstellen</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Ein Chromium-Update ist verfügbar}=1{Ein Chromium-Update ist verfügbar}other{Ein Chromium-Update ist seit # Tagen verfügbar}}</translation>
 <translation id="5631814766731275228">Chromium-Name und -Bild</translation>
 <translation id="5634636535844844681">Für Chromium ist Windows 7 oder höher erforderlich.</translation>
+<translation id="5653831366781983928">Starten Sie Chromium jetzt neu</translation>
 <translation id="5680901439334282664">In Chromium anmelden</translation>
 <translation id="5698481217667032250">Chromium in dieser Sprache anzeigen</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">&amp;Chromium aktualisieren</translation>
 <translation id="6734291798041940871">Chromium ist bereits für alle Nutzer auf Ihrem Computer installiert.</translation>
 <translation id="6810143991807788455">Helfen Sie uns mit Ihrem Feedback zu den aktuellen Einstellungen bei der Verbesserung von Chromium.</translation>
+<translation id="6847869444787758381">Chromium wird Sie informieren, sollten Ihre Passwörter nicht mehr sicher sein</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (in Chromium kopiert)</translation>
 <translation id="6868056391275687737">Andere Instanzen von Chromium sind noch aktiv. Bitte schließen Sie diese, um den Browser zu aktualisieren.</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb
index 1bb650a..320f793 100644
--- a/chrome/app/resources/chromium_strings_el.xtb
+++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Να συνδεθούν τα δεδομένα σας στο Chromium με αυτόν το λογαριασμό;</translation>
 <translation id="4271805377592243930">Λήψη βοήθειας σχετικά με το Chromium</translation>
 <translation id="4285930937574705105">Η εγκατάσταση απέτυχε λόγω απροσδιόριστου σφάλματος. Εάν το Chromium εκτελείται αυτήν τη στιγμή, κλείστε το και δοκιμάστε ξανά.</translation>
+<translation id="4371648796594901282">Για λεπτομέρειες σχετικά με το Chromium OS, ανατρέξτε στην ενότητα <ph name="LINK_BEGIN" />
+      Σχετικά με το Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Να γίνει έξοδος από το Chromium ούτως ή άλλως;</translation>
 <translation id="4415566066719264597">Να επιτρέπεται στο Chromium να εκτελείται στο παρασκήνιο</translation>
 <translation id="4423735387467980091">Προσαρμογή και έλεγχος του Chromium</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Υπάρχει μια διαθέσιμη ενημέρωση του Chromium}=1{Υπάρχει μια διαθέσιμη ενημέρωση του Chromium}other{Υπάρχει μια διαθέσιμη ενημέρωση του Chromium για # ημέρες}}</translation>
 <translation id="5631814766731275228">Όνομα και εικόνα στο Chromium</translation>
 <translation id="5634636535844844681">Το Chromium απαιτεί Windows 7 ή νεότερη έκδοση.</translation>
+<translation id="5653831366781983928">Επανεκκινήστε το Chromium τώρα</translation>
 <translation id="5680901439334282664">σύνδεση στο Chromium</translation>
 <translation id="5698481217667032250">Να εμφανίζεται το Chromium σε αυτήν τη γλώσσα</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Ενημέρωση &amp;Chromium</translation>
 <translation id="6734291798041940871">Το Chromium είναι ήδη εγκατεστημένο για όλους τους χρήστες στον υπολογιστή σας.</translation>
 <translation id="6810143991807788455">Συμβάλετε στη βελτίωση του Chromium αναφέροντας τις τρέχουσες ρυθμίσεις</translation>
+<translation id="6847869444787758381">Το Chromium σας ενημερώνει σε περίπτωση παραβίασης των κωδικών πρόσβασής σας.</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (αντιγράφηκε στο Chromium)</translation>
 <translation id="6868056391275687737">Εκτελούνται άλλα αντίγραφα του Chromium. Για να τα ενημερώσετε, κλείστε τα.</translation>
diff --git a/chrome/app/resources/chromium_strings_es-419.xtb b/chrome/app/resources/chromium_strings_es-419.xtb
index 07af6fe8..0c52d9f7 100644
--- a/chrome/app/resources/chromium_strings_es-419.xtb
+++ b/chrome/app/resources/chromium_strings_es-419.xtb
@@ -88,6 +88,8 @@
 <translation id="4230135487732243613">¿Quieres vincular los datos de Chromium a esta cuenta?</translation>
 <translation id="4271805377592243930">Obtener ayuda con Chromium</translation>
 <translation id="4285930937574705105">No se pudo completar la instalación debido a un error no identificado. Si Chromium se está ejecutando en este momento, ciérralo e intenta nuevamente.</translation>
+<translation id="4371648796594901282">Puedes visitar <ph name="LINK_BEGIN" />Acerca del Sistema operativo Chromium<ph name="LINK_END" />
+      para obtener información sobre este SO</translation>
 <translation id="4407044323746248786">¿Deseas salir de Chromium de todos modos?</translation>
 <translation id="4415566066719264597">Permitir que Chromium se ejecute en segundo plano</translation>
 <translation id="4423735387467980091">Personaliza y controla Chromium</translation>
@@ -120,6 +122,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Hay una actualización de Chromium disponible}=1{Hay una actualización de Chromium disponible}other{Hay una actualización de Chromium disponible hace # días}}</translation>
 <translation id="5631814766731275228">Nombre y foto en Chromium</translation>
 <translation id="5634636535844844681">Para usar Chromium, se requiere Windows 7 o versiones posteriores.</translation>
+<translation id="5653831366781983928">Reinicia Chromium ahora</translation>
 <translation id="5680901439334282664">acceder a Chromium</translation>
 <translation id="5698481217667032250">Mostrar Chromium en este idioma</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -160,6 +163,7 @@
 <translation id="6734080038664603509">Actualizar &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium ya está instalado para todos los usuarios en tu computadora.</translation>
 <translation id="6810143991807788455">Informa tu configuración actual para ayudarnos a mejorar Chromium.</translation>
+<translation id="6847869444787758381">Chromium te informará si tus contraseñas se ven comprometidas</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiada en Chromium)</translation>
 <translation id="6868056391275687737">Se están ejecutando otras copias de Chromium. Para actualizar el programa, debes cerrarlas.</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb
index 7af5a17..a935c60 100644
--- a/chrome/app/resources/chromium_strings_es.xtb
+++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -92,6 +92,8 @@
 <translation id="4230135487732243613">¿Quieres vincular tus datos de Chromium a esta cuenta?</translation>
 <translation id="4271805377592243930">Obtener ayuda de Chromium</translation>
 <translation id="4285930937574705105">La instalación ha fallado debido a un error no especificado. Si Chromium se está ejecutando, ciérralo y vuelve a intentarlo.</translation>
+<translation id="4371648796594901282">Para obtener más información sobre Chromium OS, consulta <ph name="LINK_BEGIN" />
+      Información de Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">¿Quieres salir de Chromium de todas formas?</translation>
 <translation id="4415566066719264597">Permitir que Chromium se ejecute en segundo plano</translation>
 <translation id="4423735387467980091">Personaliza y controla Chromium</translation>
@@ -124,6 +126,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Hay una actualización de Chromium disponible}=1{Hay una actualización de Chromium disponible}other{Hay una actualización de Chromium disponible desde hace # días}}</translation>
 <translation id="5631814766731275228">Nombre y foto de Chromium</translation>
 <translation id="5634636535844844681">Chromium requiere Windows 7 o una versión posterior.</translation>
+<translation id="5653831366781983928">Reinicia Chromium ahora</translation>
 <translation id="5680901439334282664">iniciar sesión en Chromium</translation>
 <translation id="5698481217667032250">Mostrar Chromium en este idioma</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -166,6 +169,7 @@
 <translation id="6734080038664603509">Actualizar &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium ya está instalado para todos los usuarios en tu ordenador.</translation>
 <translation id="6810143991807788455">Ayuda a mejorar Chromium informando de la configuración actual</translation>
+<translation id="6847869444787758381">Chromium te avisará si tus contraseñas están en riesgo</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiada en Chromium)</translation>
 <translation id="6868056391275687737">Hay otras instancias de Chromium en uso. Ciérralas para poder actualizar.</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb
index 4e1d498..e8b52b83 100644
--- a/chrome/app/resources/chromium_strings_et.xtb
+++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Kas soovite linkida Chromiumi andmed selle kontoga?</translation>
 <translation id="4271805377592243930">Chromiumi puhul abi hankimine</translation>
 <translation id="4285930937574705105">Installimine ebaõnnestus tundmatu vea tõttu. Kui Chromium praegu töötab, siis sulgege see ja proovige uuesti.</translation>
+<translation id="4371648796594901282">Chromium OS-i üksikasjade nägemiseks avage leht <ph name="LINK_BEGIN" />
+      Teave Chromium OS-i kohta<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Kas väljuda Chromiumist ikkagi?</translation>
 <translation id="4415566066719264597">Luba Chromiumil taustal töötada</translation>
 <translation id="4423735387467980091">Chromiumi kohandamine ja juhtimine</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Chromiumi värskendus on saadaval}=1{Chromiumi värskendus on saadaval}other{Chromiumi värskendus on # päeva saadaval olnud}}</translation>
 <translation id="5631814766731275228">Chromiumi nimi ja pilt</translation>
 <translation id="5634636535844844681">Chromium vajab operatsioonisüsteemi Windows 7 või uuemat versiooni.</translation>
+<translation id="5653831366781983928">Käivitage Chromium kohe uuesti</translation>
 <translation id="5680901439334282664">logige Chromiumi sisse</translation>
 <translation id="5698481217667032250">Kuva Chromium selles keeles</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Värskenda &amp;Chromiumi</translation>
 <translation id="6734291798041940871">Chromium on arvutisse kõigi kasutajate jaoks juba installitud.</translation>
 <translation id="6810143991807788455">Aidake muuta Chromiumi paremaks, teavitades meid praegustest seadetest</translation>
+<translation id="6847869444787758381">Chromium annab teile teada, kui teie paroolid ohtu satuvad</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (kopeeritud Chromiumi)</translation>
 <translation id="6868056391275687737">Muud Chromiumi eksemplarid töötavad. Värskendamiseks sulgege need.</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb
index 27f7a8f..44cb5421 100644
--- a/chrome/app/resources/chromium_strings_fa.xtb
+++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -89,6 +89,8 @@
 <translation id="4230135487732243613">‏داده‌های Chromium به این حساب مرتبط شود؟</translation>
 <translation id="4271805377592243930">‏دریافت کمک برای Chromium</translation>
 <translation id="4285930937574705105">‏به دلیل خطای نامشخص نصب ناموفق بود. اگر Chromium در حال اجرا است، لطفاً آن را ببندید و دوباره سعی کنید.</translation>
+<translation id="4371648796594901282">‏برای اطلاع از جزئیات سیستم عامل Chromium، لطفاً <ph name="LINK_BEGIN" />
+      درباره سیستم عامل Chromium<ph name="LINK_END" /> را ببینید</translation>
 <translation id="4407044323746248786">‏درهرصورت از Chromium خارج می‌شوید؟</translation>
 <translation id="4415566066719264597">‏اجازه به Chromium برای اجرا در پس‌زمینه</translation>
 <translation id="4423735387467980091">‏سفارشی کردن و کنترل Chromium</translation>
@@ -121,6 +123,7 @@
 <translation id="5623402015214259806">{0,plural, =0{‏به‌روزرسانی Chromium دردسترس است}=1{‏به‌روزرسانی Chromium دردسترس است}one{‏به‌روزرسانی Chromium از # روز پیش دردسترس است}other{‏به‌روزرسانی Chromium از # روز پیش دردسترس است}}</translation>
 <translation id="5631814766731275228">‏نام و تصویر Chromium</translation>
 <translation id="5634636535844844681">‏Chromium به Windows 7 یا بالاتر نیاز دارد.</translation>
+<translation id="5653831366781983928">‏لطفاً اکنون Chromium را بازراه‌اندازی کنید</translation>
 <translation id="5680901439334282664">‏ورود به سیستم Chromium</translation>
 <translation id="5698481217667032250">‏نمایش Chromium به این زبان</translation>
 <translation id="5820394555380036790">‏سیستم عامل Chromium </translation>
@@ -163,6 +166,7 @@
 <translation id="6734080038664603509">‏به‌روزرسانی &amp;Chromium</translation>
 <translation id="6734291798041940871">‏Chromium از قبل برای همه کاربران این رایانه نصب شده است.</translation>
 <translation id="6810143991807788455">‏با گزارش تنظیمات کنونی، به بهتر شدن Chromium کمک کنید</translation>
+<translation id="6847869444787758381">‏Chromium می‌تواند، اگر گذرواژه‌هایتان در معرض خطر باشد، مطلعتان کند</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">‏Google Pay (در Chromium کپی شد)</translation>
 <translation id="6868056391275687737">‏نسخه‌های دیگری از Chromium درحال اجرا است. برای به‌روزرسانی، آن‌ها را ببندید.</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb
index 09cf04d..c60d2eb 100644
--- a/chrome/app/resources/chromium_strings_fi.xtb
+++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Linkitetäänkö Chromium-tiedot tähän tiliin?</translation>
 <translation id="4271805377592243930">Ohjeita Chromiumin käyttöön</translation>
 <translation id="4285930937574705105">Asennus epäonnistui tuntemattoman virheen takia. Jos Chromium on tällä hetkellä käynnissä, sulje se ja yritä uudelleen.</translation>
+<translation id="4371648796594901282">Tutustu Chromium-käyttöjärjestelmään lukemalla <ph name="LINK_BEGIN" />
+      Tietoja Chromium-käyttöjärjestelmästä<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Suljetaanko Chromium silti?</translation>
 <translation id="4415566066719264597">Jätä Chromium käyntiin taustalle</translation>
 <translation id="4423735387467980091">Chromiumin muokkaus ja hallinta</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Chromium-päivitys on saatavilla}=1{Chromium-päivitys on saatavilla}other{Chromium-päivitys on ollut saatavilla # vuorokauden ajan}}</translation>
 <translation id="5631814766731275228">Chromiumin nimi ja kuva</translation>
 <translation id="5634636535844844681">Chromium edellyttää Windows 7:ää tai uudempaa versiota.</translation>
+<translation id="5653831366781983928">Käynnistä Chromium uudelleen nyt</translation>
 <translation id="5680901439334282664">Kirjaudu sisään Chromiumiin</translation>
 <translation id="5698481217667032250">Näytä Chromium tällä kielellä</translation>
 <translation id="5820394555380036790">Chromium-käyttöjärjestelmä</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Päivitä &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium on jo asennettuna kaikille tietokoneen käyttäjille.</translation>
 <translation id="6810143991807788455">Auta parantamaan Chromiumia ilmoittamalla nykyiset asetukset.</translation>
+<translation id="6847869444787758381">Chromium ilmoittaa sinulle, jos salasanasi ovat vaarantuneet</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (kopioitu Chromiumiin)</translation>
 <translation id="6868056391275687737">Chromiumin muita kopioita on käynnissä. Sulje ne päivittämistä varten.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb
index 8372bc08..f6605b3 100644
--- a/chrome/app/resources/chromium_strings_fr.xtb
+++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -91,6 +91,7 @@
 <translation id="4230135487732243613">Associer vos données Chromium à ce compte ?</translation>
 <translation id="4271805377592243930">Obtenir de l'aide avec Chromium</translation>
 <translation id="4285930937574705105">Échec de l'installation suite à une erreur non spécifiée. Si Chromium est en cours d'exécution, veuillez le fermer, puis réessayer.</translation>
+<translation id="4371648796594901282">Pour en savoir plus sur Chromium OS, consultez la section <ph name="LINK_BEGIN" />À propos de Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Quitter Chromium quand même ?</translation>
 <translation id="4415566066719264597">Laisser Chromium s'exécuter en arrière-plan</translation>
 <translation id="4423735387467980091">Personnaliser et contrôler Chromium</translation>
@@ -123,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Une mise à jour de Chromium est disponible}=1{Une mise à jour de Chromium est disponible}one{Une mise à jour de Chromium est disponible depuis # jour}other{Une mise à jour de Chromium est disponible depuis # jours}}</translation>
 <translation id="5631814766731275228">Nom et photo dans Chromium</translation>
 <translation id="5634636535844844681">Vous devez disposer de Windows 7 ou version ultérieure pour utiliser Chromium.</translation>
+<translation id="5653831366781983928">Veuillez redémarrer Chromium maintenant</translation>
 <translation id="5680901439334282664">connectez-vous à Chromium</translation>
 <translation id="5698481217667032250">Afficher Chromium dans cette langue</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -165,6 +167,7 @@
 <translation id="6734080038664603509">Mettre à jour &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium est déjà installé pour tous les utilisateurs de votre ordinateur.</translation>
 <translation id="6810143991807788455">Aidez-nous à améliorer Chromium en nous signalant vos paramètres actuels.</translation>
+<translation id="6847869444787758381">Chromium vous indique si vos mots de passe ont été piratés</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiée dans Chromium)</translation>
 <translation id="6868056391275687737">D'autres copies de Chromium sont en cours d'exécution. Fermez-les pour effectuer la mise à jour.</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb
index 48cada4..159d0a7 100644
--- a/chrome/app/resources/chromium_strings_hi.xtb
+++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -194,6 +194,8 @@
 <translation id="753534427205733210">{0,plural, =1{क्रोमियम 1 मिनट में फिर से लॉन्च होगा}one{क्रोमियम # मिनट में फिर से लॉन्च होगा}other{क्रोमियम # मिनट में फिर से लॉन्च होगा}}</translation>
 <translation id="7549178288319965365">क्रोमियम OS के बारे में</translation>
 <translation id="7561906087460245826">साथ ही, क्रोमियम (<ph name="URL" />) का डेटा साफ़ करें</translation>
+<translation id="7585853947355360626">अगर इस पेज पर सेटिंग नहीं दिखती है, तो अपनी <ph name="LINK_BEGIN" />
+     क्रोमियम OS सेटिंग<ph name="LINK_END" /> देखें</translation>
 <translation id="761356813943268536">Chromium आपके कैमरे और माइक्रोफ़ोन का उपयोग कर रहा है.</translation>
 <translation id="7617377681829253106">क्रोमियम पहले से बेहतर हो गया है</translation>
 <translation id="7686590090926151193">क्रोमियम आपका डिफ़ॉल्ट ब्राउज़र नहीं है</translation>
@@ -227,6 +229,8 @@
 <translation id="8619360774459241877">क्रोमियम लॉन्च हो रहा है...</translation>
 <translation id="8621669128220841554">अनिर्दिष्ट कारणों से इंस्‍टॉलेशन विफल हुआ. कृपया क्रोमियम फिर से डाउनलोड करें.</translation>
 <translation id="8667808506758191620">आपका <ph name="DEVICE_TYPE" /> अद्यतित है.</translation>
+<translation id="8682540261359803721">अगर कोई सेटिंग इस पेज पर नहीं दिखती है, तो अपनी <ph name="LINK_BEGIN" />
+      क्रोमियम ब्राउज़र सेटिंग<ph name="LINK_END" /> देखें</translation>
 <translation id="8697124171261953979">इससे यह भी नियंत्रित होता है कि जब आप क्रोमियम शुरू करते हैं या ऑम्निबॉक्स से खोजते हैं तब कौन सा पेज दिखाया जाए.</translation>
 <translation id="8704119203788522458">यह आपका क्रोमियम है</translation>
 <translation id="8739167630197873875">Chromium छोड़ने पर कुकी मिटाएं. सिंक करना जारी रखने के लिए, ये <ph name="COOKIE_SETTINGS_LINK" /> बदलें.</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb
index bcb6009..08bdac0 100644
--- a/chrome/app/resources/chromium_strings_hr.xtb
+++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Želite li povezati svoje podatke sustava Chromium s tim računom?</translation>
 <translation id="4271805377592243930">Potraži pomoć za upotrebu Chromiuma</translation>
 <translation id="4285930937574705105">Instalacija nije uspjela zbog nepoznate pogreške. Ako je Chromium trenutačno otvoren, zatvorite ga i pokušajte ponovo.</translation>
+<translation id="4371648796594901282">Pojedinosti o OS-u Chromium potražite u odjeljku <ph name="LINK_BEGIN" />
+      O OS-u Chromium<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Želite li ipak zatvoriti Chromium?</translation>
 <translation id="4415566066719264597">Neka Chromium radi u pozadini</translation>
 <translation id="4423735387467980091">Prilagodite Chromium i upravljajte njime</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Dostupno je ažuriranje Chromiuma}=1{Dostupno je ažuriranje Chromiuma}one{Ažuriranje Chromiuma dostupno je već # dan}few{Ažuriranje Chromiuma dostupno je već # dana}other{Ažuriranje Chromiuma dostupno je već # dana}}</translation>
 <translation id="5631814766731275228">Ime i slika Chromium profila</translation>
 <translation id="5634636535844844681">Chromium zahtijeva Windows 7 ili noviju verziju.</translation>
+<translation id="5653831366781983928">Sada ponovo pokrenite Chromium</translation>
 <translation id="5680901439334282664">prijavite se na Chromium</translation>
 <translation id="5698481217667032250">Prikaži Chromium na tom jeziku</translation>
 <translation id="5820394555380036790">OS Chromium</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Ažuriranje &amp;Chromiuma</translation>
 <translation id="6734291798041940871">Chromium je već instaliran za sve korisnike na računalu.</translation>
 <translation id="6810143991807788455">Doprinesite poboljšanju Chromiuma prijavljivanjem trenutačnih postavki</translation>
+<translation id="6847869444787758381">Chromium će vas obavijestiti ako vaše zaporke budu ugrožene</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (kopirano na Chromium)</translation>
 <translation id="6868056391275687737">Pokrenuti su drugi primjerci Chromiuma. Zatvorite ih radi ažuriranja.</translation>
@@ -195,7 +199,7 @@
 <translation id="7549178288319965365">O OS-u Chromium</translation>
 <translation id="7561906087460245826">Izbriši i podatke s Chromiuma (<ph name="URL" />)</translation>
 <translation id="7585853947355360626">Ako se postavka ne prikazuje na ovoj stranici, pogledajte <ph name="LINK_BEGIN" />
-      postavke svojeg OS-a Chromium<ph name="LINK_END" /></translation>
+      postavke OS-a Chromium<ph name="LINK_END" /></translation>
 <translation id="761356813943268536">Chromium upotrebljava vašu kameru i mikrofon.</translation>
 <translation id="7617377681829253106">Chromium je upravo postao bolji</translation>
 <translation id="7686590090926151193">Chromium nije vaš zadani preglednik</translation>
@@ -230,7 +234,7 @@
 <translation id="8621669128220841554">Instalacija nije uspjela zbog nepoznate pogreške. Ponovo preuzmite Chromium.</translation>
 <translation id="8667808506758191620"><ph name="DEVICE_TYPE" /> je ažuriran.</translation>
 <translation id="8682540261359803721">Ako se na ovoj stranici ne prikazuje postavka, pogledajte <ph name="LINK_BEGIN" />
-      postavke svojeg preglednika Chromium<ph name="LINK_END" /></translation>
+      postavke preglednika Chromium<ph name="LINK_END" /></translation>
 <translation id="8697124171261953979">Upravlja i time koja se stranica prikazuje prilikom pokretanja Chromiuma ili pretraživanja putem višenamjenskog okvira.</translation>
 <translation id="8704119203788522458">To je vaš Chromium</translation>
 <translation id="8739167630197873875">Izbrisat ćete kolačiće prilikom zatvaranja Chromiuma. Za nastavak sinkronizacije promijenite postavku <ph name="COOKIE_SETTINGS_LINK" />.</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb
index c09a8dac..3294bb3 100644
--- a/chrome/app/resources/chromium_strings_hu.xtb
+++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -90,6 +90,7 @@
 <translation id="4230135487732243613">Társítja Chromium-adatait ezzel a fiókkal?</translation>
 <translation id="4271805377592243930">Segítség a Chromium használatával kapcsolatban</translation>
 <translation id="4285930937574705105">A telepítés váratlan hiba miatt nem sikerült. Ha a Chromium jelenleg fut, zárja be, majd próbálkozzon újra.</translation>
+<translation id="4371648796594901282">A Chromium OS rendszerről bővebben <ph name="LINK_BEGIN" />A Chromium OS névjegye<ph name="LINK_END" /> oldalon tájékozódhat</translation>
 <translation id="4407044323746248786">Biztosan kilép a Chromiumból?</translation>
 <translation id="4415566066719264597">A Chromium futhat a háttérben</translation>
 <translation id="4423735387467980091">A Chromium személyre szabása és beállításai</translation>
@@ -122,6 +123,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Rendelkezésre áll egy Chromium-frissítés}=1{Rendelkezésre áll egy Chromium-frissítés}other{# napja rendelkezésre áll egy Chromium-frissítés}}</translation>
 <translation id="5631814766731275228">Chromium-név és -kép</translation>
 <translation id="5634636535844844681">A Chromium futtatásához Windows 7 vagy újabb verzió szükséges.</translation>
+<translation id="5653831366781983928">Indítsa újra a Chromiumot most</translation>
 <translation id="5680901439334282664">bejelentkezés a Chromiumba</translation>
 <translation id="5698481217667032250">A Chromium megjelenítése ezen a nyelven</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -162,6 +164,7 @@
 <translation id="6734080038664603509">A &amp;Chromium frissítése</translation>
 <translation id="6734291798041940871">A Chromium már telepítve van az összes felhasználó számára a számítógépen.</translation>
 <translation id="6810143991807788455">Segítsen a Chromium fejlesztésében a jelenlegi beállítások elküldésével</translation>
+<translation id="6847869444787758381">A Chromium tájékoztatja arról, ha jelszavai illetéktelen kezekbe kerülnek</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (a Chromiumba másolva)</translation>
 <translation id="6868056391275687737">További Chromium-példányok is futnak. A frissítéshez zárja be őket.</translation>
diff --git a/chrome/app/resources/chromium_strings_it.xtb b/chrome/app/resources/chromium_strings_it.xtb
index f2b14e3..55fd6f7e 100644
--- a/chrome/app/resources/chromium_strings_it.xtb
+++ b/chrome/app/resources/chromium_strings_it.xtb
@@ -90,6 +90,7 @@
 <translation id="4230135487732243613">Collegare i tuoi dati Chromium a questo account?</translation>
 <translation id="4271805377592243930">Ricevi assistenza per Chromium</translation>
 <translation id="4285930937574705105">Installazione non riuscita a causa di un errore imprecisato. Se Chromium è in esecuzione, chiudilo e riprova.</translation>
+<translation id="4371648796594901282">Per informazioni dettagliate su Chromium OS, visita la pagina <ph name="LINK_BEGIN" />Informazioni su Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Vuoi uscire comunque da Chromium?</translation>
 <translation id="4415566066719264597">Lascia Chromium in esecuzione in background</translation>
 <translation id="4423735387467980091">Personalizza e controlla Chromium</translation>
@@ -122,6 +123,7 @@
 <translation id="5623402015214259806">{0,plural, =0{È disponibile un aggiornamento di Chromium}=1{È disponibile un aggiornamento di Chromium}other{È disponibile un aggiornamento di Chromium da # giorni}}</translation>
 <translation id="5631814766731275228">Nome e immagine di Chromium</translation>
 <translation id="5634636535844844681">Chromium richiede Windows 7 o versioni successive.</translation>
+<translation id="5653831366781983928">Riavvia subito Chromium</translation>
 <translation id="5680901439334282664">accedi a Chromium</translation>
 <translation id="5698481217667032250">Visualizza Chromium in questa lingua</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +166,7 @@
 <translation id="6734080038664603509">Aggiorna &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium è già installato per tutti gli utenti sul computer.</translation>
 <translation id="6810143991807788455">Contribuisci a migliorare Chromium indicando le impostazioni attuali</translation>
+<translation id="6847869444787758381">Chromium ti avvisa se le tue password vengono compromesse</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiata in Chromium)</translation>
 <translation id="6868056391275687737">Sono in esecuzione altre copie di Chromium. Chiudile per eseguire l'aggiornamento.</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb
index 2aa10fe..41a28ba6 100644
--- a/chrome/app/resources/chromium_strings_iw.xtb
+++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -88,6 +88,8 @@
 <translation id="4230135487732243613">‏האם לקשר את הנתונים שלך ב-Chromium לחשבון זה?</translation>
 <translation id="4271805377592243930">‏קבל עזרה בנושא Chromium</translation>
 <translation id="4285930937574705105">‏ההתקנה נכשלה בשל שגיאה לא צפויה. אם Chromium  פועל כעת, סגור אותו ונסה שוב.</translation>
+<translation id="4371648796594901282">‏כדי לקבל פרטים נוספים לגבי Chromium OS, אפשר לעיין בדף <ph name="LINK_BEGIN" />
+      מידע על Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">‏לסגור את Chromium בכל זאת?</translation>
 <translation id="4415566066719264597">‏Chromium יכול לפעול ברקע</translation>
 <translation id="4423735387467980091">‏התאם אישית ושלוט ב-Chromium</translation>
@@ -120,6 +122,7 @@
 <translation id="5623402015214259806">{0,plural, =0{‏יש עדכון ל-Chromium}=1{‏יש עדכון ל-Chromium}two{‏עדכון של Chromium זמין כבר # ימים}many{‏עדכון של Chromium זמין כבר # ימים}other{‏עדכון של Chromium זמין כבר # ימים}}</translation>
 <translation id="5631814766731275228">‏שם ותמונה ב-Chromium</translation>
 <translation id="5634636535844844681">‏כדי להשתמש ב-Chromium יש צורך ב-Windows מגירסה 7 ואילך.</translation>
+<translation id="5653831366781983928">‏יש להפעיל מחדש את Chromium</translation>
 <translation id="5680901439334282664">‏היכנס אל Chromium</translation>
 <translation id="5698481217667032250">‏הצג את Chromium בשפה זו</translation>
 <translation id="5820394555380036790">‏מערכת ההפעלה של Chromium</translation>
@@ -162,6 +165,7 @@
 <translation id="6734080038664603509">‏עדכן &amp;את Chromium‏</translation>
 <translation id="6734291798041940871">‏Chromium כבר מותקן במחשב ונגיש לכל המשתמשים.</translation>
 <translation id="6810143991807788455">‏עזור לשפר את Chromium על ידי דיווח ההגדרות הנוכחיות</translation>
+<translation id="6847869444787758381">‏Chromium מודיע לך אם הסיסמאות שלך נמצאות בסיכון</translation>
 <translation id="6857782730669500492">‏Chromium‏ - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">‏Google Pay (‏הועתק ל-Chromium)</translation>
 <translation id="6868056391275687737">‏עותקים אחרים של Chromium פועלים. כדי לעדכן צריך לסגור אותם.</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb
index 71fdc0e..4c5c2a44 100644
--- a/chrome/app/resources/chromium_strings_ja.xtb
+++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -90,6 +90,7 @@
 <translation id="4230135487732243613">Chromium データをこのアカウントにリンクしますか?</translation>
 <translation id="4271805377592243930">Chromium のヘルプを見る</translation>
 <translation id="4285930937574705105">原因不明のエラーによりインストールが失敗しました。実行中の Chromium を終了してからもう一度お試しください。</translation>
+<translation id="4371648796594901282">Chromium OS の詳細については、<ph name="LINK_BEGIN" />Chromium OS について<ph name="LINK_END" />をご覧ください</translation>
 <translation id="4407044323746248786">今すぐ Chromium を終了しますか?</translation>
 <translation id="4415566066719264597">Chromium をバックグラウンドで実行する</translation>
 <translation id="4423735387467980091">Chromium の設定</translation>
@@ -122,6 +123,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Chromium のアップデートが利用可能です}=1{Chromium のアップデートが利用可能です}other{Chromium のアップデートが利用可能になってから # 日経過しています}}</translation>
 <translation id="5631814766731275228">Chromium の名前と画像</translation>
 <translation id="5634636535844844681">Chromium のご利用には Windows 7 以上が必要です。</translation>
+<translation id="5653831366781983928">今すぐ Chromium を再起動してください</translation>
 <translation id="5680901439334282664">Chromium にログイン</translation>
 <translation id="5698481217667032250">Chromium をこの言語で表示</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +166,7 @@
 <translation id="6734080038664603509">Chromium を更新(&amp;C)</translation>
 <translation id="6734291798041940871">Chromium は既にパソコンのすべてのユーザーに対してインストールされています。</translation>
 <translation id="6810143991807788455">現在の設定を送信して Chromium の品質向上にご協力ください</translation>
+<translation id="6847869444787758381">Chromium では、特定のパスワードが侵害された事実の有無がわかります</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay(Chromium にコピー)</translation>
 <translation id="6868056391275687737">Chromium の他のコピーが動作しています。更新するには他のコピーを終了してください。</translation>
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb
index dae4e56..d395be4 100644
--- a/chrome/app/resources/chromium_strings_kn.xtb
+++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -88,6 +88,7 @@
 <translation id="4230135487732243613">ಈ ಖಾತೆಗೆ ನಿಮ್ಮ Chromium ಡೇಟಾವನ್ನು ಲಿಂಕ್ ಮಾಡುವುದೇ?</translation>
 <translation id="4271805377592243930">Chromium ಜೊತೆಗೆ ಸಹಾಯ ಪಡೆಯಿರಿ</translation>
 <translation id="4285930937574705105">ಅನಿರ್ದಿಷ್ಟ ದೋಷದಿಂದಾಗಿ ಸ್ಥಾಪನೆಯು ವಿಫಲಗೊಂಡಿದೆ. Chromium ಪ್ರಸ್ತುತ ಚಾಲನೆಯಲ್ಲಿದ್ದರೆ, ದಯವಿಟ್ಟು ಅದನ್ನು ಮುಚ್ಚಿರಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
+<translation id="4371648796594901282">Chromium OS ವಿವರಗಳಿಗಾಗಿ,  <ph name="LINK_BEGIN" />Chromium OS ಬಗ್ಗೆ<ph name="LINK_END" /> ನೋಡಿ</translation>
 <translation id="4407044323746248786">ಹೇಗಿದ್ದರೂ Chromium ನಿಂದ ನಿರ್ಗಮಿಸುವುದೇ?</translation>
 <translation id="4415566066719264597">Chromium ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗಲು ಅನುಮತಿಸಿ</translation>
 <translation id="4423735387467980091">Chromium ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ</translation>
@@ -120,6 +121,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Chromium ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ}=1{Chromium ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ}one{# ದಿನಗಳ ಮಟ್ಟಿಗೆ Chromium ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ}other{# ದಿನಗಳ ಮಟ್ಟಿಗೆ Chromium ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ}}</translation>
 <translation id="5631814766731275228">Chromium ಹೆಸರು ಮತ್ತು ಚಿತ್ರ</translation>
 <translation id="5634636535844844681">Chromium ಗೆ Windows 7 ಅಥವಾ ಹೆಚ್ಚಿನ ಆವೃತ್ತಿ ಅಗತ್ಯವಿರುತ್ತದೆ.</translation>
+<translation id="5653831366781983928">ಇದೀಗ Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="5680901439334282664">Chromium ಗೆ ಸೈನ್ ಇನ್ ಆಗಿ</translation>
 <translation id="5698481217667032250">ಈ ಭಾಷೆಯಲ್ಲಿ Chromium ಪ್ರದರ್ಶಿಸು</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -160,6 +162,7 @@
 <translation id="6734080038664603509">&amp;Chromium ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ</translation>
 <translation id="6734291798041940871">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿನ ಎಲ್ಲ ಬಳಕೆದಾರರಿಗೆ ಈಗಾಗಲೇ Chromium ಸ್ಥಾಪಿತವಾಗಿದೆ.</translation>
 <translation id="6810143991807788455">ಪ್ರಸ್ತುತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ವರದಿ ಮಾಡುವುದರ ಮೂಲಕ Chromium ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯಮಾಡಿ</translation>
+<translation id="6847869444787758381">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಎಂದಾದರೂ ಹ್ಯಾಕ್‌ ಆಗಿವೆಯೇ ಎಂಬುದನ್ನು Chromium ನಿಮಗೆ ತಿಳಿಸುತ್ತದೆ</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (Chromium ಗೆ ನಕಲಿಸಲಾಗಿದೆ)</translation>
 <translation id="6868056391275687737">Chromium ನ ಇತರ ನಕಲುಗಳು ರನ್ ಆಗುತ್ತಿವೆ. ಅಪ್‌ಡೇಟ್ ಮಾಡಲು, ಅವುಗಳನ್ನು ಮುಚ್ಚಿರಿ.</translation>
@@ -188,6 +191,7 @@
 <translation id="753534427205733210">{0,plural, =1{1 ನಿಮಿಷದಲ್ಲಿ Chromium ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ}one{# ನಿಮಿಷಗಳಲ್ಲಿ Chromium ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ}other{# ನಿಮಿಷಗಳಲ್ಲಿ Chromium ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ}}</translation>
 <translation id="7549178288319965365">Chromium OS ಕುರಿತು</translation>
 <translation id="7561906087460245826">Chromium ನಿಂದಲೂ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ (<ph name="URL" />)</translation>
+<translation id="7585853947355360626">ಈ ಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್ ಒಂದು ಕಾಣಿಸದಿದ್ದರೆ, ನಿಮ್ಮ <ph name="LINK_BEGIN" />Chromium OS ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="LINK_END" /> ನೋಡಿರಿ</translation>
 <translation id="761356813943268536">Chromium ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೋಫೋನ್ ಬಳಸುತ್ತಿದೆ.</translation>
 <translation id="7617377681829253106">Chromium ಇದೀಗ ಉತ್ತಮಗೊಂಡಿದೆ</translation>
 <translation id="7686590090926151193">Chromium ನಿಮ್ಮ ಡೀಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಅಲ್ಲ</translation>
@@ -221,6 +225,7 @@
 <translation id="8619360774459241877">Chromium ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8621669128220841554">ಅನಿರ್ದಿಷ್ಟ ದೋಷದಿಂದಾಗಿ ಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೊಮ್ಮೆ Chromium ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ.</translation>
 <translation id="8667808506758191620">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನವೀಕೃತವಾಗಿದೆ.</translation>
+<translation id="8682540261359803721">ಈ ಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್ ಒಂದು ಕಾಣಿಸದಿದ್ದರೆ, ನಿಮ್ಮ <ph name="LINK_BEGIN" />Chromium ಬ್ರೌಸರ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="LINK_END" /> ನೋಡಿರಿ</translation>
 <translation id="8697124171261953979">ನೀವು Chromium ಪ್ರಾರಂಭಿಸಿದಾಗ ಅಥವಾ ಓಮ್ನಿಬಾಕ್ಸ್‌ನಿಂದ ಹುಡುಕಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation>
 <translation id="8704119203788522458">ಇದು ನಿಮ್ಮ Chromium</translation>
 <translation id="8739167630197873875">Chromium ನಿಂದ ನಿರ್ಗಮಿಸಿದಾಗ ಕುಕೀಗಳನ್ನು ನೀವು ತೆರವುಗೊಳಿಸುತ್ತೀರಿ. ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು, ಈ <ph name="COOKIE_SETTINGS_LINK" /> ಅನ್ನು ಬದಲಾಯಿಸಿ.</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb
index 15588aa9..d39ea3d9 100644
--- a/chrome/app/resources/chromium_strings_lv.xtb
+++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Vai saistīt Chromium datus ar šo kontu?</translation>
 <translation id="4271805377592243930">Saņemt palīdzību par Chromium</translation>
 <translation id="4285930937574705105">Instalācija neizdevās nenoteiktas kļūdas dēļ. Ja Chromium šobrīd darbojas, aizveriet to un mēģiniet vēlreiz.</translation>
+<translation id="4371648796594901282">Detalizētu informāciju par Chromium OS skatiet lapā <ph name="LINK_BEGIN" />
+      Par Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Vai tik un tā aizvērt pārlūku Chromium?</translation>
 <translation id="4415566066719264597">Ļaut pārlūkam Chromium darboties fonā</translation>
 <translation id="4423735387467980091">Pielāgot un kontrolēt Chromium</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Ir pieejams Chromium atjauninājums}=1{Ir pieejams Chromium atjauninājums}zero{Chromium atjauninājums ir pieejams jau # dienu}one{Chromium atjauninājums ir pieejams jau # dienu}other{Chromium atjauninājums ir pieejams jau # dienas}}</translation>
 <translation id="5631814766731275228">Chromium profila vārds un attēls</translation>
 <translation id="5634636535844844681">Pārlūka Chromium izmantošanai nepieciešama operētājsistēma Windows 7 vai jaunāka versija.</translation>
+<translation id="5653831366781983928">Lūdzu, nekavējoties restartējiet pārlūku Chromium</translation>
 <translation id="5680901439334282664">pierakstieties pārlūkā Chromium</translation>
 <translation id="5698481217667032250">Rādīt Chromium šajā valodā</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Atjaunināt &amp;Chromium</translation>
 <translation id="6734291798041940871">Pārlūks Chromium jau ir instalēts visiem lietotājiem jūsu datorā.</translation>
 <translation id="6810143991807788455">Palīdziet uzlabot pārlūku Chromium, ziņojot par pašreizējiem iestatījumiem.</translation>
+<translation id="6847869444787758381">Ja jūsu paroles kādreiz tiks apdraudētas, pārlūkā Chromium saņemsiet paziņojumu</translation>
 <translation id="6857782730669500492">Chromium — <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (kopēts pārlūkā Chromium)</translation>
 <translation id="6868056391275687737">Darbojas citas Chromium kopijas. Lai veiktu atjaunināšanu, aizveriet tās.</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb
index 52b6a58..bf34ec74 100644
--- a/chrome/app/resources/chromium_strings_ms.xtb
+++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Paut data Chromium anda ke akaun ini?</translation>
 <translation id="4271805377592243930">Dapatkan bantuan berkenaan Chromium</translation>
 <translation id="4285930937574705105">Pemasangan gagal disebabkan ralat yang tidak dinyatakan. Jika Chromium sedang dijalankan, sila tutup dan cuba semula.</translation>
+<translation id="4371648796594901282">Untuk mendapatkan butiran OS Chromium, sila lihat <ph name="LINK_BEGIN" />
+      Perihal OS Chromium<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Keluar daripada Chromium juga?</translation>
 <translation id="4415566066719264597">Benarkan Chromium Dijalankan dalam Latar Belakang</translation>
 <translation id="4423735387467980091">Sesuaikan dan kawal Chromium</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Kemas kini Chromium tersedia}=1{Kemas kini Chromium tersedia}other{Kemas kini Chromium telah tersedia selama # hari}}</translation>
 <translation id="5631814766731275228">Nama dan gambar Chromium</translation>
 <translation id="5634636535844844681">Chromium memerlukan Windows 7 atau lebih tinggi.</translation>
+<translation id="5653831366781983928">Sila mulakan semula Chromium sekarang</translation>
 <translation id="5680901439334282664">log masuk ke Chromium</translation>
 <translation id="5698481217667032250">Paparkan Chromium dalam bahasa ini</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Kemas kini &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium telah dipasang untuk semua pengguna pada komputer anda.</translation>
 <translation id="6810143991807788455">Bantu jadikan Chromium lebih baik dengan melaporkan tetapan semasa</translation>
+<translation id="6847869444787758381">Chromium akan memberitahu anda sekiranya kata laluan anda terjejas</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (disalin ke Chromium)</translation>
 <translation id="6868056391275687737">Salinan Chromium yang lain sedang dijalankan. Tutup salinan tersebut untuk mengemas kini.</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb
index abc7ef0..95e95c13 100644
--- a/chrome/app/resources/chromium_strings_nl.xtb
+++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -92,6 +92,7 @@
 <translation id="4230135487732243613">Wil je je Chromium-gegevens aan dit account koppelen?</translation>
 <translation id="4271805377592243930">Hulp bij Chromium</translation>
 <translation id="4285930937574705105">De installatie is mislukt wegens een onbekende fout. Als Chromium momenteel actief is, moet je Chromium sluiten en het opnieuw proberen.</translation>
+<translation id="4371648796594901282">Ga naar <ph name="LINK_BEGIN" />Over Chromium OS<ph name="LINK_END" /> voor meer informatie over Chromium OS</translation>
 <translation id="4407044323746248786">Chromium toch sluiten?</translation>
 <translation id="4415566066719264597">Chromium laten uitvoeren op de achtergrond</translation>
 <translation id="4423735387467980091">Chromium aanpassen en beheren</translation>
@@ -124,6 +125,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Er is een Chromium-update beschikbaar}=1{Er is een Chromium-update beschikbaar}other{Er is al # dagen een Chromium-update beschikbaar}}</translation>
 <translation id="5631814766731275228">Naam en afbeelding voor Chromium</translation>
 <translation id="5634636535844844681">Voor Chromium is Windows 7 of hoger vereist.</translation>
+<translation id="5653831366781983928">Start Chromium nu opnieuw op</translation>
 <translation id="5680901439334282664">inloggen bij Chromium</translation>
 <translation id="5698481217667032250">Chromium weergeven in deze taal</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -166,6 +168,7 @@
 <translation id="6734080038664603509">&amp;Chromium updaten</translation>
 <translation id="6734291798041940871">Chromium is al geïnstalleerd voor alle gebruikers op je computer.</translation>
 <translation id="6810143991807788455">Help Chromium beter te maken door de huidige instellingen te melden</translation>
+<translation id="6847869444787758381">Chromium laat het je weten als je wachtwoorden mogelijk niet veilig meer zijn</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (gekopieerd naar Chromium)</translation>
 <translation id="6868056391275687737">Er zijn andere exemplaren van Chromium actief. Sluit ze om een update uit te voeren.</translation>
@@ -196,7 +199,7 @@
 <translation id="753534427205733210">{0,plural, =1{Chromium wordt over één minuut opnieuw gestart}other{Chromium wordt over # minuten opnieuw gestart}}</translation>
 <translation id="7549178288319965365">Over Chromium OS</translation>
 <translation id="7561906087460245826">Ook gegevens van Chromium wissen (<ph name="URL" />)</translation>
-<translation id="7585853947355360626">Als je een instelling niet ziet op deze pagina, kijk je in de <ph name="LINK_BEGIN" />Chromium OS-instellingen<ph name="LINK_END" /></translation>
+<translation id="7585853947355360626">Kijk je in de <ph name="LINK_BEGIN" />Chromium OS-instellingen<ph name="LINK_END" />als je een instelling niet ziet op deze pagina.</translation>
 <translation id="761356813943268536">Chromium gebruikt je camera en microfoon.</translation>
 <translation id="7617377681829253106">Chromium is nu nog beter</translation>
 <translation id="7686590090926151193">Chromium is niet je standaardbrowser</translation>
@@ -230,7 +233,7 @@
 <translation id="8619360774459241877">Chromium starten…</translation>
 <translation id="8621669128220841554">De installatie is mislukt wegens een onbekende fout. Download Chromium opnieuw.</translation>
 <translation id="8667808506758191620">Je <ph name="DEVICE_TYPE" /> is up-to-date.</translation>
-<translation id="8682540261359803721">Als je een instelling niet ziet op deze pagina, kijk je in de <ph name="LINK_BEGIN" />instellingen van je Chromium-browser<ph name="LINK_END" /></translation>
+<translation id="8682540261359803721">Kijk in de <ph name="LINK_BEGIN" />instellingen van je Chromium-browser<ph name="LINK_END" />als je een instelling niet ziet op deze pagina</translation>
 <translation id="8697124171261953979">Hiermee wordt ook gecontroleerd welke pagina wordt weergegeven wanneer je Chromium start of vanuit de omnibox zoekt.</translation>
 <translation id="8704119203788522458">Personaliseer jouw Chromium</translation>
 <translation id="8739167630197873875">Je wist cookies wanneer je Chromium sluit. Als je wilt doorgaan met synchroniseren, wijzig je deze <ph name="COOKIE_SETTINGS_LINK" />.</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb
index 75bffee..226016b 100644
--- a/chrome/app/resources/chromium_strings_pl.xtb
+++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -88,6 +88,8 @@
 <translation id="4230135487732243613">Połączyć Twoje dane Chromium z tym kontem?</translation>
 <translation id="4271805377592243930">Pomoc do Chromium</translation>
 <translation id="4285930937574705105">Instalacja nie powiodła się z powodu nieokreślonego błędu. Jeśli Chromium jest aktualnie uruchomiony, zamknij go i spróbuj ponownie.</translation>
+<translation id="4371648796594901282">Szczegóły dotyczące Chromium OS znajdziesz w sekcji <ph name="LINK_BEGIN" />
+      System operacyjny Chromium – informacje<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Zamknąć Chromium mimo to?</translation>
 <translation id="4415566066719264597">Zezwalaj Chromium na działanie w tle</translation>
 <translation id="4423735387467980091">Dostosowywanie i kontrolowanie Chromium</translation>
@@ -120,6 +122,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Dostępna jest aktualizacja Chromium}=1{Dostępna jest aktualizacja Chromium}few{Aktualizacja Chromium jest dostępna od # dni}many{Aktualizacja Chromium jest dostępna od # dni}other{Aktualizacja Chromium jest dostępna od # dnia}}</translation>
 <translation id="5631814766731275228">Nazwa i zdjęcie w Chromium</translation>
 <translation id="5634636535844844681">Chromium wymaga systemu Windows 7 lub nowszego.</translation>
+<translation id="5653831366781983928">Uruchom Chromium ponownie</translation>
 <translation id="5680901439334282664">zaloguj się w Chromium</translation>
 <translation id="5698481217667032250">Wyświetlaj Chromium w tym języku</translation>
 <translation id="5820394555380036790">System operacyjny Chromium</translation>
@@ -162,6 +165,7 @@
 <translation id="6734080038664603509">Aktualizuj &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium jest już zainstalowany dla wszystkich użytkowników tego komputera.</translation>
 <translation id="6810143991807788455">Pomóż ulepszyć Chromium, zgłaszając bieżące ustawienia</translation>
+<translation id="6847869444787758381">Chromium poinformuje Cię, jeśli Twoje hasła dostaną się w niepowołane ręce</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (skopiowana do Chromium)</translation>
 <translation id="6868056391275687737">Są uruchomione inne kopie Chromium. Zamknij je, by przeprowadzić aktualizację.</translation>
@@ -192,8 +196,7 @@
 <translation id="753534427205733210">{0,plural, =1{Chromium uruchomi się ponownie za 1 minutę}few{Chromium uruchomi się ponownie za # minuty}many{Chromium uruchomi się ponownie za # minut}other{Chromium uruchomi się ponownie za # minuty}}</translation>
 <translation id="7549178288319965365">System operacyjny Chromium – informacje</translation>
 <translation id="7561906087460245826">Wyczyść też dane z Chromium (<ph name="URL" />)</translation>
-<translation id="7585853947355360626">Jeśli ustawienia nie widać na tej stronie, zajrzyj do <ph name="LINK_BEGIN" />
-      ustawień systemu operacyjnego Chromium<ph name="LINK_END" /></translation>
+<translation id="7585853947355360626">Jeśli ustawienia nie widać na tej stronie, zajrzyj do <ph name="LINK_BEGIN" />ustawień systemu operacyjnego Chromium<ph name="LINK_END" /></translation>
 <translation id="761356813943268536">Chromium używa Twojej kamery i mikrofonu.</translation>
 <translation id="7617377681829253106">Przeglądarka Chromium jest jeszcze lepsza</translation>
 <translation id="7686590090926151193">Chromium nie jest domyślną przeglądarką</translation>
@@ -227,8 +230,7 @@
 <translation id="8619360774459241877">Uruchamiam Chromium…</translation>
 <translation id="8621669128220841554">Instalacja nie powiodła się z powodu nieokreślonego błędu. Pobierz Chromium ponownie.</translation>
 <translation id="8667808506758191620"><ph name="DEVICE_TYPE" /> używa aktualnej wersji oprogramowania.</translation>
-<translation id="8682540261359803721">Jeśli ustawienia nie widać na tej stronie, zajrzyj do <ph name="LINK_BEGIN" />
-      ustawień przeglądarki Chromium<ph name="LINK_END" /></translation>
+<translation id="8682540261359803721">Jeśli ustawienia nie widać na tej stronie, zajrzyj do <ph name="LINK_BEGIN" />ustawień przeglądarki Chromium<ph name="LINK_END" /></translation>
 <translation id="8697124171261953979">Kontroluje także to, jaka strona wyświetla się po uruchomieniu Chromium lub wyszukiwaniu w omniboksie.</translation>
 <translation id="8704119203788522458">Oto Twoja przeglądarka Chromium</translation>
 <translation id="8739167630197873875">Pliki cookie są usuwane, gdy zamykasz Chromium. Aby dalej korzystać z synchronizacji, zmień <ph name="COOKIE_SETTINGS_LINK" />.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb
index e54c47a8..0361f31 100644
--- a/chrome/app/resources/chromium_strings_pt-BR.xtb
+++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -88,6 +88,8 @@
 <translation id="4230135487732243613">Vincular seus dados do Chromium a esta conta?</translation>
 <translation id="4271805377592243930">Ajuda com o Chromium</translation>
 <translation id="4285930937574705105">Ocorreu uma falha na instalação devido a um erro não especificado. Se o Chromium estiver sendo executado, feche-o e tente novamente.</translation>
+<translation id="4371648796594901282">Para detalhes do Chromium OS, veja <ph name="LINK_BEGIN" />
+Sobre o Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Sair do Chromium mesmo assim?</translation>
 <translation id="4415566066719264597">Permitir a execução do Chromium em segundo plano</translation>
 <translation id="4423735387467980091">Personalizar e controlar o Chromium</translation>
@@ -120,6 +122,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Uma atualização do Chromium está disponível}=1{Uma atualização do Chromium está disponível}one{Uma atualização do Chromium está disponível há # dia}other{Uma atualização do Chromium está disponível há # dias}}</translation>
 <translation id="5631814766731275228">Nome e foto do Chromium</translation>
 <translation id="5634636535844844681">O Chromium requer o Windows 7 ou versão superior.</translation>
+<translation id="5653831366781983928">Reinicie o Chromium agora</translation>
 <translation id="5680901439334282664">fazer login no Chromium</translation>
 <translation id="5698481217667032250">Exibir Chromium neste idioma</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -160,6 +163,7 @@
 <translation id="6734080038664603509">Atualizar o &amp;Chromium</translation>
 <translation id="6734291798041940871">O Chromium já está instalado para todos os usuários do seu computador.</translation>
 <translation id="6810143991807788455">Ajude a melhorar o Chromium informando as configurações atuais</translation>
+<translation id="6847869444787758381">O Chromium avisa se suas senhas forem comprometidas</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiado para o Chromium)</translation>
 <translation id="6868056391275687737">Outras cópias do Chromium estão em execução. Para atualizar, feche-as.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb
index f2ecb73a..53f49f2 100644
--- a/chrome/app/resources/chromium_strings_pt-PT.xtb
+++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Associar os seus dados do Chromium a esta conta?</translation>
 <translation id="4271805377592243930">Obter ajuda relacionada com o Chromium</translation>
 <translation id="4285930937574705105">A instalação falhou devido a um erro não especificado. Se o Chromium estiver em execução, feche-o e tente de novo.</translation>
+<translation id="4371648796594901282">Para obter detalhes do Chromium OS, consulte <ph name="LINK_BEGIN" />
+      Acerca do Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Pretende sair do Chromium mesmo assim?</translation>
 <translation id="4415566066719264597">Permitir que o Chromium seja executado em segundo plano</translation>
 <translation id="4423735387467980091">Personalizar e controlar o Chromium</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Está disponível uma atualização do Chromium}=1{Está disponível uma atualização do Chromium}other{Está disponível uma atualização do Chromium há # dias}}</translation>
 <translation id="5631814766731275228">Nome e imagem do Chromium</translation>
 <translation id="5634636535844844681">O Chromium requer o Windows 7 ou superior.</translation>
+<translation id="5653831366781983928">Reinicie o Chromium agora</translation>
 <translation id="5680901439334282664">inicie sessão no Chromium</translation>
 <translation id="5698481217667032250">Apresentar o Chromium neste idioma</translation>
 <translation id="5820394555380036790">SO Chromium</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Atualizar o &amp;Chromium</translation>
 <translation id="6734291798041940871">O Chromium já está instalado para todos os utilizadores no seu computador.</translation>
 <translation id="6810143991807788455">Ajude a melhorar o Chromium ao comunicar as definições atuais</translation>
+<translation id="6847869444787758381">O Chromium indica-lhe se as suas palavras-passe forem comprometidas.</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiado para o Chromium)</translation>
 <translation id="6868056391275687737">Estão em execução outras cópias do Chromium. Para atualizar, encerre-as.</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb
index ab1f2d6..62042cf4 100644
--- a/chrome/app/resources/chromium_strings_ro.xtb
+++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Vă conectați datele Chromium cu acest cont?</translation>
 <translation id="4271805377592243930">Obține ajutor privind Chromium</translation>
 <translation id="4285930937574705105">Instalarea a eșuat din cauza unei erori necunoscute. Dacă Chromium rulează în acest moment, închideți-l și încercați din nou.</translation>
+<translation id="4371648796594901282">Pentru detalii despre sistemul de operare Chromium, accesează <ph name="LINK_BEGIN" />
+      Despre sistemul de operare Chromium<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Ieși din Chromium oricum?</translation>
 <translation id="4415566066719264597">Permite Chromium să ruleze în fundal</translation>
 <translation id="4423735387467980091">Personalizați și controlați Chromium</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Este disponibilă o actualizare Chromium}=1{Este disponibilă o actualizare Chromium}few{O actualizare Chromium este disponibilă de # zile}other{O actualizare Chromium este disponibilă de # de zile}}</translation>
 <translation id="5631814766731275228">Numele și imaginea profilului Chromium</translation>
 <translation id="5634636535844844681">Chromium necesită Windows 7 sau o versiune ulterioară.</translation>
+<translation id="5653831366781983928">Repornește Chromium acum</translation>
 <translation id="5680901439334282664">conectează-te la Chromium</translation>
 <translation id="5698481217667032250">Afișează Chromium în această limbă</translation>
 <translation id="5820394555380036790">Sistemul de operare Chromium</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Actualizați &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium este instalat deja pentru toți utilizatorii de pe computerul tău.</translation>
 <translation id="6810143991807788455">Contribuie la îmbunătățirea browserului Chromium raportând setările actuale</translation>
+<translation id="6847869444787758381">Chromium te anunță dacă parolele tale sunt compromise</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (copiat în Chromium)</translation>
 <translation id="6868056391275687737">Alte copii de Chromium rulează acum. Pentru a actualiza, închide-le.</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb
index 70e473d..6dd2727d 100644
--- a/chrome/app/resources/chromium_strings_ru.xtb
+++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -88,6 +88,7 @@
 <translation id="4230135487732243613">Связать данные Chromium с этим аккаунтом?</translation>
 <translation id="4271805377592243930">Справка Chromium</translation>
 <translation id="4285930937574705105">Установка не удалась из-за неизвестной ошибки. Если Chromium продолжает работать, закройте его и повторите попытку.</translation>
+<translation id="4371648796594901282">Подробнее <ph name="LINK_BEGIN" />о Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Закрыть Chromium?</translation>
 <translation id="4415566066719264597">Разрешить Chromium работать в фоновом режиме</translation>
 <translation id="4423735387467980091">Настройка и управление Chromium</translation>
@@ -120,6 +121,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Доступно обновление Chromium}=1{Доступно обновление Chromium}one{Обновление Chromium доступно # день}few{Обновление Chromium доступно # дня}many{Обновление Chromium доступно # дней}other{Обновление Chromium доступно # дня}}</translation>
 <translation id="5631814766731275228">Имя и изображение профиля Chromium</translation>
 <translation id="5634636535844844681">Для работы Chromium необходима ОС Windows 7 или более поздней версии.</translation>
+<translation id="5653831366781983928">Перезапустите Chromium</translation>
 <translation id="5680901439334282664">войдите в Chromium</translation>
 <translation id="5698481217667032250">Отображать Chromium на этом языке</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -162,6 +164,7 @@
 <translation id="6734080038664603509">Обновить &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium уже установлен для всех пользователей вашего компьютера</translation>
 <translation id="6810143991807788455">Отправьте отчет о текущих настройках Chromium и помогите усовершенствовать работу браузера</translation>
+<translation id="6847869444787758381">Chromium сообщит вам, если возникнет проблема с безопасностью ваших паролей.</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (скопирована в Chromium)</translation>
 <translation id="6868056391275687737">Запущены другие экземпляры Chromium. Чтобы выполнить обновление, закройте их.</translation>
@@ -190,8 +193,7 @@
 <translation id="753534427205733210">{0,plural, =1{Chromium перезапустится через 1 минуту}one{Chromium перезапустится через # минуту}few{Chromium перезапустится через # минуты}many{Chromium перезапустится через # минут}other{Chromium перезапустится через # минуты}}</translation>
 <translation id="7549178288319965365">О Chromium OS</translation>
 <translation id="7561906087460245826">Также удалить данные из Chromium (<ph name="URL" />)</translation>
-<translation id="7585853947355360626">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />
-      настройки Chromium OS<ph name="LINK_END" /></translation>
+<translation id="7585853947355360626">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />настройки Chromium OS<ph name="LINK_END" />.</translation>
 <translation id="761356813943268536">Chromium использует камеру и микрофон.</translation>
 <translation id="7617377681829253106">Chromium становится все лучше</translation>
 <translation id="7686590090926151193">Chromium не является браузером по умолчанию.</translation>
@@ -225,8 +227,7 @@
 <translation id="8619360774459241877">Запуск Chromium...</translation>
 <translation id="8621669128220841554">В процессе установки произошла неизвестная ошибка. Скачайте Chromium ещё раз.</translation>
 <translation id="8667808506758191620">На устройстве <ph name="DEVICE_TYPE" /> используется последняя версия Chromium OS.</translation>
-<translation id="8682540261359803721">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />
-      настройки браузера Chromium<ph name="LINK_END" />.</translation>
+<translation id="8682540261359803721">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />настройки браузера Chromium<ph name="LINK_END" />.</translation>
 <translation id="8697124171261953979">Кроме того, расширение изменило стартовую страницу Chromium и поисковую систему, используемую по умолчанию при вводе запроса в омнибокс.</translation>
 <translation id="8704119203788522458">Ваш персональный Chromium</translation>
 <translation id="8739167630197873875">Вы удаляете файлы cookie при выходе из Chromium. Чтобы продолжить синхронизацию, измените <ph name="COOKIE_SETTINGS_LINK" />.</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb
index 39282640..bb4ee85b 100644
--- a/chrome/app/resources/chromium_strings_sk.xtb
+++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -92,6 +92,8 @@
 <translation id="4230135487732243613">Chcete prepojiť údaje prehliadača Chromium s týmto účtom?</translation>
 <translation id="4271805377592243930">Pomoc s prehliadačom Chromium</translation>
 <translation id="4285930937574705105">Inštalácia zlyhala kvôli neurčenej chybe. Ak je prehliadač Chromium momentálne spustený, zatvorte ho a skúste znova.</translation>
+<translation id="4371648796594901282">Podrobnosti o systéme Chromium OS nájdete na stránke <ph name="LINK_BEGIN" />
+      Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Chcete Chromium napriek tomu ukončiť?</translation>
 <translation id="4415566066719264597">Povoliť prehliadaču Chromium spustenie na pozadí</translation>
 <translation id="4423735387467980091">Prispôsobiť a spravovať Chromium</translation>
@@ -124,6 +126,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Je k dispozícii aktualizácia prehliadača Chromium}=1{Je k dispozícii aktualizácia prehliadača Chromium}few{Aktualizácia prehliadača Chromium je k dispozícii už # dni}many{Aktualizácia prehliadača Chromium je k dispozícii už # dňa}other{Aktualizácia prehliadača Chromium je k dispozícii už # dní}}</translation>
 <translation id="5631814766731275228">Meno a obrázok profilu Chromium</translation>
 <translation id="5634636535844844681">Chromium vyžaduje Windows 7 alebo vyšší.</translation>
+<translation id="5653831366781983928">Reštartujte Chromium</translation>
 <translation id="5680901439334282664">prihláste sa do prehliadača Chromium</translation>
 <translation id="5698481217667032250">Zobraziť Chromium v tomto jazyku</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -166,6 +169,7 @@
 <translation id="6734080038664603509">Aktualizovať prehliadač &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium už majú nainštalovaný všetci používatelia na vašom počítači.</translation>
 <translation id="6810143991807788455">Nahláste aktuálne nastavenia a pomôžte tak zlepšiť prehliadač Chromium</translation>
+<translation id="6847869444787758381">Ak budú vaše heslá napadnuté, Chromium vám to oznámi</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (skopírované do prehliadača Chromium)</translation>
 <translation id="6868056391275687737">Prehliadač Chromium je spustený v ďalších oknách. Ak ho chcete aktualizovať, zavrite ich.</translation>
@@ -196,7 +200,7 @@
 <translation id="753534427205733210">{0,plural, =1{Chromium sa reštartuje o 1 minútu}few{Chromium sa reštartuje o # minúty}many{Chromium sa reštartuje o # minúty}other{Chromium sa reštartuje o # minút}}</translation>
 <translation id="7549178288319965365">Informácie o systéme Chromium OS</translation>
 <translation id="7561906087460245826">Tiež vymazať údaje z prehliadača Chromium (<ph name="URL" />)</translation>
-<translation id="7585853947355360626">Ak nie je určité nastavenie zobrazené na tejto stránke, skontrolujte <ph name="LINK_BEGIN" />nastavenia operačného systému Chromium<ph name="LINK_END" /></translation>
+<translation id="7585853947355360626">Ak určité nastavenie nevidíte na tejto stránke, skontrolujte <ph name="LINK_BEGIN" />nastavenia operačného systému Chromium<ph name="LINK_END" /></translation>
 <translation id="761356813943268536">Chromium používa vašu kameru a mikrofón.</translation>
 <translation id="7617377681829253106">Prehliadač Chromium bol práve vylepšený</translation>
 <translation id="7686590090926151193">Chromium nie je váš predvolený prehliadač</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb
index a01c043..e099d11 100644
--- a/chrome/app/resources/chromium_strings_sl.xtb
+++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -93,6 +93,8 @@
 <translation id="4230135487732243613">Želite svoje podatke v Chromiumu povezati s tem računom?</translation>
 <translation id="4271805377592243930">Pomoč za Chromium</translation>
 <translation id="4285930937574705105">Namestitev ni bila izvedena zaradi nedoločene napake. Če se Chromium trenutno izvaja, ga zaprite in poskusite znova.</translation>
+<translation id="4371648796594901282">Glede podrobnosti o sistemu OS Chromium glejte <ph name="LINK_BEGIN" />
+      O sistemu OS Chromium<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Želite vseeno zapreti Chromium?</translation>
 <translation id="4415566066719264597">Naj se Chromium izvaja v ozadju</translation>
 <translation id="4423735387467980091">Prilagajanje in nadziranje Chromiuma</translation>
@@ -125,6 +127,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Posodobitev za Chromium je na voljo}=1{Posodobitev za Chromium je na voljo}one{Posodobitev za Chromium je na voljo že # dan}two{Posodobitev za Chromium je na voljo že # dneva}few{Posodobitev za Chromium je na voljo že # dni}other{Posodobitev za Chromium je na voljo že # dni}}</translation>
 <translation id="5631814766731275228">Ime in slika za Chromium</translation>
 <translation id="5634636535844844681">Za Chromium potrebujete Windows 7 ali novejši.</translation>
+<translation id="5653831366781983928">Znova zaženite Chromium</translation>
 <translation id="5680901439334282664">se prijavite v Chromium</translation>
 <translation id="5698481217667032250">Prikaži Chromium v tem jeziku</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -167,6 +170,7 @@
 <translation id="6734080038664603509">Posodobi &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium je že nameščen za vse uporabnike v računalniku.</translation>
 <translation id="6810143991807788455">Pomagajte izboljšati Chromium s poročanjem o trenutnih nastavitvah</translation>
+<translation id="6847869444787758381">Chromium vam sporoči, če so gesla ogrožena</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (kopirano v Chromium)</translation>
 <translation id="6868056391275687737">Izvajajo se druge kopije Chromiuma. Če želite opraviti posodobitev, jih zaprite.</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb
index 3f23217..6258af34 100644
--- a/chrome/app/resources/chromium_strings_sr.xtb
+++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -92,6 +92,7 @@
 <translation id="4230135487732243613">Желите ли да повежете Chromium податке са овим налогом?</translation>
 <translation id="4271805377592243930">Пронађите помоћ за Chromium</translation>
 <translation id="4285930937574705105">Инсталација није успела због неодређене грешке. Ако је Chromium тренутно отворен, затворите га и покушајте поново.</translation>
+<translation id="4371648796594901282">Детаље о Chromium ОС-у потражите у одељку <ph name="LINK_BEGIN" />О Chromium ОС-у<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Желите ли ипак да затворите Chromium?</translation>
 <translation id="4415566066719264597">Нека Chromium ради у позадини</translation>
 <translation id="4423735387467980091">Прилагодите и контролишите Chromium</translation>
@@ -124,6 +125,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Ажурирање за Chromium је доступно}=1{Ажурирање за Chromium је доступно}one{Ажурирање за Chromium је доступно већ # дан}few{Ажурирање за Chromium је доступно већ # дана}other{Ажурирање за Chromium је доступно већ # дана}}</translation>
 <translation id="5631814766731275228">Назив и слика Chromium профила</translation>
 <translation id="5634636535844844681">За Chromium је потребан Windows 7 или новија верзија.</translation>
+<translation id="5653831366781983928">Рестартујте Chromium</translation>
 <translation id="5680901439334282664">пријавите се на Chromium</translation>
 <translation id="5698481217667032250">Приказуј Chromium на овом језику</translation>
 <translation id="5820394555380036790">Chromium ОС</translation>
@@ -166,6 +168,7 @@
 <translation id="6734080038664603509">Ажурирај &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium је већ инсталиран за све кориснике на рачунару.</translation>
 <translation id="6810143991807788455">Помозите да побољшамо Chromium тако што ћете послати извештај о актуелним подешавањима</translation>
+<translation id="6847869444787758381">Chromium вас обавештава ако су лозинке угрожене</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (копирано у Chromium)</translation>
 <translation id="6868056391275687737">Друге копије Chromium-а су активне. Да бисте обавили ажурирање, затворите их.</translation>
diff --git a/chrome/app/resources/chromium_strings_ta.xtb b/chrome/app/resources/chromium_strings_ta.xtb
index 154cb801..ee6d091 100644
--- a/chrome/app/resources/chromium_strings_ta.xtb
+++ b/chrome/app/resources/chromium_strings_ta.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">உங்கள் Chromium தரவை இந்தக் கணக்குடன் இணைக்கவா?</translation>
 <translation id="4271805377592243930">Chromium தொடர்பான உதவி பெறுக</translation>
 <translation id="4285930937574705105">குறிப்பிடப்படாத பிழைக் காரணமாக நிறுவல் தோல்வியடைந்தது. Chromium தற்போது இயக்கத்தில் இருந்தால், அதை மூடி, பின்னர் முயலவும்.</translation>
+<translation id="4371648796594901282">Chromium OS விவரங்களுக்கு <ph name="LINK_BEGIN" />
+Chromium OS அறிமுகம்<ph name="LINK_END" /> என்பதைப் பார்க்கவும்</translation>
 <translation id="4407044323746248786">Chromium இலிருந்து வெளியேறவா?</translation>
 <translation id="4415566066719264597">பின்னணியில் Chromiumஐ இயங்க அனுமதி</translation>
 <translation id="4423735387467980091">Chromium ஐ தனிப்பயனாக்கி கட்டுப்படுத்துக</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Chromiumமிற்கான புதுப்பிப்பு உள்ளது}=1{Chromiumமிற்கான புதுப்பிப்பு உள்ளது}other{Chromiumமிற்கான புதுப்பிப்பு வந்து # நாட்களாகிறது}}</translation>
 <translation id="5631814766731275228">Chromium பெயர் மற்றும் படம்</translation>
 <translation id="5634636535844844681">Windows 7 அல்லது அதற்குப் பிந்தைய பதிப்புகளில் மட்டுமே Chromium இயங்கும்.</translation>
+<translation id="5653831366781983928">Chromiumமை இப்போது மீண்டும் தொடங்கவும்</translation>
 <translation id="5680901439334282664">Chromium இல் உள்நுழைக</translation>
 <translation id="5698481217667032250">Chromiumமை இந்த மொழியில் காட்டு</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">&amp;Chromium ஐப் புதுப்பி</translation>
 <translation id="6734291798041940871">உங்கள் கம்ப்யூட்டரில் ஏற்கனவே எல்லாப் பயனர்களுக்கும் Chromium நிறுவப்பட்டுள்ளது.</translation>
 <translation id="6810143991807788455">நடப்பு அமைப்புகள் குறித்து தெரிவிப்பதன் மூலம் Chromiumஐச் சிறந்ததாக்க உதவவும்</translation>
+<translation id="6847869444787758381">கடவுச்சொற்கள் பாதுகாப்பை இழக்கும்பட்சத்தில் அவற்றை Chromium உங்களுக்குத் தெரியப்படுத்தும்</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (Chromiumக்கு நகலெடுக்கப்பட்டது)</translation>
 <translation id="6868056391275687737">Chromiumமின் பிற நேர்வுகள் செயல்பாட்டில் உள்ளன. புதுப்பிக்க அவற்றை மூடவும்.</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb
index 9e7c560e..843994f2 100644
--- a/chrome/app/resources/chromium_strings_th.xtb
+++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -90,6 +90,7 @@
 <translation id="4230135487732243613">เชื่อมโยงข้อมูล Chromium กับบัญชีนี้ไหม</translation>
 <translation id="4271805377592243930">รับความช่วยเหลือเกี่ยวกับ Chromium</translation>
 <translation id="4285930937574705105">การติดตั้งล้มเหลวเนื่องจากมีข้อผิดพลาดที่ไม่ได้ระบุ หาก Chromium ทำงานอยู่ในขณะนี้ โปรดปิดและลองอีกครั้ง</translation>
+<translation id="4371648796594901282">สำหรับรายละเอียดของ Chromium OS โปรดดู<ph name="LINK_BEGIN" />เกี่ยวกับ Chromium OS<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">ออกจาก Chromium ใช่ไหม</translation>
 <translation id="4415566066719264597">ให้ Chromium ทำงานในพื้นหลัง</translation>
 <translation id="4423735387467980091">กำหนดค่าและควบคุม Chromium</translation>
@@ -122,6 +123,7 @@
 <translation id="5623402015214259806">{0,plural, =0{มีอัปเดต Chromium พร้อมให้ใช้งาน}=1{มีอัปเดต Chromium พร้อมให้ใช้งาน}other{อัปเดต Chromium พร้อมให้ใช้งานมาแล้ว # วัน}}</translation>
 <translation id="5631814766731275228">ชื่อและภาพโปรไฟล์ Chromium</translation>
 <translation id="5634636535844844681">Chromium ต้องใช้ Windows 7 ขึ้นไป</translation>
+<translation id="5653831366781983928">โปรดรีสตาร์ท Chromium ตอนนี้เลย</translation>
 <translation id="5680901439334282664">ลงชื่อเข้าใช้ Chromium</translation>
 <translation id="5698481217667032250">แสดง Chromium ในภาษานี้</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
@@ -164,6 +166,7 @@
 <translation id="6734080038664603509">อัปเดต &amp;Chromium</translation>
 <translation id="6734291798041940871">มีการติดตั้ง Chromium สำหรับผู้ใช้ทุกคนบนคอมพิวเตอร์ของคุณแล้ว</translation>
 <translation id="6810143991807788455">ช่วยให้ Chromium ดียิ่งขึ้นด้วยการรายงานการตั้งค่าปัจจุบัน</translation>
+<translation id="6847869444787758381">Chromium จะแจ้งให้ทราบหากมีคนล่วงรู้รหัสผ่านของคุณ</translation>
 <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (คัดลอกไปยัง Chromium)</translation>
 <translation id="6868056391275687737">ใช้งาน Chromium สำเนาอื่นอยู่ ปิดสำเนานั้นก่อนแล้วค่อยอัปเดต</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb
index 94a9a75..e366cdb 100644
--- a/chrome/app/resources/chromium_strings_uk.xtb
+++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -90,6 +90,8 @@
 <translation id="4230135487732243613">Пов’язати ваші дані Chromium із цим обліковим записом?</translation>
 <translation id="4271805377592243930">Отримати довідку щодо Chromium</translation>
 <translation id="4285930937574705105">Не вдалося встановити через невизначену помилку. Якщо Chromium зараз запущено, закрийте його та повторіть спробу.</translation>
+<translation id="4371648796594901282">Щоб отримати докладнішу інформацію, перегляньте сторінку <ph name="LINK_BEGIN" />
+      Про ОС Chromium<ph name="LINK_END" /></translation>
 <translation id="4407044323746248786">Усе одно вийти з Chromium?</translation>
 <translation id="4415566066719264597">Дозволити Chromium працювати у фоновому режимі</translation>
 <translation id="4423735387467980091">Налаштування та керування Chromium</translation>
@@ -122,6 +124,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Доступне оновлення Chromium}=1{Доступне оновлення Chromium}one{Оновлення Chromium доступне вже # день}few{Оновлення Chromium доступне вже # дні}many{Оновлення Chromium доступне вже # днів}other{Оновлення Chromium доступне вже # дня}}</translation>
 <translation id="5631814766731275228">Ім’я та зображення профілю Chromium</translation>
 <translation id="5634636535844844681">Для роботи Chromium потрібно мати ОС Windows 7 або новішої версії.</translation>
+<translation id="5653831366781983928">Перезапустіть Chromium</translation>
 <translation id="5680901439334282664">увійдіть в обліковий запис Chromium</translation>
 <translation id="5698481217667032250">Вибрати цю мову для Chromium</translation>
 <translation id="5820394555380036790">ОС Chromium</translation>
@@ -164,6 +167,7 @@
 <translation id="6734080038664603509">Оновити &amp;Chromium</translation>
 <translation id="6734291798041940871">Chromium уже встановлено для всіх користувачів на вашому комп’ютері.</translation>
 <translation id="6810143991807788455">Допоможіть покращити Chromium, надсилаючи звіти про поточні налаштування</translation>
+<translation id="6847869444787758381">Chromium повідомляє, коли ваші паролі зламують</translation>
 <translation id="6857782730669500492">Chromium – <ph name="PAGE_TITLE" /></translation>
 <translation id="6863361426438995919">Google Pay (скопійовано в Chromium)</translation>
 <translation id="6868056391275687737">Запущено інші копії Chromium. Щоб оновити, закрийте їх.</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb
index 5d201c4..49ad4c3 100644
--- a/chrome/app/resources/chromium_strings_zh-TW.xtb
+++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -194,7 +194,7 @@
 <translation id="753534427205733210">{0,plural, =1{Chromium 將在 1 分鐘後重新啟動}other{Chromium 將在 # 分鐘後重新啟動}}</translation>
 <translation id="7549178288319965365">關於 Chromium 作業系統</translation>
 <translation id="7561906087460245826">一併清除 Chromium 中的資料 (<ph name="URL" />)</translation>
-<translation id="7585853947355360626">如果這個頁面上未顯示你的設定,請檢查 <ph name="LINK_BEGIN" />
+<translation id="7585853947355360626">如果這個頁面上並未顯示你的設定,請檢查 <ph name="LINK_BEGIN" />
       Chromium 作業系統設定<ph name="LINK_END" /></translation>
 <translation id="761356813943268536">Chromium 正在使用你的攝影機和麥克風。</translation>
 <translation id="7617377681829253106">Chromium 變得更進步了</translation>
@@ -229,7 +229,7 @@
 <translation id="8619360774459241877">正在啟動 Chromium…</translation>
 <translation id="8621669128220841554">不明錯誤導致安裝失敗,請重新下載 Chromium。</translation>
 <translation id="8667808506758191620">您的 <ph name="DEVICE_TYPE" /> 已搭載最新版作業系統。</translation>
-<translation id="8682540261359803721">如果這個頁面上未顯示你的設定,請檢查 <ph name="LINK_BEGIN" />
+<translation id="8682540261359803721">如果這個頁面上並未顯示你的設定,請檢查 <ph name="LINK_BEGIN" />
       Chromium 瀏覽器設定<ph name="LINK_END" /></translation>
 <translation id="8697124171261953979">這個擴充功能也會控管 Chromium 啟動時或你使用網址列搜尋時所顯示的網頁。</translation>
 <translation id="8704119203788522458">這是你專屬的 Chromium</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index aa305fff..a35d991 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -2167,7 +2167,6 @@
 <translation id="4146026355784316281">ሁልጊዜ ከሥርዓት ተመልካች ጋር ክፈት</translation>
 <translation id="4146785383423576110">ዳግም አዘጋጅ እና አጽዳ</translation>
 <translation id="4147911968024186208">እባክዎ እንደገና ይሞክሩ። ይህን ስህተት በድጋሚ ከተመለከቱ እባክዎ የድጋፍ ተወካይዎን ያነጋግሩ።</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">ማሳያ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ትር}one{# ትሮች}other{# ትሮች}}</translation>
 <translation id="4154664944169082762">የጣት አሻራዎች</translation>
@@ -3521,7 +3520,6 @@
 <translation id="6212039847102026977">የላቁ የአውታረ መረብ ባህሪያትን አሳይ</translation>
 <translation id="6212168817037875041">ማሳያን አጥፋ</translation>
 <translation id="6212752530110374741">የኢሜይል አገናኝ</translation>
-<translation id="6214642087594370545">የውሂብ ጥሰት አካል የነበረ ደህንነቱ ያልተጠበቀ ይለፍ ቃል ሲጠቀሙ ማስጠንቀቂያ ያሳይ። በመለያ ለገቡ ተጠቃሚዎች ብቻ የሚገኝ።</translation>
 <translation id="6216696360484424239">በራስ ሰር በመለያ ግባ</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ከመስመር ውጭ ነው። ከበይነመረቡ ጋር ይገናኙና እንደገና ይሞክሩ።</translation>
 <translation id="6220413761270491930">ቅጥያ መጫን ላይ ስህተት</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 0c9fb30d0..ea85af3 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">جلسة التصفح المتخفي الحالية فقط</translation>
 <translation id="1698650002254827833">يتعذّر تحميل قائمة التطبيقات. يُرجى إعادة المحاولة.</translation>
 <translation id="1701062906490865540">إزالة هذا الشخص</translation>
+<translation id="1703331064825191675">لا داعي للقلق مطلقًا بشأن كلمات المرور</translation>
 <translation id="1706586824377653884">تمت الإضافة من قبل المشرف</translation>
 <translation id="1706625117072057435">مستويات التكبير/التصغير</translation>
 <translation id="1708338024780164500">(غير نشطة)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">تجريبي</translation>
 <translation id="176587472219019965">نا&amp;فذة جديدة</translation>
 <translation id="1766575458646819543">الخروج من وضع ملء الشاشة</translation>
+<translation id="1766957085594317166">‏يمكنك حفظ كلمات المرور بأمان في حسابك على Google، ولن تضطر إلى كتابتها مرة أخرى مطلقًا.</translation>
 <translation id="1768278914020124551">عفوًا،  حدثت مشكلة أثناء الاتصال بخادم تسجيل الدخول. يُرجى التحقق من اتصالك بالشبكة واسم النطاق، ثم أعد المحاولة.</translation>
 <translation id="1769104665586091481">فتح الرابط في &amp;نافذة جديدة</translation>
 <translation id="1773212559869067373">تمّ رفض شهادة المصادقة محليًا</translation>
@@ -736,7 +738,7 @@
 <translation id="2090165459409185032">‏لاسترداد معلومات حسابك، انتقل إلى: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">إعداد أمان النظام</translation>
 <translation id="2091887806945687916">الصوت</translation>
-<translation id="2096715839409389970">مسح ملفات تعريف الارتباط التابعة لجهات خارجية</translation>
+<translation id="2096715839409389970">حذف ملفات تعريف الارتباط التابعة لجهات خارجية</translation>
 <translation id="2097372108957554726">‏يلزمك تسجيل الدخول إلى Chrome لتسجيل الأجهزة الجديدة</translation>
 <translation id="2099172618127234427">‏أنت تمكن ميزات تصحيح الأخطاء لنظام التشغيل Chrome التي ستثبّت البرنامج الخفي لـ sshd وتمكن التشغيل من محركات الأقراص USB.</translation>
 <translation id="2099686503067610784">هل تريد حذف شهادة الخادم "<ph name="CERTIFICATE_NAME" />"؟</translation>
@@ -873,7 +875,7 @@
 <translation id="2270450558902169558">تبادل البيانات مع أي جهاز في النطاق <ph name="DOMAIN" /></translation>
 <translation id="2270627217422354837">تبادل البيانات مع أي جهاز في النطاقات: <ph name="DOMAINS" /></translation>
 <translation id="2272570998639520080">كوب عصير</translation>
-<translation id="2273119997271134996">مشكلة متعلقة بمنفذ فيديو محطة الإرساء</translation>
+<translation id="2273119997271134996">مشكلة متعلقة بمنفذ الفيديو في محطة الإرساء</translation>
 <translation id="2276503375879033601">إضافة المزيد من التطبيقات</translation>
 <translation id="2277255602909579701">جميع ملفات تعريف الارتباط وبيانات الموقع</translation>
 <translation id="2277769717710009150">{COUNT,plural, =1{تم نسخ عنصر واحد}zero{تم نسخ # عنصر}two{تم نسخ عنصرين (#)}few{تم نسخ # عناصر}many{تم نسخ # عنصرًا}other{تم نسخ # عنصر}}</translation>
@@ -967,7 +969,7 @@
 <translation id="2423578206845792524">حف&amp;ظ الصورة باسم...</translation>
 <translation id="2428510569851653187">وصف ما كنت تفعله عندما تعطّلت علامة التبويب</translation>
 <translation id="2431027948063157455">‏تعذّر تحميل مساعد Google، يُرجى التحقُّق من اتصال الشبكة وإعادة المحاولة.</translation>
-<translation id="243242775089461296">تم إيقاف حظر ملف تعريف الارتباط التابع لجهات خارجية لهذا الموقع الإلكتروني.</translation>
+<translation id="243242775089461296">تم إيقاف إعداد "حظر ملف تعريف الارتباط التابع لجهات خارجية" لهذا الموقع الإلكتروني.</translation>
 <translation id="2432753757290432042">‏تحديث Linux (إصدار تجريبي) مطلوب</translation>
 <translation id="2433452467737464329">‏إضافة معلمة لطلب البحث في عنوان URL لتحديث الصفحة تلقائيًا: chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433507940547922241">المظهر</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">غير متصل</translation>
 <translation id="3752582316358263300">موافق...</translation>
 <translation id="3752673729237782832">أجهزتي</translation>
+<translation id="3753033997400164841">التخزين لمرة واحدة الاستخدام في كل مكان</translation>
 <translation id="3755411799582650620">بإمكان هاتفك <ph name="PHONE_NAME" /> أن يلغي قفل جهاز<ph name="DEVICE_TYPE" /> أيضًا.</translation>
 <translation id="375636864092143889">يستخدم موقع الويب الميكروفون.</translation>
 <translation id="3757733214359997190">لم يتم العثور على أي مواقع</translation>
@@ -2164,7 +2167,6 @@
 <translation id="4146026355784316281">افتح دائمًا باستخدام عرض النظام</translation>
 <translation id="4146785383423576110">إعادة التعيين وإزالة البرامج الضارة</translation>
 <translation id="4147911968024186208">يُرجى إعادة المحاولة. وإذا ظهر هذا الخطأ مرة أخرى، يُرجى التواصل مع ممثِّل الدعم.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">عرض</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{علامة تبويب واحدة}zero{# من علامات التبويب}two{علامتا تبويب (#)}few{# علامات تبويب}many{# علامة تبويب}other{# من علامات التبويب}}</translation>
 <translation id="4154664944169082762">بصمات الأصابع</translation>
@@ -2205,6 +2207,7 @@
 <translation id="4232375817808480934">‏ضبط Kerberos</translation>
 <translation id="4235200303672858594">الشاشة بالكامل</translation>
 <translation id="4235965441080806197">إلغاء تسجيل الدخول</translation>
+<translation id="4242145785130247982">شهادات العميل المتعددة غير متاحة</translation>
 <translation id="4242533952199664413">فتح الإعدادات</translation>
 <translation id="4242577469625748426">تعذّر تثبيت إعدادات السياسة على الجهاز: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">العثور على المزيد من تطبيقات قلم الشاشة</translation>
@@ -2663,6 +2666,7 @@
 <translation id="4957949153200969297">يمكنك تفعيل الميزات ذات الصلة بمزامنة <ph name="IDS_SHORT_PRODUCT_NAME" /> فقط.</translation>
 <translation id="4959262764292427323">‏يتم حفظ كلمات المرور في حسابك على Google حتى تتمكَّن من استخدامها على أي جهاز.</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">لقد ثبّت مشرفك هذا التطبيق.</translation>
 <translation id="4964455510556214366">الترتيب</translation>
 <translation id="4964673849688379040">جارٍ التحقق...</translation>
 <translation id="4965808351167763748">‏هل تريد بالتأكيد إعداد هذا الجهاز لتشغيل Hangouts Meet؟</translation>
@@ -2783,7 +2787,7 @@
 <translation id="5142961317498132443">المصادقة</translation>
 <translation id="5143374789336132547">غيّرت الإضافة "<ph name="EXTENSION_NAME" />" الصفحة التي تظهر عند النقر على زر الصفحة الرئيسية.</translation>
 <translation id="5143712164865402236">دخول إلى وضع ملء الشاشة</translation>
-<translation id="5145461783043820456">تم تفعيل حظر ملف تعريف الارتباط التابع لجهة خارجية.</translation>
+<translation id="5145461783043820456">تم تفعيل إعداد "حظر ملف تعريف الارتباط التابع لجهة خارجية".</translation>
 <translation id="514575469079499857">‏استخدام عنوان IP لتحديد الموقع الجغرافي (تلقائي)</translation>
 <translation id="5146995429444047494">يتم حظر الإشعارات للنطاق <ph name="ORIGIN" /></translation>
 <translation id="5150254825601720210">‏اسم خادم بروتوكول SSL (طبقة المقابس الآمنة) لشهادة Netscape</translation>
@@ -2920,6 +2924,7 @@
 <translation id="5360150013186312835">العرض في شريط الأدوات</translation>
 <translation id="5362741141255528695">حدد ملف المفتاح الخاص.</translation>
 <translation id="5363109466694494651">إجراء المحو الكامل والعودة</translation>
+<translation id="5365716706805792666">‏بإمكان Google التحقُّق مما إذا تم استخدام كلمات المرور في عملية اختراق البيانات. سيتم تفعيل هذه الميزة عند تسجيل الدخول باستخدام حسابك على Google.</translation>
 <translation id="5365881113273618889">يتضمَّن المجلَّد الذي اخترته ملفات حساسة. هل تريد بالتأكيد منح "<ph name="APP_NAME" />" إمكانية الوصول الدائم للكتابة في هذا المجلَّد؟</translation>
 <translation id="5367091008316207019">جارٍ قراءة الملف..</translation>
 <translation id="5368720394188453070">هاتفك مغلق. ألغ قفله للدخول.</translation>
@@ -3056,7 +3061,7 @@
 <translation id="5543983818738093899">جارٍ التحقق من الحالة ...</translation>
 <translation id="554517032089923082">GTC</translation>
 <translation id="5546865291508181392">بحث</translation>
-<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" وعلامة تبويب واحدة أخرى}two{"<ph name="TAB_TITLE" />" وعلامتا تبويب (#) أخريان}few{"<ph name="TAB_TITLE" />" و# علامات تبويب أخرى}many{"<ph name="TAB_TITLE" />" و# علامةً تبويب أخرى}other{"<ph name="TAB_TITLE" />" و# علامة تبويب أخرى}}</translation>
+<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" وعلامة تبويب واحدة أخرى}two{"<ph name="TAB_TITLE" />" وعلامتا تبويب أخريان}few{"<ph name="TAB_TITLE" />" و# علامات تبويب أخرى}many{"<ph name="TAB_TITLE" />" و# علامة تبويب أخرى}other{"<ph name="TAB_TITLE" />" و# علامة تبويب أخرى}}</translation>
 <translation id="5551573675707792127">لوحة المفاتيح وإدخال النص</translation>
 <translation id="5553089923092577885">تعيينات سياسة الشهادة</translation>
 <translation id="5554489410841842733">سيظهر هذا الرمز عند عمل الإضافة في الصفحة الحالية.</translation>
@@ -3517,7 +3522,6 @@
 <translation id="6212039847102026977">عرض خصائص الشبكة المتقدمة</translation>
 <translation id="6212168817037875041">إيقاف تشغيل الشاشة</translation>
 <translation id="6212752530110374741">إرسال الرابط عبر البريد الإلكتروني</translation>
-<translation id="6214642087594370545">يُظهر هذه الإعداد تحذيرًا عند استخدام كلمة مرور غير آمنة كانت ضمن عملية اختراق البيانات. وهو متاح للمستخدمين الذين سجلوا الدخول فقط.</translation>
 <translation id="6216696360484424239">تسجيل الدخول تلقائيًا</translation>
 <translation id="6218058416316985984">جهاز <ph name="DEVICE_TYPE" /> غير متّصل بالإنترنت. يُرجى الاتصال بالإنترنت وإعادة المحاولة.</translation>
 <translation id="6220413761270491930">خطأ في تحميل الإضافة</translation>
@@ -3874,6 +3878,7 @@
 <translation id="6769712124046837540">جارٍ إضافة طابعة...</translation>
 <translation id="6770664076092644100">‏التحقُّق عبر NFC</translation>
 <translation id="6771503742377376720">هو مرجع مصدق</translation>
+<translation id="6775163072363532304">الأجهزة المتاحة ستظهر هنا.</translation>
 <translation id="6777817260680419853">تم حظر إعادة التوجيه</translation>
 <translation id="6778737459546443941">لم يوافق عليه والداك حتى الآن</translation>
 <translation id="677965093459947883">صغير جدًا</translation>
@@ -4334,6 +4339,7 @@
 <translation id="7441830548568730290">المستخدمون الآخرون</translation>
 <translation id="7442465037756169001">‏جهاز Hangouts Meet جاهز للإعداد.</translation>
 <translation id="744341768939279100">إنشاء ملف شخصي جديد</translation>
+<translation id="7443806024147773267">‏يمكنك الوصول إلى كلمات المرور وقتما تسجّل الدخول إلى حسابك على Google.</translation>
 <translation id="7444046173054089907">تم حظر هذا الموقع</translation>
 <translation id="7444983668544353857">إيقاف <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">يمكنك تثبيت التطبيقات تلقائيًا.</translation>
@@ -4607,7 +4613,7 @@
     <ph name="BR" />
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />ملاحظة:<ph name="END_BOLD" />  ستتم إعادة تشغيل النظام أثناء العملية.</translation>
-<translation id="7828731929332799387">سيؤدي هذا إلى حذف جميع ملفات تعريف الارتباط وبيانات الموقع الإلكتروني المتوفرة في سياقات تابعة لجهات خارجية. هل تريد المتابعة؟</translation>
+<translation id="7828731929332799387">سيؤدي هذا إلى حذف جميع ملفات تعريف الارتباط وبيانات الموقع الإلكتروني المتوفرة في سياقات تابعة لجهات خارجية. هل تريد المواصلة؟</translation>
 <translation id="7829298379596169484">جارٍ الوصول إلى إدخال الصوت</translation>
 <translation id="7830594666202422257">‏الربط بنظام التشغيل Linux</translation>
 <translation id="7831491651892296503">حدث خطأ أثناء تهيئة الشبكة</translation>
@@ -4747,6 +4753,7 @@
 <translation id="8014154204619229810">يتم تشغيل أداة التحديث حاليًا. يمكنك التحديث في دقيقة واحدة للتحقق مرة أخرى.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> غير قادر على العودة إلى الإصدار المثبت مسبقًا. يُرجى إعادة محاولة إجراء المحو الكامل لبيانات جهازك.</translation>
 <translation id="8014210335923519270">‏تحسين <ph name="IDS_SHORT_PRODUCT_NAME" /> والأمان عن طريق إرسال معلومات النظام والاستخدام إلى Google</translation>
+<translation id="8015780634880457457">‏بإمكان Google التحقُّق مما إذا تم استخدام كلمات المرور في عملية اختراق البيانات.</translation>
 <translation id="8016266267177410919">التخزين المؤقت</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">تمّ تعديل الاختصار</translation>
@@ -4865,6 +4872,7 @@
 <translation id="8188389033983459049">التحقُّق من إعدادات جهازك وتفعيلها للاستمرار</translation>
 <translation id="8190193592390505034">جارٍ الاتصال بـ <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">إدارة التطبيقات والإضافات والمظاهر</translation>
+<translation id="819464600477418284">‏لا يمكن إلغاء تثبيت هذا التطبيق لأنه جزء من نظام التشغيل Chrome.</translation>
 <translation id="8195027750202970175">الحجم على القرص</translation>
 <translation id="8198323535106903877">سنعمل على تثبيت <ph name="NUMBER_OF_APPS" /> من هذه التطبيقات من أجلك</translation>
 <translation id="8199300056570174101">خصائص الشبكة (الخدمة) والجهاز</translation>
@@ -4925,6 +4933,7 @@
     <ph name="BEGIN_PARAGRAPH2" />لن يؤثر إيقاف هذه الميزة في قدرة هذا الجهاز على إرسال المعلومات المطلوبة للحصول على خدمات أساسية، مثل تحديثات النظام والأمان.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />يمكن للمالك التحكُّم في هذه الميزة من "الإعدادات" &gt; "إعدادات متقدمة" &gt; إرسال بيانات التشخيص والاستخدام إلى Google تلقائيًا.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />في حال تفعيل إعداد "النشاط على الويب وفي التطبيقات" الإضافي في حساب طفلك على Google، قد يتم حفظ هذه البيانات في هذا الحساب. ويمكنك معرفة مزيد من المعلومات عن هذه الإعدادات وكيفية ضبطها على families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">شهادة عميل غير صالحة</translation>
 <translation id="8270242299912238708">‏مستندات PDF</translation>
 <translation id="827097179112817503">عرض زر الصفحة الرئيسية</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{تم حذف إشارة مرجعية واحدة}zero{تم حذف # إشارة مرجعية}two{تم حذف إشارتين مرجعيتين (#)}few{تم حذف # إشارات مرجعية}many{تم حذف # إشارةً مرجعيةً}other{تم حذف # إشارة مرجعية}}</translation>
@@ -5308,7 +5317,7 @@
 <translation id="8828933418460119530">‏اسم نظام أسماء النطاقات (DNS)</translation>
 <translation id="883062543841130884">الاستبدالات</translation>
 <translation id="8830796635868321089">تعذّر البحث عن التحديثات باستخدام إعدادات الخادم الوكيل الحالية. يُرجى ضبط <ph name="PROXY_SETTINGS_LINK_START" />إعدادات الخادم الوكيل<ph name="PROXY_SETTINGS_LINK_END" />.</translation>
-<translation id="8831140208248705279">‏يعمل جهاز <ph name="DEVICE_TYPE" /> والهاتف الذي يعمل بنظام التشغيل Android بشكلٍ أفضل معًا. ويمكنك ربطهما حتى تتمكَّن من إرسال رسائل نصية من جهاز الكمبيوتر ومشاركة اتصالك بالإنترنت وفتح قفل جهاز Chromebook باستخدام هاتفك.<ph name="DEVICE_TYPE" /><ph name="FOOTNOTE_POINTER" /><ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
+<translation id="8831140208248705279">‏يعمل جهاز <ph name="DEVICE_TYPE" /> وهاتف Android بشكلٍ أفضل معًا. ويمكنك ربطهما حتى تتمكَّن من إرسال رسائل نصية من جهاز الكمبيوتر ومشاركة اتصالك بالإنترنت وفتح قفل جهاز Chromebook باستخدام هاتفك.<ph name="DEVICE_TYPE" /><ph name="FOOTNOTE_POINTER" /><ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">فتح إعدادات الإضافات</translation>
 <translation id="8834039744648160717">يتم التحكم في تهيئة الشبكة بواسطة <ph name="USER_EMAIL" />.</translation>
 <translation id="8838770651474809439">هامبورجر</translation>
@@ -5338,6 +5347,7 @@
 <translation id="8874184842967597500">غير متصل</translation>
 <translation id="8876307312329369159">لا يمكن تغيير هذا الإعداد في جلسة تجريبية.</translation>
 <translation id="8877448029301136595">[الدليل الأصل]</translation>
+<translation id="8879220587046205278">‏يمكن أن تتطلب التطبيقات من Google Play إذن الوصول الكامل إلى نظام الملفات لقراءة الملفات وكتابتها على أجهزة التخزين الخارجية. تكون الملفات والمجلدات التي تم إنشاؤها على الجهاز مرئية لأيِّ شخص يستخدم محرك الأقراص الخارجي.</translation>
 <translation id="8879284080359814990">إ&amp;ظهار كعلامة تبويب</translation>
 <translation id="8879921471468674457">تذكّر معلومات تسجيل الدخول</translation>
 <translation id="8881020143150461183">يُرجى إعادة المحاولة. للحصول على الدعم الفني، يُرجى التواصل مع <ph name="CARRIER_NAME" />.</translation>
@@ -5407,7 +5417,7 @@
 <translation id="8973596347849323817">يمكنك تخصيص هذا الجهاز للتوافق مع احتياجاتك. ويمكن تغيير ميزات إمكانية الوصول هذه لاحقًا من خلال الإعدادات.</translation>
 <translation id="897414447285476047">ملف الوجهة غير مكتمل بسبب حدوث مشكلة في الاتصال.</translation>
 <translation id="897525204902889653">خدمة وحدة العزل</translation>
-<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" وعلامة تبويب واحدة أخرى}two{"<ph name="TAB_TITLE" />" وعلامتا تبويب (#) أخريان}few{"<ph name="TAB_TITLE" />" و# علامات تبويب أخرى}many{"<ph name="TAB_TITLE" />" و# علامةً تبويب أخرى}other{"<ph name="TAB_TITLE" />" و# علامة تبويب أخرى}}</translation>
+<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" وعلامة تبويب واحدة أخرى}two{"<ph name="TAB_TITLE" />" وعلامتا تبويب أخريان}few{"<ph name="TAB_TITLE" />" و# علامات تبويب أخرى}many{"<ph name="TAB_TITLE" />" و# علامة تبويب أخرى}other{"<ph name="TAB_TITLE" />" و# علامة تبويب أخرى}}</translation>
 <translation id="8976520271376534479">‏تم حظر تشغيل Flash في هذه الصفحة.</translation>
 <translation id="8977811652087512276">كلمة مرور غير صالحة أو ملف تالف</translation>
 <translation id="8978154919215542464">تشغيل - مزامنة كل شيء</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index ae11a106..8c1d024 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -476,6 +476,7 @@
 <translation id="1698122934742150150">Само за текущата сесия в режим „инкогнито“</translation>
 <translation id="1698650002254827833">Списъкът с приложения не може да бъде зареден. Моля, опитайте отново.</translation>
 <translation id="1701062906490865540">Премахване на този човек</translation>
+<translation id="1703331064825191675">Никога повече не се тревожете за паролите си</translation>
 <translation id="1706586824377653884">Добавено от администратора ви</translation>
 <translation id="1706625117072057435">Нива на мащаба</translation>
 <translation id="1708338024780164500">(Неактивно)</translation>
@@ -525,6 +526,7 @@
 <translation id="1764226536771329714">бета</translation>
 <translation id="176587472219019965">&amp;Нов прозорец</translation>
 <translation id="1766575458646819543">Излязохте от режима на цял екран</translation>
+<translation id="1766957085594317166">Паролите ви ще се съхраняват сигурно в профила ви в Google и няма да се налага да ги въвеждате отново</translation>
 <translation id="1768278914020124551">Ами сега! При свързването със сървъра за вход възникна проблем. Моля, проверете връзката си с мрежата и името на домейна, след което опитайте отново.</translation>
 <translation id="1769104665586091481">Отваряне на връзката в нов &amp;прозорец</translation>
 <translation id="1773212559869067373">Сертификатът за удостоверяване бе отхвърлен локално</translation>
@@ -1873,6 +1875,7 @@
 <translation id="3748026146096797577">Няма връзка</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Моите устройства</translation>
+<translation id="3753033997400164841">Съхранете веднъж. Използвайте навсякъде</translation>
 <translation id="3755411799582650620">Телефонът ви <ph name="PHONE_NAME" /> вече може да отключва и този <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Сайтът използва микрофона ви</translation>
 <translation id="3757733214359997190">Няма намерени сайтове</translation>
@@ -2166,7 +2169,6 @@
 <translation id="4146026355784316281">Отваряне винаги със системния визуализатор</translation>
 <translation id="4146785383423576110">Нулиране на настройките и почистване</translation>
 <translation id="4147911968024186208">Моля, опитайте пак. Ако отново видите тази грешка, свържете се с представител на екипа за поддръжка.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Екран</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 раздел}other{# раздела}}</translation>
 <translation id="4154664944169082762">Пръстови отпечатъци</translation>
@@ -2207,6 +2209,7 @@
 <translation id="4232375817808480934">Конфигуриране на Kerberos</translation>
 <translation id="4235200303672858594">Цял екран</translation>
 <translation id="4235965441080806197">Анулиране на влизането</translation>
+<translation id="4242145785130247982">Не се поддържа използването на няколко клиентски сертификата</translation>
 <translation id="4242533952199664413">Отваряне на настройките</translation>
 <translation id="4242577469625748426">Настройките за правила не бяха инсталирани успешно на устройството: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Намиране на още приложения за писалка</translation>
@@ -2665,6 +2668,7 @@
 <translation id="4957949153200969297">Активиране само на функциите, свързани със синхронизирането в <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Паролите се запазват в профила ви в Google, за да можете да ги използвате на всяко устройство</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Това приложение е инсталирано от администратора ви.</translation>
 <translation id="4964455510556214366">Подредба</translation>
 <translation id="4964673849688379040">Проверява се...</translation>
 <translation id="4965808351167763748">Наистина ли искате да настроите това устройство да изпълнява Hangouts Meet?</translation>
@@ -2922,6 +2926,7 @@
 <translation id="5360150013186312835">Показване в лентата с инструменти</translation>
 <translation id="5362741141255528695">Изберете файла с личен ключ.</translation>
 <translation id="5363109466694494651">Powerwash и възстановяване</translation>
+<translation id="5365716706805792666">Google може да проверява дали паролите ви са изтекли при нарушение на сигурността на данните. Функцията ще бъде включена, когато влезете с профила си в Google.</translation>
 <translation id="5365881113273618889">Избраната от вас папка съдържа поверителни файлове. Наистина ли искате да предоставите на <ph name="APP_NAME" /> постоянен достъп за записване в тази папка?</translation>
 <translation id="5367091008316207019">Файлът се чете...</translation>
 <translation id="5368720394188453070">Телефонът ви е заключен. Отключете го, за да влезете.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Показване на разширените свойства на мрежата</translation>
 <translation id="6212168817037875041">Изключване на екрана</translation>
 <translation id="6212752530110374741">Изпращане на връзката по имейл</translation>
-<translation id="6214642087594370545">Показване на предупреждение, когато използвате парола, която е била компрометирана при нарушение на сигурността на данните. Функцията е достъпна само за потребители, които са влезли в профила си.</translation>
 <translation id="6216696360484424239">Автоматично влизане</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> е офлайн. Свържете се с интернет и опитайте отново</translation>
 <translation id="6220413761270491930">Грешка при зареждането на разширението</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Добавяне на принтер...</translation>
 <translation id="6770664076092644100">Потвърждаване чрез КБП</translation>
 <translation id="6771503742377376720">Е сертифициращ орган</translation>
+<translation id="6775163072363532304">Наличните устройства ще се показват тук.</translation>
 <translation id="6777817260680419853">Блокирано бе пренасочване</translation>
 <translation id="6778737459546443941">Родителят ви все още не е одобрил заявката</translation>
 <translation id="677965093459947883">Много малък</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Други потребители</translation>
 <translation id="7442465037756169001">Хардуерът Hangouts Meet е готов за настройване.</translation>
 <translation id="744341768939279100">Създаване на нов потребителски профил</translation>
+<translation id="7443806024147773267">Осъществявайте достъп до паролите си винаги когато сте влезли в профила си в Google</translation>
 <translation id="7444046173054089907">Този сайт е блокиран</translation>
 <translation id="7444983668544353857">Деактивиране на <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Автоматично инсталиране на приложения</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">Актуализиращата програма понастоящем се изпълнява. Опреснете след минута, за да проверите отново.</translation>
 <translation id="8014206674403687691">Предишната инсталирана версия на <ph name="IDS_SHORT_PRODUCT_NAME" /> не може да се възстанови. Моля, опитайте отново да извършите Powerwash на устройството си.</translation>
 <translation id="8014210335923519270">Подобрете браузъра <ph name="IDS_SHORT_PRODUCT_NAME" /> и сигурността му, като ни изпращате системна информация и данни за употребата</translation>
+<translation id="8015780634880457457">Google може да проверява дали паролите ви са изтекли при нарушение на сигурността на данните</translation>
 <translation id="8016266267177410919">Временно хранилище</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Прекият път бе редактиран</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Проверете настройките на устройството си и я включете, за да продължите</translation>
 <translation id="8190193592390505034">Осъществява се връзка с: <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Управление на вашите приложения, разширения и теми</translation>
+<translation id="819464600477418284">Това приложение не може да бъде деинсталирано, тъй като е част от Chrome OS.</translation>
 <translation id="8195027750202970175">Размер върху диска</translation>
 <translation id="8198323535106903877">Ще инсталираме тези <ph name="NUMBER_OF_APPS" /> приложения за вас</translation>
 <translation id="8199300056570174101">Свойства на мрежата (услугата) и устройството</translation>
@@ -4927,6 +4935,7 @@
 <ph name="BEGIN_PARAGRAPH2" />Изключването на тази функция няма да засегне възможността на устройството да изпраща информацията, необходима за получаването на основни услуги, като системни актуализации и подобрения в сигурността.<ph name="END_PARAGRAPH2" />
 <ph name="BEGIN_PARAGRAPH3" />Собственикът може да контролира тази функция от „Настройки“ &gt; „Разширени“ &gt; „Автоматично изпращане до Google на данни за диагностиката и употребата“.<ph name="END_PARAGRAPH3" />
 <ph name="BEGIN_PARAGRAPH4" />Ако сте включили Допълнителна активност в мрежата и приложенията за детето си, тези данни може да се запазват в профила му в Google. Научете повече за съответните настройки и как да ги коригирате на адрес families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Невалиден клиентски сертификат</translation>
 <translation id="8270242299912238708">PDF документи</translation>
 <translation id="827097179112817503">Показване на бутона за начална страница</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Изтрихте 1 отметка}other{Изтрихте # отметки}}</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Няма връзка</translation>
 <translation id="8876307312329369159">Тази настройка не може да бъде променена по време на демонстрационна сесия.</translation>
 <translation id="8877448029301136595">[главна директория]</translation>
+<translation id="8879220587046205278">Приложенията от Google Play може да искат пълен достъп до файловата система, за да четат и записват файлове във външни устройства за съхранение. Създадените на устройството файлове и папки са видими за всички, които използват външния диск.</translation>
 <translation id="8879284080359814990">&amp;Показване като раздел</translation>
 <translation id="8879921471468674457">Запомняне на данните за вход</translation>
 <translation id="8881020143150461183">Моля, опитайте отново. За техническа поддръжка се обърнете към <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index d991b75..c872eec 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -2165,7 +2165,6 @@
 <translation id="4146026355784316281">সর্বদা সিস্টেম নিরীক্ষকের সাথে খুলুন</translation>
 <translation id="4146785383423576110">রিসেট এবং সাফ করুন</translation>
 <translation id="4147911968024186208">আবার চেষ্টা করুন। সমস্যাটি আবার হলে, কাস্টমার সাপোর্টের সাথে যোগাযোগ করুন।</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">প্রদর্শন</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{১টি ট্যাব}one{#টি ট্যাব}other{#টি ট্যাব}}</translation>
 <translation id="4154664944169082762">আঙ্গুলের ছাপ</translation>
@@ -3519,7 +3518,6 @@
 <translation id="6212039847102026977">উন্নত নেটওয়ার্ক বৈশিষ্ট্যগুলি দেখুন</translation>
 <translation id="6212168817037875041">ডিসপ্লে বন্ধ করুন</translation>
 <translation id="6212752530110374741">ইমেল লিঙ্ক</translation>
-<translation id="6214642087594370545">আপনি অনলাইনে চুরি হওয়া পাসওয়ার্ডের তালিকায় রয়েছে এমন কোনও অসুরক্ষিত পাসওয়ার্ড ব্যবহার করলে এটি সতর্কতা মেসেজ দেখায়। এটি শুধুমাত্র সাইন-ইন করে থাকা ব্যবহারকারীদের ক্ষেত্রে কাজ করে।</translation>
 <translation id="6216696360484424239">অটোমেটিক সাইন-ইন হয়ে যাবে</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> অফলাইন আছে৷ ইন্টারনেটে কানেক্ট করে আবার চেষ্টা করুন৷</translation>
 <translation id="6220413761270491930">এক্সটেনশন লোড হওয়ার সময় সমস্যা</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 3913d1b30..96cb334 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -302,7 +302,7 @@
 <translation id="1444628761356461360">Aquesta configuració està gestionada pel propietari del dispositiu, <ph name="OWNER_EMAIL" />.</translation>
 <translation id="144518587530125858">No s'ha pogut carregar "<ph name="IMAGE_PATH" />" per al tema.</translation>
 <translation id="1445693676523799095">La configuració pot tardar una estona</translation>
-<translation id="1450011005989029586">La teva contrasenya ha quedat al descobert a causa de la violació de les dades en un lloc web o una aplicació que fas servir. Chrome et recomana <ph name="BOLD" /> que fas servir a <ph name="ORIGIN" /> ara mateix.</translation>
+<translation id="1450011005989029586">La teva contrasenya ha quedat exposada a causa de la violació de les dades en un lloc web o una aplicació que fas servir. Chrome et recomana <ph name="BOLD" /> que fas servir a <ph name="ORIGIN" /> ara mateix.</translation>
 <translation id="1451375123200651445">Pàgina web, un únic fitxer</translation>
 <translation id="1451917004835509682">Afegeix una persona supervisada</translation>
 <translation id="1454223536435069390">Fes una c&amp;aptura de pantalla</translation>
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Només la sessió d'incògnit actual</translation>
 <translation id="1698650002254827833">La llista d'aplicacions no es pot carregar. Torna-ho a provar.</translation>
 <translation id="1701062906490865540">Suprimeix aquesta persona</translation>
+<translation id="1703331064825191675">No et preocupis mai per les teves contrasenyes</translation>
 <translation id="1706586824377653884">Afegida per l'administrador</translation>
 <translation id="1706625117072057435">Nivells de zoom</translation>
 <translation id="1708338024780164500">(Inactiva)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Finestra nova</translation>
 <translation id="1766575458646819543">S'ha sortit de la pantalla completa</translation>
+<translation id="1766957085594317166">Desa les contrasenyes de manera segura al teu Compte de Google i no caldrà que les tornis a escriure mai més</translation>
 <translation id="1768278914020124551">S'ha produït un problema en contactar amb el servidor d'inici de sessió. Comprova la teva connexió de xarxa i el nom de domini, i torna-ho a provar.</translation>
 <translation id="1769104665586091481">Obre l'enllaç en una &amp;finestra nova</translation>
 <translation id="1773212559869067373">S'ha rebutjat el certificat d'autenticació de manera local</translation>
@@ -1873,6 +1875,7 @@
 <translation id="3748026146096797577">Desconnectat</translation>
 <translation id="3752582316358263300">D'acord...</translation>
 <translation id="3752673729237782832">Els meus dispositius</translation>
+<translation id="3753033997400164841">Desa-la una vegada. Fes-la servir a tot arreu.</translation>
 <translation id="3755411799582650620">També podeu desbloquejar aquest <ph name="DEVICE_TYPE" /> mitjançant <ph name="PHONE_NAME" />.</translation>
 <translation id="375636864092143889">El lloc web està utilitzant el micròfon</translation>
 <translation id="3757733214359997190">No s'ha trobat cap lloc web</translation>
@@ -2164,7 +2167,6 @@
 <translation id="4146026355784316281">Obrir sempre amb el visualitzador del sistema</translation>
 <translation id="4146785383423576110">Restableix i neteja</translation>
 <translation id="4147911968024186208">Torna-ho a provar. Si tornes a veure aquest error, contacta amb el representant del servei d'assistència.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Pantalla</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 pestanya}other{# pestanyes}}</translation>
 <translation id="4154664944169082762">Empremtes</translation>
@@ -2205,6 +2207,7 @@
 <translation id="4232375817808480934">Configura Kerberos</translation>
 <translation id="4235200303672858594">Tota la pantalla</translation>
 <translation id="4235965441080806197">Cancel·la l'inici de sessió</translation>
+<translation id="4242145785130247982">No s'admet l'ús de diversos certificats de client</translation>
 <translation id="4242533952199664413">Obre la configuració</translation>
 <translation id="4242577469625748426">No s'ha pogut instal·lar la configuració de la política al dispositiu: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Cerca més aplicacions de llapis òptic</translation>
@@ -2663,6 +2666,7 @@
 <translation id="4957949153200969297">Activa només funcions relacionades amb Sincronització de <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Les contrasenyes es desen al Compte de Google perquè les puguis utilitzar en tots els dispositius</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" />: <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">L'administrador ha instal·lat aquesta aplicació.</translation>
 <translation id="4964455510556214366">Disposició</translation>
 <translation id="4964673849688379040">S'està comprovant…</translation>
 <translation id="4965808351167763748">Confirmes que vols configurar aquest dispositiu perquè executi Hangouts Meet?</translation>
@@ -2921,6 +2925,7 @@
 <translation id="5360150013186312835">Mostra a la barra d'eines</translation>
 <translation id="5362741141255528695">Seleccioneu el fitxer de clau privada.</translation>
 <translation id="5363109466694494651">Fes un Powerwash i canvia a la versió anterior</translation>
+<translation id="5365716706805792666">Google pot comprovar si les teves contrasenyes han patit una violació de les dades. Aquesta opció s'activarà quan iniciïs la sessió amb el Compte de Google.</translation>
 <translation id="5365881113273618889">La carpeta que has seleccionat conté fitxers confidencials. Confirmes que vols concedir a "<ph name="APP_NAME" />" accés d'escriptura permanent en aquesta carpeta?</translation>
 <translation id="5367091008316207019">S'està llegint el fitxer...</translation>
 <translation id="5368720394188453070">El telèfon està bloquejat. Desbloquegeu-lo per accedir-hi.</translation>
@@ -3518,7 +3523,6 @@
 <translation id="6212039847102026977">Mostra les propietats de xarxa avançades</translation>
 <translation id="6212168817037875041">Desactiva la pantalla</translation>
 <translation id="6212752530110374741">Envia l'enllaç per correu electrònic</translation>
-<translation id="6214642087594370545">Mostra un advertiment quan utilitzes una contrasenya no segura que ha format part d'una violació de dades. Només està disponible per a usuaris que hagin iniciat la sessió.</translation>
 <translation id="6216696360484424239">Inicia la sessió automàticament</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> no té connexió. Connecta't a Internet i torna-ho a provar.</translation>
 <translation id="6220413761270491930">Error en carregar l'extensió</translation>
@@ -3875,6 +3879,7 @@
 <translation id="6769712124046837540">S'està afegint la impressora...</translation>
 <translation id="6770664076092644100">Verifica la teva identitat per NFC</translation>
 <translation id="6771503742377376720">És una entitat emissora de certificats</translation>
+<translation id="6775163072363532304">Els dispositius disponibles es mostraran aquí.</translation>
 <translation id="6777817260680419853">S'ha bloquejat la redirecció</translation>
 <translation id="6778737459546443941">El teu pare o la teva mare encara no ho han aprovat</translation>
 <translation id="677965093459947883">Molt petita</translation>
@@ -4335,6 +4340,7 @@
 <translation id="7441830548568730290">Altres usuaris</translation>
 <translation id="7442465037756169001">El programari de Hangouts Meet ja es pot configurar.</translation>
 <translation id="744341768939279100">Crea un perfil</translation>
+<translation id="7443806024147773267">Accedeix a les contrasenyes sempre que tinguis la sessió iniciada al Compte de Google</translation>
 <translation id="7444046173054089907">Aquest lloc està bloquejat</translation>
 <translation id="7444983668544353857">Desactiva <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instal·la aplicacions automàticament</translation>
@@ -4748,6 +4754,7 @@
 <translation id="8014154204619229810">L'actualitzador està en funcionament. Actualitzeu la pantalla d'aquí a un minut per tornar-ho a comprovar.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> no pot canviar a la versió anterior instal·lada. Torneu a provar de fer un Powerwash al dispositiu.</translation>
 <translation id="8014210335923519270">Envia a Google informació del sistema i dades sobre l'ús de <ph name="IDS_SHORT_PRODUCT_NAME" /> per millorar aquest servei i la seva seguretat</translation>
+<translation id="8015780634880457457">Google pot comprovar si les teves contrasenyes han patit una violació de les dades</translation>
 <translation id="8016266267177410919">Emmagatzematge temporal</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">S'ha editat la drecera</translation>
@@ -4865,6 +4872,7 @@
 <translation id="8188389033983459049">Comprova la configuració del dispositiu i activa'l per continuar</translation>
 <translation id="8190193592390505034">S'està connectant amb <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gestionar les aplicacions, les extensions i els temes</translation>
+<translation id="819464600477418284">Aquesta aplicació no es pot desinstal·lar perquè forma part de Chrome OS.</translation>
 <translation id="8195027750202970175">Espai ocupat al disc</translation>
 <translation id="8198323535106903877">T'instal·larem aquestes <ph name="NUMBER_OF_APPS" /> aplicacions</translation>
 <translation id="8199300056570174101">Xarxa (servei) i propietats del dispositiu</translation>
@@ -4925,6 +4933,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Si aquesta funció es desactiva, no afectarà la capacitat del dispositiu d'enviar la informació necessària per rebre serveis bàsics, com ara seguretat i actualitzacions del sistema.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />El propietari pot controlar aquesta funció des de Configuració &gt; Configuració avançada &gt; Envia automàticament dades de diagnòstic i d'ús a Google.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Si el teu fill té activada l'opció addicional Activitat al web i en aplicacions, és possible que aquestes dades es desin al seu Compte de Google. Obtén més informació sobre aquestes opcions de configuració i sobre com pots ajustar-les a families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Certificat de client no vàlid</translation>
 <translation id="8270242299912238708">Documents PDF</translation>
 <translation id="827097179112817503">Mostra el botó Pàgina d'inici</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{S'ha suprimit 1 adreça d'interès}other{S'han suprimit # adreces d'interès}}</translation>
@@ -5338,6 +5347,7 @@
 <translation id="8874184842967597500">No connectat</translation>
 <translation id="8876307312329369159">Aquesta opció de configuració no es pot canviar durant una sessió de demostració.</translation>
 <translation id="8877448029301136595">[directori del nivell superior]</translation>
+<translation id="8879220587046205278">Pot ser que les aplicacions de Google Play requereixin accés al sistema de fitxers complet per llegir i escriure fitxers en dispositius d'emmagatzematge externs. Qualsevol persona que faci servir la unitat externa podrà veure les carpetes i els fitxers creats al dispositiu.</translation>
 <translation id="8879284080359814990">&amp;Mostra com a pestanya</translation>
 <translation id="8879921471468674457">Recorda la informació d'inici de sessió</translation>
 <translation id="8881020143150461183">Torna-ho a provar. Per obtenir assistència tècnica, contacta amb <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 792334fa..7df3a33c 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Pouze aktuální anonymní návštěvy</translation>
 <translation id="1698650002254827833">Seznam aplikací nelze načíst. Zkuste to znovu.</translation>
 <translation id="1701062906490865540">Odebrat tohoto uživatele</translation>
+<translation id="1703331064825191675">Nedělejte si starosti s hesly</translation>
 <translation id="1706586824377653884">Přidáno administrátorem</translation>
 <translation id="1706625117072057435">Úrovně přiblížení</translation>
 <translation id="1708338024780164500">(Neaktivní)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nové okno</translation>
 <translation id="1766575458646819543">Byl ukončen režim celé obrazovky</translation>
+<translation id="1766957085594317166">Ukládejte si hesla bezpečně do účtu Google, abyste je už nemuseli zadávat</translation>
 <translation id="1768278914020124551">Jejda! Při kontaktování přihlašovacího serveru došlo k chybě. Zkontrolujte připojení k síti a název domény a zkuste to znovu.</translation>
 <translation id="1769104665586091481">Otevřít odkaz v &amp;novém okně</translation>
 <translation id="1773212559869067373">Ověřovací certifikát byl místně odmítnut</translation>
@@ -1874,6 +1876,7 @@
 <translation id="3748026146096797577">Nepřipojeno</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Má zařízení</translation>
+<translation id="3753033997400164841">Uložte jednou. Používejte všude</translation>
 <translation id="3755411799582650620">Toto zařízení <ph name="DEVICE_TYPE" /> můžete odemknout také pomocí telefonu <ph name="PHONE_NAME" />.</translation>
 <translation id="375636864092143889">Web používá mikrofon</translation>
 <translation id="3757733214359997190">Nebyly nalezeny žádné weby</translation>
@@ -2165,7 +2168,6 @@
 <translation id="4146026355784316281">Vždy otevřít pomocí systémového prohlížeče</translation>
 <translation id="4146785383423576110">Resetovat a vyčistit</translation>
 <translation id="4147911968024186208">Zkuste to znovu. Pokud se opět zobrazí tato chyba, kontaktujte zástupce podpory.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Displej</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 karta}few{# karty}many{# karty}other{# karet}}</translation>
 <translation id="4154664944169082762">Digitální otisky</translation>
@@ -2206,6 +2208,7 @@
 <translation id="4232375817808480934">Nakonfigurovat Kerberos</translation>
 <translation id="4235200303672858594">Celá obrazovka</translation>
 <translation id="4235965441080806197">Zrušit přihlášení</translation>
+<translation id="4242145785130247982">Více certifikátů klientů není podporováno</translation>
 <translation id="4242533952199664413">Otevřít Nastavení</translation>
 <translation id="4242577469625748426">Instalace nastavení zásady v zařízení se nezdařila: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Najít další aplikace pro dotyková pera</translation>
@@ -2664,6 +2667,7 @@
 <translation id="4957949153200969297">Povolit jen funkce související se synchronizací prohlížeče <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Hesla se ukládají do vašeho účtu Google, abyste je mohli používat na všech zařízeních</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Tuto aplikaci nainstaloval administrátor.</translation>
 <translation id="4964455510556214366">Uspořádání</translation>
 <translation id="4964673849688379040">Kontrola...</translation>
 <translation id="4965808351167763748">Opravdu toto zařízení chcete nastavit pro službu Hangouts Meet?</translation>
@@ -2921,6 +2925,7 @@
 <translation id="5360150013186312835">Zobrazit na liště</translation>
 <translation id="5362741141255528695">Vyberte soubor soukromého klíče.</translation>
 <translation id="5363109466694494651">Obnovit pomocí funkce Powerwash a vrátit předchozí verzi</translation>
+<translation id="5365716706805792666">Google může kontrolovat, zda vaše hesla nebyla součástí úniku dat. Když se přihlásíte pomocí účtu Google, tato funkce se zapne.</translation>
 <translation id="5365881113273618889">Vybraná složka obsahuje citlivé soubory. Opravdu chcete aplikaci <ph name="APP_NAME" /> udělit trvalý přístup k zápisu do této složky?</translation>
 <translation id="5367091008316207019">Čtení souboru..</translation>
 <translation id="5368720394188453070">Telefon je uzamčen. Chcete-li pokračovat, odemkněte jej.</translation>
@@ -3517,7 +3522,6 @@
 <translation id="6212039847102026977">Zobrazit rozšířené vlastnosti sítě</translation>
 <translation id="6212168817037875041">Vypnout displej</translation>
 <translation id="6212752530110374741">Odeslat odkaz e-mailem</translation>
-<translation id="6214642087594370545">Zobrazí upozornění, když použijete nezabezpečené heslo, kterého se týkalo porušení zabezpečení údajů. Je k dispozici jen pro přihlášené uživatele.</translation>
 <translation id="6216696360484424239">Přihlašovat se automaticky</translation>
 <translation id="6218058416316985984">Zařízení <ph name="DEVICE_TYPE" /> je offline. Připojte se k internetu a zkuste to znovu.</translation>
 <translation id="6220413761270491930">Při načítání rozšíření došlo k chybě</translation>
@@ -3874,6 +3878,7 @@
 <translation id="6769712124046837540">Přidávání tiskárny...</translation>
 <translation id="6770664076092644100">Ověřit přes NFC</translation>
 <translation id="6771503742377376720">Je certifikační autorita</translation>
+<translation id="6775163072363532304">Zde se budou zobrazovat dostupná zařízení.</translation>
 <translation id="6777817260680419853">Bylo zablokováno přesměrování</translation>
 <translation id="6778737459546443941">Rodič ti přístup na web dosud neschválil.</translation>
 <translation id="677965093459947883">Velmi malé</translation>
@@ -4334,6 +4339,7 @@
 <translation id="7441830548568730290">Ostatní uživatelé</translation>
 <translation id="7442465037756169001">Hangouts Meet hardware je připraven k nastavení.</translation>
 <translation id="744341768939279100">Vytvořit nový profil</translation>
+<translation id="7443806024147773267">Mějte hesla k dispozici vždy, když jste přihlášeni k účtu Google</translation>
 <translation id="7444046173054089907">Tento web je blokován</translation>
 <translation id="7444983668544353857">Deaktivovat <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automaticky instalovat aplikace</translation>
@@ -4378,7 +4384,7 @@
 <translation id="7506541170099744506">Vaše zařízení <ph name="DEVICE_TYPE" /> bylo úspěšně zaregistrováno do podnikové správy.</translation>
 <translation id="7507930499305566459">Certifikát stavového odpovídače</translation>
 <translation id="7508054832109420082">Udělit přístup k tiskárnám</translation>
-<translation id="7510943789645525906">Upozorní vás, pokud vaše heslo bylo součástí porušení zabezpečení údajů</translation>
+<translation id="7510943789645525906">Upozorní vás, pokud vaše heslo bylo součástí úniku dat</translation>
 <translation id="7513029293694390567">Přihlašovat se na weby automaticky pomocí uložených identifikačních údajů. Když je tato funkce vypnutá, budete před každým přihlášením na web požádáni o potvrzení.</translation>
 <translation id="7514365320538308">Stáhnout</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4747,6 +4753,7 @@
 <translation id="8014154204619229810">Nástroj na aktualizaci je momentálně spuštěn. Za chvilku stránku obnovte a prohlédněte si stav.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> se nedokáže vrátit zpět na dříve nainstalovanou verzi. Zkuste zařízení znovu obnovit pomocí funkce Powerwash.</translation>
 <translation id="8014210335923519270">Vylepšete prohlížeč <ph name="IDS_SHORT_PRODUCT_NAME" /> a jeho zabezpečení tím, že do Googlu budete odesílat informace o systému a využití</translation>
+<translation id="8015780634880457457">Google může kontrolovat, zda vaše hesla nebyla součástí úniku dat</translation>
 <translation id="8016266267177410919">Dočasné úložiště</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Zkratka byla upravena</translation>
@@ -4864,6 +4871,7 @@
 <translation id="8188389033983459049">Chcete-li pokračovat, zkontrolujte nastavení zařízení a zapněte Bluetooth</translation>
 <translation id="8190193592390505034">Připojování k síti poskytovatele <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Spravovat aplikace, rozšíření a motivy</translation>
+<translation id="819464600477418284">Tuto aplikaci nelze odinstalovat, protože je součástí systému Chrome OS.</translation>
 <translation id="8195027750202970175">Velikost na disku</translation>
 <translation id="8198323535106903877">Aplikace (<ph name="NUMBER_OF_APPS" />) se samy nainstalují</translation>
 <translation id="8199300056570174101">Vlastnosti sítě (služba) a zařízení</translation>
@@ -4924,6 +4932,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Vypnutí této funkce nemá vliv na schopnost zařízení odesílat informace, které jsou potřeba pro základní služby, jako jsou aktualizace systému a zabezpečení.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Vlastník tuto funkci může ovládat pomocí možnosti Nastavení &gt; Rozšířená nastavení &gt; Automaticky do Googlu odesílat diagnostické údaje a údaje o využití.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Pokud je pro dítě zapnuté dodatečné nastavení Aktivita na webu a v aplikacích, mohou se tato data ukládat do jeho účtu Google. Další informace o těchto nastaveních a o tom, jak je upravit, najdete na stránce families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Neplatný certifikát klienta</translation>
 <translation id="8270242299912238708">Dokumenty PDF</translation>
 <translation id="827097179112817503">Zobrazit tlačítko Domovská stránka</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Byla smazána 1 záložka}few{Byly smazány # záložky}many{Bylo smazáno # záložky}other{Bylo smazáno # záložek}}</translation>
@@ -5337,6 +5346,7 @@
 <translation id="8874184842967597500">Nepřipojeno</translation>
 <translation id="8876307312329369159">Toto nastavení v ukázkové relaci nelze změnit.</translation>
 <translation id="8877448029301136595">[nadřazený adresář]</translation>
+<translation id="8879220587046205278">Aplikace z Google Play mohou vyžadovat úplný přístup k systému souborů, aby mohly číst a zapisovat soubory na externích úložných zařízeních. Soubory a složky vytvořené na zařízení jsou viditelné pro každého, kdo daný externí disk používá.</translation>
 <translation id="8879284080359814990">Zobrazit jako &amp;kartu</translation>
 <translation id="8879921471468674457">Zapamatovat si přihlašovací údaje</translation>
 <translation id="8881020143150461183">Zkuste to znovu. Se žádostmi o technickou podporu se obracejte na operátora <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 8f9aaf2..86dfa261 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Kun for den aktuelle inkognitosession</translation>
 <translation id="1698650002254827833">Listen med apps kunne ikke indlæses. Prøv igen.</translation>
 <translation id="1701062906490865540">Fjern denne person</translation>
+<translation id="1703331064825191675">Glem aldrig dine adgangskoder igen</translation>
 <translation id="1706586824377653884">Tilføjet af din administrator</translation>
 <translation id="1706625117072057435">Zoomniveauer</translation>
 <translation id="1708338024780164500">(inaktiv)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nyt vindue</translation>
 <translation id="1766575458646819543">Fuld skærm er afsluttet</translation>
+<translation id="1766957085594317166">Gem adgangskoder sikkert på din Google-konto. Så behøver du aldrig at indtaste dem igen.</translation>
 <translation id="1768278914020124551">Ups! Der var problemer med at oprette forbindelse til loginserveren. Tjek din netværksforbindelse og domænenavnet, og prøv igen.</translation>
 <translation id="1769104665586091481">Åbn link i nyt &amp;vindue</translation>
 <translation id="1773212559869067373">Godkendelsescertifikatet blev afvist lokalt</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Ikke forbundet</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Mine enheder</translation>
+<translation id="3753033997400164841">Gem én gang. Brug overalt.</translation>
 <translation id="3755411799582650620">Din <ph name="PHONE_NAME" /> kan nu også låse denne <ph name="DEVICE_TYPE" /> op.</translation>
 <translation id="375636864092143889">Websitet anvender din mikrofon</translation>
 <translation id="3757733214359997190">Der blev ikke fundet nogen websites</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Åbn altid med systemets visningsprogram</translation>
 <translation id="4146785383423576110">Nulstil og ryd op</translation>
 <translation id="4147911968024186208">Prøv igen. Hvis du ser denne fejl igen, skal du kontakte din supportrepræsentant.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Skærm</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 fane}one{# faner}other{# faner}}</translation>
 <translation id="4154664944169082762">Fingeraftryk</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Konfigurer Kerberos</translation>
 <translation id="4235200303672858594">Hele skærmen</translation>
 <translation id="4235965441080806197">Annuller login</translation>
+<translation id="4242145785130247982">Flere klientcertifikater understøttes ikke</translation>
 <translation id="4242533952199664413">Åbn Indstillinger</translation>
 <translation id="4242577469625748426">Det lykkedes ikke at installere politikindstillinger på enheden: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Find flere apps til styluspenne</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Aktivér kun funktioner, der er relateret til <ph name="IDS_SHORT_PRODUCT_NAME" />-synkronisering</translation>
 <translation id="4959262764292427323">Adgangskoder gemmes på din Google-konto, så du kan bruge dem på enhver enhed</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Denne app blev installeret af din administrator.</translation>
 <translation id="4964455510556214366">Opstilling</translation>
 <translation id="4964673849688379040">Kontrollerer...</translation>
 <translation id="4965808351167763748">Er du sikker på, at du vil konfigurere denne enhed til at køre Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Vis på værktøjslinjen</translation>
 <translation id="5362741141255528695">Vælg privat nøglefil.</translation>
 <translation id="5363109466694494651">Powerwash, og vend tilbage</translation>
+<translation id="5365716706805792666">Google kan tjekke, om dine adgangskoder har været del af et brud på datasikkerheden. Denne funktion aktiveres, når du logger ind med din Google-konto.</translation>
 <translation id="5365881113273618889">Den valgte mappe indeholder følsomme filer. Er du sikker på, at du vil give "<ph name="APP_NAME" />" permanent skriveadgang til denne mappe?</translation>
 <translation id="5367091008316207019">Læser fil...</translation>
 <translation id="5368720394188453070">Din telefon er låst. Lås den op for at få adgang.</translation>
@@ -3520,7 +3525,6 @@
 <translation id="6212039847102026977">Vis avancerede netværksegenskaber</translation>
 <translation id="6212168817037875041">Sluk skærmen</translation>
 <translation id="6212752530110374741">Send link via mail</translation>
-<translation id="6214642087594370545">Vis en advarsel, når du bruger en usikker adgangskode, som har været involveret i et brud på datasikkerheden. Funktionen kan kun benyttes af brugere, der er logget ind.</translation>
 <translation id="6216696360484424239">Log automatisk ind</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> er offline. Opret forbindelse til internettet, og prøv igen.</translation>
 <translation id="6220413761270491930">Der opstod en fejl ved indlæsning af udvidelsen</translation>
@@ -3877,6 +3881,7 @@
 <translation id="6769712124046837540">Tilføjer printer...</translation>
 <translation id="6770664076092644100">Bekræft via NFC</translation>
 <translation id="6771503742377376720">Er en certificeringsautoritet</translation>
+<translation id="6775163072363532304">Tilgængelige enheder vises her.</translation>
 <translation id="6777817260680419853">Omdirigeringen blev blokeret</translation>
 <translation id="6778737459546443941">Din forælder har ikke godkendt det endnu</translation>
 <translation id="677965093459947883">Meget lille</translation>
@@ -4337,6 +4342,7 @@
 <translation id="7441830548568730290">Andre brugere</translation>
 <translation id="7442465037756169001">Dit Hangouts Meet-hardware er klar til konfiguration.</translation>
 <translation id="744341768939279100">Opret en ny profil</translation>
+<translation id="7443806024147773267">Få adgang til dine adgangskoder, så snart du logger ind på din Google-konto</translation>
 <translation id="7444046173054089907">Dette website er blokeret</translation>
 <translation id="7444983668544353857">Deaktiver <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Installer apps automatisk</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">Opdateringsprogrammet kører i øjeblikket. Opdater om et minut for at kontrollere igen.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke vende tilbage til den tidligere version. Prøv Powerwash i stedet.</translation>
 <translation id="8014210335923519270">Gør <ph name="IDS_SHORT_PRODUCT_NAME" /> og dens sikkerhed bedre ved at sende systemoplysninger og brug til Google</translation>
+<translation id="8015780634880457457">Google kan tjekke, om dine adgangskoder har været del af et brud på datasikkerheden</translation>
 <translation id="8016266267177410919">Midlertidig lagring</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Genvejen blev redigeret</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Tjek enhedens indstillinger, og aktivér Bluetooth for at fortsætte</translation>
 <translation id="8190193592390505034">Forbinder til <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Administrere dine apps, udvidelser og temaer</translation>
+<translation id="819464600477418284">Denne app kan ikke afinstalleres, fordi den er en del af Chrome OS.</translation>
 <translation id="8195027750202970175">Filstørrelse</translation>
 <translation id="8198323535106903877">Vi installerer disse <ph name="NUMBER_OF_APPS" /> apps til dig</translation>
 <translation id="8199300056570174101">Egenskaber for netværkstjeneste og enhed</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Hvis denne funktion deaktiveres, påvirker det ikke enhedens evne til at sende de oplysninger, den har brug for i forbindelse med vigtige tjenester som f.eks. systemopdateringer og sikkerhedsfunktioner.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />TEjeren kan styre funktionen under Indstillinger &gt; Avanceret &gt; Send automatisk diagnostik og brugsdata til Google.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Hvis yderligere indstillinger for Web- og appaktivitet er aktiveret, gemmes disse data muligvis på din Google-konto. Du kan få flere oplysninger om disse indstillinger og ændring af dem på families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Ugyldigt klientcertifikat</translation>
 <translation id="8270242299912238708">PDF-dokumenter</translation>
 <translation id="827097179112817503">Vis knappen Startside</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 bogmærke er slettet}one{# bogmærke er slettet}other{# bogmærker er slettet}}</translation>
@@ -5341,6 +5350,7 @@
 <translation id="8874184842967597500">Ikke tilsluttet</translation>
 <translation id="8876307312329369159">Denne indstilling kan ikke ændres i en demosession.</translation>
 <translation id="8877448029301136595">[parent directory]</translation>
+<translation id="8879220587046205278">Apps fra Google Play skal muligvis have fuld adgang til filsystemet for at læse og skrive filer på eksterne lagerenheder. De filer og mapper, som oprettes på enheden, er synlige for alle, der bruger det eksterne drev.</translation>
 <translation id="8879284080359814990">&amp;Vis som fane</translation>
 <translation id="8879921471468674457">Husk loginoplysninger</translation>
 <translation id="8881020143150461183">Prøv igen. Kontakt <ph name="CARRIER_NAME" /> for at få teknisk support.</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index fb1fb1e..17398ec8 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -476,6 +476,7 @@
 <translation id="1698122934742150150">Nur aktuelle Inkognitositzung</translation>
 <translation id="1698650002254827833">Die App-Liste kann nicht geladen werden. Bitte versuchen Sie es noch einmal.</translation>
 <translation id="1701062906490865540">Diese Person entfernen</translation>
+<translation id="1703331064825191675">Sie müssen sich keine Sorgen mehr um Ihre Passwörter machen</translation>
 <translation id="1706586824377653884">Von Ihrem Administrator hinzugefügt</translation>
 <translation id="1706625117072057435">Zoomstufen</translation>
 <translation id="1708338024780164500">(Inaktiv)</translation>
@@ -525,6 +526,7 @@
 <translation id="1764226536771329714">Beta</translation>
 <translation id="176587472219019965">Neues &amp;Fenster</translation>
 <translation id="1766575458646819543">Vollbildmodus beendet</translation>
+<translation id="1766957085594317166">Speichern Sie Passwörter sicher in Ihrem Google-Konto, um sie nie wieder eingeben zu müssen</translation>
 <translation id="1768278914020124551">Hoppla! Beim Kontaktieren des Anmeldeservers ist ein Problem aufgetreten. Überprüfen Sie bitte Ihre Netzwerkverbindung und den Domainnamen und versuchen Sie es noch einmal.</translation>
 <translation id="1769104665586091481">Link in neuem &amp;Fenster öffnen</translation>
 <translation id="1773212559869067373">Lokale Ablehnung des Authentifizierungszertifikats</translation>
@@ -1871,6 +1873,7 @@
 <translation id="3748026146096797577">Nicht verbunden</translation>
 <translation id="3752582316358263300">Ok</translation>
 <translation id="3752673729237782832">Meine Geräte</translation>
+<translation id="3753033997400164841">Einmal speichern. Überall verwenden</translation>
 <translation id="3755411799582650620">Sie können mit Ihrem <ph name="PHONE_NAME" /> jetzt Ihr <ph name="DEVICE_TYPE" /> entsperren.</translation>
 <translation id="375636864092143889">Die Website verwendet Ihr Mikrofon</translation>
 <translation id="3757733214359997190">Keine Websites gefunden</translation>
@@ -2163,7 +2166,6 @@
 <translation id="4146026355784316281">Immer mit System Viewer öffnen</translation>
 <translation id="4146785383423576110">Zurücksetzen und bereinigen</translation>
 <translation id="4147911968024186208">Bitte versuchen Sie es noch einmal. Wenn dieser Fehler wieder auftritt, wenden Sie sich an Ihren Support-Mitarbeiter.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 Tab}other{# Tabs}}</translation>
 <translation id="4154664944169082762">Fingerabdrücke</translation>
@@ -2204,6 +2206,7 @@
 <translation id="4232375817808480934">Kerberos konfigurieren</translation>
 <translation id="4235200303672858594">Gesamten Bildschirm</translation>
 <translation id="4235965441080806197">Anmeldung abbrechen</translation>
+<translation id="4242145785130247982">Mehrere Clientzertifikate werden nicht unterstützt</translation>
 <translation id="4242533952199664413">Einstellungen öffnen</translation>
 <translation id="4242577469625748426">Fehler beim Installieren der Richtlinieneinstellungen auf dem Gerät: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Mehr Eingabestift-Apps suchen</translation>
@@ -2662,6 +2665,7 @@
 <translation id="4957949153200969297">Nur Funktionen aktivieren, die zur <ph name="IDS_SHORT_PRODUCT_NAME" />-Synchronisierung gehören</translation>
 <translation id="4959262764292427323">Passwörter werden in Ihrem Google-Konto gespeichert, sodass Sie sie auf jedem Gerät verwenden können</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Die App wurde von Ihrem Administrator installiert.</translation>
 <translation id="4964455510556214366">Anordnung</translation>
 <translation id="4964673849688379040">Wird überprüft...</translation>
 <translation id="4965808351167763748">Möchten Sie dieses Gerät wirklich für Hangouts Meet einrichten?</translation>
@@ -2919,6 +2923,7 @@
 <translation id="5360150013186312835">In Symbolleiste anzeigen</translation>
 <translation id="5362741141255528695">Private Schlüsseldatei auswählen</translation>
 <translation id="5363109466694494651">Powerwash durchführen und zurücksetzen</translation>
+<translation id="5365716706805792666">Google kann prüfen, ob Ihre Passwörter von einer Datenpanne betroffen sind. Diese Funktion wird aktiviert, wenn Sie sich mit Ihrem Google-Konto anmelden.</translation>
 <translation id="5365881113273618889">Der ausgewählte Ordner enthält vertrauliche Dateien. Möchten Sie <ph name="APP_NAME" /> wirklich dauerhaft Schreibzugriff auf diesen Ordner gewähren?</translation>
 <translation id="5367091008316207019">Datei wird gelesen...</translation>
 <translation id="5368720394188453070">Ihr Telefon ist gesperrt. Entsperren Sie es, um fortzufahren.</translation>
@@ -3515,7 +3520,6 @@
 <translation id="6212039847102026977">Erweiterte Netzwerkeigenschaften anzeigen</translation>
 <translation id="6212168817037875041">Display deaktivieren</translation>
 <translation id="6212752530110374741">Link per E-Mail versenden</translation>
-<translation id="6214642087594370545">Sie sehen eine Warnmeldung, wenn Sie ein Passwort verwenden, das aufgrund einer Datenpanne unsicher ist. Diese Funktion ist nur für angemeldete Nutzer verfügbar.</translation>
 <translation id="6216696360484424239">Automatisch anmelden</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ist offline. Stellen Sie eine Internetverbindung her und versuchen Sie es noch einmal.</translation>
 <translation id="6220413761270491930">Fehler beim Laden der Erweiterung</translation>
@@ -3872,6 +3876,7 @@
 <translation id="6769712124046837540">Drucker wird hinzugefügt...</translation>
 <translation id="6770664076092644100">Über NFC bestätigen</translation>
 <translation id="6771503742377376720">Ist eine Zertifizierungsstelle</translation>
+<translation id="6775163072363532304">Verfügbare Geräte werden hier angezeigt.</translation>
 <translation id="6777817260680419853">Weiterleitung blockiert</translation>
 <translation id="6778737459546443941">Dein Elternteil hat die Berechtigung noch nicht erteilt</translation>
 <translation id="677965093459947883">Sehr klein</translation>
@@ -4332,6 +4337,7 @@
 <translation id="7441830548568730290">Andere Nutzer</translation>
 <translation id="7442465037756169001">Sie können Ihre Hangouts Meet-Hardware jetzt einrichten.</translation>
 <translation id="744341768939279100">Neues Profil erstellen</translation>
+<translation id="7443806024147773267">Überall dort, wo Sie mit Ihrem Google-Konto angemeldet sind, können Sie auf Ihre Passwörter zugreifen</translation>
 <translation id="7444046173054089907">Diese Website ist blockiert</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> deaktivieren</translation>
 <translation id="7448430327655618736">Apps automatisch installieren</translation>
@@ -4745,6 +4751,7 @@
 <translation id="8014154204619229810">Der Updater wird momentan ausgeführt. Bitte versuchen Sie es in einer Minute erneut, indem Sie eine Aktualisierung vornehmen.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> konnte die zuvor installierte Version nicht wiederherstellen. Bitte versuchen Sie erneut, ein Powerwash für Ihr Gerät durchzuführen.</translation>
 <translation id="8014210335923519270"><ph name="IDS_SHORT_PRODUCT_NAME" /> und die Sicherheit verbessern, indem System- und Nutzungsdaten an Google gesendet werden</translation>
+<translation id="8015780634880457457">Google kann prüfen, ob Ihre Passwörter von einer Datenpanne betroffen sind</translation>
 <translation id="8016266267177410919">Temporärer Speicher</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Verknüpfung bearbeitet</translation>
@@ -4862,6 +4869,7 @@
 <translation id="8188389033983459049">Überprüfen Sie Ihre Geräteeinstellungen und aktivieren Sie Bluetooth, um fortzufahren</translation>
 <translation id="8190193592390505034">Verbindung zu <ph name="PROVIDER_NAME" /> wird hergestellt.</translation>
 <translation id="8191230140820435481">Apps, Erweiterungen und Designs verwalten</translation>
+<translation id="819464600477418284">Diese App kann nicht deinstalliert werden, da sie Teil von Chrome OS ist.</translation>
 <translation id="8195027750202970175">Dateigröße</translation>
 <translation id="8198323535106903877"><ph name="NUMBER_OF_APPS" /> Apps werden installiert</translation>
 <translation id="8199300056570174101">Netzwerk(dienst) und Geräteeigenschaften</translation>
@@ -4922,6 +4930,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Wenn Sie diese Funktion deaktivieren, kann Ihr Gerät weiterhin die für wichtige Dienste erforderlichen Informationen senden, beispielsweise für Systemupdates und -sicherheit.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Der Eigentümer kann diese Funktion unter "Einstellungen" &gt; "Erweitert" &gt; "Diagnose- und Nutzungsdaten automatisch an Google senden" steuern.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Wenn für Ihr Kind zusätzlich die Einstellung "Web- &amp; App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. Weitere Informationen zu diesen Einstellungen und den möglichen Anpassungen finden Sie unter families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Ungültiges Clientzertifikat</translation>
 <translation id="8270242299912238708">PDF-Dokumente</translation>
 <translation id="827097179112817503">Schaltfläche "Startseite" anzeigen</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 Lesezeichen gelöscht}other{# Lesezeichen gelöscht}}</translation>
@@ -5335,6 +5344,7 @@
 <translation id="8874184842967597500">Nicht verbunden</translation>
 <translation id="8876307312329369159">Diese Einstellung kann nicht in einer Demositzung geändert werden.</translation>
 <translation id="8877448029301136595">[übergeordnetes Verzeichnis]</translation>
+<translation id="8879220587046205278">Google Play-Apps benötigen möglicherweise vollständigen Zugriff auf Ihr Dateisystem, um auf externen Speichergeräten Dateien lesen und schreiben zu können. Dateien und Ordner, die auf dem Gerät erstellt werden, sind für alle Nutzer des externen Speichergeräts sichtbar.</translation>
 <translation id="8879284080359814990">Tab "Anzeigen al&amp;s"</translation>
 <translation id="8879921471468674457">Anmeldedaten speichern</translation>
 <translation id="8881020143150461183">Versuchen Sie es noch einmal. Für technischen Support wenden Sie sich bitte an <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index e6fb9af7..d03c848 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Μόνο για την τρέχουσα περίοδο λειτουργίας σε κατάσταση ανώνυμης περιήγησης</translation>
 <translation id="1698650002254827833">Δεν είναι δυνατή η φόρτωση της λίστας εφαρμογών. Δοκιμάστε ξανά.</translation>
 <translation id="1701062906490865540">Κατάργηση αυτού του ατόμου</translation>
+<translation id="1703331064825191675">Δεν χρειάζεται να ανησυχείτε πλέον για τους κωδικούς πρόσβασής σας</translation>
 <translation id="1706586824377653884">Προστέθηκε από τον διαχειριστή σας</translation>
 <translation id="1706625117072057435">Επίπεδα εστίασης</translation>
 <translation id="1708338024780164500">(Ανενεργή)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Νέο Παράθυρο</translation>
 <translation id="1766575458646819543">Έξοδος από πλήρη οθόνη</translation>
+<translation id="1766957085594317166">Αποθηκεύστε τους κωδικούς πρόσβασης με ασφάλεια στον Λογαριασμό σας Google και δεν θα χρειαστεί να τους πληκτρολογήσετε ποτέ ξανά</translation>
 <translation id="1768278914020124551">Δυστυχώς, παρουσιάστηκε κάποιο πρόβλημα κατά την επικοινωνία με τον διακομιστή σύνδεσης. Ελέγξτε τη σύνδεση δικτύου και το όνομα τομέα και δοκιμάστε ξανά.</translation>
 <translation id="1769104665586091481">Άνοιγμα Συνδέσμου σε Νέο &amp;Παράθυρο</translation>
 <translation id="1773212559869067373">Το πιστοποιητικό ελέγχου ταυτότητας απορρίφθηκε τοπικά</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Εκτός σύνδεσης</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Οι συσκευές μου</translation>
+<translation id="3753033997400164841">Αποθηκεύστε μία φορά. Χρησιμοποιήστε παντού.</translation>
 <translation id="3755411799582650620">Το τηλέφωνό σας <ph name="PHONE_NAME" /> μπορεί πλέον να απενεργοποιήσει και αυτή τη συσκευή <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Ο ιστότοπος χρησιμοποιεί το μικρόφωνό σας</translation>
 <translation id="3757733214359997190">Δεν βρέθηκαν ιστότοποι</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Άνοιγμα πάντα με πρόγραμμα προβολής συστήματος</translation>
 <translation id="4146785383423576110">Επαναφορά και διαγραφή επιβλαβούς λογισμικού</translation>
 <translation id="4147911968024186208">Δοκιμάστε ξανά. Εάν εμφανιστεί ξανά αυτό το σφάλμα, επικοινωνήστε με τον αντιπρόσωπο υποστήριξης.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Οθόνη</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 καρτέλα}other{# καρτέλες}}</translation>
 <translation id="4154664944169082762">Αποτυπώματα</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Διαμόρφωση του Kerberos</translation>
 <translation id="4235200303672858594">Πλήρης οθόνη</translation>
 <translation id="4235965441080806197">Ακύρωση σύνδεσης</translation>
+<translation id="4242145785130247982">Δεν υποστηρίζονται πολλά πιστοποιητικά πελάτη.</translation>
 <translation id="4242533952199664413">Ανοίξτε τις ρυθμίσεις</translation>
 <translation id="4242577469625748426">Αποτυχία εγκατάστασης ρυθμίσεων πολιτικής στη συσκευή: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Εύρεση περισσότερων εφαρμογών γραφίδας</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Ενεργοποιήστε μόνο τις λειτουργίες που σχετίζονται με τον Συγχρονισμό <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Οι κωδικοί πρόσβασης αποθηκεύονται στον Λογαριασμό σας Google, ώστε να μπορείτε να τους χρησιμοποιήσετε σε οποιαδήποτε συσκευή</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Αυτή η εφαρμογή έχει εγκατασταθεί από τον διαχειριστή σας.</translation>
 <translation id="4964455510556214366">Διάταξη</translation>
 <translation id="4964673849688379040">Γίνεται έλεγχος…</translation>
 <translation id="4965808351167763748">Είστε βέβαιοι ότι θέλετε να ρυθμίσετε αυτήν τη συσκευή για εκτέλεση του Hangouts Meet;</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Εμφάνιση στη γραμμή εργαλείων</translation>
 <translation id="5362741141255528695">Επιλέξτε το αρχείο ιδιωτικού κλειδιού.</translation>
 <translation id="5363109466694494651">Powerwash και Επαναφορά</translation>
+<translation id="5365716706805792666">Το Google μπορεί να ελέγχει εάν οι κωδικοί πρόσβασής σας ήταν μέρος της παραβίασης δεδομένων. Αυτή η λειτουργία θα ενεργοποιείται όταν συνδέεστε με τον Λογαριασμό σας Google.</translation>
 <translation id="5365881113273618889">Ο φάκελος που επιλέξατε περιέχει ευαίσθητα αρχεία. Είστε βέβαιοι ότι θέλετε να παραχωρήσετε στο "<ph name="APP_NAME" />" μόνιμη πρόσβαση εγγραφής σε αυτόν τον φάκελο;</translation>
 <translation id="5367091008316207019">Ανάγνωση αρχείου…</translation>
 <translation id="5368720394188453070">Το τηλέφωνό σας είναι κλειδωμένο. Ξεκλειδώστε το για να εισέλθετε.</translation>
@@ -3520,7 +3525,6 @@
 <translation id="6212039847102026977">Προβολή σύνθετων ιδιοτήτων δικτύου</translation>
 <translation id="6212168817037875041">Απενεργοποίηση οθόνης</translation>
 <translation id="6212752530110374741">Σύνδεσμος ηλεκτρονικού ταχυδρομείου</translation>
-<translation id="6214642087594370545">Εμφάνιση προειδοποίησης όταν χρησιμοποιείτε έναν μη ασφαλή κωδικό πρόσβασης που ήταν μέρος της παραβίασης δεδομένων. Διαθέσιμο μόνο για συνδεδεμένους χρήστες.</translation>
 <translation id="6216696360484424239">Αυτόματη σύνδεση</translation>
 <translation id="6218058416316985984">Η συσκευή <ph name="DEVICE_TYPE" /> είναι εκτός σύνδεσης. Συνδεθείτε στο διαδίκτυο και δοκιμάστε ξανά.</translation>
 <translation id="6220413761270491930">Σφάλμα κατά τη φόρτωση της επέκτασης</translation>
@@ -3877,6 +3881,7 @@
 <translation id="6769712124046837540">Προσθήκη εκτυπωτή…</translation>
 <translation id="6770664076092644100">Επαλήθευση μέσω NFC</translation>
 <translation id="6771503742377376720">Είναι Αρχή πιστοποίησης</translation>
+<translation id="6775163072363532304">Οι διαθέσιμες συσκευές θα εμφανίζονται εδώ.</translation>
 <translation id="6777817260680419853">Η ανακατεύθυνση αποκλείστηκε</translation>
 <translation id="6778737459546443941">Ο γονέας σου δεν τον έχει εγκρίνει ακόμα</translation>
 <translation id="677965093459947883">Πολύ μικρό</translation>
@@ -4337,6 +4342,7 @@
 <translation id="7441830548568730290">Άλλοι χρήστες</translation>
 <translation id="7442465037756169001">Το Hangouts Meet hardware είναι έτοιμο για ρύθμιση.</translation>
 <translation id="744341768939279100">Δημιουργήστε ένα νέο προφίλ</translation>
+<translation id="7443806024147773267">Αποκτήστε πρόσβαση στους κωδικούς πρόσβασής σας κάθε φορά που συνδέεστε στον Λογαριασμό σας Google.</translation>
 <translation id="7444046173054089907">Αυτός ο ιστότοπος είναι αποκλεισμένος</translation>
 <translation id="7444983668544353857">Απενεργοποίηση <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Αυτόματη εγκατάσταση εφαρμογών</translation>
@@ -4750,6 +4756,7 @@
 <translation id="8014154204619229810">Το πρόγραμμα ενημέρωσης εκτελείται. Κάντε ανανέωση σε ένα λεπτό για να ελέγξετε ξανά.</translation>
 <translation id="8014206674403687691">Το <ph name="IDS_SHORT_PRODUCT_NAME" /> δεν μπορεί να επιστρέψει σε προηγούμενη εγκατεστημένη έκδοση. Δοκιμάστε να χρησιμοποιήσετε ξανά το Powerwash για τη συσκευή σας.</translation>
 <translation id="8014210335923519270">Βελτιώστε το <ph name="IDS_SHORT_PRODUCT_NAME" /> και την ασφάλειά του αποστέλλοντας πληροφορίες συστήματος και στοιχεία χρήσης στην Google</translation>
+<translation id="8015780634880457457">Το Google μπορεί να ελέγχει εάν οι κωδικοί πρόσβασής σας ήταν μέρος της παραβίασης δεδομένων.</translation>
 <translation id="8016266267177410919">Προσωρινός αποθηκευτικός χώρος</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Η συντόμευση τροποποιήθηκε</translation>
@@ -4868,6 +4875,7 @@
 <translation id="8188389033983459049">Ελέγξτε τις ρυθμίσεις της συσκευής σας και ενεργοποιήστε την για να συνεχίσετε</translation>
 <translation id="8190193592390505034">Σύνδεση με <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Διαχείριση των εφαρμογών, των επεκτάσεων και των θεμάτων σας</translation>
+<translation id="819464600477418284">Δεν είναι δυνατή η απεγκατάσταση αυτής της εφαρμογής καθώς αποτελεί μέρος του Chrome OS.</translation>
 <translation id="8195027750202970175">Μέγεθος στον δίσκο</translation>
 <translation id="8198323535106903877">Θα εγκατασταθούν αυτές οι <ph name="NUMBER_OF_APPS" /> εφαρμογές</translation>
 <translation id="8199300056570174101">Ιδιότητες δικτύου (Υπηρεσία) και συσκευής</translation>
@@ -4928,6 +4936,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Η απενεργοποίηση αυτής της λειτουργίας δεν επηρεάζει τη δυνατότητα αυτής της συσκευής να στέλνει τις απαραίτητες πληροφορίες για σημαντικές υπηρεσίες, όπως είναι οι ενημερώσεις συστήματος και η ασφάλεια.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Ο κάτοχος μπορεί να ελέγχει αυτήν τη λειτουργία από τις Ρυθμίσεις &gt; Σύνθετες &gt; Αυτόματη αποστολή δεδομένων διαγνωστικών στοιχείων και χρήσης στην Google.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Εάν είναι ενεργή η ρύθμιση της πρόσθετης Δραστηριότητας ιστού και εφαρμογών για το παιδί σας, αυτά τα δεδομένα μπορεί να αποθηκευτούν στον Λογαριασμό του Google. Μάθετε περισσότερα σχετικά με αυτές τις ρυθμίσεις και τον τρόπο προσαρμογής τους στη διεύθυνση families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Μη έγκυρο πιστοποιητικό πελάτη</translation>
 <translation id="8270242299912238708">Έγγραφα PDF</translation>
 <translation id="827097179112817503">Εμφάνιση κουμπιού Αρχικής σελίδας</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 σελιδοδείκτης διαγράφηκε}other{# σελιδοδείκτες διαγράφηκαν}}</translation>
@@ -5339,6 +5348,7 @@
 <translation id="8874184842967597500">Δεν υπάρχει σύνδεση</translation>
 <translation id="8876307312329369159">Δεν είναι δυνατή η αλλαγή αυτής της ρύθμισης σε μια περίοδο σύνδεσης επίδειξης.</translation>
 <translation id="8877448029301136595">[γονικός κατάλογος]</translation>
+<translation id="8879220587046205278">Οι εφαρμογές από το Google Play μπορεί να απαιτούν πλήρη πρόσβαση στο σύστημα αρχείων για την ανάγνωση και την εγγραφή αρχείων σε εξωτερικές συσκευές αποθηκευτικού χώρου. Τα αρχεία και οι φάκελοι που δημιουργούνται στη συσκευή είναι ορατά σε οποιονδήποτε χρησιμοποιεί την εξωτερική μονάδα δίσκου.</translation>
 <translation id="8879284080359814990">&amp;Εμφάνιση ως καρτέλα</translation>
 <translation id="8879921471468674457">Απομνημόνευση πληροφοριών σύνδεσης</translation>
 <translation id="8881020143150461183">Δοκιμάστε ξανά. Για τεχνική υποστήριξη, επικοινωνήστε με <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 43f61e6..4552a0f 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -2170,7 +2170,6 @@
 <translation id="4146026355784316281">Always Open With System Viewer</translation>
 <translation id="4146785383423576110">Reset and clean up</translation>
 <translation id="4147911968024186208">Please retry. If you see this error again, please contact your support representative.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}other{# tabs}}</translation>
 <translation id="4154664944169082762">Fingerprints</translation>
@@ -3525,7 +3524,6 @@
 <translation id="6212039847102026977">Show advanced network properties</translation>
 <translation id="6212168817037875041">Turn off display</translation>
 <translation id="6212752530110374741">Email Link</translation>
-<translation id="6214642087594370545">Show a warning when you use an unsafe password that was part of a data breach. It is available for signed-in users only.</translation>
 <translation id="6216696360484424239">Sign in automatically</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> is offline. Connect to the Internet and try again.</translation>
 <translation id="6220413761270491930">Error Loading Extension</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 03e60326..283808d51 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -476,6 +476,7 @@
 <translation id="1698122934742150150">Solo para la sesión en modo incógnito actual</translation>
 <translation id="1698650002254827833">No se puede cargar la lista de apps. Vuelve a intentarlo.</translation>
 <translation id="1701062906490865540">Eliminar a esta persona</translation>
+<translation id="1703331064825191675">Ya no tendrás que preocuparte por tus contraseñas</translation>
 <translation id="1706586824377653884">Agregado por el administrador</translation>
 <translation id="1706625117072057435">Niveles de zoom</translation>
 <translation id="1708338024780164500">(Inactiva)</translation>
@@ -525,6 +526,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nueva ventana</translation>
 <translation id="1766575458646819543">Saliste de la pantalla completa</translation>
+<translation id="1766957085594317166">Guarda las contraseñas de forma segura en tu Cuenta de Google para no tener que volver a escribirlas</translation>
 <translation id="1768278914020124551">Se produjo un error al contactar el servidor de acceso. Comprueba la conexión de tu red y el nombre del dominio; luego, vuelve a intentarlo.</translation>
 <translation id="1769104665586091481">Abrir vínculo en una ventana &amp;nueva</translation>
 <translation id="1773212559869067373">Certificado de autenticación rechazado de forma local</translation>
@@ -1447,7 +1449,7 @@
 <translation id="3124111068741548686">A cargo del USUARIO</translation>
 <translation id="3126026824346185272">Ctrl</translation>
 <translation id="3127156390846601284">Se borrarán todos los datos que se almacenan en tu dispositivo y se restablecerán los permisos para todos los sitios que se mostraron. ¿Deseas continuar?</translation>
-<translation id="3127860049873093642">Para evitar problemas de carga y rendimiento, usa un adaptador de alimentación con conexión USB tipo C o de Dell compatible.</translation>
+<translation id="3127860049873093642">Para evitar problemas de carga y rendimiento, usa un adaptador de alimentación compatible de Dell o con conexión USB tipo C.</translation>
 <translation id="3129173833825111527">Margen izquierdo</translation>
 <translation id="3130528281680948470">El dispositivo se restablecerá y todas las cuentas de usuario y los datos locales se eliminarán. Esta acción no se puede deshacer.</translation>
 <translation id="313205617302240621">¿Olvidaste la contraseña?</translation>
@@ -1872,6 +1874,7 @@
 <translation id="3748026146096797577">Sin conexión</translation>
 <translation id="3752582316358263300">Aceptar</translation>
 <translation id="3752673729237782832">Mis dispositivos</translation>
+<translation id="3753033997400164841">Almacena las contraseñas una vez y úsalas en todas partes</translation>
 <translation id="3755411799582650620">El <ph name="PHONE_NAME" /> ahora también puede desbloquear este dispositivo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">El sitio está usando el micrófono</translation>
 <translation id="3757733214359997190">No se encontraron sitios</translation>
@@ -2164,7 +2167,6 @@
 <translation id="4146026355784316281">Abrir siempre con el visualizador del sistema</translation>
 <translation id="4146785383423576110">Restablecer y limpiar</translation>
 <translation id="4147911968024186208">Vuelve a intentarlo. Si vuelves a ver este error, comunícate con tu representante de asistencia.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Pantalla</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 pestaña}other{# pestañas}}</translation>
 <translation id="4154664944169082762">Huellas digitales</translation>
@@ -2205,6 +2207,7 @@
 <translation id="4232375817808480934">Configurar Kerberos</translation>
 <translation id="4235200303672858594">Toda la pantalla</translation>
 <translation id="4235965441080806197">Cancelar acceso</translation>
+<translation id="4242145785130247982">No se admiten Certificados de cliente múltiples.</translation>
 <translation id="4242533952199664413">Abrir la configuración</translation>
 <translation id="4242577469625748426">Se produjo un error al instalar la configuración de la política en el dispositivo: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Encontrar más apps para la pluma stylus</translation>
@@ -2663,6 +2666,7 @@
 <translation id="4957949153200969297">Solo habilita funciones relacionadas con la Sincronización de <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Las contraseñas se guardan en tu cuenta de Google para que puedas usarlas en cualquier dispositivo</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Tu administrador instaló esta app.</translation>
 <translation id="4964455510556214366">Disposición</translation>
 <translation id="4964673849688379040">Verificando…</translation>
 <translation id="4965808351167763748">¿Seguro que deseas configurar este dispositivo para ejecutar Meet de Hangouts?</translation>
@@ -2920,6 +2924,7 @@
 <translation id="5360150013186312835">Mostrar en la barra de herramientas</translation>
 <translation id="5362741141255528695">Seleccionar archivo de clave privada.</translation>
 <translation id="5363109466694494651">Utilizar la función Powerwash y revertir</translation>
+<translation id="5365716706805792666">Google puede determinar si tus contraseñas formaron parte de un incumplimiento de datos. Se activará esta opción cuando accedas con tu Cuenta de Google.</translation>
 <translation id="5365881113273618889">La carpeta seleccionada contiene archivos confidenciales. ¿Confirmas que deseas otorgar a "<ph name="APP_NAME" />" acceso de escritura permanente a esta carpeta?</translation>
 <translation id="5367091008316207019">Leyendo el archivo...</translation>
 <translation id="5368720394188453070">El teléfono está bloqueado. Desbloquéalo para ingresar.</translation>
@@ -3056,7 +3061,7 @@
 <translation id="5543983818738093899">Comprobando estado…</translation>
 <translation id="554517032089923082">GTC</translation>
 <translation id="5546865291508181392">Buscar</translation>
-<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" y 1 pestaña más}other{"<ph name="TAB_TITLE" />" y # pestañas más}}</translation>
+<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" y 1 pestaña más}other{"<ph name="TAB_TITLE" />" y # pestañas más}}</translation>
 <translation id="5551573675707792127">Entrada de texto y teclado</translation>
 <translation id="5553089923092577885">Asignaciones de directivas para certificados</translation>
 <translation id="5554489410841842733">Este ícono será visible cuando la extensión pueda actuar en la página actual.</translation>
@@ -3516,7 +3521,6 @@
 <translation id="6212039847102026977">Mostrar las propiedades de red avanzadas</translation>
 <translation id="6212168817037875041">Apagar la pantalla</translation>
 <translation id="6212752530110374741">Compartir vínculo por correo electrónico</translation>
-<translation id="6214642087594370545">Muestra una alerta cuando usas una contraseña no segura afectada por un incumplimiento de datos. Solo está disponible para usuarios que hayan accedido a la cuenta.</translation>
 <translation id="6216696360484424239">Acceder automáticamente</translation>
 <translation id="6218058416316985984">El dispositivo <ph name="DEVICE_TYPE" /> no está conectado a Internet. Conéctalo y vuelve a intentarlo.</translation>
 <translation id="6220413761270491930">Error al cargar la extensión</translation>
@@ -3873,6 +3877,7 @@
 <translation id="6769712124046837540">Agregando impresora…</translation>
 <translation id="6770664076092644100">Verificar mediante NFC</translation>
 <translation id="6771503742377376720">Es una Entidad de certificación</translation>
+<translation id="6775163072363532304">Aquí aparecerán los dispositivos disponibles.</translation>
 <translation id="6777817260680419853">Se bloqueó el redireccionamiento</translation>
 <translation id="6778737459546443941">Uno de tus padres aún no lo aprobó</translation>
 <translation id="677965093459947883">Muy pequeño</translation>
@@ -4333,6 +4338,7 @@
 <translation id="7441830548568730290">Otros usuarios</translation>
 <translation id="7442465037756169001">El hardware de Hangouts Meet ya está listo para su configuración.</translation>
 <translation id="744341768939279100">Crear un perfil nuevo</translation>
+<translation id="7443806024147773267">Cuando accedas a tu Cuenta de Google, podrás consultar tus contraseñas en cualquier momento</translation>
 <translation id="7444046173054089907">Este sitio está bloqueado</translation>
 <translation id="7444983668544353857">Inhabilitar <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instala apps automáticamente</translation>
@@ -4746,6 +4752,7 @@
 <translation id="8014154204619229810">El actualizador se está ejecutando en este momento. Actualiza dentro de un minuto para verificarlo de nuevo.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede volver a la versión instalada previamente. Vuelve a intentarlo para utilizar la función Powerwash en el dispositivo.</translation>
 <translation id="8014210335923519270">Para mejorar <ph name="IDS_SHORT_PRODUCT_NAME" /> y su seguridad, envía a Google información sobre el sistema y sobre el modo en que lo usas</translation>
+<translation id="8015780634880457457">Google puede determinar si tus contraseñas formaron parte de un incumplimiento de datos</translation>
 <translation id="8016266267177410919">Almacenamiento temporal</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Se editó el acceso directo</translation>
@@ -4864,6 +4871,7 @@
 <translation id="8188389033983459049">Revisa la configuración del dispositivo y activa la conexión Bluetooth para continuar</translation>
 <translation id="8190193592390505034">Estableciendo conexión con <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Administrar tus aplicaciones, extensiones y temas</translation>
+<translation id="819464600477418284">No se puede desinstalar esta app porque forma parte del Sistema Operativo Chrome.</translation>
 <translation id="8195027750202970175">Tamaño en disco</translation>
 <translation id="8198323535106903877">Instalaremos las <ph name="NUMBER_OF_APPS" /> apps por ti</translation>
 <translation id="8199300056570174101">Propiedades de la red (servicio) y del dispositivo</translation>
@@ -4924,6 +4932,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Si desactivas esta función, no se verá afectada la capacidad del dispositivo de enviar la información que necesita para recibir servicios esenciales, como actualizaciones del sistema y seguridad.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />El propietario puede controlar esta función desde Configuración &gt; Avanzada &gt; Envía a Google datos de uso y diagnóstico automáticamente.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Si activaste la Actividad web y de aplicaciones adicional para tu hijo, es posible que se guarden estos datos en tu Cuenta de Google. Obtén más información acerca de estas opciones de configuración y cómo ajustarlas en families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">El Certificado de cliente no es válido</translation>
 <translation id="8270242299912238708">Documentos PDF</translation>
 <translation id="827097179112817503">Mostrar el botón de la Página principal</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 favorito borrado}other{# favoritos borrados}}</translation>
@@ -5337,6 +5346,7 @@
 <translation id="8874184842967597500">No conectado</translation>
 <translation id="8876307312329369159">No se puede cambiar esta configuración en la sesión de demostración.</translation>
 <translation id="8877448029301136595">[directorio principal]</translation>
+<translation id="8879220587046205278">Es posible que las apps de Google Play necesiten acceder a todo el sistema de archivos para leer y escribir archivos en dispositivos externos de almacenamiento. Cualquier persona que use la unidad externa podrá ver los archivos y carpetas creados en este dispositivo.</translation>
 <translation id="8879284080359814990">Mo&amp;strar como pestaña</translation>
 <translation id="8879921471468674457">Recordar la información de acceso</translation>
 <translation id="8881020143150461183">Vuelve a intentarlo. Si necesitas asistencia técnica, comunícate con <ph name="CARRIER_NAME" />.</translation>
@@ -5406,7 +5416,7 @@
 <translation id="8973596347849323817">Puedes personalizar este dispositivo para que se adapte a tus necesidades. Estas funciones de accesibilidad pueden cambiarse más tarde en Configuración.</translation>
 <translation id="897414447285476047">El archivo de destino está incompleto debido a un problema de conexión.</translation>
 <translation id="897525204902889653">Servicio de cuarentena</translation>
-<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" y 1 pestaña más}other{"<ph name="TAB_TITLE" />" y # pestañas más}}</translation>
+<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" y 1 pestaña más}other{"<ph name="TAB_TITLE" />" y # pestañas más}}</translation>
 <translation id="8976520271376534479">Flash está bloqueado en esta página.</translation>
 <translation id="8977811652087512276">Contraseña incorrecta o archivo dañado</translation>
 <translation id="8978154919215542464">Activada: sincronizar todo</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 2ad12483..4026f71f 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Solo a la sesión de incógnito actual</translation>
 <translation id="1698650002254827833">No se ha podido cargar la lista de aplicaciones. Vuelve a intentarlo.</translation>
 <translation id="1701062906490865540">Eliminar este perfil</translation>
+<translation id="1703331064825191675">No vuelvas a preocuparte por tus contraseñas</translation>
 <translation id="1706586824377653884">Añadido por tu administrador</translation>
 <translation id="1706625117072057435">Niveles de zoom</translation>
 <translation id="1708338024780164500">(Inactiva)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nueva ventana</translation>
 <translation id="1766575458646819543">Has salido de la pantalla completa</translation>
+<translation id="1766957085594317166">Guarda las contraseñas de forma segura en tu cuenta de Google y no tendrás que escribirlas nunca más.</translation>
 <translation id="1768278914020124551">¡Vaya! No se ha podido establecer conexión con el servidor de inicio de sesión. Comprueba tu conexión de red y el nombre de dominio e inténtalo de nuevo.</translation>
 <translation id="1769104665586091481">Abrir enlace en una &amp;ventana nueva</translation>
 <translation id="1773212559869067373">Certificado de autenticación rechazado de forma local</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">No conectado</translation>
 <translation id="3752582316358263300">Aceptar...</translation>
 <translation id="3752673729237782832">Mis dispositivos</translation>
+<translation id="3753033997400164841">Guárdalas una vez. Úsalas en todos sitios.</translation>
 <translation id="3755411799582650620">Tu <ph name="PHONE_NAME" /> ya puede desbloquear este <ph name="DEVICE_TYPE" /> también.</translation>
 <translation id="375636864092143889">El sitio web está usando tu micrófono</translation>
 <translation id="3757733214359997190">No se ha encontrado ningún sitio web</translation>
@@ -2166,7 +2169,6 @@
 <translation id="4146026355784316281">Abrir siempre con el visor del sistema</translation>
 <translation id="4146785383423576110">Recuperar ajustes y borrar</translation>
 <translation id="4147911968024186208">Inténtalo de nuevo. Si el error persiste, ponte en contacto con tu representante de asistencia.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Pantalla</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 pestaña}other{# pestañas}}</translation>
 <translation id="4154664944169082762">Huellas digitales</translation>
@@ -2207,6 +2209,7 @@
 <translation id="4232375817808480934">Configurar Kerberos</translation>
 <translation id="4235200303672858594">Toda la pantalla</translation>
 <translation id="4235965441080806197">Cancelar inicio de sesión</translation>
+<translation id="4242145785130247982">No están disponibles varios certificados de cliente</translation>
 <translation id="4242533952199664413">Abrir Configuración</translation>
 <translation id="4242577469625748426">Se ha producido un error al instalar la configuración de política en el dispositivo (<ph name="VALIDATION_ERROR" />).</translation>
 <translation id="4244238649050961491">Buscar más aplicaciones para el lápiz óptico</translation>
@@ -2665,6 +2668,7 @@
 <translation id="4957949153200969297">Habilita solo las funciones relacionadas con la sincronización de <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Las contraseñas se guardan en tu cuenta de Google para que puedas utilizarlas en cualquier dispositivo</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Tu administrador ha instalado esta aplicación.</translation>
 <translation id="4964455510556214366">Disposición</translation>
 <translation id="4964673849688379040">Comprobando...</translation>
 <translation id="4965808351167763748">¿Seguro que quieres configurar este dispositivo para que utilice Hangouts Meet?</translation>
@@ -2922,6 +2926,7 @@
 <translation id="5360150013186312835">Mostrar en la barra de herramientas</translation>
 <translation id="5362741141255528695">Selecciona un archivo de clave privada.</translation>
 <translation id="5363109466694494651">Powerwash y cambio a versión anterior</translation>
+<translation id="5365716706805792666">Google puede comprobar si tus contraseñas se han visto afectadas por una quiebra de seguridad de datos. Esta función se activará cuando inicies sesión con tu cuenta de Google.</translation>
 <translation id="5365881113273618889">La carpeta que has seleccionado contiene archivos confidenciales. ¿Seguro que quieres conceder a "<ph name="APP_NAME" />" acceso de escritura permanente a esta carpeta?</translation>
 <translation id="5367091008316207019">Leyendo archivo...</translation>
 <translation id="5368720394188453070">Tu teléfono está bloqueado. Desbloquéalo para acceder.</translation>
@@ -3518,7 +3523,6 @@
 <translation id="6212039847102026977">Mostrar propiedades de red avanzadas</translation>
 <translation id="6212168817037875041">Apagar la pantalla</translation>
 <translation id="6212752530110374741">Enviar enlace por correo electrónico</translation>
-<translation id="6214642087594370545">Muestra un aviso cuando usas una contraseña insegura a la que haya afectado una quiebra de seguridad de datos. Solo está disponible para los usuarios que hayan iniciado sesión.</translation>
 <translation id="6216696360484424239">Iniciar sesión automáticamente</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> no tiene conexión. Conéctate a Internet e inténtalo de nuevo.</translation>
 <translation id="6220413761270491930">Error al cargar extensión</translation>
@@ -3875,6 +3879,7 @@
 <translation id="6769712124046837540">Añadiendo impresora...</translation>
 <translation id="6770664076092644100">Verificar mediante NFC</translation>
 <translation id="6771503742377376720">Es una entidad emisora de certificados.</translation>
+<translation id="6775163072363532304">Aquí aparecerán los dispositivos disponibles.</translation>
 <translation id="6777817260680419853">Redirección bloqueada</translation>
 <translation id="6778737459546443941">Uno de tus padres aún no lo ha aprobado</translation>
 <translation id="677965093459947883">Muy pequeño</translation>
@@ -4335,6 +4340,7 @@
 <translation id="7441830548568730290">Otros usuarios</translation>
 <translation id="7442465037756169001">Ya puedes configurar el hardware de Hangouts Meet.</translation>
 <translation id="744341768939279100">Crear un nuevo perfil</translation>
+<translation id="7443806024147773267">Accede cuando quieras a tus contraseñas con tu cuenta de Google</translation>
 <translation id="7444046173054089907">Este sitio web se ha bloqueado</translation>
 <translation id="7444983668544353857">Inhabilitar <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instalar aplicaciones automáticamente</translation>
@@ -4379,7 +4385,7 @@
 <translation id="7506541170099744506">El dispositivo <ph name="DEVICE_TYPE" /> se ha registrado correctamente para ser administrado por la empresa.</translation>
 <translation id="7507930499305566459">Certificado de respuesta de estado</translation>
 <translation id="7508054832109420082">Conceder acceso a impresoras</translation>
-<translation id="7510943789645525906">Te avisa si una de tus contraseñas se ha visto afectada por una quiebra de seguridad de datos</translation>
+<translation id="7510943789645525906">Te avisa si alguna de tus contraseñas se ha visto afectada por una quiebra de seguridad de datos</translation>
 <translation id="7513029293694390567">Permite iniciar sesión automáticamente en sitios web con credenciales almacenadas. Si esta función está inhabilitada, se te solicitará la confirmación cada vez que intentes iniciar sesión en un sitio web.</translation>
 <translation id="7514365320538308">Descargar</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4748,6 +4754,7 @@
 <translation id="8014154204619229810">La herramienta de actualización se está ejecutando en este momento. Actualiza en un minuto para comprobarlo de nuevo.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede volver a la versión instalada previamente. Vuelve a intentarlo para hacer un Powerwash del dispositivo.</translation>
 <translation id="8014210335923519270">Envía información y uso del sistema a Google para mejorar <ph name="IDS_SHORT_PRODUCT_NAME" /> y su seguridad</translation>
+<translation id="8015780634880457457">Google puede comprobar si tus contraseñas se han vistos afectadas por una quiebra de seguridad de datos</translation>
 <translation id="8016266267177410919">Almacenamiento temporal</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Se ha editado el acceso directo</translation>
@@ -4866,6 +4873,7 @@
 <translation id="8188389033983459049">Comprueba los ajustes del dispositivo y actívalo para continuar</translation>
 <translation id="8190193592390505034">Conectando con <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Administrar tus aplicaciones, extensiones y temas</translation>
+<translation id="819464600477418284">No se puede desinstalar esta aplicación porque forma parte de Chrome OS.</translation>
 <translation id="8195027750202970175">Tamaño en disco</translation>
 <translation id="8198323535106903877">Vamos a instalarte estas <ph name="NUMBER_OF_APPS" /> aplicaciones</translation>
 <translation id="8199300056570174101">Propiedades de los dispositivos y las redes (servicio)</translation>
@@ -4926,6 +4934,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Si la opción se desactiva, esto no afectará a la capacidad del dispositivo de enviar la información necesaria para recibir servicios esenciales, como actualizaciones del sistema y funciones de seguridad.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />El propietario puede controlar esta función en Ajustes &gt; Configuración avanzada &gt; Enviar automáticamente los datos de uso y diagnóstico a Google.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Si has activado la opción Actividad en la Web y en Aplicaciones, es posible que estos datos se guarden en la cuenta de Google de tu hijo. Consulta más información sobre estos ajustes y sobre cómo configurarlos en families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Certificado de cliente no válido</translation>
 <translation id="8270242299912238708">Documentos PDF</translation>
 <translation id="827097179112817503">Mostrar el botón de la página de inicio</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Se ha eliminado 1 marcador}other{Se han eliminado # marcadores}}</translation>
@@ -5339,6 +5348,7 @@
 <translation id="8874184842967597500">No conectado</translation>
 <translation id="8876307312329369159">Este ajuste no se puede cambiar en una sesión de demostración.</translation>
 <translation id="8877448029301136595">[directorio principal]</translation>
+<translation id="8879220587046205278">Es posible que las aplicaciones de Google Play necesiten acceso completo al sistema de archivos para leer y escribir ficheros en los dispositivos de almacenamiento externo. Los usuarios de la unidad externa podrán ver los archivos y las carpetas que se hayan creado en el dispositivo.</translation>
 <translation id="8879284080359814990">&amp;Mostrar como pestaña</translation>
 <translation id="8879921471468674457">Recordar información de inicio de sesión</translation>
 <translation id="8881020143150461183">Vuelve a intentarlo. Si necesitas asistencia técnica, ponte en contacto con <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index d1df3ec..4e854a2 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Ainult praegune inkognito seanss</translation>
 <translation id="1698650002254827833">Rakenduste loendit ei saa laadida. Proovige uuesti.</translation>
 <translation id="1701062906490865540">Eemalda see isik</translation>
+<translation id="1703331064825191675">Te ei pea kunagi oma paroolide pärast muretsema</translation>
 <translation id="1706586824377653884">Lisas teie administraator</translation>
 <translation id="1706625117072057435">Suumitasemed</translation>
 <translation id="1708338024780164500">(Passiivne)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beeta</translation>
 <translation id="176587472219019965">&amp;Uus aken</translation>
 <translation id="1766575458646819543">Väljuti täisekraanirežiimist</translation>
+<translation id="1766957085594317166">Salvestage paroolid turvaliselt oma Google'i kontole ja te ei pea neid enam kunagi sisestama</translation>
 <translation id="1768278914020124551">Vabandust! Sisselogimisserveriga ühenduse võtmisel ilmnes probleem. Kontrollige oma võrguühendust ja domeeni nime ning proovige siis uuesti.</translation>
 <translation id="1769104665586091481">Ava link uues &amp;aknas</translation>
 <translation id="1773212559869067373">Autentimissertifikaat lükati kohalikult tagasi</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Ühendus puudub</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Minu seadmed</translation>
+<translation id="3753033997400164841">Salvestage üks kord. Kasutage kõikjal.</translation>
 <translation id="3755411799582650620">Teie telefon <ph name="PHONE_NAME" /> saab nüüd avada ka seadme <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Sait kasutab teie mikrofoni</translation>
 <translation id="3757733214359997190">Saite ei leitud</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Ava alati süsteemivaaturiga</translation>
 <translation id="4146785383423576110">Lähtestamine ja puhastamine</translation>
 <translation id="4147911968024186208">Proovige uuesti. Kui viga ilmub siiski, võtke ühendust tugiteenuse esindajaga.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Kuva</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 vaheleht}other{# vahelehte}}</translation>
 <translation id="4154664944169082762">Sõrmejäljed</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Kerberose seadistamine</translation>
 <translation id="4235200303672858594">Kogu ekraan</translation>
 <translation id="4235965441080806197">Tühista sisselogimine</translation>
+<translation id="4242145785130247982">Mitme kliendisertifikaadi kasutamist ei toetata</translation>
 <translation id="4242533952199664413">Ava seaded</translation>
 <translation id="4242577469625748426">Reegli seadeid ei õnnestunud seadmesse installida: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Otsi rohkem elektronpliiatsi rakendusi</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Lubage ainult funktsioonid, mis on seotud teenuse <ph name="IDS_SHORT_PRODUCT_NAME" /> sünkroonimisega</translation>
 <translation id="4959262764292427323">Paroolid salvestatakse teie Google'i kontole, et saaksite neid kasutada mis tahes seadmes</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Selle rakenduse installis administraator.</translation>
 <translation id="4964455510556214366">Asetus</translation>
 <translation id="4964673849688379040">Kontrollimine ...</translation>
 <translation id="4965808351167763748">Kas soovite kindlasti selle seadme seadistada, et rakendust Hangouts Meet käitada?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Tööriistaribal kuvamine</translation>
 <translation id="5362741141255528695">Privaatvõtme faili valimine.</translation>
 <translation id="5363109466694494651">Powerwash ja ennistamine</translation>
+<translation id="5365716706805792666">Google saab kontrollida, kas teie paroolid olid osa andmetega seotud rikkumisest. See lülitatakse sisse, kui logite sisse oma Google'i kontoga.</translation>
 <translation id="5365881113273618889">Teie valitud kaust sisaldab tundlikke faile. Kas soovite kindlasti anda rakendusele „<ph name="APP_NAME" />” selle kausta jaoks püsiva kirjutusõiguse?</translation>
 <translation id="5367091008316207019">Faili lugemine ...</translation>
 <translation id="5368720394188453070">Teie telefon on lukus. Avage see sisenemiseks.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Kuva täpsemad võrguatribuudid</translation>
 <translation id="6212168817037875041">Lülita ekraan välja</translation>
 <translation id="6212752530110374741">Saada link meiliga</translation>
-<translation id="6214642087594370545">Kui kasutate ebaturvalist parooli, mis andmetega seotud rikkumise tõttu ohtu sattus, kuvatakse hoiatus. See on saadaval vaid sisselogitud kasutajatele.</translation>
 <translation id="6216696360484424239">Automaatne sisselogimine</translation>
 <translation id="6218058416316985984">Seadmel <ph name="DEVICE_TYPE" /> puudub võrguühendus. Looge ühendus Internetiga ja proovige uuesti.</translation>
 <translation id="6220413761270491930">Viga laienduse laadimisel</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Printeri lisamine ...</translation>
 <translation id="6770664076092644100">Kinnitamine NFC kaudu</translation>
 <translation id="6771503742377376720">On sertifitseerimisorgan</translation>
+<translation id="6775163072363532304">Saadaolevad seadmed kuvatakse siin.</translation>
 <translation id="6777817260680419853">Ümbersuunamine blokeeriti</translation>
 <translation id="6778737459546443941">Vanem ei ole seda veel kinnitanud</translation>
 <translation id="677965093459947883">Väga väike</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Teised kasutajad</translation>
 <translation id="7442465037756169001">Rakenduse Hangouts Meet riistvara on seadistamiseks valmis.</translation>
 <translation id="744341768939279100">Loo uus profiil</translation>
+<translation id="7443806024147773267">Pääsete oma paroolidele juurde alati, kui olete oma Google'i kontole sisse logitud</translation>
 <translation id="7444046173054089907">See sait on blokeeritud</translation>
 <translation id="7444983668544353857">Keela <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Rakenduste automaatne installimine</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">Värskendaja töötab praegu. Värskendage uuesti kontrollimiseks minuti pärast.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei saa varem installitud versiooni ennistada. Proovige uuesti, rakendades oma seadmele funktsiooni Powerwash.</translation>
 <translation id="8014210335923519270">Täiustage teenust <ph name="IDS_SHORT_PRODUCT_NAME" /> ja selle turvalisust, saates Google'ile süsteemi- ja kasutusteavet</translation>
+<translation id="8015780634880457457">Google saab kontrollida, kas teie paroolid olid osa andmetega seotud rikkumisest</translation>
 <translation id="8016266267177410919">Ajutine salvestusruum</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Otsetee on muudetud</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Kontrollige oma seadme seadeid ja lülitage see jätkamiseks sisse</translation>
 <translation id="8190193592390505034">Ühendamine võrku <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Teie rakenduste, laienduste ja teemade haldamine</translation>
+<translation id="819464600477418284">Seda rakendust ei saa desinstallida, kuna see on Chrome OS-i osa.</translation>
 <translation id="8195027750202970175">Maht kettal</translation>
 <translation id="8198323535106903877">Installime need <ph name="NUMBER_OF_APPS" /> rakendust teie eest</translation>
 <translation id="8199300056570174101">Võrk (teenus) ja seadme atribuudid</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Kui selle funktsiooni välja lülitate, ei mõjuta see seadme võimet saata oluliste teenuste kasutamiseks vajalikku teavet, näiteks süsteemivärskendusi ja turvateavet.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Omanik saab seda funktsiooni juhtida jaotises Seaded &gt; Täpsemad &gt; Saada Google'ile automaatselt diagnostika- ja kasutusandmeid.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Kui täiendavad veebi- ja rakendustegevused on teie lapse puhul sisse lülitatud, võidakse see teave salvestada tema Google'i kontole. Aadressilt families.google.com leiate seadete ja nende kohandamise kohta lisateavet.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Kliendi kehtetu sertifikaat</translation>
 <translation id="8270242299912238708">PDF-dokumendid</translation>
 <translation id="827097179112817503">Kuva nupp Avaleht</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 järjehoidja on kustutatud}other{# järjehoidjat on kustutatud}}</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Ühendus puudub</translation>
 <translation id="8876307312329369159">Seda seadet ei saa demoseansis muuta.</translation>
 <translation id="8877448029301136595">[emakataloog]</translation>
+<translation id="8879220587046205278">Google Playst pärinevad rakendused võivad vajada täielikku juurdepääsu failisüsteemile, et välistelt salvestusseadmetelt faile lugeda ja neid sinna kirjutada. Selles seadmes loodud failid ja kaustad on nähtavad kõigile, kes välist ketast kasutavad.</translation>
 <translation id="8879284080359814990">&amp;Kuva vahelehena</translation>
 <translation id="8879921471468674457">Jäta sisselogimisandmed meelde</translation>
 <translation id="8881020143150461183">Proovige uuesti. Tehnilise toe saamiseks võtke ühendust operaatoriga <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index f3ba593..59c3b57 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -476,6 +476,7 @@
 <translation id="1698122934742150150">فقط جلسه ناشناس کنونی</translation>
 <translation id="1698650002254827833">فهرست برنامه‌ها بارگیری نشد. لطفاً دوباره امتحان کنید.</translation>
 <translation id="1701062906490865540">حذف این شخص</translation>
+<translation id="1703331064825191675">هرگز نگران گذرواژه‌هایتان نباشید</translation>
 <translation id="1706586824377653884">افزوده‌شده توسط سرپرست سیستم</translation>
 <translation id="1706625117072057435">سطوح بزرگ‌نمایی</translation>
 <translation id="1708338024780164500">(غیرفعال)</translation>
@@ -525,6 +526,7 @@
 <translation id="1764226536771329714">بتا</translation>
 <translation id="176587472219019965">پنجره &amp;جدید</translation>
 <translation id="1766575458646819543">از حالت تمام‌صفحه خارج شد</translation>
+<translation id="1766957085594317166">‏گذرواژه‌ها به‌طور ایمن در حساب Google ذخیره می‌شود و هرگز لازم نیست آن‌ها را دوباره تایپ کنید</translation>
 <translation id="1768278914020124551">وای!  هنگام برقراری ارتباط با سرور ورود به سیستم مشکلی پیش آمد. لطفاً اتصال شبکه و نام دامنه را بررسی کنید، سپس دوباره امتحان کنید.</translation>
 <translation id="1769104665586091481">باز کردن پیوند در &amp;پنجره جدید</translation>
 <translation id="1773212559869067373">گواهینامه راستی‌آزمایی به صورت محلی رد شد</translation>
@@ -1872,6 +1874,7 @@
 <translation id="3748026146096797577">متصل نیست</translation>
 <translation id="3752582316358263300">تأیید...</translation>
 <translation id="3752673729237782832">دستگاه‌های من</translation>
+<translation id="3753033997400164841">یک‌بار ذخیره کنید. همه‌جا استفاده کنید</translation>
 <translation id="3755411799582650620"><ph name="PHONE_NAME" /> شما اکنون می‌تواند قفل این <ph name="DEVICE_TYPE" /> را نیز باز کند.</translation>
 <translation id="375636864092143889">سایت درحال استفاده از میکروفون شما است</translation>
 <translation id="3757733214359997190">سایتی یافت نشد</translation>
@@ -2164,7 +2167,6 @@
 <translation id="4146026355784316281">همیشه با نظاره‌گر سیستم باز شود</translation>
 <translation id="4146785383423576110">بارنشانی و پاک کردن</translation>
 <translation id="4147911968024186208">لطفاً دوباره امتحان کنید. اگر باز این خطا را دیدید، لطفاً با نماینده پشتیبانی‌تان تماس بگیرید.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">صفحه‌نمایش</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{‏۱ برگه}one{‏# برگه}other{‏# برگه}}</translation>
 <translation id="4154664944169082762">اثر انگشت</translation>
@@ -2205,6 +2207,7 @@
 <translation id="4232375817808480934">‏پیکربندی Kerberos</translation>
 <translation id="4235200303672858594">کل صفحه</translation>
 <translation id="4235965441080806197">لغو ورود به سیستم</translation>
+<translation id="4242145785130247982">چند مورد از گواهینامه‌های کارخواه پشتیبانی نمی‌شوند</translation>
 <translation id="4242533952199664413">باز کردن تنظیمات</translation>
 <translation id="4242577469625748426">تنظیمات خط‌مشی روی دستگاه نصب نشد: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">پیدا کردن برنامه‌های قلم بیشتر</translation>
@@ -2663,6 +2666,7 @@
 <translation id="4957949153200969297">فقط ویژگی‌های مربوط به همگام‌سازی <ph name="IDS_SHORT_PRODUCT_NAME" /> فعال می‌شود</translation>
 <translation id="4959262764292427323">‏گذرواژه‌ها در حساب Google شما ذخیره می‌شود تا بتوانید در همه دستگاه‌هایتان از آن‌ها استفاده کنید</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">این برنامه را سرپرست نصب کرده است.</translation>
 <translation id="4964455510556214366">ترتیب</translation>
 <translation id="4964673849688379040">درحال بررسی...</translation>
 <translation id="4965808351167763748">‏مطمئن هستید می‌خواهید این دستگاه را برای اجرای Hangouts Meet راه‌اندازی کنید؟</translation>
@@ -2920,6 +2924,7 @@
 <translation id="5360150013186312835">نمایش در نوار ابزار</translation>
 <translation id="5362741141255528695">فایل کلید خصوصی را انتخاب کنید.</translation>
 <translation id="5363109466694494651">‏Powerwash و برگرداندن</translation>
+<translation id="5365716706805792666">‏Google می‌تواند بررسی کند آیا گذرواژه‌هایتان بخشی از نقض داده‌ها بوده است یا نه. اگر با حساب Google به سیستم وارد شوید، این ویژگی روشن می‌شود.</translation>
 <translation id="5365881113273618889">پوشه‌ای که انتخاب کرده‌اید حاوی فایل‌های حساسی است. آیا مطمئنید می‌خواهید به «<ph name="APP_NAME" />» دسترسی دائم نوشتن این پوشه را بدهید؟</translation>
 <translation id="5367091008316207019">درحال خواندن فایل ...</translation>
 <translation id="5368720394188453070">تلفنتان قفل است. برای وارد شدن قفل آن را باز کنید.</translation>
@@ -3516,7 +3521,6 @@
 <translation id="6212039847102026977">نمایش ویژگی‌های پیشرفته شبکه</translation>
 <translation id="6212168817037875041">خاموش کردن نمایشگر</translation>
 <translation id="6212752530110374741">پیوند ایمیل</translation>
-<translation id="6214642087594370545">هنگامی که از گذرواژه غیرایمنی که بخشی از نقض داده است استفاده می‌شود، هشدار نشان داده شود. تنها برای کاربرانی دردسترس است که به سیستم وارد شده باشند.</translation>
 <translation id="6216696360484424239">ورود به سیستم به‌طور خودکار</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> آفلاین است. به اینترنت متصل شوید و دوباره امتحان کنید.</translation>
 <translation id="6220413761270491930">خطا هنگام بارگیری برنامه افزودنی</translation>
@@ -3873,6 +3877,7 @@
 <translation id="6769712124046837540">در حال افزودن چاپگر...</translation>
 <translation id="6770664076092644100">‏به‌تأیید رساندن ازطریق NFC</translation>
 <translation id="6771503742377376720">یک ارائه دهنده مجوز است</translation>
+<translation id="6775163072363532304">دستگاه‌های دردسترس اینجا نمایش داده می‌شوند.</translation>
 <translation id="6777817260680419853">هدایت کردن مسدود شده است</translation>
 <translation id="6778737459546443941">والدینتان هنوز این سایت را تأیید نکرده‌اند</translation>
 <translation id="677965093459947883">خیلی کوچک</translation>
@@ -4333,6 +4338,7 @@
 <translation id="7441830548568730290">کاربران دیگر</translation>
 <translation id="7442465037756169001">‏Hangouts Meet hardware شما آماده راه‌اندازی است.</translation>
 <translation id="744341768939279100">ایجاد نمایه‌ای جدید</translation>
+<translation id="7443806024147773267">‏هروقت به سیستم حساب Google وارد می‌شوید، به گذرواژه‌هایتان دسترسی داشته باشید</translation>
 <translation id="7444046173054089907">این سایت مسدود شده است</translation>
 <translation id="7444983668544353857">غیر فعال کردن <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">نصب خودکار برنامه‌ها</translation>
@@ -4746,6 +4752,7 @@
 <translation id="8014154204619229810">در حال حاضر به‌روزرسان در حال اجراست. برای بررسی دوباره، بعد از یک دقیقه بازخوانی کنید.</translation>
 <translation id="8014206674403687691">‏<ph name="IDS_SHORT_PRODUCT_NAME" /> قادر نیست به نسخه نصب شده قبلی بازگردد. لطفاً دوباره سعی کنید دستگاهتان را Powerwash کنید.</translation>
 <translation id="8014210335923519270">‏بهبود <ph name="IDS_SHORT_PRODUCT_NAME" /> و امنیت آن ازطریق ارسال اطلاعات و آمار استفاده سیستم به Google</translation>
+<translation id="8015780634880457457">‏Google می‌تواند بررسی کند که آیا گذرواژه‌هایتان بخشی از نقض داده بوده است یا نه</translation>
 <translation id="8016266267177410919">فضای ذخیره‌سازی موقت</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">میان‌بر ویرایش شد</translation>
@@ -4864,6 +4871,7 @@
 <translation id="8188389033983459049">تنظیمات دستگاه را بررسی کنید و برای ادامه، آن را روشن کنید</translation>
 <translation id="8190193592390505034">اتصال به <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">مدیریت برنامه‌ها، افزونه‌ها و طرح‌های زمینه</translation>
+<translation id="819464600477418284">‏این برنامه نمی‌تواند حذف نصب شود، چون بخشی از سیستم عامل Chrome است.</translation>
 <translation id="8195027750202970175">اندازه روی دیسک</translation>
 <translation id="8198323535106903877"><ph name="NUMBER_OF_APPS" /> برنامه را برایتان نصب می‌کنیم</translation>
 <translation id="8199300056570174101">مشخصات دستگاه و شبکه (سرویس)</translation>
@@ -4924,6 +4932,7 @@
     <ph name="BEGIN_PARAGRAPH2" />خاموش کردن این ویژگی بر توانایی این دستگاه در ارسال اطلاعات موردنیاز برای سرویس‌های ضروری (مانند به‌روزرسانی‌های سیستم و امنیت) بی‌تأثیر است.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />مالک می‌تواند این ویژگی را از «تنظیمات &gt; پیشرفته &gt; ارسال خودکار داده‌های تشخیصی و میزان استفاده به Google» کنترل کند.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />اگر تنظیم تکمیلی «فعالیت وب و برنامه» برای فرزندتان روشن باشد، ممکن است این داده‌ها در حساب Google او ذخیره شود. درباره این تنظیمات و نحوه تغییر آن‌ها در families.google.com، اطلاعات بیشتری کسب کنید.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">گواهینامه کارخواه نامعتبر است</translation>
 <translation id="8270242299912238708">‏سندهای PDF</translation>
 <translation id="827097179112817503">نمایش دکمه صفحه اصلی</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{۱ نشانک حذف شد}one{# نشانک حذف شد}other{# نشانک حذف شد}}</translation>
@@ -5337,6 +5346,7 @@
 <translation id="8874184842967597500">متصل نیست</translation>
 <translation id="8876307312329369159">این تنظیم در جلسه نمایشی قابل‌تغییر نیست.</translation>
 <translation id="8877448029301136595">[دایرکتوری والد]</translation>
+<translation id="8879220587046205278">‏ممکن است برنامه‌های Google Play برای خواندن فایل‌های موجود در دستگاه‌های ذخیره‌سازی خارجی و نوشتن در آن‌ها، نیازمند دسترسی کامل به فایل سیستم باشند. فایل‌ها و پوشه‌های ایجادشده در دستگاه برای هر فردی که از درایو خارجی استفاده می‌کند، نمایان است.</translation>
 <translation id="8879284080359814990">&amp;نمایش به‌صورت برگه</translation>
 <translation id="8879921471468674457">اطلاعات ورود به سیستم به‌خاطر سپرده شود</translation>
 <translation id="8881020143150461183">لطفاً دوباره امتحان کنید. برای پشتیبانی فنی، با <ph name="CARRIER_NAME" /> تماس بگیرید.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 15ccb476..5725145 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Vain nykyinen incognito-istunto</translation>
 <translation id="1698650002254827833">Sovellusluetteloa ei voi ladata. Yritä uudelleen.</translation>
 <translation id="1701062906490865540">Poista tämä henkilö</translation>
+<translation id="1703331064825191675">Enää ei tarvitse huolehtia salasanoista</translation>
 <translation id="1706586824377653884">Järjestelmänvalvojan lisäämä</translation>
 <translation id="1706625117072057435">Zoomaustasot</translation>
 <translation id="1708338024780164500">(Ei-aktiivinen)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">Uusi ikku&amp;na</translation>
 <translation id="1766575458646819543">Poistuttiin koko näytön tilasta</translation>
+<translation id="1766957085594317166">Tallenna salasanat turvallisesti Google-tilillesi, niin et joudu koskaan enää kirjoittamaan niitä.</translation>
 <translation id="1768278914020124551">Hups! Kirjautumispalvelimeesi yhdistämisessä oli ongelma. Tarkista verkkoyhteytesi ja verkkotunnuksen nimi, ja yritä sitten uudelleen.</translation>
 <translation id="1769104665586091481">Avaa linkki uudessa &amp;ikkunassa</translation>
 <translation id="1773212559869067373">Todennusvarmenne on hylätty paikallisesti</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Ei yhteyttä</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Omat laitteet</translation>
+<translation id="3753033997400164841">Tallenna kerran. Käytä kaikkialla.</translation>
 <translation id="3755411799582650620"><ph name="PHONE_NAME" /> voi nyt avata myös tämän <ph name="DEVICE_TYPE" />-laitteen.</translation>
 <translation id="375636864092143889">Sivusto käyttää mikrofoniasi</translation>
 <translation id="3757733214359997190">Sivustoja ei löytynyt</translation>
@@ -2164,7 +2167,6 @@
 <translation id="4146026355784316281">Avaa aina järjestelmän katselusovelluksella</translation>
 <translation id="4146785383423576110">Nollaa ja puhdista</translation>
 <translation id="4147911968024186208">Yritä uudelleen. Jos näet tämän virheen uudelleen, ota yhteyttä tukihenkilöön.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Näyttö</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 välilehti}other{# välilehteä}}</translation>
 <translation id="4154664944169082762">Tunnistetiedostot</translation>
@@ -2205,6 +2207,7 @@
 <translation id="4232375817808480934">Määritä Kerberos</translation>
 <translation id="4235200303672858594">Koko ruutu</translation>
 <translation id="4235965441080806197">Peruuta sisäänkirjautuminen</translation>
+<translation id="4242145785130247982">Useita käyttöoikeusvarmenteita ei tueta</translation>
 <translation id="4242533952199664413">Avaa asetukset</translation>
 <translation id="4242577469625748426">Käytäntöasetuksien asentaminen laitteelle epäonnistui: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Hae lisää näyttökynäsovelluksia</translation>
@@ -2663,6 +2666,7 @@
 <translation id="4957949153200969297">Ota käyttöön vain synkronointiominaisuudet: <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Salasanat tallennetaan Google-tilillesi, jotta voit käyttää niitä kaikilla laitteilla</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Järjestelmänvalvoja on asentanut tämän sovelluksen.</translation>
 <translation id="4964455510556214366">Asettelu</translation>
 <translation id="4964673849688379040">Tarkistetaan…</translation>
 <translation id="4965808351167763748">Haluatko varmasti määrittää tämän laitteen käyttämään Hangouts Meetiä?</translation>
@@ -2920,6 +2924,7 @@
 <translation id="5360150013186312835">Näytä yläpalkissa</translation>
 <translation id="5362741141255528695">Valitse yksityinen avaintiedosto.</translation>
 <translation id="5363109466694494651">Suorita Powerwash ja palauta</translation>
+<translation id="5365716706805792666">Google voi tarkistaa, olivatko salasanasi osallisina tietosuojaloukkauksessa. Tämä otetaan käyttöön kirjautuessasi sisään Google-tilillä.</translation>
 <translation id="5365881113273618889">Valitsemasi kansio sisältää arkaluontoisia tiedostoja. Haluatko varmasti, että <ph name="APP_NAME" /> saa pysyvän kirjoitusoikeuden tähän kansioon?</translation>
 <translation id="5367091008316207019">Luetaan tiedostoa...</translation>
 <translation id="5368720394188453070">Puhelimesi on lukittu. Avaa lukitus käyttääksesi sitä.</translation>
@@ -3518,7 +3523,6 @@
 <translation id="6212039847102026977">Näytä verkkoyhteyksien lisäasetukset</translation>
 <translation id="6212168817037875041">Sulje näyttö</translation>
 <translation id="6212752530110374741">Lähetä linkki sähköpostitse</translation>
-<translation id="6214642087594370545">Näytä varoitus, kun käyttämäsi salasana on vaarantunut tietosuojaloukkauksen yhteydessä. Tämä on vain kirjautuneiden käyttäjien saatavilla.</translation>
 <translation id="6216696360484424239">Kirjaudu sisään automaattisesti</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> on offline-tilassa. Muodosta internetyhteys ja yritä uudelleen.</translation>
 <translation id="6220413761270491930">Virhe ladattaessa laajennusta</translation>
@@ -3875,6 +3879,7 @@
 <translation id="6769712124046837540">Tulostinta lisätään…</translation>
 <translation id="6770664076092644100">Vahvista NFC:n kautta</translation>
 <translation id="6771503742377376720">On varmenteen myöntäjä</translation>
+<translation id="6775163072363532304">Käytettävissä olevat laitteet tulevat näkyviin tähän.</translation>
 <translation id="6777817260680419853">Uudelleenohjaus estetty</translation>
 <translation id="6778737459546443941">Vanhempasi ei ole hyväksynyt sitä vielä.</translation>
 <translation id="677965093459947883">Hyvin pieni</translation>
@@ -4335,6 +4340,7 @@
 <translation id="7441830548568730290">Muut käyttäjät</translation>
 <translation id="7442465037756169001">Hangouts Meet ‑laitteistosi on valmis määritettäväksi.</translation>
 <translation id="744341768939279100">Luo uusi profiili</translation>
+<translation id="7443806024147773267">Käytä salasanojasi kaikkialla ollessasi kirjautuneena Google-tilille</translation>
 <translation id="7444046173054089907">Tämä sivusto on estetty</translation>
 <translation id="7444983668544353857">Poista <ph name="NETWORKDEVICE" /> käytöstä </translation>
 <translation id="7448430327655618736">Asenna sovellukset automaattisesti</translation>
@@ -4747,6 +4753,7 @@
 <translation id="8014154204619229810">Päivitysohjelma on käynnissä. Lataa sivu hetken kuluttua uudelleen ja tarkista tilanne.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei voi palautua aiemmin asennettuun versioon. Suorita laitteellesi Powerwash uudelleen.</translation>
 <translation id="8014210335923519270">Auta luomaan parempi ja turvallisempi <ph name="IDS_SHORT_PRODUCT_NAME" /> lähettämällä järjestelmä- ja käyttötietoja Googlelle.</translation>
+<translation id="8015780634880457457">Google voi tarkistaa, olivatko salasanasi osallisina tietosuojaloukkauksessa</translation>
 <translation id="8016266267177410919">Väliaikainen tallennustila</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Pikanäppäintä muokattu</translation>
@@ -4865,6 +4872,7 @@
 <translation id="8188389033983459049">Tarkista laitteesi asetukset ja ota se käyttöön jatkaaksesi</translation>
 <translation id="8190193592390505034">Muodostetaan yhteyttä sivustoon <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Hallita sovelluksia, laajennuksia ja teemoja</translation>
+<translation id="819464600477418284">Tätä sovellusta ei voi poistaa, koska se kuuluu Chrome käyttöjärjestelmään.</translation>
 <translation id="8195027750202970175">Tiedoston koko</translation>
 <translation id="8198323535106903877">Asennamme nämä <ph name="NUMBER_OF_APPS" /> sovellusta puolestasi</translation>
 <translation id="8199300056570174101">Verkon ja laitteen ominaisuudet</translation>
@@ -4925,6 +4933,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Ominaisuuden poistaminen käytöstä ei estä laitetta lähettämästä olennaisten palvelujen (esim. järjestelmäpäivitysten ja tietoturvan) kannalta välttämättömiä tietoja.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Omistaja voi muokata tätä ominaisuutta kohdassa Asetukset &gt; Lisäasetukset &gt; Lähetä automaattisesti diagnostiikka- ja käyttötietoja Googlelle.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Jos lapsesi on ottanut käyttöön ylimääräisen Verkko- ja sovellustoiminta ‑asetuksen, tätä dataa voidaan tallentaa lapsesi Google-tilille. Lue lisätietoja näistä asetuksista ja niiden muokkaamisesta osoitteessa families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Virheellinen käyttöoikeusvarmenne</translation>
 <translation id="8270242299912238708">PDF-dokumentit</translation>
 <translation id="827097179112817503">Näytä Etusivu-painike</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 kirjanmerkki poistettiin}other{# kirjanmerkkiä poistettiin}}</translation>
@@ -5338,6 +5347,7 @@
 <translation id="8874184842967597500">Ei yhdistetty</translation>
 <translation id="8876307312329369159">Tätä asetusta ei voi muuttaa demo-käyttökerralla.</translation>
 <translation id="8877448029301136595">[emohakemisto]</translation>
+<translation id="8879220587046205278">Google Playn sovellukset voivat edellyttää täysiä tiedostojärjestelmän käyttöoikeuksia, jotta ne voivat kirjoittaa ja lukea ulkoisten tallennustilalaitteiden tiedostoja. Kaikki ulkoisen aseman käyttäjät voivat nähdä laitteella luodut tiedostot ja kansiot.</translation>
 <translation id="8879284080359814990">&amp;Näytä välilehtenä</translation>
 <translation id="8879921471468674457">Muista kirjautumistiedot</translation>
 <translation id="8881020143150461183">Yritä uudelleen. Teknistä tukea tarjoaa <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 398790e..296f64e 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -2167,7 +2167,6 @@
 <translation id="4146026355784316281">Palaging Buksan Gamit ang System Viewer</translation>
 <translation id="4146785383423576110">I-reset at linisin</translation>
 <translation id="4147911968024186208">Pakisubukang muli. Kung makikita mong muli ang error na ito, makipag-ugnayan sa iyong kinatawan ng suporta.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}one{# tab}other{# na tab}}</translation>
 <translation id="4154664944169082762">Mga fingerprint</translation>
@@ -3519,7 +3518,6 @@
 <translation id="6212039847102026977">Ipakita ang mga advanced na property ng network</translation>
 <translation id="6212168817037875041">I-off ang display</translation>
 <translation id="6212752530110374741">I-email ang Link</translation>
-<translation id="6214642087594370545">Magpakita ng babala kapag gumamit ka ng hindi ligtas na password na bahagi ng paglabag sa data. Available lang ito para sa mga naka-sign in na user.</translation>
 <translation id="6216696360484424239">Awtomatikong mag-sign in</translation>
 <translation id="6218058416316985984">Offline ang <ph name="DEVICE_TYPE" />. Kumonekta sa Internet at subukang muli.</translation>
 <translation id="6220413761270491930">Error sa Paglo-load ng Extension</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 8eaab04..ab45324a 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Session de navigation privée actuelle uniquement</translation>
 <translation id="1698650002254827833">Impossible de charger la liste des applications. Veuillez réessayer.</translation>
 <translation id="1701062906490865540">Supprimer ce profil utilisateur</translation>
+<translation id="1703331064825191675">Ne vous souciez plus jamais de vos mots de passe</translation>
 <translation id="1706586824377653884">Ajouté par votre administrateur</translation>
 <translation id="1706625117072057435">Niveaux de zoom</translation>
 <translation id="1708338024780164500">(Inactive)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">bêta</translation>
 <translation id="176587472219019965">&amp;Nouvelle fenêtre</translation>
 <translation id="1766575458646819543">Mode plein écran désactivé</translation>
+<translation id="1766957085594317166">Enregistrer les mots de passe en toute sécurité dans votre compte Google pour ne plus jamais avoir à les saisir</translation>
 <translation id="1768278914020124551">Petit problème… Impossible de contacter le serveur d'ouverture de session. Vérifiez votre connexion réseau et le nom de domaine, puis réessayez.</translation>
 <translation id="1769104665586091481">Ouvrir le lien dans une nouvelle &amp;fenêtre</translation>
 <translation id="1773212559869067373">Certificat d'authentification rejeté en local.</translation>
@@ -782,7 +784,7 @@
 <translation id="2155772377859296191">La résolution est de <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="2156283799932971644">Vous pouvez nous aider à améliorer la navigation sécurisée en nous envoyant des informations système et du contenu de pages.</translation>
 <translation id="2156294658807918600">Service worker : <ph name="SCRIPT_URL" /></translation>
-<translation id="2157474325782140681">Pour bénéficier de fonctionnalités supplémentaires, utilisez une station Dell conçue pour fonctionner avec ce Chromebook.</translation>
+<translation id="2157474325782140681">Pour bénéficier de fonctionnalités supplémentaires, utilisez une station d'accueil Dell compatible avec ce Chromebook.</translation>
 <translation id="215753907730220065">Quitter le mode plein écran</translation>
 <translation id="2157875535253991059">Cette page est maintenant en mode plein écran</translation>
 <translation id="216169395504480358">Ajouter un réseau Wi-Fi…</translation>
@@ -873,7 +875,7 @@
 <translation id="2270450558902169558">Échanger des données avec n'importe quel appareil dans le domaine suivant : "<ph name="DOMAIN" />"</translation>
 <translation id="2270627217422354837">Échanger des données avec n'importe quel appareil dans les domaines suivants : "<ph name="DOMAINS" />"</translation>
 <translation id="2272570998639520080">Verre à martini</translation>
-<translation id="2273119997271134996">Problème rencontré au niveau de la station et du port vidéo</translation>
+<translation id="2273119997271134996">Problème rencontré au niveau du port vidéo de la station d'accueil</translation>
 <translation id="2276503375879033601">Ajouter d'autres applications</translation>
 <translation id="2277255602909579701">Ensemble des cookies et données de site</translation>
 <translation id="2277769717710009150">{COUNT,plural, =1{1 élément copié}one{# élément copié}other{# éléments copiés}}</translation>
@@ -1441,7 +1443,7 @@
 <translation id="310671807099593501">Le site utilise le Bluetooth</translation>
 <translation id="3115147772012638511">En attente de l'affichage du cache</translation>
 <translation id="3115580024857770654">Tout réduire</translation>
-<translation id="3117362587799608430">Cette station présente un problème de compatibilité</translation>
+<translation id="3117362587799608430">Cette station d'accueil présente un problème de compatibilité</translation>
 <translation id="3118319026408854581">Aide <ph name="PRODUCT_NAME" /></translation>
 <translation id="3120430004221004537">Chiffrement insuffisant pour une opération donnée sur l'appareil <ph name="DEVICE_NAME" />.</translation>
 <translation id="3121793941267913344">Réinitialiser cet appareil <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Non connecté</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Mes appareils</translation>
+<translation id="3753033997400164841">Enregistrez-les une seule fois. Utilisez-les partout</translation>
 <translation id="3755411799582650620">Votre <ph name="PHONE_NAME" /> peut désormais également déverrouiller ce <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Le site utilise votre micro</translation>
 <translation id="3757733214359997190">Aucun site trouvé</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Toujours ouvrir avec le lecteur système</translation>
 <translation id="4146785383423576110">Réinitialiser et nettoyer</translation>
 <translation id="4147911968024186208">Veuillez réessayer. Si l'erreur se reproduit, veuillez contacter le service d'assistance.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Écran</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 onglet}one{# onglet}other{# onglets}}</translation>
 <translation id="4154664944169082762">Empreintes</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Configurer Kerberos</translation>
 <translation id="4235200303672858594">Plein écran</translation>
 <translation id="4235965441080806197">Annuler la connexion</translation>
+<translation id="4242145785130247982">Plusieurs certificats client ne sont pas compatibles</translation>
 <translation id="4242533952199664413">Ouvrir les paramètres</translation>
 <translation id="4242577469625748426">Échec de l'installation des paramètres des règles sur l'appareil : <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Trouver plus d'applications de stylet</translation>
@@ -2368,7 +2371,7 @@
 <translation id="451407183922382411">Fourni par <ph name="COMPANY_NAME" /></translation>
 <translation id="4514610446763173167">Activer/Désactiver la lecture ou la mise en pause de la vidéo</translation>
 <translation id="451515744433878153">Supprimer</translation>
-<translation id="4515872537870654449">Contactez Dell pour faire réparer votre équipement. La station ne peut pas fonctionner si le ventilateur n'est pas en état de marche.</translation>
+<translation id="4515872537870654449">Contactez Dell pour faire réparer votre équipement. La station d'accueil ne peut pas fonctionner si le ventilateur n'est pas en état de marche.</translation>
 <translation id="4519935350946509010">Erreur de connexion.</translation>
 <translation id="4520385623207007473">Cookies utilisés</translation>
 <translation id="452039078290142656">appareils inconnus de <ph name="VENDOR_NAME" /></translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Option permettant uniquement d'activer les fonctionnalités de la synchronisation <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Les mots de passe sont enregistrés dans votre compte Google, afin que vous puissiez les utiliser sur tous vos appareils</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Cette application a été installée par votre administrateur.</translation>
 <translation id="4964455510556214366">Organisation</translation>
 <translation id="4964673849688379040">Vérification en cours…</translation>
 <translation id="4965808351167763748">Voulez-vous vraiment configurer cet appareil pour exécuter Hangouts Meet ?</translation>
@@ -2676,7 +2680,7 @@
 <translation id="4973307593867026061">Ajouter des imprimantes</translation>
 <translation id="4973325300212422370">{NUM_TABS,plural, =1{Couper le son du site}one{Couper le son du site}other{Couper le son des sites}}</translation>
 <translation id="4974733135013075877">Fermer et activer le verrouillage enfant</translation>
-<translation id="4976009197147810135">Fractionner verticalement</translation>
+<translation id="4976009197147810135">Séparation verticale</translation>
 <translation id="4976795213394241669">{0,plural, =0{Mettre à jour tout de suite}=1{Mettre à jour d'ici 1 seconde}one{Mettre à jour d'ici # seconde}other{Mettre à jour d'ici # secondes}}</translation>
 <translation id="4977942889532008999">Confirmer l'accès</translation>
 <translation id="4980805016576257426">Cette extension contient des logiciels malveillants.</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Afficher dans la barre d'outils</translation>
 <translation id="5362741141255528695">Sélectionnez le fichier de clé privée.</translation>
 <translation id="5363109466694494651">Powerwash et rétablir</translation>
+<translation id="5365716706805792666">Google peut vérifier si vos mots de passe ont été piratés suite à une violation de données. Cette option sera activée si vous vous connectez avec votre compte Google.</translation>
 <translation id="5365881113273618889">Le dossier que vous avez sélectionné contient des fichiers sensibles. Voulez-vous vraiment accorder à "<ph name="APP_NAME" />" un accès en écriture permanent à ce dossier ?</translation>
 <translation id="5367091008316207019">Lecture du fichier en cours…</translation>
 <translation id="5368720394188453070">Votre téléphone est verrouillé. Déverrouillez-le pour y accéder.</translation>
@@ -3520,7 +3525,6 @@
 <translation id="6212039847102026977">Afficher les propriétés de réseau avancées</translation>
 <translation id="6212168817037875041">Désactiver l'écran</translation>
 <translation id="6212752530110374741">Envoyer le lien par e-mail</translation>
-<translation id="6214642087594370545">Afficher un avertissement lorsque vous utilisez un mot de passe peu sûr qui a été concerné par une violation des données. Cette fonctionnalité n'est disponible que pour les utilisateurs connectés.</translation>
 <translation id="6216696360484424239">Connexion automatique</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> est hors connexion. Connectez-vous à Internet, puis réessayez.</translation>
 <translation id="6220413761270491930">Erreur lors du chargement de l'extension</translation>
@@ -3629,7 +3633,7 @@
 <translation id="6384275966486438344">Modifier les paramètres de la recherche pour utiliser l'adresse <ph name="SEARCH_HOST" />.</translation>
 <translation id="6385543213911723544">Les sites peuvent enregistrer et consulter les données liées aux cookies.</translation>
 <translation id="6386099547750337629">S'il s'agit d'une erreur, veuillez contacter le service d'assistance.</translation>
-<translation id="6387674443318562538">Fractionner verticalement</translation>
+<translation id="6387674443318562538">Séparation verticale</translation>
 <translation id="6388429472088318283">Rechercher des langues</translation>
 <translation id="6390799748543157332">Les pages que vous consultez dans cette fenêtre ne sont pas consignées dans l'historique du navigateur et ne laissent aucune autre trace sur votre ordinateur (des cookies, par exemple), une fois que vous avez fermé toutes les fenêtres Invité ouvertes. Tous les fichiers téléchargés sont toutefois conservés.</translation>
 <translation id="6390994422085833176">Vérifier les fonctionnalités de synchronisation et de personnalisation après la configuration</translation>
@@ -3877,6 +3881,7 @@
 <translation id="6769712124046837540">Ajout d'une imprimante en cours…</translation>
 <translation id="6770664076092644100">Valider via NFC</translation>
 <translation id="6771503742377376720">Est une autorité de certification</translation>
+<translation id="6775163072363532304">Les périphériques disponibles s'afficheront ici.</translation>
 <translation id="6777817260680419853">Redirection bloquée</translation>
 <translation id="6778737459546443941">Tes parents ne l'ont pas encore autorisé</translation>
 <translation id="677965093459947883">Très petite</translation>
@@ -3886,7 +3891,7 @@
 <translation id="6786747875388722282">Extensions</translation>
 <translation id="6787839852456839824">Raccourcis clavier</translation>
 <translation id="6788210894632713004">Extension non empaquetée</translation>
-<translation id="6789592661892473991">Fractionner horizontalement</translation>
+<translation id="6789592661892473991">Séparation horizontale</translation>
 <translation id="6790428901817661496">Lire</translation>
 <translation id="6790497603648687708">Ajout de l'extension <ph name="EXTENSION_NAME" /> effectué à distance</translation>
 <translation id="6790820461102226165">Ajouter un profil utilisateur…</translation>
@@ -4337,6 +4342,7 @@
 <translation id="7441830548568730290">Autres utilisateurs</translation>
 <translation id="7442465037756169001">Votre matériel Hangouts Meet est prêt à être configuré.</translation>
 <translation id="744341768939279100">Créer un profil</translation>
+<translation id="7443806024147773267">Accédez à vos mots de passe chaque fois que vous êtes connecté à votre compte Google</translation>
 <translation id="7444046173054089907">Ce site est bloqué</translation>
 <translation id="7444983668544353857">Désactiver <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Installer automatiquement les applications</translation>
@@ -4381,7 +4387,7 @@
 <translation id="7506541170099744506">Votre <ph name="DEVICE_TYPE" /> a bien été enregistré pour bénéficier de la gestion d'entreprise.</translation>
 <translation id="7507930499305566459">Certificat du répondeur d'état</translation>
 <translation id="7508054832109420082">Autoriser l'accès aux imprimantes</translation>
-<translation id="7510943789645525906">Recevez une alerte si l'un de vos mots de passe est compromis suite à une violation de données</translation>
+<translation id="7510943789645525906">Recevoir une alerte si l'un de vos mots de passe est compromis suite à une violation de données</translation>
 <translation id="7513029293694390567">Permet de se connecter automatiquement aux sites Web à l'aide des identifiants enregistrés. Si cette fonctionnalité est désactivée, vous êtes invité à confirmer chaque connexion à un site Web.</translation>
 <translation id="7514365320538308">Télécharger</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4750,6 +4756,7 @@
 <translation id="8014154204619229810">Le processus de mise à jour est en cours. Actualisez la page dans quelques instants et revérifiez.</translation>
 <translation id="8014206674403687691">Impossible de revenir à la version précédente de <ph name="IDS_SHORT_PRODUCT_NAME" />. Veuillez essayer de réinitialiser l'appareil avec la fonctionnalité Powerwash.</translation>
 <translation id="8014210335923519270">Améliorez <ph name="IDS_SHORT_PRODUCT_NAME" /> et ses paramètres de sécurité en envoyant des informations système et des données d'utilisation à Google</translation>
+<translation id="8015780634880457457">Google peut vérifier si vos mots de passe ont été piratés suite à une violation de données</translation>
 <translation id="8016266267177410919">Stockage temporaire</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Raccourci modifié</translation>
@@ -4815,7 +4822,7 @@
 <translation id="810875025413331850">Aucun appareil à proximité n'a été trouvé.</translation>
 <translation id="8111155949205007504">Partagez ce mot de passe avec votre iPhone</translation>
 <translation id="8113043281354018522">Sélectionner un type de licence</translation>
-<translation id="8114875720387900039">Fractionner horizontalement</translation>
+<translation id="8114875720387900039">Séparation horizontale</translation>
 <translation id="8116972784401310538">&amp;Gestionnaire de favoris</translation>
 <translation id="8117620576188476503">Gérez les connexions, les mises à jour et les paramètres depuis la barre d'état. Pour y accéder depuis le clavier, appuyez sur Alt+Maj+S.</translation>
 <translation id="8118076340394175570">Votre organisation exige que cet appareil soit mis à jour</translation>
@@ -4868,6 +4875,7 @@
 <translation id="8188389033983459049">Activez le Bluetooth dans les paramètres de votre appareil pour continuer</translation>
 <translation id="8190193592390505034">Connexion à <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gérer vos applications, vos extensions et vos thèmes</translation>
+<translation id="819464600477418284">Cette application ne peut pas être désinstallée, car elle fait partie de Chrome OS.</translation>
 <translation id="8195027750202970175">Taille sur le disque</translation>
 <translation id="8198323535106903877">Nous allons installer ces <ph name="NUMBER_OF_APPS" /> applications pour vous</translation>
 <translation id="8199300056570174101">Propriétés du réseau (service) et de l'appareil</translation>
@@ -4928,6 +4936,7 @@
     <ph name="BEGIN_PARAGRAPH2" />La désactivation de cette fonctionnalité n'affecte pas la capacité de votre appareil à envoyer les informations requises pour les services essentiels tels que les mises à jour système et la sécurité.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Le propriétaire de l'appareil peut contrôler cette fonctionnalité dans Paramètres &gt; Avancés &gt; Envoyer automatiquement des données de diagnostic et d'utilisation à Google.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Si vous activez l'enregistrement de l'activité additionnelle de votre enfant sur le Web et les applications, ces données peuvent être enregistrées dans son compte Google. Découvrez plus en détail ces paramètres et comment les régler sur le site families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Certificat client non valide</translation>
 <translation id="8270242299912238708">Documents PDF</translation>
 <translation id="827097179112817503">Afficher le bouton Accueil</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 favori supprimé}one{# favori supprimé}other{# favoris supprimés}}</translation>
@@ -5341,6 +5350,7 @@
 <translation id="8874184842967597500">Non connecté</translation>
 <translation id="8876307312329369159">Impossible de modifier ce paramètre dans une session de démonstration.</translation>
 <translation id="8877448029301136595">[répertoire parent]</translation>
+<translation id="8879220587046205278">Les applications Google Play peuvent exiger un accès complet au système de fichiers pour lire et écrire des fichiers sur des périphériques de stockage externe. Les fichiers et les dossiers créés sur le périphérique sont visibles par tout utilisateur du disque externe.</translation>
 <translation id="8879284080359814990">Afficher dan&amp;s un onglet</translation>
 <translation id="8879921471468674457">Mémoriser les informations de connexion</translation>
 <translation id="8881020143150461183">Veuillez réessayer. Pour obtenir une assistance technique, contactez <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 646ae923..9bbab48c 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -2163,7 +2163,6 @@
 <translation id="4146026355784316281">હંમેશા સિસ્ટમ દર્શક સાથે ખોલો</translation>
 <translation id="4146785383423576110">રીસેટ કરો અને સાફ કરો</translation>
 <translation id="4147911968024186208">કૃપા કરીને ફરી પ્રયાસ કરો. જો તમને આ ભૂલ ફરી દેખાય તો કૃપા કરીને તમારા સપોર્ટ પ્રતિનિધિનો સંપર્ક કરો.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">ડિસ્પ્લે</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ટેબ}one{# ટેબ્સ}other{# ટેબ્સ}}</translation>
 <translation id="4154664944169082762">ફિંગરપ્રીંટ્સ</translation>
@@ -3517,7 +3516,6 @@
 <translation id="6212039847102026977">વિગતવાર નેટવર્ક ગુણધર્મો બતાવો</translation>
 <translation id="6212168817037875041">ડિસ્પ્લે બંધ કરો</translation>
 <translation id="6212752530110374741">લિંક ઇમેઇલ કરો</translation>
-<translation id="6214642087594370545">જ્યારે તમે એવા કોઈ અસુરક્ષિત પાસવર્ડનો ઉપયોગ કરો કે જે ડેટા ઉલ્લંઘનનો ભાગ હતો, ત્યારે ચેતવણી બતાવે છે. આ માત્ર સાઇન ઇન કર્યું હોય એવા વપરાશકર્તાઓ માટે જ ઉપલબ્ધ છે.</translation>
 <translation id="6216696360484424239">ઑટોમેટિક રીતે સાઇન ઇન કરો</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ઑફલાઇન છે. ઇન્ટરનેટથી કનેક્ટ કરો અને ફરી પ્રયાસ કરો.</translation>
 <translation id="6220413761270491930">એક્સ્ટેન્શન લોડ કરવામાં ભૂલ</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 1951d5ad..9b90ef3 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -302,6 +302,7 @@
 <translation id="1444628761356461360">यह सेटिंग डिवाइस मालिक, <ph name="OWNER_EMAIL" /> द्वारा प्रबंधित है.</translation>
 <translation id="144518587530125858">थीम के लिए '<ph name="IMAGE_PATH" />' को लोड नहीं कर सका.</translation>
 <translation id="1445693676523799095">इसमें कुछ समय लग सकता है</translation>
+<translation id="1450011005989029586">आप जो साइट या ऐप्लिकेशन इस्तेमाल करते हैं उसमें डेटा का उल्लंघन होने पर आपका पासवर्ड उजागर हो सकता है. Chrome <ph name="ORIGIN" /> पर अभी <ph name="BOLD" /> का सुझाव देता है.</translation>
 <translation id="1451375123200651445">वेबपेज, एकल फ़ाइल</translation>
 <translation id="1451917004835509682">पर्यवेक्षित व्‍यक्‍ति जोड़ें</translation>
 <translation id="1454223536435069390">स्क्रीन&amp;शॉट लें</translation>
@@ -412,6 +413,7 @@
 <translation id="1604432177629086300">प्रिंट नहीं किया जा सका. प्रिंटर की जांच करें और फिर से कोशिश करें</translation>
 <translation id="1607139524282324606">प्रविष्टि हटाएं</translation>
 <translation id="1608626060424371292">इस उपयोगकर्ता को हटाएं</translation>
+<translation id="1608668830839595724">चुने गए आइटम के लिए और कार्रवाई</translation>
 <translation id="1609170755653088773">इस पासवर्ड को अपने iPhone से सिंक करें</translation>
 <translation id="161042844686301425">स्यान</translation>
 <translation id="1611584202130317952">प्रावधान प्रवाह में रुकावट आई थी. कृपया फिर से कोशिश करें या अपने डिवाइस मालिक या व्यवस्थापक से संपर्क करें.</translation>
@@ -734,6 +736,7 @@
 <translation id="2090165459409185032">अपनी खाता जानकारी पुनर्प्राप्‍त करने के लिए, यहां जाएं: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">सिस्‍टम सुरक्षा सेटिंग</translation>
 <translation id="2091887806945687916">आवाज़</translation>
+<translation id="2096715839409389970">तीसरे पक्ष की कुकी मिटाएं</translation>
 <translation id="2097372108957554726">नए डिवाइस रजिस्टर करने के लिए आपको Chrome में साइन इन करना होगा.</translation>
 <translation id="2099172618127234427">आप Chrome OS की डीबग करने वाली सुविधाएं चालू कर रहे हैं जिससे sshd daemon सेट हो जाएगा और यूएसबी डिवाइस से बूट करना चालू हो जाएगा.</translation>
 <translation id="2099686503067610784">सर्वर प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" मिटाएं?</translation>
@@ -779,6 +782,7 @@
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> जैसा लगता है</translation>
 <translation id="2156283799932971644">आप Google को कुछ 'सिस्टम जानकारी' और 'पेज सामग्री' भेजकर 'सुरक्षित ब्राउज़िंग' को बेहतर बना सकते हैं.</translation>
 <translation id="2156294658807918600">सर्विस वर्कर: <ph name="SCRIPT_URL" /></translation>
+<translation id="2157474325782140681">ज़्यादा सुविधाएं पाने के लिए, Dell डॉकिंग स्टेशन इस्तेमाल करें जिसे इस Chromebook के साथ काम करने के लिए बनाया गया हो.</translation>
 <translation id="215753907730220065">फ़ुल स्क्रीन से बाहर निकलें</translation>
 <translation id="2157875535253991059">यह पेज अब फ़ुल स्‍क्रीन है.</translation>
 <translation id="216169395504480358">वाई-फ़ाई  जोड़ें...</translation>
@@ -796,6 +800,7 @@
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_DOMAIN" /> पर <ph name="PEPPER_PLUGIN_NAME" /> आपके कंप्यूटर को एक्सेस करना चाहता है</translation>
 <translation id="2178614541317717477">CA समझौता</translation>
 <translation id="218070003709087997">प्रिंट की जाने वाली कॉपी की संख्या (1 से 999) दर्शाने के लिए किसी संख्या का उपयोग करें.</translation>
+<translation id="2182058453334755893">आपके क्लिपबोर्ड पर कॉपी किया गया</translation>
 <translation id="2184515124301515068">Chrome को चुनने दें कि साइटें कब आवाज़ चला सकती हैं (सुझाव)</translation>
 <translation id="2187895286714876935">सर्वर प्रमाणपत्र आयात गड़बड़ी</translation>
 <translation id="2187906491731510095">एक्सटेंशन अपडेट किए गए</translation>
@@ -868,6 +873,7 @@
 <translation id="2270450558902169558"><ph name="DOMAIN" /> डोमेन के किसी भी डिवाइस से डेटा का लेन-देन करें</translation>
 <translation id="2270627217422354837">इन डोमेन के किसी भी डिवाइस से डेटा का लेन-देन करें: <ph name="DOMAINS" /></translation>
 <translation id="2272570998639520080">मार्टिनी ग्लास</translation>
+<translation id="2273119997271134996">वीडियो-पोर्ट के डॉक से जुड़ी समस्या</translation>
 <translation id="2276503375879033601">ज़्यादा ऐप्स  जोड़ें</translation>
 <translation id="2277255602909579701">सभी कुकी और साइट डेटा</translation>
 <translation id="2277769717710009150">{COUNT,plural, =1{1 आइटम कॉपी किया गया}one{# आइटम कॉपी किए गए}other{# आइटम कॉपी किए गए}}</translation>
@@ -961,6 +967,7 @@
 <translation id="2423578206845792524">इमेज को इस रूप में सेव करें...</translation>
 <translation id="2428510569851653187">बताएं कि जब टैब क्रैश हुआ तब आप क्या कर रहे थे</translation>
 <translation id="2431027948063157455">Google Assistant को लोड नहीं किया जा सका, कृपया अपना नेटवर्क कनेक्शन जांच लें और फिर से कोशिश करें.</translation>
+<translation id="243242775089461296">इस साइट के लिए तीसरे पक्ष की कुकी ब्लॉक करने की सुविधा बंद है</translation>
 <translation id="2432753757290432042">Linux (बीटा) अपडेट ज़रूरी है</translation>
 <translation id="2433452467737464329">पेज को अपने आप रीफ्रेश करने के लिए URL में क्वेरी पैरामीटर जोड़ें: chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433507940547922241">प्रकटन</translation>
@@ -1051,6 +1058,7 @@
 <translation id="2534460670861217804">सुरक्षित HTTP प्रॉक्‍सी</translation>
 <translation id="253557089021624350">कीपअलाइव की गणना</translation>
 <translation id="2535799430745250929">कोई मोबाइल नेटवर्क मौजूद नहीं है</translation>
+<translation id="2536052711541161459">पॉइंटर की तेज़ी</translation>
 <translation id="2537395079978992874"><ph name="ORIGIN" /> नीचे दी गई फ़ाइलों और फ़ोल्डर को देख सकती है और उनमें बदलाव कर सकती है</translation>
 <translation id="2538361623464451692">सिंक बंद किया गया है</translation>
 <translation id="2540449034743108469">एक्सटेंशन की गतिविधियां सुनने के लिए, "शुरू करें" दबाएं</translation>
@@ -1271,6 +1279,7 @@
 <translation id="2849936225196189499">महत्वपूर्ण</translation>
 <translation id="2850541429955027218">थीम जोड़ें</translation>
 <translation id="2851634818064021665">आपको इस साइट पर जाने की अनुमति लेनी होगी</translation>
+<translation id="2854896010770911740">तीसरे पक्ष की कुकी हटाएं</translation>
 <translation id="2858138569776157458">मुख्य साइटें</translation>
 <translation id="2859806420264540918">इस साइट में तंग करने वाले या गुमराह करने वाले विज्ञापन दिखाई देते हैं.</translation>
 <translation id="2861301611394761800">सिस्टम अपडेट पूरा हुआ. कृपया सिस्टम को रीस्टार्ट करें.</translation>
@@ -1432,6 +1441,7 @@
 <translation id="310671807099593501">साइट ब्लूटूथ का इस्तेमाल कर रही है</translation>
 <translation id="3115147772012638511">कैश मेमोरी का इंतज़ार कर रहे हैं...</translation>
 <translation id="3115580024857770654">सभी छिपाएं</translation>
+<translation id="3117362587799608430">डॉक पूरी तरह काम नहीं करता</translation>
 <translation id="3118319026408854581"><ph name="PRODUCT_NAME" />सहायता</translation>
 <translation id="3120430004221004537">दी गई कार्रवाई के लिए इस पर सुरक्षित करने का तरीका काफी नहीं है: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="3121793941267913344">इस <ph name="IDS_SHORT_PRODUCT_NAME" /> डिवाइस को रीसेट करें</translation>
@@ -1440,6 +1450,7 @@
 <translation id="3124111068741548686">उपयोगकर्ता हैंडल</translation>
 <translation id="3126026824346185272">Ctrl</translation>
 <translation id="3127156390846601284">यह ऐसे किसी भी डेटा को मिटा देगा जिसे दिखाई गईं सभी साइट के लिए आपके डिवाइस पर स्टोर किया गया है. क्या आप जारी रखना चाहते हैं?</translation>
+<translation id="3127860049873093642">चार्ज होने और परफ़ॉर्मेंस से जुड़ी समस्याओं से बचने के लिए, डिवाइस के साथ काम करने वाला Dell या यूएसबी टाइप-सी पावर अडैप्टर इस्तेमाल करें.</translation>
 <translation id="3129173833825111527">बायां हाशिया</translation>
 <translation id="3130528281680948470">आपका डिवाइस रीसेट कर दिया जाएगा और सभी उपयोगकर्ता खाते और स्‍थानीय डेटा हटा दिए जाएंगे. इसे पहले जैसा नहीं किया जा सकता.</translation>
 <translation id="313205617302240621">पासवर्ड भूल गए?</translation>
@@ -1537,6 +1548,7 @@
 <translation id="3281892622610078515">क्वारंटाइन की जाने वाली फ़ाइलें और प्रोग्राम:</translation>
 <translation id="3282568296779691940">Chrome में साइन इन करें</translation>
 <translation id="3285322247471302225">नया &amp;टैब</translation>
+<translation id="328571385944182268">क्या आप पासवर्ड सेव करना चाहते हैं?</translation>
 <translation id="3286737518123001369">अपनी सुरक्षा कुंजी पर सेव किया गया साइन इन डेटा देखें और मिटाएं</translation>
 <translation id="3288047731229977326">डेवलपर मोड में चलने वाले एक्सटेंशन आपके कंप्यूटर को नुकसान पहुंचा सकते हैं. अगर आप डेवलपर नहीं हैं तो, सुरक्षित रहने के लिए आपको डेवलपर मोड मे चलने वाले इन एक्सटेंशन को बंद कर देना चाहिए.</translation>
 <translation id="3289856944988573801">अपडेट की जाँच करने के लिए, कृपया Ethernet या वाई-फ़ाई का उपयोग करें.</translation>
@@ -1656,6 +1668,7 @@
 <translation id="346431825526753">यह बच्‍चों के लिए बनाया गया खाता है जिसे <ph name="CUSTODIAN_EMAIL" /> द्वारा प्रबंधित किया जाता है.</translation>
 <translation id="3468999815377931311">Android फ़ोन</translation>
 <translation id="3470442499439619530">इस उपयोगकर्ता को हटाएं</translation>
+<translation id="3471876058939596279">वीडियो के लिए एचडीएमआई पोर्ट और यूएसबी टाइप-सी पोर्ट को एक ही समय में इस्तेमाल नहीं किया जा सकता. कोई अलग पोर्ट इस्तेमाल करें.</translation>
 <translation id="3473479545200714844">स्क्रीन आवर्द्धक</translation>
 <translation id="3475843873335999118">माफ़ कीजिए, आपके फ़िंगरप्रिंट की अब भी पहचान नहीं हुई हैैै. कृपया अपना पासवर्ड डालें.</translation>
 <translation id="3476303763173086583">इस्तेमाल और निदान से जुड़ा डेटा भेजें. Google को निदान, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने आप भेजकर, अपने बच्चे के Android अनुभव को बेहतर बनाने में मदद करें. इसका इस्तेमाल आपके बच्चे की पहचान करने के लिए नहीं किया जाएगा. यह सिस्टम और ऐप्लिकेशन की स्थिरता और दूसरे सुधारों में मदद करेगा. कुछ एग्रीगेट डेटा Google ऐप्लिकेशन और पार्टनर, जैसे कि Android डेवलपरों की भी मदद करेगा. यह <ph name="BEGIN_LINK1" />सेटिंग<ph name="END_LINK1" /> डिवाइस के मालिक ने लागू की है. डिवाइस का मालिक यह चुन सकता है कि निदान और इस डिवाइस के इस्तेमाल से जुड़ा डेटा Google को भेजना है. अगर आपके बच्चे के लिए दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा उसके Google खाते में सेव किया जा सकता है. <ph name="BEGIN_LINK2" />ज़्यादा जानें<ph name="END_LINK2" /></translation>
@@ -1753,6 +1766,7 @@
 <translation id="3603622770190368340">नेटवर्क प्रमाणपत्र पाएं</translation>
 <translation id="3605780360466892872">बटनडाउन</translation>
 <translation id="3608576286259426129">उपयोगकर्ता के इमेज की झलक</translation>
+<translation id="3610369246614755442">डॉक के पंखे को मरम्मत की ज़रूरत है</translation>
 <translation id="361106536627977100">फ़्लैश डेटा</translation>
 <translation id="3612673635130633812">&lt;a href="<ph name="URL" />"&gt;<ph name="EXTENSION" />&lt;/a&gt; के द्वारा डाउनलोड किया गया</translation>
 <translation id="3613134908380545408"><ph name="FOLDER_NAME" /> दिखाएं</translation>
@@ -1764,6 +1778,7 @@
 <translation id="3624567683873126087">डिवाइस अनलॉक करें और 'Google खाते' में साइन इन करें</translation>
 <translation id="3625258641415618104">स्क्रीनशॉट अक्षम हैं</translation>
 <translation id="3625481642044239431">गलत फ़ाइल चुनी गई. फिर से कोशिश करें.</translation>
+<translation id="3626296069957678981">इस Chromebook को चार्ज करने के लिए इसके साथ काम करने वाली Dell बैटरी इस्तेमाल करें.</translation>
 <translation id="3627320433825461852">1 मिनट से भी कम शेष है</translation>
 <translation id="3627588569887975815">लिंक को गुप्त&amp; विंडो में खोलें</translation>
 <translation id="3627671146180677314">Netscape प्रमाणपत्र नवीकरण समय</translation>
@@ -2151,7 +2166,6 @@
 <translation id="4146026355784316281">हमेशा सिस्‍टम व्‍यूअर से खोलें</translation>
 <translation id="4146785383423576110">रीसेट करें और साफ़ करें</translation>
 <translation id="4147911968024186208">कृपया फिर से कोशिश करें. अगर आपको यह गड़बड़ी फिर से दिखाई देती है, तो कृपया अपने सहायता प्रतिनिधि से संपर्क करें.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">डिसप्ले</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 टैब}one{# टैब}other{# टैब}}</translation>
 <translation id="4154664944169082762">फ़िंगरप्रिंट</translation>
@@ -2214,6 +2228,7 @@
 <translation id="4267953847983678297">माेबाइल नेटवर्क से अपने आप कनेक्ट करें</translation>
 <translation id="4268025649754414643">कुंजी कूटलेखन</translation>
 <translation id="4270393598798225102">वर्शन <ph name="NUMBER" /></translation>
+<translation id="4270615291506829403">पासवर्ड बदलने का सुझाव</translation>
 <translation id="4275663329226226506">मीडिया</translation>
 <translation id="4275830172053184480">अपना डिवाइस फिर से प्रारंभ करें</translation>
 <translation id="4278101229438943600">आपकी Assistant तैयार है</translation>
@@ -2351,6 +2366,7 @@
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> के उपयोग से</translation>
 <translation id="4514610446763173167">वीडियो को 'चलाएं' या 'रोकें' पर टॉगल करें</translation>
 <translation id="451515744433878153">निकालें</translation>
+<translation id="4515872537870654449">मरम्मत के लिए Dell से संपर्क करें. अगर पंखा काम नहीं कर रहा है, तो डॉक बंद हो जाएगा.</translation>
 <translation id="4519935350946509010">कनेक्शन में गड़बड़ी.</translation>
 <translation id="4520385623207007473">इस्तेमाल की जा रही कुकी</translation>
 <translation id="452039078290142656"><ph name="VENDOR_NAME" /> के अज्ञात डिवाइस</translation>
@@ -2633,6 +2649,7 @@
 <translation id="4932733599132424254">तारीख</translation>
 <translation id="4933484234309072027"><ph name="URL" /> पर एम्बेड किया गया</translation>
 <translation id="493571969993549666">'निगरानी में रखा गया उपयोगकर्ता' जोड़ें</translation>
+<translation id="4939805055470675027"><ph name="CARRIER_NAME" /> से कनेक्ट नहीं किया जा सका</translation>
 <translation id="4941246025622441835">एंटरप्राइज़ प्रबंधन के लिए डिवाइस को नामांकित करते समय इस डिवाइस अनुरोध का उपयोग करें:</translation>
 <translation id="4941627891654116707">फ़ॉन्ट का आकार</translation>
 <translation id="494286511941020793">प्रॉक्सी कॉन्फ़िगरेशन सहायता</translation>
@@ -2657,6 +2674,7 @@
 <translation id="4973307593867026061">प्रिंटर जोड़ें</translation>
 <translation id="4973325300212422370">{NUM_TABS,plural, =1{साइट म्यूट करें}one{साइटें म्यूट करें}other{साइटें म्यूट करें}}</translation>
 <translation id="4974733135013075877">बाहर निकलें और चाइल्‍ड लॉक करें</translation>
+<translation id="4976009197147810135">वर्टिकल (ऊपर से नीचे की ओर) रूप से छोटे-छोटे हिस्सों में बांटें यानी स्प्लिट करें</translation>
 <translation id="4976795213394241669">{0,plural, =0{अभी अपडेट करें}=1{1 सेकंड में अपडेट करें}one{# सेकंड में अपडेट करें}other{# सेकंड में अपडेट करें}}</translation>
 <translation id="4977942889532008999">एक्सेस के लिए दोबारा पूछें</translation>
 <translation id="4980805016576257426">इस एक्सटेंशन में मैलवेयर है.</translation>
@@ -2766,7 +2784,9 @@
 <translation id="5142961317498132443">पहचान करना</translation>
 <translation id="5143374789336132547">एक्सटेंशन <ph name="EXTENSION_NAME" /> ने यह बदल दिया है कि जब आप होम बटन क्लिक करते हैं तब कौन सा पेज दिखाया जाए.</translation>
 <translation id="5143712164865402236">फ़ुल स्क्रीन में प्रवेश करें</translation>
+<translation id="5145461783043820456">तीसरे पक्ष की कुकी ब्लॉक करने की सुविधा चालू है</translation>
 <translation id="514575469079499857">जगह तय करने के लिए अपने आईपी पते का इस्तेमाल करें (डिफ़ॉल्ट)</translation>
+<translation id="5146995429444047494"><ph name="ORIGIN" /> के लिए सूचनाओं को ब्लॉक किया गया है</translation>
 <translation id="5150254825601720210">Netscape प्रमाणपत्र SSL सर्वर नाम</translation>
 <translation id="5151354047782775295">डिस्क स्पेस खाली करें अन्यथा चयनित डेटा अपने आप हट जाएगा</translation>
 <translation id="5153234146675181447">फ़ोन को भूल जाएं</translation>
@@ -3033,9 +3053,11 @@
 <translation id="5541694225089836610">आपके एडमिन ने कार्रवाई बंद कर दी है</translation>
 <translation id="5542132724887566711">प्रोफ़ाइल</translation>
 <translation id="5542750926112347543"><ph name="DOMAIN" /> की कुकी ब्लॉक की गई हैं</translation>
+<translation id="5542949973455282971"><ph name="CARRIER_NAME" /> से कनेक्ट हो रहा है</translation>
 <translation id="5543983818738093899">स्थिति की जाँच की जा रही है...</translation>
 <translation id="554517032089923082">GTC</translation>
 <translation id="5546865291508181392">ढूंढें</translation>
+<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" और 1 अन्य टैब}one{"<ph name="TAB_TITLE" />" और # अन्य टैब}other{"<ph name="TAB_TITLE" />" और # अन्य टैब}}</translation>
 <translation id="5551573675707792127">कीबोर्ड और लेख इनपुट</translation>
 <translation id="5553089923092577885">प्रमाणपत्र नीति मानचित्रण</translation>
 <translation id="5554489410841842733">यह आइकॉन तब दिखाई देगा जब एक्सटेंशन मौजूदा पेज पर काम कर सकेगा.</translation>
@@ -3495,7 +3517,6 @@
 <translation id="6212039847102026977">बेहतर नेटवर्क प्रॉपर्टी दिखाएं</translation>
 <translation id="6212168817037875041">डिसप्ले बंद करें</translation>
 <translation id="6212752530110374741">लिंक ईमेल करें</translation>
-<translation id="6214642087594370545">जब आप किसी ऐसे असुरक्षित पासवर्ड का इस्तेमाल करते हैं जो ऑनलाइन डेटा के उल्लंघन के तहत आता है, तो एक चेतावनी दिखाई जाती है. यह सिर्फ़ उन उपभोक्ताओं के लिए उपलब्ध है जिन्होंने साइन इन किया हुआ है.</translation>
 <translation id="6216696360484424239">अपने आप साइन इन करें</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ऑफ़लाइन है. इंटरनेट से कनेक्ट करें और फिर से कोशिश करें.</translation>
 <translation id="6220413761270491930">एक्सटेंशन लोड करने में गड़बड़ी</translation>
@@ -3604,6 +3625,7 @@
 <translation id="6384275966486438344">अपनी खोज सेटिंग इसमें बदलें: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">साइटें कुकी डेटा को सेव सकती हैं और पढ़ सकती हैं</translation>
 <translation id="6386099547750337629">अगर ऐसा नहीं होना चाहिए था, तो कृपया 'सहायता' से संपर्क करें.</translation>
+<translation id="6387674443318562538">वर्टिकल (ऊपर से नीचे की ओर) रूप से छोटे-छोटे हिस्सों में बांटें यानी स्प्लिट करें</translation>
 <translation id="6388429472088318283">खोज की भाषाएं</translation>
 <translation id="6390799748543157332">इस विंडो में आप जो पेज देखते हैं वे ब्राउज़र इतिहास में दिखाई नहीं देंगे और वे आपके खोले गए सभी मेहमान विंडो बंद करने के बाद कंप्यूटर पर कुकी जैसे दूसरे चिह्न नहीं छोड़ेंगे. हालांकि, आपकी डाउनलोड की गई सभी फ़ाइलें सुरक्षित रहेंगी.</translation>
 <translation id="6390994422085833176">सेटअप हो जाने के बाद सिंक करने और मनमुताबिक बनाने की सुविधाएं देखें</translation>
@@ -3637,6 +3659,7 @@
 <translation id="6419546358665792306">पैक नहीं किया गया एक्सटेंशन लोड करें</translation>
 <translation id="642469772702851743">इस डिवाइस (क्रमांक: <ph name="SERIAL_NUMBER" />) को मालिक ने लॉक कर दिया था.</translation>
 <translation id="6426200009596957090">ChromeVox सेटिंग खोलें</translation>
+<translation id="6428450836711225518">अपने फ़ोन नंबर की पुष्टि करें</translation>
 <translation id="6429384232893414837">अपडेट में गड़बड़ी</translation>
 <translation id="6430814529589430811">Base64 में एन्कोड किया गया ASCII, सिर्फ़ एक प्रमाणपत्र</translation>
 <translation id="6431347207794742960"><ph name="PRODUCT_NAME" /> इस कंप्यूटर के सभी उपयोगकर्ताओं के लिए स्वचालित अपडेट सेट करेगा.</translation>
@@ -3859,6 +3882,7 @@
 <translation id="6786747875388722282">एक्‍सटेंशन</translation>
 <translation id="6787839852456839824">कीबोर्ड शॉर्टकट</translation>
 <translation id="6788210894632713004">पैक नहीं किया गया एक्सटेंशन</translation>
+<translation id="6789592661892473991">हाॅरिज़ॉन्टल (बाईं से दाईं ओर) रूप से छोटे-छोटे हिस्सों में बांटें यानी स्प्लिट करें</translation>
 <translation id="6790428901817661496">चलाएं</translation>
 <translation id="6790497603648687708"><ph name="EXTENSION_NAME" /> को दूरस्थ रूप से जोड़ा गया है</translation>
 <translation id="6790820461102226165">व्‍यक्ति जोड़ें...</translation>
@@ -4240,6 +4264,7 @@
 <translation id="7334190995941642545">Smart Lock वर्तमान में अनुपलब्‍ध है. कृपया बाद में फिर से प्रयास करें.</translation>
 <translation id="7334274148831027933">सामग्री को बड़ा दिखाने की डॉक की गई सुविधा चालू करें</translation>
 <translation id="7335974957018254119">इसके लिए वर्तनी जांचने वाली सुविधा का इस्तेमाल करें</translation>
+<translation id="7336799713063880535">सूचनाएं ब्लॉक हैं.</translation>
 <translation id="7338630283264858612">डिवाइस क्रमांक गलत है.</translation>
 <translation id="7339763383339757376">PKCS #7, एकल प्रमाणपत्र</translation>
 <translation id="7339785458027436441">लिखते समय वर्तनी की जाँच करें</translation>
@@ -4352,6 +4377,7 @@
 <translation id="7506541170099744506">आपका <ph name="DEVICE_TYPE" /> एंटरप्राइज़ प्रबंधन के लिए सफलतापूर्वक नामांकित हो गया है.</translation>
 <translation id="7507930499305566459">स्थिति प्रतिसादी प्रमाणपत्र</translation>
 <translation id="7508054832109420082">प्रिंटर के लिए ऐक्सेस दें</translation>
+<translation id="7510943789645525906">अगर आपने ऐसा पासवर्ड डाला है जो डेटा के उल्लंघन के तहत आता है, तो आपको चेतावनी मिलती है</translation>
 <translation id="7513029293694390567">स्टोर किए गए क्रेडेंशियल के ज़रिए वेबसाइट में अपने आप साइन इन करें. बंद होने पर, आपसे किसी वेबसाइट में साइन इन करने से पहले हर बार पुष्टि करने के लिए कहा जाएगा.</translation>
 <translation id="7514365320538308">डाउनलोड करें</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4417,6 +4443,7 @@
 <translation id="7625568159987162309">सभी साइटों की अनुमतियां और साइटों पर स्टोर डेटा देखें</translation>
 <translation id="7629827748548208700">टैब: <ph name="TAB_NAME" /></translation>
 <translation id="7631014249255418691">Linux ऐप्लिकेशन और फ़ाइलों का बैकअप ले लिया गया है</translation>
+<translation id="7631205654593498032">जब आप अपने डिवाइस कनेक्ट करते हैं, तो आप सहमति देते हैं कि आपका <ph name="DEVICE_TYPE" /> ये काम कर सकता है:</translation>
 <translation id="7631887513477658702">इस प्रकार की फ़ाइलें &amp;हमेशा खोलें</translation>
 <translation id="7632948528260659758">निम्‍न किऑस्क&amp;#0; ऐप्‍स अपडेट होने में विफल रहे:</translation>
 <translation id="763632859238619983">किसी भी साइट को भुगतान हैंडलर इंस्टॉल करने की अनुमति नहीं दें</translation>
@@ -4578,6 +4605,7 @@
     <ph name="BR" />
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />नोट:<ph name="END_BOLD" />  इस प्रक्रिया के दौरान सिस्टम फिर चालू होगा.</translation>
+<translation id="7828731929332799387">इससे तीसरे पक्ष से जुड़ी सभी उपलब्ध कुकी और साइट डेटा मिट जाएंगे. क्या आप जारी रखना चाहते हैं?</translation>
 <translation id="7829298379596169484">ऑडियो इनपुट ऐक्सेस हो रहा है</translation>
 <translation id="7830594666202422257">Linux से कनेक्ट करें</translation>
 <translation id="7831491651892296503">नेटवर्क कॉन्फ़िगर करने में गड़बड़ी</translation>
@@ -4782,6 +4810,7 @@
 <translation id="810875025413331850">आस-पास का कोई ब्लूटूथ डिवाइस नहीं मिला.</translation>
 <translation id="8111155949205007504">इस पासवर्ड को अपने iPhone से शेयर करें</translation>
 <translation id="8113043281354018522">लाइसेंस का प्रकार चुनें</translation>
+<translation id="8114875720387900039">हाॅरिज़ॉन्टल (बाईं से दाईं ओर) रूप से छोटे-छोटे हिस्सों में बांटें यानी स्प्लिट करें</translation>
 <translation id="8116972784401310538">&amp;बुकमार्क प्रबंधक</translation>
 <translation id="8117620576188476503">स्टेटस ट्रे के ज़रिए कनेक्शन, अपडेट और सेटिंग प्रबंधित करें. कीबोर्ड से यहां पहुंचने के लिए, Alt + Shift + S दबाएं.</translation>
 <translation id="8118076340394175570">आपके संगठन को इस डिवाइस के अपडेट की ज़रूरत है</translation>
@@ -4973,6 +5002,7 @@
 <translation id="839736845446313156">रजिस्टर करें</translation>
 <translation id="8398877366907290961">फिर भी आगे बढ़ें</translation>
 <translation id="8400146488506985033">लोगों को प्रबंधित करें</translation>
+<translation id="8401432541486058167">ऐसा पिन डालें जो आपके स्मार्ट कार्ड से जुड़ा हुआ हो.</translation>
 <translation id="8405046151008197676">हाल ही के अपडेट की खास बातें जानें</translation>
 <translation id="8410775397654368139">Google Play</translation>
 <translation id="8413385045638830869">पहले पूछें (सुझाया गया)</translation>
@@ -5198,10 +5228,12 @@
 <translation id="8732212173949624846">अपने प्रवेश किए हुए सभी डिवाइस पर अपना ब्राउज़िंग इतिहास पढ़ें और बदलें</translation>
 <translation id="8732844209475700754">निजता, सुरक्षा, और डेटा इकट्ठा करने से जुड़ी ज़्यादा सेटिंग</translation>
 <translation id="8734073480934656039">इस सेटिंग को सक्षम करने से किओस्क ऐप्लिकेशन स्टार्टअप पर अपने आप लॉन्च हो जाते हैं.</translation>
+<translation id="8734674662128056360">तीसरे पक्ष की कुकी ब्लॉक करने की सुविधा</translation>
 <translation id="873545264931343897">जब <ph name="PLUGIN_NAME" /> अपडेट करना पूरा कर ले, तो उसे चालू करने के लिए पेज को फिर से लोड करें</translation>
 <translation id="8736288397686080465">इस साइट को पृष्‍ठभूमि में अपडेट किया गया है.</translation>
 <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> के बजाय <ph name="PROTOCOL" /> लिंक खोलें</translation>
 <translation id="8737709691285775803">Shill</translation>
+<translation id="8742371904523228557"><ph name="ORIGIN" /> के लिए आपका कोड <ph name="ONE_TIME_CODE" /> है</translation>
 <translation id="8743390665131937741">फ़ुलस्क्रीन ज़ूम स्तर:</translation>
 <translation id="8743864605301774756">1 घंटे पहले अपडेट किया गया</translation>
 <translation id="874689135111202667">{0,plural, =1{इस साइट पर एक फ़ाइल अपलोड करें?}one{इस साइट पर # फ़ाइलें अपलोड करें?}other{इस साइट पर # फ़ाइलें अपलोड करें?}}</translation>
@@ -5274,6 +5306,7 @@
 <translation id="8828933418460119530">DNS नाम</translation>
 <translation id="883062543841130884">विकल्प</translation>
 <translation id="8830796635868321089">वर्तमान प्रॉक्सी सेटिंग के उपयोग से अपडेट जाँच पूरी नहीं हो सकी. कृपया अपनी <ph name="PROXY_SETTINGS_LINK_START" />प्रॉक्सी सेटिंग<ph name="PROXY_SETTINGS_LINK_END" /> में बदलाव करें.</translation>
+<translation id="8831140208248705279">आपका <ph name="DEVICE_TYPE" /> और Android फ़ोन एक साथ बेहतर ढंग से काम करते हैं. उन्हें कनेक्ट करें ताकि आप अपने कंप्यूटर से टेक्स्ट कर सकें, अपने फ़ोन का इंटरनेट कनेक्शन शेयर कर सकें, और अपने फ़ोन से <ph name="DEVICE_TYPE" /> की स्क्रीन अनलॉक कर सकें.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">एक्सटेंशन सेटिंग खोलें</translation>
 <translation id="8834039744648160717">नेटवर्क कॉन्फ़िगरेशन को <ph name="USER_EMAIL" /> नियंत्रित करता है.</translation>
 <translation id="8838770651474809439">हैमबर्गर</translation>
@@ -5305,6 +5338,7 @@
 <translation id="8877448029301136595">[मूल निर्देशिका]</translation>
 <translation id="8879284080359814990">टैब के रूप में &amp;दिखाएं</translation>
 <translation id="8879921471468674457">साइन इन की जानकारी याद रखें</translation>
+<translation id="8881020143150461183">कृपया फिर से कोशिश करें. तकनीकी सहायता के लिए <ph name="CARRIER_NAME" /> से संपर्क करें.</translation>
 <translation id="8884570509232205463">आपका डिवाइस अब <ph name="UNLOCK_TIME" /> बजे अनलॉक होगा.</translation>
 <translation id="8885197664446363138">Smart Lock अनुपलब्‍ध है</translation>
 <translation id="8888253246822647887">अपग्रेड पूरा होने पर आपका ऐप्लिकेशन खुल जाएगा. अपग्रेड में कुछ समय लग सकता है.</translation>
@@ -5355,6 +5389,7 @@
 <translation id="894871326938397531">गुप्त मोड छोड़ें?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> आपकी सुरक्षा कुंजी के निर्माता और मॉडल को देखना चाहती है</translation>
 <translation id="8951256747718668828">गड़बड़ी की वजह से इंपोर्ट पूरा नहीं किया जा सका</translation>
+<translation id="8951465597020890363">क्या आप मेहमान मोड से बाहर निकलना चाहते हैं?</translation>
 <translation id="8952831374766033534">कॉन्फ़िगर करने का विकल्प काम नहीं करता: <ph name="ERROR_LINE" /></translation>
 <translation id="895347679606913382">प्रारंभ कर रहा है...</translation>
 <translation id="8956941634583033512">{0,plural, =1{एक दिन में अपडेट करें}one{# दिन में अपडेट करें}other{# दिन में अपडेट करें}}</translation>
@@ -5370,6 +5405,7 @@
 <translation id="8973596347849323817">आप इस डिवाइस में अपनी ज़रूरतों के हिसाब से पसंद के मुताबिक बना सकते हैं. ये सुलभता सुविधाएं बाद में सेटिंग में बदली जा सकती हैं.</translation>
 <translation id="897414447285476047">कनेक्शन में समस्या आने के कारण गंतव्य फ़ाइल अधूरी रह गई थी.</translation>
 <translation id="897525204902889653">क्‍वारंटाइन सेवा</translation>
+<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" और 1 अन्य टैब}one{"<ph name="TAB_TITLE" />" और # अन्य टैब}other{"<ph name="TAB_TITLE" />" और # अन्य टैब}}</translation>
 <translation id="8976520271376534479">इस पेज पर फ़्लैश ब्लॉक कर दिया गया था.</translation>
 <translation id="8977811652087512276">गलत पासवर्ड या खराब फ़ाइल</translation>
 <translation id="8978154919215542464">चालू - सब कुछ सिंक करें</translation>
@@ -5459,6 +5495,7 @@
 <translation id="9103868373786083162">वापस जाने के लिए इसे दबाएं, इतिहास देखने के लिए संदर्भ मेन्यू पर जाएं</translation>
 <translation id="9104396740804929809">इस्तेमाल और निदान से जुड़ा डेटा भेजें. Google को निदान, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने आप भेजकर, अपने Android अनुभव को बेहतर बनाने में मदद करें. यह सिस्टम और ऐप्लिकेशन की स्थिरता और दूसरे सुधारों में मदद करेगा. कुछ एग्रीगेट डेटा Google ऐप्लिकेशन और पार्टनर, जैसे कि Android डेवलपरों की भी मदद करेगा. यह सेटिंग डिवाइस के मालिक ने लागू की है. डिवाइस का मालिक यह चुन सकता है कि निदान और इस डिवाइस के इस्तेमाल से जुड़ा डेटा Google को भेजना है. अगर आपकी दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा आपके Google खाते में सेव किया जा सकता है. <ph name="BEGIN_LINK1" />ज़्यादा जानें<ph name="END_LINK1" /></translation>
 <translation id="9109122242323516435">जगह खाली करने के लिए, डिवाइस की मेमोरी से फ़ाइलों को मिटाएं.</translation>
+<translation id="9109283579179481106">मोबाइल नेटवर्क से कनेक्ट करें</translation>
 <translation id="9111102763498581341">अनलॉक करें</translation>
 <translation id="9111395131601239814"><ph name="NETWORKDEVICE" />: <ph name="STATUS" /></translation>
 <translation id="9112748030372401671">अपना वॉलपेपर बदलें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 61da4a5..cec53c9 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -302,7 +302,7 @@
 <translation id="1444628761356461360">Ovom postavkom upravlja vlasnik uređaja, <ph name="OWNER_EMAIL" />.</translation>
 <translation id="144518587530125858">Nije uspjelo učitavanje putanje "<ph name="IMAGE_PATH" />" za temu.</translation>
 <translation id="1445693676523799095">To može potrajati neko vrijeme</translation>
-<translation id="1450011005989029586">Vaša je zaporka ugrožena zbog povrede podataka na web-lokaciji ili u aplikaciji koju koristite. Chrome odmah preporučuje <ph name="BOLD" /> na <ph name="ORIGIN" />.</translation>
+<translation id="1450011005989029586">Vaša je zaporka ugrožena zbog povrede podataka na web-lokaciji ili u aplikaciji koju koristite. Chrome preporučuje da odmah <ph name="BOLD" /> na <ph name="ORIGIN" />.</translation>
 <translation id="1451375123200651445">Web-stranica, jedna datoteka</translation>
 <translation id="1451917004835509682">Dodaj nadziranog korisnika</translation>
 <translation id="1454223536435069390">I&amp;zradi snimku zaslona</translation>
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Samo trenutačna anonimna sesija</translation>
 <translation id="1698650002254827833">Učitavanje popisa aplikacija nije uspjelo. Pokušajte ponovo.</translation>
 <translation id="1701062906490865540">Ukloni ovu osobu</translation>
+<translation id="1703331064825191675">Ne morate se brinuti za svoje zaporke</translation>
 <translation id="1706586824377653884">Dodao vaš administrator</translation>
 <translation id="1706625117072057435">Razine zumiranja</translation>
 <translation id="1708338024780164500">(Neaktivno)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Novi prozor</translation>
 <translation id="1766575458646819543">Zatvorili ste prikaz preko cijelog zaslona</translation>
+<translation id="1766957085594317166">Na siguran način spremite zaporke na svoj Google račun i nikada ih više nećete morati upisivati</translation>
 <translation id="1768278914020124551">Ups! Pojavio se problem s kontaktiranjem poslužitelja za prijavu. Provjerite mrežnu vezu i naziv domene, a zatim pokušajte ponovo.</translation>
 <translation id="1769104665586091481">Otvori vezu u novom &amp;prozoru</translation>
 <translation id="1773212559869067373">Certifikat za autentifikaciju odbijen je lokalno</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Nije povezano</translation>
 <translation id="3752582316358263300">U redu...</translation>
 <translation id="3752673729237782832">Moji uređaji</translation>
+<translation id="3753033997400164841">Pohranite jedanput. Upotrebljavajte svugdje</translation>
 <translation id="3755411799582650620">Vaš <ph name="PHONE_NAME" /> sada može otključati i taj <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Web-lokacija upotrebljava vaš mikrofon</translation>
 <translation id="3757733214359997190">Nijedna web-lokacija nije pronađena</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Uvijek otvori u pregledniku sustava</translation>
 <translation id="4146785383423576110">Vrati na zadano i očisti</translation>
 <translation id="4147911968024186208">Pokušajte ponovo. Ako se pogreška ponovi, obratite se predstavniku podrške.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Zaslon</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 kartica}one{# kartica}few{# kartice}other{# kartica}}</translation>
 <translation id="4154664944169082762">Otisci prstiju</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Konfigurirajte Kerberos</translation>
 <translation id="4235200303672858594">Cijeli zaslon</translation>
 <translation id="4235965441080806197">Otkaži prijavu</translation>
+<translation id="4242145785130247982">Nije podržano više certifikata klijenta</translation>
 <translation id="4242533952199664413">Otvori postavke</translation>
 <translation id="4242577469625748426">Instalacija postavki pravila nije uspjela na uređaju: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Pronađite više aplikacija pisaljke</translation>
@@ -2230,7 +2233,7 @@
 <translation id="4267953847983678297">Automatski se poveži s mobilnom mrežom</translation>
 <translation id="4268025649754414643">Šifriranje ključa</translation>
 <translation id="4270393598798225102">Verzija <ph name="NUMBER" /></translation>
-<translation id="4270615291506829403">promjenu zaporke</translation>
+<translation id="4270615291506829403">promijenite zaporku</translation>
 <translation id="4275663329226226506">Mediji</translation>
 <translation id="4275830172053184480">Ponovo pokrenite svoj uređaj</translation>
 <translation id="4278101229438943600">Vaš je Asistent spreman</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Omogući samo značajke vezane uz <ph name="IDS_SHORT_PRODUCT_NAME" /> sinkronizaciju</translation>
 <translation id="4959262764292427323">Zaporke se spremaju na vaš Google račun kako biste ih mogli upotrebljavati na bilo kojem uređaju</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Aplikaciju je instalirao vaš administrator.</translation>
 <translation id="4964455510556214366">Poredak</translation>
 <translation id="4964673849688379040">Provjera u tijeku...</translation>
 <translation id="4965808351167763748">Jeste li sigurni da želite postaviti ovaj uređaj za pokretanje Hangouts Meeta?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Prikaži na alatnoj traci</translation>
 <translation id="5362741141255528695">Odaberite datoteku s osobnim ključem.</translation>
 <translation id="5363109466694494651">Powerwash i vraćanje u prethodno stanje</translation>
+<translation id="5365716706805792666">Google može provjeriti jesu li vaše zaporke bile obuhvaćene povredom podataka. To će se uključiti kada se prijavite na svoj Google račun.</translation>
 <translation id="5365881113273618889">Mapa koju ste odabrali sadrži osjetljive datoteke. Jeste li sigurni da želite dodijeliti aplikaciji "<ph name="APP_NAME" />" trajni pristup za zapisivanje za tu mapu?</translation>
 <translation id="5367091008316207019">Čitanje datoteke...</translation>
 <translation id="5368720394188453070">Vaš je telefon zaključan. Otključajte ga da biste mu pristupili.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Prikaži napredna svojstva mreže</translation>
 <translation id="6212168817037875041">Isključi zaslon</translation>
 <translation id="6212752530110374741">Vezu pošalji e-poštom</translation>
-<translation id="6214642087594370545">Prilikom upotrebe nesigurne zaporke koja je bila otkrivena tijekom povrede podataka prikazuje se upozorenje. To je dostupno samo prijavljenim korisnicima.</translation>
 <translation id="6216696360484424239">Automatska prijava</translation>
 <translation id="6218058416316985984">Uređaj <ph name="DEVICE_TYPE" /> nije povezan s internetom. Povežite se s internetom i pokušajte ponovo.</translation>
 <translation id="6220413761270491930">Pogreška prilikom učitavanja proširenja</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Dodavanje pisača...</translation>
 <translation id="6770664076092644100">Potvrda putem NFC-a</translation>
 <translation id="6771503742377376720">jest tijelo za izdavanje certifikata</translation>
+<translation id="6775163072363532304">Ovdje će se pojaviti dostupni uređaji.</translation>
 <translation id="6777817260680419853">Preusmjeravanje je blokirano</translation>
 <translation id="6778737459546443941">Roditelj je još nije odobrio</translation>
 <translation id="677965093459947883">Vrlo mali</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Ostali korisnici</translation>
 <translation id="7442465037756169001">Hangouts Meet hardware spreman je za postavljanje.</translation>
 <translation id="744341768939279100">Izradi novi profil</translation>
+<translation id="7443806024147773267">Pristupite svojim zaporkama kad god ste prijavljeni u svoj Google račun</translation>
 <translation id="7444046173054089907">Ova je web-lokacija blokirana</translation>
 <translation id="7444983668544353857">Onemogući <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automatsko instaliranje aplikacija</translation>
@@ -4380,7 +4386,7 @@
 <translation id="7506541170099744506">Vaš je <ph name="DEVICE_TYPE" /> uređaj uspješno registriran za poslovno upravljanje.</translation>
 <translation id="7507930499305566459">Certifikat odgovora statusa</translation>
 <translation id="7508054832109420082">Pruža pristup pisačima</translation>
-<translation id="7510943789645525906">Upozorava ako je zaporka koju upotrebljavate bila obuhvaćena povredom podataka</translation>
+<translation id="7510943789645525906">Upozorava ako je zaporka koju upotrebljavate ugrožena zbog povrede podataka</translation>
 <translation id="7513029293694390567">Automatski se prijavite na web-lokacije pomoću spremljenih vjerodajnica. Ako je ta značajka onemogućena, tražit će se potvrda prije svakog prijavljivanja na web-lokaciju.</translation>
 <translation id="7514365320538308">Preuzmi</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4609,7 +4615,7 @@
     <ph name="BR" />
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" /> sustav će se ponovo pokrenuti tijekom postupka.</translation>
-<translation id="7828731929332799387">Time će se izbrisati svi kolačići i podaci o web-lokaciji dostupni u kontekstima treće strane. Želite li nastaviti?</translation>
+<translation id="7828731929332799387">Time će se izbrisati svi kolačići i podaci o web-lokaciji treće strane. Želite li nastaviti?</translation>
 <translation id="7829298379596169484">Pristupanje audioulazu</translation>
 <translation id="7830594666202422257">Poveži s Linuxom</translation>
 <translation id="7831491651892296503">Pogreška prilikom konfiguriranja mreže</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">U tijeku je izvođenje alata za ažuriranje. Osvježite za minutu i provjerite ponovo.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može vratiti prethodno instaliranu verziju. Pokušajte ponovo pokrenuti Powerwash na svom uređaju.</translation>
 <translation id="8014210335923519270">Poboljšajte <ph name="IDS_SHORT_PRODUCT_NAME" /> i njegovu sigurnost slanjem podataka o sustavu i upotrebi Googleu</translation>
+<translation id="8015780634880457457">Google može provjeriti jesu li vaše zaporke bile obuhvaćene povredom podataka</translation>
 <translation id="8016266267177410919">Privremena pohrana</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Prečac je uređen</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Pregledajte postavke uređaja i uključite ga da biste nastavili</translation>
 <translation id="8190193592390505034">Povezivanje s mrežom <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">upravljati vašim aplikacijama, proširenjima i temama</translation>
+<translation id="819464600477418284">Aplikacija se ne može deinstalirati jer je dio OS-a Chrome.</translation>
 <translation id="8195027750202970175">Veličina na disku</translation>
 <translation id="8198323535106903877">Instalirat ćemo te aplikacije za vas (njih <ph name="NUMBER_OF_APPS" />)</translation>
 <translation id="8199300056570174101">Svojstva mreže (usluge) i uređaja</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Isključivanje te značajke ne utječe na mogućnost uređaja da šalje informacije koje su potrebne za ključne usluge kao što su ažuriranja sustava i sigurnost.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Vlasnik može upravljati tom značajkom putem Postavki &gt; Napredno &gt; Automatsko slanje dijagnostike i podataka o upotrebi Googleu.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Ako je uključena dodatna postavka Aktivnost na webu i u aplikacijama, ti se podaci mogu spremati na vaš Google račun. Svoje podatke možete pregledati, izbrisati ih i promijeniti na stranici families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Nevažeći certifikat klijenta</translation>
 <translation id="8270242299912238708">PDF dokumenti</translation>
 <translation id="827097179112817503">Prikaži gumb početne stranice</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Izbrisana je 1 oznaka}one{Izbrisana je # oznaka}few{Izbrisane su # oznake}other{Izbrisano je # oznaka}}</translation>
@@ -5006,7 +5015,7 @@
 <translation id="839736845446313156">Prijava</translation>
 <translation id="8398877366907290961">Svejedno nastavi</translation>
 <translation id="8400146488506985033">Upravljaj korisnicima</translation>
-<translation id="8401432541486058167">Navedite PIN koji je povezan s vašom pametnom karticom.</translation>
+<translation id="8401432541486058167">Unesite PIN za pametnu karticu.</translation>
 <translation id="8405046151008197676">Primite najzanimljivije dijelove najnovijeg ažuriranja</translation>
 <translation id="8410775397654368139">Google Play</translation>
 <translation id="8413385045638830869">Prvo pitaj (preporučeno)</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Niste povezani</translation>
 <translation id="8876307312329369159">Ta se postavka ne može promijeniti u demo sesiji.</translation>
 <translation id="8877448029301136595">[matični direktorij]</translation>
+<translation id="8879220587046205278">Aplikacije iz Google Playa mogu zatražiti potpuni pristup sustavu datoteka radi čitanja i zapisivanja datoteka na vanjskim uređajima za pohranu. Datoteke i mape izrađene na uređaju vidljive su svima koji upotrebljavaju vanjski disk.</translation>
 <translation id="8879284080359814990">&amp;Prikaži kao karticu</translation>
 <translation id="8879921471468674457">Zapamti podatke za prijavu</translation>
 <translation id="8881020143150461183">Pokušajte ponovo. Za tehničku podršku kontaktirajte <ph name="CARRIER_NAME" />.</translation>
@@ -5393,7 +5403,7 @@
 <translation id="894871326938397531">Želite li napustiti anonimno?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> želi vidjeti marku i model vašeg sigurnosnog ključa</translation>
 <translation id="8951256747718668828">Vraćanje se ne može dovršiti zbog pogreške.</translation>
-<translation id="8951465597020890363">Svejedno izaći iz načina rada za goste?</translation>
+<translation id="8951465597020890363">Svejedno želite zatvoriti način rada za goste?</translation>
 <translation id="8952831374766033534">Opcija konfiguracije nije podržana: <ph name="ERROR_LINE" /></translation>
 <translation id="895347679606913382">Početak...</translation>
 <translation id="8956941634583033512">{0,plural, =1{Ažuriraj u roku od jednog dana}one{Ažuriraj u roku od # d}few{Ažuriraj u roku od # d}other{Ažuriraj u roku od # d}}</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index bc08e9c..4cf2dc7 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Csak a jelenlegi inkognitó munkamenet</translation>
 <translation id="1698650002254827833">Nem sikerült az alkalmazáslista betöltése. Próbálja újra.</translation>
 <translation id="1701062906490865540">Személy eltávolítása</translation>
+<translation id="1703331064825191675">Sosem kell aggódnia jelszavai miatt</translation>
 <translation id="1706586824377653884">A rendszergazda által hozzáadva</translation>
 <translation id="1706625117072057435">Nagyítási/kicsinyítési szintek</translation>
 <translation id="1708338024780164500">(Inaktív)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">béta</translation>
 <translation id="176587472219019965">Új &amp;ablak</translation>
 <translation id="1766575458646819543">Kilépett a teljes képernyős módból</translation>
+<translation id="1766957085594317166">Jelszavait biztonságosan tárolhatja Google-fiókjában, és soha többé nem kell majd újra begépelnie őket</translation>
 <translation id="1768278914020124551">Hoppá! Valami hiba történt a bejelentkezési szerver elérése során. Ellenőrizze a hálózati kapcsolatot és a domainnevet, majd próbálja újra.</translation>
 <translation id="1769104665586091481">Link megnyitása új &amp;ablakban</translation>
 <translation id="1773212559869067373">A hitelesítési tanúsítvány helyileg elutasítva</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Nincs kapcsolódva</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Saját eszközök</translation>
+<translation id="3753033997400164841">Elég egyszer menteni, utána bárhol használhatja</translation>
 <translation id="3755411799582650620">Az Ön <ph name="PHONE_NAME" /> eszköze most már a(z) <ph name="DEVICE_TYPE" /> lezárását is fel tudja oldani.</translation>
 <translation id="375636864092143889">A webhely használja a mikrofonját</translation>
 <translation id="3757733214359997190">A program nem talált egy webhelyet sem</translation>
@@ -2166,7 +2169,6 @@
 <translation id="4146026355784316281">Megnyitás mindig a rendszer megtekintőjével</translation>
 <translation id="4146785383423576110">Visszaállítás és megtisztítás</translation>
 <translation id="4147911968024186208">Próbálja újra. Ha ismét ezt a hibaüzenetet látja, forduljon helyi ügyfélszolgálati képviselőjéhez.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Megjelenítés</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 lap}other{# lap}}</translation>
 <translation id="4154664944169082762">Ujjlenyomatok</translation>
@@ -2207,6 +2209,7 @@
 <translation id="4232375817808480934">A Kerberos konfigurálása</translation>
 <translation id="4235200303672858594">Teljes képernyő</translation>
 <translation id="4235965441080806197">Bejelentkezés megszakítása</translation>
+<translation id="4242145785130247982">Több ügyféltanúsítvány sem támogatott</translation>
 <translation id="4242533952199664413">Beállítások megnyitása</translation>
 <translation id="4242577469625748426">Az irányelv-beállítások telepítése az eszközre sikertelen: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">További érintőceruza-alkalmazások keresése</translation>
@@ -2665,6 +2668,7 @@
 <translation id="4957949153200969297">Kizárólag a következő szolgáltatással kapcsolatos funkciókat engedélyezze: <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">A jelszavakat Google-fiókjába mentjük, hogy bármelyik eszközén használhassa őket</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Ezt az alkalmazást az Ön adminisztrátora telepítette.</translation>
 <translation id="4964455510556214366">Elrendezés</translation>
 <translation id="4964673849688379040">Ellenőrzés…</translation>
 <translation id="4965808351167763748">Biztosan beállítja ezt az eszközt a Hangouts Meet futtatására?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Megjelenítés az eszköztáron</translation>
 <translation id="5362741141255528695">Válasszon ki privátkulcs-fájlt.</translation>
 <translation id="5363109466694494651">Powerwash művelet és visszaállítás</translation>
+<translation id="5365716706805792666">A Google ellenőrizheti, hogy érintik-e adatvédelmi incidensek az Ön jelszavait. Ez a funkció akkor kapcsol be, amikor bejelentkezik Google-fiókjával.</translation>
 <translation id="5365881113273618889">A kiválasztott mappa bizalmas fájlokat tartalmaz. Biztosan állandó írási hozzáférést szeretne adni a(z) „<ph name="APP_NAME" />” alkalmazásnak a mappához?</translation>
 <translation id="5367091008316207019">Fájl olvasása..</translation>
 <translation id="5368720394188453070">A telefon zárolva van. Oldja fel a belépéshez.</translation>
@@ -3520,7 +3525,6 @@
 <translation id="6212039847102026977">Speciális hálózati tulajdonságok megjelenítése</translation>
 <translation id="6212168817037875041">A kijelző kikapcsol</translation>
 <translation id="6212752530110374741">Link küldése e-mailben</translation>
-<translation id="6214642087594370545">Figyelmeztetés jelenik meg, ha olyan nem biztonságos jelszót használ, amely adatvédelmi incidensben volt érintett. A funkció csak bejelentkezett felhasználók számára áll rendelkezésre.</translation>
 <translation id="6216696360484424239">Automatikus bejelentkezés</translation>
 <translation id="6218058416316985984">A(z) <ph name="DEVICE_TYPE" /> offline. Csatlakozzon az internethez, és próbálja újra.</translation>
 <translation id="6220413761270491930">Hiba a bővítmény betöltésekor</translation>
@@ -3877,6 +3881,7 @@
 <translation id="6769712124046837540">Nyomtató hozzáadása...</translation>
 <translation id="6770664076092644100">Igazolás NFC-n keresztül</translation>
 <translation id="6771503742377376720">Tanúsítványkibocsátó</translation>
+<translation id="6775163072363532304">A hozzáférhető eszközök itt jelennek meg.</translation>
 <translation id="6777817260680419853">Átirányítás letiltva</translation>
 <translation id="6778737459546443941">A szülő még nem hagyta jóvá</translation>
 <translation id="677965093459947883">Nagyon kicsi</translation>
@@ -4337,6 +4342,7 @@
 <translation id="7441830548568730290">Más felhasználók</translation>
 <translation id="7442465037756169001">A Hangouts Meet-hardver készen áll a beállításra.</translation>
 <translation id="744341768939279100">Új profil létrehozása</translation>
+<translation id="7443806024147773267">Bármikor hozzáférhet jelszavaihoz, ha be van jelentkezve Google-fiókjába.</translation>
 <translation id="7444046173054089907">Ez a webhely le van tiltva</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> kikapcsolása</translation>
 <translation id="7448430327655618736">Alkalmazások automatikus telepítése</translation>
@@ -4750,6 +4756,7 @@
 <translation id="8014154204619229810">A frissítő most fut. Frissítsen egy perc múlva, és ellenőrizze az állapotát.</translation>
 <translation id="8014206674403687691">Nem sikerült visszatérni a(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> korábban telepített verziójához. Kérjük, próbálja meg újra eszközén végrehajtani a Powerwash műveletet.</translation>
 <translation id="8014210335923519270">A rendszer- és használati adatok Google-nak való elküldésével hozzájárulhat <ph name="IDS_SHORT_PRODUCT_NAME" /> szolgáltatásunk fejlesztéséhez és a szolgáltatás biztonságának javításához</translation>
+<translation id="8015780634880457457">A Google ellenőrizheti, hogy érintik-e adatvédelmi incidensek az Ön jelszavait</translation>
 <translation id="8016266267177410919">Ideiglenes tárhely</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Billentyűparancs szerkesztve</translation>
@@ -4868,6 +4875,7 @@
 <translation id="8188389033983459049">Ellenőrizze eszköze beállításait, és kapcsolja be a folytatáshoz</translation>
 <translation id="8190193592390505034">Csatlakozás a következő hálózathoz: <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Alkalmazások, bővítmények és témák kezelése</translation>
+<translation id="819464600477418284">Ezt az alkalmazást nem lehet eltávolítani, mert a Chrome OS része.</translation>
 <translation id="8195027750202970175">Lemezen elfoglalt méret</translation>
 <translation id="8198323535106903877">Telepítjük Önnek ezt a(z) <ph name="NUMBER_OF_APPS" /> alkalmazást</translation>
 <translation id="8199300056570174101">Hálózati (szolgáltatási) és eszköztulajdonságok</translation>
@@ -4928,6 +4936,7 @@
     <ph name="BEGIN_PARAGRAPH2" />A funkció kikapcsolása nem korlátozza az eszközt abban, hogy elküldje az alapvető fontosságú szolgáltatásokkal (pl. a rendszerfrissítésekkel és -biztonsággal) kapcsolatos információkat.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />A tulajdonos a következő menüben módosíthatja ezt a funkciót: Beállítások &gt; Speciális &gt; Diagnosztikai és használati adatok automatikus elküldése a Google-nak.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Ha a további internetes és alkalmazástevékenységek beállítás is be van kapcsolva, akkor a rendszer ezeket az adatokat gyermeke Google-fiókjába is mentheti. A families.google.com oldalon talál további információt ezekről a beállításokról és módosításukról.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Érvénytelen ügyféltanúsítvány</translation>
 <translation id="8270242299912238708">PDF-dokumentumok</translation>
 <translation id="827097179112817503">A „kezdőoldal” gomb megjelenítése</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 könyvjelző törölve}other{# könyvjelző törölve}}</translation>
@@ -5341,6 +5350,7 @@
 <translation id="8874184842967597500">Nincs csatlakozva</translation>
 <translation id="8876307312329369159">Ezt a beállítást nem lehet módosítani demó munkamenetben.</translation>
 <translation id="8877448029301136595">[szülőkönyvtár]</translation>
+<translation id="8879220587046205278">Előfordulhat, hogy a Google Playről származó alkalmazások teljes fájlrendszeri hozzáférést kérnek, hogy olvashassák és módosíthassák a külső tárolóeszközökön lévő fájlokat. Az eszközön létrehozott fájlok és mappák minden olyan személy számára láthatók, aki a külső meghajtót használja.</translation>
 <translation id="8879284080359814990">Megjeleníté&amp;s lapként</translation>
 <translation id="8879921471468674457">Bejelentkezési adatok megjegyzése</translation>
 <translation id="8881020143150461183">Próbálja újra. Műszaki támogatásért forduljon a(z) <ph name="CARRIER_NAME" /> szolgáltatóhoz.</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 6d173a5..a2432199 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -2165,7 +2165,6 @@
 <translation id="4146026355784316281">Selalu Buka Dengan Penampil Sistem</translation>
 <translation id="4146785383423576110">Setel ulang dan bersihkan</translation>
 <translation id="4147911968024186208">Harap coba lagi. Jika Anda melihat error ini lagi, hubungi perwakilan dukungan Anda.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Tampilan</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="4154664944169082762">Sidik jari</translation>
@@ -3517,7 +3516,6 @@
 <translation id="6212039847102026977">Tampilkan properti jaringan lanjutan</translation>
 <translation id="6212168817037875041">Matikan layar</translation>
 <translation id="6212752530110374741">Email Link</translation>
-<translation id="6214642087594370545">Menampilkan peringatan ketika Anda menggunakan sandi tidak aman yang pernah bocor saat terjadi pelanggaran data. Fitur ini hanya tersedia untuk pengguna yang login.</translation>
 <translation id="6216696360484424239">Login secara otomatis</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> offline. Sambungkan ke internet, lalu coba lagi.</translation>
 <translation id="6220413761270491930">Terjadi Kesalahan Saat Memuat Ekstensi</translation>
@@ -5308,7 +5306,7 @@
 <translation id="8828933418460119530">Nama DNS</translation>
 <translation id="883062543841130884">Substitusi</translation>
 <translation id="8830796635868321089">Gagal melakukan pemeriksaan pembaruan menggunakan setelan proxy. Sesuaikan <ph name="PROXY_SETTINGS_LINK_START" />setelan proxy<ph name="PROXY_SETTINGS_LINK_END" /> Anda.</translation>
-<translation id="8831140208248705279"><ph name="DEVICE_TYPE" /> dan ponsel Android Anda berfungsi lebih baik saat digunakan bersamaan. Hubungkan keduanya sehingga Anda dapat menulis pesan dari komputer, membagikan sambungan internet, dan membuka kunci <ph name="DEVICE_TYPE" /> dengan ponsel.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
+<translation id="8831140208248705279"><ph name="DEVICE_TYPE" /> dan ponsel Android Anda berfungsi lebih baik saat digunakan secara terhubung. Hubungkan keduanya sehingga Anda dapat menulis pesan dari komputer, membagikan sambungan internet, dan membuka kunci <ph name="DEVICE_TYPE" /> dengan ponsel.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">Buka setelan Ekstensi</translation>
 <translation id="8834039744648160717">Konfigurasi jaringan dikontrol oleh <ph name="USER_EMAIL" />.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 2e5f999..3decd529 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Solo per la sessione di navigazione in incognito corrente</translation>
 <translation id="1698650002254827833">Impossibile caricare l'elenco delle app. Riprova.</translation>
 <translation id="1701062906490865540">Rimuovi questa persona</translation>
+<translation id="1703331064825191675">Non preoccuparti delle tue password</translation>
 <translation id="1706586824377653884">Aggiunta dall'amministratore</translation>
 <translation id="1706625117072057435">Livelli di zoom</translation>
 <translation id="1708338024780164500">(Non attiva)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nuova finestra</translation>
 <translation id="1766575458646819543">Modalità a schermo intero disattivata</translation>
+<translation id="1766957085594317166">Salva le password in sicurezza nel tuo Account Google per non doverle più digitare</translation>
 <translation id="1768278914020124551">Spiacenti. Si è verificato un problema di comunicazione con il server di accesso. Controlla la connessione di rete e il nome di dominio, poi riprova.</translation>
 <translation id="1769104665586091481">Apri link in un'altra &amp;finestra</translation>
 <translation id="1773212559869067373">Certificato di autenticazione rifiutato localmente</translation>
@@ -1874,6 +1876,7 @@
 <translation id="3748026146096797577">Non connesso</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">I miei dispositivi</translation>
+<translation id="3753033997400164841">Memorizza una volta, usa ovunque</translation>
 <translation id="3755411799582650620">Ora con il tuo <ph name="PHONE_NAME" /> puoi sbloccare anche questo dispositivo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Il sito sta usando il microfono</translation>
 <translation id="3757733214359997190">Nessun sito trovato</translation>
@@ -2166,7 +2169,6 @@
 <translation id="4146026355784316281">Apri sempre con visualizzatore di sistema</translation>
 <translation id="4146785383423576110">Reimpostazione e pulizia</translation>
 <translation id="4147911968024186208">Riprova. Se ricevi ancora questo messaggio di errore, contatta il tuo rappresentante dell'assistenza.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 scheda}other{# schede}}</translation>
 <translation id="4154664944169082762">Impronte digitali</translation>
@@ -2207,6 +2209,7 @@
 <translation id="4232375817808480934">Configura Kerberos</translation>
 <translation id="4235200303672858594">Schermo intero</translation>
 <translation id="4235965441080806197">Annulla accesso</translation>
+<translation id="4242145785130247982">Non sono supportati più certificati client</translation>
 <translation id="4242533952199664413">Apri le impostazioni</translation>
 <translation id="4242577469625748426">Installazione delle impostazioni criterio sul dispositivo non riuscita. <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Trova altre app per stilo</translation>
@@ -2665,6 +2668,7 @@
 <translation id="4957949153200969297">Attiva solo le funzionalità relative alla sincronizzazione di <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Le password vengono salvate nel tuo Account Google affinché tu possa usarle su qualsiasi dispositivo</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Questa app è stata installata dall'amministratore.</translation>
 <translation id="4964455510556214366">Disposizione</translation>
 <translation id="4964673849688379040">Controllo in corso...</translation>
 <translation id="4965808351167763748">Vuoi configurare questo dispositivo in modo da poter eseguire Hangouts Meet?</translation>
@@ -2922,6 +2926,7 @@
 <translation id="5360150013186312835">Mostra in barra degli strumenti</translation>
 <translation id="5362741141255528695">Seleziona il file della chiave privata.</translation>
 <translation id="5363109466694494651">Esegui Powerwash e ripristina</translation>
+<translation id="5365716706805792666">Google può controllare se le tue password sono state oggetto di una violazione dei dati. Questa impostazione viene attivata se accedi con il tuo Account Google.</translation>
 <translation id="5365881113273618889">La cartella che hai selezionato contiene file sensibili. Vuoi concedere a "<ph name="APP_NAME" />" accesso di scrittura permanente a questa cartella?</translation>
 <translation id="5367091008316207019">Lettura del file in corso...</translation>
 <translation id="5368720394188453070">Il telefono è stato bloccato. Sbloccalo per accedere.</translation>
@@ -3518,7 +3523,6 @@
 <translation id="6212039847102026977">Mostra proprietà di rete avanzate</translation>
 <translation id="6212168817037875041">Disattiva lo schermo</translation>
 <translation id="6212752530110374741">Invia link tramite email</translation>
-<translation id="6214642087594370545">Mostra un avviso quando viene usata una password non sicura che è stata oggetto di violazione dei dati. Disponibile solo per gli utenti che hanno eseguito l'accesso.</translation>
 <translation id="6216696360484424239">Accedi automaticamente</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> è offline. Connettiti a Internet e riprova.</translation>
 <translation id="6220413761270491930">Errore di caricamento dell'estensione</translation>
@@ -3875,6 +3879,7 @@
 <translation id="6769712124046837540">Aggiunta della stampante...</translation>
 <translation id="6770664076092644100">Verifica tramite NFC</translation>
 <translation id="6771503742377376720">È un'autorità di certificazione</translation>
+<translation id="6775163072363532304">I dispositivi disponibili verranno mostrati qui.</translation>
 <translation id="6777817260680419853">Reindirizzamento bloccato</translation>
 <translation id="6778737459546443941">Il tuo genitore non ha ancora approvato la richiesta</translation>
 <translation id="677965093459947883">Molto piccole</translation>
@@ -4335,6 +4340,7 @@
 <translation id="7441830548568730290">Altri utenti</translation>
 <translation id="7442465037756169001">L'hardware Hangouts Meet è pronto per la configurazione.</translation>
 <translation id="744341768939279100">Crea un nuovo profilo</translation>
+<translation id="7443806024147773267">Puoi avere a disposizione le tue password ogni volta che accedi al tuo Account Google</translation>
 <translation id="7444046173054089907">Questo sito è bloccato</translation>
 <translation id="7444983668544353857">Disabilita <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Consente di installare automaticamente le app</translation>
@@ -4748,6 +4754,7 @@
 <translation id="8014154204619229810">Lo strumento di aggiornamento è in esecuzione. Aggiorna tra un minuto per ricontrollare.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> non riesce a tornare alla versione precedente installata. Prova a eseguire il Powerwash del dispositivo.</translation>
 <translation id="8014210335923519270">Migliora <ph name="IDS_SHORT_PRODUCT_NAME" /> e la sua sicurezza inviando informazioni di sistema e sull'utilizzo a Google</translation>
+<translation id="8015780634880457457">Google può controllare se le tue password sono state oggetto di una violazione dei dati</translation>
 <translation id="8016266267177410919">Archiviazione temporanea</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Scorciatoia modificata</translation>
@@ -4865,6 +4872,7 @@
 <translation id="8188389033983459049">Controlla le impostazioni sul dispositivo e attivalo per continuare</translation>
 <translation id="8190193592390505034">Connessione a <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gestire applicazioni, estensioni e temi</translation>
+<translation id="819464600477418284">Non è possibile disinstallare questa app perché fa parte di Chrome OS.</translation>
 <translation id="8195027750202970175">Dimensioni su disco</translation>
 <translation id="8198323535106903877">Le <ph name="NUMBER_OF_APPS" /> app verranno installate automaticamente</translation>
 <translation id="8199300056570174101">Proprietà dispositivo e rete (servizio)</translation>
@@ -4925,6 +4933,7 @@
     <ph name="BEGIN_PARAGRAPH2" />La disattivazione di questa funzione non influisce sulla capacità del dispositivo di inviare le informazioni necessarie per i servizi essenziali, ad esempio gli aggiornamenti di sistema e sicurezza.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Il proprietario può controllare questa funzione da Impostazioni &gt; Avanzate &gt; Invia automaticamente a Google dati di diagnostica e utilizzo.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Se l'impostazione aggiuntiva Attività web e app è attiva per tuo figlio, questi dati potrebbero essere salvati nel suo Account Google. Leggi ulteriori informazioni su queste impostazioni e su come configurarle alla pagina families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Certificato client non valido</translation>
 <translation id="8270242299912238708">Documenti PDF</translation>
 <translation id="827097179112817503">Mostra pulsante Home</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 preferito eliminato}other{# preferiti eliminati}}</translation>
@@ -5338,6 +5347,7 @@
 <translation id="8874184842967597500">Non connessa</translation>
 <translation id="8876307312329369159">Questa impostazione non può essere modificata in una sessione demo.</translation>
 <translation id="8877448029301136595">[directory principale]</translation>
+<translation id="8879220587046205278">Le app di Google Play potrebbero richiedere accesso completo al file system per leggere e scrivere sui file memorizzati sui dispositivi di archiviazione esterni. I file e le cartelle creati sul dispositivo sono visibili a chiunque usi l'unità esterna.</translation>
 <translation id="8879284080359814990">Mostra come &amp;scheda</translation>
 <translation id="8879921471468674457">Memorizza dati di accesso</translation>
 <translation id="8881020143150461183">Riprova. Per assistenza tecnica, contatta <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 447aa19..916bbf2 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -476,6 +476,7 @@
 <translation id="1698122934742150150">הפעלה נוכחית בלבד במצב גלישה בסתר</translation>
 <translation id="1698650002254827833">אי אפשר לטעון את רשימת האפליקציות. צריך לנסות שוב.</translation>
 <translation id="1701062906490865540">הסרת משתמש זה</translation>
+<translation id="1703331064825191675">אין יותר צורך לדאוג לגבי הסיסמאות שלך</translation>
 <translation id="1706586824377653884">נוסף על ידי מנהל המערכת שלך</translation>
 <translation id="1706625117072057435">רמות מרחק מתצוגה</translation>
 <translation id="1708338024780164500">(לא פעיל)</translation>
@@ -525,6 +526,7 @@
 <translation id="1764226536771329714">ביטא</translation>
 <translation id="176587472219019965">&amp;חלון חדש</translation>
 <translation id="1766575458646819543">התבצעה יציאה ממסך מלא</translation>
+<translation id="1766957085594317166">‏אפשר לשמור סיסמאות בצורה בטוחה בחשבון Google, כך שלאחר מכן לא יהיה יותר צורך להקליד אותן ידנית</translation>
 <translation id="1768278914020124551">אופס! נתקלנו בבעיה ביצירת קשר עם שרת ההתחברות. בדוק את חיבור הרשת ואת שם הדומיין ולאחר מכן נסה שוב.</translation>
 <translation id="1769104665586091481">פתח קישור &amp;בחלון חדש</translation>
 <translation id="1773212559869067373">אישור האימות נדחה מקומית</translation>
@@ -1872,6 +1874,7 @@
 <translation id="3748026146096797577">לא מחובר</translation>
 <translation id="3752582316358263300">אישור...</translation>
 <translation id="3752673729237782832">המכשירים שלי</translation>
+<translation id="3753033997400164841">מאחסנים סיסמה פעם אחת. משתמשים בה בכל מקום.</translation>
 <translation id="3755411799582650620">ה-<ph name="PHONE_NAME" /> יכול כעת לבטל גם את הנעילה של <ph name="DEVICE_TYPE" /> זה.</translation>
 <translation id="375636864092143889">האתר משתמש במיקרופון</translation>
 <translation id="3757733214359997190">לא נמצאו אתרים</translation>
@@ -2164,7 +2167,6 @@
 <translation id="4146026355784316281">פתח תמיד באמצעות מציג המערכת</translation>
 <translation id="4146785383423576110">איפוס וניקוי</translation>
 <translation id="4147911968024186208">אפשר לנסות שוב. אם השגיאה הזאת ממשיכה להופיע, ניתן לפנות לנציג התמיכה.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">תצוגה</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{כרטיסייה אחת}two{# כרטיסיות}many{# כרטיסיות}other{# כרטיסיות}}</translation>
 <translation id="4154664944169082762">טביעות אצבע</translation>
@@ -2205,6 +2207,7 @@
 <translation id="4232375817808480934">‏הגדרת Kerberos</translation>
 <translation id="4235200303672858594">כל המסך</translation>
 <translation id="4235965441080806197">בטל כניסה</translation>
+<translation id="4242145785130247982">אין תמיכה באישורי לקוח מרובים.</translation>
 <translation id="4242533952199664413">פתח את 'הגדרות'</translation>
 <translation id="4242577469625748426">התקנת הגדרות המדיניות במכשיר: <ph name="VALIDATION_ERROR" /> נכשלה.</translation>
 <translation id="4244238649050961491">חפש עוד אפליקציות לשימוש בסטיילוס</translation>
@@ -2663,6 +2666,7 @@
 <translation id="4957949153200969297">הפעלה רק של תכונות הקשורות לסינכרון <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">‏סיסמאות נשמרות בחשבון Google כדי לאפשר לך להשתמש בהן בכל המכשירים</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">האפליקציה הזו הותקנה על ידי מנהל המערכת.</translation>
 <translation id="4964455510556214366">סידור</translation>
 <translation id="4964673849688379040">בודק...</translation>
 <translation id="4965808351167763748">‏בחרת להגדיר שהמכשיר הזה יפעיל את Hangouts Meet. להמשיך?</translation>
@@ -2920,6 +2924,7 @@
 <translation id="5360150013186312835">הצג בסרגל הכלים</translation>
 <translation id="5362741141255528695">בחר קובץ מפתח פרטי.</translation>
 <translation id="5363109466694494651">‏בצע Powerwash וחזור לגרסה הקודמת</translation>
+<translation id="5365716706805792666">‏Google יכולה לבדוק אם הסיסמאות שלך היו חלק מפרצה באבטחת המידע. האפשרות הזו תופעל אחרי כניסה באמצעות חשבון Google שלך.</translation>
 <translation id="5365881113273618889">התיקייה שבחרת מכילה קבצים רגישים. האפליקציה <ph name="APP_NAME" /> תקבל הרשאת כתיבה קבועה לתיקייה הזו. להמשיך?</translation>
 <translation id="5367091008316207019">קורא את הקובץ..</translation>
 <translation id="5368720394188453070">הטלפון שלך נעול. בטל את הנעילה כדי להיכנס.</translation>
@@ -3516,7 +3521,6 @@
 <translation id="6212039847102026977">הצג מאפייני רשת מתקדמים</translation>
 <translation id="6212168817037875041">כבה את הצג</translation>
 <translation id="6212752530110374741">שליחת קישור באימייל</translation>
-<translation id="6214642087594370545">אם משתמשים בסיסמה לא בטוחה שהייתה חלק מפרצה באבטחת מידע, מוצגת אזהרה. התכונה הזו זמינה רק למשתמשים שמחוברים לחשבון.</translation>
 <translation id="6216696360484424239">כניסה אוטומטית</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> לא מחובר לרשת. צריך להתחבר לאינטרנט ולנסות שוב.</translation>
 <translation id="6220413761270491930">אירעה שגיאה בטעינת תוסף</translation>
@@ -3873,6 +3877,7 @@
 <translation id="6769712124046837540">הוספת מדפסת...</translation>
 <translation id="6770664076092644100">‏אימות באמצעות NFC</translation>
 <translation id="6771503742377376720">הוא רשות אישורים</translation>
+<translation id="6775163072363532304">כל המכשירים הזמינים יופיעו כאן.</translation>
 <translation id="6777817260680419853">הפניה לכתובת אתר אחרת נחסמה</translation>
 <translation id="6778737459546443941">ההורה ששאלת עדיין לא אישר זאת</translation>
 <translation id="677965093459947883">קטן מאוד</translation>
@@ -4333,6 +4338,7 @@
 <translation id="7441830548568730290">משתמשים אחרים</translation>
 <translation id="7442465037756169001">‏Hangouts Meet hardware מוכן להגדרה.</translation>
 <translation id="744341768939279100">צור פרופיל חדש</translation>
+<translation id="7443806024147773267">‏הסיסמאות שלך תמיד זמינות אם נכנסת לחשבון Google</translation>
 <translation id="7444046173054089907">האתר הזה חסום</translation>
 <translation id="7444983668544353857">השבת <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">התקנה אוטומטית של אפליקציות</translation>
@@ -4745,6 +4751,7 @@
 <translation id="8014154204619229810">המעדכן פועל כעת. רענן בעוד דקה כדי לבדוק שנית.</translation>
 <translation id="8014206674403687691">‏<ph name="IDS_SHORT_PRODUCT_NAME" /> אינו יכול לחזור לגרסה המותקנת הקודמת. נסה לבצע שוב Powerwash למכשיר.</translation>
 <translation id="8014210335923519270">‏שליחה של פרטי המערכת ונתוני שימוש אל Google תשפר את <ph name="IDS_SHORT_PRODUCT_NAME" /> ואת האבטחה שלו</translation>
+<translation id="8015780634880457457">‏Google יכולה לבדוק אם הסיסמאות שלך היו חלק מפרצה באבטחת המידע</translation>
 <translation id="8016266267177410919">אחסון זמני</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">קיצור הדרך עבר עריכה</translation>
@@ -4865,6 +4872,7 @@
 <translation id="8188389033983459049">יש לבדוק את הגדרות המכשיר ולהפעיל אותו כדי להמשיך</translation>
 <translation id="8190193592390505034">מתחבר אל <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">לנהל את היישומים, התוספים והעיצובים שלך</translation>
+<translation id="819464600477418284">‏לא ניתן להסיר את התקנת האפליקציה הזו מאחר שהיא חלק מ-Chrome OS.</translation>
 <translation id="8195027750202970175">גודל בדיסק</translation>
 <translation id="8198323535106903877"><ph name="NUMBER_OF_APPS" /> האפליקציות יותקנו</translation>
 <translation id="8199300056570174101">מאפייני רשת (שירות) ומכשיר</translation>
@@ -4925,6 +4933,7 @@
 <ph name="BEGIN_PARAGRAPH2" />כיבוי תכונה זו לא ישפיע על יכולת המכשיר לשלוח את המידע הנדרש לשירותים חיוניים, כמו עדכוני מערכת ואבטחה.<ph name="END_PARAGRAPH2" />
 <ph name="BEGIN_PARAGRAPH3" />הבעלים יכול לשלוט בתכונה הזו דרך 'הגדרות' &gt; 'מתקדם' &gt; 'שליחה אוטומטית של נתוני אבחון ושימוש אל Google'.<ph name="END_PARAGRAPH3" />
 <ph name="BEGIN_PARAGRAPH4" />אם הופעלה הגדרה נוספת של 'פעילות באינטרנט ובאפליקציות' בחשבון של הילד/ה, ייתכן שהנתונים האלה יישמרו בחשבון Google שלו/ה. אפשר לקרוא מידע נוסף על ההגדרות האלה ואופן השינוי שלהם בכתובת families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">אישור לקוח לא חוקי</translation>
 <translation id="8270242299912238708">‏מסמכי PDF</translation>
 <translation id="827097179112817503">הצג את לחצן 'דף הבית'</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{סימניה אחת נמחקה}two{# סימניות נמחקו}many{# סימניות נמחקו}other{# סימניות נמחקו}}</translation>
@@ -5338,6 +5347,7 @@
 <translation id="8874184842967597500">לא מחובר</translation>
 <translation id="8876307312329369159">לא ניתן לשנות את ההגדרה הזו בסשן להדגמה.</translation>
 <translation id="8877448029301136595">[ספריית אב]</translation>
+<translation id="8879220587046205278">‏ייתכן שלאפליקציות מ-Google Play תידרש גישה מלאה למערכת הקבצים לצורך קריאה וכתיבה של קבצים בהתקני אחסון חיצוניים. הקבצים והתיקיות שנוצרים במכשיר גלויים לכל מי שמשתמש בכונן החיצוני.</translation>
 <translation id="8879284080359814990">הצ&amp;ג ככרטיסייה</translation>
 <translation id="8879921471468674457">שמירת פרטי הכניסה</translation>
 <translation id="8881020143150461183">יש לנסות שוב. לתמיכה טכנית יש לפנות אל <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index f1c635d..67e4fdfe 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -302,7 +302,7 @@
 <translation id="1444628761356461360">この設定はデバイスの所有者 <ph name="OWNER_EMAIL" /> が管理しています。</translation>
 <translation id="144518587530125858">テーマの「<ph name="IMAGE_PATH" />」を読み込むことができませんでした。</translation>
 <translation id="1445693676523799095">しばらくお待ちください</translation>
-<translation id="1450011005989029586">ご利用のサイトまたはアプリでのデータ侵害により、パスワード情報が漏洩しました。今すぐ <ph name="ORIGIN" /> の<ph name="BOLD" />ことをおすすめします。</translation>
+<translation id="1450011005989029586">ご利用のサイトまたはアプリでのデータ侵害により、パスワードが流出しました。今すぐ <ph name="ORIGIN" /> の<ph name="BOLD" />ことをおすすめします。</translation>
 <translation id="1451375123200651445">ウェブページ、1 つのファイル</translation>
 <translation id="1451917004835509682">監視対象ユーザーを追加</translation>
 <translation id="1454223536435069390">スクリーンショットを撮る(&amp;A)</translation>
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">現在のシークレット モード セッションのみ</translation>
 <translation id="1698650002254827833">アプリのリストを読み込めません。もう一度お試しください。</translation>
 <translation id="1701062906490865540">このユーザーを削除</translation>
+<translation id="1703331064825191675">パスワードを気にする必要はありません</translation>
 <translation id="1706586824377653884">管理者により追加</translation>
 <translation id="1706625117072057435">ズームレベル</translation>
 <translation id="1708338024780164500">(無効)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">ベータ版</translation>
 <translation id="176587472219019965">新しいウインドウ(&amp;N)</translation>
 <translation id="1766575458646819543">全画面表示を終了しました</translation>
+<translation id="1766957085594317166">Google アカウントではパスワードが安全に保存されるため、次回以降の入力は不要です。</translation>
 <translation id="1768278914020124551">ログイン サーバーへの接続中に問題が発生しました。ネットワーク接続とドメイン名を確認してもう一度お試しください。</translation>
 <translation id="1769104665586091481">新しいウインドウで開く(&amp;W)</translation>
 <translation id="1773212559869067373">認証証明書がローカルで拒否されました</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">接続されていません</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">マイ デバイス</translation>
+<translation id="3753033997400164841">一度保存すればどこでも使用可能</translation>
 <translation id="3755411799582650620"><ph name="PHONE_NAME" /> でもこの <ph name="DEVICE_TYPE" /> のロックを解除できるようになりました。</translation>
 <translation id="375636864092143889">サイトでマイクが使用されています</translation>
 <translation id="3757733214359997190">サイトが見つかりません</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">常にシステム ビューアで開く</translation>
 <translation id="4146785383423576110">リセットとクリーンアップ</translation>
 <translation id="4147911968024186208">もう一度お試しください。このエラーが再び表示される場合は、サポート担当者にお問い合わせください。</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">表示</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 個のタブ}other{# 個のタブ}}</translation>
 <translation id="4154664944169082762">指紋</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Kerberos の設定</translation>
 <translation id="4235200303672858594">画面全体</translation>
 <translation id="4235965441080806197">ログインをキャンセル</translation>
+<translation id="4242145785130247982">サポートされていないクライアント証明書が複数あります</translation>
 <translation id="4242533952199664413">設定を開く</translation>
 <translation id="4242577469625748426">デバイスにポリシー設定をインストールできませんでした: <ph name="VALIDATION_ERROR" />。</translation>
 <translation id="4244238649050961491">他のタッチペン アプリを探す</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297"><ph name="IDS_SHORT_PRODUCT_NAME" /> 同期に関連する機能のみを有効にします</translation>
 <translation id="4959262764292427323">パスワードは Google アカウントに保存されるため、どのデバイスからでも使用できます</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">このアプリは管理者によってインストールされています。</translation>
 <translation id="4964455510556214366">配置</translation>
 <translation id="4964673849688379040">確認しています...</translation>
 <translation id="4965808351167763748">このデバイスでハングアウト Meet を実行するように設定してもよろしいですか?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">ツールバーに表示</translation>
 <translation id="5362741141255528695">秘密鍵ファイルを選択します。</translation>
 <translation id="5363109466694494651">Powerwash を実行して以前のバージョンに戻す</translation>
+<translation id="5365716706805792666">Google ではお使いのパスワードがデータ侵害の対象になっていたかを確認できます。これは Google アカウントでログインするとオンになります。</translation>
 <translation id="5365881113273618889">選択したフォルダには、機密ファイルが含まれています。このフォルダに対する永続的な書き込みアクセス権を「<ph name="APP_NAME" />」に付与してもよろしいですか?</translation>
 <translation id="5367091008316207019">ファイルを読み取っています...</translation>
 <translation id="5368720394188453070">スマートフォンがロックされています。ログインするにはロックを解除してしてください。</translation>
@@ -3059,7 +3064,7 @@
 <translation id="5543983818738093899">ステータスを確認しています...</translation>
 <translation id="554517032089923082">GTC</translation>
 <translation id="5546865291508181392">検索</translation>
-<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{「<ph name="TAB_TITLE" />」}=1{「<ph name="TAB_TITLE" />」とその他 1 個のタブ}other{「<ph name="TAB_TITLE" />」とその他 # 個のタブ}}</translation>
+<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{「<ph name="TAB_TITLE" />」}=1{「<ph name="TAB_TITLE" />」と他 1 個のタブ}other{「<ph name="TAB_TITLE" />」と他 # 個のタブ}}</translation>
 <translation id="5551573675707792127">キーボードとテキスト入力</translation>
 <translation id="5553089923092577885">証明書ポリシーのマッピング</translation>
 <translation id="5554489410841842733">このアイコンは、ページで拡張機能が使用できる場合に表示されます。</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">ネットワークの詳細プロパティを表示</translation>
 <translation id="6212168817037875041">画面をオフにする</translation>
 <translation id="6212752530110374741">リンクをメールで送信</translation>
-<translation id="6214642087594370545">データ侵害が記録された安全でないパスワードを入力したときに警告を表示します。この機能はログインしているユーザーのみ利用可能です。</translation>
 <translation id="6216696360484424239">自動ログイン</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> はオフラインです。インターネットに接続してもう一度お試しください。</translation>
 <translation id="6220413761270491930">拡張機能の読み込みエラー</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">プリンタの追加...</translation>
 <translation id="6770664076092644100">NFC を使って確認</translation>
 <translation id="6771503742377376720">認証局である</translation>
+<translation id="6775163072363532304">利用可能なデバイスはここに表示されます。</translation>
 <translation id="6777817260680419853">リダイレクトがブロックされました</translation>
 <translation id="6778737459546443941">保護者がまだサイトを開くことを許可していません</translation>
 <translation id="677965093459947883">極小</translation>
@@ -4337,6 +4342,7 @@
 <translation id="7441830548568730290">他のユーザー</translation>
 <translation id="7442465037756169001">Hangouts Meet ハードウェアを設定できます。</translation>
 <translation id="744341768939279100">新しいプロフィールを作成</translation>
+<translation id="7443806024147773267">Google アカウントにログインすれば、いつでもパスワードにアクセスできます。</translation>
 <translation id="7444046173054089907">このサイトはブロックされています</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> を無効にする</translation>
 <translation id="7448430327655618736">アプリの自動インストール</translation>
@@ -4750,6 +4756,7 @@
 <translation id="8014154204619229810">現在アップデータを実行中です。しばらくしてから更新して、もう一度ご確認ください。</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> を以前のインストール バージョンに戻せません。デバイスでもう一度 Powerwash を実行してみてください。</translation>
 <translation id="8014210335923519270">システム情報と使用状況が Google に送信され、<ph name="IDS_SHORT_PRODUCT_NAME" /> とそのセキュリティの向上に役立てられます</translation>
+<translation id="8015780634880457457">Google ではお使いのパスワードがデータ侵害の対象になっていたかを確認できます</translation>
 <translation id="8016266267177410919">一時ストレージ</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">ショートカットを編集しました</translation>
@@ -4868,6 +4875,7 @@
 <translation id="8188389033983459049">続行するには、デバイスの設定で Bluetooth をオンにしてください</translation>
 <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> に接続中</translation>
 <translation id="8191230140820435481">アプリ、拡張機能、テーマを管理する</translation>
+<translation id="819464600477418284">このアプリは Chrome OS の一部であるため、アンインストールできません。</translation>
 <translation id="8195027750202970175">ディスク上のサイズ</translation>
 <translation id="8198323535106903877">この <ph name="NUMBER_OF_APPS" /> 個のアプリをインストールします</translation>
 <translation id="8199300056570174101">ネットワーク(サービス)とデバイスのプロパティ</translation>
@@ -4928,6 +4936,7 @@
     <ph name="BEGIN_PARAGRAPH2" />この機能をオフにした場合でも、システム アップデートやセキュリティなどの重要なサービスで必要となる情報は、デバイスからこれまでどおり送信されます。<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />デバイスの所有者は、[設定] &gt; [詳細設定] &gt; [診断と使用状況のデータを Google に自動送信する] でこの機能を管理できます。<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />これに加えて、お子様のアカウントで [ウェブとアプリのアクティビティ] の設定もオンにしている場合、このデータはお子様の Google アカウントにも保存される可能性があります。これらの設定の詳細と設定を調整する方法については、families.google.com をご覧ください。<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">クライアント証明書が無効です</translation>
 <translation id="8270242299912238708">PDF ドキュメント</translation>
 <translation id="827097179112817503">ホームボタンを表示する</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 個のブックマークが削除されました}other{# 個のブックマークが削除されました}}</translation>
@@ -5341,6 +5350,7 @@
 <translation id="8874184842967597500">未接続</translation>
 <translation id="8876307312329369159">この設定はデモセッションでは変更できません。</translation>
 <translation id="8877448029301136595">[親ディレクトリ]</translation>
+<translation id="8879220587046205278">Google Play のアプリで外部ストレージ デバイスのファイルの読み取りと書き込みを行うには、ファイル システムへのフルアクセスが必要となる場合があります。デバイスで作成したファイルとフォルダは、外部ドライブを使用すれば誰でも閲覧できます。</translation>
 <translation id="8879284080359814990">タブで表示(&amp;S)</translation>
 <translation id="8879921471468674457">ログイン情報を保存する</translation>
 <translation id="8881020143150461183">もう一度お試しください。技術的なサポートについては、<ph name="CARRIER_NAME" /> にお問い合わせください。</translation>
@@ -5410,7 +5420,7 @@
 <translation id="8973596347849323817">このデバイスを必要に応じてカスタマイズできます。このユーザー補助機能は後から [設定] で変更できます。</translation>
 <translation id="897414447285476047">接続の問題により、ダウンロードされたファイルは不完全です。</translation>
 <translation id="897525204902889653">検疫サービス</translation>
-<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{「<ph name="TAB_TITLE" />」}=1{「<ph name="TAB_TITLE" />」とその他 1 個のタブ}other{「<ph name="TAB_TITLE" />」とその他 # 個のタブ}}</translation>
+<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{「<ph name="TAB_TITLE" />」}=1{「<ph name="TAB_TITLE" />」と他 1 個のタブ}other{「<ph name="TAB_TITLE" />」と他 # 個のタブ}}</translation>
 <translation id="8976520271376534479">このページの Flash はブロックされました。</translation>
 <translation id="8977811652087512276">パスワードが間違っているか、ファイルが壊れています</translation>
 <translation id="8978154919215542464">オン - すべて同期</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 0acabd3b..3c1ca3b 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -302,6 +302,7 @@
 <translation id="1444628761356461360">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಸಾಧನದ ಮಾಲೀಕರಿಂದ ನಿರ್ವಹಿಸಿಲಾಗುತ್ತದೆ, <ph name="OWNER_EMAIL" />.</translation>
 <translation id="144518587530125858">'<ph name="IMAGE_PATH" />' ಅನ್ನು ಥೀಮ್‌ಗಾಗಿ ಲೋಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="1445693676523799095">ಇದು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು</translation>
+<translation id="1450011005989029586">ನೀವು ಬಳಸುವ ವೆಬ್‌ಸೈಟ್‌ ಅಥವಾ ಆ್ಯಪ್‌ನಲ್ಲಿ ಡೇಟಾ ಉಲ್ಲಂಘನೆಯಾಗಿದೆ, ಇದರಿಂದಾಗಿ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಬಹಿರಂಗಗೊಂಡಿದೆ. <ph name="ORIGIN" /> ನಲ್ಲಿ <ph name="BOLD" /> Chrome ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
 <translation id="1451375123200651445">ವೆಬ್‌ಪುಟ, ಒಂದೇ ಫೈಲ್</translation>
 <translation id="1451917004835509682">ಮೇಲ್ವಿಚಾರಣೆ ವ್ಯಕ್ತಿಯನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="1454223536435069390">ಸ್ಕ್ರೀ&amp;ನ್‌ಶಾಟ್‌ ತೆಗೆದುಕೊಳ್ಳಿ</translation>
@@ -413,6 +414,7 @@
 <translation id="1604432177629086300">ಪ್ರಿಂಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಪ್ರಿಂಟರ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1607139524282324606">ಪ್ರವೇಶವನ್ನು ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="1608626060424371292">ಈ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
+<translation id="1608668830839595724">ಆಯ್ದ ಐಟಂಗಳಿಗಾಗಿ ಹೆಚ್ಚಿನ ಕ್ರಿಯೆಗಳು</translation>
 <translation id="1609170755653088773">ಈ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ನಿಮ್ಮ iPhone ಗೆ ಸಿಂಕ್ ಮಾಡಿ</translation>
 <translation id="161042844686301425">ಹಸಿರುನೀಲಿ</translation>
 <translation id="1611584202130317952">ಸರಬರಾಜು ಹರಿವಿನಲ್ಲಿ ಅಡಚಣೆ ಉಂಟಾಗಿದೆ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದ ಮಾಲೀಕರು ಅಥವಾ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಕಿಸಿ.</translation>
@@ -478,6 +480,7 @@
 <translation id="1698122934742150150">ಪ್ರಸ್ತುತ ಅದೃಶ್ಯ ಸೆಶನ್ ಮಾತ್ರ</translation>
 <translation id="1698650002254827833">ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1701062906490865540">ಈ ವ್ಯಕ್ತಿಯನ್ನು ತೆಗೆದುಹಾಕು</translation>
+<translation id="1703331064825191675">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳ ಬಗ್ಗೆ ಎಂದಿಗೂ ಚಿಂತಿಸಬೇಡಿ</translation>
 <translation id="1706586824377653884">ನಿಮ್ಮ ನಿರ್ವಾಹಕರ ಮೂಲಕ ಸೇರಿಸಲಾಗಿದೆ</translation>
 <translation id="1706625117072057435">ಝೂಮ್ ಹಂತಗಳು</translation>
 <translation id="1708338024780164500">(ಸಕ್ರಿಯವಲ್ಲದ)</translation>
@@ -527,6 +530,7 @@
 <translation id="1764226536771329714">ಬೀಟಾ</translation>
 <translation id="176587472219019965">&amp;ಹೊಸ ವಿಂಡೋ</translation>
 <translation id="1766575458646819543">ಪೂರ್ಣ ಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಲಾಗಿದೆ</translation>
+<translation id="1766957085594317166">ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಉಳಿಸಿ, ಇದರಿಂದ ನೀವು ಅವುಗಳನ್ನು ಮತ್ತೆ ಟೈಪ್ ಮಾಡಬೇಕಾಗುವುದಿಲ್ಲ</translation>
 <translation id="1768278914020124551">ಓಹ್‌! ಲಾಗ್‌ಆನ್‌ ಸರ್ವರ್‌ ಅನ್ನು ಸಂಪರ್ಕಿಸುವಾಗ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ. ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ ಸಂಪರ್ಕವನ್ನು ಮತ್ತು ಡೊಮೇನ್‌ ಹೆಸರನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1769104665586091481">ಹೊಸ &amp;ವಿಂಡೋದಲ್ಲಿ ಲಿಂಕ್ ತೆರೆಯಿರಿ</translation>
 <translation id="1773212559869067373">ದೃಢೀಕರಣ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸ್ಥಳೀಯವಾಗಿ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ</translation>
@@ -735,6 +739,7 @@
 <translation id="2090165459409185032">ನಿಮ್ಮ ಖಾತೆಯ ಮಾಹಿತಿಯನ್ನು ಮರುಪಡೆಯಲು, ಇಲ್ಲಿಗೆ ಹೋಗಿ: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">ಸಿಸ್ಟಂ ಸುರಕ್ಷತಾ ಸೆಟ್ಟಿಂಗ್</translation>
 <translation id="2091887806945687916">ಶಬ್ಧ</translation>
+<translation id="2096715839409389970">ಮೂರನೇ ವ್ಯಕ್ತಿ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="2097372108957554726">ಹೊಸ ಸಾಧನಗಳನ್ನು ನೋಂದಾಯಿಸಲು ನೀವು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ</translation>
 <translation id="2099172618127234427">sshd daemon ಅನ್ನು ಹೊಂದಿಸುವಂತಹ Chrome OS ಡೀಬಗ್ ಮಾಡುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತಿರುವಿರಿ ಮತ್ತು USB ಡ್ರೈವ್‌ಗಳಿಂದ ಬೂಟ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಅಳಿಸುವುದೆ?</translation>
@@ -780,6 +785,7 @@
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ನಂತೆ ತೋರುತ್ತಿದೆ</translation>
 <translation id="2156283799932971644">ಸಿಸ್ಟಂ ಕುರಿತು ಕೆಲವೊಂದು ಮಾಹಿತಿಯನ್ನು ಮತ್ತು ಪುಟದ ವಿಷಯವನ್ನು Google ಗೆ ಕಳುಹಿಸುವ ಮೂಲಕ, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಸುಧಾರಿಸಲು ನೀವು ಸಹಾಯ ಮಾಡಬಹುದು.</translation>
 <translation id="2156294658807918600">ಸೇವಾ ಕಾರ್ಯಕರ್ತ: <ph name="SCRIPT_URL" /></translation>
+<translation id="2157474325782140681">ಹೆಚ್ಚುವರಿ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪಡೆಯಲು, ಈ Chromebook ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ Dell ಡಾಕಿಂಗ್ ಸ್ಟೇಷನ್ ಒಂದನ್ನು ಬಳಸಿ.</translation>
 <translation id="215753907730220065">ಪೂರ್ಣಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
 <translation id="2157875535253991059">ಈ ಪುಟವು ಇದೀಗ ಪೂರ್ಣ ಪರದೆಯಾಗಿದೆ.</translation>
 <translation id="216169395504480358">ವೈ-ಫೈ ಸೇರಿಸಿ...</translation>
@@ -797,6 +803,7 @@
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_NAME" /> ನಲ್ಲಿ ಇರುವ <ph name="PEPPER_PLUGIN_DOMAIN" />, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗೆ ಪ್ರವೇಶಿಸಲು ಬಯಸುತ್ತದೆ</translation>
 <translation id="2178614541317717477">CA ಹೊಂದಾಣಿಕೆ</translation>
 <translation id="218070003709087997">ಎಷ್ಟು ಪ್ರತಿಗಳನ್ನು ಮುದ್ರಿಸಬೇಕೆಂದು (1 ರಿಂದ 999) ಸೂಚಿಸಲು ಸಂಖ್ಯೆಯನ್ನು ಬಳಸಿ.</translation>
+<translation id="2182058453334755893">ನಿಮ್ಮ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ</translation>
 <translation id="2184515124301515068">ಯಾವ ಸೈಟ್‌ಗಳು ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡಬೇಕು ಎಂಬುದನ್ನು Chrome ಆಯ್ಕೆ ಮಾಡಲಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="2187895286714876935">ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರದ ಆಮದು ದೋಷ</translation>
 <translation id="2187906491731510095">ವಿಸ್ತರಣೆಗಳನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ</translation>
@@ -869,6 +876,7 @@
 <translation id="2270450558902169558"><ph name="DOMAIN" /> ಡೊಮೇನ್‌ನಲ್ಲಿನ ಯಾವುದೇ ಸಾಧನದೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ</translation>
 <translation id="2270627217422354837">ಡೊಮೇನ್‌ಗಳಲ್ಲಿನ ಯಾವುದೇ ಸಾಧನದೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ: <ph name="DOMAINS" /></translation>
 <translation id="2272570998639520080">ಮಾರ್ಟಿನಿ ಗಾಜು</translation>
+<translation id="2273119997271134996">ಡಾಕ್ ವೀಡಿಯೊ-ಪೋರ್ಟ್ ಸಮಸ್ಯೆಯಿದೆ</translation>
 <translation id="2276503375879033601">ಇನ್ನಷ್ಟು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="2277255602909579701">ಎಲ್ಲ ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾ</translation>
 <translation id="2277769717710009150">{COUNT,plural, =1{1 ಐಟಂ ನಕಲಿಸಲಾಗಿದೆ}one{# ಐಟಂಗಳನ್ನು ನಕಲಿಸಲಾಗಿದೆ}other{# ಐಟಂಗಳನ್ನು ನಕಲಿಸಲಾಗಿದೆ}}</translation>
@@ -961,6 +969,7 @@
 <translation id="2423578206845792524">ಇದರಂತೆ ಇಮೇಜ್ ಅನ್ನು ಉ&amp;ಳಿಸಿ...</translation>
 <translation id="2428510569851653187">ಟ್ಯಾಬ್ ಕ್ರ್ಯಾಶ್ ಆದಾಗ ನೀವೇನು ಮಾಡುತ್ತಿದ್ದಿರಿ ಎಂಬುದನ್ನು ವಿವರಿಸಿ</translation>
 <translation id="2431027948063157455">Google ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
+<translation id="243242775089461296">ಈ ಸೈಟ್‌ಗಾಗಿ ಮೂರನೇ-ವ್ಯಕ್ತಿ ಕುಕೀ ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="2432753757290432042">Linux (ಬೀಟಾ) ಅಪ್‌ಡೇಟ್‌‌ ಮಾಡುವ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="2433452467737464329">ಪುಟವನ್ನು ಸ್ವಯಂ ರಿಫ್ರೆಶ್ ಮಾಡಲು URL ನಲ್ಲಿ ಪ್ರಶ್ನಾವಳಿ ಪ್ಯಾರಾಮೀಟರ್ ಸೇರಿಸಿ: chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433507940547922241">ಗೋಚರತೆ</translation>
@@ -1051,6 +1060,7 @@
 <translation id="2534460670861217804">ಸುರಕ್ಷಿತ HTTP ಪ್ರಾಕ್ಸಿ</translation>
 <translation id="253557089021624350">ಎಣಿಕೆಯನ್ನು ಚಾಲ್ತಿಯಲ್ಲಿರಿಸಿ</translation>
 <translation id="2535799430745250929">ಯಾವುದೇ ಸೆಲ್ಯುಲರ್ ನೆಟ್‌ವರ್ಕ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ</translation>
+<translation id="2536052711541161459">ಪಾಯಿಂಟರ್ ವೇಗವರ್ಧನೆ</translation>
 <translation id="2537395079978992874"><ph name="ORIGIN" /> ಕೆಳಗಿನ ಫೈಲ್‌ಗಳು ಮತ್ತು ಫೋಲ್ಡರ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ಎಡಿಟ್ ಮಾಡಬಹುದು</translation>
 <translation id="2538361623464451692">ಸಿಂಕ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="2540449034743108469">ವಿಸ್ತರಣೆ ಚಟುವಟಿಕೆಗಳನ್ನು ಆಲಿಸಲು "ಪ್ರಾರಂಭಿಸಿ" ಒತ್ತಿರಿ</translation>
@@ -1271,6 +1281,7 @@
 <translation id="2849936225196189499">ಗಂಭೀರ</translation>
 <translation id="2850541429955027218">ಥೀಮ್ ಸೇರಿಸು</translation>
 <translation id="2851634818064021665">ಈ ಸೈಟ್‌ ಗೆ ಭೇಟಿ ನೀಡಲು ನಿಮ್ಮಗೆ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation>
+<translation id="2854896010770911740">ಮೂರನೇ-ವ್ಯಕ್ತಿ ಕುಕೀಗಳನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
 <translation id="2858138569776157458">ಟಾಪ್ ಸೈಟ್</translation>
 <translation id="2859806420264540918">ಅತಿಕ್ರಮಣಕಾರಿಯಾಗಿರುವ ಅಥವಾ ತಪ್ಪುದಾರಿಗೆಳೆಯುವ ಜಾಹೀರಾತುಗಳನ್ನು ಈ ಸೈಟ್ ತೋರಿಸುತ್ತದೆ.</translation>
 <translation id="2861301611394761800">ಸಿಸ್ಟಂ ಅಪ್‌ಡೇಟ್‌‌ ಪೂರ್ಣಗೊಂಡಿದೆ. ದಯವಿಟ್ಟು ಸಿಸ್ಟಂ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ.</translation>
@@ -1432,6 +1443,7 @@
 <translation id="310671807099593501">ಸೈಟ್‌ ಬ್ಲೂಟೂತ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation>
 <translation id="3115147772012638511">ಕ್ಯಾಷ್‌ಗಾಗಿ ನಿರೀಕ್ಷಿಸುತ್ತಿದೆ...</translation>
 <translation id="3115580024857770654">ಎಲ್ಲವನ್ನೂ ಕುಗ್ಗಿಸಿ</translation>
+<translation id="3117362587799608430">ಡಾಕ್ ಸಂಪೂರ್ಣವಾಗಿ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ</translation>
 <translation id="3118319026408854581"><ph name="PRODUCT_NAME" /> ಸಹಾಯ</translation>
 <translation id="3120430004221004537">ನೀಡಿರುವ ಕಾರ್ಯಾಚರಣೆಗೆ ಈ ಸಾಧನದಲ್ಲಿ ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಸಾಕಷ್ಟಿಲ್ಲ: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="3121793941267913344">ಈ <ph name="IDS_SHORT_PRODUCT_NAME" /> ಸಾಧನವನ್ನು ಮರುಹೊಂದಿಸಿ</translation>
@@ -1440,6 +1452,7 @@
 <translation id="3124111068741548686">ಬಳಕೆದಾರರ ನಿರ್ವಹಣೆಗಳು</translation>
 <translation id="3126026824346185272">Ctrl</translation>
 <translation id="3127156390846601284">ಎಲ್ಲಾ ಸೈಟ್‌ಗಳಲ್ಲಿ ತೋರಿಸಲು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾದ ಯಾವುದೇ ಡೇಟಾವನ್ನು ಇದು ಅಳಿಸುತ್ತದೆ. ನೀವು ಮುಂದುವರಿಸಲು ಬಯಸುತ್ತೀರಾ?</translation>
+<translation id="3127860049873093642">ಚಾರ್ಜಿಂಗ್ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಸಮಸ್ಯೆಗಳನ್ನು ತಡೆಯಲು, ಹೊಂದಿಕೆಯಾಗುವ Dell ಅಥವಾ USB ಟೈಪ್-C ಪವರ್ ಅಡಾಪ್ಟರ್ ಬಳಸಿ.</translation>
 <translation id="3129173833825111527">ಎಡ ಅಂಚು</translation>
 <translation id="3130528281680948470">ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಹೊಂದಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಾ ಬಳಕೆದಾರ ಖಾತೆಗಳು ಮತ್ತು ಸ್ಥಳೀಯ ಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. ಇದನ್ನು ರದ್ದುಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="313205617302240621">ಪಾಸ್‌ವರ್ಡ್ ಮರೆತಿರುವಿರಾ?</translation>
@@ -1537,6 +1550,7 @@
 <translation id="3281892622610078515">ಕ್ವಾರಂಟೈನ್ ಫೋಲ್ಡರ್‌ಗೆ ಸರಿಸಲಾಗುವ ಫೈಲ್‍ಗಳು ಮತ್ತು ಪ್ರೋಗ್ರಾಂಗಳು:</translation>
 <translation id="3282568296779691940">Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="3285322247471302225">ಹೊಸ &amp;ಟ್ಯಾಬ್</translation>
+<translation id="328571385944182268">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸುವುದೇ?</translation>
 <translation id="3286737518123001369">ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಿರುವ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅಳಿಸಿ</translation>
 <translation id="3288047731229977326">ಡೆವಲಪರ್ ಮೋಡ್‌ನಲ್ಲಿ ಚಾಲನೆಯಾಗುವ ವಿಸ್ತರಣೆಗಳು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗೆ ಹಾನಿಮಾಡಬಹುದು. ನೀವು ಡೆವಲಪರ್ ಆಗಿರದಿದ್ದರೇ, ಸುರಕ್ಷಿತವಾಗಿರಲು ಡೆವಲಪರ್ ಮೋಡ್‌ನಲ್ಲಿ ಈ ವಿಸ್ತರಣೆಗಳ ಚಾಲನೆಯನ್ನು ನೀವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕು.</translation>
 <translation id="3289856944988573801">ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಲು, ದಯವಿಟ್ಟು Ethernet ಅಥವಾ ವೈ-ಫೈ ಬಳಸಿ.</translation>
@@ -1656,6 +1670,7 @@
 <translation id="346431825526753"><ph name="CUSTODIAN_EMAIL" /> ಅವರು ನಿರ್ವಹಿಸುವ ಮಕ್ಕಳಿಗೆ ಖಾತೆಯಾಗಿದೆ.</translation>
 <translation id="3468999815377931311">Android ಫೋನ್</translation>
 <translation id="3470442499439619530">ಈ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
+<translation id="3471876058939596279">HDMI ಮತ್ತು USB ಟೈಪ್-C ಪೋರ್ಟ್‌ಗಳನ್ನು ವೀಡಿಯೊಗಾಗಿ ಒಂದೇ ಸಮಯದಲ್ಲಿ ಬಳಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಬೇರೆ ವೀಡಿಯೊ ಪೋರ್ಟ್ ಬಳಸಿ.</translation>
 <translation id="3473479545200714844">ಪರದೆ ವರ್ಧಕ</translation>
 <translation id="3475843873335999118">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಫಿಂಗರ್‌‌ಫ್ರಿಂಟ್‌ ಇನ್ನೂ ಗುರುತಿಸಲಾಗಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ.</translation>
 <translation id="3476303763173086583">ಬಳಕೆ ಮತ್ತು ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಿ. ಡಯಾಗ್ನಾಸ್ಟಿಕ್, ಸಾಧನ, ಹಾಗೂ ಆ್ಯಪ್ ಬಳಕೆಯ ಡೇಟಾವನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸುವ ಮೂಲಕ ನಿಮ್ಮ ಮಗುವಿನ Android ಅನುಭವವನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದಕ್ಕೆ ಸಹಾಯ ಮಾಡಿ. ಈ ಡೇಟಾವನ್ನು ನಿಮ್ಮ ಮಗುವನ್ನು ಗುರುತಿಸುವುದಕ್ಕೆ ಬಳಸುವುದಿಲ್ಲ, ಹಾಗೂ ಇದು ಸಿಸ್ಟಮ್ ಮತ್ತು ಆ್ಯಪ್ ಸ್ಥಿರತೆಗೆ, ಹಾಗೂ ಇತರ ಸುಧಾರಣೆಗಳಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಕೆಲವು ಒಟ್ಟುಗೂಡಿಸಿದ ಡೇಟಾವು, Google ಆ್ಯಪ್‌ಗಳಿಗೆ ಮತ್ತು ಪಾಲುದಾರರಿಗೂ ಸಹ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, Android ಡೆವಲಪರ್‌ಗಳು. ಈ <ph name="BEGIN_LINK1" />ಸೆಟ್ಟಿಂಗ್<ph name="END_LINK1" />ಅನ್ನು ಮಾಲೀಕರೇ ಜಾರಿಗೊಳಿಸುತ್ತಾರೆ. ಈ ಸಾಧನದ ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಮತ್ತು ಬಳಕೆಯ ಡೇಟಾವನ್ನು Google ಗೆ ಕಳುಹಿಸಲು ಮಾಲೀಕರು ಆಯ್ಕೆ ಮಾಡಬಹುದು. ನಿಮ್ಮ ಮಗುವಿಗಾಗಿ ಹೆಚ್ಚುವರಿ ವೆಬ್‌ ಮತ್ತು ಆ್ಯಪ್ ಚಟುವಟಿಕೆ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆನ್‌ ಮಾಡಿದ್ದಲ್ಲಿ, ಈ ಡೇಟಾವು ಅವರ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲ್ಪಡಬಹುದು. <ph name="BEGIN_LINK2" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK2" /></translation>
@@ -1753,6 +1768,7 @@
 <translation id="3603622770190368340">ನೆಟ್‌ವರ್ಕ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ</translation>
 <translation id="3605780360466892872">ಬಟನ್‌ಡೌನ್</translation>
 <translation id="3608576286259426129">ಬಳಕೆದಾರರ ಚಿತ್ರದ ಪೂರ್ವವೀಕ್ಷಣೆ</translation>
+<translation id="3610369246614755442">ಡಾಕ್ ಫ್ಯಾನ್‌ಗೆ ದುರಸ್ತಿಯ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="361106536627977100">ಫ್ಲ್ಯಾಶ್ ಡೇಟಾ</translation>
 <translation id="3612673635130633812">&lt;a href="<ph name="URL" />"&gt;<ph name="EXTENSION" />&lt;/a&gt; ನಿಂದ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="3613134908380545408"><ph name="FOLDER_NAME" /> ತೋರಿಸು</translation>
@@ -1764,6 +1780,7 @@
 <translation id="3624567683873126087">ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ ಮತ್ತು Google ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="3625258641415618104">ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="3625481642044239431">ಅಮಾನ್ಯ ಫೈಲ್ ಆಯ್ಕೆಯಾಗಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
+<translation id="3626296069957678981">ಈ Chromebook ಅನ್ನು ಚಾರ್ಜ್ ಮಾಡಲು, ಹೊಂದಿಕೆಯಾಗುವ Dell ಬ್ಯಾಟರಿಯೊಂದನ್ನು ಬಳಸಿ.</translation>
 <translation id="3627320433825461852">1 ನಿಮಿಷಕ್ಕಿಂತಲೂ ಕಡಿಮೆ ಬಾಕಿ ಉಳಿದಿದೆ</translation>
 <translation id="3627588569887975815">ಲಿಂಕ್‌ ಅನ್ನು ಅಜ್ಞಾ&amp;ತ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
 <translation id="3627671146180677314">Netscape ಪ್ರಮಾಣಪತ್ರ ಅಪ್‌ಡೇಟ್‌‌ ಸಮಯ</translation>
@@ -1860,6 +1877,7 @@
 <translation id="3748026146096797577">ಸಂಪರ್ಕಗೊಳಿಸಿಲ್ಲ</translation>
 <translation id="3752582316358263300">ಸರಿ...</translation>
 <translation id="3752673729237782832">ನನ್ನ ಸಾಧನಗಳು</translation>
+<translation id="3753033997400164841">ಒಮ್ಮೆ ಸಂಗ್ರಹಿಸಿ. ಎಲ್ಲೆಡೆ ಬಳಸಿ</translation>
 <translation id="3755411799582650620">ನಿಮ್ಮ <ph name="PHONE_NAME" /> ಫೋನ್ ಈ <ph name="DEVICE_TYPE" /> ವನ್ನು ಸಹ ಅನ್‌ಲಾಕ್ ಮಾಡಬಹುದು.</translation>
 <translation id="375636864092143889">ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಸೈಟ್‌ ಬಳಸುತ್ತಿದೆ</translation>
 <translation id="3757733214359997190">ಯಾವುದೇ ಸೈಟ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation>
@@ -2152,7 +2170,6 @@
 <translation id="4146026355784316281">ಯಾವಾಗಲೂ ಸಿಸ್ಟಂ ವೀಕ್ಷಕದ ಜೊತೆಗೆ ತೆರೆಯಿರಿ</translation>
 <translation id="4146785383423576110">ಮರುಹೊಂದಿಸಿ ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸಿ</translation>
 <translation id="4147911968024186208">ಪುನಃ ಪ್ರಯತ್ನಿಸಿ. ಈ ದೋಷವು ಮತ್ತೊಮ್ಮೆ ಕಂಡುಬಂದರೆ, ನಿಮ್ಮ ಬೆಂಬಲ ಪ್ರತಿನಿಧಿಯನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">ಡಿಸ್‌ಪ್ಲೇ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ಟ್ಯಾಬ್}one{# ಟ್ಯಾಬ್‌ಗಳು}other{# ಟ್ಯಾಬ್‌ಗಳು}}</translation>
 <translation id="4154664944169082762">ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ಗಳು</translation>
@@ -2193,6 +2210,7 @@
 <translation id="4232375817808480934">Kerberos ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</translation>
 <translation id="4235200303672858594">ಸಂಪೂರ್ಣ ಪರದೆ</translation>
 <translation id="4235965441080806197">ಸೈನ್‌ ಇನ್ ಮಾಡುವುದನ್ನು ರದ್ದುಮಾಡಿ</translation>
+<translation id="4242145785130247982">ಬಹು ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation>
 <translation id="4242533952199664413">ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆ</translation>
 <translation id="4242577469625748426">ಸಾಧನದಲ್ಲಿ ನೀತಿಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">ಇನ್ನಷ್ಟು ಸ್ಟೈಲಸ್ ಅಪ್ಲಿಕೇಶನ್‌‌ಗಳನ್ನು ಹುಡುಕಿ</translation>
@@ -2215,6 +2233,7 @@
 <translation id="4267953847983678297">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೆಲ್ಯುಲರ್ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ</translation>
 <translation id="4268025649754414643">ಕೀ ಎನ್ಸಿಫರ್ಮೆಂಟ್</translation>
 <translation id="4270393598798225102">ಆವೃತ್ತಿ <ph name="NUMBER" /></translation>
+<translation id="4270615291506829403">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಲು</translation>
 <translation id="4275663329226226506">ಮಾದ್ಯಮ</translation>
 <translation id="4275830172053184480">ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="4278101229438943600">ನಿಮ್ಮ ಅಸಿಸ್ಟೆಂಟ್ ಸಿದ್ಧವಾಗಿದೆ</translation>
@@ -2352,6 +2371,7 @@
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> ಮೂಲಕ ಸಂಚಾಲಿತಗೊಂಡಿದೆ</translation>
 <translation id="4514610446763173167">ಪ್ಲೇ ಮಾಡಲು ಅಥವಾ ವಿರಾಮಗೊಳಿಸಲು ವೀಡಿಯೊವನ್ನು ಟಾಗಲ್ ಮಾಡಿ</translation>
 <translation id="451515744433878153">ತೆಗೆದುಹಾಕು</translation>
+<translation id="4515872537870654449">ದುರಸ್ತಿಗಾಗಿ ಡೆಲ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ. ಫ್ಯಾನ್ ಕೆಲಸ ಮಾಡದಿದ್ದರೆ ಡಾಕ್ ಸ್ಥಗಿತಗೊಳ್ಳುತ್ತದೆ.</translation>
 <translation id="4519935350946509010">ಸಂಪರ್ಕ ದೋಷ.</translation>
 <translation id="4520385623207007473">ಬಳಕೆಯಲ್ಲಿರುವ ಕುಕೀಗಳು</translation>
 <translation id="452039078290142656"><ph name="VENDOR_NAME" /> ರಿಂದ ಅಪರಿಚಿತ ಸಾಧನಗಳು</translation>
@@ -2635,6 +2655,7 @@
 <translation id="4932733599132424254">ದಿನಾಂಕ</translation>
 <translation id="4933484234309072027"><ph name="URL" /> ನಲ್ಲಿ ಎಂಬೆಡ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="493571969993549666">ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿ</translation>
+<translation id="4939805055470675027"><ph name="CARRIER_NAME" /> ಗೆ ಸಂಪರ್ಕಪಡಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="4941246025622441835">ಎಂಟರ್‌ಪ್ರೈಸ್ ನಿರ್ವಹಣೆಗಾಗಿ ಸಾಧನವನ್ನು ದಾಖಲಿಸುತ್ತಿರುವಾಗ ಈ ಸಾಧನದ ನಿಯೋಜನೆಯನ್ನು ಬಳಸಿ:</translation>
 <translation id="4941627891654116707">ಫಾಂಟ್ ಗಾತ್ರ</translation>
 <translation id="494286511941020793">ಪ್ರಾಕ್ಸಿ ಕಾನ್ಫಿಗರೇಶನ್ ಸಹಾಯ</translation>
@@ -2649,6 +2670,7 @@
 <translation id="4957949153200969297"><ph name="IDS_SHORT_PRODUCT_NAME" /> ಸಿಂಕ್‌ಗೆ ಸಂಬಂಧಿಸಿದ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಮಾತ್ರ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="4959262764292427323">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ. ಇದರಿಂದ ನೀವು ಅವುಗಳನ್ನು ಯಾವುದೇ ಸಾಧನದಲ್ಲಿ ಬಳಸಬಹುದು.</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">ಈ ಆ್ಯಪ್ ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದ್ದಾರೆ.</translation>
 <translation id="4964455510556214366">ಹೊಂದಾಣಿಕೆ</translation>
 <translation id="4964673849688379040">ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="4965808351167763748">Hangouts ಸಭೆಯನ್ನು ಚಾಲನೆ ಮಾಡಲು ಈ ಸಾಧನವನ್ನು ಸೆಟಪ್‌ ಮಾಡಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</translation>
@@ -2659,6 +2681,7 @@
 <translation id="4973307593867026061">ಮುದ್ರಕಗಳನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="4973325300212422370">{NUM_TABS,plural, =1{ಸೈಟ್‌ ಅನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}one{ಸೈಟ್‌ಗಳನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}other{ಸೈಟ್‌ಗಳನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}}</translation>
 <translation id="4974733135013075877">ನಿರ್ಗಮನ ಮತ್ತು ಚೈಲ್ಡ್‌ಲಾಕ್</translation>
+<translation id="4976009197147810135">ಲಂಬವಾಗಿ ವಿಭಜಿಸಿ</translation>
 <translation id="4976795213394241669">{0,plural, =0{ಈಗಲೇ ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}=1{1 ಸೆಕೆಂಡಿನ ಒಳಗೆ ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}one{# ಸೆಕೆಂಡುಗಳ ಒಳಗೆ ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}other{# ಸೆಕೆಂಡುಗಳ ಒಳಗೆ ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}}</translation>
 <translation id="4977942889532008999">ಪ್ರವೇಶ ದೃಢೀಕರಿಸಿ</translation>
 <translation id="4980805016576257426">ಈ ವಿಸ್ತರಣೆಯು ಮಾಲ್‌‌ವೇರ್ ಅನ್ನು ಹೊಂದಿದೆ.</translation>
@@ -2768,7 +2791,9 @@
 <translation id="5142961317498132443">ಪ್ರಮಾಣೀಕರಣ</translation>
 <translation id="5143374789336132547">ನೀವು ಹೋಮ್‌ನ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು "<ph name="EXTENSION_NAME" />" ವಿಸ್ತರಣೆಯು ಬದಲಾಯಿಸಿದೆ.</translation>
 <translation id="5143712164865402236">ಪೂರ್ಣ ಪರದೆಯನ್ನು ನಮೂದಿಸಿ</translation>
+<translation id="5145461783043820456">ಮೂರನೇ-ವ್ಯಕ್ತಿ ಕುಕೀ ನಿರ್ಬಂಧಿಸುವಿಕೆ ಆನ್ ಆಗಿದೆ</translation>
 <translation id="514575469079499857">ಸ್ಥಳವನ್ನು ನಿರ್ಧರಿಸಲು ನಿಮ್ಮ ಐಪಿ ವಿಳಾಸವನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)</translation>
+<translation id="5146995429444047494"><ph name="ORIGIN" /> ಗಾಗಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="5150254825601720210">Netscape ಪ್ರಮಾಣಪತ್ರ SSL ಸರ್ವರ್ ಹೆಸರು</translation>
 <translation id="5151354047782775295">ಡಿಸ್ಕ್ ಸ್ಥಳಾವಕಾಶವನ್ನು ಮುಕ್ತಗೊಳಿಸಿ ಅಥವಾ ಆಯ್ಕೆಮಾಡಲಾದ ಡೇಟಾವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ</translation>
 <translation id="5153234146675181447">ಫೋನ್ ಅನ್ನು ಮರೆತುಬಿಡಿ</translation>
@@ -2903,6 +2928,7 @@
 <translation id="5360150013186312835">ಪರಿಕರಪಟ್ಟಿಯಲ್ಲಿ ತೋರಿಸು</translation>
 <translation id="5362741141255528695">ಖಾಸಗಿ ಕೀಲಿ ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ.</translation>
 <translation id="5363109466694494651">ಪವರ್‌ವಾಶ್ ಮತ್ತು ಹಿಂದಿರುಗಿಸು</translation>
+<translation id="5365716706805792666">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಭಾಗವಾಗಿತ್ತೇ ಎಂದು Google ಪರಿಶೀಲಿಸಬಹುದು. ನಿಮ್ಮ Google ಖಾತೆಯೊಂದಿಗೆ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ ಇದನ್ನು ಆನ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation>
 <translation id="5365881113273618889">ನೀವು ಆಯ್ಕೆ ಮಾಡಿದ ಫೋಲ್ಡ‌ರ್‌ನಲ್ಲಿ ಸೂಕ್ಷ್ಮವಾದ ಫೈಲ್‌ಗಳಿವೆ. ಈ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಬರೆಯಲು "<ph name="APP_NAME" />" ಗೆ ಶಾಶ್ವತ ಪ್ರವೇಶ ಒದಗಿಸಲು ನೀವು ಖಂಡಿತವಾಗಿಯೂ ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="5367091008316207019">ಓದುತ್ತಿರುವ ಫೈಲ್..</translation>
 <translation id="5368720394188453070">ನಿಮ್ಮ ಫೋನ್ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ಪ್ರವೇಶಿಸಲು ಅದನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ.</translation>
@@ -3035,9 +3061,11 @@
 <translation id="5541694225089836610">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಕ್ರಿಯೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation>
 <translation id="5542132724887566711">ಪ್ರೊಫೈಲ್</translation>
 <translation id="5542750926112347543"><ph name="DOMAIN" /> ನ ಕುಕೀಸ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
+<translation id="5542949973455282971"><ph name="CARRIER_NAME" /> ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="5543983818738093899">ಸ್ಥಿತಿಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="554517032089923082">GTC</translation>
 <translation id="5546865291508181392">ಹುಡುಕಿ</translation>
+<translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ಮತ್ತು ಇನ್ನೂ 1 ಇತರ ಟ್ಯಾಬ್}one{"<ph name="TAB_TITLE" />" ಮತ್ತು ಇನ್ನೂ # ಇತರ ಟ್ಯಾಬ್‌ಗಳು}other{"<ph name="TAB_TITLE" />" ಮತ್ತು ಇನ್ನೂ # ಇತರ ಟ್ಯಾಬ್‌ಗಳು}}</translation>
 <translation id="5551573675707792127">ಕೀಬೋರ್ಡ್ ಮತ್ತು ಪಠ್ಯ ಇನ್‌ಪುಟ್</translation>
 <translation id="5553089923092577885">ಪ್ರಮಾಣಪತ್ರ ನೀತಿ ಮ್ಯಾಪಿಂಗ್‌ಗಳು</translation>
 <translation id="5554489410841842733">ಈ ವಿಸ್ತರಣೆಯು ಪ್ರಸ್ತುತ ಪುಟದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದಾದಾಗ ಈ ಐಕಾನ್ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ.</translation>
@@ -3498,7 +3526,6 @@
 <translation id="6212039847102026977">ಸುಧಾರಿತ ನೆಟ್‌ವರ್ಕ್ ಗುಣಲಕ್ಷಣಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="6212168817037875041">ಡಿಸ್‌ಪ್ಲೇ ಅನ್ನು ಆಫ್‌ ಮಾಡಿ</translation>
 <translation id="6212752530110374741">ಇಮೇಲ್ ಲಿಂಕ್</translation>
-<translation id="6214642087594370545">ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಭಾಗವಾಗಿರುವ ಅಸುರಕ್ಷಿತ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನೀವು ಬಳಸುವಾಗ ಎಚ್ಚರಿಕೆಯನ್ನು ತೋರಿಸಿ. ಇದು ಸೈನ್ ಇನ್ ಮಾಡಿದ ಬಳಕೆದಾರರಿಗೆ ಮಾತ್ರ ಲಭ್ಯವಿದೆ.</translation>
 <translation id="6216696360484424239">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೈನ್‌ ಇನ್ ಮಾಡಿ</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿದೆ. ಅದನ್ನು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="6220413761270491930">ವಿಸ್ತರಣೆ ಲೋಡ್ ಮಾಡುವಲ್ಲಿ ದೋಷ</translation>
@@ -3607,6 +3634,7 @@
 <translation id="6384275966486438344">ನಿಮ್ಮ ಹುಡುಕಾಟದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಹೀಗೆ ಬದಲಾಯಿಸಿ: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">ಸೈಟ್‌ಗಳು ಕುಕೀ ಡೇಟಾವನ್ನು ಉಳಿಸಬಹುದು ಮತ್ತು ಓದಬಹುದು</translation>
 <translation id="6386099547750337629">ಇದು ಅನಿರೀಕ್ಷಿತವಾಗಿದ್ದರೆ, ಬೆಂಬಲವನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
+<translation id="6387674443318562538">ಲಂಬವಾಗಿ ವಿಭಜಿಸಿ</translation>
 <translation id="6388429472088318283">ಭಾಷೆಗಳನ್ನು ಹುಡುಕಾಡಿ</translation>
 <translation id="6390799748543157332">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ತೆರೆದಿರುವ ಎಲ್ಲ ಅತಿಥಿ ವಿಂಡೊಗಳನ್ನು ಮುಚ್ಚಿದ ನಂತರ ಈ ವಿಂಡೊದಲ್ಲಿ ನೀವು ವೀಕ್ಷಿಸುವ ಪುಟಗಳು ಬ್ರೌಸರ್ ಇತಿಹಾಸದಲ್ಲಿ ಗೋಚರಿಸುವುದಿಲ್ಲ ಮತ್ತು ಅವುಗಳು ಕುಕೀಗಳಂತಹ ಇತರ ಗುರುತುಗಳನ್ನು ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಬಿಡುವುದಿಲ್ಲ. ಆದಾಗ್ಯೂ, ನೀವು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಯಾವುದೇ ಫೈಲ್‌ಗಳನ್ನು ರಕ್ಷಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="6390994422085833176">ಸೆಟಪ್ ಮಾಡಿದ ನಂತರ ಸಿಂಕ್ ಮತ್ತು ವೈಯಕ್ತೀಕರಣದ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
@@ -3640,6 +3668,7 @@
 <translation id="6419546358665792306">ಲೋಡ್ ಅನ್‌ಪ್ಯಾಕ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="642469772702851743">ಈ ಸಾಧನವು (SN: <ph name="SERIAL_NUMBER" />) ಅದರ ಮಾಲೀಕರಿಂದ ಲಾಕ್ ಮಾಡಲ್ಪಟ್ಟಿದೆ.</translation>
 <translation id="6426200009596957090">ChromeVox ಸೆಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
+<translation id="6428450836711225518">ನಿಮ್ಮ ದೂರವಾಣಿ ಸಂಖ್ಯೆಯನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="6429384232893414837">ಅಪ್‌ಡೇಟ್ ದೋಷ</translation>
 <translation id="6430814529589430811">Base64-ಎನ್‌ಕೋಡ್ ಮಾಡಿದ ASCII, ಏಕ ಪ್ರಮಾಣಪತ್ರ</translation>
 <translation id="6431347207794742960">ಈ ಕಂಪ್ಯೂಟರ್‌ನ ಎಲ್ಲ ಬಳಕೆದಾರರಿಗಾಗಿ <ph name="PRODUCT_NAME" /> ಸ್ವಯಂಚಾಲಿತ ನವೀಕರಣಗಳನ್ನು ಹೊಂದಿಸುತ್ತದೆ.</translation>
@@ -3853,6 +3882,7 @@
 <translation id="6769712124046837540">ಮುದ್ರಕ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="6770664076092644100">NFC ಮೂಲಕ ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="6771503742377376720">ಪ್ರಮಾಣಪತ್ರ ಪ್ರಾಧಿಕಾರವಾಗಿದೆ</translation>
+<translation id="6775163072363532304">ಲಭ್ಯವಿರುವ ಸಾಧನಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ.</translation>
 <translation id="6777817260680419853">ಮರುನಿರ್ದೇಶಿಸುವಿಕೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="6778737459546443941">ನಿಮ್ಮ ಪೋಷಕರು ಇನ್ನೂ ಇದನ್ನು ಅಂಗೀಕರಿಸಿಲ್ಲ</translation>
 <translation id="677965093459947883">ತುಂಬಾ ಚಿಕ್ಕದು</translation>
@@ -3863,6 +3893,7 @@
 <translation id="6786747875388722282">ವಿಸ್ತರಣೆಗಳು</translation>
 <translation id="6787839852456839824">ಕೀಬೋರ್ಡ್ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳು</translation>
 <translation id="6788210894632713004">ಬಿಚ್ಚಿದ ವಿಸ್ತರಣೆ</translation>
+<translation id="6789592661892473991">ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿ</translation>
 <translation id="6790428901817661496">ಪ್ಲೇ ಮಾಡು</translation>
 <translation id="6790497603648687708"><ph name="EXTENSION_NAME" /> ಅನ್ನು ದೂರದಿಂದಲೇ ಸೇರಿಸಲಾಗಿದೆ</translation>
 <translation id="6790820461102226165">ವ್ಯಕ್ತಿಯನ್ನು ಸೇರಿಸಿ...</translation>
@@ -4245,6 +4276,7 @@
 <translation id="7334190995941642545">Smart Lock ಪ್ರಸ್ತುತ ಲಭ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="7334274148831027933">ಡಾಕ್ ಮಾಡಲಾದ ವರ್ಧಕವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="7335974957018254119">ಈ ಭಾಷೆಗಳಿಗಾಗಿ ಕಾಗುಣಿತ ಪರೀಕ್ಷೆಯನ್ನು ಬಳಸಿ</translation>
+<translation id="7336799713063880535">ಅಧಿಸೂಚನೆ ನಿರ್ಬಂಧಿಸಿದೆ</translation>
 <translation id="7338630283264858612">ಸಾಧನದ ಕ್ರಮ ಸಂಖ್ಯೆ ಅಮಾನ್ಯವಾಗಿದೆ.</translation>
 <translation id="7339763383339757376">PKCS #7, ಏಕ ಪ್ರಮಾಣಪತ್ರ</translation>
 <translation id="7339785458027436441">ಬೆರಳಚ್ಚಿಸುವ ಸಮಯದಲ್ಲಿ ಕಾಗುಣಿತ ಪರೀಕ್ಷಿಸು</translation>
@@ -4313,6 +4345,7 @@
 <translation id="7441830548568730290">ಇತರ ಬಳಕೆದಾರರು</translation>
 <translation id="7442465037756169001">ನಿಮ್ಮ Hangouts Meet hardware ಸೆಟಪ್‌ಗೆ ಎಲ್ಲ ರೀತಿಯಲ್ಲಿಯೂ ಸಿದ್ಧವಾಗಿದೆ.</translation>
 <translation id="744341768939279100">ಹೊಸ ಪ್ರೊಫೈಲ್ ರಚಿಸಿ</translation>
+<translation id="7443806024147773267">ನಿಮ್ಮ Google ಖಾತೆಗೆ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗಲೆಲ್ಲಾ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳಿಗೆ ಪ್ರವೇಶ ಪಡೆಯಿರಿ</translation>
 <translation id="7444046173054089907">ಈ ಸೈಟ್ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="7448430327655618736">ಆ್ಯಪ್‌ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ</translation>
@@ -4357,6 +4390,7 @@
 <translation id="7506541170099744506">ಎಂಟರ್‌ಪ್ರೈಸ್ ನಿರ್ವಹಣೆಗಾಗಿ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ದಾಖಲಿಸಲಾಗಿದೆ.</translation>
 <translation id="7507930499305566459">ಸ್ಥಿತಿ ಪ್ರತಿಕ್ರಿಯೆ ನೀಡುವವರ ಪ್ರಮಾಣಪತ್ರ</translation>
 <translation id="7508054832109420082">ಪ್ರಿಂಟರ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡಿ</translation>
+<translation id="7510943789645525906">ನೀವು ಬಳಸುವ ಪಾಸ್‌ವರ್ಡ್ ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಭಾಗವಾಗಿದ್ದರೆ ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ</translation>
 <translation id="7513029293694390567">ಸಂಗ್ರಹಿಸಲಾದ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡಿ. ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವ ಮೊದಲು ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮಗೆ ದೃಢೀಕರಿಸಲು ಕೇಳಲಾಗುವುದು.</translation>
 <translation id="7514365320538308">ಡೌನ್‌ಲೋಡ್</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4422,6 +4456,7 @@
 <translation id="7625568159987162309">ಸೈಟ್‌ಗಳಾದ್ಯಂತ ಸಂಗ್ರಹಿಸಲಾದ ಅನುಮತಿಗಳನ್ನು ಮತ್ತು ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಿ</translation>
 <translation id="7629827748548208700">ಟ್ಯಾಬ್: <ph name="TAB_NAME" /></translation>
 <translation id="7631014249255418691">Linux ಆ್ಯಪ್‌ಗಳು &amp; ಫೈಲ್‌ಗಳನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗಿದೆ</translation>
+<translation id="7631205654593498032">ನಿಮ್ಮ ಸಾಧನಗಳನ್ನು ನೀವು ಸಂಪರ್ಕಪಡಿಸಿದಾಗ, ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಇವುಗಳನ್ನು ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ನೀವು ಒಪ್ಪುತ್ತೀರಿ:</translation>
 <translation id="7631887513477658702">&amp;ಯಾವಾಗಲೂ ಈ ಪ್ರಕಾರದ ಫೈಲ್ ಅನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="7632948528260659758">ಕೆಳಗಿನ ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ನವೀಕರಿಸುವುದಕ್ಕೆ ವಿಫಲವಾಗಿದೆ:</translation>
 <translation id="763632859238619983">ಪಾವತಿ ಹ್ಯಾಂಡ್‌ಲರ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಯಾವುದೇ ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಬೇಡಿ</translation>
@@ -4583,6 +4618,7 @@
     <ph name="BR" />
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />ಗಮನಿಸಿ:<ph name="END_BOLD" /> ಪ್ರಕ್ರಿಯೆಯು ನಡೆಯುವಾಗ ಸಿಸ್ಟಂ ರೀಬೂಟ್ ಆಗುತ್ತದೆ.</translation>
+<translation id="7828731929332799387">ಇದು ಮೂರನೇ-ವ್ಯಕ್ತಿ ಸಂದರ್ಭಗಳಲ್ಲಿ ಲಭ್ಯವಿರುವ ಎಲ್ಲಾ ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ. ನೀವು ಮುಂದುವರಿಯಲು ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="7829298379596169484">ಆಡಿಯೊ ಇನ್‌ಪುಟ್ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="7830594666202422257">Linux ಗೆ ಸಂಪರ್ಕಿಸಿ</translation>
 <translation id="7831491651892296503">ನೆಟ್‌ವರ್ಕ್‌ ಕಾನ್ಫಿಗರ್‌ ಮಾಡುವಲ್ಲಿ ದೋಷ</translation>
@@ -4720,6 +4756,7 @@
 <translation id="8014206674403687691">ಈ ಹಿಂದೆ ಸ್ಥಾಪಿಸಲಾದ ಆವೃತ್ತಿಗೆ ಹಿಂತಿರುಗಲು <ph name="IDS_SHORT_PRODUCT_NAME" /> ಅಸಮರ್ಥವಾಗಿದೆ. ನಿಮ್ಮ ಸಾಧನವನ್ನು ಪವರ್‌ವಾಶ್ ಮಾಡಲು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="8014210335923519270">ಸಿಸ್ಟಂ ಮಾಹಿತಿ ಮತ್ತು ಬಳಕೆಯನ್ನು Google ಗೆ ಕಳುಹಿಸುವ ಮೂಲಕ <ph name="IDS_SHORT_PRODUCT_NAME" />
 ಮತ್ತು ಅದರ ಭದ್ರತೆಯನ್ನು ಸುಧಾರಿಸಿ</translation>
+<translation id="8015780634880457457">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಭಾಗವಾಗಿತ್ತೇ ಎಂದು Google ಪರಿಶೀಲಿಸಬಹುದು</translation>
 <translation id="8016266267177410919">ತಾತ್ಕಾಲಿಕ ಸಂಗ್ರಹ</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">ಶಾರ್ಟ್‌ಕಟ್ ಅನ್ನು ಎಡಿಟ್ ಮಾಡಲಾಗಿದೆ</translation>
@@ -4785,6 +4822,7 @@
 <translation id="810875025413331850">ಯಾವುದೇ ಹತ್ತಿರದ ಸಾಧನಗಳು ಕಂಡುಬಂದಿಲ್ಲ.</translation>
 <translation id="8111155949205007504">ನಿಮ್ಮ iPhone ಮೂಲಕ ಈ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation>
 <translation id="8113043281354018522">ಪರವಾನಗಿ ಪ್ರಕಾರವನ್ನು ಆರಿಸಿ</translation>
+<translation id="8114875720387900039">ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿ</translation>
 <translation id="8116972784401310538">&amp;ಬುಕ್‌ಮಾರ್ಕ್‌ ವ್ಯವಸ್ಥಾಪಕ</translation>
 <translation id="8117620576188476503">ಸ್ಥಿತಿ ಟ್ರೇ ಮೂಲಕ ಸಂಪರ್ಕಗಳು, ಅಪ್‌ಡೇಟ್‌ಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ. ಕೀಬೋರ್ಡ್‌ಗಳಿಂದ ಇಲ್ಲಿ ಪಡೆಯಲು, Alt + Shift + S ಕೀಗಳನ್ನು ಒತ್ತಿರಿ.</translation>
 <translation id="8118076340394175570">ನಿಮ್ಮ ಸಂಸ್ಥೆಗೆ ಈ ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡುವ ಅಗತ್ಯವಿರುತ್ತದೆ</translation>
@@ -4837,6 +4875,7 @@
 <translation id="8188389033983459049">ನಿಮ್ಮ ಸಾಧನದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಮುಂದುವರಿಸಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಿ</translation>
 <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="8191230140820435481">ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ವಿಸ್ತರಣೆಗಳು, ಮತ್ತು ಥೀಮ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation>
+<translation id="819464600477418284">ಈ ಆ್ಯಪ್ Chrome OS ನ ಭಾಗವಾಗಿರುವುದರಿಂದ ಅದನ್ನು ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="8195027750202970175">ಡಿಸ್ಕ್‌ನಲ್ಲಿನ ಗಾತ್ರ</translation>
 <translation id="8198323535106903877">ನಾವು ನಿಮಗಾಗಿ ಆ <ph name="NUMBER_OF_APPS" /> ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡುತ್ತೇವೆ</translation>
 <translation id="8199300056570174101">ನೆಟ್‌ವರ್ಕ್ (ಸೇವೆ) ಮತ್ತು ಸಾಧನದ ಗುಣಲಕ್ಷಣಗಳು</translation>
@@ -4897,6 +4936,7 @@
     <ph name="BEGIN_PARAGRAPH2" />ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಆಫ್ ಮಾಡುವುದರಿಂದ ಸಿಸ್ಟಂ ಅಪ್‌ಡೇಟ್‌ಗಳು ಮತ್ತು ಸುರಕ್ಷತೆಯಂತಹ ಅಗತ್ಯ ಸೇವೆಗಳಿಗೆ ಬೇಕಾದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ಸಾಧನವು ಕಳುಹಿಸುವಾಗ ಅದರ ಸಾಮರ್ಥ್ಯದ ಮೇಲೆ ಪರಿಣಾಮ ಉಂಟಾಗುವುದಿಲ್ಲ.<ph name="END_PARAGRAPH2" />
    <ph name="BEGIN_PARAGRAPH3" />ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಸುಧಾರಿತ &gt; Google ಗೆ ಡಯಾಗ್ನಸ್ಟಿಕ್ ಮತ್ತು ಬಳಕೆಯ ಡೇಟಾವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸಿಗೆ ಹೋಗಿ ಮಾಲೀಕರು ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ನಿಯಂತ್ರಿಸಬಹುದು.<ph name="END_PARAGRAPH3" />
  <ph name="BEGIN_PARAGRAPH4" />ನಿಮ್ಮ ಮಗುವಿಗಾಗಿ ಹೆಚ್ಚುವರಿ ವೆಬ್‌ ಮತ್ತು ಆ್ಯಪ್ ಚಟುವಟಿಕೆ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆನ್‌ ಮಾಡಿದ್ದಲ್ಲಿ, ಈ ಡೇಟಾವು ಅವರ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲ್ಪಡಬಹುದು. families.google.com ನಲ್ಲಿ ಈ ಸೆಟ್ಟಿಂಗ್‍ಗಳ ಕುರಿತು ಮತ್ತು ಇವುಗಳನ್ನು ಹೇಗೆ ಸರಿಹೊಂದಿಸಬಹುದು ಎಂಬ ಕುರಿತು ಹೆಚ್ಚು ತಿಳಿದುಕೊಳ್ಳಿ .<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">ಅಮಾನ್ಯ ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರ</translation>
 <translation id="8270242299912238708">PDF ಡಾಕ್ಯುಮೆಂಟ್‌‌ಗಳು</translation>
 <translation id="827097179112817503">ಹೋಮ್ ಬಟನ್‌ ತೋರಿಸು</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 ಬುಕ್‌ಮಾರ್ಕ್ ಅಳಿಸಲಾಗಿದೆ}one{# ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ}other{# ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ}}</translation>
@@ -4976,6 +5016,7 @@
 <translation id="839736845446313156">ನೋಂದಾಯಿಸಿ</translation>
 <translation id="8398877366907290961">ಏನಾಗಲಿ ಮುಂದುವರೆಯಿರಿ</translation>
 <translation id="8400146488506985033">ಜನರನ್ನು ನಿರ್ವಹಿಸು</translation>
+<translation id="8401432541486058167">ನಿಮ್ಮ ಸ್ಮಾರ್ಟ್ ಕಾರ್ಡ್‌ನೊಂದಿಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಪಿನ್ ಅನ್ನು ಒದಗಿಸಿ.</translation>
 <translation id="8405046151008197676">ಇತ್ತೀಚಿನ ಅಪ್‌ಡೇಟ್ ಕುರಿತು ಮುಖ್ಯಾಂಶಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ</translation>
 <translation id="8410775397654368139">Google Play</translation>
 <translation id="8413385045638830869">ಮೊದಲು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
@@ -5203,10 +5244,12 @@
 <translation id="8732212173949624846">ನಿಮ್ಮ ಎಲ್ಲಾ ಸೈನ್ ಇನ್ ಮಾಡಿರುವ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸನ್ನು ಓದಿ ಮತ್ತು ಬದಲಾಯಿಸಿ</translation>
 <translation id="8732844209475700754">ಗೌಪ್ಯತೆ, ಸುರಕ್ಷತೆ ಮತ್ತು ಡೇಟಾ ಸಂಗ್ರಹಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಇನ್ನಷ್ಟು ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8734073480934656039">ಈ ಸೆಟ್ಟಿಂಗ್‍‍ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಆರಂಭಿಸುವಿಕೆಯಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್‍ ಅನ್ನು ಲಾಂಚ್ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ.</translation>
+<translation id="8734674662128056360">ಮೂರನೇ-ವ್ಯಕ್ತಿ ಕುಕೀ ನಿರ್ಬಂಧಿಸುವಿಕೆ</translation>
 <translation id="873545264931343897"><ph name="PLUGIN_NAME" /> ಅಪ್‌‌ಡೇಟ್‌ ಮುಕ್ತಾಯಗೊಳಿಸುವಾಗ, ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಪುಟವನ್ನು ಮರುಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="8736288397686080465">ಈ ಸೈಟ್ ಅನ್ನು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ.</translation>
 <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> ಬದಲಾಗಿ <ph name="PROTOCOL" /> ಲಿಂಕ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="8737709691285775803">ಶಿಲ್</translation>
+<translation id="8742371904523228557"><ph name="ORIGIN" /> ಗಾಗಿ ನಿಮ್ಮ ಕೋಡ್ <ph name="ONE_TIME_CODE" /> ಆಗಿದೆ</translation>
 <translation id="8743390665131937741">ಪೂರ್ಣಪರದೆಯ ಝೂಮ್ ಮಟ್ಟ:</translation>
 <translation id="8743864605301774756">1ಗಂಟೆಯ ಹಿಂದೆ ಆಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="874689135111202667">{0,plural, =1{ಈ ಸೈಟ್‌ಗೆ ಒಂದು ಫೈಲ್‌ ಅನ್ನು ಅಪ್‌ಲೋಡ್‌ ಮಾಡಬೇಕೇ?}one{ಈ ಸೈಟ್‌ಗೆ # ಫೈಲ್‌ಗಳನ್ನು ಅಪ್‌ಲೋಡ್‌ ಮಾಡಬೇಕೇ?}other{ಈ ಸೈಟ್‌ಗೆ # ಫೈಲ್‌ಗಳನ್ನು ಅಪ್‌ಲೋಡ್‌ ಮಾಡಬೇಕೇ?}}</translation>
@@ -5279,6 +5322,7 @@
 <translation id="8828933418460119530">DNS ಹೆಸರು</translation>
 <translation id="883062543841130884">ಬದಲಿಗಳು</translation>
 <translation id="8830796635868321089">ಪ್ರಸ್ತುತ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅಪ್‌ಡೇಟ್‌‌ನ ಪರಿಶೀಲನೆ ವಿಫಲಗೊಂಡಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ <ph name="PROXY_SETTINGS_LINK_START" />ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು<ph name="PROXY_SETTINGS_LINK_END" /> ಹೊಂದಿಸಿ.</translation>
+<translation id="8831140208248705279">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಮತ್ತು Android ಫೋನ್ ಒಟ್ಟಿಗೆ ಚೆನ್ನಾಗಿ (Better Together) ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಅವುಗಳನ್ನು ಸಂಪರ್ಕಪಡಿಸುವುದರಿಂದ ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಿಂದ ನೀವು ಪಠ್ಯ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಬಹುದು, ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಫೋನ್ ಮೂಲಕ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಬಹುದಾಗಿದೆ. <ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">ವಿಸ್ತರಣೆಗಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="8834039744648160717"><ph name="USER_EMAIL" /> ಮೂಲಕ ನೆಟ್‌ವರ್ಕ್ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ನಿಯಂತ್ರಿಸಲಾಗಿದೆ.</translation>
 <translation id="8838770651474809439">ಹ್ಯಾಂಬರ್ಗರ್</translation>
@@ -5308,8 +5352,10 @@
 <translation id="8874184842967597500">ಸಂಪರ್ಕಗೊಳಿಸಿಲ್ಲ</translation>
 <translation id="8876307312329369159">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಡೆಮೊ ಸೆಷನ್‌ನಲ್ಲಿ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="8877448029301136595">[ಮೂಲ ಡೈರೆಕ್ಟರಿ]</translation>
+<translation id="8879220587046205278">ಬಾಹ್ಯ ಸಂಗ್ರಹ ಸಾಧನಗಳಲ್ಲಿ ಫೈಲ್‌ಗಳನ್ನು ಓದಲು ಮತ್ತು ಬರೆಯಲು Google Play ಯ ಆ್ಯಪ್‌ಗಳಿಗೆ ಪೂರ್ಣ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಪ್ರವೇಶ ಬೇಕಾಗಬಹುದು. ಸಾಧನದಲ್ಲಿ ರಚಿಸಲಾದ ಫೈಲ್‌ಗಳು ಮತ್ತು ಫೋಲ್ಡರ್‌ಗಳು ಬಾಹ್ಯ ಡ್ರೈವ್ ಬಳಸುವ ಯಾರಿಗಾದರೂ ಗೋಚರಿಸುತ್ತವೆ.</translation>
 <translation id="8879284080359814990">ಟ್ಯಾಬ್‌ನಂತೆ &amp;ತೋರಿಸಿ</translation>
 <translation id="8879921471468674457">ಸೈನ್-ಇನ್ ಮಾಹಿತಿಯನ್ನು ನೆನಪಿನಲ್ಲಿಡಿ</translation>
+<translation id="8881020143150461183">ಪುನಃ ಪ್ರಯತ್ನಿಸಿ. ತಾಂತ್ರಿಕ ಬೆಂಬಲಕ್ಕಾಗಿ, <ph name="CARRIER_NAME" /> ಅನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="8884570509232205463">ನಿಮ್ಮ ಸಾಧನವು ಇದೀಗ <ph name="UNLOCK_TIME" /> ಸಮಯಕ್ಕೆ ಲಾಕ್ ಆಗುತ್ತದೆ.</translation>
 <translation id="8885197664446363138">Smart Lock ಲಭ್ಯವಿಲ್ಲ</translation>
 <translation id="8888253246822647887">ಅಪ್‌ಗ್ರೇಡ್‌ ಮಾಡುವುದು ಪೂರ್ಣಗೊಂಡಾಗ ನಿಮ್ಮ ಆ್ಯಪ್‌ ತೆರೆದುಕೊಳ್ಳುತ್ತದೆ. ಅಪ್‌ಗ್ರೇಡ್‌ಗಳನ್ನು ಮಾಡುವುದಕ್ಕೆ ಕೆಲವು ನಿಮಿಷಗಳು ಬೇಕಾಗಬಹುದು.</translation>
@@ -5360,6 +5406,7 @@
 <translation id="894871326938397531">ಅದೃಶ್ಯ ಮೋಡ್‌‌ ತೊರೆಯುವುದೇ?</translation>
 <translation id="8948939328578167195">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀಯ ತಯಾರಕರ ಬ್ರಾಂಡ್ ಹೆಸರು ಮತ್ತು ಮಾದರಿಯನ್ನು <ph name="WEBSITE" /> ನೋಡಲು ಬಯಸುತ್ತದೆ</translation>
 <translation id="8951256747718668828">ದೋಷದ ಕಾರಣದಿಂದಾಗಿ ಮರುಸ್ಥಾಪನೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲಾಗಲಿಲ್ಲ</translation>
+<translation id="8951465597020890363">ಹೇಗಾದರೂ ಅತಿಥಿ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸುವುದೇ?</translation>
 <translation id="8952831374766033534">ಕಾನ್ಫಿಗರೇಶನ್ ಆಯ್ಕೆಗೆ ಬೆಂಬಲವಿಲ್ಲ: <ph name="ERROR_LINE" /></translation>
 <translation id="895347679606913382">ಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತಿದೆ...</translation>
 <translation id="8956941634583033512">{0,plural, =1{ಒಂದು ದಿನದಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}one{# ದಿನಗಳಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}other{# ದಿನಗಳಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಿ}}</translation>
@@ -5375,6 +5422,7 @@
 <translation id="8973596347849323817">ನಿಮ್ಮ ಅಗತ್ಯಗಳಿಗೆ ಸರಿಹೊಂದುವಂತೆ ಈ ಸಾಧನವನ್ನು ನೀವು ಕಸ್ಟಮೈಸ್ ಮಾಡಬಹುದು. ಈ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನಂತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು.</translation>
 <translation id="897414447285476047">ಸಂಪರ್ಕ ಸಮಸ್ಯೆಯಿಂದಾಗಿ ಗಮ್ಯಸ್ಥಾನ ಫೈಲ್ ಅಪೂರ್ಣವಾಗಿದೆ.</translation>
 <translation id="897525204902889653">ಕ್ವಾರಂಟೈನ್ ಸೇವೆ</translation>
+<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ಮತ್ತು ಇನ್ನೂ 1 ಇತರ ಟ್ಯಾಬ್}one{"<ph name="TAB_TITLE" />" ಮತ್ತು ಇನ್ನೂ # ಇತರ ಟ್ಯಾಬ್‌ಗಳು}other{"<ph name="TAB_TITLE" />" ಮತ್ತು ಇನ್ನೂ # ಇತರ ಟ್ಯಾಬ್‌ಗಳು}}</translation>
 <translation id="8976520271376534479">ಈ ಪುಟದಲ್ಲಿ ಫ್ಲ್ಯಾಶ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
 <translation id="8977811652087512276">ತಪ್ಪು ಪಾಸ್‌ವರ್ಡ್‌ ಅಥವಾ ದೋಷಯುಕ್ತ ಫೈಲ್</translation>
 <translation id="8978154919215542464">ಆನ್- ಎಲ್ಲವನ್ನೂ ಸಿಂಕ್ ಮಾಡಿ</translation>
@@ -5464,6 +5512,7 @@
 <translation id="9103868373786083162">ಇತಿಹಾಸವನ್ನು ವೀಕ್ಷಿಸಲು ಹಿಂದೆ, ಸಂದರ್ಭದ ಮೆನುಗೆ ಹೋಗಲು ಒತ್ತಿ</translation>
 <translation id="9104396740804929809">ಬಳಕೆ ಮತ್ತು ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಿ. ಡಯಾಗ್ನಾಸ್ಟಿಕ್, ಸಾಧನ, ಹಾಗೂ ಆ್ಯಪ್ ಬಳಕೆಯ ಡೇಟಾವನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸುವ ಮೂಲಕ ನಿಮ್ಮ Android ಅನುಭವವನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದಕ್ಕೆ ಸಹಾಯ ಮಾಡಿ. ಇದು ಸಿಸ್ಟಮ್ ಮತ್ತು ಆ್ಯಪ್ ಸ್ಥಿರತೆಗೆ, ಹಾಗೂ ಇತರ ಸುಧಾರಣೆಗಳಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಕೆಲವು ಒಟ್ಟುಗೂಡಿಸಿದ ಡೇಟಾವು, Google ಆ್ಯಪ್‌ಗಳಿಗೆ ಮತ್ತು ಪಾಲುದಾರರಿಗೂ ಸಹ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, Android ಡೆವಲಪರ್‌ಗಳು. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಮಾಲೀಕರೇ ಜಾರಿಗೊಳಿಸುತ್ತಾರೆ. ಈ ಸಾಧನದ ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಮತ್ತು ಬಳಕೆಯ ಡೇಟಾವನ್ನು Google ಗೆ ಕಳುಹಿಸಲು ಮಾಲೀಕರು ಆಯ್ಕೆ ಮಾಡಬಹುದು. ನಿಮ್ಮ ಹೆಚ್ಚುವರಿ ವೆಬ್‌ ಮತ್ತು ಆ್ಯಪ್ ಚಟುವಟಿಕೆ ಸೆಟ್ಟಿಂಗ್ ಆನ್‌ ಆಗಿದ್ದಲ್ಲಿ, ಈ ಡೇಟಾವು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲ್ಪಡಬಹುದು. <ph name="BEGIN_LINK1" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK1" /></translation>
 <translation id="9109122242323516435">ಸ್ಥಳಾವಕಾಶವನ್ನು ಮುಕ್ತಗೊಳಿಸಲು, ಸಾಧನ ಸಂಗ್ರಹಣೆಯಿಂದ ಫೈಲ್‌ಗಳನ್ನು ಅಳಿಸಿ.</translation>
+<translation id="9109283579179481106">ಮೊಬೈಲ್‌ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ</translation>
 <translation id="9111102763498581341">ಅನ್‌ಲಾಕ್</translation>
 <translation id="9111395131601239814"><ph name="NETWORKDEVICE" />: <ph name="STATUS" /></translation>
 <translation id="9112748030372401671">ನಿಮ್ಮ ವಾಲ್‌ಪೇಪರ್ ಬದಲಿಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 5cbe299..37bef58 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -2165,7 +2165,6 @@
 <translation id="4146026355784316281">항상 시스템 뷰어로 열기</translation>
 <translation id="4146785383423576110">재설정 및 정리하기</translation>
 <translation id="4147911968024186208">다시 시도해 주세요. 이 오류가 다시 표시되면 지원 담당자에게 문의하시기 바랍니다.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">디스플레이</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{탭 1개}other{탭 #개}}</translation>
 <translation id="4154664944169082762">지문</translation>
@@ -3517,7 +3516,6 @@
 <translation id="6212039847102026977">고급 네트워크 속성 표시</translation>
 <translation id="6212168817037875041">디스플레이 사용 중지</translation>
 <translation id="6212752530110374741">이메일 링크</translation>
-<translation id="6214642087594370545">정보 유출에 포함된 안전하지 않은 비밀번호를 사용하는 경우 경고를 표시합니다. 로그인한 사용자만 사용할 수 있습니다.</translation>
 <translation id="6216696360484424239">자동으로 로그인</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" />이(가) 오프라인 상태입니다. 인터넷에 연결하고 다시 시도해 보세요.</translation>
 <translation id="6220413761270491930">확장 프로그램 로드 중 오류</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 9608f2a..75e8d1df 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -2170,7 +2170,6 @@
 <translation id="4146026355784316281">Visada atidaryti naudojant sistemos peržiūros priemonę</translation>
 <translation id="4146785383423576110">Nustatykite iš naujo ir išvalykite</translation>
 <translation id="4147911968024186208">Bandykite iš naujo. Jei ši klaida bus parodyta dar kartą, susisiekite su palaikymo komandos atstovu.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Pateiktis</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 skirtukas}one{# skirtukas}few{# skirtukai}many{# skirtuko}other{# skirtukų}}</translation>
 <translation id="4154664944169082762">Pirštų atspaudai</translation>
@@ -3526,7 +3525,6 @@
 <translation id="6212039847102026977">Rodyti išplėstines tinklo nuosavybes</translation>
 <translation id="6212168817037875041">Išjungti ekraną</translation>
 <translation id="6212752530110374741">Siųsti nuorodą el. paštu</translation>
-<translation id="6214642087594370545">Rodyti įspėjimą, kai naudojate nesaugų slaptažodį, kuris buvo pažeistas įvykus duomenų saugos pažeidimui. Funkcija pasiekiama tik prisijungusiems naudotojams.</translation>
 <translation id="6216696360484424239">Automatiškai prisijungti</translation>
 <translation id="6218058416316985984">„<ph name="DEVICE_TYPE" />“ įrenginyje neįjungtas internetas. Prisijunkite prie interneto ir bandykite dar kartą.</translation>
 <translation id="6220413761270491930">Klaida įkeliant plėtinį</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 9304f1e..7fcf23b 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Tikai pašreizējā inkognito sesijā</translation>
 <translation id="1698650002254827833">Lietotņu sarakstu nevar ielādēt. Lūdzu, mēģiniet vēlreiz.</translation>
 <translation id="1701062906490865540">Noņemt šo lietotāju</translation>
+<translation id="1703331064825191675">Nekad neraizējieties par parolēm</translation>
 <translation id="1706586824377653884">Pievienoja administrators</translation>
 <translation id="1706625117072057435">Tālummaiņas līmeņi</translation>
 <translation id="1708338024780164500">(Neaktīva)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">Beta</translation>
 <translation id="176587472219019965">Jau&amp;ns logs</translation>
 <translation id="1766575458646819543">Tika aizvērts pilnekrāna režīms</translation>
+<translation id="1766957085594317166">Droši saglabājiet paroles Google kontā, lai vairs nebūtu tās jāraksta</translation>
 <translation id="1768278914020124551">Diemžēl radās kļūda, mēģinot sazināties ar pieteikšanās serveri. Lūdzu, pārbaudiet savu tīkla savienojumu un domēna nosaukumu, pēc tam mēģiniet vēlreiz.</translation>
 <translation id="1769104665586091481">Atvērt saiti &amp;jaunā logā</translation>
 <translation id="1773212559869067373">Autentifikācijas sertifikāts tika lokāli noraidīts.</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Nav izveidots savienojums</translation>
 <translation id="3752582316358263300">Labi...</translation>
 <translation id="3752673729237782832">Manas ierīces</translation>
+<translation id="3753033997400164841">Saglabājiet vienreiz, izmantojiet it visur</translation>
 <translation id="3755411799582650620">Ar jūsu tālruni <ph name="PHONE_NAME" /> tagad var atbloķēt arī šo <ph name="DEVICE_TYPE" /> ierīci.</translation>
 <translation id="375636864092143889">Vietne izmanto jūsu mikrofonu.</translation>
 <translation id="3757733214359997190">Neviena vietne netika atrasta</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Vienmēr atvērt, izmantojot sistēmas skatītāju</translation>
 <translation id="4146785383423576110">Atiestatiet un tīriet</translation>
 <translation id="4147911968024186208">Lūdzu, mēģiniet vēlreiz. Ja atkal tiek parādīta šī kļūda, sazinieties ar atbalsta dienesta pārstāvi.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Displejs</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 cilne}zero{# ciļņu}one{# cilne}other{# cilnes}}</translation>
 <translation id="4154664944169082762">Pirkstu nospiedumi</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Kerberos konfigurēšana</translation>
 <translation id="4235200303672858594">Viss ekrāns</translation>
 <translation id="4235965441080806197">Atcelt pierakstīšanos</translation>
+<translation id="4242145785130247982">Vairāku klienta sertifikātu lietošana netiek atbalstīta</translation>
 <translation id="4242533952199664413">Atvērt iestatījumus</translation>
 <translation id="4242577469625748426">Neizdevās ierīcē instalēt politikas iestatījumus: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Atrast citas skārienekrāna pildspalvas lietotnes</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Iespējot tikai funkcijas, kas saistītas ar <ph name="IDS_SHORT_PRODUCT_NAME" /> sinhronizāciju</translation>
 <translation id="4959262764292427323">Paroles tiek saglabātas jūsu Google kontā, lai jūs tās varētu izmantot jebkurā ierīcē.</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> — <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Šo lietotni instalēja administrators.</translation>
 <translation id="4964455510556214366">Izkārtojums</translation>
 <translation id="4964673849688379040">Notiek pārbaude...</translation>
 <translation id="4965808351167763748">Vai tiešām vēlaties iestatīt šo ierīci darbam ar Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Rādīšana rīkjoslā</translation>
 <translation id="5362741141255528695">Atlasiet privātās atslēgas failu.</translation>
 <translation id="5363109466694494651">Powerwash un atjaunošana</translation>
+<translation id="5365716706805792666">Google var pārbaudīt, vai jūsu paroles ir nopludinātas datu pārkāpuma dēļ. Šī funkcionalitāte tiks ieslēgta, kad pierakstīsieties Google kontā.</translation>
 <translation id="5365881113273618889">Atlasītajā mapē ir iekļauti sensitīvi faili. Vai tiešām vēlaties piešķirt lietotnei <ph name="APP_NAME" /> pastāvīgu rakstīšanas piekļuvi šai mapei?</translation>
 <translation id="5367091008316207019">Notiek faila lasīšana...</translation>
 <translation id="5368720394188453070">Jūsu tālrunis ir bloķēts. Lai tajā ieietu, atbloķējiet to.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Rādīt tīkla papildu rekvizītus</translation>
 <translation id="6212168817037875041">Izslēgt displeju</translation>
 <translation id="6212752530110374741">Sūtīt saiti e-pasta ziņojumā</translation>
-<translation id="6214642087594370545">Rādīt brīdinājumu, ja izmantojat paroli, kas kļuvusi nedroša datu noplūdes dēļ. Šī funkcionalitāte ir pieejama tikai pierakstītiem lietotājiem.</translation>
 <translation id="6216696360484424239">Automātiska pierakstīšanās</translation>
 <translation id="6218058416316985984">Ierīce <ph name="DEVICE_TYPE" /> ir bezsaistē. Izveidojiet savienojumu ar internetu un mēģiniet vēlreiz.</translation>
 <translation id="6220413761270491930">Paplašinājuma ielādes kļūda</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Printera pievienošana...</translation>
 <translation id="6770664076092644100">Apstiprināt, izmantojot NFC</translation>
 <translation id="6771503742377376720">Ir sertifikāta izdevējiestāde</translation>
+<translation id="6775163072363532304">Šeit tiks parādītas pieejamās ierīces.</translation>
 <translation id="6777817260680419853">Novirzīšana bloķēta</translation>
 <translation id="6778737459546443941">Neviens no jūsu vecākiem vēl nav to apstiprinājis</translation>
 <translation id="677965093459947883">Ļoti mazs</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Citi lietotāji</translation>
 <translation id="7442465037756169001">Jūsu Hangouts Meet hardware ir gatavs iestatīšanai.</translation>
 <translation id="744341768939279100">Izveidot jaunu profilu</translation>
+<translation id="7443806024147773267">Piekļūstiet savām parolēm, kad vien esat pierakstījies Google kontā</translation>
 <translation id="7444046173054089907">Šī vietne ir bloķēta</translation>
 <translation id="7444983668544353857">Atspējot <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automātiski instalējiet lietotnes</translation>
@@ -4748,6 +4754,7 @@
 <translation id="8014154204619229810">Pašlaik darbojas atjauninātājs. Pēc brīža atsvaidziniet, lai pārbaudītu vēlreiz.</translation>
 <translation id="8014206674403687691">Nevar atjaunot iepriekš instalēto <ph name="IDS_SHORT_PRODUCT_NAME" /> versiju. Lūdzu, vēlreiz mēģiniet aktivizēt ierīcē funkciju Powerwash.</translation>
 <translation id="8014210335923519270">Uzlabojiet pārlūku <ph name="IDS_SHORT_PRODUCT_NAME" /> un tā drošību, nosūtot sistēmas informāciju un lietojuma datus Google serveriem.</translation>
+<translation id="8015780634880457457">Google var pārbaudīt, vai jūsu paroles ir nopludinātas datu pārkāpumā</translation>
 <translation id="8016266267177410919">Pagaidu krātuve</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Saīsne rediģēta</translation>
@@ -4866,6 +4873,7 @@
 <translation id="8188389033983459049">Lai turpinātu, pārbaudiet ierīces iestatījumus un ieslēdziet to.</translation>
 <translation id="8190193592390505034">Savienojas ar <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Pārvaldīt jūsu lietotnes, paplašinājumus un motīvus</translation>
+<translation id="819464600477418284">Šo lietotni nevar atinstalēt, jo tā ir daļa no Chrome OS.</translation>
 <translation id="8195027750202970175">Lielums diskā</translation>
 <translation id="8198323535106903877">Mēs instalēsim jums šīs <ph name="NUMBER_OF_APPS" /> lietotnes</translation>
 <translation id="8199300056570174101">Tīklu (pakalpojumu) un ierīču rekvizīti</translation>
@@ -4926,6 +4934,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Izslēdzot šo funkciju, netiks ietekmēta jūsu ierīces spēja nosūtīt informāciju, kas nepieciešama, lai saņemtu būtiskus pakalpojumus, piemēram, sistēmas atjauninājumus un drošības funkcijas.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Īpašnieks var kontrolēt šo funkciju, pārejot uz sadaļu Iestatījumi &gt; Papildu &gt; Automātiski sūtīt diagnostikas un lietojuma datus Google serveriem.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Ja jūsu bērnam ir ieslēgtas iestatījuma “Darbības tīmeklī un lietotnēs” papildu funkcijas, šī informācija tiks saglabāta bērna Google kontā. Plašāku informāciju par šiem iestatījumiem un to pielāgošanu skatiet vietnē families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Nederīgs klienta sertifikāts</translation>
 <translation id="8270242299912238708">PDF dokumenti</translation>
 <translation id="827097179112817503">Rādīt pogu Sākums</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Izdzēsta 1 grāmatzīme}zero{Izdzēstas # grāmatzīmes}one{Izdzēsta # grāmatzīme}other{Izdzēstas # grāmatzīmes}}</translation>
@@ -5339,6 +5348,7 @@
 <translation id="8874184842967597500">Savienojums nav izveidots</translation>
 <translation id="8876307312329369159">Demonstrācijas sesijā šo iestatījumu nevar mainīt.</translation>
 <translation id="8877448029301136595">[vecāku direktorija]</translation>
+<translation id="8879220587046205278">Dažreiz veikalā Google Play iegādātajām lietotnēm ir nepieciešama pilnīga piekļuve failu sistēmai, lai varētu lasīt un rakstīt failus ārējās krātuves ierīcēs. Ierīcē izveidotie faili un mapes ir redzamas visiem, kas lieto ārējo disku.</translation>
 <translation id="8879284080359814990">Rādīt kā &amp;cilni</translation>
 <translation id="8879921471468674457">Atcerēties pierakstīšanās informāciju</translation>
 <translation id="8881020143150461183">Lūdzu, mēģiniet vēlreiz! Lai saņemtu tehnisko atbalstu, sazinieties ar mobilo sakaru operatoru <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index b5ea4c1..dcc4eb4a 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -2148,7 +2148,6 @@
 <translation id="4146026355784316281">എപ്പോഴും സിസ്‌റ്റം വ്യൂവറിൽ തുറക്കുക</translation>
 <translation id="4146785383423576110">റീസെറ്റ് ചെയ്‌ത ശേഷം മായ്ക്കുക</translation>
 <translation id="4147911968024186208">വീണ്ടും ശ്രമിക്കുക. ഈ പിശക് വീണ്ടും കാണുകയാണെങ്കിൽ, നിങ്ങളുടെ പിന്തുണാ പ്രതിനിധിയെ ബന്ധപ്പെടുക.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">ഡിസ്‌പ്ലേ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{ഒരു ടാബ്}other{# ടാബുകൾ}}</translation>
 <translation id="4154664944169082762">ഫിംഗര്‍‌പ്രിന്‍റുകള്‍‌</translation>
@@ -3494,7 +3493,6 @@
 <translation id="6212039847102026977">വിപുലമായ നെറ്റ്‌വർക്ക് പ്രോപ്പർട്ടികൾ കാണിക്കുക</translation>
 <translation id="6212168817037875041">ഡിസ്പ്ലേ ഓഫാക്കുക</translation>
 <translation id="6212752530110374741">ലിങ്ക് ഇമെയിൽ ചെയ്യുക</translation>
-<translation id="6214642087594370545">ഡാറ്റാ ലംഘനത്തിന്റെ ഭാഗമായിരുന്ന സുരക്ഷിതമല്ലാത്ത പാസ്‌വേഡ് ഉപയോഗിക്കുമ്പോൾ മുന്നറിയിപ്പ് കാണിക്കുക. സൈൻ ഇൻ ചെയ്‌ത ഉപയോക്തക്കൾക്ക് മാത്രമേ അത് ലഭ്യമാവുകയുള്ളൂ.</translation>
 <translation id="6216696360484424239">സ്വയമേവ സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ഓഫ്‌ലൈനാണ്. ഇന്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌ത് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="6220413761270491930">വിപുലീകരണം ലോഡ് ചെയ്യുന്നതിൽ പിശക്</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index bb34680..edb3e2dc 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -2150,7 +2150,6 @@
 <translation id="4146026355784316281">नेहमी सिस्टम दर्शकासह उघडा</translation>
 <translation id="4146785383423576110">रीसेट करा आणि साफ करा</translation>
 <translation id="4147911968024186208">रीबूट करा. तुम्हाला ही एरर पुन्हा दिसल्यास कृपया तुमच्या साहाय्य प्रतिनिधीशी संपर्क साधा.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">डिस्प्ले करा</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 टॅब}other{# टॅब}}</translation>
 <translation id="4154664944169082762">बोटाचा ठसा</translation>
@@ -3495,7 +3494,6 @@
 <translation id="6212039847102026977">प्रगत नेटवर्क वैशिष्ट्ये दर्शवा</translation>
 <translation id="6212168817037875041">डिस्प्ले बंद करा</translation>
 <translation id="6212752530110374741">ईमेल लिंक</translation>
-<translation id="6214642087594370545">तुम्ही असुरक्षित पासवर्ड वापरता तेव्हा डेटा भंगाचा भाग म्हणून चेतावणी दाखवा. हे फक्त साइन इन केलेल्या वापरकर्त्यांसाठी उपलब्ध आहे.</translation>
 <translation id="6216696360484424239">आपोआप साइन इन करा</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ऑफलाइन आहे. इंटरनेटशी कनेक्ट करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="6220413761270491930">एक्स्टेंशन लोड करताना एरर</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 69786b7..500eeb4 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Sesi inkognito semasa sahaja</translation>
 <translation id="1698650002254827833">Senarai apl tidak dapat dimuatkan. Sila cuba lagi.</translation>
 <translation id="1701062906490865540">Alih keluar orang ini</translation>
+<translation id="1703331064825191675">Jangan bimbang tentang kata laluan anda</translation>
 <translation id="1706586824377653884">Ditambahkan oleh pentadbir anda</translation>
 <translation id="1706625117072057435">Tahap zum</translation>
 <translation id="1708338024780164500">(Tidak Aktif)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Tetingkap Baharu</translation>
 <translation id="1766575458646819543">Telah keluar daripada skrin penuh</translation>
+<translation id="1766957085594317166">Simpan kata laluan dengan selamat dalam Akaun Google anda. Anda tidak perlu menaip kata laluan lagi</translation>
 <translation id="1768278914020124551">Op! Terdapat masalah untuk menghubungi pelayan log masuk. Sila semak sambungan rangkaian dan nama domain anda, kemudian cuba lagi.</translation>
 <translation id="1769104665586091481">Buka Pautan dalam Tetingkap &amp;Baharu</translation>
 <translation id="1773212559869067373">Sijil pengesahan ditolak secara setempat</translation>
@@ -1279,7 +1281,7 @@
 <translation id="2849936225196189499">Kritikal</translation>
 <translation id="2850541429955027218">Tambahkan tema</translation>
 <translation id="2851634818064021665">Anda memerlukan kebenaran untuk melawat tapak ini</translation>
-<translation id="2854896010770911740">Padamkan Kuki Pihak Ketiga</translation>
+<translation id="2854896010770911740">Alih Keluar Kuki Pihak Ketiga</translation>
 <translation id="2858138569776157458">Tapak popular</translation>
 <translation id="2859806420264540918">Tapak ini menyiarkan iklan yang mengganggu atau mengelirukan.</translation>
 <translation id="2861301611394761800">Kemas kini sistem selesai. Sila mulakan semula sistem.</translation>
@@ -1668,7 +1670,7 @@
 <translation id="346431825526753">Ini ialah akaun untuk kanak-kanak yang diurus oleh <ph name="CUSTODIAN_EMAIL" />.</translation>
 <translation id="3468999815377931311">Telefon Android</translation>
 <translation id="3470442499439619530">Alih Keluar Pengguna Ini</translation>
-<translation id="3471876058939596279">Port HDMI dan USB Jenis C tidak boleh digunakan untuk video pada masa yang sama. Gunakan port video yang berbeza.</translation>
+<translation id="3471876058939596279">Port HDMI dan USB Jenis-C tidak boleh digunakan untuk video pada masa yang sama. Gunakan port video yang berbeza.</translation>
 <translation id="3473479545200714844">Penggadang skrin</translation>
 <translation id="3475843873335999118">Maaf, cap jari anda masih tidak dikenali. Sila masukkan kata laluan anda.</translation>
 <translation id="3476303763173086583">Hantar data penggunaan dan diagnostik. Bantu kami meningkatkan pengalaman Android anak anda dengan menghantar data diagnostik dan penggunaan peranti serta apl kepada Google secara automatik. Data ini tidak akan digunakan untuk mengenal pasti anak anda dan akan membantu peningkatan kestabilan sistem dan apl serta pelbagai lagi. Sesetengah data agregat juga akan membantu apl dan rakan kongsi Google, seperti pembangun Android. <ph name="BEGIN_LINK1" />Tetapan<ph name="END_LINK1" /> ini dikuatkuasakan oleh pemilik. Pemilik mungkin memilih untuk menghantar data diagnostik dan penggunaan bagi peranti ini kepada Google. Jika tetapan Aktiviti Web &amp; Apl tambahan dihidupkan untuk anak anda, data ini mungkin disimpan ke akaun Googlenya. <ph name="BEGIN_LINK2" />Ketahui Lebih Lanjut<ph name="END_LINK2" /></translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Tidak Disambung</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Peranti saya</translation>
+<translation id="3753033997400164841">Simpan sekali. Gunakan di mana-mana</translation>
 <translation id="3755411799582650620"><ph name="PHONE_NAME" /> anda kini boleh membuka kunci <ph name="DEVICE_TYPE" /> ini juga.</translation>
 <translation id="375636864092143889">Tapak sedang menggunakan mikrofon anda</translation>
 <translation id="3757733214359997190">Tiada tapak ditemui</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Sentiasa Buka dengan Alat Lihat Sistem</translation>
 <translation id="4146785383423576110">Tetapkan semula dan padam bersih</translation>
 <translation id="4147911968024186208">Sila cuba semula. Jika ralat ini dipaparkan sekali lagi, sila hubungi wakil sokongan anda.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Paparan</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="4154664944169082762">Cap jari</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Konfigurasikan Kerberos</translation>
 <translation id="4235200303672858594">Keseluruhan skrin</translation>
 <translation id="4235965441080806197">Batalkan log masuk</translation>
+<translation id="4242145785130247982">Sijil pelanggan berbilang tidak disokong</translation>
 <translation id="4242533952199664413">Buka tetapan</translation>
 <translation id="4242577469625748426">Gagal memasang tetapan dasar pada peranti: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Dapatkan lagi apl stilus</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Dayakan ciri yang berkaitan dengan Penyegerakan <ph name="IDS_SHORT_PRODUCT_NAME" /> sahaja</translation>
 <translation id="4959262764292427323">Kata laluan disimpan dalam Akaun Google anda supaya anda dapat menggunakannya pada mana-mana peranti</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Apl ini telah dipasang oleh pentadbir anda.</translation>
 <translation id="4964455510556214366">Susunan</translation>
 <translation id="4964673849688379040">Menyemak...</translation>
 <translation id="4965808351167763748">Adakah anda pasti ingin menyediakan peranti ini untuk menjalankan Hangout Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Tunjukkan dalam Bar Alat</translation>
 <translation id="5362741141255528695">Pilih fail kunci persendirian.</translation>
 <translation id="5363109466694494651">Powerwash dan Berbalik</translation>
+<translation id="5365716706805792666">Google boleh menyemak sama ada kata laluan anda terlibat dalam pelanggaran data. Semakan ini akan dihidupkan apabila anda log masuk dengan Akaun Google anda.</translation>
 <translation id="5365881113273618889">Folder yang anda pilih mengandungi fail sensitif. Adakah anda pasti anda mahu memberi "<ph name="APP_NAME" />" akses tulis kekal kepada folder ini?</translation>
 <translation id="5367091008316207019">Membaca fail..</translation>
 <translation id="5368720394188453070">Telefon anda dikunci. Buka kuncinya untuk masuk.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Tunjukkan sifat rangkaian terperinci</translation>
 <translation id="6212168817037875041">Matikan paparan</translation>
 <translation id="6212752530110374741">E-melkan Pautan</translation>
-<translation id="6214642087594370545">Tunjukkan amaran apabila anda menggunakan kata laluan tidak selamat yang merupakan sebahagian daripada pelanggaran data. Tersedia untuk pengguna yang log masuk sahaja.</translation>
 <translation id="6216696360484424239">Log masuk secara automatik</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> di luar talian. Sambung ke Internet dan cuba lagi.</translation>
 <translation id="6220413761270491930">Ralat Memuatkan Sambungan</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Menambah pencetak...</translation>
 <translation id="6770664076092644100">Sahkan melalui NFC</translation>
 <translation id="6771503742377376720">Adalah Pihak Berkuasa Pensijilan</translation>
+<translation id="6775163072363532304">Peranti yang tersedia akan dipaparkan di sini.</translation>
 <translation id="6777817260680419853">Ubah hala disekat</translation>
 <translation id="6778737459546443941">Ibu bapa anda belum meluluskannya</translation>
 <translation id="677965093459947883">Sangat kecil</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Pengguna lain</translation>
 <translation id="7442465037756169001">Hangouts Meet hardware anda sudah boleh disediakan.</translation>
 <translation id="744341768939279100">Buat profil baharu</translation>
+<translation id="7443806024147773267">Akses kata laluan anda pada bila-bila masa anda log masuk ke Akaun Google anda</translation>
 <translation id="7444046173054089907">Tapak ini disekat</translation>
 <translation id="7444983668544353857">Lumpuhkan <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Memasang apl secara automatik</translation>
@@ -4380,7 +4386,7 @@
 <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> anda berjaya didaftarkan untuk pengurusan perusahaan.</translation>
 <translation id="7507930499305566459">Status Pembalas Sijil</translation>
 <translation id="7508054832109420082">Berikan akses kepada pencetak</translation>
-<translation id="7510943789645525906">Memberi anda amaran jika kata laluan yang anda gunakan adalah sebahagian daripada pelanggaran data.</translation>
+<translation id="7510943789645525906">Memberi anda amaran jika kata laluan yang anda gunakan adalah sebahagian daripada pelanggaran data</translation>
 <translation id="7513029293694390567">Log masuk secara automatik ke tapak web menggunakan bukti kelayakan yang disimpan. Jika dilumpuhkan, anda akan diminta memberikan pengesahan setiap kali sebelum mengelog masuk ke tapak web.</translation>
 <translation id="7514365320538308">Muat Turun</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">Pengemaskinian sedang dijalankan. Muatkan semula dalam satu minit untuk memeriksa lagi.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat kembali kepada versi yang dipasang sebelumnya. Sila cuba Powerwash peranti anda lagi.</translation>
 <translation id="8014210335923519270">Tingkatkan <ph name="IDS_SHORT_PRODUCT_NAME" /> dan keselamatannya dengan menghantar maklumat sistem dan penggunaan kepada Google</translation>
+<translation id="8015780634880457457">Google boleh menyemak sama ada kata laluan anda terlibat dalam pelanggaran data</translation>
 <translation id="8016266267177410919">Storan sementara</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Pintasan diedit</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Semak tetapan peranti anda dan hidupkannya untuk meneruskan</translation>
 <translation id="8190193592390505034">Disambungkan ke <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Uruskan apl, sambungan dan tema anda</translation>
+<translation id="819464600477418284">Apl ini adalah sebahagian daripada OS Chrome dan tidak boleh dinyahpasang.</translation>
 <translation id="8195027750202970175">Saiz pada cakera</translation>
 <translation id="8198323535106903877">Kami akan memasang <ph name="NUMBER_OF_APPS" /> apl itu untuk anda</translation>
 <translation id="8199300056570174101">Sifat Rangkaian (Perkhidmatan) dan Peranti</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Tindakan mematikan ciri ini tidak menjejaskan keupayaan peranti ini untuk menghantar maklumat yang diperlukan oleh perkhidmatan penting seperti kemas kini sistem dan keselamatan.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Pemilik boleh mengawal ciri ini daripada Tetapan &gt; Terperinci &gt; Hantar data diagnostik dan penggunaan kepada Google secara automatik.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Jika tetapan Aktiviti Web &amp; Apl tambahan dihidupkan untuk anak anda, data ini mungkin disimpan ke Akaun Google mereka. Ketahui lebih lanjut tentang tetapan ini dan cara menyelaraskan tetapan ini di families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Sijil pelanggan tidak sah</translation>
 <translation id="8270242299912238708">Dokumen PDF</translation>
 <translation id="827097179112817503">Paparkan butang laman utama</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 penanda halaman dipadam}other{# penanda halaman dipadam}}</translation>
@@ -5311,7 +5320,7 @@
 <translation id="8828933418460119530">Nama DNS</translation>
 <translation id="883062543841130884">Penggantian</translation>
 <translation id="8830796635868321089">Semakan kemas kini yang menggunakan tetapan proksi semasa gagal. Sila laraskan <ph name="PROXY_SETTINGS_LINK_START" />tetapan proksi<ph name="PROXY_SETTINGS_LINK_END" /> anda.</translation>
-<translation id="8831140208248705279"><ph name="DEVICE_TYPE" /> dan telefon Android anda berfungsi dengan lebih baik bersama-sama. Sambungkan kedua-dua peranti ini supaya anda boleh menghantar mesej teks daripada komputer, berkongsi sambungan internet dan membuka kunci <ph name="DEVICE_TYPE" /> menggunakan telefon anda.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
+<translation id="8831140208248705279"><ph name="DEVICE_TYPE" /> dan telefon Android anda berfungsi dengan lebih baik bersama-sama. Sambungkan kedua-dua peranti ini supaya anda boleh menghantar mesej teks daripada komputer, berkongsi sambungan Internet dan membuka kunci <ph name="DEVICE_TYPE" /> menggunakan telefon anda.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">Buka tetapan Sambungan</translation>
 <translation id="8834039744648160717">Konfigurasi rangkaian dikawal oleh <ph name="USER_EMAIL" />.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
@@ -5341,9 +5350,10 @@
 <translation id="8874184842967597500">Tidak bersambung</translation>
 <translation id="8876307312329369159">Tetapan ini tidak boleh ditukar dalam sesi tunjuk cara.</translation>
 <translation id="8877448029301136595">[direktori induk]</translation>
+<translation id="8879220587046205278">Apl daripada Google Play mungkin memerlukan akses sistem fail penuh untuk membaca dan menulis fail pada peranti storan luaran. Fail dan folder yang dibuat pada peranti ini dapat dilihat oleh sesiapa yang menggunakan pemacu luaran itu.</translation>
 <translation id="8879284080359814990">&amp;Paparkan Sebagai Tab</translation>
 <translation id="8879921471468674457">Ingat maklumat log masuk</translation>
-<translation id="8881020143150461183">Sila cuba lagi. Hubungi <ph name="CARRIER_NAME" />.untuk mendapatkan sokongan teknikal.</translation>
+<translation id="8881020143150461183">Sila cuba lagi. Hubungi <ph name="CARRIER_NAME" /> untuk mendapatkan sokongan teknikal.</translation>
 <translation id="8884570509232205463">Peranti anda kini dikunci pada <ph name="UNLOCK_TIME" />.</translation>
 <translation id="8885197664446363138">Smart Lock tidak tersedia</translation>
 <translation id="8888253246822647887">Apl anda akan dibuka apabila peningkatan selesai. Peningkatan boleh mengambil masa beberapa minit.</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index f31e20e..0d7e5af 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Alleen huidige incognitosessie</translation>
 <translation id="1698650002254827833">De lijst met apps kan niet worden geladen. Probeer het opnieuw.</translation>
 <translation id="1701062906490865540">Deze persoon verwijderen</translation>
+<translation id="1703331064825191675">Maak je nooit meer zorgen over je wachtwoorden</translation>
 <translation id="1706586824377653884">Toegevoegd door je beheerder</translation>
 <translation id="1706625117072057435">Zoomniveaus</translation>
 <translation id="1708338024780164500">(Inactief)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">bèta</translation>
 <translation id="176587472219019965">&amp;Nieuw venster</translation>
 <translation id="1766575458646819543">Volledig scherm verlaten</translation>
+<translation id="1766957085594317166">Sla wachtwoorden veilig op in je Google-account, zodat je ze nooit meer hoeft in te voeren.</translation>
 <translation id="1768278914020124551">Er is een probleem opgetreden bij het communiceren met de inlogserver. Controleer de netwerkverbinding en domeinnaam en probeer het opnieuw.</translation>
 <translation id="1769104665586091481">Link openen in nieu&amp;w venster</translation>
 <translation id="1773212559869067373">Verificatiecertificaat lokaal geweigerd</translation>
@@ -782,7 +784,7 @@
 <translation id="2155772377859296191">Ziet eruit als <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="2156283799932971644">Je kunt helpen Safe Browsing te verbeteren door bepaalde systeeminformatie en paginacontent naar Google te verzenden.</translation>
 <translation id="2156294658807918600">Service worker: <ph name="SCRIPT_URL" /></translation>
-<translation id="2157474325782140681">Voor aanvullende functies gebruik je een Dell-dockingstation dat is bedoeld voor gebruik met deze Chromebook.</translation>
+<translation id="2157474325782140681">Gebruik voor aanvullende functies een Dell-dockingstation dat is bedoeld voor gebruik met deze Chromebook.</translation>
 <translation id="215753907730220065">Volledig scherm sluiten</translation>
 <translation id="2157875535253991059">Deze pagina wordt nu op volledig scherm weergegeven.</translation>
 <translation id="216169395504480358">Wifi toevoegen...</translation>
@@ -1441,7 +1443,7 @@
 <translation id="310671807099593501">Site gebruikt Bluetooth</translation>
 <translation id="3115147772012638511">Wachten op cache...</translation>
 <translation id="3115580024857770654">Alles samenvouwen</translation>
-<translation id="3117362587799608430">Dock is niet volledig geschikt</translation>
+<translation id="3117362587799608430">Werkt niet met dit dock.</translation>
 <translation id="3118319026408854581"><ph name="PRODUCT_NAME" /> Help</translation>
 <translation id="3120430004221004537">Onvoldoende versleuteling voor een bepaalde bewerking op: <ph name="DEVICE_NAME" />.</translation>
 <translation id="3121793941267913344">Dit <ph name="IDS_SHORT_PRODUCT_NAME" />-apparaat herstellen</translation>
@@ -1766,7 +1768,7 @@
 <translation id="3603622770190368340">Netwerkcertificaat verkrijgen</translation>
 <translation id="3605780360466892872">Zakenman</translation>
 <translation id="3608576286259426129">Voorbeeld van gebruikersafbeelding</translation>
-<translation id="3610369246614755442">Er is service vereist voor de ventilator van het dock</translation>
+<translation id="3610369246614755442">De ventilator van het dock heeft onderhoud nodig</translation>
 <translation id="361106536627977100">Flash-gegevens</translation>
 <translation id="3612673635130633812">Gedownload door &lt;a href='<ph name="URL" />'&gt;<ph name="EXTENSION" />&lt;/a&gt;</translation>
 <translation id="3613134908380545408"><ph name="FOLDER_NAME" /> weergeven</translation>
@@ -1778,7 +1780,7 @@
 <translation id="3624567683873126087">Apparaat ontgrendelen en inloggen op Google-account</translation>
 <translation id="3625258641415618104">Screenshots uitgeschakeld</translation>
 <translation id="3625481642044239431">Ongeldig bestand geselecteerd. Probeer het opnieuw.</translation>
-<translation id="3626296069957678981">Gebruik voor het opladen van deze Chromebook een geschikte Dell-batterij.</translation>
+<translation id="3626296069957678981">Gebruik een geschikte Dell-batterij voor het opladen van deze Chromebook.</translation>
 <translation id="3627320433825461852">Minder dan 1 minuut resterend</translation>
 <translation id="3627588569887975815">Link openen in inco&amp;gnitovenster</translation>
 <translation id="3627671146180677314">Vernieuwingsmoment voor Netscape-certificaat</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Niet verbonden</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Mijn apparaten</translation>
+<translation id="3753033997400164841">Eén keer opslaan, overal gebruiken</translation>
 <translation id="3755411799582650620">Je <ph name="PHONE_NAME" /> kan deze <ph name="DEVICE_TYPE" /> nu ook ontgrendelen.</translation>
 <translation id="375636864092143889">Site gebruikt je microfoon</translation>
 <translation id="3757733214359997190">Geen sites gevonden</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Altijd openen met systeemviewer</translation>
 <translation id="4146785383423576110">Resetten en opruimen</translation>
 <translation id="4147911968024186208">Probeer het opnieuw. Als deze fout opnieuw wordt weergegeven, neem je contact op met een medewerker van de ondersteuning.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Weergave</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tabblad}other{# tabbladen}}</translation>
 <translation id="4154664944169082762">Vingerafdrukken</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Kerberos configureren</translation>
 <translation id="4235200303672858594">Volledig scherm</translation>
 <translation id="4235965441080806197">Inloggen annuleren</translation>
+<translation id="4242145785130247982">Meerdere clientcertificaten worden niet ondersteund</translation>
 <translation id="4242533952199664413">Instellingen openen</translation>
 <translation id="4242577469625748426">Kan geen beleidsinstellingen op het apparaat installeren: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Meer stylus-apps zoeken</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Alleen functies inschakelen die zijn gerelateerd aan <ph name="IDS_SHORT_PRODUCT_NAME" />-synchronisatie</translation>
 <translation id="4959262764292427323">Wachtwoorden worden in je Google-account opgeslagen, zodat je deze op elk apparaat kunt gebruiken</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Deze app is geïnstalleerd door je beheerder.</translation>
 <translation id="4964455510556214366">Indeling</translation>
 <translation id="4964673849688379040">Controleren…</translation>
 <translation id="4965808351167763748">Weet je zeker dat je dit apparaat wilt instellen voor Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">In werkbalk weergeven</translation>
 <translation id="5362741141255528695">Selecteer een privésleutelbestand.</translation>
 <translation id="5363109466694494651">Powerwash en terugzetten</translation>
+<translation id="5365716706805792666">Google kan controleren of je wachtwoorden betrokken waren bij een gegevenslek. Dit wordt ingeschakeld wanneer je inlogt met je Google-account.</translation>
 <translation id="5365881113273618889">De map die je hebt geselecteerd, bevat gevoelige bestanden. Weet je zeker dat je '<ph name="APP_NAME" />' permanente schrijftoegang wilt geven tot deze map?</translation>
 <translation id="5367091008316207019">Bestand lezen...</translation>
 <translation id="5368720394188453070">Je telefoon is vergrendeld. Ontgrendel deze om door te gaan.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Geavanceerde netwerkeigenschappen weergeven</translation>
 <translation id="6212168817037875041">Scherm uitschakelen</translation>
 <translation id="6212752530110374741">Link e-mailen</translation>
-<translation id="6214642087594370545">Een waarschuwing weergeven wanneer je een onveilig wachtwoord gebruikt dat betrokken was bij een gegevenslek. Deze functie is alleen beschikbaar voor ingelogde gebruikers.</translation>
 <translation id="6216696360484424239">Automatisch inloggen</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> is offline. Maak verbinding met internet en probeer het opnieuw.</translation>
 <translation id="6220413761270491930">Fout bij laden van extensie</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Printer toevoegen…</translation>
 <translation id="6770664076092644100">Verifiëren via NFC</translation>
 <translation id="6771503742377376720">Is een certificeringsinstantie</translation>
+<translation id="6775163072363532304">Beschikbare apparaten worden hier weergegeven.</translation>
 <translation id="6777817260680419853">Omleiding geblokkeerd</translation>
 <translation id="6778737459546443941">Je ouder of voogd heeft dit nog niet goedgekeurd</translation>
 <translation id="677965093459947883">Zeer klein</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Andere gebruikers.</translation>
 <translation id="7442465037756169001">Je Hangouts Meet-hardware kan worden ingesteld.</translation>
 <translation id="744341768939279100">Een nieuw profiel maken</translation>
+<translation id="7443806024147773267">Toegang tot je wachtwoorden telkens wanneer je bent ingelogd op je Google-account</translation>
 <translation id="7444046173054089907">Deze site is geblokkeerd</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> uitschakelen</translation>
 <translation id="7448430327655618736">Apps automatisch installeren</translation>
@@ -4380,7 +4386,7 @@
 <translation id="7506541170099744506">Je <ph name="DEVICE_TYPE" /> is aangemeld voor bedrijfsbeheer.</translation>
 <translation id="7507930499305566459">Certificaat voor statusbeantwoorder</translation>
 <translation id="7508054832109420082">Toegang verlenen tot printers</translation>
-<translation id="7510943789645525906">Hiermee word je gewaarschuwd als een wachtwoord dat je gebruikt, betrokken was bij een gegevenslek</translation>
+<translation id="7510943789645525906">Je krijgt een waarschuwing als je wachtwoord betrokken was bij een gegevenslek</translation>
 <translation id="7513029293694390567">Automatisch inloggen bij websites met de opgeslagen gegevens. Als de functie is uitgeschakeld, wordt elke keer om bevestiging gevraagd voordat je inlogt bij een website.</translation>
 <translation id="7514365320538308">Downloaden</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4446,7 +4452,7 @@
 <translation id="7625568159987162309">Rechten en op sites opgeslagen gegevens bekijken</translation>
 <translation id="7629827748548208700">Tabblad: <ph name="TAB_NAME" /></translation>
 <translation id="7631014249255418691">Back-up maken van Linux-apps en -bestanden is geslaagd</translation>
-<translation id="7631205654593498032">Als je je apparaten koppelt, stem je ermee in dat je <ph name="DEVICE_TYPE" /> het volgende kan doen:</translation>
+<translation id="7631205654593498032">Door je apparaten te koppelen geef je de <ph name="DEVICE_TYPE" /> toestemming om:</translation>
 <translation id="7631887513477658702">&amp;Altijd bestanden van dit type openen</translation>
 <translation id="7632948528260659758">Bijwerken van de volgende kiosk-apps is mislukt:</translation>
 <translation id="763632859238619983">Niet toestaan dat sites betalingshandlers installeren</translation>
@@ -4608,7 +4614,7 @@
     <ph name="BR" />
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Opmerking:<ph name="END_BOLD" /> Het systeem wordt opnieuw opgestart tijdens het proces.</translation>
-<translation id="7828731929332799387">Hiermee worden alle cookies en sitegegevens verwijderd die beschikbaar zijn in de context van derden. Wil je doorgaan?</translation>
+<translation id="7828731929332799387">Dit verwijdert alle cookies en sitegegevens van derden. Wil je doorgaan?</translation>
 <translation id="7829298379596169484">Audio-invoer openen</translation>
 <translation id="7830594666202422257">Verbinden met Linux</translation>
 <translation id="7831491651892296503">Fout bij configureren van netwerk</translation>
@@ -4748,6 +4754,7 @@
 <translation id="8014154204619229810">De updater wordt momenteel uitgevoerd. Klik op Vernieuwen om opnieuw te controleren.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan niet worden teruggezet naar de voorgaande versie. Probeer Powerwash opnieuw op je apparaat.</translation>
 <translation id="8014210335923519270">Verbeter <ph name="IDS_SHORT_PRODUCT_NAME" /> en de beveiliging ervan door systeem- en gebruiksgegevens naar Google te verzenden</translation>
+<translation id="8015780634880457457">Google kan controleren of je wachtwoorden betrokken waren bij een gegevenslek</translation>
 <translation id="8016266267177410919">Tijdelijke opslag</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Snelkoppeling bewerkt</translation>
@@ -4866,6 +4873,7 @@
 <translation id="8188389033983459049">Controleer de instellingen van je apparaat en schakel je apparaat in om door te gaan</translation>
 <translation id="8190193592390505034">Verbinding maken met <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Je apps, extensies en thema's beheren</translation>
+<translation id="819464600477418284">Deze app kan niet worden verwijderd omdat hij onderdeel is van Chrome OS.</translation>
 <translation id="8195027750202970175">Grootte op schijf</translation>
 <translation id="8198323535106903877">We installeren deze <ph name="NUMBER_OF_APPS" /> apps voor je</translation>
 <translation id="8199300056570174101">Eigenschappen van netwerk (service) en apparaat</translation>
@@ -4926,6 +4934,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Ook als je deze functie uitschakelt, is het mogelijk dat er via dit apparaat informatie wordt verzonden die nodig is voor essentiële services (zoals systeemupdates en beveiliging).<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />De eigenaar kan deze functie beheren via Instellingen &gt; Geavanceerd &gt; Automatisch diagnostische en gebruiksgegevens verzenden naar Google.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Als de instelling 'Aanvullende web- en app-activiteit' is ingeschakeld voor je kind, kunnen deze gegevens worden opgeslagen in het Google-account van je kind. Ga naar families.google.com voor meer informatie over deze instellingen en hoe je ze kunt aanpassen.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Ongeldig clientcertificaat</translation>
 <translation id="8270242299912238708">Pdf-documenten</translation>
 <translation id="827097179112817503">Knop 'Homepage' weergeven</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 bladwijzer verwijderd}other{# bladwijzers verwijderd}}</translation>
@@ -5236,7 +5245,7 @@
 <translation id="8736288397686080465">Deze site is geüpdatet op de achtergrond.</translation>
 <translation id="8737685506611670901">Links voor <ph name="PROTOCOL" /> openen in plaats van <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
-<translation id="8742371904523228557"><ph name="ONE_TIME_CODE" /> is je code voor <ph name="ORIGIN" /></translation>
+<translation id="8742371904523228557">Je code voor <ph name="ORIGIN" /> is<ph name="ONE_TIME_CODE" />.</translation>
 <translation id="8743390665131937741">Zoomniveau volledig scherm:</translation>
 <translation id="8743864605301774756">1 uur geleden geüpdatet</translation>
 <translation id="874689135111202667">{0,plural, =1{Eén bestand naar deze site uploaden?}other{# bestanden naar deze site uploaden?}}</translation>
@@ -5310,7 +5319,7 @@
 <translation id="8828933418460119530">DNS-naam</translation>
 <translation id="883062543841130884">Vervangingen</translation>
 <translation id="8830796635868321089">Het controleren op updates met de huidige proxyinstellingen is mislukt. Pas je <ph name="PROXY_SETTINGS_LINK_START" />proxyinstellingen<ph name="PROXY_SETTINGS_LINK_END" /> aan.</translation>
-<translation id="8831140208248705279">Samen werken je <ph name="DEVICE_TYPE" /> en Android-telefoon beter. Koppel ze zodat je kunt sms'en vanaf je computer, je internetverbinding kunt delen en je <ph name="DEVICE_TYPE" /> kunt ontgrendelen met je telefoon.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
+<translation id="8831140208248705279">Je <ph name="DEVICE_TYPE" /> en je Android-telefoon werken nog beter samen als ze gekoppeld zijn, Zo kun je sms'en vanaf je computer, je internetverbinding delen en je <ph name="DEVICE_TYPE" /> ontgrendelen met je telefoon.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">Extensie-instellingen openen</translation>
 <translation id="8834039744648160717">Netwerkconfiguratie wordt beheerd door <ph name="USER_EMAIL" />.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Niet verbonden</translation>
 <translation id="8876307312329369159">Deze instelling kan niet worden gewijzigd tijdens een demosessie.</translation>
 <translation id="8877448029301136595">[hoofddirectory]</translation>
+<translation id="8879220587046205278">Apps uit Google Play hebben mogelijk toegang nodig tot het volledige bestandssysteem om bestanden te lezen en schrijven op externe opslagapparaten. Bestanden en mappen die zijn gemaakt op het apparaat zijn zichtbaar voor iedereen die de externe schijf gebruikt.</translation>
 <translation id="8879284080359814990">Weergeven al&amp;s tabblad</translation>
 <translation id="8879921471468674457">Inloggegevens onthouden</translation>
 <translation id="8881020143150461183">Probeer het opnieuw. Neem contact op met <ph name="CARRIER_NAME" /> voor technische support.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index ae10c92..627d7b3 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -2162,7 +2162,6 @@
 <translation id="4146026355784316281">Åpne alltid med systemvisningsprogrammet</translation>
 <translation id="4146785383423576110">Tilbakestill og rydd opp</translation>
 <translation id="4147911968024186208">Prøv på nytt. Hvis du ser denne feilen igjen, kan du kontakte brukerstøtterepresentanten din.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Skjerm</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 fane}other{# faner}}</translation>
 <translation id="4154664944169082762">Fingeravtrykk</translation>
@@ -3514,7 +3513,6 @@
 <translation id="6212039847102026977">Vis avanserte nettverksegenskaper</translation>
 <translation id="6212168817037875041">Slå av skjermen</translation>
 <translation id="6212752530110374741">Send linken på e-post</translation>
-<translation id="6214642087594370545">Vis en advarsel når du bruker utrygge passord som har vært en del av et databrudd. Dette er kun tilgjengelig for påloggede brukere.</translation>
 <translation id="6216696360484424239">Logg på automatisk</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> er uten nett. Koble til Internett og prøv på nytt.</translation>
 <translation id="6220413761270491930">Det oppsto en feil under innlastingen av utvidelsen</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index fc10812..6c44a063 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -302,7 +302,7 @@
 <translation id="1444628761356461360">Tym urządzeniem zarządza właściciel urządzenia: <ph name="OWNER_EMAIL" />.</translation>
 <translation id="144518587530125858">Nie można wczytać ścieżki „<ph name="IMAGE_PATH" />” dla motywu.</translation>
 <translation id="1445693676523799095">To może chwilę potrwać</translation>
-<translation id="1450011005989029586">W wyniku naruszenia bezpieczeństwa danych w witrynie lub aplikacji doszło do ujawnienia Twojego hasła. Chrome zaleca natychmiastową <ph name="BOLD" /> na <ph name="ORIGIN" />.</translation>
+<translation id="1450011005989029586">W wyniku naruszenia bezpieczeństwa danych w witrynie lub aplikacji doszło do ujawnienia Twojego hasła. Chrome zaleca: natychmiast <ph name="BOLD" /> na <ph name="ORIGIN" />.</translation>
 <translation id="1451375123200651445">Strona internetowa, pojedynczy plik</translation>
 <translation id="1451917004835509682">Dodaj nadzorowaną osobę</translation>
 <translation id="1454223536435069390">Wykon&amp;aj zrzut ekranu</translation>
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Tylko w bieżącej sesji incognito</translation>
 <translation id="1698650002254827833">Nie można załadować listy aplikacji. Spróbuj ponownie.</translation>
 <translation id="1701062906490865540">Usuń tę osobę</translation>
+<translation id="1703331064825191675">Nie musisz się już martwić o bezpieczeństwo swoich haseł</translation>
 <translation id="1706586824377653884">Dodane przez administratora</translation>
 <translation id="1706625117072057435">Poziomy powiększenia</translation>
 <translation id="1708338024780164500">(Nieaktywne)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nowe okno</translation>
 <translation id="1766575458646819543">Wyłączono tryb pełnego ekranu</translation>
+<translation id="1766957085594317166">Możesz bezpiecznie zapisać hasła na swoim koncie Google, by w przyszłości nie musieć ich wpisywać</translation>
 <translation id="1768278914020124551">Ups. Podczas łączenia się z serwerem logowania wystąpił problem. Sprawdź połączenie sieciowe i nazwę domeny, a potem spróbuj jeszcze raz.</translation>
 <translation id="1769104665586091481">Otwórz link w nowym &amp;oknie</translation>
 <translation id="1773212559869067373">Certyfikat uwierzytelniania został odrzucony lokalnie</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Brak połączenia</translation>
 <translation id="3752582316358263300">OK</translation>
 <translation id="3752673729237782832">Moje urządzenia</translation>
+<translation id="3753033997400164841">Zapisz raz – używaj w dowolnym miejscu</translation>
 <translation id="3755411799582650620">Telefon <ph name="PHONE_NAME" /> może teraz odblokowywać też urządzenie <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Strona używa mikrofonu</translation>
 <translation id="3757733214359997190">Nie znaleziono stron</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Zawsze otwieraj w przeglądarce systemowej</translation>
 <translation id="4146785383423576110">Resetowanie komputera i czyszczenie danych</translation>
 <translation id="4147911968024186208">Spróbuj jeszcze raz. Jeśli ten błąd pojawi się ponownie, skontaktuj się z przedstawicielem pomocy.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Wyświetlacz</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 karta}few{# karty}many{# kart}other{# karty}}</translation>
 <translation id="4154664944169082762">Odciski cyfrowe</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Konfigurowanie Kerberos</translation>
 <translation id="4235200303672858594">Cały ekran</translation>
 <translation id="4235965441080806197">Anuluj logowanie</translation>
+<translation id="4242145785130247982">Funkcja nie obsługuje wielu certyfikatów klienta</translation>
 <translation id="4242533952199664413">Otwórz ustawienia</translation>
 <translation id="4242577469625748426">Instalacja ustawień zasad na urządzeniu nie powiodła się: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Znajdź więcej aplikacji dla rysika</translation>
@@ -2230,7 +2233,7 @@
 <translation id="4267953847983678297">Automatycznie łącz się z siecią komórkową</translation>
 <translation id="4268025649754414643">Szyfrowanie klucza</translation>
 <translation id="4270393598798225102">Wersja <ph name="NUMBER" /></translation>
-<translation id="4270615291506829403">zmianę hasła</translation>
+<translation id="4270615291506829403">zmień hasło</translation>
 <translation id="4275663329226226506">Multimedia</translation>
 <translation id="4275830172053184480">Zrestartuj urządzenie</translation>
 <translation id="4278101229438943600">Twój Asystent jest gotowy</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Włącz tylko funkcje związane z Synchronizacją <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Hasła są zapisywane na Twoim koncie Google, dzięki czemu możesz ich używać na dowolnym urządzeniu</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Tę aplikację zainstalował administrator.</translation>
 <translation id="4964455510556214366">Układ</translation>
 <translation id="4964673849688379040">Sprawdzam...</translation>
 <translation id="4965808351167763748">Czy na pewno chcesz skonfigurować to urządzenie na potrzeby Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Pokaż na pasku narzędzi</translation>
 <translation id="5362741141255528695">Wybierz plik kluczy prywatnych.</translation>
 <translation id="5363109466694494651">Wykonaj Powerwash i przywróć</translation>
+<translation id="5365716706805792666">Google może sprawdzić, czy bezpieczeństwo Twoich haseł zostało naruszone. Ta funkcja zostanie włączona, gdy zalogujesz się na swoje konto Google.</translation>
 <translation id="5365881113273618889">Wybrany folder zawiera poufne pliki. Czy na pewno chcesz, by aplikacja „<ph name="APP_NAME" />” miała do niego stały dostęp z uprawnieniami do zapisu?</translation>
 <translation id="5367091008316207019">Odczytuję plik..</translation>
 <translation id="5368720394188453070">Twój telefon jest zablokowany. Aby uzyskać do niego dostęp, odblokuj go.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Pokaż zaawansowane właściwości sieci</translation>
 <translation id="6212168817037875041">Wyłącz ekran</translation>
 <translation id="6212752530110374741">Prześlij link e-mailem</translation>
-<translation id="6214642087594370545">Wyświetli ostrzeżenie, kiedy użyjesz hasła, które wykorzystano do naruszenia bezpieczeństwa danych. Ta funkcja jest dostępna tylko dla zalogowanych użytkowników.</translation>
 <translation id="6216696360484424239">Logowanie automatyczne</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> jest offline. Połącz się z internetem i spróbuj ponownie.</translation>
 <translation id="6220413761270491930">Błąd podczas ładowania rozszerzenia</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Dodaję drukarkę...</translation>
 <translation id="6770664076092644100">Zweryfikuj przez NFC</translation>
 <translation id="6771503742377376720">Jest urzędem certyfikacji</translation>
+<translation id="6775163072363532304">Tu pojawią się dostępne urządzenia.</translation>
 <translation id="6777817260680419853">Przekierowanie zostało zablokowane</translation>
 <translation id="6778737459546443941">Twój rodzic jeszcze na to nie zezwolił</translation>
 <translation id="677965093459947883">Bardzo mała</translation>
@@ -4267,7 +4272,7 @@
 <translation id="7334190995941642545">Smart Lock jest obecnie niedostępny. Spróbuj ponownie później.</translation>
 <translation id="7334274148831027933">Włącz lupę zadokowaną</translation>
 <translation id="7335974957018254119">Używaj sprawdzania pisowni dla języka:</translation>
-<translation id="7336799713063880535">Blokuję powiadom.</translation>
+<translation id="7336799713063880535">Zablokowane.</translation>
 <translation id="7338630283264858612">Numer seryjny urządzenia jest nieprawidłowy.</translation>
 <translation id="7339763383339757376">PKCS #7, jeden certyfikat</translation>
 <translation id="7339785458027436441">Sprawdzaj pisownię w trakcie pisania</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Inni użytkownicy</translation>
 <translation id="7442465037756169001">Hardware Hangouts Meet jest gotowy do konfiguracji.</translation>
 <translation id="744341768939279100">Utwórz nowy profil</translation>
+<translation id="7443806024147773267">Miej dostęp do swoich haseł zawsze wtedy, gdy zalogujesz się na swoje konto Google</translation>
 <translation id="7444046173054089907">Ta strona jest zablokowana</translation>
 <translation id="7444983668544353857">Wyłącz – <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automatyczne instalowanie aplikacji</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">Obecnie działa aktualizator. Odśwież za minutę, by sprawdzić ponownie.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może przywrócić poprzednio zainstalowanej wersji. Spróbuj ponownie, by wykonać Powerwash na urządzeniu.</translation>
 <translation id="8014210335923519270">Pomóż nam ulepszyć działanie i zwiększyć bezpieczeństwo <ph name="IDS_SHORT_PRODUCT_NAME" />, wysyłając informacje o systemie i użytkowaniu do Google</translation>
+<translation id="8015780634880457457">Google może sprawdzić, czy bezpieczeństwo Twoich haseł zostało naruszone</translation>
 <translation id="8016266267177410919">Pamięć tymczasowa</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Skrót był edytowany</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Sprawdź ustawienia urządzenia i włącz tę opcję, by kontynuować</translation>
 <translation id="8190193592390505034">Łączenie z siecią <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Zarządzanie Twoimi aplikacjami, rozszerzeniami i motywami</translation>
+<translation id="819464600477418284">Tej aplikacji nie można odinstalować, ponieważ stanowi ona część systemu operacyjnego Chrome.</translation>
 <translation id="8195027750202970175">Rozmiar na dysku</translation>
 <translation id="8198323535106903877">Zainstalujemy dla Ciebie te aplikacje (<ph name="NUMBER_OF_APPS" />)</translation>
 <translation id="8199300056570174101">Właściwości sieci (usługi) i urządzenia</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Wyłączenie tej funkcji nie wpływa na możliwość wysyłania przez urządzenie informacji potrzebnych do działania ważnych usług, na przykład zabezpieczeń czy aktualizacji systemu.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Właściciel może włączyć lub wyłączyć tę funkcję, wybierając Ustawienia &gt; Zaawansowane &gt; Automatycznie wysyłaj do Google dane diagnostyczne i informacje o użytkowaniu.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Jeśli dodatkowo Twoje dziecko ma włączoną Aktywność w internecie i aplikacjach, dane mogą być zapisywane na jego koncie Google. Więcej informacji o tych ustawieniach i ich zmienianiu znajdziesz na families.google.com<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Nieprawidłowy certyfikat klienta</translation>
 <translation id="8270242299912238708">Dokumenty PDF</translation>
 <translation id="827097179112817503">Pokaż przycisk strony głównej</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Usunięto 1 zakładkę}few{Usunięto # zakładki}many{Usunięto # zakładek}other{Usunięto # zakładki}}</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Brak połączenia</translation>
 <translation id="8876307312329369159">Tego ustawienia nie można zmienić w sesji demonstracyjnej.</translation>
 <translation id="8877448029301136595">[katalog główny]</translation>
+<translation id="8879220587046205278">Aplikacje z Google Play mogą wymagać pełnego dostępu do systemu plików, by odczytywać i zapisywać pliki na zewnętrznych urządzeniach pamięci masowej. Pliki i foldery utworzone na urządzeniu są widoczne dla każdej osoby używającej dysku zewnętrznego.</translation>
 <translation id="8879284080359814990">&amp;Pokaż jako kartę</translation>
 <translation id="8879921471468674457">Zapamiętaj dane logowania</translation>
 <translation id="8881020143150461183">Spróbuj ponownie. Aby uzyskać pomoc techniczną, skontaktuj się z <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 22e30939..d3c3ebe 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Apenas a sessão anônima atual</translation>
 <translation id="1698650002254827833">Não é possível carregar a lista de apps. Tente novamente.</translation>
 <translation id="1701062906490865540">Remover esta pessoa</translation>
+<translation id="1703331064825191675">Nunca se preocupe com suas senhas</translation>
 <translation id="1706586824377653884">Adicionado pelo seu administrador</translation>
 <translation id="1706625117072057435">Níveis de zoom</translation>
 <translation id="1708338024780164500">(Inativa)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nova janela</translation>
 <translation id="1766575458646819543">Tela cheia fechada</translation>
+<translation id="1766957085594317166">Salve suas senhas de maneira segura na sua Conta do Google, e nunca mais precisará digitá-las novamente.</translation>
 <translation id="1768278914020124551">Ops! Ocorreu um problema ao entrar em contato com o servidor de logon. Verifique a conexão com a Internet e o nome de domínio, depois tente novamente.</translation>
 <translation id="1769104665586091481">Abrir link em uma nova &amp;janela</translation>
 <translation id="1773212559869067373">Certificado de autenticação rejeitado localmente</translation>
@@ -873,7 +875,7 @@
 <translation id="2270450558902169558">Trocar dados com qualquer dispositivo no domínio <ph name="DOMAIN" /></translation>
 <translation id="2270627217422354837">Trocar dados com qualquer dispositivo nos domínios: <ph name="DOMAINS" /></translation>
 <translation id="2272570998639520080">Copo de martini</translation>
-<translation id="2273119997271134996">Problema na da porta de vídeo da base</translation>
+<translation id="2273119997271134996">Problema na porta de vídeo da base</translation>
 <translation id="2276503375879033601">Adicionar mais aplicativos</translation>
 <translation id="2277255602909579701">Todos os dados de cookies e de sites</translation>
 <translation id="2277769717710009150">{COUNT,plural, =1{1 item copiado}one{# item copiado}other{# itens copiados}}</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Não conectado</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Meus dispositivos</translation>
+<translation id="3753033997400164841">Salve uma vez. Use em qualquer lugar</translation>
 <translation id="3755411799582650620">Seu <ph name="PHONE_NAME" /> agora pode desbloquear este <ph name="DEVICE_TYPE" /> também.</translation>
 <translation id="375636864092143889">O site está usando seu microfone</translation>
 <translation id="3757733214359997190">Nenhum site encontrado</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Sempre abrir com visualizador do sistema</translation>
 <translation id="4146785383423576110">Redefinir e limpar</translation>
 <translation id="4147911968024186208">Tente novamente. Se o erro se repetir, entre em contato com seu representante de suporte.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Exibição</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 guia}one{# guias}other{# guias}}</translation>
 <translation id="4154664944169082762">Assinaturas digitais</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Configurar o Kerberos</translation>
 <translation id="4235200303672858594">Tela cheia</translation>
 <translation id="4235965441080806197">Cancelar login</translation>
+<translation id="4242145785130247982">Múltiplos certificados de clientes não são aceitos.</translation>
 <translation id="4242533952199664413">Abrir configurações.</translation>
 <translation id="4242577469625748426">Falha ao instalar configurações da política no dispositivo: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Encontrar mais apps para usar com a stylus</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Ativa apenas os recursos relacionados à sincronização do <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">As senhas são salvas na sua Conta do Google para que você possa usá-las em qualquer dispositivo</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" />: <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Este app foi instalado pelo seu administrador.</translation>
 <translation id="4964455510556214366">Organização</translation>
 <translation id="4964673849688379040">Verificando...</translation>
 <translation id="4965808351167763748">Tem certeza que quer configurar este dispositivo para executar o Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Mostrar na barra de ferramentas</translation>
 <translation id="5362741141255528695">Selecionar arquivo de chave privada.</translation>
 <translation id="5363109466694494651">Realizar Powerwash e reverter</translation>
+<translation id="5365716706805792666">O Google pode verificar se suas senhas estavam em uma violação de dados. Isso será ativado quando você fizer login com sua Conta Google.</translation>
 <translation id="5365881113273618889">A pasta selecionada contém arquivos confidenciais. Tem certeza de que quer conceder acesso permanente de gravação nessa pasta ao "<ph name="APP_NAME" />"?</translation>
 <translation id="5367091008316207019">Lendo arquivo...</translation>
 <translation id="5368720394188453070">Seu smartphone está bloqueado. Desbloqueie-o para entrar.</translation>
@@ -3521,7 +3526,6 @@
 <translation id="6212039847102026977">Mostrar propriedades de rede avançadas</translation>
 <translation id="6212168817037875041">Desligar a tela</translation>
 <translation id="6212752530110374741">Enviar link por e-mail</translation>
-<translation id="6214642087594370545">Mostrar um aviso quando você usar uma senha não segura afetada por violação de dados. Disponível apenas para usuários conectados.</translation>
 <translation id="6216696360484424239">Fazer login automaticamente</translation>
 <translation id="6218058416316985984">O <ph name="DEVICE_TYPE" /> está off-line. Conecte-se à Internet e tente novamente.</translation>
 <translation id="6220413761270491930">Erro ao carregar extensão</translation>
@@ -3878,6 +3882,7 @@
 <translation id="6769712124046837540">Adicionando impressora...</translation>
 <translation id="6770664076092644100">Verificar por NFC</translation>
 <translation id="6771503742377376720">É uma Autoridade de certificação</translation>
+<translation id="6775163072363532304">Os dispositivos disponíveis serão exibidos aqui.</translation>
 <translation id="6777817260680419853">Redirecionamento bloqueado</translation>
 <translation id="6778737459546443941">Seu responsável ainda não o aprovou</translation>
 <translation id="677965093459947883">Muito pequeno</translation>
@@ -4338,6 +4343,7 @@
 <translation id="7441830548568730290">Outros usuários</translation>
 <translation id="7442465037756169001">Seu hardware Hangouts Meet está pronto para ser configurado.</translation>
 <translation id="744341768939279100">Criar um novo perfil</translation>
+<translation id="7443806024147773267">Acesse suas senhas sempre que estiver utilizando sua Conta Google</translation>
 <translation id="7444046173054089907">Este site está bloqueado</translation>
 <translation id="7444983668544353857">Desativar <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instalar apps automaticamente</translation>
@@ -4382,7 +4388,7 @@
 <translation id="7506541170099744506">Seu <ph name="DEVICE_TYPE" /> foi inscrito para o gerenciamento empresarial.</translation>
 <translation id="7507930499305566459">Certificado do respondente de status</translation>
 <translation id="7508054832109420082">Conceder acesso a impressoras</translation>
-<translation id="7510943789645525906">Avisa se uma senha que você usa for parte de uma violação de dados</translation>
+<translation id="7510943789645525906">Avisa se uma senha que você usa estava em uma violação de dados</translation>
 <translation id="7513029293694390567">Faça login automaticamente nos sites que usam credenciais armazenadas. Quando o recurso estiver desativado, será necessário fornecer uma confirmação todas as vezes que fizer login em um site.</translation>
 <translation id="7514365320538308">Fazer o download</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4751,6 +4757,7 @@
 <translation id="8014154204619229810">O atualizador está sendo executado no momento. Aguarde um minuto e atualize para verificar novamente.</translation>
 <translation id="8014206674403687691">Não foi possível reverter o produto <ph name="IDS_SHORT_PRODUCT_NAME" /> para a versão anteriormente instalada. Tente executar novamente o Powerwash no seu dispositivo.</translation>
 <translation id="8014210335923519270">Melhore o <ph name="IDS_SHORT_PRODUCT_NAME" /> e a segurança dele enviando informações do sistema e sobre o uso para o Google</translation>
+<translation id="8015780634880457457">O Google pode verificar se suas senhas estavam em uma violação de dados</translation>
 <translation id="8016266267177410919">Armazenamento temporário</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Atalho editado</translation>
@@ -4869,6 +4876,7 @@
 <translation id="8188389033983459049">Verifique as configurações do seu dispositivo e ative-o para continuar</translation>
 <translation id="8190193592390505034">Conectando-se a <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gerenciar seus aplicativos, extensões e temas</translation>
+<translation id="819464600477418284">Não é possível desinstalar este app, porque ele faz parte do Chrome OS.</translation>
 <translation id="8195027750202970175">Tamanho em disco</translation>
 <translation id="8198323535106903877">Instalaremos estes <ph name="NUMBER_OF_APPS" /> apps para você</translation>
 <translation id="8199300056570174101">Propriedades da rede (serviço) e do dispositivo</translation>
@@ -4929,6 +4937,7 @@
     <ph name="BEGIN_PARAGRAPH2" />A desativação desse recurso não afeta a capacidade do dispositivo de enviar as informações necessárias para serviços básicos como atualizações do sistema e segurança.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />O proprietário pode controlar esse recurso em "Configurações" &gt; "Avançado" &gt; "Enviar automaticamente dados de uso e diagnóstico ao Google".<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Se a configuração "Atividade na Web e de apps" adicional estiver ativada para seu filho, esses dados poderão ser salvos na Conta do Google dele. Saiba mais sobre essas configurações e como ajustá-las em families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Certificado do cliente inválido</translation>
 <translation id="8270242299912238708">Documentos em PDF</translation>
 <translation id="827097179112817503">Mostrar botão "Página inicial"</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{ favorito excluído}one{# favorito excluído}other{# favoritos excluídos}}</translation>
@@ -5342,6 +5351,7 @@
 <translation id="8874184842967597500">Não conectado</translation>
 <translation id="8876307312329369159">Não é possível alterar essa configuração em uma sessão de demonstração.</translation>
 <translation id="8877448029301136595">[diretório pai]</translation>
+<translation id="8879220587046205278">Os aplicativos do Google Play podem exigir acesso total ao sistema de arquivos para a leitura e a gravação de arquivos em dispositivos de armazenamento externos. Os arquivos e pastas criados no dispositivo ficam visíveis para qualquer pessoa que use o drive externo.</translation>
 <translation id="8879284080359814990">&amp;Mostrar como guia</translation>
 <translation id="8879921471468674457">Lembrar informações de login</translation>
 <translation id="8881020143150461183">Tente novamente. Se precisar de suporte técnico, fale com a <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 5cc72f7..e636e41b 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Apenas para a sessão no modo de navegação anónima atual</translation>
 <translation id="1698650002254827833">Não é possível carregar a lista de aplicações. Tente novamente.</translation>
 <translation id="1701062906490865540">Remover esta pessoa</translation>
+<translation id="1703331064825191675">Nunca mais se preocupe com as suas palavras-passe</translation>
 <translation id="1706586824377653884">Adicionado pelo gestor</translation>
 <translation id="1706625117072057435">Níveis de zoom</translation>
 <translation id="1708338024780164500">(Inativa)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nova Janela</translation>
 <translation id="1766575458646819543">Saiu do modo de ecrã inteiro</translation>
+<translation id="1766957085594317166">Guarde as palavras-passe em segurança na sua Conta Google para que não tenha de as introduzir novamente.</translation>
 <translation id="1768278914020124551">Ups! Ocorreu um problema ao contactar o servidor de início de sessão. Verifique a sua ligação de rede e o nome do domínio, e tente novamente.</translation>
 <translation id="1769104665586091481">Abrir Link Numa Nova &amp;Janela</translation>
 <translation id="1773212559869067373">Certificado de autenticação rejeitado localmente</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Desligado</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Os meus dispositivos</translation>
+<translation id="3753033997400164841">Armazene uma vez. Utilize em todas as plataformas.</translation>
 <translation id="3755411799582650620">O seu <ph name="PHONE_NAME" /> pode agora desbloquear também este <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">O site está a utilizar o microfone.</translation>
 <translation id="3757733214359997190">Não foram encontrados sites.</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Abrir sempre com o visualizador do sistema</translation>
 <translation id="4146785383423576110">Repor e limpar</translation>
 <translation id="4147911968024186208">Tente novamente. Se vir novamente este erro, contacte o seu representante do apoio técnico.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Visualização</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 separador}other{# separadores}}</translation>
 <translation id="4154664944169082762">Impressões digitais</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Configure o Kerberos</translation>
 <translation id="4235200303672858594">Ecrã inteiro</translation>
 <translation id="4235965441080806197">Cancelar início de sessão</translation>
+<translation id="4242145785130247982">Não são suportados certificados de vários clientes.</translation>
 <translation id="4242533952199664413">Abrir definições</translation>
 <translation id="4242577469625748426">Falha ao instalar as definições da política no dispositivo: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Encontrar mais aplicações para a caneta stylus</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Ativa apenas funcionalidades relacionadas com a Sincronização do <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="4959262764292427323">As palavras-passe são guardadas na sua Conta Google para que as possa utilizar em qualquer dispositivo.</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Esta aplicação foi instalada pelo seu administrador.</translation>
 <translation id="4964455510556214366">Disposição</translation>
 <translation id="4964673849688379040">A verificar...</translation>
 <translation id="4965808351167763748">Tem a certeza de que pretende configurar este dispositivo para executar o Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Mostrar na Barra de ferramentas</translation>
 <translation id="5362741141255528695">Selecionar ficheiro de chave privada.</translation>
 <translation id="5363109466694494651">Powerwash e reverter</translation>
+<translation id="5365716706805792666">A Google pode verificar se as suas palavras-passe estiveram envolvidas numa violação de dados. Esta funcionalidade será ativada quando iniciar sessão com a sua Conta Google.</translation>
 <translation id="5365881113273618889">A pasta que selecionou contém ficheiros confidenciais. Tem a certeza de que pretende conceder à aplicação "<ph name="APP_NAME" />" acesso de escrita permanente a esta pasta?</translation>
 <translation id="5367091008316207019">A ler ficheiro...</translation>
 <translation id="5368720394188453070">O seu telemóvel está bloqueado. Desbloqueie-o para introduzir.</translation>
@@ -3520,7 +3525,6 @@
 <translation id="6212039847102026977">Mostrar propriedades de rede avançadas</translation>
 <translation id="6212168817037875041">Desligar o ecrã</translation>
 <translation id="6212752530110374741">Enviar link por email</translation>
-<translation id="6214642087594370545">Esta funcionalidade permite apresentar um aviso quando utilizar uma palavra-passe insegura que tenha feito parte de uma violação de dados. Apenas está disponível para utilizadores com sessão iniciada.</translation>
 <translation id="6216696360484424239">Iniciar sessão automaticamente</translation>
 <translation id="6218058416316985984">O <ph name="DEVICE_TYPE" /> está offline. Ligue-se à Internet e tente novamente.</translation>
 <translation id="6220413761270491930">Erro ao carregar a extensão</translation>
@@ -3877,6 +3881,7 @@
 <translation id="6769712124046837540">A adicionar impressora…</translation>
 <translation id="6770664076092644100">Validar através de NFC</translation>
 <translation id="6771503742377376720">É uma autoridade de certificação</translation>
+<translation id="6775163072363532304">Os dispositivos disponíveis aparecem aqui.</translation>
 <translation id="6777817260680419853">Redirecionamento bloqueado</translation>
 <translation id="6778737459546443941">O teu pai/a tua mãe ainda não o aprovou</translation>
 <translation id="677965093459947883">Muito pequeno</translation>
@@ -4337,6 +4342,7 @@
 <translation id="7441830548568730290">Outros utilizadores</translation>
 <translation id="7442465037756169001">O hardware Hangouts Meet está pronto para ser configurado.</translation>
 <translation id="744341768939279100">Criar um novo perfil</translation>
+<translation id="7443806024147773267">Aceda às suas palavras-passe sempre que tiver sessão iniciada na sua Conta Google.</translation>
 <translation id="7444046173054089907">Este site está bloqueado</translation>
 <translation id="7444983668544353857">Desactivar <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instalar aplicações automaticamente</translation>
@@ -4750,6 +4756,7 @@
 <translation id="8014154204619229810">O atualizador está em execução atualmente. Atualize dentro de um minuto para verificar novamente.</translation>
 <translation id="8014206674403687691">Não é possível reverter para a versão anteriormente instalada do <ph name="IDS_SHORT_PRODUCT_NAME" />. Repita o processo de Powerwash do dispositivo.</translation>
 <translation id="8014210335923519270">Melhore o <ph name="IDS_SHORT_PRODUCT_NAME" /> e a sua segurança ao enviar informações do sistema e de utilização para a Google.</translation>
+<translation id="8015780634880457457">A Google pode verificar se as suas palavras-passe estiveram envolvidas numa violação de dados.</translation>
 <translation id="8016266267177410919">Armazenamento temporário</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Atalho editado</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Verifique as definições do dispositivo e ative-o para continuar.</translation>
 <translation id="8190193592390505034">A ligar a <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gerir as suas aplicações, extensões e temas</translation>
+<translation id="819464600477418284">Esta aplicação faz parte do Chrome OS, pelo que não é possível desinstalá-la.</translation>
 <translation id="8195027750202970175">Tamanho em disco</translation>
 <translation id="8198323535106903877">Vamos instalar essas <ph name="NUMBER_OF_APPS" /> aplicações por si</translation>
 <translation id="8199300056570174101">Propriedades da rede (serviço) e do dispositivo</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />A desativação desta funcionalidade não afeta a capacidade deste dispositivo de enviar as informações necessárias para serviços essenciais, como as atualizações do sistema e a segurança.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />O proprietário pode controlar esta funcionalidade ao aceder a Definições &gt; Avançadas &gt; Enviar automaticamente dados de diagnóstico e de utilização para a Google.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Se a Atividade da Web e de aplicações adicional estiver ativada para a criança, estes dados poderão ser guardados na respetiva Conta Google. Saiba mais acerca destas definições e como as ajustar em families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Certificado de cliente inválido.</translation>
 <translation id="8270242299912238708">Docs PDF</translation>
 <translation id="827097179112817503">Mostrar botão Página inicial</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 marcador eliminado}other{# marcadores eliminados}}</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Sem ligação</translation>
 <translation id="8876307312329369159">Não é possível alterar esta definição numa sessão de demonstração.</translation>
 <translation id="8877448029301136595">[directório principal]</translation>
+<translation id="8879220587046205278">As aplicações do Google Play podem necessitar de acesso completo ao sistema de ficheiros para ler e gravar ficheiros em dispositivos de armazenamento externos. Os ficheiros e as pastas criados no dispositivo são visíveis para qualquer pessoa que utilize a unidade externa.</translation>
 <translation id="8879284080359814990">Mo&amp;strar Como Separador</translation>
 <translation id="8879921471468674457">Memorizar informações de início de sessão</translation>
 <translation id="8881020143150461183">Tente novamente. Para obter apoio técnico, contacte o operador <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index d43a3c48..29574a0e 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Numai sesiunea incognito actuală</translation>
 <translation id="1698650002254827833">Lista de aplicații nu se poate încărca. Reîncearcă.</translation>
 <translation id="1701062906490865540">Elimină această persoană</translation>
+<translation id="1703331064825191675">Nu-ți face griji pentru parole</translation>
 <translation id="1706586824377653884">Adăugat de administrator</translation>
 <translation id="1706625117072057435">Niveluri de zoom</translation>
 <translation id="1708338024780164500">(Inactivă)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Fereastră nouă</translation>
 <translation id="1766575458646819543">Ai ieșit din ecranul complet</translation>
+<translation id="1766957085594317166">Salvează parolele în siguranță în Contul Google și nu va mai trebui să le introduci niciodată</translation>
 <translation id="1768278914020124551">Hopa! A apărut o problemă la contactarea serverului de conectare. Verifică conexiunea la rețea și numele de domeniu, apoi încearcă din nou.</translation>
 <translation id="1769104665586091481">Deschide linkul într-o &amp;fereastră nouă</translation>
 <translation id="1773212559869067373">Certificatul de autentificare a fost respins local</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Neconectat</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Dispozitivele mele</translation>
+<translation id="3753033997400164841">Stocheaz-o o singură dată. Folosește-o peste tot</translation>
 <translation id="3755411799582650620"><ph name="PHONE_NAME" /> poate debloca acum și acest <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Site-ul folosește microfonul</translation>
 <translation id="3757733214359997190">Nu a fost găsit niciun site</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Deschide întotdeauna cu Utilitarul de vizualizare al sistemului</translation>
 <translation id="4146785383423576110">Resetează și curăță</translation>
 <translation id="4147911968024186208">Reîncearcă. Dacă vezi această eroare din nou, contactează reprezentantul de asistență.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Ecran</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{O filă}few{# file}other{# de file}}</translation>
 <translation id="4154664944169082762">Amprente digitale</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Configurează Kerberos</translation>
 <translation id="4235200303672858594">Întregul ecran</translation>
 <translation id="4235965441080806197">Anulează conectarea</translation>
+<translation id="4242145785130247982">Nu se acceptă mai multe certificate de client</translation>
 <translation id="4242533952199664413">Deschide setările</translation>
 <translation id="4242577469625748426">Setările de politică nu au putut fi instalate pe gadget: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Găsește mai multe aplicații pentru creion</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Activează numai funcțiile asociate cu Sincronizare <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Parolele sunt salvate în Contul tău Google, astfel încât să le poți folosi pe orice dispozitiv</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Aplicația a fost instalată de administrator.</translation>
 <translation id="4964455510556214366">Aranjare</translation>
 <translation id="4964673849688379040">Se verifică...</translation>
 <translation id="4965808351167763748">Sigur dorești să configurezi acest dispozitiv pentru a rula Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Afișează în bara de instrumente</translation>
 <translation id="5362741141255528695">Selectează fișierul cu cheia privată.</translation>
 <translation id="5363109466694494651">Folosește Powerwash și revino la o versiune anterioară</translation>
+<translation id="5365716706805792666">Google poate verifica dacă parolele tale fac parte dintr-o încălcare a securității datelor. Opțiunea va fi activată când te conectezi cu Contul Google.</translation>
 <translation id="5365881113273618889">Dosarul pe care l-ai selectat conține fișiere cu informații sensibile. Sigur dorești să permiți accesul de scriere permanent pentru „<ph name="APP_NAME" />” la acest dosar?</translation>
 <translation id="5367091008316207019">Se citește fișierul...</translation>
 <translation id="5368720394188453070">Telefonul este blocat. Pentru acces, deblochează-l.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Afișează proprietățile avansate pentru rețea</translation>
 <translation id="6212168817037875041">Dezactivează ecranul</translation>
 <translation id="6212752530110374741">Trimite linkul prin e-mail</translation>
-<translation id="6214642087594370545">Afișează un avertisment când folosești o parolă nesigură care a făcut parte dintr-o încălcare a securității datelor. Această opțiune este disponibilă numai pentru utilizatorii conectați.</translation>
 <translation id="6216696360484424239">Conectează-te în mod automat</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> este offline. Conectează-te la internet și încearcă din nou.</translation>
 <translation id="6220413761270491930">Eroare la încărcarea extensiei</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Se adaugă imprimanta...</translation>
 <translation id="6770664076092644100">Confirmă prin NFC</translation>
 <translation id="6771503742377376720">Este o Autoritate de certificare</translation>
+<translation id="6775163072363532304">Dispozitivele disponibile vor apărea aici.</translation>
 <translation id="6777817260680419853">Redirecționarea a fost blocată</translation>
 <translation id="6778737459546443941">Părintele tău nu l-a aprobat încă</translation>
 <translation id="677965093459947883">Foarte mică</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Alți utilizatori</translation>
 <translation id="7442465037756169001">Hardware-ul Hangouts Meet este gata pentru configurare.</translation>
 <translation id="744341768939279100">Creați un profil nou</translation>
+<translation id="7443806024147773267">Accesează-ți parolele oricând te conectezi la Contul Google</translation>
 <translation id="7444046173054089907">Acest site este blocat</translation>
 <translation id="7444983668544353857">Dezactivează <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instalează automat aplicații</translation>
@@ -4446,7 +4452,7 @@
 <translation id="7625568159987162309">Vezi permisiunile și datele stocate pe toate site-urile</translation>
 <translation id="7629827748548208700">Fila: <ph name="TAB_NAME" /></translation>
 <translation id="7631014249255418691">S-a făcut backup pentru aplicațiile și fișierele Linux.</translation>
-<translation id="7631205654593498032">Când îți conectezi dispozitivele, ești de acord că <ph name="DEVICE_TYPE" /> poate:</translation>
+<translation id="7631205654593498032">Când îți conectezi dispozitivele, ești de acord că dispozitivul <ph name="DEVICE_TYPE" /> poate:</translation>
 <translation id="7631887513477658702">&amp;Deschide întotdeauna fișierele de acest tip</translation>
 <translation id="7632948528260659758">Următoarele aplicații de tip chioșc nu au fost actualizate:</translation>
 <translation id="763632859238619983">Nu permite site-urilor să instaleze handlere pentru plăți</translation>
@@ -4609,7 +4615,7 @@
     <ph name="BR" />
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Notă:<ph name="END_BOLD" /> sistemul va reporni în timpul acestui proces.</translation>
-<translation id="7828731929332799387">Aceasta va șterge toate cookie-urile și datele privind site-urile disponibile în contexte terță parte. Dorești să continui?</translation>
+<translation id="7828731929332799387">Vor fi șterse toate cookie-urile și datele privind site-urile disponibile în contexte terță parte. Dorești să continui?</translation>
 <translation id="7829298379596169484">Se accesează intrarea audio</translation>
 <translation id="7830594666202422257">Conectează-te la Linux</translation>
 <translation id="7831491651892296503">Eroare la configurarea rețelei</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">Momentan, rulează instrumentul pentru actualizare. Actualizează într-un minut și verifică din nou.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> nu poate reveni la versiunea instalată anterior. Încearcă să folosești din nou Powerwash pe dispozitivul tău.</translation>
 <translation id="8014210335923519270">Poți îmbunătăți browserul <ph name="IDS_SHORT_PRODUCT_NAME" /> și securitatea acestuia dacă trimiți la Google informații despre sistem și utilizare</translation>
+<translation id="8015780634880457457">Google poate verifica dacă parolele tale fac parte dintr-o încălcare a securității datelor</translation>
 <translation id="8016266267177410919">Stocare temporară</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Comanda rapidă a fost editată</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Verifică setările dispozitivului și activează-l pentru a continua</translation>
 <translation id="8190193592390505034">Se conectează la <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gestionează aplicațiile, extensiile și temele dvs.</translation>
+<translation id="819464600477418284">Aplicația nu poate fi dezinstalată, deoarece face parte din sistemul de operare Chrome.</translation>
 <translation id="8195027750202970175">Dimensiune pe disc</translation>
 <translation id="8198323535106903877">Vom instala aceste <ph name="NUMBER_OF_APPS" /> aplicații pentru tine</translation>
 <translation id="8199300056570174101">Proprietăți pentru dispozitiv și rețea (serviciu)</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Dezactivarea acestei funcții nu afectează abilitatea dispozitivului de a trimite informațiile necesare pentru servicii esențiale, cum ar fi actualizările de sistem și securitatea.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Proprietarul poate controla această funcție în Setări &gt; Avansate &gt; Trimite automat la Google statistici de diagnosticare și utilizare.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Dacă este activată setarea suplimentară „Activitatea de pe web și din aplicații” pentru copilul tău, datele pot fi salvate în Contul Google al acestuia. Află mai multe despre aceste setări și cum să le modifici la families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Certificat client nevalid</translation>
 <translation id="8270242299912238708">Documente PDF</translation>
 <translation id="827097179112817503">Afișează butonul Pagina principală</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 marcaj șters}few{# marcaje șterse}other{# de marcaje șterse}}</translation>
@@ -5310,7 +5319,7 @@
 <translation id="8828933418460119530">Nume DNS</translation>
 <translation id="883062543841130884">Înlocuiri</translation>
 <translation id="8830796635868321089">Căutarea actualizărilor utilizând setările de proxy actuale nu a reușit. Ajustați <ph name="PROXY_SETTINGS_LINK_START" />setările de proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation>
-<translation id="8831140208248705279"><ph name="DEVICE_TYPE" /> și telefonul Android funcționează mai bine împreună. Conectează-le ca să trimiți mesaje de pe computer, să permiți accesul la conexiunea la internet și să deblochezi <ph name="DEVICE_TYPE" /> cu ajutorul telefonului.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
+<translation id="8831140208248705279">Dispozitivul <ph name="DEVICE_TYPE" /> și telefonul Android funcționează mai bine împreună. Conectează-le ca să trimiți mesaje de pe computer, să permiți accesul la conexiunea la internet și să deblochezi dispozitivul <ph name="DEVICE_TYPE" /> cu ajutorul telefonului.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">Deschide setările pentru extensii</translation>
 <translation id="8834039744648160717">Configurarea rețelei este controlată de <ph name="USER_EMAIL" />.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Neconectat</translation>
 <translation id="8876307312329369159">Setarea nu poate fi modificată într-o sesiune demonstrativă.</translation>
 <translation id="8877448029301136595">[directorul părinte]</translation>
+<translation id="8879220587046205278">Aplicațiile din Google Play pot necesita acces deplin la sistemul de fișiere pentru a citi și a scrie fișiere pe dispozitive de stocare externe. Fișierele și dosarele create pe dispozitiv sunt vizibile oricărei persoane care folosește unitatea externă.</translation>
 <translation id="8879284080359814990">&amp;Afișează ca filă</translation>
 <translation id="8879921471468674457">Reține informațiile de conectare</translation>
 <translation id="8881020143150461183">Încearcă din nou. Pentru asistență tehnică, ia legătura cu <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index bc29f2c..1cdd27b4 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -478,6 +478,7 @@
 <translation id="1698122934742150150">Только на время текущего сеанса в режиме инкогнито</translation>
 <translation id="1698650002254827833">Не удалось загрузить список приложений. Повторите попытку.</translation>
 <translation id="1701062906490865540">Удалить пользователя</translation>
+<translation id="1703331064825191675">Можно больше не беспокоиться о паролях</translation>
 <translation id="1706586824377653884">Добавлено администратором</translation>
 <translation id="1706625117072057435">Масштабирование</translation>
 <translation id="1708338024780164500">(неактивно)</translation>
@@ -527,6 +528,7 @@
 <translation id="1764226536771329714">бета</translation>
 <translation id="176587472219019965">Новое окно</translation>
 <translation id="1766575458646819543">Полноэкранный режим отключен</translation>
+<translation id="1766957085594317166">Сохраняйте пароли в аккаунте Google, чтобы вам больше не пришлось их вводить.</translation>
 <translation id="1768278914020124551">Не удалось связаться с сервером входа. Проверьте подключение к сети и имя домена, а затем повторите попытку.</translation>
 <translation id="1769104665586091481">Открыть ссылку в новом окне</translation>
 <translation id="1773212559869067373">Сертификат аутентификации отклонен локально</translation>
@@ -1873,6 +1875,7 @@
 <translation id="3748026146096797577">Нет соединения</translation>
 <translation id="3752582316358263300">ОК...</translation>
 <translation id="3752673729237782832">Мои устройства</translation>
+<translation id="3753033997400164841">Сохраните один раз и используйте повсюду</translation>
 <translation id="3755411799582650620">Теперь <ph name="PHONE_NAME" /> может разблокировать <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Сайт использует микрофон</translation>
 <translation id="3757733214359997190">Ничего не найдено.</translation>
@@ -2165,7 +2168,6 @@
 <translation id="4146026355784316281">Всегда открывать в программе просмотра по умолчанию</translation>
 <translation id="4146785383423576110">Сброс настроек и удаление вредоносного ПО</translation>
 <translation id="4147911968024186208">Повторите попытку. Если сообщение об ошибке появится снова, свяжитесь со службой поддержки.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Экран</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 вкладка}one{# вкладка}few{# вкладки}many{# вкладок}other{# вкладки}}</translation>
 <translation id="4154664944169082762">Отпечатки</translation>
@@ -2206,6 +2208,7 @@
 <translation id="4232375817808480934">Настройка Kerberos</translation>
 <translation id="4235200303672858594">Полноэкранный режим</translation>
 <translation id="4235965441080806197">Отменить вход</translation>
+<translation id="4242145785130247982">Несколько клиентских сертификатов не поддерживаются.</translation>
 <translation id="4242533952199664413">Открыть настройки</translation>
 <translation id="4242577469625748426">Не удалось применить к устройству настройки политики: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Другие приложения для стилуса</translation>
@@ -2664,6 +2667,7 @@
 <translation id="4957949153200969297">Включите функции <ph name="IDS_SHORT_PRODUCT_NAME" />, связанные только с синхронизацией.</translation>
 <translation id="4959262764292427323">Пароли сохраняются в аккаунте Google и будут доступны на любом устройстве.</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> (<ph name="PROFILE_NAME" />)</translation>
+<translation id="496185450405387901">Это приложение установлено администратором</translation>
 <translation id="4964455510556214366">Расположение</translation>
 <translation id="4964673849688379040">Проверка...</translation>
 <translation id="4965808351167763748">Использовать это устройство для запуска Hangouts Meet?</translation>
@@ -2921,6 +2925,7 @@
 <translation id="5360150013186312835">Добавить на Панель инструментов</translation>
 <translation id="5362741141255528695">Выберите файл закрытого ключа.</translation>
 <translation id="5363109466694494651">Powerwash и откат</translation>
+<translation id="5365716706805792666">Google может проверять, были ли ваши пароли скомпрометированы в результате утечки данных. Эта функция будет включена, когда вы войдете в аккаунт Google.</translation>
 <translation id="5365881113273618889">Выбранная папка содержит конфиденциальные файлы. Предоставить приложению "<ph name="APP_NAME" />" постоянный доступ для записи данных?</translation>
 <translation id="5367091008316207019">Чтение файла…</translation>
 <translation id="5368720394188453070">Для входа разблокируйте телефон.</translation>
@@ -3517,7 +3522,6 @@
 <translation id="6212039847102026977">Показать дополнительные свойства сети</translation>
 <translation id="6212168817037875041">Выключать экран</translation>
 <translation id="6212752530110374741">Отправить ссылку по эл. почте</translation>
-<translation id="6214642087594370545">Если ваш пароль стал небезопасным из-за утечки данных, вы получите уведомление. Это касается только пользователей, выполнивших вход в аккаунт.</translation>
 <translation id="6216696360484424239">Автоматический вход</translation>
 <translation id="6218058416316985984">Устройство <ph name="DEVICE_TYPE" /> не подключено к Интернету. Установите соединение и повторите попытку.</translation>
 <translation id="6220413761270491930">Ошибка при загрузке расширения</translation>
@@ -3874,6 +3878,7 @@
 <translation id="6769712124046837540">Добавление принтера...</translation>
 <translation id="6770664076092644100">Подтвердить через NFC</translation>
 <translation id="6771503742377376720">Является центром сертификации</translation>
+<translation id="6775163072363532304">Здесь будут появляться доступные устройства.</translation>
 <translation id="6777817260680419853">Попытка переадресации заблокирована</translation>
 <translation id="6778737459546443941">Ещё не одобрено родителем</translation>
 <translation id="677965093459947883">Очень мелкий</translation>
@@ -4265,7 +4270,7 @@
 <translation id="7334190995941642545">В настоящий момент функция Smart Lock недоступна. Повторите попытку позже.</translation>
 <translation id="7334274148831027933">Включить закрепленную лупу</translation>
 <translation id="7335974957018254119">Для каких языков применяется проверка правописания</translation>
-<translation id="7336799713063880535">Уведомления заблок.</translation>
+<translation id="7336799713063880535">Заблокировано.</translation>
 <translation id="7338630283264858612">Серийный номер устройства недействителен.</translation>
 <translation id="7339763383339757376">PKCS #7, единый сертификат</translation>
 <translation id="7339785458027436441">Проверять правописание при наборе текста</translation>
@@ -4334,6 +4339,7 @@
 <translation id="7441830548568730290">Другие пользователи</translation>
 <translation id="7442465037756169001">Оборудование Hangouts Meet готово к настройке.</translation>
 <translation id="744341768939279100">Создать профиль</translation>
+<translation id="7443806024147773267">Войдите в аккаунт Google с любого устройства, чтобы получить доступ ко всем вашим паролям.</translation>
 <translation id="7444046173054089907">Сайт заблокирован</translation>
 <translation id="7444983668544353857">Отключить <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Устанавливайте приложения автоматически</translation>
@@ -4747,6 +4753,7 @@
 <translation id="8014154204619229810">Работает программа обновлений. Повторите попытку через пару минут.</translation>
 <translation id="8014206674403687691">Невозможно вернуться к предыдущей установленной версии <ph name="IDS_SHORT_PRODUCT_NAME" />. Воспользуйтесь функцией Powerwash.</translation>
 <translation id="8014210335923519270">Отправляя системную и диагностическую информацию в Google, вы помогаете сделать <ph name="IDS_SHORT_PRODUCT_NAME" /> ещё лучше и безопаснее.</translation>
+<translation id="8015780634880457457">Google может проверять, были ли ваши пароли скомпрометированы в результате утечки данных.</translation>
 <translation id="8016266267177410919">Папка для временного хранения</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Ярлык изменен</translation>
@@ -4864,6 +4871,7 @@
 <translation id="8188389033983459049">Чтобы продолжить, проверьте настройки устройства и включите Bluetooth.</translation>
 <translation id="8190193592390505034">Соединение с <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Управление приложениями, расширениями и темами</translation>
+<translation id="819464600477418284">Это приложение нельзя удалить, потому что оно является частью Chrome OS</translation>
 <translation id="8195027750202970175">Объем на диске</translation>
 <translation id="8198323535106903877">Эти приложения (<ph name="NUMBER_OF_APPS" />) будут установлены на ваше устройство</translation>
 <translation id="8199300056570174101">Настройки сети и устройства</translation>
@@ -4924,6 +4932,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Отключение этой функции не повлияет на возможность устройства отправлять информацию, необходимую для обновления Android и системы безопасности.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Чтобы включить или отключить функцию, нажмите "Настройки &gt; Расширенные настройки &gt; Автоматически отправлять статистику использования и данные диагностики в Google".<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Если включена запись дополнительной истории приложений и веб-поиска, информация будет сохраняться в аккаунте вашего ребенка. Узнать больше об этих настройках можно на странице families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Недействительный клиентский сертификат.</translation>
 <translation id="8270242299912238708">PDF-файлы</translation>
 <translation id="827097179112817503">Показывать кнопку "Главная страница"</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Удалена 1 закладка.}one{Удалена # закладка.}few{Удалено # закладки.}many{Удалено # закладок.}other{Удалено # закладки.}}</translation>
@@ -5307,7 +5316,7 @@
 <translation id="8828933418460119530">DNS-имя</translation>
 <translation id="883062543841130884">Замены</translation>
 <translation id="8830796635868321089">Не удалось выполнить проверку обновлений. Проверьте <ph name="PROXY_SETTINGS_LINK_START" />настройки прокси-сервера<ph name="PROXY_SETTINGS_LINK_END" />.</translation>
-<translation id="8831140208248705279">Получите доступ к возможностям телефона Android на устройстве <ph name="DEVICE_TYPE" />. Подключив их друг к другу, вы сможете отправлять с устройства <ph name="DEVICE_TYPE" /> SMS, пользоваться на нем подключением к мобильному Интернету, а также разблокировать Chromebook с помощью телефона.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
+<translation id="8831140208248705279">Получите доступ к возможностям телефона Android на устройстве <ph name="DEVICE_TYPE" />. Подключив их друг к другу, вы сможете отправлять с устройства <ph name="DEVICE_TYPE" /> SMS, пользоваться на нем подключением к мобильному Интернету, а также разблокировать Chromebook с помощью телефона<ph name="FOOTNOTE_POINTER" />. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="8831664945713891930">Открыть настройки расширений</translation>
 <translation id="8834039744648160717">Конфигурацию сети контролирует пользователь <ph name="USER_EMAIL" />.</translation>
 <translation id="8838770651474809439">Гамбургер</translation>
@@ -5337,6 +5346,7 @@
 <translation id="8874184842967597500">Не подключено</translation>
 <translation id="8876307312329369159">Эту настройку нельзя изменить в демонстрационном сеансе.</translation>
 <translation id="8877448029301136595">[родительский каталог]</translation>
+<translation id="8879220587046205278">Приложения из Google Play могут запрашивать разрешение на полный доступ к чтению и записи файлов на внешних запоминающих устройствах. При этом созданные на устройстве файлы и папки будут видны всем пользователям внешнего запоминающего устройства.</translation>
 <translation id="8879284080359814990">Показать как вкладку</translation>
 <translation id="8879921471468674457">Запомнить учетные данные</translation>
 <translation id="8881020143150461183">Повторите попытку. За технической поддержкой обратитесь к оператору "<ph name="CARRIER_NAME" />".</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 17901ac..3345c00e 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Iba aktuálna relácia inkognito</translation>
 <translation id="1698650002254827833">Zoznam aplikácií sa nedá načítať. Skúste to znova.</translation>
 <translation id="1701062906490865540">Odstrániť túto osobu</translation>
+<translation id="1703331064825191675">Už si nemusíte robiť starosti o heslá</translation>
 <translation id="1706586824377653884">Pridané správcom</translation>
 <translation id="1706625117072057435">Úrovne priblíženia</translation>
 <translation id="1708338024780164500">(Neaktívne)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nové okno</translation>
 <translation id="1766575458646819543">Ukončenie režimu celej obrazovky</translation>
+<translation id="1766957085594317166">Uložte si heslá bezpečne v účte Google, aby ste ich už nikdy nemuseli zadávať</translation>
 <translation id="1768278914020124551">Ojoj! Pri pokuse o kontaktovanie registračného servera sa vyskytol problém. Skontrolujte pripojenie k sieti a názov domény a potom to skúste znova.</translation>
 <translation id="1769104665586091481">Otvoriť odkaz v novom &amp;okne</translation>
 <translation id="1773212559869067373">Certifikát na overenie totožnosti bol zamietnutý miestne</translation>
@@ -1874,6 +1876,7 @@
 <translation id="3748026146096797577">Nepripojené</translation>
 <translation id="3752582316358263300">OK...</translation>
 <translation id="3752673729237782832">Moje zariadenia</translation>
+<translation id="3753033997400164841">Raz uložte. Používajte všade.</translation>
 <translation id="3755411799582650620">Váš telefón <ph name="PHONE_NAME" /> teraz dokáže odomknúť aj toto zariadenie <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Web používa váš mikrofón</translation>
 <translation id="3757733214359997190">Nenašli sa žiadne weby</translation>
@@ -2166,7 +2169,6 @@
 <translation id="4146026355784316281">Vždy otvárať pomocou systémového zobrazovača</translation>
 <translation id="4146785383423576110">Resetovať a vyčistiť</translation>
 <translation id="4147911968024186208">Skúste to znova. Ak sa vám znova zobrazí táto chyba, kontaktujte zástupcu podpory.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Displej</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 karta}few{# karty}many{# karty}other{# kariet}}</translation>
 <translation id="4154664944169082762">Odtlačky</translation>
@@ -2207,6 +2209,7 @@
 <translation id="4232375817808480934">Konfigurácia protokolu Kerberos</translation>
 <translation id="4235200303672858594">Celá obrazovka</translation>
 <translation id="4235965441080806197">Zrušiť prihlasovanie</translation>
+<translation id="4242145785130247982">Nie je podporovaných viacero certifikátov klienta</translation>
 <translation id="4242533952199664413">Otvoriť nastavenia</translation>
 <translation id="4242577469625748426">Nastavenia pravidla sa nepodarilo nainštalovať na zariadenie: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Nájsť ďalšie aplikácie pre dotykové pero</translation>
@@ -2665,6 +2668,7 @@
 <translation id="4957949153200969297">Povolenie iba tých funkcií, ktoré súvisia so synchronizáciou prehliadača <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Heslá sa ukladajú do účtu Google, takže ich môžete používať v ľubovoľnom zariadení</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Túto aplikáciu nainštaloval váš správca.</translation>
 <translation id="4964455510556214366">Usporiadanie</translation>
 <translation id="4964673849688379040">Prebieha kontrola...</translation>
 <translation id="4965808351167763748">Naozaj chcete v tomto zariadení nastaviť službu Hangouts Meet?</translation>
@@ -2922,6 +2926,7 @@
 <translation id="5360150013186312835">Zobraziť na paneli s nástrojmi</translation>
 <translation id="5362741141255528695">Vybrať súbor súkromného kľúča.</translation>
 <translation id="5363109466694494651">Úplne obnoviť (Powerwash) a vrátiť späť</translation>
+<translation id="5365716706805792666">Google môže skontrolovať, či vaše heslá boli súčasťou porušenia ochrany údajov. Táto funkcia bude zapnutá, keď sa prihlásite pomcou svojho účtu Google.</translation>
 <translation id="5365881113273618889">Vybraný priečinok obsahuje citlivé súbory. Naozaj chcete aplikácii <ph name="APP_NAME" /> povoliť trvalý prístup na zapisovanie pre tento priečinok?</translation>
 <translation id="5367091008316207019">Prebieha čítanie súboru..</translation>
 <translation id="5368720394188453070">Telefón je uzamknutý. Ak chcete pokračovať, odomknite ho.</translation>
@@ -3518,7 +3523,6 @@
 <translation id="6212039847102026977">Zobraziť rozšírené vlastnosti siete</translation>
 <translation id="6212168817037875041">Vypnúť obrazovku</translation>
 <translation id="6212752530110374741">Odoslať odkaz e-mailom</translation>
-<translation id="6214642087594370545">Nechajte si zobraziť upozornenie, keď použijete nebezpečné heslo, ktoré bolo súčasťou porušenia ochrany údajov. K dispozícii iba pre prihlásených používateľov.</translation>
 <translation id="6216696360484424239">Automatické prihlasovanie</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> je offline. Pripojte sa k internetu a skúste to znova.</translation>
 <translation id="6220413761270491930">Chyba pri načítaní rozšírenia</translation>
@@ -3875,6 +3879,7 @@
 <translation id="6769712124046837540">Pridáva sa tlačiareň...</translation>
 <translation id="6770664076092644100">Overiť prostredníctvom NFC</translation>
 <translation id="6771503742377376720">Je certifikačnou autoritou</translation>
+<translation id="6775163072363532304">Tu sa zobrazia dostupné zariadenia.</translation>
 <translation id="6777817260680419853">Presmerovanie bolo zablokované</translation>
 <translation id="6778737459546443941">Váš rodič to zatiaľ neschválil</translation>
 <translation id="677965093459947883">Veľmi malé</translation>
@@ -4335,6 +4340,7 @@
 <translation id="7441830548568730290">Ostatní používatelia</translation>
 <translation id="7442465037756169001">Ovládač Hangouts Meet hardware je pripravený na nastavenie.</translation>
 <translation id="744341768939279100">Vytvoriť nový profil</translation>
+<translation id="7443806024147773267">Získajte prístup k svojim heslám, keď sa prihlásite do účtu Google</translation>
 <translation id="7444046173054089907">Tento web je blokovaný</translation>
 <translation id="7444983668544353857">Zakázať zariadenie <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Inštalujte aplikácie automaticky</translation>
@@ -4748,6 +4754,7 @@
 <translation id="8014154204619229810">Aktualizačný nástroj je práve spustený. Obnovením stránky o minútu to znova skontrolujte.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> sa nedokáže vrátiť späť na predchádzajúcu nainštalovanú verziu. Skúste znova vykonať úplné obnovenie svojho zariadenia (tzv. Powerwash).</translation>
 <translation id="8014210335923519270">Zlepšite <ph name="IDS_SHORT_PRODUCT_NAME" /> a jeho zabezpečenie odosielaním informácií o systéme a využití do Googlu</translation>
+<translation id="8015780634880457457">Google môže skontrolovať, či vaše heslá boli súčasťou porušenia ochrany údajov.</translation>
 <translation id="8016266267177410919">Dočasné úložisko</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Skratka bola upravená</translation>
@@ -4865,6 +4872,7 @@
 <translation id="8188389033983459049">Ak chcete pokračovať, skontrolujte nastavenia zariadenia a zapnite ho</translation>
 <translation id="8190193592390505034">Prebieha pripájanie na stránku <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Spravovať vaše aplikácie, rozšírenia a motívy</translation>
+<translation id="819464600477418284">Táto aplikácia sa nedá odinštalovať, pretože je súčasťou systému Chrome OS.</translation>
 <translation id="8195027750202970175">Veľkosť na disku</translation>
 <translation id="8198323535106903877">Aplikácie (počet: <ph name="NUMBER_OF_APPS" />) pre vás nainštalujeme</translation>
 <translation id="8199300056570174101">Vlastnosti siete (služba) a zariadenia</translation>
@@ -4925,6 +4933,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Vypnutím tejto funkcie neovplyvníte schopnosť zariadenia odosielať informácie potrebné na zaistenie základných služieb, ako sú aktualizácie systému a zabezpečenie.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Vlastník môže túto funkciu ovládať v časti Nastavenia &gt; Rozšírené &gt; Automaticky odosielať diagnostiky a údaje o používaní Googlu.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Ak máte zapnutú dodatočnú aktivitu na internete a v aplikáciách, tieto údaje sa môžu ukladať do vášho účtu Google. Na families.google.com<ph name="END_PARAGRAPH4" /> môžete zobraziť alebo odstrániť údaje a zmeniť nastavenia účtu.</translation>
+<translation id="826905130698769948">Neplatný certifikát klienta</translation>
 <translation id="8270242299912238708">Dokumenty PDF</translation>
 <translation id="827097179112817503">Zobrazovať tlačidlo domovskej stránky</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{Bola odstránená 1 záložka}few{Boli odstránené # záložky}many{Bolo odstránenej # záložky}other{Bolo odstránených # záložiek}}</translation>
@@ -5338,6 +5347,7 @@
 <translation id="8874184842967597500">Nepripojené</translation>
 <translation id="8876307312329369159">Toto nastavenie sa nedá zmeniť v relácii ukážky.</translation>
 <translation id="8877448029301136595">[rodičovský adresár]</translation>
+<translation id="8879220587046205278">Aplikácie zo služby Google Play môžu vyžadovať úplný prístup k systému súborov a povolenie zapisovať súbory v externých úložiskách. Súbory a priečinky vytvorené v zariadení sú viditeľné pre všetkých používateľov príslušného externého disku.</translation>
 <translation id="8879284080359814990">&amp;Zobraziť ako kartu</translation>
 <translation id="8879921471468674457">Zapamätať si prihlasovacie údaje</translation>
 <translation id="8881020143150461183">Skúste to znova. Ak potrebujete technickú podporu, kontaktujte operátora <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index f579719..3ba05f5 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Samo za trenutno sejo brez beleženja zgodovine</translation>
 <translation id="1698650002254827833">Seznama aplikacij ni mogoče naložiti. Poskusite znova.</translation>
 <translation id="1701062906490865540">Odstrani to osebo</translation>
+<translation id="1703331064825191675">Naj vas nikoli ne skrbi glede gesel</translation>
 <translation id="1706586824377653884">Dodal skrbnik</translation>
 <translation id="1706625117072057435">Ravni povečave/pomanjšave</translation>
 <translation id="1708338024780164500">(Neaktivno)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Novo okno</translation>
 <translation id="1766575458646819543">Izhod iz celozaslonskega načina</translation>
+<translation id="1766957085594317166">Varno shranjujte gesla v računu Google in vam jih ne bo treba več vnašati</translation>
 <translation id="1768278914020124551">Ojoj. Pri vzpostavljanju stika s strežnikom za prijavo je prišlo do težave. Preverite omrežno povezavo in ime domene, nato poskusite znova.</translation>
 <translation id="1769104665586091481">Odpri povezavo v novem &amp;oknu</translation>
 <translation id="1773212559869067373">Potrdilo za preverjanje pristnosti je bilo zavrnjeno lokalno</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Povezava ni vzpostavljena</translation>
 <translation id="3752582316358263300">V redu ...</translation>
 <translation id="3752673729237782832">Moje naprave</translation>
+<translation id="3753033997400164841">Shranite enkrat. Uporabite kjer koli</translation>
 <translation id="3755411799582650620">Vaš telefon <ph name="PHONE_NAME" /> lahko zdaj odklene tudi to napravo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Spletno mesto uporablja vaš mikrofon</translation>
 <translation id="3757733214359997190">Ni spletnih mest</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Vedno odpri s sistemskim pregledovalnikom</translation>
 <translation id="4146785383423576110">Ponastavitev in čiščenje</translation>
 <translation id="4147911968024186208">Poskusite znova. Če se ta napaka spet prikaže, se obrnite na zastopnika za podporo.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Prikaz</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 zavihek}one{# zavihek}two{# zavihka}few{# zavihki}other{# zavihkov}}</translation>
 <translation id="4154664944169082762">Prstni odtisi</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Konfiguriranje storitve Kerberos</translation>
 <translation id="4235200303672858594">Celoten zaslon</translation>
 <translation id="4235965441080806197">Prekliči prijavo</translation>
+<translation id="4242145785130247982">Več potrdil odjemalca ni podprtih</translation>
 <translation id="4242533952199664413">Odpri nastavitve</translation>
 <translation id="4242577469625748426">Namestitev nastavitev pravilnika v napravi ni uspela: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Iskanje več aplikacij za pisalo</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Omogočite samo funkcije, ki so povezane s Sinhronizacijo za <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Gesla so shranjena v Google Računu, da jih lahko uporabite v kateri koli napravi</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Aplikacijo je namestil skrbnik.</translation>
 <translation id="4964455510556214366">Razvrstitev</translation>
 <translation id="4964673849688379040">Preverjanje ...</translation>
 <translation id="4965808351167763748">Ali res želite nastaviti to napravo za zagon storitve Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Pokaži v orodni vrstici</translation>
 <translation id="5362741141255528695">Izberite datoteko z zasebnim ključem.</translation>
 <translation id="5363109466694494651">Izvedi Powerwash in povrni</translation>
+<translation id="5365716706805792666">Google lahko preveri, ali so bila vaša gesla del podatkovne kršitve. To je vklopljeno, ko se prijavite z računom Google.</translation>
 <translation id="5365881113273618889">Izbrana mapa vsebuje občutljive datoteke. Ali ste prepričani, da želite aplikaciji »<ph name="APP_NAME" />« odobriti trajni dostop za pisanje v tej mapi?</translation>
 <translation id="5367091008316207019">Branje datoteke ...</translation>
 <translation id="5368720394188453070">Telefon je zaklenjen. Za dostop ga odklenite.</translation>
@@ -3521,7 +3526,6 @@
 <translation id="6212039847102026977">Prikaži dodatne lastnosti omrežja</translation>
 <translation id="6212168817037875041">Izklop zaslona</translation>
 <translation id="6212752530110374741">Pošlji povezavo po e-pošti</translation>
-<translation id="6214642087594370545">Prikaz opozorila, ko uporabite geslo, ki ni varno in je del podatkovne kršitve. Na voljo je samo za prijavljene uporabnike.</translation>
 <translation id="6216696360484424239">Samodejna prijava</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> nima povezave. Povežite se v internet in poskusite znova.</translation>
 <translation id="6220413761270491930">Napaka pri nalaganju razširitve</translation>
@@ -3878,6 +3882,7 @@
 <translation id="6769712124046837540">Dodajanje tiskalnika ...</translation>
 <translation id="6770664076092644100">Preverite prek NFC-ja</translation>
 <translation id="6771503742377376720">Je overitelj potrdil</translation>
+<translation id="6775163072363532304">Tu bodo prikazane razpoložljive naprave.</translation>
 <translation id="6777817260680419853">Preusmeritev je blokirana</translation>
 <translation id="6778737459546443941">Starši še niso odobrili</translation>
 <translation id="677965093459947883">Zelo majhna</translation>
@@ -4338,6 +4343,7 @@
 <translation id="7441830548568730290">Drugi uporabniki</translation>
 <translation id="7442465037756169001">Hangouts Meet hardware je pripravljen za nastavitev.</translation>
 <translation id="744341768939279100">Ustvari nov profil</translation>
+<translation id="7443806024147773267">Dostopajte do svojih gesel, ko ste prijavljeni v račun Google</translation>
 <translation id="7444046173054089907">To spletno mesto je blokirano</translation>
 <translation id="7444983668544353857">Onemogoči <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Samodejno nameščanje aplikacij</translation>
@@ -4751,6 +4757,7 @@
 <translation id="8014154204619229810">Orodje za posodabljanje se trenutno izvaja. Osvežite čez minuto in preverite znova.</translation>
 <translation id="8014206674403687691">Izdelka <ph name="IDS_SHORT_PRODUCT_NAME" /> ni mogoče povrniti na prejšnjo različico. Poskusite uporabiti funkcijo Powerwash.</translation>
 <translation id="8014210335923519270">Izboljšajte brskalnik <ph name="IDS_SHORT_PRODUCT_NAME" /> in njegovo varnost tako, da pošiljate podatke o sistemu in uporabi Googlu</translation>
+<translation id="8015780634880457457">Google lahko preveri, ali so bila vaša gesla del podatkovne kršitve</translation>
 <translation id="8016266267177410919">Začasna shramba</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Bližnjica je bila urejena</translation>
@@ -4869,6 +4876,7 @@
 <translation id="8188389033983459049">Preverite nastavitve naprave in jo vklopite, če želite nadaljevati</translation>
 <translation id="8190193592390505034">Vzpostavljanje povezave z <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Upravljajte aplikacije, razširitve in teme</translation>
+<translation id="819464600477418284">Te aplikacije ni mogoče odmestiti, ker je del sistema OS Chrome.</translation>
 <translation id="8195027750202970175">Velikost na disku</translation>
 <translation id="8198323535106903877">Namestili bomo toliko aplikacij: <ph name="NUMBER_OF_APPS" /></translation>
 <translation id="8199300056570174101">Nastavitve omrežja (storitve) in naprav</translation>
@@ -4929,6 +4937,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Izklop te funkcije ne vpliva na zmožnost naprave, da pošilja podatke, potrebne za ključne storitve, kot so posodobitve in varnost sistema.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Lastnik lahko nadzira to funkcijo v »Nastavitve« &gt; »Dodatno« &gt; »Samodejno pošiljanje diagnostičnih podatkov in podatkov o uporabi Googlu«.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Če ste za otroka vklopili dodatno beleženje dejavnosti v spletu in aplikacijah, bodo ti podatki morda shranjeni v njegovem Google Računu. Na spletnem mestu families.google.com si podatke lahko ogledate, jih izbrišete ter spremenite nastavitve računa.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Neveljavno potrdilo odjemalca</translation>
 <translation id="8270242299912238708">Dokumenti PDF</translation>
 <translation id="827097179112817503">Pokaži gumb za domačo stran</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 zaznamek izbrisan}one{# zaznamek izbrisan}two{# zaznamka izbrisana}few{# zaznamki izbrisani}other{# zaznamkov izbrisanih}}</translation>
@@ -5342,6 +5351,7 @@
 <translation id="8874184842967597500">Povezava ni vzpostavljena</translation>
 <translation id="8876307312329369159">Te možnosti ni mogoče spremeniti v predstavitveni seji.</translation>
 <translation id="8877448029301136595">[nadrejeni imenik]</translation>
+<translation id="8879220587046205278">Aplikacije v Googlu Play za branje in pisanje datotek v zunanjih napravah za shranjevanje morda zahtevajo popoln dostop do datotečnega sistema. Datoteke in mape, ustvarjene v tej napravi, so vidne vsem, ki uporabljajo zunanji pogon.</translation>
 <translation id="8879284080359814990">&amp;Pokaži kot zavihek</translation>
 <translation id="8879921471468674457">Shrani podatke za prijavo</translation>
 <translation id="8881020143150461183">Poskusite znova. Če potrebujete tehnično podporo, se obrnite na operaterja <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index eabd251a..51e6eb4 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -476,6 +476,7 @@
 <translation id="1698122934742150150">Само актуелна сесија без архивирања</translation>
 <translation id="1698650002254827833">Не можемо да учитамо листу апликација. Покушајте поново.</translation>
 <translation id="1701062906490865540">Уклони ову особу</translation>
+<translation id="1703331064825191675">Никада не брините о лозинкама</translation>
 <translation id="1706586824377653884">Додао администратор</translation>
 <translation id="1706625117072057435">Нивои зумирања</translation>
 <translation id="1708338024780164500">(Неактивно)</translation>
@@ -525,6 +526,7 @@
 <translation id="1764226536771329714">бета</translation>
 <translation id="176587472219019965">&amp;Нови прозор</translation>
 <translation id="1766575458646819543">Изашли сте из режима целог екрана</translation>
+<translation id="1766957085594317166">Безбедно чувајте лозинке на Google налогу и више никада неће морати да их уносите</translation>
 <translation id="1768278914020124551">Упс, дошло је до проблема при контактирању сервера за пријављивање. Проверите мрежну везу и име домена, па пробајте поново.</translation>
 <translation id="1769104665586091481">Отвори линк у новом &amp;прозору</translation>
 <translation id="1773212559869067373">Сертификат за потврду аутентичности је одбијен локално</translation>
@@ -1872,6 +1874,7 @@
 <translation id="3748026146096797577">Није повезано</translation>
 <translation id="3752582316358263300">Потврди...</translation>
 <translation id="3752673729237782832">Моји уређаји</translation>
+<translation id="3753033997400164841">Сачувајте једном. Користите свуда</translation>
 <translation id="3755411799582650620"><ph name="PHONE_NAME" /> телефон сада може да откључава и овај <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Сајт користи микрофон</translation>
 <translation id="3757733214359997190">Није пронађен ниједан сајт</translation>
@@ -2164,7 +2167,6 @@
 <translation id="4146026355784316281">Увек отварај помоћу системског приказивача</translation>
 <translation id="4146785383423576110">Ресетовање и чишћење</translation>
 <translation id="4147911968024186208">Пробајте поново. Ако се ова грешка поново прикаже, контактирајте представника подршке.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Екран</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 картица}one{# картица}few{# картице}other{# картица}}</translation>
 <translation id="4154664944169082762">Отисци</translation>
@@ -2205,6 +2207,7 @@
 <translation id="4232375817808480934">Конфигуришите Kerberos</translation>
 <translation id="4235200303672858594">Цео екран</translation>
 <translation id="4235965441080806197">Откажи пријављивање</translation>
+<translation id="4242145785130247982">Није подржано више сертификата клијента</translation>
 <translation id="4242533952199664413">Отвори подешавања</translation>
 <translation id="4242577469625748426">Није успело инсталирање подешавања смерница на уређају: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Пронађи још апликација за писаљку</translation>
@@ -2663,6 +2666,7 @@
 <translation id="4957949153200969297">Омогућава само функције повезане са <ph name="IDS_SHORT_PRODUCT_NAME" /> синхронизацијом</translation>
 <translation id="4959262764292427323">Лозинке се чувају на Google налогу да бисте могли да их користите на било ком уређају</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Администратор је инсталирао ову апликацију.</translation>
 <translation id="4964455510556214366">Распоред</translation>
 <translation id="4964673849688379040">Проверава се...</translation>
 <translation id="4965808351167763748">Желите ли стварно да подесите овај уређај за коришћење Hangouts Meet-а?</translation>
@@ -2920,6 +2924,7 @@
 <translation id="5360150013186312835">Прикажи на траци с алаткама</translation>
 <translation id="5362741141255528695">Изаберите датотеку приватног кључа.</translation>
 <translation id="5363109466694494651">Обави Powerwash и врати</translation>
+<translation id="5365716706805792666">Google може да провери да ли су ваше лозинке биле део упада у податке. То ће се укључити када се пријавите помоћу Google налога.</translation>
 <translation id="5365881113273618889">Директоријум који сте изабрали садржи осетљиве датотеке. Желите ли стварно да одобрите апликацији „<ph name="APP_NAME" />“ сталан приступ за уписивање за овај директоријум?</translation>
 <translation id="5367091008316207019">Читање датотеке..</translation>
 <translation id="5368720394188453070">Телефон је закључан. Откључајте га да бисте приступили.</translation>
@@ -3518,7 +3523,6 @@
 <translation id="6212039847102026977">Прикажи напредна својства мреже</translation>
 <translation id="6212168817037875041">Искључи екран</translation>
 <translation id="6212752530110374741">Пошаљи линк имејлом</translation>
-<translation id="6214642087594370545">Приказује се упозорење ако користите небезбедну лозинку која је угрожена при упаду у податке. Доступно је само за пријављене кориснике.</translation>
 <translation id="6216696360484424239">Пријавите се аутоматски</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> је офлајн. Повежите се на интернет и пробајте поново.</translation>
 <translation id="6220413761270491930">Грешка при учитавању додатка</translation>
@@ -3875,6 +3879,7 @@
 <translation id="6769712124046837540">Додавање штампача...</translation>
 <translation id="6770664076092644100">Потврди помоћу NFC-а</translation>
 <translation id="6771503742377376720">Јесте ауторитет за издавање сертификата</translation>
+<translation id="6775163072363532304">Доступни уређаји ће се приказивати овде.</translation>
 <translation id="6777817260680419853">Преусмеравање је блокирано</translation>
 <translation id="6778737459546443941">Родитељ га још увек није одобрио</translation>
 <translation id="677965093459947883">Јако мали</translation>
@@ -4335,6 +4340,7 @@
 <translation id="7441830548568730290">Други корисници</translation>
 <translation id="7442465037756169001">Hangouts Meet hardware је спреман за подешавање.</translation>
 <translation id="744341768939279100">Направи нови профил</translation>
+<translation id="7443806024147773267">Приступајте лозинкама увек када сте пријављени на Google налог</translation>
 <translation id="7444046173054089907">Овај сајт је блокиран</translation>
 <translation id="7444983668544353857">Онемогући <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Аутоматски инсталира апликације</translation>
@@ -4748,6 +4754,7 @@
 <translation id="8014154204619229810">Програм за ажурирање је тренутно активан. Сачекајте мало, па освежите и проверите поново.</translation>
 <translation id="8014206674403687691">Није могуће вратити <ph name="IDS_SHORT_PRODUCT_NAME" /> на претходно инсталирану верзију. Покушајте да поново обавите Powerwash уређаја.</translation>
 <translation id="8014210335923519270">Шаљите Google-у податке о систему и коришћењу и побољшајте <ph name="IDS_SHORT_PRODUCT_NAME" /> и његову безбедност</translation>
+<translation id="8015780634880457457">Google може да провери да ли су ваше лозинке биле део упада у податке</translation>
 <translation id="8016266267177410919">Привремени меморијски простор</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Пречица је измењена</translation>
@@ -4866,6 +4873,7 @@
 <translation id="8188389033983459049">Проверите подешавања уређаја и укључите га да бисте наставили</translation>
 <translation id="8190193592390505034">Повезивање са мрежом <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Управљање апликацијама, додацима и темама</translation>
+<translation id="819464600477418284">Ова апликација не може да се деинсталира јер је део Chrome ОС-а.</translation>
 <translation id="8195027750202970175">Величина на диску</translation>
 <translation id="8198323535106903877">Инсталираћемо вам те апликације (<ph name="NUMBER_OF_APPS" />)</translation>
 <translation id="8199300056570174101">Својства мреже (услуга) и уређаја</translation>
@@ -4926,6 +4934,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Искључивање ове функције неће утицати на могућност овог уређаја да шаље информације потребне за неопходне услуге, попут ажурирања система и безбедносних функција.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Власник може да управља овом функцијом у одељку Подешавања &gt; Напредно &gt; Аутоматски шаљи дијагностику и податке о коришћењу Google-у.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Ако за дете укључите додатне Активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. Сазнајте више о овим подешавањима и о томе како да их прилагодите на families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Неважећи сертификат клијента</translation>
 <translation id="8270242299912238708">PDF документи</translation>
 <translation id="827097179112817503">Прикажи дугме за почетну страницу</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 обележивач је избрисан}one{# обележивач је избрисан}few{# обележивача су избрисана}other{# обележивача је избрисано}}</translation>
@@ -5339,6 +5348,7 @@
 <translation id="8874184842967597500">Није повезано</translation>
 <translation id="8876307312329369159">Ово подешавање не можете да промените у сесији демонстрације.</translation>
 <translation id="8877448029301136595">[матични директоријум]</translation>
+<translation id="8879220587046205278">Апликације са Google Play-а могу да траже потпуни приступ датотекама да би читале и писале датотеке на спољним меморијским уређајима. Датотеке и директоријуми направљени на уређају су видљиви свима који користе спољни диск.</translation>
 <translation id="8879284080359814990">&amp;Прикажи као картицу</translation>
 <translation id="8879921471468674457">Запамти податке за пријављивање</translation>
 <translation id="8881020143150461183">Пробајте поново. За техничку подршку се обратите: <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 123243a..6c9cc1e1 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -2167,7 +2167,6 @@
 <translation id="4146026355784316281">Öppna alltid med systemets visningsprogram</translation>
 <translation id="4146785383423576110">Återställ och rensa</translation>
 <translation id="4147911968024186208">Försök igen. Kontakta supporten om det här felet återkommer.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Skärm</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 flik}other{# flikar}}</translation>
 <translation id="4154664944169082762">Fingeravtryck</translation>
@@ -3519,7 +3518,6 @@
 <translation id="6212039847102026977">Visa avancerade nätverksinställningar</translation>
 <translation id="6212168817037875041">Stäng av skärmen</translation>
 <translation id="6212752530110374741">Skicka länk via e-post</translation>
-<translation id="6214642087594370545">Visa ett varningsmeddelande när du använder ett osäkert lösenord som röjts vid ett dataintrång. Funktionen är bara tillgänglig för inloggade användare.</translation>
 <translation id="6216696360484424239">Logga in automatiskt</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> är offline. Anslut till internet och försök igen.</translation>
 <translation id="6220413761270491930">Ett fel uppstod när tillägg skulle läsas in</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 5de31e0a..60ac3187 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -2162,7 +2162,6 @@
 <translation id="4146026355784316281">Fungua Ukitumia Kitazamaji Cha Mfumo Wakati Wowote</translation>
 <translation id="4146785383423576110">Weka mipangilio upya na ufute programu hatari</translation>
 <translation id="4147911968024186208">Tafadhali jaribu tena. Ukiona hitilafu hii tena, tafadhali wasiliana na mwakilishi wako wa kutoa usaidizi.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Onyesho</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{Kichupo 1}other{Vichupo #}}</translation>
 <translation id="4154664944169082762">Alazama za Vidole</translation>
@@ -3512,7 +3511,6 @@
 <translation id="6212039847102026977">Onyesha sifa za kina za mtandao</translation>
 <translation id="6212168817037875041">Izime skrini</translation>
 <translation id="6212752530110374741">Kiungo cha Barua pepe</translation>
-<translation id="6214642087594370545">Onyesha onyo wakati unatumia nenosiri lisilo salama ambalo ni sehemu ya ufichuzi haramu wa data. Inapatikana kwa watumiaji walioingia katika akaunti pekee.</translation>
 <translation id="6216696360484424239">Ingia kiotomatiki</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> iko nje ya mtandao. Unganisha kwenye Intaneti kisha ujaribu tena.</translation>
 <translation id="6220413761270491930">Hitilafu Wakati wa Kupakia Kiendelezi</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index d2e2e483..67ce6b2 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">தற்போதைய மறைநிலை அமர்விற்கு மட்டும்</translation>
 <translation id="1698650002254827833">ஆப்ஸ் பட்டியலை ஏற்ற முடியவில்லை. மீண்டும் முயலவும்.</translation>
 <translation id="1701062906490865540">இவரை அகற்று</translation>
+<translation id="1703331064825191675">உங்கள் கடவுச்சொற்களைப் பற்றிய கவலை ஒருபோதும் வேண்டாம்</translation>
 <translation id="1706586824377653884">உங்கள் நிர்வாகி சேர்த்துள்ளார்</translation>
 <translation id="1706625117072057435">அளவுமாற்ற நிலைகள்</translation>
 <translation id="1708338024780164500">(செயல்படா நிலையில்)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">பீட்டா</translation>
 <translation id="176587472219019965">&amp;புதிய சாளரம்</translation>
 <translation id="1766575458646819543">முழுத்திரையிலிருந்து வெளியேறியது</translation>
+<translation id="1766957085594317166">கடவுச்சொற்களை உங்களின் Google கணக்கில் பாதுகாப்பாகச் சேமியுங்கள். பிறகு அவற்றை ஒவ்வொரு முறையும் உள்ளிட வேண்டிய தேவை இருக்காது</translation>
 <translation id="1768278914020124551">அச்சச்சோ!  உள்நுழைவுச் சேவையகத்தைத் தொடர்புகொள்வதில் பிழை ஏற்பட்டது. நெட்வொர்க் இணைப்பையும் டொமைன் பெயரையும் சரிபார்த்து, மீண்டும் முயலவும்.</translation>
 <translation id="1769104665586091481">இணைப்பை புதிய &amp;சாளரத்தில் திற</translation>
 <translation id="1773212559869067373">அடையாளச் சான்றிதழ் பயனரின் கம்ப்யூட்டரில் நிராகரிக்கப்பட்டது</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">இணைக்கப்படவில்லை</translation>
 <translation id="3752582316358263300">சரி...</translation>
 <translation id="3752673729237782832">எனது சாதனங்கள்</translation>
+<translation id="3753033997400164841">ஒரு முறை சேமித்து. எங்கும் பயன்படுத்தலாம்</translation>
 <translation id="3755411799582650620">உங்கள் <ph name="PHONE_NAME" /> இப்போது <ph name="DEVICE_TYPE" /> ஐயும் தடைநீக்க முடியும்.</translation>
 <translation id="375636864092143889">தளமானது உங்கள் மைக்ரோஃபோனைப் பயன்படுத்துகிறது</translation>
 <translation id="3757733214359997190">தளங்கள் இல்லை</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">எப்போதும் சிஸ்டம் வியூவரைக் கொண்டு திற</translation>
 <translation id="4146785383423576110">இயல்பு அமைப்புகளுக்கு மீட்டமைத்து, தீங்கிழைக்கும் மென்பொருளை அகற்று</translation>
 <translation id="4147911968024186208">மீண்டும் முயலவும். இந்தப் பிழை மீண்டும் ஏற்பட்டால், உங்கள் உதவி மையப் பிரதிநிதியைத் தொடர்பு கொள்ளவும்.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">திரை</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 தாவல்}other{# தாவல்கள்}}</translation>
 <translation id="4154664944169082762">விரல் அச்சுகள்</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Kerberosஸை உள்ளமைத்தல்</translation>
 <translation id="4235200303672858594">திரை முழுவதும்</translation>
 <translation id="4235965441080806197">உள்நுழைவை ரத்துசெய்</translation>
+<translation id="4242145785130247982">பல்வேறு கிளையண்ட் சான்றிதழ்களைப் பயன்படுத்த இயலாது</translation>
 <translation id="4242533952199664413">அமைப்புகளைத் திற</translation>
 <translation id="4242577469625748426">சாதனத்தில் கொள்கை அமைப்புகளை நிறுவுவதில் தோல்வி: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">மேலும் ஸ்டைலஸ் பயன்பாடுகளைக் கண்டறிக</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297"><ph name="IDS_SHORT_PRODUCT_NAME" /> ஒத்திசைவுடன் தொடர்புடைய அம்சங்களை மட்டுமே இயக்கும்</translation>
 <translation id="4959262764292427323">கடவுச்சொற்களை வேறு சாதனங்களிலும் பயன்படுத்துவதற்காக, அவை உங்கள் Google கணக்கில் சேமிக்கப்பட்டுள்ளன</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">உங்கள் நிர்வாகி இந்த ஆப்ஸை நிறுவியுள்ளார்.</translation>
 <translation id="4964455510556214366">ஒழுங்கமைவு</translation>
 <translation id="4964673849688379040">சரிபார்க்கிறது...</translation>
 <translation id="4965808351167763748">Hangouts Meetஐ இயக்க, இந்தச் சாதனத்தை நிச்சயமாக அமைக்க விரும்புகிறீர்களா?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">கருவிப்பட்டியில் காட்டு</translation>
 <translation id="5362741141255528695">தனிப்பட்ட விசை கோப்பைத் தேர்ந்தெடு.</translation>
 <translation id="5363109466694494651">பவர்வாஷ் செய்து மாற்றியமை</translation>
+<translation id="5365716706805792666">உங்கள் கடவுச்சொற்கள் தரவு மீறலில் பாதிக்கப்பட்டுள்ளதா என்று Google சரிபார்க்கும். உங்கள் Google கணக்கின் மூலம் உள்நுழைந்தால் இது ஆன் ஆகும்.</translation>
 <translation id="5365881113273618889">நீங்கள் தேர்ந்தெடுத்த கோப்புறையில் முக்கியமான கோப்புகள் உள்ளன. "<ph name="APP_NAME" />" இந்தக் கோப்புறைக்கான நிரந்தர எழுதும் அணுகலை நிச்சயமாக வழங்க விரும்புகிறீர்களா?</translation>
 <translation id="5367091008316207019">கோப்பைப் படிக்கிறது.</translation>
 <translation id="5368720394188453070">ஃபோன் பூட்டப்பட்டது. நுழைய, திறக்கவும்.</translation>
@@ -3520,7 +3525,6 @@
 <translation id="6212039847102026977">மேம்பட்ட நெட்வொர்க் பண்புகளைக் காட்டு</translation>
 <translation id="6212168817037875041">திரையை அணை</translation>
 <translation id="6212752530110374741">இணைப்பை மின்னஞ்சல் செய்</translation>
-<translation id="6214642087594370545">தரவு மீறலில் சம்பந்தப்பட்ட பாதுகாப்பற்றக் கடவுச்சொல்லை நீங்கள் பயன்படுத்தும்போது எச்சரிக்கை ஒன்றைக் காட்டும். உள்நுழைந்துள்ள பயனர்கள் மட்டுமே இதைப் பயன்படுத்தலாம்.</translation>
 <translation id="6216696360484424239">தானாக உள்நுழைதல்</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ஆஃப்லைனில் உள்ளது. அதை இணையத்துடன் இணைத்து, மீண்டும் முயலவும்.</translation>
 <translation id="6220413761270491930">நீட்டிப்பை ஏற்றுவதில் பிழை</translation>
@@ -3877,6 +3881,7 @@
 <translation id="6769712124046837540">பிரிண்டரைச் சேர்க்கிறது...</translation>
 <translation id="6770664076092644100">NFC வழியாகச் சரிபார்</translation>
 <translation id="6771503742377376720">இது ஒரு சான்றளிக்கும் மையம்</translation>
+<translation id="6775163072363532304">வெளிப்புற சேமிப்பக சாதனங்கள் இங்கே தோன்றும்.</translation>
 <translation id="6777817260680419853">திசைதிருப்புவது தடுக்கப்பட்டது</translation>
 <translation id="6778737459546443941">இன்னும் உங்கள் பெற்றோர் அனுமதிக்கவில்லை</translation>
 <translation id="677965093459947883">மிகச் சிறியது</translation>
@@ -4337,6 +4342,7 @@
 <translation id="7441830548568730290">பிற பயனர்கள்</translation>
 <translation id="7442465037756169001">Hangouts Meet hardware அமைப்பதற்குத் தயாராக உள்ளது.</translation>
 <translation id="744341768939279100">புதிய சுயவிவரத்தை உருவாக்கு</translation>
+<translation id="7443806024147773267">உங்கள் Google கணக்கில் உள்நுழைந்திருக்கும் போதெல்லாம் உங்கள் கடவுச்சொற்களைப் பயன்படுத்தலாம்</translation>
 <translation id="7444046173054089907">இந்தத் தளம் தடுக்கப்பட்டது</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> ஐ முடக்கு</translation>
 <translation id="7448430327655618736">ஆப்ஸைத் தானாகவே நிறுவும்</translation>
@@ -4750,6 +4756,7 @@
 <translation id="8014154204619229810">தற்போது புதுப்பிப்பான் இயங்குகிறது. மீண்டும் சரிபார்க்க ஒரு நிமிடத்தில் புதுப்பிக்கவும்.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> ஆல் ஏற்கனவே நிறுவப்பட்ட பதிப்பிற்கு மாற்றியமைக்க முடியவில்லை. உங்கள் சாதனத்தை பவர்வாஷ் செய்ய, மீண்டும் முயலவும்.</translation>
 <translation id="8014210335923519270">சாதனத் தகவலையும் உபயோகத்தையும் Googleளுக்கு அனுப்புவதன் மூலம், <ph name="IDS_SHORT_PRODUCT_NAME" />ஐயும் அதன் பாதுகாப்பையும் மேம்படுத்தவும்</translation>
+<translation id="8015780634880457457">உங்கள் கடவுச்சொற்கள் தரவு மீறலில் பாதிக்கப்பட்டுள்ளதா என்று Google சரிபார்க்கும்</translation>
 <translation id="8016266267177410919">தற்காலிகச் சேமிப்பகம்</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">ஷார்ட்கட் திருத்தப்பட்டது</translation>
@@ -4868,6 +4875,7 @@
 <translation id="8188389033983459049">தொடர்வதற்கு, சாதன அமைப்புகளைச் சரிபார்த்து, புளூடூத்தை இயக்கவும்</translation>
 <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> உடன் இணைக்கிறது</translation>
 <translation id="8191230140820435481">உங்கள் பயன்பாடுகள், நீட்டிப்புகள் மற்றும் தீம்களை நிர்வகிக்கலாம்</translation>
+<translation id="819464600477418284">இந்த ஆப்ஸ் Chrome OSஸின் ஒரு பகுதி என்பதால் இதை நிறுவல் நீக்க இயலாது</translation>
 <translation id="8195027750202970175">வட்டில் உள்ள அளவு</translation>
 <translation id="8198323535106903877">உங்களுக்காக அந்த <ph name="NUMBER_OF_APPS" /> ஆப்ஸை நிறுவுவோம்</translation>
 <translation id="8199300056570174101">நெட்வொர்க் (சேவை) மற்றும் சாதனப் பண்புகள்</translation>
@@ -4928,6 +4936,7 @@
     <ph name="BEGIN_PARAGRAPH2" />இந்த அம்சத்தை முடக்குவதால் சாதனப் புதுப்பிப்புகள், பாதுகாப்பு போன்ற அத்தியாவசியச் சேவைகளைப் பெறுவதற்கான தகவலை சாதனம் அனுப்புவது பாதிக்கப்படாது.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />உரிமையாளர் இந்த அம்சத்தை ‘அமைப்புகள் &gt; மேம்பட்ட &gt; பகுப்பாய்வு மற்றும் உபயோகத் தரவை Googleளுக்குத் தானாக அனுப்பு’ என்பதில் கட்டுப்படுத்தலாம்.<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />உங்கள் பிள்ளைக்கான அமைப்பில் கூடுதல் ’இணையம் மற்றும் ஆப்ஸ் செயல்பாட்டு அமைப்பு’ இயக்கப்பட்டிருந்தால், இந்தத் தரவு அவரது Google கணக்கில் சேமிக்கப்படலாம். இந்த அமைப்புகளைப் பற்றி மேலும் அறியவும் அவற்றை எவ்வாறு திருத்தி அமைக்கலாம் என்பதைத் தெரிந்துகொள்ளவும் families.google.com என்பதற்குச் செல்லவும்.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">தவறான கிளையண்ட் சான்றிதழ்</translation>
 <translation id="8270242299912238708">PDF ஆவணங்கள்</translation>
 <translation id="827097179112817503">முகப்பு பொத்தானைக் காட்டு</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{ஒரு புத்தகக்குறி நீக்கப்பட்டது}other{# புக்மார்க்குகள் நீக்கப்பட்டன}}</translation>
@@ -5341,6 +5350,7 @@
 <translation id="8874184842967597500">இணைக்கப்படவில்லை</translation>
 <translation id="8876307312329369159">டெமோ அமர்வில் இந்த அமைப்பை மாற்ற முடியாது.</translation>
 <translation id="8877448029301136595">[மூலக் கோப்பகம்]</translation>
+<translation id="8879220587046205278">Google Playயிலிருந்து பதிவிறக்கப்படும் ஆப்ஸுக்கு வெளிப்புற சேமிப்பக சாதனங்களில் உள்ள கோப்புகளைப் படிப்பதற்கும் திருத்துவதற்கும் பைல் சிஸ்டதிற்கான முழு அணுகல் தேவைப்படக்கூடும். வெளிப்புற சேமிப்பகத்தைப் பயன்படுத்தும் அனைவராலும் சாதனத்தில் உருவாக்கப்பட்ட கோப்புகளையும் கோப்புறைகளையும் பார்க்க முடியும்.</translation>
 <translation id="8879284080359814990">தாவலாகக் &amp;காண்பி</translation>
 <translation id="8879921471468674457">உள்நுழைவுத் தகவல்களை நினைவில்கொள்</translation>
 <translation id="8881020143150461183">மீண்டும் முயலவும். தொழில்நுட்ப உதவிக்கு <ph name="CARRIER_NAME" />ஐத் தொடர்பு கொள்ளவும்.</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index a13bf2f..87d4670 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -2152,7 +2152,6 @@
 <translation id="4146026355784316281">ఎల్లప్పుడూ సిస్టమ్ వ్యూయర్‌తో తెరువు</translation>
 <translation id="4146785383423576110">రీసెట్ చేసి హానికరమైన వాటిని తీసివేయండి</translation>
 <translation id="4147911968024186208">దయచేసి మళ్లీ ప్రయత్నించండి. మీకు ఈ ఎర్రర్ మళ్లీ కనిపిస్తే, దయచేసి మీ మద్దతు ప్రతినిధిని సంప్రదించండి.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">డిస్‌ప్లే</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ట్యాబ్}other{# ట్యాబ్‌లు}}</translation>
 <translation id="4154664944169082762">వేలిముద్రలు</translation>
@@ -3496,7 +3495,6 @@
 <translation id="6212039847102026977">అధునాతన నెట్‌వర్క్ లక్షణాలను చూపు</translation>
 <translation id="6212168817037875041">ప్రదర్శనను ఆఫ్ చేయండి</translation>
 <translation id="6212752530110374741">లింక్‌ను ఇమెయిల్ చేయి</translation>
-<translation id="6214642087594370545">డేటా ఉల్లంఘనలో భాగం అయిన, సురక్షితం కాని పాస్‌వర్డ్‌ను మీరు ఉపయోగించినప్పుడు హెచ్చరికను చూపుతుంది. సైన్-ఇన్ చేసిన వినియోగదారులకు మాత్రమే ఇది అందుబాటులో ఉంది.</translation>
 <translation id="6216696360484424239">ఆటోమేటిక్‌గా సైన్ ఇన్ చేయండి</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ఆఫ్‌లైన్‌లో ఉంది. ఇంటర్నెట్‌కు కనెక్ట్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="6220413761270491930">ఎక్స్‌టెన్షన్‌ను లోడ్ చేయడంలో ఎర్రర్</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 967480c..72f44371 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">เซสชันไม่ระบุตัวตนปัจจุบันเท่านั้น</translation>
 <translation id="1698650002254827833">โหลดรายการแอปไม่ได้ โปรดลองใหม่</translation>
 <translation id="1701062906490865540">นำบุคคลนี้ออก</translation>
+<translation id="1703331064825191675">ไม่ต้องกังวลเกี่ยวกับรหัสผ่านอีกต่อไป</translation>
 <translation id="1706586824377653884">เพิ่มโดยผู้ดูแลระบบ</translation>
 <translation id="1706625117072057435">ระดับการซูม</translation>
 <translation id="1708338024780164500">(ไม่ใช้งาน)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">เบต้า</translation>
 <translation id="176587472219019965">&amp;หน้าต่างใหม่</translation>
 <translation id="1766575458646819543">ออกจากโหมดเต็มหน้าจอแล้ว</translation>
+<translation id="1766957085594317166">บันทึกรหัสผ่านอย่างปลอดภัยในบัญชี Google แล้วไม่ต้องพิมพ์รหัสผ่านอีกต่อไป</translation>
 <translation id="1768278914020124551">อ๊ะ! เกิดปัญหาในการติดต่อเซิร์ฟเวอร์เข้าสู่ระบบ โปรดตรวจสอบการเชื่อมต่อเครือข่ายและชื่อโดเมนแล้วลองอีกครั้ง</translation>
 <translation id="1769104665586091481">เปิดลิงก์ใน&amp;หน้าต่างใหม่</translation>
 <translation id="1773212559869067373">ใบรับรองการตรวจสอบสิทธิ์ได้รับการปฏิเสธในท้องถิ่น</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">ไม่ได้เชื่อมต่อ</translation>
 <translation id="3752582316358263300">ตกลง...</translation>
 <translation id="3752673729237782832">อุปกรณ์ของฉัน</translation>
+<translation id="3753033997400164841">บันทึกครั้งเดียว แล้วใช้ได้ทุกที่</translation>
 <translation id="3755411799582650620">ขณะนี้ <ph name="PHONE_NAME" /> สามารถปลดล็อก <ph name="DEVICE_TYPE" /> ได้เช่นกัน</translation>
 <translation id="375636864092143889">เว็บไซต์กำลังใช้ไมโครโฟนของคุณ</translation>
 <translation id="3757733214359997190">ไม่พบเว็บไซต์</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">เปิดด้วยโปรแกรมดูของระบบทุกครั้ง</translation>
 <translation id="4146785383423576110">รีเซ็ตและล้างข้อมูล</translation>
 <translation id="4147911968024186208">โปรดลองอีกครั้ง หากพบข้อผิดพลาดนี้อีก ให้ติดต่อตัวแทนฝ่ายสนับสนุน</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">การแสดงผล</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 แท็บ}other{# แท็บ}}</translation>
 <translation id="4154664944169082762">ลายนิ้วมือ</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">กำหนดค่า Kerberos</translation>
 <translation id="4235200303672858594">ทั้งหน้าจอ</translation>
 <translation id="4235965441080806197">ยกเลิกการลงชื่อเข้าใช้</translation>
+<translation id="4242145785130247982">ไม่รองรับใบรับรองไคลเอ็นต์หลายฉบับ</translation>
 <translation id="4242533952199664413">เปิดการตั้งค่า</translation>
 <translation id="4242577469625748426">ไม่สามารถติดตั้งการตั้งค่านโยบายบนอุปกรณ์: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4244238649050961491">ค้นหาแอปสไตลัสเพิ่มเติม</translation>
@@ -2368,7 +2371,7 @@
 <translation id="451407183922382411">ขับเคลื่อนโดย <ph name="COMPANY_NAME" /></translation>
 <translation id="4514610446763173167">สลับปุ่มควบคุมวิดีโอเพื่อเล่นหรือหยุดชั่วคราว</translation>
 <translation id="451515744433878153">นำออก</translation>
-<translation id="4515872537870654449">ติดต่อ Dell เพื่อส่งซ่อม แท่นชาร์จจะดับหากพัดลมไม่ทำงาน</translation>
+<translation id="4515872537870654449">ติดต่อ Dell เพื่อส่งซ่อม แท่นชาร์จจะปิดหากพัดลมไม่ทำงาน</translation>
 <translation id="4519935350946509010">เกิดข้อผิดพลาดในการเชื่อมต่อ</translation>
 <translation id="4520385623207007473">คุกกี้ที่ใช้งานอยู่</translation>
 <translation id="452039078290142656">อุปกรณ์ที่ไม่รู้จักจาก <ph name="VENDOR_NAME" /></translation>
@@ -2651,7 +2654,7 @@
 <translation id="4932733599132424254">วันที่</translation>
 <translation id="4933484234309072027">ฝังตัวใน <ph name="URL" /></translation>
 <translation id="493571969993549666">เพิ่มผู้ใช้ภายใต้การดูแล</translation>
-<translation id="4939805055470675027">เชื่อมต่อ <ph name="CARRIER_NAME" /> ไม่ได้</translation>
+<translation id="4939805055470675027">เชื่อมต่อ <ph name="CARRIER_NAME" /> ไม่สำเร็จ</translation>
 <translation id="4941246025622441835">ใช้ข้อกำหนดของอุปกรณ์นี้เมื่อลงทะเบียนอุปกรณ์สำหรับการจัดการองค์กร:</translation>
 <translation id="4941627891654116707">ขนาดแบบอักษร</translation>
 <translation id="494286511941020793">ความช่วยเหลือในการกำหนดค่าพร็อกซี</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">เปิดใช้เฉพาะฟีเจอร์ที่เกี่ยวข้องกับการซิงค์ของ <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">เราจะบันทึกรหัสผ่านไว้ในบัญชี Google เพื่อให้คุณใช้ในอุปกรณ์เครื่องใดก็ได้</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">ผู้ดูแลระบบเป็นคนติดตั้งแอปนี้</translation>
 <translation id="4964455510556214366">การจัดเรียง</translation>
 <translation id="4964673849688379040">กำลังตรวจสอบ...</translation>
 <translation id="4965808351167763748">คุณแน่ใจไหมว่าต้องการตั้งค่าอุปกรณ์นี้ให้เรียกใช้การประชุม Hangouts </translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">แสดงในแถบเครื่องมือ</translation>
 <translation id="5362741141255528695">เลือกไฟล์กุญแจส่วนตัว</translation>
 <translation id="5363109466694494651">Powerwash และเปลี่ยนกลับ</translation>
+<translation id="5365716706805792666">Google จะตรวจสอบได้ว่ารหัสผ่านของคุณรวมอยู่ในการละเมิดข้อมูลหรือไม่ ฟีเจอร์นี้จะเปิดขึ้นเมื่อคุณลงชื่อเข้าใช้ด้วยบัญชี Google</translation>
 <translation id="5365881113273618889">โฟลเดอร์ที่คุณเลือกมีไฟล์ที่ละเอียดอ่อน แน่ใจไหมว่าต้องการให้สิทธิ์การเข้าถึงในการเขียนโฟลเดอร์นี้อย่างถาวรแก่ "<ph name="APP_NAME" />"</translation>
 <translation id="5367091008316207019">กำลังอ่านไฟล์..</translation>
 <translation id="5368720394188453070">โทรศัพท์ล็อกอยู่ โปรดปลดล็อกเพื่อเข้าใช้งาน</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">แสดงคุณสมบัติเครือข่ายขั้นสูง</translation>
 <translation id="6212168817037875041">ปิดจอแสดงผล</translation>
 <translation id="6212752530110374741">ส่งลิงก์ทางอีเมล</translation>
-<translation id="6214642087594370545">แสดงคำเตือนเมื่อคุณใช้รหัสผ่านที่ไม่ปลอดภัยซึ่งเป็นส่วนหนึ่งของการละเมิดข้อมูล พร้อมให้บริการสำหรับผู้ใช้ที่ลงชื่อเข้าใช้เท่านั้น</translation>
 <translation id="6216696360484424239">ลงชื่อเข้าใช้โดยอัตโนมัติ</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ออฟไลน์อยู่ เชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง</translation>
 <translation id="6220413761270491930">ข้อผิดพลาดในการโหลดส่วนขยาย</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">กำลังเพิ่มเครื่องพิมพ์...</translation>
 <translation id="6770664076092644100">ยืนยันผ่าน NFC</translation>
 <translation id="6771503742377376720">เป็นผู้ออกใบรับรอง</translation>
+<translation id="6775163072363532304">อุปกรณ์ที่ใช้ได้จะแสดงที่นี่</translation>
 <translation id="6777817260680419853">การเปลี่ยนเส้นทางถูกบล็อก</translation>
 <translation id="6778737459546443941">ผู้ปกครองยังไม่ได้อนุมัติเว็บไซต์นี้</translation>
 <translation id="677965093459947883">เล็กมาก</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">ผู้ใช้รายอื่น</translation>
 <translation id="7442465037756169001">พร้อมตั้งค่าชุดฮาร์ดแวร์ Hangouts Meet แล้ว</translation>
 <translation id="744341768939279100">สร้างโปรไฟล์ใหม่</translation>
+<translation id="7443806024147773267">เข้าถึงรหัสผ่านได้เมื่อใดก็ตามที่ลงชื่อเข้าใช้บัญชี Google อยู่</translation>
 <translation id="7444046173054089907">เว็บไซต์นี้ถูกบล็อก</translation>
 <translation id="7444983668544353857">ปิดการใช้งาน<ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">ติดตั้งแอปโดยอัตโนมัติ</translation>
@@ -4446,7 +4452,7 @@
 <translation id="7625568159987162309">ดูสิทธิ์และข้อมูลที่จัดเก็บในเว็บไซต์</translation>
 <translation id="7629827748548208700">แท็บ: <ph name="TAB_NAME" /></translation>
 <translation id="7631014249255418691">สำรองข้อมูลแอปและไฟล์ Linux เรียบร้อยแล้ว</translation>
-<translation id="7631205654593498032">เมื่อเชื่อมต่ออุปกรณ์ คุณยอมรับว่า <ph name="DEVICE_TYPE" /> ทำสิ่งต่อไปนี้ได้</translation>
+<translation id="7631205654593498032">เมื่อเชื่อมต่ออุปกรณ์ คุณยินยอมให้ <ph name="DEVICE_TYPE" /> ดำเนินการดังนี้</translation>
 <translation id="7631887513477658702">&amp;เปิดไฟล์ประเภทนี้เสมอ</translation>
 <translation id="7632948528260659758">แอปคีออสก์ต่อไปนี้ไม่สามารถอัปเดตได้:</translation>
 <translation id="763632859238619983">ไม่อนุญาตให้เว็บไซต์ใดก็ตามติดตั้งเครื่องจัดการการชำระเงิน</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">โปรแกรมอัปเดตกำลังทำงาน โปรดรีเฟรชในอีก 1 นาทีเพื่อตรวจสอบอีกครั้ง</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> ไม่สามารถเปลี่ยนกลับไปเป็นเวอร์ชันที่ติดตั้งไว้ก่อนหน้านี้ได้ โปรดลองอีกครั้งเพื่อ Powerwash อุปกรณ์ของคุณ</translation>
 <translation id="8014210335923519270">ปรับปรุง <ph name="IDS_SHORT_PRODUCT_NAME" /> และความปลอดภัยด้วยการส่งข้อมูลและการใช้งานไปยัง Google</translation>
+<translation id="8015780634880457457">Google จะตรวจสอบได้ว่ารหัสผ่านของคุณรวมอยู่ในการละเมิดข้อมูลหรือไม่</translation>
 <translation id="8016266267177410919">พื้นที่เก็บข้อมูลชั่วคราว</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">แก้ไขทางลัดแล้ว</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">ตรวจสอบการตั้งค่าอุปกรณ์และเปิดบลูทูธเพื่อดำเนินการต่อ</translation>
 <translation id="8190193592390505034">กำลังเชื่อมต่อกับ <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">จัดการแอปพลิเคชัน ส่วนขยาย และธีมของคุณ</translation>
+<translation id="819464600477418284">ถอนการติดตั้งแอปนี้ไม่ได้เพราะเป็นส่วนหนึ่งของ Chrome OS</translation>
 <translation id="8195027750202970175">ขนาดบนดิสก์</translation>
 <translation id="8198323535106903877">เราจะติดตั้งแอป <ph name="NUMBER_OF_APPS" /> แอปนั้นให้คุณ</translation>
 <translation id="8199300056570174101">เครือข่าย (บริการ) และคุณสมบัติอุปกรณ์</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />การปิดฟีเจอร์นี้จะไม่ส่งผลต่อความสามารถของอุปกรณ์ในการส่งข้อมูลที่จำเป็นต้องใช้ในบริการสำคัญอย่างเช่น การอัปเดตระบบ และความปลอดภัย<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />เจ้าของจะควบคุมฟีเจอร์นี้ได้จากการตั้งค่า &gt; ขั้นสูง &gt; ส่งข้อมูลการวินิจฉัยและการใช้งานไปยัง Google โดยอัตโนมัติ<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />หากการตั้งค่ากิจกรรมเพิ่มเติมบนเว็บและแอปเปิดอยู่สำหรับบุตรหลาน ระบบอาจบันทึกข้อมูลนี้ไว้ในบัญชี Google ของบุตรหลาน ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าเหล่านี้และวิธีปรับการตั้งค่าได้ที่ families.google.com<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">ใบรับรองไคลเอ็นต์ไม่ถูกต้อง</translation>
 <translation id="8270242299912238708">เอกสาร PDF</translation>
 <translation id="827097179112817503">แสดงปุ่มหน้าแรก</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{ลบบุ๊กมาร์ก 1 รายการแล้ว}other{ลบบุ๊กมาร์ก # รายการแล้ว}}</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">ไม่ได้เชื่อมต่อ</translation>
 <translation id="8876307312329369159">คุณเปลี่ยนการตั้งค่านี้ในเซสชันสาธิตไม่ได้</translation>
 <translation id="8877448029301136595">[ไดเรกทอรีหลัก]</translation>
+<translation id="8879220587046205278">แอปจาก Google Play อาจต้องมีสิทธิ์เข้าถึงระบบไฟล์โดยสมบูรณ์เพื่ออ่านและเขียนไฟล์ในอุปกรณ์เก็บข้อมูลภายนอก ไฟล์และโฟลเดอร์ที่สร้างขึ้นในอุปกรณ์จะแสดงแก่ทุกคนที่ใช้ไดรฟ์ภายนอก</translation>
 <translation id="8879284080359814990">แ&amp;สดงเป็นแถบ</translation>
 <translation id="8879921471468674457">จำข้อมูลการลงชื่อเข้าใช้</translation>
 <translation id="8881020143150461183">โปรดลองอีกครั้ง หรือติดต่อ <ph name="CARRIER_NAME" /> เพื่อรับการสนับสนุนด้านเทคนิค</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 9a4f0a6f..88c85408 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -2167,7 +2167,6 @@
 <translation id="4146026355784316281">Her Zaman Sistem Görüntüleyici ile Aç</translation>
 <translation id="4146785383423576110">Sıfırla ve temizle</translation>
 <translation id="4147911968024186208">Lütfen yeniden deneyin. Bu hatayı tekrar görürseniz lütfen destek temsilcinizle iletişime geçin.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Ekran</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 sekme}other{# sekme}}</translation>
 <translation id="4154664944169082762">Parmak izleri</translation>
@@ -3520,7 +3519,6 @@
 <translation id="6212039847102026977">Gelişmiş ağ özelliklerini göster</translation>
 <translation id="6212168817037875041">Ekranı kapat</translation>
 <translation id="6212752530110374741">Bağlantıyı E-posta ile Gönder</translation>
-<translation id="6214642087594370545">Veri ihlaline dahil olmuş, güvenli olmayan bir şifre kullandığınızda bir uyarı gösterilir. Yalnızca oturum açmış kullanıcılar yararlanabilir.</translation>
 <translation id="6216696360484424239">Oturumu otomatik olarak aç</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> çevrimdışı. İnternete bağlanıp tekrar deneyin.</translation>
 <translation id="6220413761270491930">Uzantı Yükleme Hatası</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index f6e5adc..add3142 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -479,6 +479,7 @@
 <translation id="1698122934742150150">Лише поточний сеанс анонімного перегляду</translation>
 <translation id="1698650002254827833">Неможливо завантажити список додатків. Повторіть спробу.</translation>
 <translation id="1701062906490865540">Видалити цього користувача</translation>
+<translation id="1703331064825191675">Не хвилюйтеся про свої паролі</translation>
 <translation id="1706586824377653884">Додано адміністратором</translation>
 <translation id="1706625117072057435">Рівні масштабування</translation>
 <translation id="1708338024780164500">(Неактивне)</translation>
@@ -528,6 +529,7 @@
 <translation id="1764226536771329714">бета-версія</translation>
 <translation id="176587472219019965">&amp;Нове вікно</translation>
 <translation id="1766575458646819543">Ви вийшли з повноекранного режиму</translation>
+<translation id="1766957085594317166">Надійно зберігайте паролі в обліковому записі Google: так вам не доведеться знову вводити їх вручну</translation>
 <translation id="1768278914020124551">На жаль, не вдалося зв’язатися із сервером для входу. Перевірте з’єднання з Інтернетом і доменне ім’я та повторіть спробу.</translation>
 <translation id="1769104665586091481">Відкрити посилання в новому &amp;вікні</translation>
 <translation id="1773212559869067373">Сертифікат автентифікації відхилений локально</translation>
@@ -1875,6 +1877,7 @@
 <translation id="3748026146096797577">Не з’єднано</translation>
 <translation id="3752582316358263300">ОК...</translation>
 <translation id="3752673729237782832">Мої пристрої</translation>
+<translation id="3753033997400164841">Збережіть один раз. Використовуйте на всіх пристроях</translation>
 <translation id="3755411799582650620">Тепер ваш <ph name="PHONE_NAME" /> може також розблоковувати цей пристрій <ph name="DEVICE_TYPE" />.</translation>
 <translation id="375636864092143889">Сайт використовує мікрофон</translation>
 <translation id="3757733214359997190">Не знайдено сайтів</translation>
@@ -2167,7 +2170,6 @@
 <translation id="4146026355784316281">Завжди відкривати за допомогою системного переглядача</translation>
 <translation id="4146785383423576110">Скинути налаштування й очистити</translation>
 <translation id="4147911968024186208">Повторіть спробу. Якщо повідомлення про помилку з’явиться знову, зв’яжіться з представником служби підтримки.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Екран</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 вкладка}one{# вкладка}few{# вкладки}many{# вкладок}other{# вкладки}}</translation>
 <translation id="4154664944169082762">Відбитки</translation>
@@ -2208,6 +2210,7 @@
 <translation id="4232375817808480934">Налаштувати Kerberos</translation>
 <translation id="4235200303672858594">Увесь екран</translation>
 <translation id="4235965441080806197">Скасувати вхід</translation>
+<translation id="4242145785130247982">Кілька сертифікатів клієнтів не підтримуються</translation>
 <translation id="4242533952199664413">Відкрити налаштування</translation>
 <translation id="4242577469625748426">Помилка встановлення налаштувань правил на пристрої: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4244238649050961491">Більше додатків із використанням стилуса</translation>
@@ -2666,6 +2669,7 @@
 <translation id="4957949153200969297">Вмикає лише функції, пов’язані із синхронізацією <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4959262764292427323">Паролі зберігаються в обліковому записі Google, щоб ви могли користуватися ними на будь-якому пристрої</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="496185450405387901">Цей додаток установлено адміністратором.</translation>
 <translation id="4964455510556214366">Упорядкування</translation>
 <translation id="4964673849688379040">Перевірка…</translation>
 <translation id="4965808351167763748">Налаштувати пристрій для роботи Hangouts Meet?</translation>
@@ -2923,6 +2927,7 @@
 <translation id="5360150013186312835">Показати на панелі інструментів</translation>
 <translation id="5362741141255528695">Виберіть файл секретного ключа.</translation>
 <translation id="5363109466694494651">Виконати Powerwash і повернутися до попередньої версії</translation>
+<translation id="5365716706805792666">Ми можемо перевірити, чи ваші паролі не було розкрито внаслідок порушення безпеки даних. Цю функцію буде ввімкнено, коли ви ввійдете в обліковий запис Google.</translation>
 <translation id="5365881113273618889">Вибрана папка містить файли з конфіденційною інформацією. Надати додатку <ph name="APP_NAME" /> постійний дозвіл на редагування цієї папки?</translation>
 <translation id="5367091008316207019">Читання файлу...</translation>
 <translation id="5368720394188453070">Ваш телефон заблоковано. Щоб увійти, розблокуйте його.</translation>
@@ -3519,7 +3524,6 @@
 <translation id="6212039847102026977">Показати розширені параметри мережі</translation>
 <translation id="6212168817037875041">Вимкнути дисплей</translation>
 <translation id="6212752530110374741">Надіслати посилання електронною поштою</translation>
-<translation id="6214642087594370545">Показувати застереження, коли вводиться ненадійний пароль, який було розкрито в результаті порушення безпеки даних. Ця функція доступна лише авторизованим користувачам.</translation>
 <translation id="6216696360484424239">Автоматичний вхід</translation>
 <translation id="6218058416316985984">Пристрій <ph name="DEVICE_TYPE" /> офлайн. Підключіть його до Інтернету та повторіть спробу.</translation>
 <translation id="6220413761270491930">Не вдалося завантажити розширення</translation>
@@ -3876,6 +3880,7 @@
 <translation id="6769712124046837540">Додавання принтера…</translation>
 <translation id="6770664076092644100">Підтвердити через NFC</translation>
 <translation id="6771503742377376720">Є Центром сертифікації</translation>
+<translation id="6775163072363532304">Тут відображатимуться доступні пристрої.</translation>
 <translation id="6777817260680419853">Переспрямування заблоковано</translation>
 <translation id="6778737459546443941">Батьки ще не схвалили його</translation>
 <translation id="677965093459947883">Дуже малий</translation>
@@ -4336,6 +4341,7 @@
 <translation id="7441830548568730290">Інші користувачі</translation>
 <translation id="7442465037756169001">Обладнання Hangouts Meet hardware можна налаштовувати.</translation>
 <translation id="744341768939279100">Створити новий профіль</translation>
+<translation id="7443806024147773267">Отримуйте доступ до своїх паролів після входу в обліковий запис Google</translation>
 <translation id="7444046173054089907">Цей сайт заблоковано</translation>
 <translation id="7444983668544353857">Вимкнути <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Автоматично встановлювати додатки</translation>
@@ -4749,6 +4755,7 @@
 <translation id="8014154204619229810">Триває оновлення. Оновіть сторінку за хвилину.</translation>
 <translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може повернутися до попередньої встановленої версії. Виконайте Powerwash на пристрої.</translation>
 <translation id="8014210335923519270">Покращуйте <ph name="IDS_SHORT_PRODUCT_NAME" /> і функції безпеки, надсилаючи системну інформацію та дані про використання в Google</translation>
+<translation id="8015780634880457457">Ми можемо перевірити, чи не було ваші паролі розкрито внаслідок порушення безпеки даних</translation>
 <translation id="8016266267177410919">Тимчасова пам’ять</translation>
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">Ярлик змінено</translation>
@@ -4867,6 +4874,7 @@
 <translation id="8188389033983459049">Щоб продовжити, перегляньте налаштування пристрою й увімкніть Bluetooth</translation>
 <translation id="8190193592390505034">З'єднання з <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Керувати вашими програмами, розширеннями та темами</translation>
+<translation id="819464600477418284">Цей додаток не можна видалити, оскільки він є частиною ОС Chrome.</translation>
 <translation id="8195027750202970175">Розмір на диску</translation>
 <translation id="8198323535106903877">Ми встановимо для вас стільки додатків: <ph name="NUMBER_OF_APPS" /></translation>
 <translation id="8199300056570174101">Параметри мережі (служби) і пристрою</translation>
@@ -4927,6 +4935,7 @@
     <ph name="BEGIN_PARAGRAPH2" />Якщо вимкнути цю функцію, пристрій усе одно зможе надсилати дані, потрібні для отримання важливих послуг, зокрема оновлень системи та засобів безпеки.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Власник може керувати цією функцією в меню "Налаштування" &gt; "Розширені" &gt; "Автоматично надсилати в Google дані про діагностику та використання".<ph name="END_PARAGRAPH3" />
     <ph name="BEGIN_PARAGRAPH4" />Якщо ввімкнено Історію додатків і веб-пошуку, ці дані зберігаються в обліковому записі Google дитини. Дізнайтеся більше про ці налаштування, а також про те, як їх змінювати, на сторінці families.google.com.<ph name="END_PARAGRAPH4" /></translation>
+<translation id="826905130698769948">Недійсний сертифікат клієнта</translation>
 <translation id="8270242299912238708">Документи PDF</translation>
 <translation id="827097179112817503">Показати кнопку "Домашня сторінка"</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 закладку видалено}one{# закладку видалено}few{# закладки видалено}many{# закладок видалено}other{# закладки видалено}}</translation>
@@ -5340,6 +5349,7 @@
 <translation id="8874184842967597500">Не під’єднано</translation>
 <translation id="8876307312329369159">Це налаштування не можна змінити в демонстраційному сеансі.</translation>
 <translation id="8877448029301136595">[батьківський каталог]</translation>
+<translation id="8879220587046205278">Додатки з Google Play можуть просити повний системний доступ до файлів, щоб переглядати й змінювати їх на зовнішніх пристроях пам'яті. Усі користувачі, які мають доступ до зовнішнього диска, можуть переглядати файли й папки, створені на пристрої.</translation>
 <translation id="8879284080359814990">&amp;Показати як вкладку</translation>
 <translation id="8879921471468674457">Запам'ятати дані для входу</translation>
 <translation id="8881020143150461183">Повторіть спробу. Щоб отримати технічну підтримку, зв'яжіться з <ph name="CARRIER_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 50dd567..93534c5 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -2167,7 +2167,6 @@
 <translation id="4146026355784316281">Luôn mở bằng trình xem hệ thống</translation>
 <translation id="4146785383423576110">Đặt lại và dọn dẹp</translation>
 <translation id="4147911968024186208">Vui lòng thử lại. Nếu bạn vẫn thấy lỗi này, vui lòng liên hệ với người đại diện hỗ trợ của bạn.</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Hiển thị</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="4154664944169082762">Dấu vân tay</translation>
@@ -3519,7 +3518,6 @@
 <translation id="6212039847102026977">Hiển thị thuộc tính mạng nâng cao</translation>
 <translation id="6212168817037875041">Tắt màn hình</translation>
 <translation id="6212752530110374741">Gửi liên kết qua email</translation>
-<translation id="6214642087594370545">Hiển thị cảnh báo khi bạn dùng một mật khẩu không an toàn mà dẫn đến sự cố rò rỉ dữ liệu trước đó. Tính năng này chỉ dành cho người dùng đã đăng nhập.</translation>
 <translation id="6216696360484424239">Đăng nhập tự động</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> đang ngoại tuyến. Hãy kết nối với Internet rồi thử lại.</translation>
 <translation id="6220413761270491930">Lỗi khi tải tiện ích</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index ee4638f..994328b 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -2162,7 +2162,6 @@
 <translation id="4146026355784316281">始终使用系统查看器打开</translation>
 <translation id="4146785383423576110">重置并清理</translation>
 <translation id="4147911968024186208">请重试。如果系统仍提示此错误,请与您的支持代表联系。</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">显示</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 个标签页}other{# 个标签页}}</translation>
 <translation id="4154664944169082762">指纹</translation>
@@ -3514,7 +3513,6 @@
 <translation id="6212039847102026977">显示高级网络属性</translation>
 <translation id="6212168817037875041">关闭显示屏</translation>
 <translation id="6212752530110374741">通过电子邮件发送链接</translation>
-<translation id="6214642087594370545">如果您使用的密码不安全并可能会导致数据泄露,系统就会向您显示警告。该功能仅适用于已登录帐号的用户。</translation>
 <translation id="6216696360484424239">自动登录</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> 处于离线状态。请连接到互联网,然后重试。</translation>
 <translation id="6220413761270491930">加载扩展程序时出错</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 2d4136b..aae1b70d 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -2165,7 +2165,6 @@
 <translation id="4146026355784316281">一律使用系統檢視器開啟</translation>
 <translation id="4146785383423576110">重設與清理</translation>
 <translation id="4147911968024186208">請再試一次。如果這個錯誤再次發生,請與你的產品支援代表聯絡。</translation>
-<translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">顯示設定</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 個分頁}other{# 個分頁}}</translation>
 <translation id="4154664944169082762">指紋</translation>
@@ -3517,7 +3516,6 @@
 <translation id="6212039847102026977">顯示進階網路屬性</translation>
 <translation id="6212168817037875041">關閉螢幕</translation>
 <translation id="6212752530110374741">透過電子郵件傳送連結</translation>
-<translation id="6214642087594370545">如果你使用的是曾造成資料侵害的不安全密碼,系統會顯示警告訊息。只有已登入的使用者才能使用此功能。</translation>
 <translation id="6216696360484424239">自動登入</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> 目前離線。請連線至網際網路,然後再試一次。</translation>
 <translation id="6220413761270491930">載入擴充功能時發生錯誤</translation>
@@ -4444,7 +4442,7 @@
 <translation id="7625568159987162309">查看各網站的權限及儲存的資料</translation>
 <translation id="7629827748548208700">分頁:<ph name="TAB_NAME" /></translation>
 <translation id="7631014249255418691">已成功備份 Linux 應用程式和檔案</translation>
-<translation id="7631205654593498032">連結裝置即表示你同意讓 <ph name="DEVICE_TYPE" /> 執行以下項目:</translation>
+<translation id="7631205654593498032">連結裝置即表示您同意讓 <ph name="DEVICE_TYPE" /> 執行以下操作:</translation>
 <translation id="7631887513477658702">一律開啟這類檔案(&amp;A)</translation>
 <translation id="7632948528260659758">下列 Kiosk 應用程式更新失敗:</translation>
 <translation id="763632859238619983">不允許任何網站安裝付款處理常式</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb
index b3c336d..1a68734 100644
--- a/chrome/app/resources/google_chrome_strings_ar.xtb
+++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -45,7 +45,7 @@
 <translation id="1873233029667955273">‏Google Chrome ليس متصفحك التلقائي.</translation>
 <translation id="1874309113135274312">‏الإصدار التجريبي من Google Chrome‏ (mDNS-In)</translation>
 <translation id="1877026089748256423">‏إصدار Chrome قديم</translation>
-<translation id="1900795423379050516">‏في حال عدم عرض إعداد على هذه الصفحة، ابحث عن <ph name="LINK_BEGIN" />
+<translation id="1900795423379050516">‏في حال عدم عرض إعداد على هذه الصفحة، انتقل إلى <ph name="LINK_BEGIN" />
     إعدادات متصفِّح Chrome<ph name="LINK_END" />.</translation>
 <translation id="1915828456209461693">‏يتوفر تحديث جديد لبرنامج Chrome وسيتم تطبيقه عند إعادة التشغيل.</translation>
 <translation id="1919130412786645364">‏السماح بتسجيل الدخول إلى Chrome</translation>
@@ -53,6 +53,9 @@
 <translation id="2094919256425865063">‏هل تريد الخروج من Chrome على أي حال؟</translation>
 <translation id="2120620239521071941">‏سيعمل هذا على حذف <ph name="ITEMS_COUNT" /> من العناصر من هذا الجهاز. لاسترداد بياناتك لاحقًا، سجّل الدخول إلى Chrome كـ <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">‏يمكنك المساعدة في تحسين Chrome بالإبلاغ عن <ph name="BEGIN_LINK" />الإعدادات الحالية<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">‏بالنسبة إلى تفاصيل نظام التشغيل Chrome، يُرجى الاطّلاع على <ph name="LINK_BEGIN" />
+      لمحة عن نظام التشغيل Chrome<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">‏يُرجى إعادة تشغيل Chrome الآن</translation>
 <translation id="216054706567564023">‏بادِر بتثبيت Chrome على هاتفك. سنرسل رسالة قصيرة SMS إلى رقم هاتف استرداد حسابك.</translation>
 <translation id="2246246234298806438">‏لا يمكن لـ Google Chrome عرض معاينة الطباعة عندما يكون عارض PDF المضمّن مفقودًا.</translation>
 <translation id="2252923619938421629">‏يمكنك المساعدة في تحسين Google Chrome بالإبلاغ عن الإعدادات الحالية</translation>
@@ -162,7 +165,7 @@
 <translation id="5543953544073077331">‏هناك نُسخ أخرى من Chrome قيد التشغيل. يُرجى إغلاقها لإجراء التحديث.</translation>
 <translation id="556024056938947818">‏يحاول Google Chrome إظهار كلمات المرور.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
-<translation id="5657226924540934362">‏في حال عدم عرض إعداد على هذه الصفحة، ابحث عن <ph name="LINK_BEGIN" />
+<translation id="5657226924540934362">‏في حال عدم عرض إعداد على هذه الصفحة، انتقل إلى <ph name="LINK_BEGIN" />
       إعدادات نظام التشغيل Chrome<ph name="LINK_END" /></translation>
 <translation id="565744775970812598">‏قد يكون ملف <ph name="FILE_NAME" /> ضارًا، لذلك فقد حظره Chrome.</translation>
 <translation id="5686916850681061684">‏تخصيص Google Chrome والتحكم فيه معلومات مهمة - انقر للحصول على التفاصيل.</translation>
@@ -223,6 +226,7 @@
 <translation id="7589360514048265910">‏لن يتلقى هذا الكمبيوتر تحديثات Google Chrome بعد الآن لأن نظام التشغيل Mac OS X 10.9 لم يعُد متاحًا.</translation>
 <translation id="7592736734348559088">‏تعذر على Google Chrome مزامنة البيانات نظرًا لأن تفاصيل تسجيل الدخول إلى حسابك قديمة.</translation>
 <translation id="7626032353295482388">‏مرحبًا بك في Chrome‏</translation>
+<translation id="7629695634924605473">‏يتم إعلامك من خلال Chrome في حال تم اختراق كلمات المرور في أي وقت.</translation>
 <translation id="7641148173327520642">‏ضَبَط مشرف النظام Google Chrome لفتح <ph name="ALTERNATIVE_BROWSER_NAME" /> للوصول إلى <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">‏شعار Chrome Enterprise</translation>
 <translation id="7747138024166251722">تعذر على أداة المثبِّت إنشاء دليل مؤقت. يُرجى التحقق من وجود مساحة خالية على القرص وتوفر الإذن اللازم لتثبيت البرنامج.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb
index f2d9486..23d9cbf 100644
--- a/chrome/app/resources/google_chrome_strings_bg.xtb
+++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -52,6 +52,9 @@
 <translation id="2094919256425865063">Искате ли да затворите Chrome въпреки това?</translation>
 <translation id="2120620239521071941"><ph name="ITEMS_COUNT" /> елемента ще се изтрият от това устройство. За да извлечете данните си по-късно, влезте в Chrome като <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Помогнете за подобряването на Chrome, като подадете сигнал за <ph name="BEGIN_LINK" />текущите настройки<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">За подробности относно Chrome OS, моля, вижте
+<ph name="LINK_BEGIN" />Всичко за Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Моля, рестартирайте Chrome сега</translation>
 <translation id="216054706567564023">Инсталирайте Chrome на телефона си. Ще изпратим SMS на телефонния номер за възстановяване на профила ви.</translation>
 <translation id="2246246234298806438">Google Chrome не може да покаже визуализацията за печат, когато вграденият визуализатор на PDF файлове липсва.</translation>
 <translation id="2252923619938421629">Помогнете за подобряването на Google Chrome, като подадете сигнал за текущите настройки</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Занапред този компютър няма да получава актуализации на Google Chrome, защото Mac OS X 10.9 вече не се поддържа.</translation>
 <translation id="7592736734348559088">Google Chrome не можа да синхронизира данните ви, защото потребителското име и паролата за вход в профила ви не са актуални.</translation>
 <translation id="7626032353295482388">Добре дошли в Chrome</translation>
+<translation id="7629695634924605473">Chrome ви уведомява, ако паролите ви бъдат компрометирани</translation>
 <translation id="7641148173327520642">Системният ви администратор е конфигурирал Google Chrome да отваря <ph name="ALTERNATIVE_BROWSER_NAME" /> за достъп до <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Лого на Chrome Enterprise</translation>
 <translation id="7747138024166251722">Инсталационната програма не можа да създаде временна директория. Моля, проверете дали има свободно дисково пространство и разрешение за инсталиране на софтуер.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb
index d65f775b5..36f34eb 100644
--- a/chrome/app/resources/google_chrome_strings_ca.xtb
+++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -50,6 +50,8 @@
 <translation id="2094919256425865063">Vols sortir de Chrome igualment?</translation>
 <translation id="2120620239521071941">Amb aquesta acció, se suprimiran <ph name="ITEMS_COUNT" /> elements d'aquest dispositiu. Per recuperar les teves dades més endavant, inicia la sessió a Chrome com a <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Informa de la <ph name="BEGIN_LINK" />configuració actual<ph name="END_LINK" /> per ajudar-nos a millorar Chrome</translation>
+<translation id="2128103434102193461">Per obtenir informació sobre Chrome OS, consulta <ph name="LINK_BEGIN" />Sobre Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Reinicia Chrome ara</translation>
 <translation id="216054706567564023">Instal·la Chrome al telèfon. T'enviarem un SMS al número de telèfon de recuperació del compte.</translation>
 <translation id="2246246234298806438">Google Chrome no pot mostrar la previsualització d'impressió perquè falta el lector de PDF incorporat.</translation>
 <translation id="2252923619938421629">Informa de la configuració actual per ajudar-nos a millorar Google Chrome</translation>
@@ -217,6 +219,7 @@
 <translation id="7589360514048265910">Aquest ordinador ja no rebrà més actualitzacions de Google Chrome perquè Mac OS X 10.9 ja no és compatible.</translation>
 <translation id="7592736734348559088">Google Chrome no ha pogut sincronitzar les dades perquè els detalls d'inici de sessió del compte no estan actualitzats.</translation>
 <translation id="7626032353295482388">Et donem la benvinguda a Chrome</translation>
+<translation id="7629695634924605473">Chrome et permet saber si les contrasenyes s'han posat en perill</translation>
 <translation id="7641148173327520642">L'administrador del sistema ha configurat Google Chrome perquè obri <ph name="ALTERNATIVE_BROWSER_NAME" /> per accedir a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logotip de Chrome Enterprise</translation>
 <translation id="7747138024166251722">L'instal·lador no ha pogut crear un directori temporal. Comprova que hi ha espai lliure al disc i que tens permís per instal·lar el programari.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb
index 162f1aa3..1562c2cd 100644
--- a/chrome/app/resources/google_chrome_strings_cs.xtb
+++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -54,6 +54,8 @@
 <translation id="2094919256425865063">Přesto Chrome ukončit?</translation>
 <translation id="2120620239521071941">Ze zařízení bude smazán následující počet položek: <ph name="ITEMS_COUNT" />. Budete-li chtít své údaje později načíst, přihlaste se do Chromu jako <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Pomozte s vylepšováním prohlížeče Chrome tím, že nahlásíte <ph name="BEGIN_LINK" />aktuální nastavení<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Podrobnosti o systému Chrome OS najdete na stránce <ph name="LINK_BEGIN" />O operačním systému Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Restartujte Chrome</translation>
 <translation id="216054706567564023">Nainstalujte si Chrome do telefonu. Zašleme vám SMS na telefonní číslo pro obnovení účtu.</translation>
 <translation id="2246246234298806438">Pokud chybí integrovaný program k zobrazení souborů PDF, nemůže Google Chrome zobrazit náhled tisku.</translation>
 <translation id="2252923619938421629">Pomoci s vylepšováním prohlížeče Google Chrome prostřednictvím nahlášení aktuálního nastavení</translation>
@@ -225,6 +227,7 @@
 <translation id="7589360514048265910">Tento počítač již nebude dostávat aktualizace Google Chrome, protože systém Mac OS X 10.9 již není podporován.</translation>
 <translation id="7592736734348559088">Google Chrome vaše data nemohl synchronizovat, protože vaše přihlašovací údaje nejsou aktuální.</translation>
 <translation id="7626032353295482388">Vítá vás Chrome</translation>
+<translation id="7629695634924605473">Pokud vaše hesla někdo prolomí, Chrome vás o tom bude informovat</translation>
 <translation id="7641148173327520642">Administrátor systému nakonfiguroval prohlížeč Google Chrome tak, aby pro přístup k adrese <ph name="TARGET_URL_HOSTNAME" /> otevřel prohlížeč <ph name="ALTERNATIVE_BROWSER_NAME" />.</translation>
 <translation id="7651907282515937834">Logo Chrome Enterprise</translation>
 <translation id="7747138024166251722">Instalační soubor nemohl vytvořit dočasný adresář. Zkontrolujte prosím volné místo na disku a povolení instalovat software.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb
index 35cc5b4..44522e89 100644
--- a/chrome/app/resources/google_chrome_strings_da.xtb
+++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">Vil du slutte Chrome alligevel?</translation>
 <translation id="2120620239521071941">Denne handling sletter <ph name="ITEMS_COUNT" /> elementer på denne enhed. Hvis du senere vil hente dine data igen, skal du logge ind på Chrome som <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Vær med til at gøre Chrome bedre ved at rapportere de <ph name="BEGIN_LINK" />aktuelle indstillinger<ph name="END_LINK" />.</translation>
+<translation id="2128103434102193461">Få flere oplysninger om Chrome OS i <ph name="LINK_BEGIN" />
+      Om Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Genstart Chrome nu</translation>
 <translation id="216054706567564023">Installer Chrome på din telefon. Vi sender en sms til telefonnummeret til gendannelse for din konto.</translation>
 <translation id="2246246234298806438">Google Chrome kan ikke vise udskrifter, når den indbyggede PDF-fremviser mangler.</translation>
 <translation id="2252923619938421629">Vær med til at gøre Google Chrome bedre ved at rapportere de aktuelle indstillinger</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Denne computer vil ikke længere modtage Google Chrome-opdateringer, da Mac OS X 10.9 ikke længere understøttes.</translation>
 <translation id="7592736734348559088">Google Chrome kunne ikke synkronisere dine data, fordi loginoplysningerne til din konto er forældede.</translation>
 <translation id="7626032353295482388">Velkommen til Chrome</translation>
+<translation id="7629695634924605473">Chrome giver dig besked, hvis dine adgangskoder kompromitteres</translation>
 <translation id="7641148173327520642">Din systemadministrator har konfigureret Google Chrome til at åbne <ph name="ALTERNATIVE_BROWSER_NAME" /> for at få adgang til <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Chrome Enterprise-logo</translation>
 <translation id="7747138024166251722">Installationsprogrammet kunne ikke oprette en midlertidig mappe. Tjek, om der er tilstrækkelig diskplads, og om der er tilladelse til at installere software.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index b3ecd0a..3bdd1f6 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -50,6 +50,9 @@
 <translation id="2094919256425865063">Chrome trotzdem beenden?</translation>
 <translation id="2120620239521071941">Dadurch werden <ph name="ITEMS_COUNT" /> Elemente von diesem Gerät gelöscht. Wenn Sie Ihre Daten später abrufen möchten, melden Sie sich als <ph name="USER_EMAIL" /> in Chrome an.</translation>
 <translation id="2123055963409958220">Helfen Sie uns mit Ihrem Feedback zu den <ph name="BEGIN_LINK" />aktuellen Einstellungen<ph name="END_LINK" /> bei der Verbesserung von Chrome</translation>
+<translation id="2128103434102193461">Details zu Chrome OS finden Sie unter <ph name="LINK_BEGIN" />
+      Über Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Starten Sie Chrome jetzt neu</translation>
 <translation id="216054706567564023">Installieren Sie Chrome auf Ihrem Smartphone. Wir senden Ihnen eine SMS an die Telefonnummer zur Kontowiederherstellung.</translation>
 <translation id="2246246234298806438">Google Chrome kann ohne den integrierten PDF-Viewer keine Druckvorschau anzeigen.</translation>
 <translation id="2252923619938421629">Tragen Sie zur Verbesserung von Google Chrome bei, indem Sie die aktuellen Einstellungen melden.</translation>
@@ -217,6 +220,7 @@
 <translation id="7589360514048265910">Für diesen Computer wird es keine weiteren Google Chrome-Updates mehr geben, da Mac OS X 10.9 nicht mehr unterstützt wird.</translation>
 <translation id="7592736734348559088">Google Chrome konnte Ihre Daten nicht synchronisieren, da die Anmeldedaten Ihres Kontos nicht mehr aktuell sind.</translation>
 <translation id="7626032353295482388">Willkommen bei Chrome</translation>
+<translation id="7629695634924605473">Chrome wird Sie informieren, sollten Ihre Passwörter nicht mehr sicher sein</translation>
 <translation id="7641148173327520642">Ihr Systemadministrator hat Google Chrome so konfiguriert, dass <ph name="ALTERNATIVE_BROWSER_NAME" /> für den Zugriff auf <ph name="TARGET_URL_HOSTNAME" /> geöffnet wird.</translation>
 <translation id="7651907282515937834">Logo von Chrome Enterprise</translation>
 <translation id="7747138024166251722">Das Installationsprogramm konnte kein temporäres Verzeichnis erstellen. Überprüfen Sie, ob freier Speicherplatz und die Rechte zum Installieren von Software vorhanden sind.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb
index d4ab5b8..313ed7a 100644
--- a/chrome/app/resources/google_chrome_strings_el.xtb
+++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -53,6 +53,9 @@
 <translation id="2094919256425865063">Να τερματιστεί η λειτουργία του Chrome ούτως ή άλλως;</translation>
 <translation id="2120620239521071941">Με αυτήν την ενέργεια θα διαγραφούν <ph name="ITEMS_COUNT" /> στοιχεία από αυτήν τη συσκευή. Για να ανακτήσετε τα δεδομένα σας αργότερα, συνδεθείτε στο Chrome ως <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Συμβάλετε στη βελτίωση του Chrome, αναφέροντας τις <ph name="BEGIN_LINK" />τρέχουσες ρυθμίσεις<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Για λεπτομέρειες σχετικά με το Chrome OS, ανατρέξτε στην ενότητα <ph name="LINK_BEGIN" />
+      Σχετικά με το Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Επανεκκινήστε το Chrome τώρα</translation>
 <translation id="216054706567564023">Εγκαταστήστε το Chrome στο τηλέφωνό σας. Θα στείλουμε ένα SMS στον αριθμό τηλεφώνου ανάκτησης του λογαριασμού σας.</translation>
 <translation id="2246246234298806438">Το Google Chrome δεν είναι δυνατό να εμφανίσει την προεπισκόπηση εκτύπωσης όταν λείπει το ενσωματωμένο πρόγραμμα προβολής PDF.</translation>
 <translation id="2252923619938421629">Συμβάλετε στη βελτίωση του Google Chrome αναφέροντας τις τρέχουσες ρυθμίσεις</translation>
@@ -223,6 +226,7 @@
 <translation id="7589360514048265910">Αυτός ο υπολογιστής δεν θα λαμβάνει πλέον ενημερώσεις του Google Chrome επειδή το Mac OS X 10.9 δεν υποστηρίζεται πλέον.</translation>
 <translation id="7592736734348559088">Το Google Chrome δεν κατάφερε να συγχρονίσει τα δεδομένα σας επειδή τα στοιχεία σύνδεσης στο λογαριασμό σας δεν έχουν ενημερωθεί.</translation>
 <translation id="7626032353295482388">Καλώς ήρθατε στο Chrome</translation>
+<translation id="7629695634924605473">Το Chrome σας ενημερώνει σε περίπτωση παραβίασης των κωδικών πρόσβασής σας.</translation>
 <translation id="7641148173327520642">Ο διαχειριστής συστήματος έχει διαμορφώσει το Google Chrome έτσι ώστε να ανοίγει <ph name="ALTERNATIVE_BROWSER_NAME" /> για πρόσβαση σε <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Λογότυπο Chrome Enterprise</translation>
 <translation id="7747138024166251722">Δεν ήταν δυνατή η δημιουργία ενός προσωρινού καταλόγου από το πρόγραμμα εγκατάστασης. Ελέγξτε τον κενό χώρο του δίσκου και το δικαίωμα εγκατάστασης του λογισμικού.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb
index 27650b6..6931de7 100644
--- a/chrome/app/resources/google_chrome_strings_es-419.xtb
+++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">¿Deseas salir de Chrome de todos modos?</translation>
 <translation id="2120620239521071941">Esta acción borrará <ph name="ITEMS_COUNT" /> elementos de este dispositivo. Si más adelante deseas recuperar los datos, accede a tu cuenta en Chrome como <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Informa tu <ph name="BEGIN_LINK" />configuración actual<ph name="END_LINK" /> para ayudarnos a mejorar Chrome</translation>
+<translation id="2128103434102193461">Puedes visitar <ph name="LINK_BEGIN" />Acerca del Sistema operativo Chrome<ph name="LINK_END" />
+      para obtener información sobre este SO</translation>
+<translation id="2151406531797534936">Reinicia Chrome ahora</translation>
 <translation id="216054706567564023">Instala Chrome en el teléfono. Te enviaremos un SMS al número de teléfono de recuperación de la cuenta.</translation>
 <translation id="2246246234298806438">Google Chrome no puede mostrar la vista previa de impresión si falta el visor de PDF incorporado.</translation>
 <translation id="2252923619938421629">Informa tu configuración actual para ayudarnos a mejorar Google Chrome.</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Esta computadora no recibirá más actualizaciones de Google Chrome porque Mac OS X 10.9 ya no es compatible.</translation>
 <translation id="7592736734348559088">Google Chrome no pudo sincronizar los datos porque los datos de acceso de la cuenta están obsoletos.</translation>
 <translation id="7626032353295482388">Te damos la bienvenida a Chrome</translation>
+<translation id="7629695634924605473">Chrome te informará si tus contraseñas corren se ven comprometidas</translation>
 <translation id="7641148173327520642">El administrador del sistema configuró Google Chrome de manera que se abriera <ph name="ALTERNATIVE_BROWSER_NAME" /> para acceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logotipo de Chrome Enterprise</translation>
 <translation id="7747138024166251722">El instalador no pudo crear un directorio temporal. Verifique si hay espacio disponible en el disco y cuenta con permiso para instalar software.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb
index ea00d417..0355b1fc 100644
--- a/chrome/app/resources/google_chrome_strings_es.xtb
+++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -55,6 +55,9 @@
 <translation id="2094919256425865063">¿Quieres cerrar Chrome de todas formas?</translation>
 <translation id="2120620239521071941">Se eliminarán <ph name="ITEMS_COUNT" /> elementos de este dispositivo. Para recuperar tus datos en otro momento, inicia sesión en Chrome como <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Genera un informe de la <ph name="BEGIN_LINK" />configuración actual<ph name="END_LINK" /> para ayudar a mejorar Chrome</translation>
+<translation id="2128103434102193461">Para obtener más información sobre Chrome OS, consulta <ph name="LINK_BEGIN" />
+      Información de Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Reinicia Chrome ahora</translation>
 <translation id="216054706567564023">Instala Chrome en tu teléfono. Te enviaremos un SMS al número de recuperación de la cuenta.</translation>
 <translation id="2246246234298806438">Google Chrome no puede mostrar la vista previa de impresión si falta el visor de PDFs integrado.</translation>
 <translation id="2252923619938421629">Ayuda a mejorar Google Chrome notificando la configuración actual</translation>
@@ -227,6 +230,7 @@
 <translation id="7589360514048265910">Este ordenador no volverá a recibir actualizaciones de Google Chrome porque ya no es compatible con Mac OS X 10.9.</translation>
 <translation id="7592736734348559088">Google Chrome no ha podido sincronizar los datos porque la información de inicio de sesión de tu cuenta está obsoleta.</translation>
 <translation id="7626032353295482388">Te damos la bienvenida a Chrome</translation>
+<translation id="7629695634924605473">Chrome te avisará si tus contraseñas están en riesgo</translation>
 <translation id="7641148173327520642">El administrador del sistema ha configurado Google Chrome para que abra <ph name="ALTERNATIVE_BROWSER_NAME" /> al acceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logotipo de Chrome Enterprise</translation>
 <translation id="7747138024166251722">El programa de instalación no ha podido crear un directorio temporal. Comprueba si hay espacio libre en el disco y si tienes autorización para instalar el software.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb
index d051213..5cbbe1f 100644
--- a/chrome/app/resources/google_chrome_strings_et.xtb
+++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -53,6 +53,9 @@
 <translation id="2094919256425865063">Kas väljuda Chrome'ist ikkagi?</translation>
 <translation id="2120620239521071941">See kustutab sellest seadmest <ph name="ITEMS_COUNT" /> üksust. Hiljem oma andmete toomiseks logige Chrome'i sisse kasutajana <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Aidake Chrome paremaks muuta, teavitades meid <ph name="BEGIN_LINK" />praegustest seadetest<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Chrome OS-i üksikasjade nägemiseks avage leht <ph name="LINK_BEGIN" />
+      Teave Chrome OS-i kohta<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Käivitage Chrome kohe uuesti</translation>
 <translation id="216054706567564023">Installige Chrome oma telefoni. Saadame SMS-i teie konto taastamise telefoninumbrile.</translation>
 <translation id="2246246234298806438">Google Chrome ei saa kuvada printimise eelvaadet, kui sisseehitatud PDF-vaatur puudub.</translation>
 <translation id="2252923619938421629">Aidake muuta Google Chrome paremaks, teavitades meid praegustest seadetest</translation>
@@ -223,6 +226,7 @@
 <translation id="7589360514048265910">See arvuti ei saa enam Google Chrome'i värskendusi, kuna operatsioonisüsteemi Mac OS X 10.9 enam ei toetata.</translation>
 <translation id="7592736734348559088">Google Chrome ei saanud andmeid sünkroonida, sest teie konto sisselogimisandmed on aegunud.</translation>
 <translation id="7626032353295482388">Tere tulemast Chrome'i</translation>
+<translation id="7629695634924605473">Chrome annab teile teada, kui teie paroolid ohtu satuvad</translation>
 <translation id="7641148173327520642">Teie süsteemiadministraator on seadistanud Google Chrome'i avama brauseri <ph name="ALTERNATIVE_BROWSER_NAME" />, et lehele <ph name="TARGET_URL_HOSTNAME" /> juurde pääseda.</translation>
 <translation id="7651907282515937834">Chrome Enterprise'i logo</translation>
 <translation id="7747138024166251722">Installija ei suutnud luua ajutist kataloogi. Palun kontrollige vaba kettaruumi ja tarkvara installimise loa olemasolu.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb
index 2baa536..17513aa 100644
--- a/chrome/app/resources/google_chrome_strings_fa.xtb
+++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">‏درهرصورت از Chrome خارج می‌شوید؟</translation>
 <translation id="2120620239521071941">‏این کار <ph name="ITEMS_COUNT" /> مورد را از این دستگاه حذف می‌کند. برای بازیابی داده‌هایتان در فرصتی دیگر، با <ph name="USER_EMAIL" /> وارد سیستم Chrome شوید.</translation>
 <translation id="2123055963409958220">‏با گزارش <ph name="BEGIN_LINK" />تنظیمات کنونی<ph name="END_LINK" />، به بهتر شدن Chrome کمک کنید</translation>
+<translation id="2128103434102193461">‏برای اطلاع از جزئیات سیستم عامل Chrome، لطفاً <ph name="LINK_BEGIN" />
+      درباره سیستم عامل Chrome<ph name="LINK_END" /> را ببینید</translation>
+<translation id="2151406531797534936">‏لطفاً اکنون Chrome را بازراه‌اندازی کنید</translation>
 <translation id="216054706567564023">‏Chrome را در تلفنتان نصب کنید. پیامکی به شماره تلفن بازیابی حساب شما ارسال خواهیم کرد.</translation>
 <translation id="2246246234298806438">‏زمانی که نمایش دهنده داخلی PDF وجود نداشته باشد، Google Chrome نمی‌تواند پیش‌نمایش چاپ را نشان دهد.</translation>
 <translation id="2252923619938421629">‏با گزارش تنظیمات کنونی، به بهتر شدن Google Chrome کمک کنید.</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">‏این رایانه دیگر به‌روزرسانی‌های Google Chrome را دریافت نمی‌کند، زیرا Mac OS X نسخه ۱۰.۹ دیگر پشتیبانی نمی‌شود.</translation>
 <translation id="7592736734348559088">‏Google Chrome قادر به همگام‌سازی داده‌های شما نبود زیرا جزئیات ورود به حساب شما به‌روز نیست.</translation>
 <translation id="7626032353295482388">‏به Chrome خوش آمدید</translation>
+<translation id="7629695634924605473">‏Chrome می‌تواند، اگر گذرواژه‌هایتان در معرض خطر باشد، مطلعتان کند</translation>
 <translation id="7641148173327520642">‏سرپرست سیستم برای باز شدن <ph name="ALTERNATIVE_BROWSER_NAME" /> جهت دسترسی به <ph name="TARGET_URL_HOSTNAME" />، Google Chrome را پیکربندی کرده است.</translation>
 <translation id="7651907282515937834">‏نشان‌واره Chrome Enterprise</translation>
 <translation id="7747138024166251722">نصب‌کننده نتوانست دایرکتوری موقت ایجاد کند. لطفاً فضای خالی دیسک و اجازه نصب نرم‌افزار را بررسی کنید.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb
index 83fd9bb5..c38042dc 100644
--- a/chrome/app/resources/google_chrome_strings_fi.xtb
+++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">Suljetaanko Chrome silti?</translation>
 <translation id="2120620239521071941"><ph name="ITEMS_COUNT" /> kohdetta poistetaan pysyvästi tältä laitteelta. Jos haluat palauttaa tiedot myöhemmin, kirjaudu Chromeen käyttäjänä <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Auta parantamaan Chromea ilmoittamalla <ph name="BEGIN_LINK" />nykyiset asetukset<ph name="END_LINK" />.</translation>
+<translation id="2128103434102193461">Tutustu Chrome-käyttöjärjestelmään lukemalla <ph name="LINK_BEGIN" />
+      Tietoja Chrome-käyttöjärjestelmästä<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Käynnistä Chrome uudelleen nyt</translation>
 <translation id="216054706567564023">Asenna Chrome puhelimellesi. Lähetämme tekstiviestin palauttamisen puhelinnumeroosi.</translation>
 <translation id="2246246234298806438">Google Chrome ei voi näyttää tulostusesikatselua, koska PDF-katseluohjelma puuttuu.</translation>
 <translation id="2252923619938421629">Auta parantamaan Google Chromea ilmoittamalla nykyiset asetukset.</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Tämän tietokone ei enää saa Google Chrome ‑päivityksiä, koska Mac OS X 10.9:ää ei enää tueta.</translation>
 <translation id="7592736734348559088">Google Chrome ei voinut synkronoida tietoja, sillä tilin kirjautumistiedot ovat vanhentuneet.</translation>
 <translation id="7626032353295482388">Tervetuloa Chromeen</translation>
+<translation id="7629695634924605473">Chrome ilmoittaa sinulle, jos salasanasi ovat vaarantuneet</translation>
 <translation id="7641148173327520642">Järjestelmänvalvojasi on määrittänyt Chromen avaamaan osoitteen <ph name="TARGET_URL_HOSTNAME" /> selaimella <ph name="ALTERNATIVE_BROWSER_NAME" />.</translation>
 <translation id="7651907282515937834">Chrome Enterprise ‑logo</translation>
 <translation id="7747138024166251722">Asennusohjelma ei pystynyt luomaan väliaikaista hakemistoa. Tarkista, että käytettävissä on riittävästi levytilaa ja että sinulla on oikeus asentaa ohjelmia.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb
index f990961..c4031b83 100644
--- a/chrome/app/resources/google_chrome_strings_fr.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -53,6 +53,8 @@
 <translation id="2094919256425865063">Quitter Chrome quand même ?</translation>
 <translation id="2120620239521071941">Cette action aura pour effet de supprimer <ph name="ITEMS_COUNT" /> éléments de cet appareil. Pour récupérer vos données ultérieurement, connectez-vous à Chrome en tant que <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Aidez-nous à améliorer Chrome en nous signalant vos <ph name="BEGIN_LINK" />paramètres actuels<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Pour en savoir plus sur Chrome OS, consultez la section <ph name="LINK_BEGIN" />À propos de Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Veuillez redémarrer Chrome maintenant</translation>
 <translation id="216054706567564023">Installez Chrome sur votre téléphone. Vous recevrez un SMS au numéro que vous avez indiqué pour la récupération de compte.</translation>
 <translation id="2246246234298806438">Impossible d'afficher l'aperçu d'impression dans Google Chrome, car la visionneuse de documents PDF intégrée est absente.</translation>
 <translation id="2252923619938421629">Aidez-nous à améliorer Google Chrome en nous signalant vos paramètres.</translation>
@@ -224,6 +226,7 @@
 <translation id="7589360514048265910">Cet ordinateur ne recevra plus les mises à jour de Google Chrome, car la compatibilité avec Mac OS X 10.9 n'est plus assurée.</translation>
 <translation id="7592736734348559088">Impossible de synchroniser vos données dans Google Chrome, car les informations de connexion de votre compte ne sont plus à jour.</translation>
 <translation id="7626032353295482388">Bienvenue dans Chrome</translation>
+<translation id="7629695634924605473">Chrome vous indique si vos mots de passe ont été piratés</translation>
 <translation id="7641148173327520642">Votre administrateur système a configuré Google Chrome de sorte que <ph name="ALTERNATIVE_BROWSER_NAME" /> s'ouvre pour accéder à <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logo Chrome Enterprise</translation>
 <translation id="7747138024166251722">Le programme d'installation n'a pas pu créer de répertoire temporaire. Vérifiez que le disque a suffisamment d'espace libre et que vous disposez des autorisations nécessaires pour installer le logiciel.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb
index 99379523..81966e77 100644
--- a/chrome/app/resources/google_chrome_strings_hi.xtb
+++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -43,6 +43,8 @@
 <translation id="1873233029667955273">Google Chrome आपका डिफ़ॉल्ट ब्राउज़र नहीं है</translation>
 <translation id="1874309113135274312">Google Chrome बीटा (mDNS-In)</translation>
 <translation id="1877026089748256423">Chrome पुराना हो गया है</translation>
+<translation id="1900795423379050516">अगर कोई सेटिंग इस पेज पर नहीं दिखती है, तो अपनी <ph name="LINK_BEGIN" />
+      Chrome ब्राउज़र सेटिंग<ph name="LINK_END" /> देखें</translation>
 <translation id="1915828456209461693">Chrome के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा.</translation>
 <translation id="1919130412786645364">Chrome में साइन-इन करने दें</translation>
 <translation id="2063848847527508675">अपडेट लागू करने के लिए Chrome OS को रीस्टार्ट करने की ज़रुरत होती है.</translation>
@@ -160,6 +162,8 @@
 <translation id="5543953544073077331">Chrome की दूसरी कॉपी चल रही हैं. अपडेट करने के लिए उन्हें बंद करें.</translation>
 <translation id="556024056938947818">Google Chrome पासवर्ड दिखाने का प्रयास कर रहा है.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
+<translation id="5657226924540934362">अगर इस पेज पर सेटिंग नहीं दिखती है, तो अपनी <ph name="LINK_BEGIN" />
+      Chrome OS सेटिंग<ph name="LINK_END" /> देखें</translation>
 <translation id="565744775970812598"><ph name="FILE_NAME" /> खरतरनाक हो सकता है, इसलिए Chrome ने उसे अवरोधित कर दिया है.</translation>
 <translation id="5686916850681061684">Google Chrome को पसंद के मुताबिक बनाएं और नियंत्रित करें. कुछ है जिस पर आपको ध्यान देने की ज़रूरत है - विवरण के लिए क्लिक करें.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb
index bce3411..49a9e2c 100644
--- a/chrome/app/resources/google_chrome_strings_hr.xtb
+++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -44,13 +44,16 @@
 <translation id="1874309113135274312">Google Chrome Beta (mDNS-In)</translation>
 <translation id="1877026089748256423">Chrome je zastario</translation>
 <translation id="1900795423379050516">Ako se postavka ne prikazuje na ovoj stranici, pogledajte <ph name="LINK_BEGIN" />
-      postavke svojeg preglednika Chrome<ph name="LINK_END" /></translation>
+      postavke preglednika Chrome<ph name="LINK_END" /></translation>
 <translation id="1915828456209461693">Dostupno je novo ažuriranje za Chrome i primijenit će se nakon ponovnog pokretanja.</translation>
 <translation id="1919130412786645364">Dopusti prijavu u Chrome</translation>
 <translation id="2063848847527508675">Potrebno je ponovo pokrenuti Chrome OS kako bi se ažuriranje primijenilo.</translation>
 <translation id="2094919256425865063">Želite li ipak zatvoriti Chrome?</translation>
 <translation id="2120620239521071941">Time će se izbrisati sljedeći broj stavki s uređaja: <ph name="ITEMS_COUNT" />. Da biste kasnije dohvatili svoje podatke, prijavite se na Chrome kao <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Pomognite poboljšati Chrome tako što ćete prijaviti <ph name="BEGIN_LINK" />trenutačne postavke<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Pojedinosti o OS-u Chrome potražite u dijelu <ph name="LINK_BEGIN" />
+      O OS-u Chrome<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Sada ponovo pokrenite Chrome</translation>
 <translation id="216054706567564023">Instalirajte Chrome na telefon. Poslat ćemo vam SMS na telefonski broj za oporavak računa.</translation>
 <translation id="2246246234298806438">Google Chrome ne može prikazati pregled ispisa ako nema ugrađeni preglednik PDF-a.</translation>
 <translation id="2252923619938421629">Pomognite poboljšati Google Chrome tako što ćete prijaviti trenutačne postavke</translation>
@@ -159,7 +162,7 @@
 <translation id="556024056938947818">Google Chrome pokušava prikazati zaporke.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
 <translation id="5657226924540934362">Ako se postavka ne prikazuje na ovoj stranici, pogledajte <ph name="LINK_BEGIN" />
-      postavke svojeg OS-a Chrome<ph name="LINK_END" /></translation>
+      postavke OS-a Chrome<ph name="LINK_END" /></translation>
 <translation id="565744775970812598">Datoteka <ph name="FILE_NAME" /> mogla bi biti opasna, pa ju je Chrome blokirao.</translation>
 <translation id="5686916850681061684">Prilagodite Google Chrome i upravljajte njime. Trebate obratiti pozornost na nešto – kliknite za pojedinosti.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Ovo računalo više neće primati ažuriranja Google Chromea jer Mac OS X 10.9 više nije podržan.</translation>
 <translation id="7592736734348559088">Google Chrome nije mogao sinkronizirati vaše podatke jer su vaši podaci za prijavu na račun zastarjeli.</translation>
 <translation id="7626032353295482388">Dobro došli u Chrome</translation>
+<translation id="7629695634924605473">Chrome će vas obavijestiti ako vaše zaporke budu ugrožene</translation>
 <translation id="7641148173327520642">Vaš administrator sustava konfigurirao je Google Chrome da otvara <ph name="ALTERNATIVE_BROWSER_NAME" /> za pristup URL-u <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logotip Chrome Enterprise</translation>
 <translation id="7747138024166251722">Program za instalaciju nije izradio privremeni direktorij. Provjerite ima li slobodnog prostora na disku i postoji li dopuštenje za instalaciju softvera.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb
index fd47ef8..952e5f79 100644
--- a/chrome/app/resources/google_chrome_strings_hu.xtb
+++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -50,6 +50,8 @@
 <translation id="2094919256425865063">Biztosan kilép a Chrome-ból?</translation>
 <translation id="2120620239521071941">Ezzel <ph name="ITEMS_COUNT" /> elemet töröl az eszközről. Az adatok későbbi lekéréséhez jelentkezzen be a Chrome-ba a következő e-mail-címmel: <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Segítsen a Chrome fejlesztésében a <ph name="BEGIN_LINK" />jelenlegi beállítások<ph name="END_LINK" /> elküldésével</translation>
+<translation id="2128103434102193461">A Chrome OS rendszerről bővebben <ph name="LINK_BEGIN" />A Chrome OS névjegye<ph name="LINK_END" /> oldalon tájékozódhat</translation>
+<translation id="2151406531797534936">Indítsa újra most a Chrome-ot</translation>
 <translation id="216054706567564023">Telepítse a Chrome-ot telefonjára. SMS-t küldünk majd a fiók-helyreállítási telefonszámára.</translation>
 <translation id="2246246234298806438">A Google Chrome nem tudja megjeleníteni a nyomtatási előnézetet, ha nincs beépített PDF-megjelenítő.</translation>
 <translation id="2252923619938421629">Segítsen a Google Chrome fejlesztésében a jelenlegi beállítások elküldésével</translation>
@@ -217,6 +219,7 @@
 <translation id="7589360514048265910">Mivel a jelenlegi Mac OS X 10.9 rendszer támogatása megszűnik, ez a számítógép a továbbiakban nem kap Google Chrome-frissítéseket.</translation>
 <translation id="7592736734348559088">A Google Chrome nem tudta szinkronizálni az adatokat, mert a fiók bejelentkezési adatai elavultak.</translation>
 <translation id="7626032353295482388">A Chrome üdvözli Önt!</translation>
+<translation id="7629695634924605473">A Chrome tájékoztatja arról, ha jelszavai illetéktelen kezekbe kerülnek</translation>
 <translation id="7641148173327520642">Rendszergazdája úgy állította be a Google Chrome-ot, hogy a(z) <ph name="ALTERNATIVE_BROWSER_NAME" /> böngészőt nyissa meg a(z) <ph name="TARGET_URL_HOSTNAME" /> eléréséhez.</translation>
 <translation id="7651907282515937834">Chrome Enterprise-embléma</translation>
 <translation id="7747138024166251722">A telepítőnek nem sikerült létrehoznia az ideiglenes könyvtárat. Kérjük ellenőrizze, hogy van-e elegendő hely a lemezen, és rendelkezik-e engedéllyel a szoftvertelepítésre.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb
index e2da999c..1d59e37 100644
--- a/chrome/app/resources/google_chrome_strings_it.xtb
+++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -50,6 +50,8 @@
 <translation id="2094919256425865063">Vuoi chiudere comunque Chrome?</translation>
 <translation id="2120620239521071941">Verranno eliminati <ph name="ITEMS_COUNT" /> elementi da questo dispositivo. Per recuperare i dati in un secondo momento, accedi a Chrome come <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Contribuisci a migliorare Chrome indicando le <ph name="BEGIN_LINK" />impostazioni attuali<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Per informazioni dettagliate su Chrome OS, visita la pagina <ph name="LINK_BEGIN" />Informazioni su Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Riavvia subito Chrome</translation>
 <translation id="216054706567564023">Installa Chrome sul telefono. Invieremo un SMS al tuo numero di telefono per il recupero dell'account.</translation>
 <translation id="2246246234298806438">Impossibile visualizzare l'anteprima di stampa in Google Chrome senza il visualizzatore PDF integrato.</translation>
 <translation id="2252923619938421629">Contribuisci a migliorare Google Chrome indicando le impostazioni attuali</translation>
@@ -217,6 +219,7 @@
 <translation id="7589360514048265910">Questo computer non riceverà più gli aggiornamenti di Google Chrome perché Mac OS X 10.9 non è più supportato.</translation>
 <translation id="7592736734348559088">Impossibile sincronizzare i dati in Google Chrome perché i dati di accesso dell'account sono obsoleti.</translation>
 <translation id="7626032353295482388">Benvenuto in Chrome</translation>
+<translation id="7629695634924605473">Chrome ti avvisa se le tue password vengono compromesse</translation>
 <translation id="7641148173327520642">L'amministratore di sistema ha configurato Google Chrome per l'apertura di <ph name="ALTERNATIVE_BROWSER_NAME" /> per accedere a<ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logo di Chrome Enterprise</translation>
 <translation id="7747138024166251722">Il programma di installazione non ha creato una directory temporanea. Verifica di disporre di spazio libero sul disco e dell'autorizzazione per l'installazione del software.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb
index d699e87..b17ff5e 100644
--- a/chrome/app/resources/google_chrome_strings_iw.xtb
+++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">‏לסגור את Chrome בכל זאת?</translation>
 <translation id="2120620239521071941">‏פעולה זו תמחק <ph name="ITEMS_COUNT" /> פריטים מהמכשיר. כדי לשחזר את הנתונים מאוחר יותר, היכנס אל Chrome עם <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">‏דיווח על <ph name="BEGIN_LINK" />ההגדרות הנוכחיות<ph name="END_LINK" /> יעזור לשפר את Chrome</translation>
+<translation id="2128103434102193461">‏כדי לקבל פרטים נוספים לגבי Chrome OS, אפשר לעיין בדף <ph name="LINK_BEGIN" />
+      מידע על Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">‏יש להפעיל מחדש את Chrome עכשיו</translation>
 <translation id="216054706567564023">‏יש להתקין את Chrome בטלפון שלך, ולאחר מכן נשלח הודעת SMS למספר שמוגדר לשחזור החשבון.</translation>
 <translation id="2246246234298806438">‏Google Chrome אינו יכול להצג תצוגה מקדימה של ההדפסה כאשר מציג ה-‏PDF המובנה חסר.</translation>
 <translation id="2252923619938421629">‏עזור לשפר את Google Chrome על ידי דיווח על ההגדרות הנוכחיות</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">‏המחשב הזה יפסיק לקבל עדכונים של Google Chrome כי כבר אין תמיכה בגירסה 10.9 של Mac OS X.</translation>
 <translation id="7592736734348559088">‏Google Chrome לא הצליח לסנכרן את הנתונים שלך מפני שפרטי הכניסה של חשבונך אינם מעודכנים.</translation>
 <translation id="7626032353295482388">‏ברוכים הבאים ל-Chrome</translation>
+<translation id="7629695634924605473">‏Chrome מודיע לך אם הסיסמאות שלך נמצאות בסיכון</translation>
 <translation id="7641148173327520642">‏לפי הגדרת מנהל המערכת, Google Chrome יפתח את <ph name="ALTERNATIVE_BROWSER_NAME" /> כדי לגשת אל <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">‏לוגו של Chrome Enterprise</translation>
 <translation id="7747138024166251722">המתקין לא הצליח ליצור ספריה זמנית. בדוק את המקום הפנוי בדיסק ואת האישור להתקנת תוכנה.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb
index 31165c5..c2e2e6c 100644
--- a/chrome/app/resources/google_chrome_strings_ja.xtb
+++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -51,6 +51,8 @@
 <translation id="2094919256425865063">今すぐ Chrome を終了しますか?</translation>
 <translation id="2120620239521071941">このデバイスから <ph name="ITEMS_COUNT" /> 件の項目を削除します。後でデータを取得するには、<ph name="USER_EMAIL" /> として Chrome にログインしてください。</translation>
 <translation id="2123055963409958220"><ph name="BEGIN_LINK" />現在の設定<ph name="END_LINK" />を送信して Chrome の品質向上にご協力ください</translation>
+<translation id="2128103434102193461">Chrome OS の詳細については、<ph name="LINK_BEGIN" />Chrome OS について<ph name="LINK_END" />をご覧ください</translation>
+<translation id="2151406531797534936">Chrome を今すぐ再起動してください</translation>
 <translation id="216054706567564023">Chrome をスマートフォンにインストールしませんか。お客様のアカウント再設定用の電話番号に、Google より SMS をお送りします。</translation>
 <translation id="2246246234298806438">Google Chrome では、組み込みの PDF ビューアがない場合、印刷プレビューを表示できません。</translation>
 <translation id="2252923619938421629">現在の設定を送信して Google Chrome の機能向上に役立てる</translation>
@@ -219,6 +221,7 @@
 <translation id="7589360514048265910">Mac OS X 10.9 はサポートされなくなったため、このパソコンでは今後 Google Chrome のアップデートは受信されません。</translation>
 <translation id="7592736734348559088">アカウントのログイン情報が最新ではないため、Google Chrome はデータを同期できませんでした。</translation>
 <translation id="7626032353295482388">Chrome へようこそ</translation>
+<translation id="7629695634924605473">Chrome では、特定のパスワードが侵害された事実の有無がわかります</translation>
 <translation id="7641148173327520642">システム管理者が、<ph name="TARGET_URL_HOSTNAME" /> へのアクセスに <ph name="ALTERNATIVE_BROWSER_NAME" /> を開くよう Google Chrome を設定しています。</translation>
 <translation id="7651907282515937834">Chrome Enterprise ロゴ</translation>
 <translation id="7747138024166251722">インストーラーの一時ディレクトリを作成できませんでした。ディスクの空き領域とソフトウェアのインストール許可があることを確認してください。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb
index 6ef195a..100b5d3 100644
--- a/chrome/app/resources/google_chrome_strings_kn.xtb
+++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -45,12 +45,15 @@
 <translation id="1873233029667955273">Google Chrome ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಅಲ್ಲ</translation>
 <translation id="1874309113135274312">Google Chrome ಬೀಟಾ (mDNS-In)</translation>
 <translation id="1877026089748256423">Chrome ನ ಅವಧಿ ಮುಗಿದಿದೆ</translation>
+<translation id="1900795423379050516">ಈ ಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್ ಒಂದು ಕಾಣಿಸದಿದ್ದರೆ, ನಿಮ್ಮ <ph name="LINK_BEGIN" />Chrome ಬ್ರೌಸರ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="LINK_END" /> ನೋಡಿರಿ</translation>
 <translation id="1915828456209461693">Chrome ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ ಹಾಗೂ ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="1919130412786645364">Chrome ಸೈನ್-ಇನ್ ಅನ್ನು ಅನುಮತಿಸಿ</translation>
 <translation id="2063848847527508675">ಅಪ್‌ಡೇಟ್ ಅನ್ವಯಿಸಲು Chrome OS ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕಾಗುತ್ತದೆ.</translation>
 <translation id="2094919256425865063">ಹೇಗಿದ್ದರೂ Chrome ಅನ್ನು ಮುಚ್ಚುವುದೇ?</translation>
 <translation id="2120620239521071941">ಈ ಸಾಧನದಿಂದ <ph name="ITEMS_COUNT" /> ಐಟಂಗಳನ್ನು ಇದು ಅಳಿಸುತ್ತದೆ. ನಂತರ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಮರುಪಡೆಯಲು, <ph name="USER_EMAIL" /> ನಂತೆ Chrome ಗೆ ಸೈನ್‌‌ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="2123055963409958220"><ph name="BEGIN_LINK" />ಪ್ರಸ್ತುತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು<ph name="END_LINK" /> ವರದಿ ಮಾಡುವುದರ ಮೂಲಕ Chrome ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation>
+<translation id="2128103434102193461">Chrome OS ವಿವರಗಳಿಗಾಗಿ, <ph name="LINK_BEGIN" />Chrome OS ಬಗ್ಗೆ<ph name="LINK_END" /> ನೋಡಿ</translation>
+<translation id="2151406531797534936">ಇದೀಗ Chrome ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="216054706567564023">ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ Chrome ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ. ನಿಮ್ಮ ಖಾತೆ ಮರುಪ್ರಾಪ್ತಿ ಫೋನ್ ಸಂಖ್ಯೆ‌ಗೆ ನಾವು ಎಸ್ಎಂಎಸ್ ಕಳುಹಿಸುತ್ತೇವೆ.</translation>
 <translation id="2246246234298806438">ಬಿಲ್ಟ್ ಇನ್ PDF ವೀಕ್ಷಣೆಯು ಕಾಣೆಯಾಗಿರುವಾಗ Google Chrome ಮುದ್ರಣ ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ತೋರಿಸುವುದಿಲ್ಲ.</translation>
 <translation id="2252923619938421629">ಪ್ರಸ್ತುತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ವರದಿ ಮಾಡುವುದರ ಮೂಲಕ Google Chrome ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯಮಾಡಿ</translation>
@@ -158,6 +161,7 @@
 <translation id="5543953544073077331">Chrome ನ ಇತರ ನಕಲುಗಳು ರನ್ ಆಗುತ್ತಿವೆ. ಅಪ್‌ಡೇಟ್ ಮಾಡಲು, ಅವುಗಳನ್ನು ಮುಚ್ಚಿರಿ.</translation>
 <translation id="556024056938947818">Google Chrome ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ತೋರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
+<translation id="5657226924540934362">ಈ ಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್ ಒಂದು ಕಾಣಿಸದಿದ್ದರೆ, ನಿಮ್ಮ <ph name="LINK_BEGIN" />Chrome OS ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="LINK_END" /> ನೋಡಿರಿ</translation>
 <translation id="565744775970812598"><ph name="FILE_NAME" /> ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು, ಹಾಗಾಗಿ Chrome ಅದನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ.</translation>
 <translation id="5686916850681061684">Google Chrome ಕಸ್ಟಮೈಸ್ ಮಾಡಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ. ನೀವು ಕೆಲವು ಸಂಗತಿಗಳ ಕುರಿತು ಗಮನಹರಿಸಬೇಕಿದೆ - ವಿವರಗಳಿಗಾಗಿ ಕ್ಲಿಕ್ ಮಾಡಿ.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
@@ -217,6 +221,7 @@
 <translation id="7589360514048265910">ಈ ಕಂಪ್ಯೂಟರ್‌ ಇನ್ನು ಮುಂದೆ Google Chrome ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ. ಏಕೆಂದರೆ ಅದರ Mac OS X 10.9 ಇನ್ನು ಮುಂದೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ.</translation>
 <translation id="7592736734348559088">ನಿಮ್ಮ ಖಾತೆಯ ಸೈನ್ ಇನ್ ವಿವರಗಳು ತೀರಾ ಹಳತಾಗಿರುವ ಕಾರಣ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು Google Chrome ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation>
 <translation id="7626032353295482388">Chrome ಗೆ ಸ್ವಾಗತ</translation>
+<translation id="7629695634924605473">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಎಂದಾದರೂ ಹ್ಯಾಕ್‌ ಆಗಿವೆಯೇ ಎಂಬುದನ್ನು Chrome ನಿಮಗೆ ತಿಳಿಸುತ್ತದೆ</translation>
 <translation id="7641148173327520642"><ph name="TARGET_URL_HOSTNAME" /> ಗೆ ಪ್ರವೇಶ ಪಡೆಯುವುದಕ್ಕಾಗಿ <ph name="ALTERNATIVE_BROWSER_NAME" /> ಅನ್ನು ತೆರೆಯಲು ನಿಮ್ಮ ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರು Google Chrome ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ್ದಾರೆ.</translation>
 <translation id="7651907282515937834">Chrome ಎಂಟರ್‌ಪ್ರೈಸ್ ಲೋಗೋ</translation>
 <translation id="7747138024166251722">ಇನ್‌ಸ್ಟಾಲರ್‌‌‌ಗೆ ತಾತ್ಕಾಲಿಕ ಡೈರೆಕ್ಟರಿಯನ್ನು ರಚಿಸಲಾಗಲಿಲ್ಲ. ಸಾಫ್ಟ್‌ವೇರ್ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಮುಕ್ತ ಡಿಸ್ಕ್ ಜಾಗ ಮತ್ತು ಅನುಮತಿಗಾಗಿ ದಯವಿಟ್ಟು ಪರಿಶೀಲಿಸಿ.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb
index e16413e..ea10832 100644
--- a/chrome/app/resources/google_chrome_strings_lv.xtb
+++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -53,6 +53,9 @@
 <translation id="2094919256425865063">Vai tik un tā aizvērt pārlūku Chrome?</translation>
 <translation id="2120620239521071941">Veicot šo darbību, no šīs ierīces tiks dzēsts(-i) <ph name="ITEMS_COUNT" /> vienums(-i). Lai vēlāk izgūtu datus, pierakstieties pārlūkā Chrome kā <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Palīdziet uzlabot pārlūku Chrome, ziņojot par <ph name="BEGIN_LINK" />pašreizējiem iestatījumiem<ph name="END_LINK" />.</translation>
+<translation id="2128103434102193461">Detalizētu informāciju par Chrome OS skatiet lapā <ph name="LINK_BEGIN" />
+      Par Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Lūdzu, nekavējoties restartējiet pārlūku Chrome</translation>
 <translation id="216054706567564023">Instalējiet pārlūku Chrome savā tālrunī. Mēs nosūtīsim īsziņu uz jūsu konta atkopšanas tālruņa numuru.</translation>
 <translation id="2246246234298806438">Pārlūks Google Chrome nevar parādīt drukas priekšskatījumu, ja nav pieejams iebūvētais PDF skatītājs.</translation>
 <translation id="2252923619938421629">Palīdziet uzlabot pārlūku Google Chrome, ziņojot par pašreizējiem iestatījumiem.</translation>
@@ -223,6 +226,7 @@
 <translation id="7589360514048265910">Šajā datorā vairs netiks saņemti Google Chrome atjauninājumi, jo operētājsistēma Mac OS X 10.9 vairs netiek atbalstīta.</translation>
 <translation id="7592736734348559088">Google Chrome nevarēja sinhronizēt jūsu datus, jo jūsu konta pierakstīšanās informācija ir novecojusi.</translation>
 <translation id="7626032353295482388">Laipni lūdzam pārlūkā Chrome</translation>
+<translation id="7629695634924605473">Ja jūsu paroles kādreiz tiks apdraudētas, pārlūkā Chrome saņemsiet paziņojumu</translation>
 <translation id="7641148173327520642">Jūsu sistēmas administrators ir konfigurējis Google Chrome atvērt <ph name="ALTERNATIVE_BROWSER_NAME" />, lai piekļūtu <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Chrome Enterprise logotips</translation>
 <translation id="7747138024166251722">Instalētājam neizdevās izveidot pagaidu katalogu. Lūdzu, pārbaudiet, vai diskā pietiek vietas un vai ir atļauja instalēt programmatūru.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb
index 44fa31d..a58c76d 100644
--- a/chrome/app/resources/google_chrome_strings_ms.xtb
+++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">Keluar daripada Chrome juga?</translation>
 <translation id="2120620239521071941">Tindakan ini akan memadamkan <ph name="ITEMS_COUNT" /> item daripada peranti ini. Untuk mendapatkan kembali data anda kemudian, log masuk ke Chrome sebagai <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Bantu jadikan Chrome lebih baik dengan melaporkan <ph name="BEGIN_LINK" />tetapan semasa<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Untuk mendapatkan butiran OS Chrome, sila lihat <ph name="LINK_BEGIN" />
+      Perihal OS Chrome<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Sila mulakan semula Chrome sekarang</translation>
 <translation id="216054706567564023">Pasang Chrome pada telefon anda. Kami akan menghantar SMS ke nombor telefon pemulihan akaun anda.</translation>
 <translation id="2246246234298806438">Google Chrome tidak dapat memaparkan pratonton cetakan apabila pemapar PDF terbina dalam tiada.</translation>
 <translation id="2252923619938421629">Bantu menjadikan Google Chrome lebih baik dengan melaporkan tetapan semasa</translation>
@@ -159,7 +162,7 @@
 <translation id="556024056938947818">Google Chrome sedang cuba memaparkan kata laluan.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
 <translation id="5657226924540934362">Jika tetapan tidak ditunjukkan pada halaman ini, lihat dalam <ph name="LINK_BEGIN" />
-      tetapan OS Chrome OS<ph name="LINK_END" /></translation>
+tetapan OS Chrome<ph name="LINK_END" /> anda</translation>
 <translation id="565744775970812598"><ph name="FILE_NAME" /> mungkin berbahaya, jadi Chrome telah menyekat fail itu.</translation>
 <translation id="5686916850681061684">Sesuaikan dan kawal Google Chrome. Perhatian anda diperlukan - klik untuk mendapatkan butiran.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Komputer ini tidak akan menerima kemas kini Google Chrome lagi kerana Mac OS X 10.9 tidak lagi disokong.</translation>
 <translation id="7592736734348559088">Google Chrome tidak dapat menyegerakkan data anda kerana butiran log masuk akaun anda sudah lapuk.</translation>
 <translation id="7626032353295482388">Selamat Datang ke Chrome</translation>
+<translation id="7629695634924605473">Chrome akan memberitahu anda sekiranya kata laluan anda terjejas</translation>
 <translation id="7641148173327520642">Pentadbir sistem anda telah mengkonfigurasikan Google Chrome agar membuka <ph name="ALTERNATIVE_BROWSER_NAME" /> untuk mengakses <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logo Chrome Enterprise</translation>
 <translation id="7747138024166251722">Pemasang tidak dapat mencipta direktori sementara. Sila semak ruang cakera kosong dan kebenaran untuk memasang perisian.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb
index 36cbdb1..50ba4ea 100644
--- a/chrome/app/resources/google_chrome_strings_nl.xtb
+++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -54,6 +54,8 @@
 <translation id="2094919256425865063">Chrome toch sluiten?</translation>
 <translation id="2120620239521071941">Hiermee worden <ph name="ITEMS_COUNT" /> items verwijderd van dit apparaat. Als je je gegevens later wilt terughalen, log je in bij Chrome als <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Help Chrome beter te maken door de <ph name="BEGIN_LINK" />huidige instellingen<ph name="END_LINK" /> te melden</translation>
+<translation id="2128103434102193461">Ga naar <ph name="LINK_BEGIN" />Over Chrome OS<ph name="LINK_END" /> voor meer informatie over Chrome OS</translation>
+<translation id="2151406531797534936">Start Chrome nu opnieuw op</translation>
 <translation id="216054706567564023">Installeer Chrome op je telefoon. We sturen een sms naar het hersteltelefoonnummer voor je account.</translation>
 <translation id="2246246234298806438">Google Chrome kan het afdrukvoorbeeld niet weergeven wanneer de ingebouwde pdf-viewer ontbreekt.</translation>
 <translation id="2252923619938421629">Help Google Chrome beter te maken door de huidige instellingen te melden</translation>
@@ -163,7 +165,7 @@
 <translation id="5543953544073077331">Er zijn andere exemplaren van Chrome actief. Sluit ze om een update uit te voeren.</translation>
 <translation id="556024056938947818">Google Chrome probeert wachtwoorden weer te geven.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
-<translation id="5657226924540934362">Als je een instelling niet ziet op deze pagina, kijk je in de <ph name="LINK_BEGIN" />Chrome OS-instellingen<ph name="LINK_END" /></translation>
+<translation id="5657226924540934362">Kijk je in de <ph name="LINK_BEGIN" />Chrome OS-instellingen<ph name="LINK_END" />als een instelling ontbreekt op deze pagina.</translation>
 <translation id="565744775970812598"><ph name="FILE_NAME" /> kan gevaarlijk zijn en is daarom door Chrome geblokkeerd.</translation>
 <translation id="5686916850681061684">Pas Google Chrome aan en beheer de instellingen. Je aandacht is vereist. Klik voor meer informatie.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
@@ -223,6 +225,7 @@
 <translation id="7589360514048265910">Deze computer ontvangt geen Google Chrome-updates meer omdat Mac OS X 10.9 niet meer wordt ondersteund.</translation>
 <translation id="7592736734348559088">Google Chrome kan je gegevens niet synchroniseren omdat de inloggegevens voor je account zijn verouderd.</translation>
 <translation id="7626032353295482388">Welkom bij Chrome</translation>
+<translation id="7629695634924605473">Chrome laat het je weten als je wachtwoorden mogelijk niet veilig meer zijn</translation>
 <translation id="7641148173327520642">Je systeembeheerder heeft Google Chrome geconfigureerd om <ph name="ALTERNATIVE_BROWSER_NAME" /> te openen voor toegang tot <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Chrome Enterprise-logo</translation>
 <translation id="7747138024166251722">Het installatieprogramma kan geen tijdelijke directory maken. Controleer of je nog schijfruimte hebt en of je toestemming hebt om software te installeren.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb
index ee28311..813f2d3d 100644
--- a/chrome/app/resources/google_chrome_strings_pl.xtb
+++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -43,14 +43,16 @@
 <translation id="1873233029667955273">Google Chrome nie jest domyślną przeglądarką</translation>
 <translation id="1874309113135274312">Google Chrome Beta (mDNS-In)</translation>
 <translation id="1877026089748256423">Chrome jest nieaktualny</translation>
-<translation id="1900795423379050516">Jeśli ustawienia nie widać na tej stronie, zajrzyj do
-      <ph name="LINK_BEGIN" />ustawień przeglądarki Chrome<ph name="LINK_END" /></translation>
+<translation id="1900795423379050516">Jeśli ustawienia nie widać na tej stronie, zajrzyj do <ph name="LINK_BEGIN" />ustawień przeglądarki Chrome<ph name="LINK_END" /></translation>
 <translation id="1915828456209461693">Dostępna jest aktualizacja Chrome, która zostanie zastosowana natychmiast po ponownym uruchomieniu.</translation>
 <translation id="1919130412786645364">Zezwalaj na logowanie się w Chrome</translation>
 <translation id="2063848847527508675">Żeby system operacyjny Chrome mógł zastosować aktualizacje, musisz go ponownie uruchomić.</translation>
 <translation id="2094919256425865063">Zamknąć Chrome mimo to?</translation>
 <translation id="2120620239521071941">Spowoduje to usunięcie <ph name="ITEMS_COUNT" /> elementów z tego urządzenia. Aby później odzyskać dane, zaloguj się w Chrome jako <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Pomóż udoskonalić Chrome, zgłaszając <ph name="BEGIN_LINK" />bieżące ustawienia<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Szczegóły dotyczące Chrome OS znajdziesz w sekcji <ph name="LINK_BEGIN" />
+      System operacyjny Chrome – informacje<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Uruchom Chrome ponownie</translation>
 <translation id="216054706567564023">Zainstaluj Chrome na telefonie. Wyślemy SMS-a pod numer telefonu do odzyskiwania konta.</translation>
 <translation id="2246246234298806438">Google Chrome nie może pokazać podglądu wydruku, gdy nie ma wbudowanej przeglądarki PDF.</translation>
 <translation id="2252923619938421629">Pomóż udoskonalić Google Chrome, zgłaszając bieżące ustawienia</translation>
@@ -158,8 +160,7 @@
 <translation id="5543953544073077331">Są uruchomione inne kopie Chrome. Zamknij je, by przeprowadzić aktualizację.</translation>
 <translation id="556024056938947818">Google Chrome próbuje pokazać hasła.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
-<translation id="5657226924540934362">Jeśli ustawienia nie widać na tej stronie, zajrzyj do <ph name="LINK_BEGIN" />
-      ustawień systemu operacyjnego Chrome<ph name="LINK_END" /></translation>
+<translation id="5657226924540934362">Jeśli ustawienia nie widać na tej stronie, zajrzyj do <ph name="LINK_BEGIN" />ustawień systemu operacyjnego Chrome<ph name="LINK_END" /></translation>
 <translation id="565744775970812598">Plik <ph name="FILE_NAME" /> może być niebezpieczny, dlatego został zablokowany przez Chrome.</translation>
 <translation id="5686916850681061684">Dostosuj i kontroluj Google Chrome. Pewna kwestia wymaga Twojej uwagi – kliknij, by przejść do szczegółów.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
@@ -219,6 +220,7 @@
 <translation id="7589360514048265910">Google Chrome nie będzie już aktualizować się na tym komputerze, bo system Mac OS X 10.9 nie jest już obsługiwany.</translation>
 <translation id="7592736734348559088">Google Chrome nie może zsynchronizować danych, ponieważ dane logowania na Twoje konto są nieaktualne.</translation>
 <translation id="7626032353295482388">Witamy w Chrome</translation>
+<translation id="7629695634924605473">Chrome poinformuje Cię, jeśli Twoje hasła dostaną się w niepowołane ręce</translation>
 <translation id="7641148173327520642">Administrator systemu skonfigurował Google Chrome tak, by strona <ph name="TARGET_URL_HOSTNAME" /> otwierała się w przeglądarce <ph name="ALTERNATIVE_BROWSER_NAME" />.</translation>
 <translation id="7651907282515937834">Logo Chrome Enterprise</translation>
 <translation id="7747138024166251722">Instalator nie mógł utworzyć katalogu tymczasowego. Sprawdź, czy na dysku jest dość wolnego miejsca oraz sprawdź, czy posiadasz uprawnienia do instalowania programów.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
index c47b260..5fdb39e 100644
--- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -50,6 +50,9 @@
 <translation id="2094919256425865063">Sair do Chrome mesmo assim?</translation>
 <translation id="2120620239521071941">Essa ação excluirá <ph name="ITEMS_COUNT" /> itens desse dispositivo. Para recuperar seus dados mais tarde, faça login no Chrome como <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Ajude a melhorar o Chrome informando as <ph name="BEGIN_LINK" />configurações atuais<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Para detalhes sobre Chrome OS, veja <ph name="LINK_BEGIN" />
+Sobre Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Reinicie o Chrome agora</translation>
 <translation id="216054706567564023">Instale o Chrome no seu smartphone. Enviaremos um SMS para o número de recuperação da sua conta.</translation>
 <translation id="2246246234298806438">O Google Chrome não consegue mostrar a visualização de impressão quando não há visualizador de PDF integrado.</translation>
 <translation id="2252923619938421629">Ajude a melhorar o Google Chrome informando as configurações atuais</translation>
@@ -217,6 +220,7 @@
 <translation id="7589360514048265910">Este computador não receberá mais atualizações do Google Chrome, porque o Mac OS X 10.9 não é mais compatível.</translation>
 <translation id="7592736734348559088">O Google Chrome não pôde sincronizar seus dados, pois os detalhes de login da sua conta estão desatualizados.</translation>
 <translation id="7626032353295482388">Bem-vindo ao Google Chrome</translation>
+<translation id="7629695634924605473">O Chrome avisa se suas senhas forem comprometidas</translation>
 <translation id="7641148173327520642">O administrador do seu sistema configurou o Google Chrome para abrir o <ph name="ALTERNATIVE_BROWSER_NAME" /> ao acessar <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logotipo do Chrome Enterprise</translation>
 <translation id="7747138024166251722">O instalador não conseguiu criar um diretório temporário. Verifique se há espaço livre em disco e se há permissão para a instalação de software.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
index 31a3b462..ea4f2ace 100644
--- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">Pretende fechar o Chrome mesmo assim?</translation>
 <translation id="2120620239521071941">Esta ação elimina <ph name="ITEMS_COUNT" /> itens deste dispositivo. Para recuperar os seus dados mais tarde, inicie sessão no Chrome como <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Ajude a melhorar o Chrome ao comunicar as <ph name="BEGIN_LINK" />definições atuais<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Para obter detalhes do Chrome OS, consulte <ph name="LINK_BEGIN" />
+      Acerca do Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Reinicie o Chrome agora</translation>
 <translation id="216054706567564023">Instale o Chrome no telemóvel. Vamos enviar uma SMS para o seu número de telefone de recuperação de conta.</translation>
 <translation id="2246246234298806438">O Google Chrome não pode mostrar a pré-visualização de impressão quando o visualizador de PDF incorporado está em falta.</translation>
 <translation id="2252923619938421629">Ajude a melhorar o Google Chrome, comunicando as definições atuais</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Este computador deixará de receber atualizações do Google Chrome, uma vez que o Mac OS X 10.9 já não é suportado.</translation>
 <translation id="7592736734348559088">O Google Chrome não conseguiu sincronizar os dados porque os detalhes de início de sessão da sua conta estão desatualizados.</translation>
 <translation id="7626032353295482388">Bem-vindo ao Chrome</translation>
+<translation id="7629695634924605473">O Chrome indica-lhe se as suas palavras-passe forem comprometidas.</translation>
 <translation id="7641148173327520642">O administrador do sistema configurou o Google Chrome para abrir o <ph name="ALTERNATIVE_BROWSER_NAME" /> e aceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Logótipo do Chrome Enterprise</translation>
 <translation id="7747138024166251722">O programa de instalação não conseguiu criar um directório temporário. Verifique se há espaço livre no disco e permissão para a instalação do software.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb
index f1ade43..7f6ecd69 100644
--- a/chrome/app/resources/google_chrome_strings_ro.xtb
+++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">Ieși din Chrome oricum?</translation>
 <translation id="2120620239521071941">Astfel, se vor șterge <ph name="ITEMS_COUNT" /> elemente de pe acest dispozitiv. Pentru a recupera datele mai târziu, conectează-te la Chrome ca <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Contribuie la îmbunătățirea browserului Chrome raportând <ph name="BEGIN_LINK" />setările actuale<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Pentru detalii despre sistemul de operare Chrome, accesează <ph name="LINK_BEGIN" />
+      Despre sistemul de operare Chrome<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Repornește Chrome acum</translation>
 <translation id="216054706567564023">Instalează Chrome pe telefon. Vom trimite un SMS la numărul de telefon de recuperare a contului.</translation>
 <translation id="2246246234298806438">Google Chrome nu poate afișa previzualizarea înainte de printare când vizualizatorul PDF încorporat lipsește.</translation>
 <translation id="2252923619938421629">Contribuie la îmbunătățirea browserului Google Chrome raportând setările actuale</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">Acest computer nu va mai primi actualizări pentru Google Chrome, deoarece Mac OS X 10.9 nu mai este acceptat.</translation>
 <translation id="7592736734348559088">Google Chrome nu a putut sincroniza datele, deoarece detaliile de conectare pentru contul dvs. nu sunt actualizate.</translation>
 <translation id="7626032353295482388">Bun venit la Chrome</translation>
+<translation id="7629695634924605473">Chrome te anunță dacă parolele tale sunt compromise</translation>
 <translation id="7641148173327520642">Administratorul sistemului a configurat Google Chrome să deschidă <ph name="ALTERNATIVE_BROWSER_NAME" /> pentru a accesa <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Sigla Chrome Enterprise</translation>
 <translation id="7747138024166251722">Programul de instalare nu a putut crea un director temporar. Verifică dacă există suficient spațiu liber și dacă ai drepturile necesare pentru a instala software-ul.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb
index 37b38fe9..7fcfca6 100644
--- a/chrome/app/resources/google_chrome_strings_ru.xtb
+++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -43,14 +43,16 @@
 <translation id="1873233029667955273">Google Chrome не является браузером по умолчанию.</translation>
 <translation id="1874309113135274312">Google Chrome (бета, mDNS-In)</translation>
 <translation id="1877026089748256423">Версия Chrome устарела</translation>
-<translation id="1900795423379050516">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />
-      настройки браузера Chrome<ph name="LINK_END" />.</translation>
+<translation id="1900795423379050516">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />настройки браузера Chrome<ph name="LINK_END" />.</translation>
 <translation id="1915828456209461693">Для Chrome доступно обновление. Оно будет установлено при перезапуске браузера.</translation>
 <translation id="1919130412786645364">Разрешить вход в Chrome</translation>
 <translation id="2063848847527508675">Перезагрузите Chrome OS, чтобы установить обновление.</translation>
 <translation id="2094919256425865063">Завершить работу Chrome?</translation>
 <translation id="2120620239521071941">С устройства будут удалены объекты (<ph name="ITEMS_COUNT" />). Чтобы восстановить данные позже, войдите в Chrome как <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Отправьте отчет о <ph name="BEGIN_LINK" />текущих настройках Chrome<ph name="END_LINK" />, чтобы помочь нам улучшить браузер</translation>
+<translation id="2128103434102193461">Узнать больше о Chrome OS: <ph name="LINK_BEGIN" />
+      О Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Перезапустите Chrome</translation>
 <translation id="216054706567564023">Установите Chrome на телефон. Мы отправим SMS на номер, указанный в вашем аккаунте.</translation>
 <translation id="2246246234298806438">Если отсутствует встроенный просмотрщик PDF, предварительный просмотр в Google Chrome невозможен.</translation>
 <translation id="2252923619938421629">Отправьте отчет о текущих настройках Google Chrome и помогите усовершенствовать работу браузера</translation>
@@ -158,8 +160,7 @@
 <translation id="5543953544073077331">Запущены другие экземпляры Chrome. Чтобы выполнить обновление, закройте их.</translation>
 <translation id="556024056938947818">Вводимые пароли будут отображаться в Google Chrome.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
-<translation id="5657226924540934362">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />
-      настройки Chrome OS<ph name="LINK_END" />.</translation>
+<translation id="5657226924540934362">Если нужного параметра нет на этой странице, откройте <ph name="LINK_BEGIN" />настройки Chrome OS<ph name="LINK_END" />.</translation>
 <translation id="565744775970812598">Chrome заблокировал файл <ph name="FILE_NAME" /> как потенциально опасный.</translation>
 <translation id="5686916850681061684">Настройка и управление Google Chrome Требуется ваше внимание. Нажмите, чтобы получить подробную информацию.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
@@ -219,6 +220,7 @@
 <translation id="7589360514048265910">Google Chrome больше не будет обновляться на этом компьютере, так как поддержка Mac OS X 10.9 прекращена.</translation>
 <translation id="7592736734348559088">Google Chrome не удалось синхронизировать данные, поскольку ваши учетные данные устарели.</translation>
 <translation id="7626032353295482388">Добро пожаловать в Chrome!</translation>
+<translation id="7629695634924605473">Chrome сообщит вам, если возникнет проблема с безопасностью ваших паролей.</translation>
 <translation id="7641148173327520642">Ваш системный администратор задал настройки, согласно которым Google Chrome должен запускать <ph name="ALTERNATIVE_BROWSER_NAME" /> для доступа к сайту <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Логотип Chrome Enterprise</translation>
 <translation id="7747138024166251722">Программе установки не удалось создать временный каталог. Возможно, у вас нет прав на установку приложений или недостаточно места на диске.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb
index b3771b5..fd30c0eb 100644
--- a/chrome/app/resources/google_chrome_strings_sk.xtb
+++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -52,6 +52,9 @@
 <translation id="2094919256425865063">Chcete Chrome napriek tomu ukončiť?</translation>
 <translation id="2120620239521071941">Táto akcia odstráni zo zariadenia niekoľko položiek (počet: <ph name="ITEMS_COUNT" />). Ak budete chcieť svoje údaje neskôr opäť načítať, prihláste sa do Chromu ako používateľ <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Nahlásiť <ph name="BEGIN_LINK" />aktuálne nastavenia<ph name="END_LINK" /> a pomôcť tak zlepšiť Chrome</translation>
+<translation id="2128103434102193461">Podrobnosti o systéme Chrome OS nájdete na stránke <ph name="LINK_BEGIN" />
+      Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Reštartujte Chrome</translation>
 <translation id="216054706567564023">Nainštalujte si Chrome do telefónu. Pošleme vám správu SMS na telefónne číslo na obnovenie účtu.</translation>
 <translation id="2246246234298806438">Ak vstavaný zobrazovač súborov PDF chýba, prehliadač Google Chrome nemôže zobraziť ukážku pred tlačou.</translation>
 <translation id="2252923619938421629">Nahláste aktuálne nastavenia a pomôžte tak zlepšiť prehliadač Google Chrome</translation>
@@ -163,7 +166,7 @@
 <translation id="5543953544073077331">Chrome je spustený v ďalších oknách. Ak ho chcete aktualizovať, zavrite ich.</translation>
 <translation id="556024056938947818">Prehliadač Google Chrome sa snaží zobraziť heslá.</translation>
 <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
-<translation id="5657226924540934362">Ak nie je určité nastavenie zobrazené na tejto stránke, skontrolujte <ph name="LINK_BEGIN" />nastavenia operačného systému Chrome OS<ph name="LINK_END" /></translation>
+<translation id="5657226924540934362">Ak nevidíte určité nastavenie na tejto stránke, skontrolujte <ph name="LINK_BEGIN" />nastavenia operačného systému Chrome OS<ph name="LINK_END" /></translation>
 <translation id="565744775970812598">Súbor <ph name="FILE_NAME" /> môže byť nebezpečný, a preto ho Chrome zablokoval.</translation>
 <translation id="5686916850681061684">Prispôsobte a ovládajte Google Chrome. Vyžaduje sa vaša pozornosť. Podrobnosti získate kliknutím.</translation>
 <translation id="5690427481109656848">Google LLC</translation>
@@ -223,6 +226,7 @@
 <translation id="7589360514048265910">Tento počítač už nebude dostávať aktualizácie prehliadača Google Chrome, pretože systém Mac OS X 10.9 už nie je podporovaný.</translation>
 <translation id="7592736734348559088">Prehliadaču Google Chrome sa nepodarilo synchronizovať vaše údaje, pretože vaše prihlasovacie údaje účtu sú zastarané.</translation>
 <translation id="7626032353295482388">Víta vás prehliadač Chrome</translation>
+<translation id="7629695634924605473">Ak budú vaše heslá napadnuté, Chrome vám to oznámi</translation>
 <translation id="7641148173327520642">Správca systému nakonfiguroval Google Chrome, aby <ph name="TARGET_URL_HOSTNAME" /> otváral v prehliadači <ph name="ALTERNATIVE_BROWSER_NAME" />.</translation>
 <translation id="7651907282515937834">Logo Chrome Enterprise</translation>
 <translation id="7747138024166251722">Inštalátor nemohol vytvoriť dočasný priečinok. Skontrolujte úroveň zaplnenia disku a povolenie na inštaláciu softvéru.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb
index fb89ea5e7..d9a78bd 100644
--- a/chrome/app/resources/google_chrome_strings_sl.xtb
+++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -55,6 +55,9 @@
 <translation id="2094919256425865063">Želite vseeno zapreti Chrome?</translation>
 <translation id="2120620239521071941">S tem bo iz te naprave izbrisanih več elementov (<ph name="ITEMS_COUNT" />). Če želite pozneje prenesti podatke, se v Chrome prijavite kot <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Pomagajte izboljšati Google Chrome s <ph name="BEGIN_LINK" />poročanjem trenutnih nastavitev<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Glede podrobnosti o sistemu OS Chrome glejte <ph name="LINK_BEGIN" />
+      O sistemu OS Chrome<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Znova zaženite Chrome</translation>
 <translation id="216054706567564023">Namestite Chrome v telefonu. Na telefonsko številko za obnovitev računa bomo poslali SMS.</translation>
 <translation id="2246246234298806438">Google Chrome ne more odpreti predogleda tiskanja, če ni vgrajenega pregledovalnika datotek PDF.</translation>
 <translation id="2252923619938421629">Pomagajte izboljšati Google Chrome s poročanjem trenutnih nastavitev</translation>
@@ -227,6 +230,7 @@
 <translation id="7589360514048265910">Ta računalnik ne bo več prejemal posodobitev za Google Chrome, ker sistem Mac OS X 10.9 ni več podprt.</translation>
 <translation id="7592736734348559088">Google Chrome ni mogel sinhronizirati podatkov, ker so podatki za prijavo v račun zastareli.</translation>
 <translation id="7626032353295482388">Dobrodošli v Chromu</translation>
+<translation id="7629695634924605473">Chrome vam sporoči, če so gesla ogrožena</translation>
 <translation id="7641148173327520642">Skrbnik sistema je Google Chrome nastavil tako, da za dostop do <ph name="TARGET_URL_HOSTNAME" /> odpre brskalnik <ph name="ALTERNATIVE_BROWSER_NAME" />.</translation>
 <translation id="7651907282515937834">Logotip za Chrome Enterprise</translation>
 <translation id="7747138024166251722">Namestitvenemu programu ni uspelo ustvariti začasnega imenika. Preverite, ali je na disku dovolj prostora in ali imate dovoljenje za namestitev programske opreme.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb
index 567841a..05851db3 100644
--- a/chrome/app/resources/google_chrome_strings_sr.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -55,6 +55,8 @@
 <translation id="2094919256425865063">Желите ли ипак да затворите Chrome?</translation>
 <translation id="2120620239521071941">Овим ћете избрисати <ph name="ITEMS_COUNT" /> ставке(и) са овог уређаја. Да бисте касније вратили податке, пријавите се у Chrome као <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Помозите да побољшамо Chrome тако што ћете послати извештај о <ph name="BEGIN_LINK" />актуелним подешавањима<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Детаље о Chrome ОС-у потражите у одељку <ph name="LINK_BEGIN" />О Chrome ОС-у<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Поново покрените Chrome</translation>
 <translation id="216054706567564023">Инсталирајте Chrome на телефону. Послаћемо вам SMS на број телефона за враћање приступа налогу.</translation>
 <translation id="2246246234298806438">Google Chrome не може да покаже приказ пре штампања када недостаје уграђени PDF приказивач.</translation>
 <translation id="2252923619938421629">Помозите да побољшамо Google Chrome тако што ћете послати извештај о актуелним подешавањима</translation>
@@ -227,6 +229,7 @@
 <translation id="7589360514048265910">Овај рачунар више неће добијати ажурирања за Google Chrome зато што Mac OS X 10.9 више није подржан.</translation>
 <translation id="7592736734348559088">Google Chrome не може да синхронизује податке зато што су подаци за пријављивање на налог застарели.</translation>
 <translation id="7626032353295482388">Добро дошли у Chrome</translation>
+<translation id="7629695634924605473">Chrome вас обавештава ако су лозинке угрожене</translation>
 <translation id="7641148173327520642">Администратор система је конфигурисао Google Chrome да отвара прегледач <ph name="ALTERNATIVE_BROWSER_NAME" /> да би приступао <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="7651907282515937834">Chrome Enterprise логотип</translation>
 <translation id="7747138024166251722">Програм за инсталацију није могао да направи привремени директоријум. Проверите да ли имате слободног простора на диску, као и дозволу да инсталирате софтвер.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb
index de5c542..be3a94e 100644
--- a/chrome/app/resources/google_chrome_strings_ta.xtb
+++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -51,6 +51,8 @@
 <translation id="2094919256425865063">Chrome இலிருந்து வெளியேறவா?</translation>
 <translation id="2120620239521071941">வெளியேறினால், இந்தச் சாதனத்திலிருந்து <ph name="ITEMS_COUNT" /> உருப்படிகள் நீக்கப்படும். பின்னர் தரவை மீட்டமைக்க, Chrome இல் <ph name="USER_EMAIL" /> எனும் முகவரியின் மூலம் உள்நுழையவும்.</translation>
 <translation id="2123055963409958220"><ph name="BEGIN_LINK" />தற்போதைய அமைப்புகளைப்<ph name="END_LINK" />பற்றிய அறிக்கையை அனுப்பி, Chromeஐ இன்னும் சிறந்ததாக்க உதவவும்</translation>
+<translation id="2128103434102193461">Chrome OS விவரங்களுக்கு <ph name="LINK_BEGIN" />Chrome OS அறிமுகம்<ph name="LINK_END" /> என்பதைப் பார்க்கவும்</translation>
+<translation id="2151406531797534936">Chromeமை இப்போது மீண்டும் தொடங்கவும்</translation>
 <translation id="216054706567564023">உங்கள் மொபைலில் Chromeமை நிறுவவும். கணக்கின் மீட்பு மொபைல் எண்ணுக்கு SMS ஒன்றை அனுப்புவோம்.</translation>
 <translation id="2246246234298806438">உள்ளமைக்கப்பட்ட PDF வியூவர் இல்லையென்றால், Google Chrome அச்சிடல் மாதிரிக்காட்சியைக் காண்பிக்காது.</translation>
 <translation id="2252923619938421629">நடப்பு அமைப்புகள் குறித்து தெரிவிப்பதன் மூலம் Google Chrome ஐச் சிறந்ததாக்க உதவவும்</translation>
@@ -219,6 +221,7 @@
 <translation id="7589360514048265910">Mac OS X 10.9 இனி ஆதரிக்கப்படாது என்பதால், இந்தக் கம்ப்யூட்டர் இனி Google Chrome புதுப்பிப்புகளைப் பெறாது.</translation>
 <translation id="7592736734348559088">உங்கள் கணக்கின் உள்நுழைவு விவரங்கள் காலாவதியாகிவிட்டதால் உங்கள் தரவை Google Chromeமால் ஒத்திசைக்க முடியவில்லை.</translation>
 <translation id="7626032353295482388">Chrome க்கு வருக</translation>
+<translation id="7629695634924605473">கடவுச்சொற்கள் பாதுகாப்பை இழக்கும்பட்சத்தில் அவற்றை Chrome உங்களுக்குத் தெரியப்படுத்தும்</translation>
 <translation id="7641148173327520642"><ph name="ALTERNATIVE_BROWSER_NAME" /> மூலம் <ph name="TARGET_URL_HOSTNAME" /> இணைப்பைப் பார்ப்பதற்கு உங்கள் சிஸ்டம் நிர்வாகி Google Chromeமை உள்ளமைத்துள்ளார்.</translation>
 <translation id="7651907282515937834">Chrome Enterprise லோகோ</translation>
 <translation id="7747138024166251722">தற்காலிக டைரக்டரியை நிறுவியால் உருவாக்க முடியவில்லை. வட்டு இடம் காலியாக உள்ளதா, மென்பொருளை நிறுவுவதற்கு தகுந்த அனுமதி உள்ளதா என்பதை சரிபார்க்கவும்.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb
index 80b5608..5ff0bd7 100644
--- a/chrome/app/resources/google_chrome_strings_th.xtb
+++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -50,6 +50,8 @@
 <translation id="2094919256425865063">ปิด Chrome ใช่ไหม</translation>
 <translation id="2120620239521071941">การดำเนินการนี้จะลบ <ph name="ITEMS_COUNT" /> รายการออกจากอุปกรณ์นี้ หากต้องการดึงข้อมูลภายหลัง ให้ลงชื่อเข้าใช้ Chrome ด้วย <ph name="USER_EMAIL" /></translation>
 <translation id="2123055963409958220">ช่วยให้ Chrome ดียิ่งขึ้นด้วยการรายงาน<ph name="BEGIN_LINK" />การตั้งค่าปัจจุบัน<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">สำหรับรายละเอียดของ Chrome OS โปรดดู<ph name="LINK_BEGIN" />เกี่ยวกับ Chrome OS<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">โปรดรีสตาร์ท Chrome ตอนนี้เลย</translation>
 <translation id="216054706567564023">ติดตั้ง Chrome ในโทรศัพท์ เราจะส่ง SMS ไปยังหมายเลขโทรศัพท์สำหรับการกู้คืนบัญชีของคุณ</translation>
 <translation id="2246246234298806438">Google Chrome ไม่สามารถแสดงหน้าตัวอย่างก่อนพิมพ์หากไม่มีโปรแกรมดู PDF ในตัว</translation>
 <translation id="2252923619938421629">ช่วยให้ Google Chrome ดียิ่งขึ้นด้วยการรายงานการตั้งค่าปัจจุบัน</translation>
@@ -217,6 +219,7 @@
 <translation id="7589360514048265910">คอมพิวเตอร์เครื่องนี้จะไม่ได้รับการอัปเดตจาก Google Chrome อีก เนื่องจากระบบไม่รองรับ Mac OS X 10.9 แล้ว</translation>
 <translation id="7592736734348559088">Google Chrome ไม่สามารถซิงค์ข้อมูลของคุณเนื่องจากรายละเอียดการลงชื่อเข้าใช้บัญชีของคุณล้าสมัย</translation>
 <translation id="7626032353295482388">ยินดีต้อนรับสู่ Chrome</translation>
+<translation id="7629695634924605473">Chrome จะแจ้งให้ทราบหากมีคนล่วงรู้รหัสผ่านของคุณ</translation>
 <translation id="7641148173327520642">ผู้ดูแลระบบได้กำหนดค่าให้ Google Chrome เปิด <ph name="ALTERNATIVE_BROWSER_NAME" /> เพื่อเข้าถึง <ph name="TARGET_URL_HOSTNAME" /></translation>
 <translation id="7651907282515937834">โลโก้ Chrome Enterprise</translation>
 <translation id="7747138024166251722">โปรแกรมติดตั้งสร้างไดเรกทอรีชั่วคราวไม่ได้ โปรดตรวจสอบพื้นที่ดิสก์ว่างและการอนุญาตให้ติดตั้งซอฟต์แวร์</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb
index 81faea12..374e0ae4 100644
--- a/chrome/app/resources/google_chrome_strings_uk.xtb
+++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -51,6 +51,9 @@
 <translation id="2094919256425865063">Усе одно вийти з Chrome?</translation>
 <translation id="2120620239521071941">З цього пристрою буде видалено стільки елементів: <ph name="ITEMS_COUNT" />. Щоб відновити дані пізніше, увійдіть в обліковий запис Chrome як <ph name="USER_EMAIL" />.</translation>
 <translation id="2123055963409958220">Допоможіть покращити Chrome, надсилаючи звіти про <ph name="BEGIN_LINK" />поточні налаштування<ph name="END_LINK" /></translation>
+<translation id="2128103434102193461">Щоб отримати докладнішу інформацію, перегляньте сторінку <ph name="LINK_BEGIN" />
+      Про ОС Chrome<ph name="LINK_END" /></translation>
+<translation id="2151406531797534936">Перезапустіть Chrome</translation>
 <translation id="216054706567564023">Установіть Chrome на телефоні. Ми надішлемо SMS на номер телефону для відновлення облікового запису.</translation>
 <translation id="2246246234298806438">Google Chrome не може відобразити попередній перегляд версії для друку, якщо немає вбудованого переглядача PDF.</translation>
 <translation id="2252923619938421629">Допоможіть покращити Google Chrome, повідомляючи поточні налаштування</translation>
@@ -219,6 +222,7 @@
 <translation id="7589360514048265910">На цей комп’ютер більше не надходитимуть оновлення Google Chrome, оскільки ОС Mac X 10.9 уже не підтримується.</translation>
 <translation id="7592736734348559088">Google Chrome не вдалося синхронізувати ваші дані, оскільки дані для входу в обліковий запис застаріли.</translation>
 <translation id="7626032353295482388">Вітаємо у Chrome!</translation>
+<translation id="7629695634924605473">Chrome повідомляє, коли ваші паролі зламують</translation>
 <translation id="7641148173327520642">Ваш системний адміністратор налаштував Google Chrome відкривати сторінку <ph name="TARGET_URL_HOSTNAME" /> в <ph name="ALTERNATIVE_BROWSER_NAME" />.</translation>
 <translation id="7651907282515937834">Логотип Chrome Enterprise</translation>
 <translation id="7747138024166251722">Програмі встановлення не вдалося створити тимчасовий каталог. Перевірте наявність вільного простору на диску та дозволу на встановлення програмного забезпечення.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-TW.xtb b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
index c8b9cbdd..ed8ca4f 100644
--- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -43,7 +43,7 @@
 <translation id="1873233029667955273">Google Chrome 並非你的預設瀏覽器</translation>
 <translation id="1874309113135274312">Google Chrome 測試版 (mDNS-In)</translation>
 <translation id="1877026089748256423">Chrome 版本過舊</translation>
-<translation id="1900795423379050516">如果這個頁面上未顯示你的設定,請檢查 <ph name="LINK_BEGIN" />
+<translation id="1900795423379050516">如果這個頁面上並未顯示你的設定,請檢查 <ph name="LINK_BEGIN" />
       Chrome 瀏覽器設定<ph name="LINK_END" /></translation>
 <translation id="1915828456209461693">有可用的 Chrome 更新,只要重新啟動 Chrome 即可套用。</translation>
 <translation id="1919130412786645364">允許登入 Chrome</translation>
diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc
index 1aa4640..b82b5c71 100644
--- a/chrome/browser/android/signin/signin_manager_android.cc
+++ b/chrome/browser/android/signin/signin_manager_android.cc
@@ -146,7 +146,8 @@
   java_signin_manager_ = Java_SigninManager_create(
       base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this),
       identity_manager_->LegacyGetAccountTrackerServiceJavaObject(),
-      identity_manager_->GetJavaObject());
+      identity_manager_->GetJavaObject(),
+      identity_manager_->GetIdentityMutatorJavaObject());
 }
 
 base::android::ScopedJavaLocalRef<jobject>
diff --git a/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc b/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc
index 0f47e0f..f20a245 100644
--- a/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc
+++ b/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/ui/browser_command_controller.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
@@ -292,7 +291,6 @@
   chrome::SetAutoAcceptPWAInstallConfirmationForTesting(true);
   browser()
       ->window()
-      ->GetOmniboxPageActionIconContainer()
       ->ExecutePageActionIconForTesting(PageActionIconType::kPwaInstall);
   manager->AwaitAppInstall();
   chrome::SetAutoAcceptPWAInstallConfirmationForTesting(false);
diff --git a/chrome/browser/browser_switcher/browser_switcher_service.cc b/chrome/browser/browser_switcher/browser_switcher_service.cc
index b398040..ce4f938 100644
--- a/chrome/browser/browser_switcher/browser_switcher_service.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_service.cc
@@ -230,12 +230,11 @@
 BrowserSwitcherService::~BrowserSwitcherService() = default;
 
 void BrowserSwitcherService::Init() {
+  LoadRulesFromPrefs();
   StartDownload(fetch_delay());
 }
 
 void BrowserSwitcherService::StartDownload(base::TimeDelta delay) {
-  LoadRulesFromPrefs();
-
   // This destroys the previous XmlDownloader, which cancels any scheduled
   // refresh operations.
   sitelist_downloader_ = std::make_unique<XmlDownloader>(
diff --git a/chrome/browser/browser_switcher/browser_switcher_service.h b/chrome/browser/browser_switcher/browser_switcher_service.h
index 81f23245..bac8b38 100644
--- a/chrome/browser/browser_switcher/browser_switcher_service.h
+++ b/chrome/browser/browser_switcher/browser_switcher_service.h
@@ -148,6 +148,8 @@
   // happens.
   virtual void LoadRulesFromPrefs();
 
+  void Init();
+
  protected:
   virtual void OnAllRulesetsParsed();
   virtual void OnBrowserSwitcherPrefsChanged(
@@ -163,8 +165,6 @@
   // events and trigger a re-download immediately.
   friend class ::BrowserSwitchHandler;
 
-  void Init();
-
   void OnExternalSitelistParsed(ParsedXml xml);
   void OnExternalGreylistParsed(ParsedXml xml);
 
diff --git a/chrome/browser/browser_switcher/browser_switcher_service_factory.cc b/chrome/browser/browser_switcher/browser_switcher_service_factory.cc
index 3c9be6b..7f649af 100644
--- a/chrome/browser/browser_switcher/browser_switcher_service_factory.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_service_factory.cc
@@ -50,7 +50,10 @@
 
 KeyedService* BrowserSwitcherServiceFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
-  return new BrowserSwitcherServiceImpl(Profile::FromBrowserContext(context));
+  auto* instance =
+      new BrowserSwitcherServiceImpl(Profile::FromBrowserContext(context));
+  instance->Init();
+  return instance;
 }
 
 content::BrowserContext* BrowserSwitcherServiceFactory::GetBrowserContextToUse(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 0cf0fca3..caddacda 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1925,6 +1925,10 @@
     "printing/history/print_job_database.h",
     "printing/history/print_job_database_impl.cc",
     "printing/history/print_job_database_impl.h",
+    "printing/history/print_job_history_service.cc",
+    "printing/history/print_job_history_service.h",
+    "printing/history/print_job_history_service_factory.cc",
+    "printing/history/print_job_history_service_factory.h",
     "printing/history/print_job_info_conversions.cc",
     "printing/history/print_job_info_conversions.h",
     "printing/ppd_provider_factory.cc",
@@ -2739,9 +2743,12 @@
     "printing/bulk_printers_calculator_unittest.cc",
     "printing/cups_printers_manager_unittest.cc",
     "printing/history/print_job_database_impl_unittest.cc",
+    "printing/history/print_job_history_service_unittest.cc",
     "printing/history/print_job_info_conversions_unittest.cc",
     "printing/history/test_print_job_database.cc",
     "printing/history/test_print_job_database.h",
+    "printing/history/test_print_job_history_service_observer.cc",
+    "printing/history/test_print_job_history_service_observer.h",
     "printing/ppd_resolution_state_unittest.cc",
     "printing/ppd_resolution_tracker_unittest.cc",
     "printing/print_servers_provider_unittest.cc",
@@ -2751,6 +2758,8 @@
     "printing/printers_sync_bridge_unittest.cc",
     "printing/specifics_translation_unittest.cc",
     "printing/synced_printers_manager_unittest.cc",
+    "printing/test_cups_print_job_manager.cc",
+    "printing/test_cups_print_job_manager.h",
     "printing/usb_printer_detector_unittest.cc",
     "printing/zeroconf_printer_detector_unittest.cc",
     "proxy_config_service_impl_unittest.cc",
diff --git a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
index 868d3a26..ec736215 100644
--- a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
+++ b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
@@ -906,7 +906,14 @@
   given_name_update->SetKey("sanity.check@example.com", base::Value("Anne"));
 }
 
-IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, DataIsRemoved) {
+// Disabled on ASan and LSAn builds due to a consistent failure. See
+// crbug.com/1004228
+#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER)
+#define MAYBE_DataIsRemoved DISABLED_DataIsRemoved
+#else
+#define MAYBE_DataIsRemoved DataIsRemoved
+#endif
+IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, MAYBE_DataIsRemoved) {
   // The device local account should have been removed.
   EXPECT_FALSE(g_browser_process->local_state()
                    ->GetDictionary("UserGivenName")
diff --git a/chrome/browser/chromeos/policy/heartbeat_scheduler.cc b/chrome/browser/chromeos/policy/heartbeat_scheduler.cc
index 9bcd2caf..ca56275 100644
--- a/chrome/browser/chromeos/policy/heartbeat_scheduler.cc
+++ b/chrome/browser/chromeos/policy/heartbeat_scheduler.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/location.h"
 #include "base/macros.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/time/time.h"
@@ -72,6 +73,9 @@
 const base::TimeDelta HeartbeatScheduler::kDefaultHeartbeatInterval =
     base::TimeDelta::FromMinutes(2);
 
+const char* const HeartbeatScheduler::kHeartbeatSignalHistogram =
+    "Enterprise.HeartbeatSignalSuccess";
+
 // Helper class used to manage GCM registration (handles retrying after
 // errors, etc).
 class HeartbeatRegistrationHelper {
@@ -394,6 +398,10 @@
   // heartbeat.
   DLOG_IF(ERROR, result != gcm::GCMClient::SUCCESS) <<
       "Error sending monitoring heartbeat: " << result;
+
+  UMA_HISTOGRAM_BOOLEAN(kHeartbeatSignalHistogram,
+                        result == gcm::GCMClient::SUCCESS);
+
   last_heartbeat_ = base::Time::NowFromSystemTime();
   ScheduleNextHeartbeat();
 }
diff --git a/chrome/browser/chromeos/policy/heartbeat_scheduler.h b/chrome/browser/chromeos/policy/heartbeat_scheduler.h
index a7a1a9c..7899971 100644
--- a/chrome/browser/chromeos/policy/heartbeat_scheduler.h
+++ b/chrome/browser/chromeos/policy/heartbeat_scheduler.h
@@ -41,6 +41,9 @@
   // Default interval for how often we send up a heartbeat.
   static const base::TimeDelta kDefaultHeartbeatInterval;
 
+  // UMA histogram name.
+  static const char* const kHeartbeatSignalHistogram;
+
   // Constructor. |cloud_policy_client| will be used to send registered GCM id
   // to DM server, and can be null. |driver| can be null for tests.
   HeartbeatScheduler(
diff --git a/chrome/browser/chromeos/policy/heartbeat_scheduler_unittest.cc b/chrome/browser/chromeos/policy/heartbeat_scheduler_unittest.cc
index 2853413f6..16115ac 100644
--- a/chrome/browser/chromeos/policy/heartbeat_scheduler_unittest.cc
+++ b/chrome/browser/chromeos/policy/heartbeat_scheduler_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "base/macros.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/test_simple_task_runner.h"
 #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h"
 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
@@ -171,6 +172,8 @@
 
   // The HeartbeatScheduler instance under test.
   policy::HeartbeatScheduler scheduler_;
+
+  base::HistogramTester histogram_tester_;
 };
 
 TEST_F(HeartbeatSchedulerTest, Basic) {
@@ -242,6 +245,8 @@
   EXPECT_EQ(1U, task_runner_->NumPendingTasks());
   task_runner_->RunPendingTasks();
   testing::Mock::VerifyAndClearExpectations(&gcm_driver_);
+  histogram_tester_.ExpectTotalCount(
+      policy::HeartbeatScheduler::kHeartbeatSignalHistogram, 0);
 }
 
 TEST_F(HeartbeatSchedulerTest, StoreResetAfterRegistration) {
@@ -310,6 +315,9 @@
   gcm_driver_.CompleteSend(
       kHeartbeatGCMAppID, message.id, gcm::GCMClient::SERVER_ERROR);
   EXPECT_EQ(1U, task_runner_->NumPendingTasks());
+  histogram_tester_.ExpectUniqueSample(
+      policy::HeartbeatScheduler::kHeartbeatSignalHistogram, /*failure*/ false,
+      /*amount*/ 1);
   CheckPendingTaskDelay(scheduler_.last_heartbeat(),
                         base::TimeDelta::FromMilliseconds(new_delay));
 }
@@ -333,6 +341,9 @@
   // Complete sending a message - we should queue up the next heartbeat.
   gcm_driver_.CompleteSend(
       kHeartbeatGCMAppID, message.id, gcm::GCMClient::SUCCESS);
+  histogram_tester_.ExpectUniqueSample(
+      policy::HeartbeatScheduler::kHeartbeatSignalHistogram, /*success*/ true,
+      /*amount*/ 1);
 
   // Should have a new heartbeat task posted.
   ASSERT_EQ(1U, task_runner_->NumPendingTasks());
diff --git a/chrome/browser/chromeos/printing/history/print_job_history_service.cc b/chrome/browser/chromeos/printing/history/print_job_history_service.cc
new file mode 100644
index 0000000..2e5bed80
--- /dev/null
+++ b/chrome/browser/chromeos/printing/history/print_job_history_service.cc
@@ -0,0 +1,79 @@
+// Copyright 2019 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/chromeos/printing/history/print_job_history_service.h"
+
+#include "base/bind_helpers.h"
+#include "base/guid.h"
+#include "base/memory/weak_ptr.h"
+#include "base/metrics/histogram_functions.h"
+#include "chrome/browser/chromeos/printing/cups_print_job.h"
+#include "chrome/browser/chromeos/printing/history/print_job_info_conversions.h"
+
+namespace chromeos {
+
+PrintJobHistoryService::PrintJobHistoryService(
+    std::unique_ptr<PrintJobDatabase> print_job_database,
+    CupsPrintJobManager* print_job_manager)
+    : print_job_database_(std::move(print_job_database)),
+      print_job_manager_(print_job_manager) {
+  DCHECK(print_job_manager_);
+  print_job_manager_->AddObserver(this);
+  print_job_database_->Initialize(base::DoNothing());
+}
+
+PrintJobHistoryService::~PrintJobHistoryService() {
+  DCHECK(print_job_manager_);
+  print_job_manager_->RemoveObserver(this);
+}
+
+void PrintJobHistoryService::GetPrintJobs(
+    PrintJobDatabase::GetPrintJobsCallback callback) {
+  print_job_database_->GetPrintJobs(std::move(callback));
+}
+
+void PrintJobHistoryService::AddObserver(
+    PrintJobHistoryService::Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void PrintJobHistoryService::RemoveObserver(
+    PrintJobHistoryService::Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+void PrintJobHistoryService::OnPrintJobDone(base::WeakPtr<CupsPrintJob> job) {
+  SavePrintJob(job);
+}
+
+void PrintJobHistoryService::OnPrintJobError(base::WeakPtr<CupsPrintJob> job) {
+  SavePrintJob(job);
+}
+
+void PrintJobHistoryService::OnPrintJobCancelled(
+    base::WeakPtr<CupsPrintJob> job) {
+  SavePrintJob(job);
+}
+
+void PrintJobHistoryService::SavePrintJob(base::WeakPtr<CupsPrintJob> job) {
+  if (!job)
+    return;
+  printing::proto::PrintJobInfo print_job_info =
+      CupsPrintJobToProto(*job, /*id=*/base::GenerateGUID(), base::Time::Now());
+  print_job_database_->SavePrintJob(
+      print_job_info, base::BindOnce(&PrintJobHistoryService::OnPrintJobSaved,
+                                     base::Unretained(this), print_job_info));
+}
+
+void PrintJobHistoryService::OnPrintJobSaved(
+    const printing::proto::PrintJobInfo& print_job_info,
+    bool success) {
+  base::UmaHistogramBoolean("Printing.CUPS.PrintJobDatabasePrintJobSaved",
+                            success);
+  for (auto& observer : observers_) {
+    observer.OnPrintJobFinished(print_job_info);
+  }
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/history/print_job_history_service.h b/chrome/browser/chromeos/printing/history/print_job_history_service.h
new file mode 100644
index 0000000..127b58f
--- /dev/null
+++ b/chrome/browser/chromeos/printing/history/print_job_history_service.h
@@ -0,0 +1,61 @@
+// Copyright 2019 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_CHROMEOS_PRINTING_HISTORY_PRINT_JOB_HISTORY_SERVICE_H_
+#define CHROME_BROWSER_CHROMEOS_PRINTING_HISTORY_PRINT_JOB_HISTORY_SERVICE_H_
+
+#include "base/macros.h"
+#include "base/observer_list.h"
+#include "chrome/browser/chromeos/printing/cups_print_job_manager.h"
+#include "chrome/browser/chromeos/printing/history/print_job_database.h"
+#include "components/keyed_service/core/keyed_service.h"
+
+namespace chromeos {
+
+class CupsPrintJobManager;
+
+// This service is responsible for maintaining print job history.
+// It observes CupsPrintJobManager events and uses PrintJobDatabase as
+// persistent storage for print job history.
+class PrintJobHistoryService : public KeyedService,
+                               public chromeos::CupsPrintJobManager::Observer {
+ public:
+  class Observer {
+   public:
+    virtual void OnPrintJobFinished(
+        const printing::proto::PrintJobInfo& print_job_info) = 0;
+  };
+
+  PrintJobHistoryService(std::unique_ptr<PrintJobDatabase> print_job_database,
+                         CupsPrintJobManager* print_job_manager);
+  ~PrintJobHistoryService() override;
+
+  // Retrieves all print jobs from the database.
+  void GetPrintJobs(PrintJobDatabase::GetPrintJobsCallback callback);
+
+  void AddObserver(PrintJobHistoryService::Observer* observer);
+  void RemoveObserver(PrintJobHistoryService::Observer* observer);
+
+ private:
+  // CupsPrintJobManager::Observer
+  void OnPrintJobDone(base::WeakPtr<CupsPrintJob> job) override;
+  void OnPrintJobError(base::WeakPtr<CupsPrintJob> job) override;
+  void OnPrintJobCancelled(base::WeakPtr<CupsPrintJob> job) override;
+
+  void SavePrintJob(base::WeakPtr<CupsPrintJob> job);
+
+  void OnPrintJobSaved(const printing::proto::PrintJobInfo& print_job_info,
+                       bool success);
+
+  std::unique_ptr<PrintJobDatabase> print_job_database_;
+  CupsPrintJobManager* print_job_manager_;
+
+  base::ObserverList<PrintJobHistoryService::Observer>::Unchecked observers_;
+
+  DISALLOW_COPY_AND_ASSIGN(PrintJobHistoryService);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_PRINTING_HISTORY_PRINT_JOB_HISTORY_SERVICE_H_
diff --git a/chrome/browser/chromeos/printing/history/print_job_history_service_factory.cc b/chrome/browser/chromeos/printing/history/print_job_history_service_factory.cc
new file mode 100644
index 0000000..b5a4205
--- /dev/null
+++ b/chrome/browser/chromeos/printing/history/print_job_history_service_factory.cc
@@ -0,0 +1,55 @@
+// Copyright 2019 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/chromeos/printing/history/print_job_history_service_factory.h"
+
+#include "chrome/browser/chromeos/printing/cups_print_job_manager_factory.h"
+#include "chrome/browser/chromeos/printing/history/print_job_database_impl.h"
+#include "chrome/browser/chromeos/printing/history/print_job_history_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "content/public/browser/storage_partition.h"
+
+namespace chromeos {
+
+// static
+PrintJobHistoryService* PrintJobHistoryServiceFactory::GetForBrowserContext(
+    content::BrowserContext* context) {
+  return static_cast<PrintJobHistoryService*>(
+      GetInstance()->GetServiceForBrowserContext(context, true));
+}
+
+// static
+PrintJobHistoryServiceFactory* PrintJobHistoryServiceFactory::GetInstance() {
+  return base::Singleton<PrintJobHistoryServiceFactory>::get();
+}
+
+PrintJobHistoryServiceFactory::PrintJobHistoryServiceFactory()
+    : BrowserContextKeyedServiceFactory(
+          "PrintJobHistoryService",
+          BrowserContextDependencyManager::GetInstance()) {
+  DependsOn(chromeos::CupsPrintJobManagerFactory::GetInstance());
+}
+
+PrintJobHistoryServiceFactory::~PrintJobHistoryServiceFactory() {}
+
+KeyedService* PrintJobHistoryServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  Profile* profile = Profile::FromBrowserContext(context);
+
+  leveldb_proto::ProtoDatabaseProvider* database_provider =
+      content::BrowserContext::GetDefaultStoragePartition(profile)
+          ->GetProtoDatabaseProvider();
+
+  std::unique_ptr<PrintJobDatabase> print_job_database =
+      std::make_unique<PrintJobDatabaseImpl>(database_provider,
+                                             profile->GetPath());
+  CupsPrintJobManager* print_job_manager =
+      chromeos::CupsPrintJobManagerFactory::GetForBrowserContext(profile);
+
+  return new PrintJobHistoryService(std::move(print_job_database),
+                                    print_job_manager);
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/history/print_job_history_service_factory.h b/chrome/browser/chromeos/printing/history/print_job_history_service_factory.h
new file mode 100644
index 0000000..474e259
--- /dev/null
+++ b/chrome/browser/chromeos/printing/history/print_job_history_service_factory.h
@@ -0,0 +1,46 @@
+// Copyright 2019 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_CHROMEOS_PRINTING_HISTORY_PRINT_JOB_HISTORY_SERVICE_FACTORY_H_
+#define CHROME_BROWSER_CHROMEOS_PRINTING_HISTORY_PRINT_JOB_HISTORY_SERVICE_FACTORY_H_
+
+#include "base/macros.h"
+#include "base/memory/singleton.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+namespace content {
+class BrowserContext;
+}
+
+namespace chromeos {
+
+class PrintJobHistoryService;
+
+// Singleton that owns all PrintJobHistoryServices and associates them with
+// Profiles.
+class PrintJobHistoryServiceFactory : public BrowserContextKeyedServiceFactory {
+ public:
+  // Returns the PrintJobHistoryService for |context|, creating it if it is not
+  // yet created.
+  static PrintJobHistoryService* GetForBrowserContext(
+      content::BrowserContext* context);
+
+  static PrintJobHistoryServiceFactory* GetInstance();
+
+ private:
+  friend struct base::DefaultSingletonTraits<PrintJobHistoryServiceFactory>;
+
+  PrintJobHistoryServiceFactory();
+  ~PrintJobHistoryServiceFactory() override;
+
+  // BrowserContextKeyedServiceFactory:
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+
+  DISALLOW_COPY_AND_ASSIGN(PrintJobHistoryServiceFactory);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_PRINTING_HISTORY_PRINT_JOB_HISTORY_SERVICE_FACTORY_H_
diff --git a/chrome/browser/chromeos/printing/history/print_job_history_service_unittest.cc b/chrome/browser/chromeos/printing/history/print_job_history_service_unittest.cc
new file mode 100644
index 0000000..aad75d22
--- /dev/null
+++ b/chrome/browser/chromeos/printing/history/print_job_history_service_unittest.cc
@@ -0,0 +1,111 @@
+// Copyright 2019 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/chromeos/printing/history/print_job_history_service.h"
+
+#include "chrome/browser/chromeos/printing/cups_print_job.h"
+#include "chrome/browser/chromeos/printing/history/print_job_info.pb.h"
+#include "chrome/browser/chromeos/printing/history/test_print_job_database.h"
+#include "chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.h"
+#include "chrome/browser/chromeos/printing/test_cups_print_job_manager.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "content/public/test/browser_task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+
+namespace {
+
+constexpr char kTitle[] = "title";
+
+const int kPagesNumber = 3;
+
+}  // namespace
+
+class PrintJobHistoryServiceTest : public ::testing::Test {
+ public:
+  PrintJobHistoryServiceTest() {}
+
+  void SetUp() override {
+    std::unique_ptr<PrintJobDatabase> print_job_database =
+        std::make_unique<TestPrintJobDatabase>();
+    print_job_manager_ = std::make_unique<TestCupsPrintJobManager>(&profile_);
+    print_job_history_service_ = std::make_unique<PrintJobHistoryService>(
+        std::move(print_job_database), print_job_manager_.get());
+  }
+
+  void TearDown() override {
+    print_job_history_service_.reset();
+    print_job_manager_.reset();
+  }
+
+  void OnPrintJobSaved(base::RepeatingClosure run_loop_closure, bool success) {
+    EXPECT_TRUE(success);
+    run_loop_closure.Run();
+  }
+
+  void OnPrintJobsRetrieved(
+      base::RepeatingClosure run_loop_closure,
+      bool success,
+      std::unique_ptr<std::vector<printing::proto::PrintJobInfo>> entries) {
+    EXPECT_TRUE(success);
+    entries_ = *entries;
+    run_loop_closure.Run();
+  }
+
+ protected:
+  content::BrowserTaskEnvironment task_environment_;
+  std::unique_ptr<TestCupsPrintJobManager> print_job_manager_;
+  std::unique_ptr<PrintJobHistoryService> print_job_history_service_;
+  std::vector<printing::proto::PrintJobInfo> entries_;
+
+ private:
+  TestingProfile profile_;
+};
+
+TEST_F(PrintJobHistoryServiceTest, SaveObservedCupsPrintJob) {
+  base::RunLoop save_print_job_run_loop;
+  TestPrintJobHistoryServiceObserver observer(
+      print_job_history_service_.get(), save_print_job_run_loop.QuitClosure());
+
+  std::unique_ptr<CupsPrintJob> print_job = std::make_unique<CupsPrintJob>(
+      chromeos::Printer(), /*job_id=*/0, kTitle, kPagesNumber,
+      ::printing::PrintJob::Source::PRINT_PREVIEW,
+      /*source_id=*/"", printing::proto::PrintSettings());
+  print_job_manager_->CreatePrintJob(print_job.get());
+  print_job_manager_->CancelPrintJob(print_job.get());
+  save_print_job_run_loop.Run();
+
+  base::RunLoop get_print_jobs_run_loop;
+  print_job_history_service_->GetPrintJobs(base::BindOnce(
+      &PrintJobHistoryServiceTest::OnPrintJobsRetrieved, base::Unretained(this),
+      get_print_jobs_run_loop.QuitClosure()));
+  get_print_jobs_run_loop.Run();
+
+  EXPECT_EQ(1u, entries_.size());
+  EXPECT_EQ(kTitle, entries_[0].title());
+  EXPECT_EQ(kPagesNumber, entries_[0].number_of_pages());
+  EXPECT_EQ(printing::proto::PrintJobInfo_PrintJobStatus_CANCELED,
+            entries_[0].status());
+}
+
+TEST_F(PrintJobHistoryServiceTest, ObserverTest) {
+  base::RunLoop run_loop;
+  TestPrintJobHistoryServiceObserver observer(print_job_history_service_.get(),
+                                              run_loop.QuitClosure());
+
+  std::unique_ptr<CupsPrintJob> print_job = std::make_unique<CupsPrintJob>(
+      chromeos::Printer(), /*job_id=*/0, kTitle, kPagesNumber,
+      ::printing::PrintJob::Source::PRINT_PREVIEW,
+      /*source_id=*/"", printing::proto::PrintSettings());
+  print_job_manager_->CreatePrintJob(print_job.get());
+  print_job_manager_->CancelPrintJob(print_job.get());
+  run_loop.Run();
+
+  EXPECT_EQ(1, observer.num_print_jobs());
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.cc b/chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.cc
new file mode 100644
index 0000000..a528f444
--- /dev/null
+++ b/chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.cc
@@ -0,0 +1,27 @@
+// Copyright 2019 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/chromeos/printing/history/test_print_job_history_service_observer.h"
+
+namespace chromeos {
+
+TestPrintJobHistoryServiceObserver::TestPrintJobHistoryServiceObserver(
+    PrintJobHistoryService* print_job_history_service,
+    base::RepeatingClosure run_loop_closure)
+    : print_job_history_service_(print_job_history_service),
+      run_loop_closure_(run_loop_closure) {
+  print_job_history_service_->AddObserver(this);
+}
+
+TestPrintJobHistoryServiceObserver::~TestPrintJobHistoryServiceObserver() {
+  print_job_history_service_->RemoveObserver(this);
+}
+
+void TestPrintJobHistoryServiceObserver::OnPrintJobFinished(
+    const printing::proto::PrintJobInfo& print_job_info) {
+  num_print_jobs_++;
+  run_loop_closure_.Run();
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.h b/chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.h
new file mode 100644
index 0000000..0a347f9
--- /dev/null
+++ b/chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.h
@@ -0,0 +1,38 @@
+// Copyright 2019 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_CHROMEOS_PRINTING_HISTORY_TEST_PRINT_JOB_HISTORY_SERVICE_OBSERVER_H_
+#define CHROME_BROWSER_CHROMEOS_PRINTING_HISTORY_TEST_PRINT_JOB_HISTORY_SERVICE_OBSERVER_H_
+
+#include "base/callback.h"
+#include "chrome/browser/chromeos/printing/history/print_job_history_service.h"
+
+namespace chromeos {
+
+// Observer that counts the number of times it has been called.
+class TestPrintJobHistoryServiceObserver
+    : public PrintJobHistoryService::Observer {
+ public:
+  TestPrintJobHistoryServiceObserver(
+      PrintJobHistoryService* print_job_history_service,
+      base::RepeatingClosure run_loop_closure);
+  ~TestPrintJobHistoryServiceObserver();
+
+  int num_print_jobs() { return num_print_jobs_; }
+
+ private:
+  // PrintJobHistoryService::Observer:
+  void OnPrintJobFinished(
+      const printing::proto::PrintJobInfo& print_job_info) override;
+
+  chromeos::PrintJobHistoryService* print_job_history_service_;
+  base::RepeatingClosure run_loop_closure_;
+
+  // The number of times the observer is called.
+  int num_print_jobs_ = 0;
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_PRINTING_HISTORY_TEST_PRINT_JOB_HISTORY_SERVICE_OBSERVER_H_
diff --git a/chrome/browser/chromeos/printing/test_cups_print_job_manager.cc b/chrome/browser/chromeos/printing/test_cups_print_job_manager.cc
new file mode 100644
index 0000000..dd60dfe
--- /dev/null
+++ b/chrome/browser/chromeos/printing/test_cups_print_job_manager.cc
@@ -0,0 +1,53 @@
+// Copyright 2019 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/chromeos/printing/test_cups_print_job_manager.h"
+
+#include "chrome/browser/chromeos/printing/cups_print_job.h"
+
+namespace chromeos {
+
+TestCupsPrintJobManager::TestCupsPrintJobManager(Profile* profile)
+    : CupsPrintJobManager(profile) {}
+
+TestCupsPrintJobManager::~TestCupsPrintJobManager() = default;
+
+void TestCupsPrintJobManager::CancelPrintJob(CupsPrintJob* job) {
+  job->set_state(CupsPrintJob::State::STATE_CANCELLED);
+  NotifyJobCanceled(job->GetWeakPtr());
+}
+
+bool TestCupsPrintJobManager::SuspendPrintJob(CupsPrintJob* job) {
+  job->set_state(CupsPrintJob::State::STATE_SUSPENDED);
+  NotifyJobSuspended(job->GetWeakPtr());
+  return true;
+}
+
+bool TestCupsPrintJobManager::ResumePrintJob(CupsPrintJob* job) {
+  job->set_state(CupsPrintJob::State::STATE_RESUMED);
+  NotifyJobResumed(job->GetWeakPtr());
+  return true;
+}
+
+void TestCupsPrintJobManager::CreatePrintJob(CupsPrintJob* job) {
+  job->set_state(CupsPrintJob::State::STATE_NONE);
+  NotifyJobCreated(job->GetWeakPtr());
+}
+
+void TestCupsPrintJobManager::StartPrintJob(CupsPrintJob* job) {
+  job->set_state(CupsPrintJob::State::STATE_STARTED);
+  NotifyJobStarted(job->GetWeakPtr());
+}
+
+void TestCupsPrintJobManager::FailPrintJob(CupsPrintJob* job) {
+  job->set_state(CupsPrintJob::State::STATE_FAILED);
+  NotifyJobFailed(job->GetWeakPtr());
+}
+
+void TestCupsPrintJobManager::CompletePrintJob(CupsPrintJob* job) {
+  job->set_state(CupsPrintJob::State::STATE_DOCUMENT_DONE);
+  NotifyJobDone(job->GetWeakPtr());
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/test_cups_print_job_manager.h b/chrome/browser/chromeos/printing/test_cups_print_job_manager.h
new file mode 100644
index 0000000..092df245
--- /dev/null
+++ b/chrome/browser/chromeos/printing/test_cups_print_job_manager.h
@@ -0,0 +1,35 @@
+// Copyright 2019 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_CHROMEOS_PRINTING_TEST_CUPS_PRINT_JOB_MANAGER_H_
+#define CHROME_BROWSER_CHROMEOS_PRINTING_TEST_CUPS_PRINT_JOB_MANAGER_H_
+
+#include "chrome/browser/chromeos/printing/cups_print_job_manager.h"
+
+class Profile;
+
+namespace chromeos {
+
+class TestCupsPrintJobManager : public CupsPrintJobManager {
+ public:
+  explicit TestCupsPrintJobManager(Profile* profile);
+  ~TestCupsPrintJobManager() override;
+
+  // CupsPrintJobManager:
+  void CancelPrintJob(CupsPrintJob* job) override;
+  bool SuspendPrintJob(CupsPrintJob* job) override;
+  bool ResumePrintJob(CupsPrintJob* job) override;
+
+  void CreatePrintJob(CupsPrintJob* job);
+  void StartPrintJob(CupsPrintJob* job);
+  void FailPrintJob(CupsPrintJob* job);
+  void CompletePrintJob(CupsPrintJob* job);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestCupsPrintJobManager);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_PRINTING_TEST_CUPS_PRINT_JOB_MANAGER_H_
diff --git a/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc b/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc
index b6058ec3..d2c7ace 100644
--- a/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc
+++ b/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc
@@ -31,7 +31,10 @@
 
   void SetUp() override {
     ASSERT_TRUE(profile_manager_.SetUp());
-    profile_ = profile_manager_.CreateTestingProfile(kProfile);
+    profile_ = profile_manager_.CreateTestingProfile(
+        kProfile, {}, base::UTF8ToUTF16(kProfile), 0, {},
+        IdentityTestEnvironmentProfileAdaptor::
+            GetIdentityTestEnvironmentFactories());
   }
 
   std::unique_ptr<em::ChromeUserProfileInfo> GenerateReport(
diff --git a/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc b/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
index 2a0832b..72e7569 100644
--- a/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
+++ b/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
@@ -383,8 +383,8 @@
       "fstinputlogic",
       base::FeatureList::IsEnabled(chromeos::features::kImeInputLogicFst)));
   features->AppendString(GenerateFeatureFlag(
-      "fstnonenglish", base::FeatureList::IsEnabled(
-                           chromeos::features::kImeInputLogicFstNonEnglish)));
+      "fstnonenglish",
+      base::FeatureList::IsEnabled(chromeos::features::kImeInputLogicFst)));
 
   results->Set("features", std::move(features));
 
diff --git a/chrome/browser/installable/installable_manager.cc b/chrome/browser/installable/installable_manager.cc
index 5aa9dfe..50acb74 100644
--- a/chrome/browser/installable/installable_manager.cc
+++ b/chrome/browser/installable/installable_manager.cc
@@ -598,6 +598,9 @@
   DCHECK(!worker_->fetched);
   DCHECK(!manifest().IsEmpty());
 
+  if (!service_worker_context_)
+    return;
+
   // Check to see if there is a service worker for the manifest's scope.
   service_worker_context_->CheckHasServiceWorker(
       manifest().scope,
diff --git a/chrome/browser/media/webrtc/webrtc_browsertest_base.cc b/chrome/browser/media/webrtc/webrtc_browsertest_base.cc
index 2d6da283..3affb26 100644
--- a/chrome/browser/media/webrtc/webrtc_browsertest_base.cc
+++ b/chrome/browser/media/webrtc/webrtc_browsertest_base.cc
@@ -358,6 +358,10 @@
   return result;
 }
 
+void WebRtcTestBase::ChangeToLegacyGetStats(content::WebContents* tab) const {
+  content::ExecuteScriptAsync(tab, "changeToLegacyGetStats()");
+}
+
 void WebRtcTestBase::SetupPeerconnectionWithLocalStream(
     content::WebContents* tab,
     const std::string& certificate_keygen_algorithm) const {
diff --git a/chrome/browser/media/webrtc/webrtc_browsertest_base.h b/chrome/browser/media/webrtc/webrtc_browsertest_base.h
index e86d2a8..e85f002 100644
--- a/chrome/browser/media/webrtc/webrtc_browsertest_base.h
+++ b/chrome/browser/media/webrtc/webrtc_browsertest_base.h
@@ -116,6 +116,10 @@
   std::string ExecuteJavascript(const std::string& javascript,
                                 content::WebContents* tab_contents) const;
 
+  // TODO(https://crbug.com/1004239): Remove this function as soon as browser
+  // tests stop relying on the legacy getStats() API.
+  void ChangeToLegacyGetStats(content::WebContents* tab) const;
+
   // Sets up a peer connection in the tab and adds the current local stream
   // (which you can prepare by calling one of the GetUserMedia* methods above).
   // Optionally, |certificate_keygen_algorithm| is JavaScript for an
diff --git a/chrome/browser/media/webrtc/webrtc_internals_perf_browsertest.cc b/chrome/browser/media/webrtc/webrtc_internals_perf_browsertest.cc
index b43b825..efc4093 100644
--- a/chrome/browser/media/webrtc/webrtc_internals_perf_browsertest.cc
+++ b/chrome/browser/media/webrtc/webrtc_internals_perf_browsertest.cc
@@ -107,6 +107,9 @@
     content::WebContents* webrtc_internals_tab =
         browser()->tab_strip_model()->GetActiveWebContents();
 
+    // TODO(https://crbug.com/1004239): Stop relying on the legacy getStats()
+    // API.
+    ChangeToLegacyGetStats(webrtc_internals_tab);
     test::SleepInJavascript(webrtc_internals_tab, duration_msec);
 
     return std::unique_ptr<base::DictionaryValue>(
diff --git a/chrome/browser/metrics/ukm_browsertest.cc b/chrome/browser/metrics/ukm_browsertest.cc
index a7b1c742..93a16971 100644
--- a/chrome/browser/metrics/ukm_browsertest.cc
+++ b/chrome/browser/metrics/ukm_browsertest.cc
@@ -1232,7 +1232,8 @@
 // Verify that sources kept alive in-memory will be discarded by UKM service in
 // one reporting cycle after the web contents are destroyed when the tab is
 // closed or when the user navigated away in the same tab.
-IN_PROC_BROWSER_TEST_P(UkmBrowserTest, EvictObsoleteSources) {
+// Disabled as per crbug.com/1004296.
+IN_PROC_BROWSER_TEST_P(UkmBrowserTest, DISABLED_EvictObsoleteSources) {
   MetricsConsentOverride metrics_consent(true);
   Profile* profile = ProfileManager::GetActiveUserProfile();
   std::unique_ptr<ProfileSyncServiceHarness> harness =
diff --git a/chrome/browser/previews/previews_browsertest.cc b/chrome/browser/previews/previews_browsertest.cc
index 3235ff7..9623d75 100644
--- a/chrome/browser/previews/previews_browsertest.cc
+++ b/chrome/browser/previews/previews_browsertest.cc
@@ -312,17 +312,12 @@
                          PreviewsNoScriptBrowserTest,
                          testing::Bool());
 
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
-#define DISABLE_ON_WIN_MAC_CHROMESOS(x) DISABLED_##x
-#else
-#define DISABLE_ON_WIN_MAC_CHROMESOS(x) x
-#endif
-
 // Loads a webpage that has both script and noscript tags and also requests
 // a script resource. Verifies that the noscript tag is evaluated and the
 // script resource is not loaded.
+// TODO(crbug.com/1004245): Fix and re-enable the test.
 IN_PROC_BROWSER_TEST_P(PreviewsNoScriptBrowserTest,
-                       DISABLE_ON_WIN_MAC_CHROMESOS(NoScriptPreviewsEnabled)) {
+                       DISABLED_NoScriptPreviewsEnabled) {
   GURL url = https_url();
 
   // Whitelist NoScript for https_hint_setup_url()'s' host.
@@ -340,9 +335,9 @@
                                      "Previews.PreviewShown.NoScript", 1);
 }
 
-IN_PROC_BROWSER_TEST_P(
-    PreviewsNoScriptBrowserTest,
-    DISABLE_ON_WIN_MAC_CHROMESOS(NoScriptPreviewsEnabledButHttpRequest)) {
+// TODO(crbug.com/1004245): Fix and re-enable the test.
+IN_PROC_BROWSER_TEST_P(PreviewsNoScriptBrowserTest,
+                       DISABLED_NoScriptPreviewsEnabledButHttpRequest) {
   GURL url = http_url();
 
   // Whitelist NoScript for http_hint_setup_url() host.
@@ -355,9 +350,10 @@
   EXPECT_FALSE(noscript_css_requested());
 }
 
-IN_PROC_BROWSER_TEST_P(PreviewsNoScriptBrowserTest,
-                       DISABLE_ON_WIN_MAC_CHROMESOS(
-                           NoScriptPreviewsEnabledButNoTransformDirective)) {
+// TODO(crbug.com/1004245): Fix and re-enable the test.
+IN_PROC_BROWSER_TEST_P(
+    PreviewsNoScriptBrowserTest,
+    DISABLED_NoScriptPreviewsEnabledButNoTransformDirective) {
   GURL url = https_no_transform_url();
 
   // Whitelist NoScript for https_hint_setup_url()'s' host.
@@ -374,9 +370,9 @@
       "Previews.CacheControlNoTransform.BlockedPreview", 5 /* NoScript */, 1);
 }
 
-IN_PROC_BROWSER_TEST_P(
-    PreviewsNoScriptBrowserTest,
-    DISABLE_ON_WIN_MAC_CHROMESOS(NoScriptPreviewsEnabledHttpRedirectToHttps)) {
+// TODO(crbug.com/1004245): Fix and re-enable the test.
+IN_PROC_BROWSER_TEST_P(PreviewsNoScriptBrowserTest,
+                       DISABLED_NoScriptPreviewsEnabledHttpRedirectToHttps) {
   GURL url = redirect_url();
 
   // Whitelist NoScript for http_hint_setup_url() host.
@@ -394,9 +390,9 @@
                                      "Previews.PreviewShown.NoScript", 1);
 }
 
-IN_PROC_BROWSER_TEST_P(
-    PreviewsNoScriptBrowserTest,
-    DISABLE_ON_WIN_MAC_CHROMESOS(NoScriptPreviewsRecordsOptOut)) {
+// TODO(crbug.com/1004245): Fix and re-enable the test.
+IN_PROC_BROWSER_TEST_P(PreviewsNoScriptBrowserTest,
+                       DISABLED_NoScriptPreviewsRecordsOptOut) {
   GURL url = redirect_url();
 
   // Whitelist NoScript for http_hint_setup_url()'s' host.
@@ -421,9 +417,9 @@
                                      1);
 }
 
-IN_PROC_BROWSER_TEST_P(
-    PreviewsNoScriptBrowserTest,
-    DISABLE_ON_WIN_MAC_CHROMESOS(NoScriptPreviewsEnabledByWhitelist)) {
+// TODO(crbug.com/1004245): Fix and re-enable the test.
+IN_PROC_BROWSER_TEST_P(PreviewsNoScriptBrowserTest,
+                       DISABLED_NoScriptPreviewsEnabledByWhitelist) {
   GURL url = https_url();
 
   // Whitelist NoScript for https_hint_setup_url()'s' host.
@@ -436,9 +432,9 @@
   EXPECT_FALSE(noscript_js_requested());
 }
 
-IN_PROC_BROWSER_TEST_P(
-    PreviewsNoScriptBrowserTest,
-    DISABLE_ON_WIN_MAC_CHROMESOS(NoScriptPreviewsNotEnabledByWhitelist)) {
+// TODO(crbug.com/1004245): Fix and re-enable the test.
+IN_PROC_BROWSER_TEST_P(PreviewsNoScriptBrowserTest,
+                       DISABLED_NoScriptPreviewsNotEnabledByWhitelist) {
   GURL url = https_url();
 
   // Whitelist random site for NoScript.
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index 24354d80..76c2d56 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -117,6 +117,7 @@
 #include "chrome/browser/chromeos/printing/cups_print_job_manager_factory.h"
 #include "chrome/browser/chromeos/printing/cups_printers_manager_factory.h"
 #include "chrome/browser/chromeos/printing/cups_proxy_service_manager_factory.h"
+#include "chrome/browser/chromeos/printing/history/print_job_history_service_factory.h"
 #include "chrome/browser/chromeos/printing/synced_printers_manager_factory.h"
 #include "chrome/browser/chromeos/smb_client/smb_service_factory.h"
 #include "chrome/browser/chromeos/tether/tether_service_factory.h"
@@ -271,6 +272,7 @@
   chromeos::AccountManagerMigratorFactory::GetInstance();
   chromeos::CupsPrintJobManagerFactory::GetInstance();
   chromeos::CupsPrintersManagerFactory::GetInstance();
+  chromeos::PrintJobHistoryServiceFactory::GetInstance();
   chromeos::SyncedPrintersManagerFactory::GetInstance();
   chromeos::smb_client::SmbServiceFactory::GetInstance();
   crostini::CrostiniRegistryServiceFactory::GetInstance();
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb
index 6ba73f4..5fed6c41 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">يمكنك التقاط الصور وتسجيل الفيديوهات باستخدام الكاميرا.</translation>
 <translation id="2549985041256363841">بدء التسجيل</translation>
 <translation id="2599796128805996109">الكاميرا الخلفية</translation>
+<translation id="2912439424121107408">الوضع المختصّ غير متاح على هذا الجهاز</translation>
 <translation id="2968794441791257519">سيتم نقل الصور والفيديوهات الملتقَطة بالكاميرا إلى مجلد "التنزيلات". ويمكنك الوصول إليها من خلال "الملفات".
 
         ستتمكن التطبيقات المزوّدة بأذونات مساحة التخزين من الوصول إلى صورك وفيديوهاتك.</translation>
@@ -41,10 +42,12 @@
         يُرجى التحقُّق من اتصال الكاميرا بشكلٍ صحيح.</translation>
 <translation id="5152121255775685072">الانتقال إلى المعرض</translation>
 <translation id="5671277269877808209">وضع المربّع</translation>
+<translation id="5775960006311140197">الوضع المختصّ</translation>
 <translation id="5869546221129391014">شبكة</translation>
 <translation id="6040143037577758943">إغلاق</translation>
 <translation id="6073451960410192870">إيقاف التسجيل</translation>
 <translation id="6165508094623778733">مزيد من المعلومات</translation>
+<translation id="6197807149213783179">حفظ البيانات الوصفية</translation>
 <translation id="6233780560267770709">3 × 3</translation>
 <translation id="6243827288366940320">النسبة الذهبية</translation>
 <translation id="6248749904681914629">الكاميرا الخارجية</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8428213095426709021">الإعدادات</translation>
 <translation id="8687491812650032292">دقة عالية <ph name="HEIGHT" />بكسل (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">معاينة البيانات الوصفية</translation>
 <translation id="8815966864175525708">التبديل لالتقاط صورة أشخاص</translation>
 <translation id="8870695351537079478">يتعذّر بدء التسجيل</translation>
 <translation id="9045155556724273246">10 ثوانٍ</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_bg.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_bg.xtb
index 5cc86c94..f994c0e 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_bg.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_bg.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Правете снимки и записвайте видеоклипове с камерата си.</translation>
 <translation id="2549985041256363841">Старт на записа</translation>
 <translation id="2599796128805996109">Задна камера</translation>
+<translation id="2912439424121107408">Експертният режим не се поддържа на това устройство</translation>
 <translation id="2968794441791257519">Направените с камерата снимки и видеоклипове ще бъдат преместени в папката „Изтегляния“. Можете да осъществите достъп до тях от „Файлове“.
 
 Приложенията с разрешения за хранилището ще имат достъп до снимките и видеоклиповете ви.</translation>
@@ -41,10 +42,12 @@
         Моля, проверете дали камерата е свързана правилно.</translation>
 <translation id="5152121255775685072">Към галерията</translation>
 <translation id="5671277269877808209">Квадрат</translation>
+<translation id="5775960006311140197">Експертен режим</translation>
 <translation id="5869546221129391014">Таблица</translation>
 <translation id="6040143037577758943">Затваряне</translation>
 <translation id="6073451960410192870">Спиране на записа</translation>
 <translation id="6165508094623778733">Научете повече</translation>
+<translation id="6197807149213783179">Запазване на метаданните</translation>
 <translation id="6233780560267770709">3 на 3</translation>
 <translation id="6243827288366940320">Златно сечение</translation>
 <translation id="6248749904681914629">Външна камера</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Изтриване</translation>
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8687491812650032292">HD при <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Преглед на метаданните</translation>
 <translation id="8815966864175525708">Превключвател за правене на вертикална снимка</translation>
 <translation id="8870695351537079478">Записването не може да се стартира</translation>
 <translation id="9045155556724273246">10 секунди</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ca.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ca.xtb
index c257631..d956c33 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ca.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ca.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Fes fotos i grava vídeos amb la càmera.</translation>
 <translation id="2549985041256363841">Comença a gravar</translation>
 <translation id="2599796128805996109">Càmera posterior</translation>
+<translation id="2912439424121107408">El mode expert no s'admet en aquest dispositiu</translation>
 <translation id="2968794441791257519">Les fotos i els vídeos que es facin amb la càmera es mouran a la carpeta Baixades. Pots accedir-hi des de Fitxers.
 
         Les aplicacions amb permisos d'emmagatzematge tindran accés a les fotos i als vídeos.</translation>
@@ -41,10 +42,12 @@
         Comprova que estigui ben connectada.</translation>
 <translation id="5152121255775685072">Ves a la galeria</translation>
 <translation id="5671277269877808209">Quadrat</translation>
+<translation id="5775960006311140197">Mode expert</translation>
 <translation id="5869546221129391014">Quadrícula</translation>
 <translation id="6040143037577758943">Tanca</translation>
 <translation id="6073451960410192870">Atura la gravació</translation>
 <translation id="6165508094623778733">Més informació</translation>
+<translation id="6197807149213783179">Desa les metadades</translation>
 <translation id="6233780560267770709">3 per 3</translation>
 <translation id="6243827288366940320">Proporció àuria</translation>
 <translation id="6248749904681914629">Càmera externa</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Suprimeix</translation>
 <translation id="8428213095426709021">Configuració</translation>
 <translation id="8687491812650032292">HD de <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Previsualitza les metadades</translation>
 <translation id="8815966864175525708">Botó per fer una foto vertical</translation>
 <translation id="8870695351537079478">No es pot iniciar la gravació</translation>
 <translation id="9045155556724273246">10 segons</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_cs.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_cs.xtb
index a5c5ddb..790b31a 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_cs.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_cs.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Foťte a nahrávejte videa pomocí fotoaparátu.</translation>
 <translation id="2549985041256363841">Zahájit nahrávání</translation>
 <translation id="2599796128805996109">Zadní fotoaparát</translation>
+<translation id="2912439424121107408">Režim pro experty na tomto zařízení není podporován</translation>
 <translation id="2968794441791257519">Fotky a videa pořízená fotoaparátem se přesunou do složky stažených souborů. Najdete je v aplikaci Soubory.
 
         K vašim fotkám a videím budou mít přístup aplikace s oprávněním k úložišti.</translation>
@@ -41,10 +42,12 @@
         Zkontrolujte, zda je fotoaparát správně připojen.</translation>
 <translation id="5152121255775685072">Přejít do galerie</translation>
 <translation id="5671277269877808209">Čtverec</translation>
+<translation id="5775960006311140197">Režim pro experty</translation>
 <translation id="5869546221129391014">Mřížka</translation>
 <translation id="6040143037577758943">Zavřít</translation>
 <translation id="6073451960410192870">Zastavit nahrávání</translation>
 <translation id="6165508094623778733">Další informace</translation>
+<translation id="6197807149213783179">Uložit metadata</translation>
 <translation id="6233780560267770709">3 krát 3</translation>
 <translation id="6243827288366940320">Zlatý řez</translation>
 <translation id="6248749904681914629">Externí fotoaparát</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Smazat</translation>
 <translation id="8428213095426709021">Nastavení</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" /> × <ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Zobrazit náhled metadat</translation>
 <translation id="8815966864175525708">Přepnout na pořízení portrétové fotky</translation>
 <translation id="8870695351537079478">Nahrávání se nepodařilo zahájit</translation>
 <translation id="9045155556724273246">10 sekund</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_da.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_da.xtb
index 11261b1..fc2a276a 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_da.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_da.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Tag billeder, og optag videoer med dit kamera.</translation>
 <translation id="2549985041256363841">Start optagelse</translation>
 <translation id="2599796128805996109">Bagsidekamera</translation>
+<translation id="2912439424121107408">Eksperttilstand understøttes ikke på denne enhed</translation>
 <translation id="2968794441791257519">Billeder og videoer, der er taget med kameraet, flyttes til mappen Downloads. Du kan få adgang til dem i Filer.
 
         Apps med lagertilladelser får adgang til dine billeder og videoer.</translation>
@@ -41,10 +42,12 @@
         Tjek, om kameraet er tilsluttet korrekt.</translation>
 <translation id="5152121255775685072">Gå til galleri</translation>
 <translation id="5671277269877808209">Kvadrat</translation>
+<translation id="5775960006311140197">Eksperttilstand</translation>
 <translation id="5869546221129391014">Gitter</translation>
 <translation id="6040143037577758943">Luk</translation>
 <translation id="6073451960410192870">Stop optagelse</translation>
 <translation id="6165508094623778733">Flere oplysninger</translation>
+<translation id="6197807149213783179">Gem metadata</translation>
 <translation id="6233780560267770709">3 gange 3</translation>
 <translation id="6243827288366940320">Det gyldne snit</translation>
 <translation id="6248749904681914629">Eksternt kamera</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Slet</translation>
 <translation id="8428213095426709021">Indstillinger</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Se forhåndsvisning af metadata</translation>
 <translation id="8815966864175525708">Skift for at tage et billede i stående format</translation>
 <translation id="8870695351537079478">Det er ikke muligt at starte en optagelse</translation>
 <translation id="9045155556724273246">10 sekunder</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_de.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_de.xtb
index 6bc93bb6..e7cc5d6a 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_de.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_de.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Sie können Fotos und Videos mit Ihrer Kamera aufnehmen.</translation>
 <translation id="2549985041256363841">Aufnahme starten</translation>
 <translation id="2599796128805996109">Kamera auf der Rückseite</translation>
+<translation id="2912439424121107408">Einstellungen für Fortgeschrittene werden auf diesem Gerät nicht unterstützt</translation>
 <translation id="2968794441791257519">Mit der Kamera aufgenommene Fotos und Videos werden in den Ordner "Downloads" verschoben. Sie können sie in der App "Dateien" ansehen.
 
         Apps mit Speicherberechtigungen haben Zugriff auf Ihre Fotos und Videos.</translation>
@@ -41,10 +42,12 @@
         Bitte überprüfen Sie, ob die Kamera richtig verbunden ist.</translation>
 <translation id="5152121255775685072">Zur Galerie</translation>
 <translation id="5671277269877808209">Quadrat</translation>
+<translation id="5775960006311140197">Einstellungen für Fortgeschrittene</translation>
 <translation id="5869546221129391014">Raster</translation>
 <translation id="6040143037577758943">Schließen</translation>
 <translation id="6073451960410192870">Aufnahme beenden</translation>
 <translation id="6165508094623778733">Weitere Informationen</translation>
+<translation id="6197807149213783179">Metadaten speichern</translation>
 <translation id="6233780560267770709">3 mal 3</translation>
 <translation id="6243827288366940320">Goldener Schnitt</translation>
 <translation id="6248749904681914629">Externe Kamera</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Löschen</translation>
 <translation id="8428213095426709021">Einstellungen</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Vorschau der Metadaten anzeigen</translation>
 <translation id="8815966864175525708">Zum Modus für Hochformat-Fotos wechseln</translation>
 <translation id="8870695351537079478">Videoaufnahme konnte nicht gestartet werden</translation>
 <translation id="9045155556724273246">10 Sekunden</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_el.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_el.xtb
index 27764aaa..353a9a9 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_el.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_el.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Τραβήξτε φωτογραφίες και βίντεο με την κάμερά σας.</translation>
 <translation id="2549985041256363841">Έναρξη εγγραφής</translation>
 <translation id="2599796128805996109">Πίσω κάμερα</translation>
+<translation id="2912439424121107408">Η λειτουργία Expert δεν υποστηρίζεται σε αυτήν τη συσκευή.</translation>
 <translation id="2968794441791257519">Οι φωτογραφίες και τα βίντεο που λήφθηκαν με την κάμερα θα μετακινηθούν στον φάκελο "Λήψεις". Μπορείτε να αποκτήσετε πρόσβαση σε αυτά στα Αρχεία.
 
         Οι εφαρμογές με άδειες αποθηκευτικού χώρου θα έχουν πρόσβαση στις φωτογραφίες και τα βίντεό σας.</translation>
@@ -41,10 +42,12 @@
         Ελέγξτε εάν η κάμερα έχει συνδεθεί σωστά.</translation>
 <translation id="5152121255775685072">Μετάβαση στο gallery</translation>
 <translation id="5671277269877808209">Τετράγωνο</translation>
+<translation id="5775960006311140197">Λειτουργία Expert</translation>
 <translation id="5869546221129391014">Πλέγμα</translation>
 <translation id="6040143037577758943">Κλείσιμο</translation>
 <translation id="6073451960410192870">Διακοπή εγγραφής</translation>
 <translation id="6165508094623778733">Μάθετε περισσότερα</translation>
+<translation id="6197807149213783179">Αποθήκευση μεταδεδομένων</translation>
 <translation id="6233780560267770709">3 επί 3</translation>
 <translation id="6243827288366940320">Ιδανικός λόγος διαστάσεων</translation>
 <translation id="6248749904681914629">Εξωτερική κάμερα</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Διαγραφή</translation>
 <translation id="8428213095426709021">Ρυθμίσεις</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Προεπισκόπηση μεταδεδομένων</translation>
 <translation id="8815966864175525708">Μετάβαση στη λειτουργία λήψης φωτογραφίας πορτραίτου</translation>
 <translation id="8870695351537079478">Δεν είναι δυνατή η έναρξη της εγγραφής</translation>
 <translation id="9045155556724273246">10 δευτερόλεπτα</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es-419.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es-419.xtb
index ffa2baf..a4f26ca5 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es-419.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es-419.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Toma fotos y graba videos con la cámara.</translation>
 <translation id="2549985041256363841">Comenzar grabación</translation>
 <translation id="2599796128805996109">Cámara posterior</translation>
+<translation id="2912439424121107408">Este dispositivo no admite el modo experto</translation>
 <translation id="2968794441791257519">Las fotos y los videos que tomes con la cámara se moverán a la carpeta "Descargas", que puedes abrir con la app de Archivos.
 
 Las apps que tengan permiso de almacenamiento podrán acceder a tus fotos y videos.</translation>
@@ -41,10 +42,12 @@
         Asegúrate de que esté conectada de forma correcta.</translation>
 <translation id="5152121255775685072">Ir a la galería</translation>
 <translation id="5671277269877808209">Cuadrado</translation>
+<translation id="5775960006311140197">Modo experto</translation>
 <translation id="5869546221129391014">Cuadrícula</translation>
 <translation id="6040143037577758943">Cerrar</translation>
 <translation id="6073451960410192870">Detener grabación</translation>
 <translation id="6165508094623778733">Más información</translation>
+<translation id="6197807149213783179">Guardar metadatos</translation>
 <translation id="6233780560267770709">3 por 3</translation>
 <translation id="6243827288366940320">Proporción áurea</translation>
 <translation id="6248749904681914629">Cámara externa</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Borrar</translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" /> p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Obtener vista previa de metadatos</translation>
 <translation id="8815966864175525708">Cambiar al modo vertical para tomar fotos</translation>
 <translation id="8870695351537079478">No es posible comenzar a grabar</translation>
 <translation id="9045155556724273246">10 segundos</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es.xtb
index e5235553..e4b2670 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_es.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Haz fotos y graba vídeos con la cámara.</translation>
 <translation id="2549985041256363841">Iniciar grabación</translation>
 <translation id="2599796128805996109">Cámara trasera</translation>
+<translation id="2912439424121107408">El modo experto no está disponible en este dispositivo</translation>
 <translation id="2968794441791257519">Las fotos y los vídeos hechos con la cámara se moverán a la carpeta Descargas. Podrás acceder a ellos con la aplicación Archivos.
 
         Las aplicaciones con permiso de almacenamiento podrán acceder a tus fotos y vídeos.</translation>
@@ -41,10 +42,12 @@
         Comprueba si está conectada correctamente.</translation>
 <translation id="5152121255775685072">Ir a la galería</translation>
 <translation id="5671277269877808209">Cuadrado</translation>
+<translation id="5775960006311140197">Modo experto</translation>
 <translation id="5869546221129391014">Cuadrícula</translation>
 <translation id="6040143037577758943">Cerrar</translation>
 <translation id="6073451960410192870">Detener grabación</translation>
 <translation id="6165508094623778733">Más información</translation>
+<translation id="6197807149213783179">Guardar metadatos</translation>
 <translation id="6233780560267770709">Tres por tres</translation>
 <translation id="6243827288366940320">Proporción áurea</translation>
 <translation id="6248749904681914629">Cámara externa</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Vista previa de metadatos</translation>
 <translation id="8815966864175525708">Cambiar para hacer una foto vertical</translation>
 <translation id="8870695351537079478">No se puede iniciar la grabación</translation>
 <translation id="9045155556724273246">10 segundos</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_et.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_et.xtb
index 8c9c4f8f..4979367 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_et.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_et.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Jäädvustage oma kaameraga fotosid ja salvestage videoid.</translation>
 <translation id="2549985041256363841">Alusta salvestamist</translation>
 <translation id="2599796128805996109">Tagakaamera</translation>
+<translation id="2912439424121107408">Ekspertrežiimi selles seadmes ei toetata</translation>
 <translation id="2968794441791257519">Kaameraga tehtud fotod ja videod teisaldatakse kausta Allalaadimised. Pääsete neile juurde jaotises Failid.
 
 Salvestusruumi kasutuse lubadega rakendustel on juurdepääs teie fotodele ja videotele.</translation>
@@ -41,10 +42,12 @@
         Kontrollige, kas kaamera on korralikult ühendatud.</translation>
 <translation id="5152121255775685072">Ava galerii</translation>
 <translation id="5671277269877808209">Ruut</translation>
+<translation id="5775960006311140197">Ekspertrežiim</translation>
 <translation id="5869546221129391014">Ruudustik</translation>
 <translation id="6040143037577758943">Sulge</translation>
 <translation id="6073451960410192870">Peata salvestamine</translation>
 <translation id="6165508094623778733">Lisateave</translation>
+<translation id="6197807149213783179">Salvesta metaandmed</translation>
 <translation id="6233780560267770709">3 korda 3</translation>
 <translation id="6243827288366940320">Kuldlõige</translation>
 <translation id="6248749904681914629">Väline kaamera</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Kustuta</translation>
 <translation id="8428213095426709021">Seaded</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" /> : <ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Metaandmete eelvaade</translation>
 <translation id="8815966864175525708">Vaheta vertikaalpaigutuses foto jäädvustamiseks</translation>
 <translation id="8870695351537079478">Salvestamise alustamine ebaõnnestus</translation>
 <translation id="9045155556724273246">10 sekundit</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb
index da370ae..90d232f9 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">با دوربینتان عکس بگیرید و فیلم‌برداری کنید.</translation>
 <translation id="2549985041256363841">شروع ضبط</translation>
 <translation id="2599796128805996109">دوربین پشت</translation>
+<translation id="2912439424121107408">«حالت کارشناس» در این دستگاه پشتیبانی نمی‌شود</translation>
 <translation id="2968794441791257519">‏عکس‌ها و ویدیوهایی که با دوربین گرفته شده است، به پوشه «بارگیری‌ها» منتقل خواهد شد. می‌توانید در Files به آن‌ها دسترسی داشته باشید.
 
         برنامه‌هایی که مجوز فضای ذخیره‌سازی دارند، به عکس‌ها و ویدیوهایتان دسترسی خواهند داشت.</translation>
@@ -41,10 +42,12 @@
         مطمئن شوید دوربین درست وصل شده باشد.</translation>
 <translation id="5152121255775685072">رفتن به گالری</translation>
 <translation id="5671277269877808209">مربع</translation>
+<translation id="5775960006311140197">حالت کارشناس</translation>
 <translation id="5869546221129391014">جدولی</translation>
 <translation id="6040143037577758943">بستن</translation>
 <translation id="6073451960410192870">توقف ضبط</translation>
 <translation id="6165508094623778733">بیشتر بدانید</translation>
+<translation id="6197807149213783179">ذخیره فراداده</translation>
 <translation id="6233780560267770709">۳ در ۳</translation>
 <translation id="6243827288366940320">نسبت طلایی</translation>
 <translation id="6248749904681914629">دوربین خارجی</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8428213095426709021">تنظیمات</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">پیش‌نمایش فراداده</translation>
 <translation id="8815966864175525708">تغییر وضعیت به گرفتن عکس چهره</translation>
 <translation id="8870695351537079478">شروع ضبط انجام نشد</translation>
 <translation id="9045155556724273246">۱۰ ثانیه</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fi.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fi.xtb
index 852fce0..e744edbc 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fi.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fi.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Ota kuvia ja kuvaa videoita kameralla.</translation>
 <translation id="2549985041256363841">Aloita tallennus</translation>
 <translation id="2599796128805996109">Takakamera</translation>
+<translation id="2912439424121107408">Asiantuntija-tilaa ei tueta tällä laitteella.</translation>
 <translation id="2968794441791257519">Kameralla otetut kuvat ja videot siirretään Lataukset-kansioon. Voit käyttää niitä avaamalla Tiedostot.
 
         Jos sovelluksella on tallennustilan käyttöoikeus, se voi käyttää kuvia ja videoita.</translation>
@@ -41,10 +42,12 @@
         Tarkista, onko kamera yhdistetty oikein.</translation>
 <translation id="5152121255775685072">Siirry galleriaan</translation>
 <translation id="5671277269877808209">Neliö</translation>
+<translation id="5775960006311140197">Asiantuntija-tila</translation>
 <translation id="5869546221129391014">Ruudukko</translation>
 <translation id="6040143037577758943">Sulje</translation>
 <translation id="6073451960410192870">Lopeta tallennus</translation>
 <translation id="6165508094623778733">Lisätietoja</translation>
+<translation id="6197807149213783179">Tallenna sisällönkuvaustiedot</translation>
 <translation id="6233780560267770709">3x3</translation>
 <translation id="6243827288366940320">Kultainen leikkaus</translation>
 <translation id="6248749904681914629">Ulkoinen kamera</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Poista</translation>
 <translation id="8428213095426709021">Asetukset</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Esikatsele sisällönkuvaustiedot</translation>
 <translation id="8815966864175525708">Vaihda muotokuvatilaan</translation>
 <translation id="8870695351537079478">Tallennuksen aloittaminen epäonnistui</translation>
 <translation id="9045155556724273246">10 sekuntia</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fr.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fr.xtb
index 1d447b1..9c633ec 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fr.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fr.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Prenez des photos et enregistrez des vidéos avec votre appareil photo.</translation>
 <translation id="2549985041256363841">Démarrer l'enregistrement</translation>
 <translation id="2599796128805996109">Caméra arrière</translation>
+<translation id="2912439424121107408">Le mode Expert n'est pas compatible avec cet appareil</translation>
 <translation id="2968794441791257519">Les photos et les vidéos prises avec l'appareil photo seront déplacées vers le dossier "Téléchargements". Vous pouvez y accéder via l'application Fichiers.
 
         Les applications disposant d'autorisations d'accès à l'espace de stockage pourront accéder à vos photos et vidéos.</translation>
@@ -41,10 +42,12 @@
         Vérifiez qu'il est bien connecté.</translation>
 <translation id="5152121255775685072">Accéder à la galerie</translation>
 <translation id="5671277269877808209">Carré</translation>
+<translation id="5775960006311140197">Mode Expert</translation>
 <translation id="5869546221129391014">Grille</translation>
 <translation id="6040143037577758943">Fermer</translation>
 <translation id="6073451960410192870">Arrêter l'enregistrement</translation>
 <translation id="6165508094623778733">En savoir plus</translation>
+<translation id="6197807149213783179">Enregistrer les métadonnées</translation>
 <translation id="6233780560267770709">3 par 3</translation>
 <translation id="6243827288366940320">Ratio optimal</translation>
 <translation id="6248749904681914629">Caméra externe</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Supprimer</translation>
 <translation id="8428213095426709021">Paramètres</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Prévisualiser les métadonnées</translation>
 <translation id="8815966864175525708">Bouton permettant de prendre une photo en mode portrait</translation>
 <translation id="8870695351537079478">Impossible de démarrer l'enregistrement</translation>
 <translation id="9045155556724273246">10 secondes</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb
index ee360b4..02e2f32 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Snimajte fotografije i videozapise svojim fotoaparatom.</translation>
 <translation id="2549985041256363841">Početak snimanja</translation>
 <translation id="2599796128805996109">Stražnji fotoaparat</translation>
+<translation id="2912439424121107408">Stručni način rada nije podržan na ovom uređaju</translation>
 <translation id="2968794441791257519">Fotografije i videozapisi snimljeni fotoaparatom premjestit će se u mapu Preuzimanja. Možete im pristupiti u Datotekama.
 
         Aplikacije s dopuštenjima za pohranu imat će pristup vašim fotografijama i videozapisima.</translation>
@@ -41,10 +42,12 @@
         Provjerite je li fotoaparat pravilno povezan.</translation>
 <translation id="5152121255775685072">Otvori galeriju</translation>
 <translation id="5671277269877808209">Kvadrat</translation>
+<translation id="5775960006311140197">Stručni način rada</translation>
 <translation id="5869546221129391014">Rešetka</translation>
 <translation id="6040143037577758943">Zatvori</translation>
 <translation id="6073451960410192870">Zaustavi snimanje</translation>
 <translation id="6165508094623778733">Saznajte više</translation>
+<translation id="6197807149213783179">Spremi metapodatke</translation>
 <translation id="6233780560267770709">Tri puta tri</translation>
 <translation id="6243827288366940320">Zlatni rez</translation>
 <translation id="6248749904681914629">Vanjski fotoaparat</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8428213095426709021">Postavke</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Pregled metapodataka</translation>
 <translation id="8815966864175525708">Prijeđi na snimanje portretne fotografije</translation>
 <translation id="8870695351537079478">Pokretanje snimanja nije uspjelo</translation>
 <translation id="9045155556724273246">Deset sekundi</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hu.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hu.xtb
index f321e87..1228791 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hu.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hu.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Fotókat és videókat készíthet a kamerával.</translation>
 <translation id="2549985041256363841">Felvétel megkezdése</translation>
 <translation id="2599796128805996109">Hátsó kamera</translation>
+<translation id="2912439424121107408">A szakértői mód nem támogatott ezen az eszközön</translation>
 <translation id="2968794441791257519">A kamerával készített fotók és videók a Letöltések mappába kerülnek. A Fájlok alkalmazásban férhet hozzájuk.
 
         A tárhelyengedéllyel rendelkező alkalmazások hozzáférhetnek a fotókhoz és a videókhoz.</translation>
@@ -41,10 +42,12 @@
         Ellenőrizze, hogy a kamera megfelelően van-e csatlakoztatva.</translation>
 <translation id="5152121255775685072">Ugrás a galériába</translation>
 <translation id="5671277269877808209">Négyzet</translation>
+<translation id="5775960006311140197">Szakértői mód</translation>
 <translation id="5869546221129391014">Rács</translation>
 <translation id="6040143037577758943">Bezárás</translation>
 <translation id="6073451960410192870">Felvétel leállítása</translation>
 <translation id="6165508094623778733">További információ</translation>
+<translation id="6197807149213783179">Metaadatok mentése</translation>
 <translation id="6233780560267770709">Háromszor hármas</translation>
 <translation id="6243827288366940320">Aranymetszés</translation>
 <translation id="6248749904681914629">Külső kamera</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Törlés</translation>
 <translation id="8428213095426709021">Beállítások</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" /> × <ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Metaadatok előnézete</translation>
 <translation id="8815966864175525708">Váltás álló fotó készítésére</translation>
 <translation id="8870695351537079478">Nem sikerült elindítani a felvételt.</translation>
 <translation id="9045155556724273246">10 másodperc</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_it.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_it.xtb
index 7982b24..25b9af0 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_it.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_it.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Realizza foto e video con la tua fotocamera.</translation>
 <translation id="2549985041256363841">Avvia registrazione</translation>
 <translation id="2599796128805996109">Fotocamera posteriore</translation>
+<translation id="2912439424121107408">La modalità Esperto non è supportata su questo dispositivo</translation>
 <translation id="2968794441791257519">Le foto e i video acquisiti con la fotocamera verranno spostati nella cartella Download e potrai accedervi dall'app File.
 
 Le app con autorizzazioni di accesso allo spazio di archiviazione potranno accedere alle foto e ai video.</translation>
@@ -41,10 +42,12 @@
         Controlla se la fotocamera è collegata correttamente.</translation>
 <translation id="5152121255775685072">Vai alla galleria</translation>
 <translation id="5671277269877808209">Quadrato</translation>
+<translation id="5775960006311140197">Modalità Esperto</translation>
 <translation id="5869546221129391014">Griglia</translation>
 <translation id="6040143037577758943">Chiudi</translation>
 <translation id="6073451960410192870">Interrompi registrazione</translation>
 <translation id="6165508094623778733">Ulteriori informazioni</translation>
+<translation id="6197807149213783179">Salva metadati</translation>
 <translation id="6233780560267770709">3 x 3</translation>
 <translation id="6243827288366940320">Sezione aurea</translation>
 <translation id="6248749904681914629">Videocamera esterna</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Elimina</translation>
 <translation id="8428213095426709021">Impostazioni</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Anteprima metadati</translation>
 <translation id="8815966864175525708">Passa alla modalità foto verticale</translation>
 <translation id="8870695351537079478">Impossibile avviare la registrazione</translation>
 <translation id="9045155556724273246">10 secondi</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_iw.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_iw.xtb
index cee367ff..fa46866 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_iw.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_iw.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">צילום תמונות וסרטונים באמצעות המצלמה.</translation>
 <translation id="2549985041256363841">התחלת צילום סרטון</translation>
 <translation id="2599796128805996109">מצלמה אחורית</translation>
+<translation id="2912439424121107408">במכשיר הזה אין תמיכה במצב המתקדם</translation>
 <translation id="2968794441791257519">תמונות וסרטונים שצולמו בעזרת המצלמה יועברו אל התיקייה 'הורדות'. אפשר לגשת אליהם דרך 'קבצים'.
 
         אפליקציות עם הרשאות אחסון יוכלו לגשת אל התמונות והסרטונים שלך.</translation>
@@ -41,10 +42,12 @@
         יש לבדוק אם המצלמה מחוברת כראוי.</translation>
 <translation id="5152121255775685072">למעבר אל הגלריה</translation>
 <translation id="5671277269877808209">ריבוע</translation>
+<translation id="5775960006311140197">מצב מתקדם</translation>
 <translation id="5869546221129391014">רשת</translation>
 <translation id="6040143037577758943">סגור</translation>
 <translation id="6073451960410192870">הפסקת צילום הסרטון</translation>
 <translation id="6165508094623778733">למידע נוסף</translation>
+<translation id="6197807149213783179">שמירת מטא-נתונים</translation>
 <translation id="6233780560267770709">3 על 3</translation>
 <translation id="6243827288366940320">יחס הזהב</translation>
 <translation id="6248749904681914629">מצלמה חיצונית</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">מחיקה</translation>
 <translation id="8428213095426709021">הגדרות</translation>
 <translation id="8687491812650032292">‏איכות HD ‏– ‎<ph name="HEIGHT" />p ‏(<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">תצוגה מקדימה של מטא-נתונים</translation>
 <translation id="8815966864175525708">מעבר לצילום תמונות לאורך</translation>
 <translation id="8870695351537079478">לא ניתן להתחיל בצילום סרטון</translation>
 <translation id="9045155556724273246">10 שניות</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ja.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ja.xtb
index ea27f829..c8ac27f 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ja.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ja.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">カメラを使って写真や動画を撮影できます。</translation>
 <translation id="2549985041256363841">撮影を開始</translation>
 <translation id="2599796128805996109">背面カメラ</translation>
+<translation id="2912439424121107408">このデバイスではエキスパート モードはサポートされていません</translation>
 <translation id="2968794441791257519">カメラで撮影した写真と動画を [ダウンロード] フォルダに移動します。これらの写真や動画には、[ファイル] からアクセスできます。
 
         また、ストレージへのアクセスが許可されているアプリからも、これらの写真や動画にアクセスできます。</translation>
@@ -41,10 +42,12 @@
         カメラが正しく接続されているかご確認ください。</translation>
 <translation id="5152121255775685072">ギャラリーに移動</translation>
 <translation id="5671277269877808209">スクエア</translation>
+<translation id="5775960006311140197">エキスパート モード</translation>
 <translation id="5869546221129391014">グリッド</translation>
 <translation id="6040143037577758943">閉じる</translation>
 <translation id="6073451960410192870">撮影を停止</translation>
 <translation id="6165508094623778733">詳細</translation>
+<translation id="6197807149213783179">メタデータを保存</translation>
 <translation id="6233780560267770709">3 かける 3</translation>
 <translation id="6243827288366940320">黄金比</translation>
 <translation id="6248749904681914629">外部カメラ</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">削除</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p(<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">メタデータのプレビュー</translation>
 <translation id="8815966864175525708">縦向きの写真の撮影に切り替え</translation>
 <translation id="8870695351537079478">録画を開始できません</translation>
 <translation id="9045155556724273246">10 秒</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_kn.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_kn.xtb
index 92b2251..5acaeb9 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_kn.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_kn.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">ನಿಮ್ಮ ಕ್ಯಾಮರಾದ ಮೂಲಕ ಚಿತ್ರಗಳನ್ನು ತೆಗೆಯಿರಿ ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಿ.</translation>
 <translation id="2549985041256363841">ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="2599796128805996109">ಹಿಂಬದಿ ಕ್ಯಾಮರಾ</translation>
+<translation id="2912439424121107408">ಈ ಸಾಧನದಲ್ಲಿ ತಜ್ಞ ಮೋಡ್ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ</translation>
 <translation id="2968794441791257519">ಕ್ಯಾಮರಾದಿಂದ ತೆಗೆದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಡೌನ್‌ಲೋಡ್‌ಗಳ ಫೋಲ್ಡರ್‌ಗೆ ವರ್ಗಾಯಿಸಲಾಗುತ್ತದೆ.
 
         ಸಂಗ್ರಹಣೆ ಅನುಮತಿಗಳನ್ನು ಹೊಂದಿರುವ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುತ್ತವೆ.</translation>
@@ -41,10 +42,12 @@
         ಕ್ಯಾಮರಾ ಸರಿಯಾಗಿ ಸಂಪರ್ಕಗೊಂಡಿದೆಯೇ ಎಂಬುದನ್ನು ಪರೀಕ್ಷಿಸಿ.</translation>
 <translation id="5152121255775685072">ಗ್ಯಾಲರಿಗೆ ಹೋಗಿ</translation>
 <translation id="5671277269877808209">ಚೌಕ</translation>
+<translation id="5775960006311140197">ತಜ್ಞ ಮೋಡ್</translation>
 <translation id="5869546221129391014">ಗ್ರಿಡ್</translation>
 <translation id="6040143037577758943">ಮುಚ್ಚಿರಿ</translation>
 <translation id="6073451960410192870">ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿ</translation>
 <translation id="6165508094623778733">ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation>
+<translation id="6197807149213783179">ಮೆಟಾಡೇಟಾ ಉಳಿಸಿ</translation>
 <translation id="6233780560267770709">3 x 3</translation>
 <translation id="6243827288366940320">ಗೋಲ್ಡನ್ ಅನುಪಾತ</translation>
 <translation id="6248749904681914629">ಬಾಹ್ಯ ಕ್ಯಾಮರಾ</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">ಅಳಿಸಿ</translation>
 <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">ಮೆಟಾಡೇಟಾವನ್ನು ಪೂರ್ವವೀಕ್ಷಿಸಿ</translation>
 <translation id="8815966864175525708">ಪೋರ್ಟ್ರೇಟ್ ಫೋಟೋ ತೆಗೆಯಲು ಬದಲಾಯಿಸಿ</translation>
 <translation id="8870695351537079478">ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="9045155556724273246">10 ಸೆಕೆಂಡುಗಳು</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_lv.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_lv.xtb
index 4b750d4..9e820b3 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_lv.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_lv.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Uzņemiet fotoattēlus un ierakstiet videoklipus, izmantojot savu kameru.</translation>
 <translation id="2549985041256363841">Sākt ierakstīšanu</translation>
 <translation id="2599796128805996109">Aizmugurējā kamera</translation>
+<translation id="2912439424121107408">Šajā ierīcē eksperta režīms netiek atbalstīts</translation>
 <translation id="2968794441791257519">Ar kameru uzņemtie fotoattēli un videoklipi tiks ievietoti mapē Lejupielādes. Varat tiem piekļūt lietotnē Faili.
 
         Lietotnes, kurām ir atļauja piekļūt krātuvei, varēs piekļūt jūsu fotoattēliem un videoklipiem.</translation>
@@ -41,10 +42,12 @@
         Lūdzu, pārbaudiet, vai kamera ir pareizi pievienota.</translation>
 <translation id="5152121255775685072">Pāriet uz galeriju</translation>
 <translation id="5671277269877808209">Kvadrāts</translation>
+<translation id="5775960006311140197">Eksperta režīms</translation>
 <translation id="5869546221129391014">Režģis</translation>
 <translation id="6040143037577758943">Aizvērt</translation>
 <translation id="6073451960410192870">Pārtraukt ierakstīšanu</translation>
 <translation id="6165508094623778733">Uzziniet vairāk</translation>
+<translation id="6197807149213783179">Saglabāt metadatus</translation>
 <translation id="6233780560267770709">3 pa 3</translation>
 <translation id="6243827288366940320">Zelta griezums</translation>
 <translation id="6248749904681914629">Ārējā kamera</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Dzēst</translation>
 <translation id="8428213095426709021">Iestatījumi</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Priekšskatīt metadatus</translation>
 <translation id="8815966864175525708">Pārslēgt uz portretu uzņemšanu</translation>
 <translation id="8870695351537079478">Nevar sākt ierakstīšanu</translation>
 <translation id="9045155556724273246">10 sekundes</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ms.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ms.xtb
index 4e691a0..2a3e305 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ms.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ms.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Ambil foto dan rakam video dengan kamera anda.</translation>
 <translation id="2549985041256363841">Mulakan rakaman</translation>
 <translation id="2599796128805996109">Kamera belakang</translation>
+<translation id="2912439424121107408">Mod pakar tidak disokong pada peranti ini</translation>
 <translation id="2968794441791257519">Foto dan video yang diambil dengan kamera akan dialihkan ke folder Muat Turun. Anda boleh mengakses foto dan video itu dalam Fail.
 
         Apl yang diberikan kebenaran storan boleh mengakses foto dan video anda.</translation>
@@ -41,10 +42,12 @@
         Sila periksa sama ada kamera telah disambungkan dengan betul.</translation>
 <translation id="5152121255775685072">Pergi ke galeri</translation>
 <translation id="5671277269877808209">Segi empat sama</translation>
+<translation id="5775960006311140197">Mod pakar</translation>
 <translation id="5869546221129391014">Grid</translation>
 <translation id="6040143037577758943">Tutup</translation>
 <translation id="6073451960410192870">Hentikan rakaman</translation>
 <translation id="6165508094623778733">Ketahui lebih lanjut</translation>
+<translation id="6197807149213783179">Simpan metadata</translation>
 <translation id="6233780560267770709">3 kali 3</translation>
 <translation id="6243827288366940320">Nisbah keemasan</translation>
 <translation id="6248749904681914629">Kamera luar</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Padam</translation>
 <translation id="8428213095426709021">Tetapan</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Pratonton metadata</translation>
 <translation id="8815966864175525708">Beralih kepada mengambil foto potret</translation>
 <translation id="8870695351537079478">Tidak dapat memulakan rakaman</translation>
 <translation id="9045155556724273246">10 saat</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_nl.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_nl.xtb
index d84885ac..587bad0 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_nl.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_nl.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Maak foto's en neem video's op met je camera.</translation>
 <translation id="2549985041256363841">Opname starten</translation>
 <translation id="2599796128805996109">Camera aan achterzijde</translation>
+<translation id="2912439424121107408">Expertmodus wordt niet ondersteund op dit apparaat</translation>
 <translation id="2968794441791257519">Foto's en video's die zijn gemaakt met de camera worden verplaatst naar de map Downloads. Je kunt ze vinden via Bestanden.
 
         Apps met opslagmachtiging hebben toegang tot je foto's en video's.</translation>
@@ -41,10 +42,12 @@
         Controleer of de camera correct is aangesloten.</translation>
 <translation id="5152121255775685072">Naar galerij</translation>
 <translation id="5671277269877808209">Vierkant</translation>
+<translation id="5775960006311140197">Expertmodus</translation>
 <translation id="5869546221129391014">Raster</translation>
 <translation id="6040143037577758943">Sluiten</translation>
 <translation id="6073451960410192870">Opname stoppen</translation>
 <translation id="6165508094623778733">Meer informatie</translation>
+<translation id="6197807149213783179">Metadata opslaan</translation>
 <translation id="6233780560267770709">3 bij 3</translation>
 <translation id="6243827288366940320">Gulden snede</translation>
 <translation id="6248749904681914629">Externe camera</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Verwijderen</translation>
 <translation id="8428213095426709021">Instellingen</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Voorbeeld van metadata bekijken</translation>
 <translation id="8815966864175525708">Schakel over om portretfoto te maken</translation>
 <translation id="8870695351537079478">Kan opname niet starten</translation>
 <translation id="9045155556724273246">10 seconden</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pl.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pl.xtb
index 71caaeb..07bdeb53 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pl.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pl.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Aparatem możesz robić zdjęcia i nagrywać filmy.</translation>
 <translation id="2549985041256363841">Zacznij nagrywanie</translation>
 <translation id="2599796128805996109">Tylny aparat</translation>
+<translation id="2912439424121107408">Tryb eksperta jest niedostępny na tym urządzeniu</translation>
 <translation id="2968794441791257519">Zdjęcia i filmy pochodzące z aparatu zostaną przeniesione do folderu Pobrane pliki. Dostęp do nich możesz uzyskać w aplikacji Pliki.
 
         Do Twoich zdjęć i filmów będą mieć dostęp aplikacje z uprawnieniami dostępu do pamięci.</translation>
@@ -41,10 +42,12 @@
         Sprawdź, czy jest prawidłowo podłączony.</translation>
 <translation id="5152121255775685072">Otwórz galerię</translation>
 <translation id="5671277269877808209">Kwadrat</translation>
+<translation id="5775960006311140197">Tryb eksperta</translation>
 <translation id="5869546221129391014">Siatka</translation>
 <translation id="6040143037577758943">Zamknij</translation>
 <translation id="6073451960410192870">Zatrzymaj nagrywanie</translation>
 <translation id="6165508094623778733">Więcej informacji</translation>
+<translation id="6197807149213783179">Zapisz metadane</translation>
 <translation id="6233780560267770709">3 na 3</translation>
 <translation id="6243827288366940320">Złoty podział</translation>
 <translation id="6248749904681914629">Aparat zewnętrzny</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Usuń</translation>
 <translation id="8428213095426709021">Ustawienia</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Wyświetl podgląd metadanych</translation>
 <translation id="8815966864175525708">Przełącz, by zrobić zdjęcie w orientacji pionowej</translation>
 <translation id="8870695351537079478">Nie udało się rozpocząć nagrywania</translation>
 <translation id="9045155556724273246">10 sekund</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-BR.xtb
index 081c599..0e602f66 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-BR.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-BR.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Tire fotos e grave vídeos com sua câmera.</translation>
 <translation id="2549985041256363841">Iniciar gravação</translation>
 <translation id="2599796128805996109">Câmera traseira</translation>
+<translation id="2912439424121107408">O modo Especialista não é compatível com este dispositivo</translation>
 <translation id="2968794441791257519">As fotos e os vídeos capturados com a câmera serão movidos para a pasta "Downloads", e você poderá acessá-los no app Arquivos.
 
         Os apps com permissões de armazenamento terão acesso a seus vídeos e fotos.</translation>
@@ -41,10 +42,12 @@
         Verifique se ela está conectada corretamente.</translation>
 <translation id="5152121255775685072">Ir para a galeria</translation>
 <translation id="5671277269877808209">Quadrado</translation>
+<translation id="5775960006311140197">Modo Especialista</translation>
 <translation id="5869546221129391014">Grade</translation>
 <translation id="6040143037577758943">Fechar</translation>
 <translation id="6073451960410192870">Parar de gravar</translation>
 <translation id="6165508094623778733">Saiba mais</translation>
+<translation id="6197807149213783179">Salvar metadados</translation>
 <translation id="6233780560267770709">3 por 3</translation>
 <translation id="6243827288366940320">Número de ouro</translation>
 <translation id="6248749904681914629">Câmera externa</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Excluir</translation>
 <translation id="8428213095426709021">Configurações</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Visualizar metadados</translation>
 <translation id="8815966864175525708">Alternar para capturar um retrato</translation>
 <translation id="8870695351537079478">Não foi possível começar a gravação</translation>
 <translation id="9045155556724273246">10 segundos</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-PT.xtb
index 6f204c5..08b90405 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-PT.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_pt-PT.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Tire fotos e grave vídeos com a sua câmara.</translation>
 <translation id="2549985041256363841">Iniciar gravação</translation>
 <translation id="2599796128805996109">Câmara posterior</translation>
+<translation id="2912439424121107408">O modo Especialista não é suportado neste dispositivo.</translation>
 <translation id="2968794441791257519">As fotos e os vídeos realizados com a câmara serão movidos para a pasta Transferências. Pode aceder aos mesmos em Ficheiros.
 
         As aplicações com autorizações de armazenamento terão acesso aos seus vídeos e fotos.</translation>
@@ -41,10 +42,12 @@
         Verifique se a câmara está ligada corretamente.</translation>
 <translation id="5152121255775685072">Ir para a galeria</translation>
 <translation id="5671277269877808209">Quadrado</translation>
+<translation id="5775960006311140197">Modo Especialista</translation>
 <translation id="5869546221129391014">Grelha</translation>
 <translation id="6040143037577758943">Fechar</translation>
 <translation id="6073451960410192870">Parar gravação</translation>
 <translation id="6165508094623778733">Saiba mais</translation>
+<translation id="6197807149213783179">Guardar metadados</translation>
 <translation id="6233780560267770709">3 por 3</translation>
 <translation id="6243827288366940320">Divina proporção</translation>
 <translation id="6248749904681914629">Câmara posterior</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8428213095426709021">Definições</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Pré-visualizar metadados</translation>
 <translation id="8815966864175525708">Mudar para tirar foto de retrato</translation>
 <translation id="8870695351537079478">Não é possível iniciar a gravação.</translation>
 <translation id="9045155556724273246">10 segundos</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ro.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ro.xtb
index e584ce8..51a5430 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ro.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ro.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Fotografiază și înregistrează videoclipuri cu camera foto.</translation>
 <translation id="2549985041256363841">Pornește înregistrarea</translation>
 <translation id="2599796128805996109">Camera foto posterioară</translation>
+<translation id="2912439424121107408">Modul expert nu este acceptat pe acest dispozitiv</translation>
 <translation id="2968794441791257519">Fotografiile și videoclipurile făcute cu camera foto vor fi mutate în dosarul Descărcări. Le poți accesa în Fișiere.
 
         Aplicațiile cu permisiuni de stocare vor avea acces la fotografiile și videoclipurile tale.</translation>
@@ -41,10 +42,12 @@
         Verifică dacă ai conectat corect camera foto.</translation>
 <translation id="5152121255775685072">Accesează galeria</translation>
 <translation id="5671277269877808209">Pătrat</translation>
+<translation id="5775960006311140197">Modul expert</translation>
 <translation id="5869546221129391014">Grilă</translation>
 <translation id="6040143037577758943">Închide</translation>
 <translation id="6073451960410192870">Oprește înregistrarea</translation>
 <translation id="6165508094623778733">Află mai multe</translation>
+<translation id="6197807149213783179">Salvează metadatele</translation>
 <translation id="6233780560267770709">3 pe 3</translation>
 <translation id="6243827288366940320">Raportul de aur</translation>
 <translation id="6248749904681914629">Cameră externă</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Șterge</translation>
 <translation id="8428213095426709021">Setări</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Metadatele de previzualizare</translation>
 <translation id="8815966864175525708">Comută pentru a face o fotografie portret</translation>
 <translation id="8870695351537079478">Nu se poate porni înregistrarea</translation>
 <translation id="9045155556724273246">10 secunde</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ru.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ru.xtb
index cf9fe97..c967d290 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ru.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ru.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Съемка фото и видео на камеру устройства.</translation>
 <translation id="2549985041256363841">Начать запись</translation>
 <translation id="2599796128805996109">Основная камера</translation>
+<translation id="2912439424121107408">Режим эксперта не поддерживается на этом устройстве.</translation>
 <translation id="2968794441791257519">Фотографии и видео, полученные с камеры, будут перемещены в папку скачанных файлов. Вы также сможете найти их в папке "Файлы".
 
 Приложения, которым вы разрешили пользоваться хранилищем, получат доступ к вашим фотографиям и видео.</translation>
@@ -41,10 +42,12 @@
         Проверьте, правильно ли подключена камера.</translation>
 <translation id="5152121255775685072">Перейти в галерею</translation>
 <translation id="5671277269877808209">Квадрат</translation>
+<translation id="5775960006311140197">Режим эксперта</translation>
 <translation id="5869546221129391014">Сетка</translation>
 <translation id="6040143037577758943">Закрыть</translation>
 <translation id="6073451960410192870">Остановить запись</translation>
 <translation id="6165508094623778733">Подробнее...</translation>
+<translation id="6197807149213783179">Сохранение метаданных</translation>
 <translation id="6233780560267770709">3 на 3</translation>
 <translation id="6243827288366940320">Золотое сечение</translation>
 <translation id="6248749904681914629">Внешняя камера</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Удалить</translation>
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Просмотр метаданных</translation>
 <translation id="8815966864175525708">Перейти к созданию вертикального фото</translation>
 <translation id="8870695351537079478">Не удалось начать запись</translation>
 <translation id="9045155556724273246">10 секунд</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sk.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sk.xtb
index b50b8b9..bbec85e 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sk.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sk.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Foťte a zaznamenávajte videá fotoaparátom.</translation>
 <translation id="2549985041256363841">Spustiť zaznamenávanie</translation>
 <translation id="2599796128805996109">Zadný fotoaparát</translation>
+<translation id="2912439424121107408">Toto zariadenie nepodporuje expertný režim</translation>
 <translation id="2968794441791257519">Fotky a videá nasnímané fotoaparátom budú presunuté do priečinka Stiahnuté súbory. Dostanete sa k nim v Súboroch.
 
         Fotky aj videá budú môcť používať aplikácie s povoleniami pre úložisko.</translation>
@@ -41,10 +42,12 @@
         Skontrolujte, či je správne pripojený.</translation>
 <translation id="5152121255775685072">Prejsť do galérie</translation>
 <translation id="5671277269877808209">Štvorec</translation>
+<translation id="5775960006311140197">Expertný režim</translation>
 <translation id="5869546221129391014">Mriežka</translation>
 <translation id="6040143037577758943">Zavrieť</translation>
 <translation id="6073451960410192870">Zastaviť zaznamenávanie</translation>
 <translation id="6165508094623778733">Ďalšie informácie</translation>
+<translation id="6197807149213783179">Uložiť metadáta</translation>
 <translation id="6233780560267770709">3 na 3</translation>
 <translation id="6243827288366940320">Zlatý rez</translation>
 <translation id="6248749904681914629">Externý fotoaparát</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Odstrániť</translation>
 <translation id="8428213095426709021">Nastavenia</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" /> p (<ph name="WIDTH" /> : <ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Zobraziť ukážku metadát</translation>
 <translation id="8815966864175525708">Prepnúť na nasnímanie portrétovej fotky</translation>
 <translation id="8870695351537079478">Zaznamenávanie sa nedá spustiť</translation>
 <translation id="9045155556724273246">10 sekúnd</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sl.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sl.xtb
index 507dfdc..14f98f1b 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sl.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sl.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Fotografirajte in snemajte videoposnetke s fotoaparatom.</translation>
 <translation id="2549985041256363841">Začetek snemanja</translation>
 <translation id="2599796128805996109">Hrbtni fotoaparat</translation>
+<translation id="2912439424121107408">Poznavalski način ni podprt v tej napravi</translation>
 <translation id="2968794441791257519">Fotografije in videoposnetki, ki ste jih posneli s fotoaparatom, bodo premaknjeni v mapo Prenosi. Do njih lahko dostopate v aplikaciji Datoteke.
 
         Aplikacije z dovoljenji za shrambo bodo imele dostop do fotografij in videoposnetkov.</translation>
@@ -41,10 +42,12 @@
         Preverite, ali je fotoaparat ustrezno povezan.</translation>
 <translation id="5152121255775685072">V galerijo</translation>
 <translation id="5671277269877808209">Kvadratno</translation>
+<translation id="5775960006311140197">Poznavalski način</translation>
 <translation id="5869546221129391014">Mreža</translation>
 <translation id="6040143037577758943">Zapri</translation>
 <translation id="6073451960410192870">Ustavi snemanje</translation>
 <translation id="6165508094623778733">Več o tem</translation>
+<translation id="6197807149213783179">Shrani metapodatke</translation>
 <translation id="6233780560267770709">3 x 3</translation>
 <translation id="6243827288366940320">Zlato razmerje</translation>
 <translation id="6248749904681914629">Zunanji fotoaparat</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8428213095426709021">Nastavitve</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" /> : <ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Predogled metapodatkov</translation>
 <translation id="8815966864175525708">Preklop na snemanje portretnih fotografij</translation>
 <translation id="8870695351537079478">Snemanja ni mogoče začeti</translation>
 <translation id="9045155556724273246">10 sekund</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sr.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sr.xtb
index 71f2145..a8be2ee 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sr.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_sr.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Снимајте слике и видео снимке помоћу камере.</translation>
 <translation id="2549985041256363841">Започни снимање</translation>
 <translation id="2599796128805996109">Задња камера</translation>
+<translation id="2912439424121107408">Режим за стручњаке није подржан на овом уређају</translation>
 <translation id="2968794441791257519">Слике и видео снимци који су снимљени помоћу камере ће се преместити у директоријум Преузимања. Можете да им приступите у Датотекама.
 
         Апликације са дозволама за приступ меморијском простору ће имати приступ сликама и видео снимцима.</translation>
@@ -41,10 +42,12 @@
         Проверите да ли је камера исправно повезана.</translation>
 <translation id="5152121255775685072">Иди у галерију</translation>
 <translation id="5671277269877808209">Квадрат</translation>
+<translation id="5775960006311140197">Режим за стручњаке</translation>
 <translation id="5869546221129391014">Мрежа</translation>
 <translation id="6040143037577758943">Затвори</translation>
 <translation id="6073451960410192870">Заустави снимање</translation>
 <translation id="6165508094623778733">Сазнајте више</translation>
+<translation id="6197807149213783179">Сачувај метаподатке</translation>
 <translation id="6233780560267770709">3 са 3</translation>
 <translation id="6243827288366940320">Златни пресек</translation>
 <translation id="6248749904681914629">Спољна камера</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Избриши</translation>
 <translation id="8428213095426709021">Подешавања</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" /> пиксела (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Прикажи метаподатке</translation>
 <translation id="8815966864175525708">Пређи на режим за снимање усправних слика</translation>
 <translation id="8870695351537079478">Снимање није могло да почне</translation>
 <translation id="9045155556724273246">10 секунди</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ta.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ta.xtb
index 902616f..6a9ae26 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ta.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ta.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">உங்கள் கேமராவைப் பயன்படுத்தி, படங்களை எடுக்கலாம், வீடியோக்களை ரெக்கார்டு செய்யலாம்.</translation>
 <translation id="2549985041256363841">பதிவுசெய்யத் தொடங்கு</translation>
 <translation id="2599796128805996109">பின்பக்கக் கேமரா</translation>
+<translation id="2912439424121107408">இந்தச் சாதனத்தில் எக்ஸ்பெர்ட் பயன்முறையைப் பயன்படுத்த முடியாது</translation>
 <translation id="2968794441791257519">கேமராவில் எடுக்கப்படும் படங்களும் வீடியோக்களும் ‘பதிவிறக்கங்கள்’ கோப்புறைக்கு நகர்த்தப்படும். அவற்றை Filesஸில் பார்க்கலாம்.
 
         சேமிப்பக அனுமதிகள் உள்ள ஆப்ஸால் அவற்றை அணுக முடியும்.</translation>
@@ -41,10 +42,12 @@
         கேமரா சரியாக இணைக்கப்பட்டுள்ளதா எனப் பார்க்கவும்.</translation>
 <translation id="5152121255775685072">கேலரிக்குச் செல்</translation>
 <translation id="5671277269877808209">சதுரம்</translation>
+<translation id="5775960006311140197">எக்ஸ்பெர்ட் பயன்முறை</translation>
 <translation id="5869546221129391014">கட்டம்</translation>
 <translation id="6040143037577758943">மூடு</translation>
 <translation id="6073451960410192870">பதிவுசெய்வதை நிறுத்து</translation>
 <translation id="6165508094623778733">மேலும் அறிக</translation>
+<translation id="6197807149213783179">தரவுத்தகவலைச் சேமி</translation>
 <translation id="6233780560267770709">3 x 3</translation>
 <translation id="6243827288366940320">கோல்டன் விகிதம்</translation>
 <translation id="6248749904681914629">இணைக்கப்பட்ட வேறு கேமரா</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">நீக்கு</translation>
 <translation id="8428213095426709021">அமைப்புகள்</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />பி (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">தரவுத்தகவலை முன்பார்வையிடுக</translation>
 <translation id="8815966864175525708">நீளவாக்கில் படமெடுக்குமாறு மாற்றவும்</translation>
 <translation id="8870695351537079478">பதிவுசெய்வதைத் தொடங்க முடியவில்லை</translation>
 <translation id="9045155556724273246">10 விநாடிகள்</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_th.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_th.xtb
index d2a5140e..afd3c20 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_th.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_th.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">ถ่ายภาพและบันทึกวิดีโอด้วยกล้อง</translation>
 <translation id="2549985041256363841">เริ่มบันทึก</translation>
 <translation id="2599796128805996109">กล้องหลัง</translation>
+<translation id="2912439424121107408">อุปกรณ์นี้ไม่รองรับโหมดผู้เชี่ยวชาญ</translation>
 <translation id="2968794441791257519">รูปภาพและวิดีโอที่ถ่ายจากกล้องจะย้ายไปยังโฟลเดอร์ "ดาวน์โหลด" คุณจะเข้าถึงรายการเหล่านี้ได้ในแอป Files
 
 แอปที่มีสิทธิ์ในพื้นที่เก็บข้อมูลจะเข้าถึงรูปภาพและวิดีโอของคุณได้</translation>
@@ -41,10 +42,12 @@
         โปรดตรวจสอบว่ากล้องเชื่อมต่ออย่างถูกต้อง</translation>
 <translation id="5152121255775685072">ไปที่แกลเลอรี</translation>
 <translation id="5671277269877808209">สี่เหลี่ยมจัตุรัส</translation>
+<translation id="5775960006311140197">โหมดผู้เชี่ยวชาญ</translation>
 <translation id="5869546221129391014">ตาราง</translation>
 <translation id="6040143037577758943">ปิด</translation>
 <translation id="6073451960410192870">หยุดบันทึก</translation>
 <translation id="6165508094623778733">ดูข้อมูลเพิ่มเติม</translation>
+<translation id="6197807149213783179">บันทึกข้อมูลเมตา</translation>
 <translation id="6233780560267770709">3 x 3</translation>
 <translation id="6243827288366940320">อัตราส่วนทองคำ</translation>
 <translation id="6248749904681914629">กล้องภายนอก</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">ลบ</translation>
 <translation id="8428213095426709021">การตั้งค่า</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">แสดงตัวอย่างข้อมูลเมตา</translation>
 <translation id="8815966864175525708">เปลี่ยนเป็นถ่ายภาพบุคคล</translation>
 <translation id="8870695351537079478">เริ่มบันทึกวิดีโอไม่ได้</translation>
 <translation id="9045155556724273246">10 วินาที</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_uk.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_uk.xtb
index 022298d7..cd59241 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_uk.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_uk.xtb
@@ -19,6 +19,7 @@
 <translation id="2501953888035679275">Фотографуйте й записуйте відео камерою.</translation>
 <translation id="2549985041256363841">Почати запис</translation>
 <translation id="2599796128805996109">Камера на задній панелі</translation>
+<translation id="2912439424121107408">Режим експерта не підтримується на цьому пристрої</translation>
 <translation id="2968794441791257519">Фото й відео з камери перенесуться в папку "Завантаження", і ви зможете відкрити їх у Файлах.
 
         Також до них матимуть доступ додатки, яким дозволено використовувати пам’ять пристрою.</translation>
@@ -41,10 +42,12 @@
         Перевірте, чи правильно її під’єднано.</translation>
 <translation id="5152121255775685072">Перейти в галерею</translation>
 <translation id="5671277269877808209">Квадрат</translation>
+<translation id="5775960006311140197">Режим експерта</translation>
 <translation id="5869546221129391014">Сітка</translation>
 <translation id="6040143037577758943">Закрити</translation>
 <translation id="6073451960410192870">Припинити запис</translation>
 <translation id="6165508094623778733">Докладніше</translation>
+<translation id="6197807149213783179">Зберегти метадані</translation>
 <translation id="6233780560267770709">3 на 3</translation>
 <translation id="6243827288366940320">Золотий перетин</translation>
 <translation id="6248749904681914629">Зовнішня камера</translation>
@@ -66,6 +69,7 @@
 <translation id="8261506727792406068">Видалити</translation>
 <translation id="8428213095426709021">Налаштування</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
+<translation id="8732462232047530626">Переглянути метадані</translation>
 <translation id="8815966864175525708">Перейти в режим портретного фото</translation>
 <translation id="8870695351537079478">Не вдалося почати запис</translation>
 <translation id="9045155556724273246">10 секунд</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
index 1ceb435..11fe8bf 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">الانتقال إلى العنصر التالي القابل للتركيز</translation>
 <translation id="2770781857296573485">الدخول إلى استكشاف المجموعات</translation>
 <translation id="2777845298774924149">تم الإنهاء</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{أكثر من عنصر واحد (#)}zero{أكثر من # عنصر}two{أكثر من عنصرَين (#)}few{أكثر من # عناصر}many{أكثر من # عنصرًا}other{أكثر من # عنصر}}</translation>
 <translation id="2784959586797362050">‏يمكنك دائمًا إرسال تعليقات إلينا مباشرةً بالضغط على "Search+a" ثم "i". نتطلع بشدة لمعرفة رأيك.</translation>
 <translation id="2800204403141299078">ليس هناك المزيد من العناصر المختلفة.</translation>
 <translation id="2800780099804980316">ليس هناك عنوان سابق من المستوى الأول.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">مربع حوار</translation>
 <translation id="5963413905009737549">قسم</translation>
 <translation id="5968607524793740041">عرض قائمة السياقات</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{تتضمن عنصرًا واحدًا (#)}zero{لا تتضمن أيَّ عناصر (#)}two{تتضمن عنصرَين (#)}few{تتضمن # عناصر}many{تتضمن # عنصرًا}other{تتضمن # عنصر}}</translation>
 <translation id="5981446804259161541">سماوي فاتح</translation>
 <translation id="5983179082906765664">زيادة دقة التنقل</translation>
 <translation id="5992285135956208197">مستند رسومي</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb
index a5278d2..8dfb275 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Преминаване към следващия елемент, който може да получи фокус</translation>
 <translation id="2770781857296573485">Влизане в режим за разглеждане на група</translation>
 <translation id="2777845298774924149">Излязохте</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+ #}other{+ #}}</translation>
 <translation id="2784959586797362050">Както винаги, можете да ни изпратите отзив директно, като натиснете клавиша „търсене“ + „a“ и след това – „i“. С нетърпение очакваме мнението ви.</translation>
 <translation id="2800204403141299078">Няма повече различни елементи.</translation>
 <translation id="2800780099804980316">Няма предишно заглавие от първо ниво.</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Диалогов прозорец</translation>
 <translation id="5963413905009737549">Секция</translation>
 <translation id="5968607524793740041">Показване на контекстното меню</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{с # елемент}other{с(ъс) # елемента}}</translation>
 <translation id="5981446804259161541">светъл циан</translation>
 <translation id="5983179082906765664">По-подробна навигация</translation>
 <translation id="5992285135956208197">Графичен документ</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
index 7170170..d4847f8 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Ves a l'element enfocable següent</translation>
 <translation id="2770781857296573485">Entra a l'exploració de grups</translation>
 <translation id="2777845298774924149">S'ha sortit</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{# més}other{# més}}</translation>
 <translation id="2784959586797362050">Com sempre, per enviar-nos suggeriments directament, prem Cerca+A i després la tecla I. Ens agradaria saber la teva opinió.</translation>
 <translation id="2800204403141299078">No hi ha més elements diferents.</translation>
 <translation id="2800780099804980316">No hi ha cap capçalera anterior del nivell 1.</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Diàleg</translation>
 <translation id="5963413905009737549">Secció</translation>
 <translation id="5968607524793740041">Mostra el menú contextual</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{amb # element}other{amb # elements}}</translation>
 <translation id="5981446804259161541">Cian clar</translation>
 <translation id="5983179082906765664">Augmenta la granularitat de la navegació</translation>
 <translation id="5992285135956208197">Document gràfic</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb
index c278462..5bed326 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Přejít na další zaměřitelnou položku</translation>
 <translation id="2770781857296573485">Zahájit průzkum skupin</translation>
 <translation id="2777845298774924149">Ukončeno</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}few{+#}many{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Zpětnou vazbu nám můžete jako obvykle odeslat přímo tak, že stisknete kombinaci kláves Hledat + a a poté klávesu i. Vaše názory si rádi vyslechneme.</translation>
 <translation id="2800204403141299078">Žádné další odlišné prvky.</translation>
 <translation id="2800780099804980316">Žádný předchozí nadpis 1. úrovně.</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Dialogové okno</translation>
 <translation id="5963413905009737549">Sekce</translation>
 <translation id="5968607524793740041">Zobrazit kontextovou nabídku</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{s # položkou}few{se # položkami}many{s # položky}other{s # položkami}}</translation>
 <translation id="5981446804259161541">Světle azurová</translation>
 <translation id="5983179082906765664">Zvýšit granularitu navigace</translation>
 <translation id="5992285135956208197">Grafický dokument</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb
index dd65c11..10f1d16 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Gå til næste element, der kan fokuseres på</translation>
 <translation id="2770781857296573485">Start udforskning af grupper</translation>
 <translation id="2777845298774924149">Lukket</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Du kan som altid sende os direkte feedback ved at trykke på søgetasten+a og derefter i. Vi glæder os til at høre fra dig.</translation>
 <translation id="2800204403141299078">Ikke flere anderledes elementer.</translation>
 <translation id="2800780099804980316">Ingen tidligere niveau 1-overskrifter.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Dialogboks</translation>
 <translation id="5963413905009737549">Afsnit</translation>
 <translation id="5968607524793740041">Vis genvejsmenu</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{med # element}one{med # element}other{med # elementer}}</translation>
 <translation id="5981446804259161541">Lys cyanblå</translation>
 <translation id="5983179082906765664">Øg detaljegraden for navigation</translation>
 <translation id="5992285135956208197">Grafikdokument</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb
index 4b2acbc..1837337 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Zum nächsten fokussierbaren Element springen</translation>
 <translation id="2770781857296573485">Gruppenerkundung starten</translation>
 <translation id="2777845298774924149">Beendet</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Sie können uns wie gewohnt direktes Feedback senden, indem Sie auf "Suche + a" und dann auf "i" drücken. Wir würden uns freuen, von Ihnen zu hören.</translation>
 <translation id="2800204403141299078">Keine weiteren anderen Elemente</translation>
 <translation id="2800780099804980316">Keine vorherige Überschrift der Ebene 1</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Dialogfeld</translation>
 <translation id="5963413905009737549">Section-Element</translation>
 <translation id="5968607524793740041">Kontextmenü anzeigen</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{mit # Element}other{mit # Elementen}}</translation>
 <translation id="5981446804259161541">Hellcyan</translation>
 <translation id="5983179082906765664">Navigationsgenauigkeit erhöhen</translation>
 <translation id="5992285135956208197">Grafikdokument</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb
index 5394acb..718651d 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Μετάβαση στο επόμενο αντικείμενο με δυνατότητα εστίασης</translation>
 <translation id="2770781857296573485">Εισαγωγή στην εξερεύνηση ομάδας</translation>
 <translation id="2777845298774924149">Έγινε έξοδος</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Όπως πάντα, μπορείτε να μας στείλετε απευθείας τα σχόλιά σας, πατώντας Αναζήτηση+a και έπειτα i. Θα χαρούμε να ακούσουμε τη γνώμη σας.</translation>
 <translation id="2800204403141299078">Δεν υπάρχουν διαφορετικά στοιχεία.</translation>
 <translation id="2800780099804980316">Δεν υπάρχει προηγούμενη επικεφαλίδα επιπέδου 1.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Διάλογος</translation>
 <translation id="5963413905009737549">Ενότητα</translation>
 <translation id="5968607524793740041">Εμφάνιση μενού περιβάλλοντος</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{με # στοιχείο}other{με # στοιχεία}}</translation>
 <translation id="5981446804259161541">Ανοιχτό κυανό</translation>
 <translation id="5983179082906765664">Αύξηση ευαισθησίας περιήγησης</translation>
 <translation id="5992285135956208197">Έγγραφο γραφικών</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
index f2acdf4..a9e049d 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Saltar al siguiente elemento enfocable</translation>
 <translation id="2770781857296573485">Ingresar exploración de grupos</translation>
 <translation id="2777845298774924149">Salió.</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{# más}other{# más}}</translation>
 <translation id="2784959586797362050">Como siempre, si deseas enviarnos comentarios, presiona la tecla Buscar + a, luego, i. Esperamos tus mensajes.</translation>
 <translation id="2800204403141299078">No hay más elementos diferentes.</translation>
 <translation id="2800780099804980316">No hay ningún encabezado de nivel 1 anterior.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Cuadro de diálogo</translation>
 <translation id="5963413905009737549">Sección</translation>
 <translation id="5968607524793740041">Mostrar el menú contextual</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{con # elemento}other{con # elementos}}</translation>
 <translation id="5981446804259161541">Cian claro</translation>
 <translation id="5983179082906765664">Aumentar nivel de detalle de navegación</translation>
 <translation id="5992285135956208197">Documento gráfico</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb
index 5057543d1..5188433b 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Salta al siguiente elemento enfocable</translation>
 <translation id="2770781857296573485">Introduce exploración de grupos</translation>
 <translation id="2777845298774924149">Cerrado</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Como siempre, puedes enviarnos tus comentarios directamente pulsando la tecla de búsqueda + A y, a continuación, la tecla I. Nos gustaría conocer tu opinión.</translation>
 <translation id="2800204403141299078">No hay más elementos diferentes.</translation>
 <translation id="2800780099804980316">No hay ningún título de nivel 1 anterior.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Diálogo</translation>
 <translation id="5963413905009737549">Etiqueta de sección</translation>
 <translation id="5968607524793740041">Mostrar menú contextual</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{con # elemento}other{con # elementos}}</translation>
 <translation id="5981446804259161541">Cian claro</translation>
 <translation id="5983179082906765664">Aumenta la granularidad de navegación</translation>
 <translation id="5992285135956208197">Documento gráfico</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb
index 5473b19..d1b6827a 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Liigu järgmise fookustatud üksuse juurde</translation>
 <translation id="2770781857296573485">Rühma uuringu sisestamine</translation>
 <translation id="2777845298774924149">Väljus</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Nagu alati, võite saata meile otse tagasisidet, vajutades klahvikombinatsiooni Otsing + A ning seejärel klahvi I. Meil on alati hea meel teie arvamust kuulda.</translation>
 <translation id="2800204403141299078">Pole rohkem erinevaid elemente.</translation>
 <translation id="2800780099804980316">Eelmist 1. taseme pealkirja ei ole.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Dialoog</translation>
 <translation id="5963413905009737549">Jaotis</translation>
 <translation id="5968607524793740041">Kontekstimenüü kuvamine</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{# üksusega}other{# üksusega}}</translation>
 <translation id="5981446804259161541">Hele tsüaan</translation>
 <translation id="5983179082906765664">Suurenda navigatsiooni detailsust</translation>
 <translation id="5992285135956208197">Graafika dokument</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
index 157d287..efa085d 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">پرش به مورد قابل فوکوس بعدی</translation>
 <translation id="2770781857296573485">به کاوش گروه وارد شوید</translation>
 <translation id="2777845298774924149">خارج شد</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{#+}one{#+}other{#+}}</translation>
 <translation id="2784959586797362050">‏مثل همیشه، می‌توانید با فشار دادن Search+a و سپس i مستقیماً برای ما بازخورد ارسال کنید. مشتاق شنیدن نظرات شما هستیم.</translation>
 <translation id="2800204403141299078">هیچ عنصر متفاوت دیگری نیست.</translation>
 <translation id="2800780099804980316">عنوان سطح ۱ قبلی وجود ندارد.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">گفتگو</translation>
 <translation id="5963413905009737549">بخش</translation>
 <translation id="5968607524793740041">نمایش منوی بافت</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{شامل # مورد}one{شامل # مورد}other{شامل # مورد}}</translation>
 <translation id="5981446804259161541">فیروزه‌ای روشن</translation>
 <translation id="5983179082906765664">افزایش جزئیات پیمایش</translation>
 <translation id="5992285135956208197">سند گرافیکی</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb
index e5b6e40..0dbc7e0e 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Siirry seuraavaan aktivoitavaan kohteeseen</translation>
 <translation id="2770781857296573485">Käytä ryhmätutkintaa</translation>
 <translation id="2777845298774924149">Suljettiin</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Kuten aina, voit lähettää meille palautetta painamalla ensin Haku + a ja sen jälkeen i. Mielipiteesi on meille tärkeä.</translation>
 <translation id="2800204403141299078">Ei muita erilaisia elementtejä.</translation>
 <translation id="2800780099804980316">Ei edellisiä tason 1 otsikoita.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Dialogi</translation>
 <translation id="5963413905009737549">Osio</translation>
 <translation id="5968607524793740041">Näytä kontekstivalikko</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{jossa # kohde}other{jossa # kohdetta}}</translation>
 <translation id="5981446804259161541">Vaalea syaani</translation>
 <translation id="5983179082906765664">Lisää siirtymisen tarkkuutta</translation>
 <translation id="5992285135956208197">Grafiikkadokumentti</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
index e9be595..0c2d497 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Renvoyer à l'élément suivant pouvant être agrandi</translation>
 <translation id="2770781857296573485">Passer en mode d'exploration par groupe</translation>
 <translation id="2777845298774924149">Fermé</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Comme toujours, vous pouvez nous envoyer directement vos commentaires en appuyant sur la touche de recherche+a, puis sur la touche i. Nous avons hâte de connaître votre avis.</translation>
 <translation id="2800204403141299078">Aucun autre élément différent</translation>
 <translation id="2800780099804980316">Aucun titre de niveau 1 précédent</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Boîte de dialogue</translation>
 <translation id="5963413905009737549">Section</translation>
 <translation id="5968607524793740041">Afficher le menu contextuel</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{avec # élément}one{avec # élément}other{avec # éléments}}</translation>
 <translation id="5981446804259161541">Cyan clair</translation>
 <translation id="5983179082906765664">Augmenter la granularité de la navigation</translation>
 <translation id="5992285135956208197">Document graphique</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb
index 879a931..8df6304 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Skok na sljedeću stavku s mogućnošću fokusiranja</translation>
 <translation id="2770781857296573485">Unesite grupno istraživanje</translation>
 <translation id="2777845298774924149">Izašli ste</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}few{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Kao i uvijek, povratne informacije možete nam poslati izravno pritiskom na tipku za pretraživanje i "A", a zatim "I". Pošaljite nam ih što prije.</translation>
 <translation id="2800204403141299078">Nema više različitih elemenata.</translation>
 <translation id="2800780099804980316">Nema prethodnog naslova razine 1.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Dijaloški okvir</translation>
 <translation id="5963413905009737549">Odjeljak</translation>
 <translation id="5968607524793740041">Prikaz kontekstnog izbornika</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{s # stavkom}one{s # stavkom}few{s # stavke}other{s # stavki}}</translation>
 <translation id="5981446804259161541">Svijetlocijan</translation>
 <translation id="5983179082906765664">Povećanje razine pojedinosti navigacije</translation>
 <translation id="5992285135956208197">Grafički dokument</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb
index a220878..459b5d6 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Ugrás a következő fókuszálható elemre</translation>
 <translation id="2770781857296573485">Csoportfelfedezés megadása</translation>
 <translation id="2777845298774924149">Kilépett</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Mint mindig, a Keresés+a billentyűkombináció, majd az i billentyű lenyomása után küldhet nekünk közvetlen visszajelzést. Kíváncsian várjuk véleményét.</translation>
 <translation id="2800204403141299078">Nincs több eltérő elem.</translation>
 <translation id="2800780099804980316">Nincs előző 1-es szintű címsor.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Párbeszédpanel</translation>
 <translation id="5963413905009737549">Szakasz</translation>
 <translation id="5968607524793740041">Helyi menü megjelenítése</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{# elemmel}other{# elemmel}}</translation>
 <translation id="5981446804259161541">Világos ciánkék</translation>
 <translation id="5983179082906765664">Navigáció részletezettségének növelése</translation>
 <translation id="5992285135956208197">Grafikus dokumentum</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb
index 70b0787..af56405 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Passa a elemento attivabile successivo</translation>
 <translation id="2770781857296573485">Attiva l'esplorazione dei gruppi</translation>
 <translation id="2777845298774924149">Uscita</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Come sempre, inviaci direttamente la tua opinione premendo il tasto per la ricerca + A, quindi I. Siamo ansiosi di sentire cosa ne pensi.</translation>
 <translation id="2800204403141299078">Nessun altro elemento diverso.</translation>
 <translation id="2800780099804980316">Nessuna intestazione livello 1 precedente.</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Finestra di dialogo</translation>
 <translation id="5963413905009737549">Sezione</translation>
 <translation id="5968607524793740041">Mostra il menu contestuale</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{con # voce}other{con # voci}}</translation>
 <translation id="5981446804259161541">Ciano chiaro</translation>
 <translation id="5983179082906765664">Aumenta livello di dettaglio navigazione</translation>
 <translation id="5992285135956208197">Documento grafico</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb
index 4799595..73a4a8a 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">דלג לפריט הבא הניתן למיקוד</translation>
 <translation id="2770781857296573485">הזן סקירת קבוצה</translation>
 <translation id="2777845298774924149">יצאת</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+1}two{+#}many{+#}other{+#}}</translation>
 <translation id="2784959586797362050">‏כמו תמיד, אפשר לשלוח לנו משוב באופן ישיר על-ידי הקשה על Search+a+i. נשמח לשמוע ממך.</translation>
 <translation id="2800204403141299078">אין עוד אלמנטים שונים.</translation>
 <translation id="2800780099804980316">אין כותרת קודמת של רמה 1.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">דו-שיח</translation>
 <translation id="5963413905009737549">קטע</translation>
 <translation id="5968607524793740041">הצג תפריט הקשר</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{עם פריט אחד}two{with # items}many{with # items}other{עם # פריטים}}</translation>
 <translation id="5981446804259161541">ציאן בהיר</translation>
 <translation id="5983179082906765664">העמק את רמת הפירוט של הניווט</translation>
 <translation id="5992285135956208197">מסמך גרפי</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
index 9b13557..096cc60 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">次のフォーカス可能項目にジャンプ</translation>
 <translation id="2770781857296573485">グループ検索を入力</translation>
 <translation id="2777845298774924149">終了しました</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">フィードバックを送信するには、検索+a キーを押した後 i キーを押してください。ご意見をお待ちしています。</translation>
 <translation id="2800204403141299078">この他に異なる要素はありません。</translation>
 <translation id="2800780099804980316">前のレベル 1 見出しはありません。</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">ダイアログ</translation>
 <translation id="5963413905009737549">セクション</translation>
 <translation id="5968607524793740041">コンテキスト メニューを表示</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{(# 個のアイテム)}other{(# 個のアイテム)}}</translation>
 <translation id="5981446804259161541">ライトシアン</translation>
 <translation id="5983179082906765664">一度に移動する単位を小さくする</translation>
 <translation id="5992285135956208197">図形ドキュメント</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
index 5a6db7e..8cf9bb27 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">ಮುಂದೆ ಗಮನಹರಿಸಬಹುದಾದ ಐಟಂಗೆ ಹೋಗಿ</translation>
 <translation id="2770781857296573485">ಗುಂಪು ಪರಿಶೋಧನೆಯನ್ನು ನಮೂದಿಸಿ</translation>
 <translation id="2777845298774924149">ನಿರ್ಗಮಿಸಲಾಗಿದೆ</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}other{+#}}</translation>
 <translation id="2784959586797362050">ಎಂದಿನಂತೆಯೇ Search+a ನಂತರ i ಒತ್ತುವ ಮೂಲಕ ನೇರವಾಗಿ ನಮಗೆ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೀವು ಕಳುಹಿಸಬಹುದು. ನಿಮ್ಮಿಂದ ಕೇಳಲು ನಾವು ಉತ್ಸುಕರಾಗಿದ್ದೇವೆ.</translation>
 <translation id="2800204403141299078">ಹೆಚ್ಚಿನ ವಿಭಿನ್ನ ಅಂಶಗಳಿಲ್ಲ.</translation>
 <translation id="2800780099804980316">ಹಿಂದಿನ ಹಂತದ 1 ಶಿರೋನಾಮೆಯಿಲ್ಲ.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">ಸಂವಾದ</translation>
 <translation id="5963413905009737549">ವಿಭಾಗ</translation>
 <translation id="5968607524793740041">ಸಂದರ್ಭದ ಮೆನು ತೋರಿಸಿ</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{# ಐಟಂನೊಂದಿಗೆ}one{# ಐಟಂಗಳೊಂದಿಗೆ}other{# ಐಟಂಗಳೊಂದಿಗೆ}}</translation>
 <translation id="5981446804259161541">ತಿಳಿ ಹಸಿರುನೀಲಿ</translation>
 <translation id="5983179082906765664">ನ್ಯಾವಿಗೇಶನ್ ರಚನೆಯನ್ನು ಹೆಚ್ಚಿಸಿ</translation>
 <translation id="5992285135956208197">ಗ್ರಾಫಿಕ್ಸ್ ಡಾಕ್ಯುಮೆಂಟ್</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb
index 9297854a..dc3adc3 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Pāriet uz nākamo fokusējamo vienumu</translation>
 <translation id="2770781857296573485">Sākt grupu izpēti</translation>
 <translation id="2777845298774924149">Tika aizvērts</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{un vēl #}zero{un vēl #}one{un vēl #}other{un vēl #}}</translation>
 <translation id="2784959586797362050">Kā vienmēr, varat sūtīt atsauksmes tieši mums, nospiežot meklēšanas taustiņu un “a”, pēc tam “i”. Ar prieku saņemsim jūsu atsauksmes!</translation>
 <translation id="2800204403141299078">Nav neviena cita atšķirīga elementa.</translation>
 <translation id="2800780099804980316">Iepriekš nav neviena 1. līmeņa virsraksta.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Dialoglodziņš</translation>
 <translation id="5963413905009737549">Sadaļa</translation>
 <translation id="5968607524793740041">Rādīt kontekstizvēlni</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{ar # vienumu}zero{ar # vienumiem}one{ar # vienumu}other{ar # vienumiem}}</translation>
 <translation id="5981446804259161541">Gaiši ciānzila</translation>
 <translation id="5983179082906765664">Palielināt navigācijas precizitāti</translation>
 <translation id="5992285135956208197">Grafikas dokuments</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb
index 1db7cc3..e76ee837 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Langkau ke item boleh fokus seterusnya</translation>
 <translation id="2770781857296573485">Masukkan penerokaan kumpulan</translation>
 <translation id="2777845298774924149">Keluar</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Seperti biasa, anda boleh menghantar terus maklum balas dengan menekan Carian+a, kemudian i. Kami mengalu-alukan pendapat daripada anda.</translation>
 <translation id="2800204403141299078">Tiada lagi unsur yang berbeza.</translation>
 <translation id="2800780099804980316">Tiada tajuk tahap 1 terdahulu.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Dialog</translation>
 <translation id="5963413905009737549">Bahagian</translation>
 <translation id="5968607524793740041">Paparkan menu konteks</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{yang mengandungi # item}other{yang mengandungi # item}}</translation>
 <translation id="5981446804259161541">Sian Cerah</translation>
 <translation id="5983179082906765664">Tingkatkan kebutiran navigasi</translation>
 <translation id="5992285135956208197">Dokumen grafik</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb
index b3503da..30e768fc 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Springen naar volgend actief item</translation>
 <translation id="2770781857296573485">Groepsverkenning openen</translation>
 <translation id="2777845298774924149">Afgesloten</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Zoals altijd kun je ons feedback sturen door op Zoeken + a en vervolgens i te drukken. We willen graag wat van je horen.</translation>
 <translation id="2800204403141299078">Niet meer verschillende elementen.</translation>
 <translation id="2800780099804980316">Geen vorige kop voor niveau 1.</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Dialoogvenster</translation>
 <translation id="5963413905009737549">Sectie</translation>
 <translation id="5968607524793740041">Contextmenu weergeven</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{met # item}other{met # items}}</translation>
 <translation id="5981446804259161541">Lichtcyaan</translation>
 <translation id="5983179082906765664">Detailniveau van navigatie vergroten</translation>
 <translation id="5992285135956208197">Grafisch document</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb
index 2f023c3..a463a68 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Przejdź do następnego elementu, który można zaznaczyć</translation>
 <translation id="2770781857296573485">Otwórz poznawanie grup</translation>
 <translation id="2777845298774924149">Zamknięty</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+ #}few{+ #}many{+ #}other{+ #}}</translation>
 <translation id="2784959586797362050">Jak zwykle, możesz nam bezpośrednio przesłać opinię, naciskając klawisz wyszukiwania + A, a potem I. Chętnie poznamy Twoje zdanie.</translation>
 <translation id="2800204403141299078">Nie ma więcej różnych elementów.</translation>
 <translation id="2800780099804980316">Brak poprzedniego nagłówka poziomu 1.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Okno dialogowe</translation>
 <translation id="5963413905009737549">Sekcja</translation>
 <translation id="5968607524793740041">Pokaż menu kontekstowe</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{z # elementem}few{z # elementami}many{z # elementami}other{z # elementami}}</translation>
 <translation id="5981446804259161541">Jasny cyjan</translation>
 <translation id="5983179082906765664">Zwiększ dokładność nawigacji.</translation>
 <translation id="5992285135956208197">Dokument graficzny</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
index 91a3ecac..99dd1c4 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Ir para o próximo item focalizável</translation>
 <translation id="2770781857296573485">Entrar na exploração de grupo</translation>
 <translation id="2777845298774924149">Saiu</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Como sempre, você pode enviar seus comentários diretamente para nós pressionando "Pesquisa"+ "a" e depois a tecla "i". Estamos ansiosos para saber sua opinião.</translation>
 <translation id="2800204403141299078">Não há mais elementos diferentes.</translation>
 <translation id="2800780099804980316">Nenhum cabeçalho anterior de nível 1.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Diálogo</translation>
 <translation id="5963413905009737549">Seção</translation>
 <translation id="5968607524793740041">Mostrar menu de contexto</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{com # item}one{com # item}other{com # itens}}</translation>
 <translation id="5981446804259161541">Ciano-claro</translation>
 <translation id="5983179082906765664">Aumentar granularidade de navegação</translation>
 <translation id="5992285135956208197">Documento gráfico</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb
index d10c3ac..837e430 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Ir para o item a focar seguinte</translation>
 <translation id="2770781857296573485">Entrar na exploração de grupos</translation>
 <translation id="2777845298774924149">Saiu</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{mais de #}other{mais de #}}</translation>
 <translation id="2784959586797362050">Como sempre, pode enviar-nos os seus comentários diretamente ao premir Pesquisar + a e, em seguida, i. Estamos ansiosos por saber a sua opinião.</translation>
 <translation id="2800204403141299078">Não existem mais elementos diferentes.</translation>
 <translation id="2800780099804980316">Não existe nenhum título de nível 1 anterior.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Caixa de diálogo</translation>
 <translation id="5963413905009737549">Secção</translation>
 <translation id="5968607524793740041">Mostrar menu de contexto</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{com # item}other{com # itens}}</translation>
 <translation id="5981446804259161541">Turquesa-claro</translation>
 <translation id="5983179082906765664">Aumentar nível de detalhe da navegação</translation>
 <translation id="5992285135956208197">Documento de gráficos</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb
index 1b87df4..0ab3664 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Salt la elementul focalizabil următor</translation>
 <translation id="2770781857296573485">Trece la explorarea grupului</translation>
 <translation id="2777845298774924149">S-a ieșit</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}few{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Ca de obicei, ne poți trimite feedback direct apăsând pe tasta de căutare + a, apoi pe i. Ne-ar face plăcere să ne contactezi.</translation>
 <translation id="2800204403141299078">Nu mai există elemente diferite.</translation>
 <translation id="2800780099804980316">Nu există un titlu de nivel 1 anterior.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Dialog</translation>
 <translation id="5963413905009737549">Secțiune</translation>
 <translation id="5968607524793740041">Afișează meniul contextual</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{cu # element}few{cu # elemente}other{cu # de elemente}}</translation>
 <translation id="5981446804259161541">Cyan deschis</translation>
 <translation id="5983179082906765664">Creșteți granularitatea de navigare</translation>
 <translation id="5992285135956208197">Document grafic</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb
index 456431f..7d20f1a 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Перейти к следующему активируемому элементу</translation>
 <translation id="2770781857296573485">Ввести значение для перехода по группам</translation>
 <translation id="2777845298774924149">Окно закрыто.</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}few{+#}many{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Мы будем рады узнать ваше мнение! Чтобы отправить отзыв, нажмите Поиск + Ф, затем Ш.</translation>
 <translation id="2800204403141299078">Отличающихся элементов больше нет.</translation>
 <translation id="2800780099804980316">Предыдущего заголовка первого уровня нет.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Диалоговое окно</translation>
 <translation id="5963413905009737549">Раздел</translation>
 <translation id="5968607524793740041">Показать контекстное меню</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{с # элементом}one{с # элементом}few{с # элементами}many{с # элементами}other{с # элемента}}</translation>
 <translation id="5981446804259161541">Светлый циан</translation>
 <translation id="5983179082906765664">Увеличить точность навигации</translation>
 <translation id="5992285135956208197">Графический документ</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb
index 6998bf1..9c44bf5 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Prejsť na ďalšiu zamerateľnú položku</translation>
 <translation id="2770781857296573485">Vstúpiť do režimu preskúmavania skupín</translation>
 <translation id="2777845298774924149">Ukončené</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}few{+#}many{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Spätnú väzbu nám môžete ako zvyčajne odoslať priamo tak, že stlačíte kombináciu klávesov Hľadať + A a potom kláves I. Tešíme sa na váš názor.</translation>
 <translation id="2800204403141299078">Žiadne ďalšie odlišné prvky</translation>
 <translation id="2800780099804980316">Žiadny predchádzajúci nadpis 1. úrovne</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Dialógové okno</translation>
 <translation id="5963413905009737549">Sekcia</translation>
 <translation id="5968607524793740041">Zobraziť kontextovú ponuku</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{s # položkou}few{s # položkami}many{with # items}other{s # položkami}}</translation>
 <translation id="5981446804259161541">Svetloazúrová</translation>
 <translation id="5983179082906765664">Zvýšiť podrobnosť navigácie</translation>
 <translation id="5992285135956208197">Grafický dokument</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb
index f7fd909..cf6a57e80 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Pomik na naslednji element, ki ga je mogoče izbrati</translation>
 <translation id="2770781857296573485">Vnos raziskovanja skupine</translation>
 <translation id="2777845298774924149">Izhod</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}two{+#}few{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Povratne informacije nam lahko kot vedno pošljete neposredno tako, da pritisnete tipko za iskanje in tipko A, nato pa tipko I. Želimo slišati vaše mnenje.</translation>
 <translation id="2800204403141299078">Ni več različnih elementov.</translation>
 <translation id="2800780099804980316">Ni prejšnjega naslova na ravni 1.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Pogovorno okno</translation>
 <translation id="5963413905009737549">Razdelek</translation>
 <translation id="5968607524793740041">Prikaz kontekstnega menija</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{z # elementom}one{s/z # elementom}two{s/z # elementoma}few{s/z # elementi}other{s/z # elementi}}</translation>
 <translation id="5981446804259161541">Svetlo cianova</translation>
 <translation id="5983179082906765664">Povečanje razdrobljenosti krmarjenja</translation>
 <translation id="5992285135956208197">Grafični dokument</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb
index 751201f3..ab8ff62 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">Прелазак на следећу ставку која може да се фокусира</translation>
 <translation id="2770781857296573485">Улазак у истраживање група</translation>
 <translation id="2777845298774924149">Изашли сте</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{и још #}one{и још #}few{и још #}other{и још #}}</translation>
 <translation id="2784959586797362050">Као и увек, можете директно да нам пошаљете повратне информације ако притиснете тастер за претрагу+a, па онда i. Једва чекамо да нам се јавите.</translation>
 <translation id="2800204403141299078">Нема више различитих елемената.</translation>
 <translation id="2800780099804980316">Нема претходног заглавља 1. нивоа.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">Дијалог</translation>
 <translation id="5963413905009737549">Одељак</translation>
 <translation id="5968607524793740041">Прикажи контекстуални мени</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{са # ставком}one{са # ставком}few{са # ставке}other{са # ставки}}</translation>
 <translation id="5981446804259161541">Светлоцијан</translation>
 <translation id="5983179082906765664">Повећавање грануларности навигације</translation>
 <translation id="5992285135956208197">Графички документ</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb
index 8c0574e..1777fdef 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb
@@ -233,6 +233,7 @@
 <translation id="27527859628328957">கவனிக்க வேண்டிய அடுத்த உருப்படிக்குத் தாவு</translation>
 <translation id="2770781857296573485">குழு ஆராய்ச்சியில் நுழை</translation>
 <translation id="2777845298774924149">வெளியேறிவிட்டது</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">எப்போதும்போல் தேடல்+ a விசைகளை ஒன்றாக அழுத்தி, பின்னர் i விசையை அழுத்தி எங்களுக்கு நேரடியாகக் கருத்தை அனுப்பலாம். உங்கள் கருத்தைக் கேட்பதற்கு ஆவலாய் உள்ளோம்.</translation>
 <translation id="2800204403141299078">மேலும் வேறுபட்ட கூறுகள் இல்லை.</translation>
 <translation id="2800780099804980316">முந்தைய 1 ஆம் நிலை தலைப்பு இல்லை.</translation>
@@ -715,6 +716,7 @@
 <translation id="5956928062748260866">உரையாடல்</translation>
 <translation id="5963413905009737549">பிரிவு</translation>
 <translation id="5968607524793740041">சூழல் மெனுவைக் காட்டு</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{# உருப்படியுடன்}other{# உருப்படிகளுடன்}}</translation>
 <translation id="5981446804259161541">லைட் சையன்</translation>
 <translation id="5983179082906765664">வழிசெலுத்தும் நுணுக்கத்தை அதிகரி</translation>
 <translation id="5992285135956208197">கிராஃபிக்ஸ் ஆவணம்</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
index a1dd4e0..b2dde804 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">ข้ามไปยังรายการที่โฟกัสได้ถัดไป</translation>
 <translation id="2770781857296573485">ป้อนการสำรวจกลุ่ม</translation>
 <translation id="2777845298774924149">ออกแล้ว</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation>
 <translation id="2784959586797362050">คุณส่งความคิดเห็นถึงเราได้ตามปกติด้วยการกด Search+a แล้วกด i เรายินดีอย่างยิ่งที่จะได้รับฟังความคิดเห็นจากคุณ</translation>
 <translation id="2800204403141299078">ไม่มีองค์ประกอบที่ต่างกันเพิ่มเติม</translation>
 <translation id="2800780099804980316">ไม่มีส่วนหัวระดับ 1 ก่อนหน้า</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">ช่องโต้ตอบ</translation>
 <translation id="5963413905009737549">ส่วน</translation>
 <translation id="5968607524793740041">แสดงเมนูตามบริบท</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{ที่มี # รายการ}other{ที่มี # รายการ}}</translation>
 <translation id="5981446804259161541">สีฟ้าอ่อน</translation>
 <translation id="5983179082906765664">เพิ่มความละเอียดในการนำทาง</translation>
 <translation id="5992285135956208197">เอกสารกราฟิก</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb
index 11a02002..25b9705 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb
@@ -232,6 +232,7 @@
 <translation id="27527859628328957">Перейти до наступного інтерактивного елемента</translation>
 <translation id="2770781857296573485">Почати вивчення груп</translation>
 <translation id="2777845298774924149">Ви закрили</translation>
+<translation id="2783001728278437613">{COUNT,plural, =1{+#}one{+#}few{+#}many{+#}other{+#}}</translation>
 <translation id="2784959586797362050">Надішліть нам відгук, натиснувши комбінацію клавіш пошуку+a, а потім – клавішу i. Нас цікавить ваша думка.</translation>
 <translation id="2800204403141299078">Інших несхожих елементів немає.</translation>
 <translation id="2800780099804980316">Немає попереднього заголовка рівня 1.</translation>
@@ -714,6 +715,7 @@
 <translation id="5956928062748260866">Діалогове вікно</translation>
 <translation id="5963413905009737549">Розділ</translation>
 <translation id="5968607524793740041">Показати контекстне меню</translation>
+<translation id="597121107011153418">{COUNT,plural, =1{з # елементом}one{з # елементом}few{з # елементами}many{з # елементами}other{з # елемента}}</translation>
 <translation id="5981446804259161541">Світло-блакитний</translation>
 <translation id="5983179082906765664">Збільшити деталізацію навігації</translation>
 <translation id="5992285135956208197">Графічний документ</translation>
diff --git a/chrome/browser/resources/chromeos/login/images/1x/updating_1x.svg b/chrome/browser/resources/chromeos/login/images/1x/updating_1x.svg
index e5fc6590..0480007 100644
--- a/chrome/browser/resources/chromeos/login/images/1x/updating_1x.svg
+++ b/chrome/browser/resources/chromeos/login/images/1x/updating_1x.svg
@@ -1,21 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="264" height="264">
-  <defs>
-    <path id="a" d="M50 256h164V9H50z"/>
-  </defs>
-  <g fill="none" fill-rule="evenodd">
-    <path fill="#EA4335" d="M96.554 122.415l6.413-6.413a2.269 2.269 0 0 1 3.207 0l6.412 6.413a2.267 2.267 0 0 1 0 3.207l-6.412 6.414a2.269 2.269 0 0 1-3.207 0l-6.413-6.413a2.269 2.269 0 0 1 0-3.208"/>
-    <path fill="#FBBC04" d="M133.766 101.358a5.667 5.667 0 0 1 0-8.016l4.81-4.81a5.67 5.67 0 0 1 8.016 8.016l-4.81 4.81a5.67 5.67 0 0 1-8.016 0"/>
-    <path fill="#34A853" d="M151.384 117.925l11.947 3.2c1.686.453 2.25 2.56 1.016 3.795l-8.745 8.745c-1.235 1.234-3.342.67-3.794-1.016l-3.2-11.947c-.453-1.686 1.09-3.23 2.776-2.777"/>
-    <path stroke="#4285F4" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="M212 174c0 44.183-35.817 80-80 80s-80-35.817-80-80 35.817-80 80-80 80 35.817 80 80z"/>
-    <mask id="b" fill="#fff">
-      <use xlink:href="#a"/>
-    </mask>
-    <path fill="#4285F4" d="M127 190.423h10v-40h-10z" mask="url(#b)"/>
-    <path stroke="#4285F4" stroke-width="10" d="M112.139 177.605L132 197.422l19.862-19.817" mask="url(#b)"/>
-    <path fill="#EA4335" d="M171.605 81.336l-6.413-6.413a2.268 2.268 0 0 1 0-3.206l6.413-6.413a2.269 2.269 0 0 1 3.207 0l6.412 6.413a2.266 2.266 0 0 1 0 3.206l-6.412 6.413a2.269 2.269 0 0 1-3.207 0" mask="url(#b)"/>
-    <path fill="#FBBC04" d="M105.869 47.101l-6.413-6.413a2.268 2.268 0 0 1 0-3.206l6.413-6.413a2.269 2.269 0 0 1 3.207 0l6.413 6.413a2.268 2.268 0 0 1 0 3.206l-6.413 6.413a2.267 2.267 0 0 1-3.207 0" mask="url(#b)"/>
-    <path fill="#4285F4" d="M129.012 64.68a5.667 5.667 0 0 1 0-8.017l4.81-4.81a5.67 5.67 0 0 1 8.016 8.016l-4.81 4.81a5.667 5.667 0 0 1-8.016 0" mask="url(#b)"/>
-    <path fill="#34A853" d="M87.07 74.282l11.947 3.201c1.686.452 2.25 2.56 1.016 3.794l-8.745 8.745c-1.235 1.234-3.342.67-3.794-1.016L84.293 77.06c-.452-1.686 1.09-3.229 2.777-2.777M159 16a7 7 0 1 1-14 0 7 7 0 0 1 14 0" mask="url(#b)"/>
-    <path d="M0 0h264v264H0z"/>
-  </g>
-</svg>
+<svg height="264" viewBox="0 0 264 264" width="264" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(52 9)"><path d="m44.5542 113.4155 6.413-6.413c.885-.885 2.321-.885 3.207 0l6.412 6.413c.886.886.886 2.321 0 3.207l-6.412 6.413c-.886.885-2.322.885-3.207 0l-6.413-6.413c-.885-.886-.885-2.321 0-3.207" fill="#ea4335"/><path d="m81.7661 92.3578c-2.214-2.214-2.214-5.803 0-8.016l4.81-4.81c2.213-2.214 5.802-2.214 8.016 0 2.213 2.214 2.213 5.803 0 8.016l-4.81 4.81c-2.214 2.213-5.803 2.213-8.016 0" fill="#fbbc04"/><path d="m99.3843 108.9247 11.947 3.201c1.686.452 2.25 2.559 1.016 3.794l-8.745 8.745c-1.235 1.234-3.342.67-3.794-1.016l-3.201-11.947c-.452-1.686 1.091-3.229 2.777-2.777" fill="#34a853"/><path d="m162 164.9999c0 45.287569-36.712431 82-82 82-45.2875695 0-82-36.712431-82-82s36.7124305-82 82-82c45.287569 0 82 36.712431 82 82zm-4 0c0-43.078431-34.921569-78-78-78-43.0784305 0-78 34.921569-78 78s34.9215695 78 78 78c43.078431 0 78-34.921569 78-78z" fill="#4285f4"/><path d="m75 176.371v-34.948h10v34.947l11.33-11.304 7.063 7.079-23.393 23.341-23.393-23.341 7.063-7.079z" fill="#4285f4"/><path d="m119.605 72.3359-6.413-6.413c-.885-.885-.885-2.321 0-3.206l6.413-6.413c.885-.885 2.321-.885 3.207 0l6.412 6.413c.886.885.886 2.321 0 3.206l-6.412 6.413c-.886.885-2.322.885-3.207 0" fill="#ea4335"/><path d="m53.8687 38.101-6.413-6.413c-.885-.885-.885-2.321 0-3.206l6.413-6.413c.886-.885 2.321-.885 3.207 0l6.413 6.413c.885.885.885 2.321 0 3.206l-6.413 6.413c-.886.886-2.321.886-3.207 0" fill="#fbbc04"/><path d="m77.0122 55.6791c-2.214-2.213-2.214-5.802 0-8.016l4.81-4.81c2.213-2.213 5.802-2.213 8.016 0 2.213 2.214 2.213 5.803 0 8.016l-4.81 4.81c-2.214 2.214-5.803 2.214-8.016 0" fill="#4285f4"/><path d="m35.0698 65.2822 11.947 3.201c1.686.452 2.25 2.559 1.016 3.794l-8.745 8.745c-1.235 1.234-3.342.67-3.794-1.016l-3.201-11.947c-.452-1.686 1.091-3.229 2.777-2.777m71.9302-58.2823c0 3.866-3.134 7-7 7s-7-3.134-7-7 3.134-7 7-7 7 3.134 7 7" fill="#34a853"/></g></svg>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/images/2x/updating_2x.svg b/chrome/browser/resources/chromeos/login/images/2x/updating_2x.svg
index 19009c6..0480007 100644
--- a/chrome/browser/resources/chromeos/login/images/2x/updating_2x.svg
+++ b/chrome/browser/resources/chromeos/login/images/2x/updating_2x.svg
@@ -1,21 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="528" height="528">
-  <defs>
-    <path id="a" d="M100 512h328V18H100z"/>
-  </defs>
-  <g fill="none" fill-rule="evenodd">
-    <path fill="#EA4335" d="M193.108 244.831l12.826-12.826a4.538 4.538 0 0 1 6.414 0l12.824 12.826a4.534 4.534 0 0 1 0 6.414l-12.824 12.826a4.538 4.538 0 0 1-6.414 0l-12.826-12.826a4.538 4.538 0 0 1 0-6.414"/>
-    <path fill="#FBBC04" d="M267.532 202.716c-4.428-4.428-4.428-11.606 0-16.032l9.62-9.62c4.426-4.428 11.604-4.428 16.032 0 4.426 4.428 4.426 11.606 0 16.032l-9.62 9.62c-4.428 4.426-11.606 4.426-16.032 0"/>
-    <path fill="#34A853" d="M302.769 235.85l23.894 6.401c3.372.904 4.5 5.118 2.032 7.588l-17.49 17.49c-2.47 2.468-6.684 1.34-7.588-2.032l-6.402-23.894c-.904-3.372 2.182-6.458 5.554-5.554"/>
-    <path stroke="#4285F4" stroke-linecap="round" stroke-linejoin="round" stroke-width="8" d="M424 348c0 88.366-71.634 160-160 160s-160-71.634-160-160 71.634-160 160-160 160 71.634 160 160z"/>
-    <mask id="b" fill="#fff">
-      <use xlink:href="#a"/>
-    </mask>
-    <path fill="#4285F4" d="M254 380.846h20v-80h-20z" mask="url(#b)"/>
-    <path stroke="#4285F4" stroke-width="20" d="M224.277 355.211l39.722 39.634 39.724-39.634" mask="url(#b)"/>
-    <path fill="#EA4335" d="M343.21 162.672l-12.826-12.826a4.535 4.535 0 0 1 0-6.412l12.826-12.826a4.538 4.538 0 0 1 6.414 0l12.824 12.826a4.531 4.531 0 0 1 0 6.412l-12.824 12.826a4.538 4.538 0 0 1-6.414 0" mask="url(#b)"/>
-    <path fill="#FBBC04" d="M211.737 94.202l-12.826-12.826a4.535 4.535 0 0 1 0-6.412l12.826-12.826a4.538 4.538 0 0 1 6.414 0l12.826 12.826a4.535 4.535 0 0 1 0 6.412l-12.826 12.826a4.534 4.534 0 0 1-6.414 0" mask="url(#b)"/>
-    <path fill="#4285F4" d="M258.024 129.358c-4.428-4.426-4.428-11.604 0-16.032l9.62-9.62c4.426-4.426 11.604-4.426 16.032 0 4.426 4.428 4.426 11.606 0 16.032l-9.62 9.62c-4.428 4.428-11.606 4.428-16.032 0" mask="url(#b)"/>
-    <path fill="#34A853" d="M174.14 148.564l23.894 6.402c3.372.904 4.5 5.118 2.032 7.588l-17.49 17.49c-2.47 2.468-6.684 1.34-7.588-2.032l-6.402-23.894c-.904-3.372 2.182-6.458 5.554-5.554M318 32c0 7.732-6.268 14-14 14s-14-6.268-14-14 6.268-14 14-14 14 6.268 14 14" mask="url(#b)"/>
-    <path d="M0 0h528v528H0z"/>
-  </g>
-</svg>
+<svg height="264" viewBox="0 0 264 264" width="264" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(52 9)"><path d="m44.5542 113.4155 6.413-6.413c.885-.885 2.321-.885 3.207 0l6.412 6.413c.886.886.886 2.321 0 3.207l-6.412 6.413c-.886.885-2.322.885-3.207 0l-6.413-6.413c-.885-.886-.885-2.321 0-3.207" fill="#ea4335"/><path d="m81.7661 92.3578c-2.214-2.214-2.214-5.803 0-8.016l4.81-4.81c2.213-2.214 5.802-2.214 8.016 0 2.213 2.214 2.213 5.803 0 8.016l-4.81 4.81c-2.214 2.213-5.803 2.213-8.016 0" fill="#fbbc04"/><path d="m99.3843 108.9247 11.947 3.201c1.686.452 2.25 2.559 1.016 3.794l-8.745 8.745c-1.235 1.234-3.342.67-3.794-1.016l-3.201-11.947c-.452-1.686 1.091-3.229 2.777-2.777" fill="#34a853"/><path d="m162 164.9999c0 45.287569-36.712431 82-82 82-45.2875695 0-82-36.712431-82-82s36.7124305-82 82-82c45.287569 0 82 36.712431 82 82zm-4 0c0-43.078431-34.921569-78-78-78-43.0784305 0-78 34.921569-78 78s34.9215695 78 78 78c43.078431 0 78-34.921569 78-78z" fill="#4285f4"/><path d="m75 176.371v-34.948h10v34.947l11.33-11.304 7.063 7.079-23.393 23.341-23.393-23.341 7.063-7.079z" fill="#4285f4"/><path d="m119.605 72.3359-6.413-6.413c-.885-.885-.885-2.321 0-3.206l6.413-6.413c.885-.885 2.321-.885 3.207 0l6.412 6.413c.886.885.886 2.321 0 3.206l-6.412 6.413c-.886.885-2.322.885-3.207 0" fill="#ea4335"/><path d="m53.8687 38.101-6.413-6.413c-.885-.885-.885-2.321 0-3.206l6.413-6.413c.886-.885 2.321-.885 3.207 0l6.413 6.413c.885.885.885 2.321 0 3.206l-6.413 6.413c-.886.886-2.321.886-3.207 0" fill="#fbbc04"/><path d="m77.0122 55.6791c-2.214-2.213-2.214-5.802 0-8.016l4.81-4.81c2.213-2.213 5.802-2.213 8.016 0 2.213 2.214 2.213 5.803 0 8.016l-4.81 4.81c-2.214 2.214-5.803 2.214-8.016 0" fill="#4285f4"/><path d="m35.0698 65.2822 11.947 3.201c1.686.452 2.25 2.559 1.016 3.794l-8.745 8.745c-1.235 1.234-3.342.67-3.794-1.016l-3.201-11.947c-.452-1.686 1.091-3.229 2.777-2.777m71.9302-58.2823c0 3.866-3.134 7-7 7s-7-3.134-7-7 3.134-7 7-7 7 3.134 7 7" fill="#34a853"/></g></svg>
\ No newline at end of file
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html
index 32ecca3..2af6a914 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html
@@ -18,7 +18,7 @@
         on-click="onClickAppManagement_">
       </cr-link-row>
     </div>
-    <template is="dom-if" route-path="/app-management">
+    <template is="dom-if" route-path="/app-management" no-search>
       <settings-subpage
         associated-control="[[$$('#appManagement')]]"
         page-title="$i18n{appManagementTitle}">
diff --git a/chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h b/chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h
index 2356dd8..d927832a 100644
--- a/chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h
+++ b/chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h
@@ -14,7 +14,7 @@
 #include "chrome/browser/sharing/sharing_metrics.h"
 #include "chrome/browser/sharing/sharing_service.h"
 #include "chrome/browser/sharing/sharing_ui_controller.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "content/public/browser/web_contents_user_data.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/sharing/shared_clipboard/shared_clipboard_ui_controller.h b/chrome/browser/sharing/shared_clipboard/shared_clipboard_ui_controller.h
index 0832fb3..3e4e053 100644
--- a/chrome/browser/sharing/shared_clipboard/shared_clipboard_ui_controller.h
+++ b/chrome/browser/sharing/shared_clipboard/shared_clipboard_ui_controller.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/sharing/sharing_ui_controller.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "content/public/browser/web_contents_user_data.h"
 
 namespace content {
diff --git a/chrome/browser/sharing/sharing_ui_controller.cc b/chrome/browser/sharing/sharing_ui_controller.cc
index d38fc70..919ccfc 100644
--- a/chrome/browser/sharing/sharing_ui_controller.cc
+++ b/chrome/browser/sharing/sharing_ui_controller.cc
@@ -83,9 +83,7 @@
   if (!window)
     return;
 
-  auto* icon_container = window->GetOmniboxPageActionIconContainer();
-  if (icon_container)
-    icon_container->UpdatePageActionIcon(GetIconType());
+  window->UpdatePageActionIcon(GetIconType());
 }
 
 void SharingUiController::OnDialogClosed(SharingDialog* dialog) {
diff --git a/chrome/browser/sharing/sharing_ui_controller.h b/chrome/browser/sharing/sharing_ui_controller.h
index 94633a9..df3601e 100644
--- a/chrome/browser/sharing/sharing_ui_controller.h
+++ b/chrome/browser/sharing/sharing_ui_controller.h
@@ -17,7 +17,7 @@
 #include "chrome/browser/sharing/sharing_constants.h"
 #include "chrome/browser/sharing/sharing_metrics.h"
 #include "chrome/browser/sharing/sharing_service.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "components/sync_device_info/device_info.h"
 #include "ui/gfx/image/image.h"
 
diff --git a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
index 005e41f..6ab8a1f 100644
--- a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
@@ -4,16 +4,14 @@
 
 #include "base/command_line.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "build/build_config.h"
-#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/sync/test/integration/autofill_helper.h"
 #include "chrome/browser/sync/test/integration/bookmarks_helper.h"
 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
 #include "chrome/browser/sync/test/integration/secondary_account_helper.h"
 #include "chrome/browser/sync/test/integration/single_client_status_change_checker.h"
-#include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
 #include "chrome/browser/sync/test/integration/sync_integration_test_util.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/sync/test/integration/wallet_helper.h"
@@ -33,12 +31,10 @@
 #include "components/autofill/core/common/autofill_switches.h"
 #include "components/prefs/pref_service.h"
 #include "components/sync/base/model_type.h"
-#include "components/sync/driver/profile_sync_service.h"
-#include "components/sync/driver/sync_driver_switches.h"
+#include "components/sync/driver/sync_service.h"
 #include "components/sync/protocol/model_type_state.pb.h"
 #include "components/sync/test/fake_server/fake_server.h"
 #include "components/webdata/common/web_data_service_consumer.h"
-#include "content/public/browser/notification_service.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 using autofill::AutofillMetadata;
@@ -108,19 +104,10 @@
   DISALLOW_COPY_AND_ASSIGN(AutofillWebDataServiceConsumer);
 };
 
-class PersonalDataLoadedObserverMock
-    : public autofill::PersonalDataManagerObserver {
- public:
-  PersonalDataLoadedObserverMock() {}
-  ~PersonalDataLoadedObserverMock() override {}
-
-  MOCK_METHOD0(OnPersonalDataChanged, void());
-};
-
 class WaitForNextWalletUpdateChecker : public StatusChangeChecker,
                                        public syncer::SyncServiceObserver {
  public:
-  explicit WaitForNextWalletUpdateChecker(syncer::ProfileSyncService* service)
+  explicit WaitForNextWalletUpdateChecker(syncer::SyncService* service)
       : service_(service),
         initial_marker_(GetInitialMarker(service)),
         scoped_observer_(this) {
@@ -151,8 +138,7 @@
   }
 
  private:
-  static std::string GetInitialMarker(
-      const syncer::ProfileSyncService* service) {
+  static std::string GetInitialMarker(const syncer::SyncService* service) {
     // GetLastCycleSnapshot() returns by value, so make sure to capture it for
     // iterator use.
     const syncer::SyncCycleSnapshot snap =
@@ -166,9 +152,9 @@
     return marker_it->second;
   }
 
-  const syncer::ProfileSyncService* service_;
+  const syncer::SyncService* service_;
   const std::string initial_marker_;
-  ScopedObserver<syncer::ProfileSyncService, WaitForNextWalletUpdateChecker>
+  ScopedObserver<syncer::SyncService, WaitForNextWalletUpdateChecker>
       scoped_observer_;
 };
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 46be75af..052db221 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -58,8 +58,6 @@
     "autofill/chrome_autofill_client.h",
     "autofill/payments/autofill_dialog_models.cc",
     "autofill/payments/autofill_dialog_models.h",
-    "autofill/payments/autofill_ui_util.cc",
-    "autofill/payments/autofill_ui_util.h",
     "autofill/payments/create_card_unmask_prompt_view.h",
     "autofill/payments/credit_card_scanner_controller.cc",
     "autofill/payments/credit_card_scanner_controller.h",
@@ -1006,7 +1004,7 @@
       "omnibox/clipboard_utils.h",
       "omnibox/omnibox_theme.cc",
       "omnibox/omnibox_theme.h",
-      "page_action/page_action_icon_container.h",
+      "page_action/page_action_icon_type.h",
       "page_info/page_info_dialog.cc",
       "page_info/page_info_dialog.h",
       "page_info/page_info_infobar_delegate.cc",
@@ -2466,8 +2464,6 @@
 
     if (use_x11) {
       sources += [
-        "views/frame/browser_desktop_window_tree_host_x11.cc",
-        "views/frame/browser_desktop_window_tree_host_x11.h",
         "views/frame/global_menu_bar_registrar_x11.cc",
         "views/frame/global_menu_bar_registrar_x11.h",
         "views/frame/global_menu_bar_x11.cc",
@@ -2489,13 +2485,21 @@
       ]
     }
     if (use_ozone) {
-      sources += [
-        "views/frame/browser_desktop_window_tree_host_platform.cc",
-        "views/frame/browser_desktop_window_tree_host_platform.h",
-        "views/frame/native_browser_frame_factory_ozone.cc",
-      ]
+      if (!is_desktop_linux) {
+        sources += [
+          "views/frame/browser_desktop_window_tree_host_platform.cc",
+          "views/frame/browser_desktop_window_tree_host_platform.h",
+        ]
+      }
+      sources += [ "views/frame/native_browser_frame_factory_ozone.cc" ]
       deps += [ "//ui/platform_window" ]
     }
+    if (is_desktop_linux) {
+      sources += [
+        "views/frame/browser_desktop_window_tree_host_linux.cc",
+        "views/frame/browser_desktop_window_tree_host_linux.h",
+      ]
+    }
     if (use_gtk) {
       # This is the only component that can interact with gtk.
       deps += [ "//chrome/browser/ui/libgtkui" ]
diff --git a/chrome/browser/ui/autofill/payments/autofill_ui_util.cc b/chrome/browser/ui/autofill/payments/autofill_ui_util.cc
deleted file mode 100644
index 38aba3e3..0000000
--- a/chrome/browser/ui/autofill/payments/autofill_ui_util.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2019 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/ui/autofill/payments/autofill_ui_util.h"
-
-#include <memory>
-
-#include "build/build_config.h"
-#include "chrome/browser/ui/location_bar/location_bar.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
-#include "components/autofill/core/common/autofill_payments_features.h"
-
-#if !defined(OS_ANDROID)
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_window.h"
-#endif
-
-namespace autofill {
-
-void UpdatePageActionIcon(PageActionIconType icon_type,
-                          content::WebContents* web_contents) {
-#if !defined(OS_ANDROID)
-  Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
-  if (!browser)
-    return;
-
-  // If feature is enabled, icon will be in the
-  // ToolbarPageActionIconContainerView.
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillEnableToolbarStatusChip)) {
-    PageActionIconContainer* toolbar_page_action_container =
-        browser->window()->GetToolbarPageActionIconContainer();
-    if (!toolbar_page_action_container)
-      return;
-
-    toolbar_page_action_container->UpdatePageActionIcon(icon_type);
-  } else {
-    // Otherwise the icon will be in the LocationBar.
-    LocationBar* location_bar = browser->window()->GetLocationBar();
-    if (!location_bar)
-      return;
-
-    switch (icon_type) {
-      case PageActionIconType::kLocalCardMigration:
-        location_bar->UpdateLocalCardMigrationIcon();
-        break;
-      case PageActionIconType::kSaveCard:
-        location_bar->UpdateSaveCreditCardIcon();
-        break;
-      case PageActionIconType::kManagePasswords:
-        browser->window()
-            ->GetOmniboxPageActionIconContainer()
-            ->UpdatePageActionIcon(icon_type);
-        break;
-      default:
-        NOTREACHED();
-    }
-  }
-#endif
-}
-
-}  // namespace autofill
diff --git a/chrome/browser/ui/autofill/payments/autofill_ui_util.h b/chrome/browser/ui/autofill/payments/autofill_ui_util.h
deleted file mode 100644
index 5a1fcef75..0000000
--- a/chrome/browser/ui/autofill/payments/autofill_ui_util.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2019 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_UI_AUTOFILL_PAYMENTS_AUTOFILL_UI_UTIL_H_
-#define CHROME_BROWSER_UI_AUTOFILL_PAYMENTS_AUTOFILL_UI_UTIL_H_
-
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
-#include "content/public/browser/web_contents.h"
-
-namespace autofill {
-
-// TODO(crbug.com/932818): Clean this up and move the logic to
-// ToolbarPageActionContainerView once the status chip is fully
-// launched.
-
-// Update the state of related page action icon icon.
-void UpdatePageActionIcon(PageActionIconType icon_type,
-                          content::WebContents* web_contents);
-
-}  // namespace autofill
-
-#endif  // CHROME_BROWSER_UI_AUTOFILL_PAYMENTS_AUTOFILL_UI_UTIL_H_
diff --git a/chrome/browser/ui/autofill/payments/local_card_migration_bubble_controller_impl.cc b/chrome/browser/ui/autofill/payments/local_card_migration_bubble_controller_impl.cc
index 7510b44..443c1df 100644
--- a/chrome/browser/ui/autofill/payments/local_card_migration_bubble_controller_impl.cc
+++ b/chrome/browser/ui/autofill/payments/local_card_migration_bubble_controller_impl.cc
@@ -8,7 +8,6 @@
 
 #include "chrome/browser/autofill/strike_database_factory.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/autofill/payments/autofill_ui_util.h"
 #include "chrome/browser/ui/autofill/payments/local_card_migration_bubble.h"
 #include "chrome/browser/ui/autofill/payments/payments_ui_constants.h"
 #include "chrome/browser/ui/browser.h"
@@ -185,8 +184,11 @@
 }
 
 void LocalCardMigrationBubbleControllerImpl::UpdateLocalCardMigrationIcon() {
-  ::autofill::UpdatePageActionIcon(PageActionIconType::kLocalCardMigration,
-                                   web_contents());
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
+  if (browser) {
+    browser->window()->UpdatePageActionIcon(
+        PageActionIconType::kLocalCardMigration);
+  }
 }
 
 void LocalCardMigrationBubbleControllerImpl::AddStrikesForBubbleClose() {
diff --git a/chrome/browser/ui/autofill/payments/local_card_migration_dialog_controller_impl.cc b/chrome/browser/ui/autofill/payments/local_card_migration_dialog_controller_impl.cc
index f561725..a6f32e4 100644
--- a/chrome/browser/ui/autofill/payments/local_card_migration_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/payments/local_card_migration_dialog_controller_impl.cc
@@ -19,7 +19,6 @@
 #include "build/build_config.h"
 #include "chrome/browser/autofill/strike_database_factory.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/autofill/payments/autofill_ui_util.h"
 #include "chrome/browser/ui/autofill/payments/local_card_migration_dialog.h"
 #include "chrome/browser/ui/autofill/payments/local_card_migration_dialog_factory.h"
 #include "chrome/browser/ui/autofill/payments/local_card_migration_dialog_state.h"
@@ -266,8 +265,11 @@
 }
 
 void LocalCardMigrationDialogControllerImpl::UpdateLocalCardMigrationIcon() {
-  ::autofill::UpdatePageActionIcon(PageActionIconType::kLocalCardMigration,
-                                   web_contents());
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
+  if (browser) {
+    browser->window()->UpdatePageActionIcon(
+        PageActionIconType::kLocalCardMigration);
+  }
 }
 
 bool LocalCardMigrationDialogControllerImpl::HasFailedCard() const {
diff --git a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc
index 401f3b59..03884bd 100644
--- a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc
+++ b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc
@@ -17,7 +17,6 @@
 #include "chrome/browser/signin/signin_ui_util.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
-#include "chrome/browser/ui/autofill/payments/autofill_ui_util.h"
 #include "chrome/browser/ui/autofill/payments/payments_ui_constants.h"
 #include "chrome/browser/ui/autofill/payments/save_card_bubble_view.h"
 #include "chrome/browser/ui/autofill/payments/save_card_ui.h"
@@ -26,7 +25,7 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/location_bar/location_bar.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/sync/sync_promo_ui.h"
 #include "chrome/common/url_constants.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
@@ -807,8 +806,9 @@
 }
 
 void SaveCardBubbleControllerImpl::UpdateSaveCardIcon() {
-  ::autofill::UpdatePageActionIcon(PageActionIconType::kSaveCard,
-                                   web_contents());
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
+  if (browser)
+    browser->window()->UpdatePageActionIcon(PageActionIconType::kSaveCard);
 }
 
 void SaveCardBubbleControllerImpl::OpenUrl(const GURL& url) {
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 17f2591a..d2aef8a 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -134,7 +134,7 @@
 #include "chrome/browser/ui/global_error/global_error_service_factory.h"
 #include "chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h"
 #include "chrome/browser/ui/location_bar/location_bar.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/permission_bubble/chooser_bubble_delegate.h"
 #include "chrome/browser/ui/search/search_tab_helper.h"
 #include "chrome/browser/ui/singleton_tabs.h"
@@ -908,8 +908,7 @@
 }
 
 void Browser::OnFindBarVisibilityChanged() {
-  window()->GetOmniboxPageActionIconContainer()->UpdatePageActionIcon(
-      PageActionIconType::kFind);
+  window()->UpdatePageActionIcon(PageActionIconType::kFind);
   command_controller_->FindBarVisibilityChanged();
 }
 
diff --git a/chrome/browser/ui/browser_window.h b/chrome/browser/ui/browser_window.h
index e069a01..f9d7947 100644
--- a/chrome/browser/ui/browser_window.h
+++ b/chrome/browser/ui/browser_window.h
@@ -20,7 +20,7 @@
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/exclusive_access/exclusive_access_bubble_type.h"
 #include "chrome/browser/ui/in_product_help/in_product_help.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/common/buildflags.h"
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/translate/core/common/translate_errors.h"
@@ -40,7 +40,6 @@
 class FindBar;
 class GURL;
 class LocationBar;
-class PageActionIconContainer;
 class SharingUiController;
 class StatusBubble;
 class ToolbarActionsBar;
@@ -245,14 +244,12 @@
   // be called after the TabStripModel has an active tab.
   virtual void SetContentsSize(const gfx::Size& size) = 0;
 
-  // Returns the container of page action icons.
-  virtual PageActionIconContainer* GetOmniboxPageActionIconContainer() = 0;
+  // Updates the visual state of the specified page action icon if present on
+  // the window. Returns whether any change occurred.
+  virtual bool UpdatePageActionIcon(PageActionIconType type) = 0;
 
-  // Returns the container of toolbar page action icons. The page action icon
-  // container above is in the omnibox. The toolbar page action icon container
-  // is in the toolbar which contains user-account-related data icons and the
-  // profile avatar icon.
-  virtual PageActionIconContainer* GetToolbarPageActionIconContainer() = 0;
+  // Executes the action for the specified page action icon.
+  virtual void ExecutePageActionIconForTesting(PageActionIconType type) = 0;
 
   // Returns the location bar.
   virtual LocationBar* GetLocationBar() const = 0;
diff --git a/chrome/browser/ui/intent_picker_tab_helper.cc b/chrome/browser/ui/intent_picker_tab_helper.cc
index 496e2f9..d3f38a7 100644
--- a/chrome/browser/ui/intent_picker_tab_helper.cc
+++ b/chrome/browser/ui/intent_picker_tab_helper.cc
@@ -7,7 +7,6 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
 
 IntentPickerTabHelper::~IntentPickerTabHelper() = default;
 
@@ -22,8 +21,7 @@
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
   if (!browser)
     return;
-  browser->window()->GetOmniboxPageActionIconContainer()->UpdatePageActionIcon(
-      PageActionIconType::kIntentPicker);
+  browser->window()->UpdatePageActionIcon(PageActionIconType::kIntentPicker);
 }
 
 IntentPickerTabHelper::IntentPickerTabHelper(content::WebContents* web_contents)
diff --git a/chrome/browser/ui/layout_constants.cc b/chrome/browser/ui/layout_constants.cc
index 2561162b..f20c885 100644
--- a/chrome/browser/ui/layout_constants.cc
+++ b/chrome/browser/ui/layout_constants.cc
@@ -47,11 +47,6 @@
       return 16;
     case LOCATION_BAR_BUBBLE_FONT_VERTICAL_PADDING:
       return 2;
-    case LOCATION_BAR_BUBBLE_CORNER_RADIUS:
-      // TODO(tapted): This should match BubbleBorder::GetBorderRadius() once
-      // MD is default for secondary UI everywhere. That is, the constant should
-      // move to views/layout_provider.h so that all bubbles are consistent.
-      return 8;
     case LOCATION_BAR_BUBBLE_ANCHOR_VERTICAL_INSET:
       return 1;
     case LOCATION_BAR_CHILD_INTERIOR_PADDING:
diff --git a/chrome/browser/ui/layout_constants.h b/chrome/browser/ui/layout_constants.h
index 663a6973..d77dcc3 100644
--- a/chrome/browser/ui/layout_constants.h
+++ b/chrome/browser/ui/layout_constants.h
@@ -44,9 +44,6 @@
   // contained text.
   LOCATION_BAR_BUBBLE_FONT_VERTICAL_PADDING,
 
-  // The corner radius used for the location bar bubble.
-  LOCATION_BAR_BUBBLE_CORNER_RADIUS,
-
   // The vertical inset to apply to the bounds of a location bar bubble's anchor
   // view, to bring the bubble closer to the anchor.  This compensates for the
   // space between the bottoms of most such views and the visible bottoms of the
diff --git a/chrome/browser/ui/location_bar/location_bar.h b/chrome/browser/ui/location_bar/location_bar.h
index 7217f7f..40f3e17 100644
--- a/chrome/browser/ui/location_bar/location_bar.h
+++ b/chrome/browser/ui/location_bar/location_bar.h
@@ -61,12 +61,6 @@
   // Updates the state of the images showing the content settings status.
   virtual void UpdateContentSettingsIcons() = 0;
 
-  // Updates the visibility and toggled state of the save credit card icon.
-  virtual void UpdateSaveCreditCardIcon() = 0;
-
-  // Updates the visibility and toggled state of the local card migration icon.
-  virtual void UpdateLocalCardMigrationIcon() = 0;
-
   // Updates the visibility of the bookmark star.
   virtual void UpdateBookmarkStarVisibility() = 0;
 
diff --git a/chrome/browser/ui/page_action/page_action_icon_container.h b/chrome/browser/ui/page_action/page_action_icon_container.h
deleted file mode 100644
index b99822e..0000000
--- a/chrome/browser/ui/page_action/page_action_icon_container.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2018 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_UI_PAGE_ACTION_PAGE_ACTION_ICON_CONTAINER_H_
-#define CHROME_BROWSER_UI_PAGE_ACTION_PAGE_ACTION_ICON_CONTAINER_H_
-
-enum class PageActionIconType {
-  // TODO(https://crbug.com/788051): Migrate page action icon update methods out
-  // of LocationBar to this interface.
-  kFind,
-  kLocalCardMigration,
-  kManagePasswords,
-  kIntentPicker,
-  kPwaInstall,
-  kReaderMode,
-  kSaveCard,
-  kSendTabToSelf,
-  kSharedClipboard,
-  kTranslate,
-  kZoom,
-  kNativeFileSystemAccess,
-  kClickToCall,
-  kCookieControls,
-};
-
-class PageActionIconContainer {
- public:
-  virtual ~PageActionIconContainer() {}
-
-  // Signals a page action icon to update its visual state if it is present in
-  // the browser window.
-  virtual void UpdatePageActionIcon(PageActionIconType type) = 0;
-
-  virtual void ExecutePageActionIconForTesting(PageActionIconType type) = 0;
-};
-
-#endif  // CHROME_BROWSER_UI_PAGE_ACTION_PAGE_ACTION_ICON_CONTAINER_H_
diff --git a/chrome/browser/ui/page_action/page_action_icon_type.h b/chrome/browser/ui/page_action/page_action_icon_type.h
new file mode 100644
index 0000000..9a43f3c
--- /dev/null
+++ b/chrome/browser/ui/page_action/page_action_icon_type.h
@@ -0,0 +1,25 @@
+// Copyright 2019 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_UI_PAGE_ACTION_PAGE_ACTION_ICON_TYPE_H_
+#define CHROME_BROWSER_UI_PAGE_ACTION_PAGE_ACTION_ICON_TYPE_H_
+
+enum class PageActionIconType {
+  kFind,
+  kLocalCardMigration,
+  kManagePasswords,
+  kIntentPicker,
+  kPwaInstall,
+  kReaderMode,
+  kSaveCard,
+  kSendTabToSelf,
+  kSharedClipboard,
+  kTranslate,
+  kZoom,
+  kNativeFileSystemAccess,
+  kClickToCall,
+  kCookieControls,
+};
+
+#endif  // CHROME_BROWSER_UI_PAGE_ACTION_PAGE_ACTION_ICON_TYPE_H_
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
index 469db2c..b0fe834 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/signin/signin_ui_util.h"
-#include "chrome/browser/ui/autofill/payments/autofill_ui_util.h"
 #include "chrome/browser/ui/browser_command_controller.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -24,7 +23,7 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/location_bar/location_bar.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/passwords/credential_leak_dialog_controller_impl.h"
 #include "chrome/browser/ui/passwords/credential_manager_dialog_controller_impl.h"
 #include "chrome/browser/ui/passwords/manage_passwords_icon_view.h"
@@ -545,9 +544,7 @@
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
   if (!browser)
     return;
-
-  ::autofill::UpdatePageActionIcon(PageActionIconType::kManagePasswords,
-                                   web_contents());
+  browser->window()->UpdatePageActionIcon(PageActionIconType::kManagePasswords);
 }
 
 AccountChooserPrompt* ManagePasswordsUIController::CreateAccountChooser(
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc
index 7245e65..5a643d8 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc
@@ -450,26 +450,21 @@
             ->local_card_migration_dialog_view());
   }
 
-  LocalCardMigrationIconView* GetLocalCardMigrationIconView(
-      bool icon_in_status_chip) {
-    LocalCardMigrationIconView* icon_view = nullptr;
-    if (!browser())
-      return icon_view;
-
+  PageActionIconView* GetLocalCardMigrationIconView() {
     BrowserView* browser_view =
         BrowserView::GetBrowserViewForBrowser(browser());
-    if (icon_in_status_chip) {
-      ToolbarPageActionIconContainerView*
-          toolbar_page_action_icon_container_view =
-              browser_view->toolbar()->toolbar_page_action_container();
-      icon_view = toolbar_page_action_icon_container_view
-                      ->local_card_migration_icon_view();
+    PageActionIconView* icon =
+        browser_view->toolbar_button_provider()->GetPageActionIconView(
+            PageActionIconType::kLocalCardMigration);
+    if (base::FeatureList::IsEnabled(
+            features::kAutofillEnableToolbarStatusChip)) {
+      EXPECT_TRUE(
+          browser_view->toolbar()->toolbar_page_action_container()->Contains(
+              icon));
     } else {
-      LocationBarView* location_bar_view = browser_view->GetLocationBarView();
-      icon_view = location_bar_view->local_card_migration_icon_view();
+      EXPECT_TRUE(browser_view->GetLocationBarView()->Contains(icon));
     }
-    CHECK(icon_view);
-    return icon_view;
+    return icon;
   }
 
   views::View* GetCloseButton() {
@@ -693,8 +688,7 @@
   SaveLocalCard(kSecondCardNumber);
   UseCardAndWaitForMigrationOffer(kFirstCardNumber);
 
-  EXPECT_TRUE(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/false)
-                  ->GetVisible());
+  EXPECT_TRUE(GetLocalCardMigrationIconView()->GetVisible());
 }
 
 // Ensures that clicking on the credit card icon in the omnibox reopens the
@@ -708,7 +702,7 @@
   UseCardAndWaitForMigrationOffer(kFirstCardNumber);
   ClickOnDialogViewAndWait(GetCloseButton(),
                            GetLocalCardMigrationOfferBubbleViews());
-  ClickOnView(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/false));
+  ClickOnView(GetLocalCardMigrationIconView());
 
   // Clicking the icon should reshow the bubble.
   EXPECT_TRUE(
@@ -921,7 +915,7 @@
   ClickOnDialogViewAndWait(GetCloseButton(),
                            GetLocalCardMigrationOfferBubbleViews());
   base::HistogramTester histogram_tester;
-  ClickOnView(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/false));
+  ClickOnView(GetLocalCardMigrationIconView());
 
   // Clicking the icon should reshow the bubble.
   EXPECT_TRUE(
@@ -947,8 +941,7 @@
   SaveLocalCard(kSecondCardNumber);
   UseCardAndWaitForMigrationOffer(kFirstCardNumber);
 
-  EXPECT_TRUE(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/true)
-                  ->GetVisible());
+  EXPECT_TRUE(GetLocalCardMigrationIconView()->GetVisible());
 }
 
 // TODO(crbug.com/999510): Crashes flakily on Linux.
@@ -969,7 +962,7 @@
   UseCardAndWaitForMigrationOffer(kFirstCardNumber);
   ClickOnDialogViewAndWait(GetCloseButton(),
                            GetLocalCardMigrationOfferBubbleViews());
-  ClickOnView(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/true));
+  ClickOnView(GetLocalCardMigrationIconView());
 
   // Clicking the icon should reshow the bubble.
   EXPECT_TRUE(
@@ -1020,8 +1013,7 @@
                   ->ActivateFirstInactiveBubbleForAccessibility());
 
   // Ensure the bubble's widget refreshed appropriately.
-  EXPECT_TRUE(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/true)
-                  ->GetVisible());
+  EXPECT_TRUE(GetLocalCardMigrationIconView()->GetVisible());
   EXPECT_TRUE(widget->IsVisible());
   EXPECT_TRUE(widget->IsActive());
 }
@@ -1035,8 +1027,7 @@
   UseCardAndWaitForMigrationOffer(kFirstCardNumber);
 
   // Ensures flow is triggered, and bubble and icon view are visible.
-  EXPECT_TRUE(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/true)
-                  ->GetVisible());
+  EXPECT_TRUE(GetLocalCardMigrationIconView()->GetVisible());
   EXPECT_TRUE(GetLocalCardMigrationOfferBubbleViews()->GetVisible());
 
   AddTabAtIndex(1, GURL("http://example.com/"), ui::PAGE_TRANSITION_TYPED);
@@ -1044,15 +1035,13 @@
   tab_model->ActivateTabAt(1, {TabStripModel::GestureType::kOther});
 
   // Ensures bubble and icon go away if user navigates to another tab.
-  EXPECT_FALSE(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/true)
-                   ->GetVisible());
+  EXPECT_FALSE(GetLocalCardMigrationIconView()->GetVisible());
   EXPECT_FALSE(GetLocalCardMigrationOfferBubbleViews());
 
   tab_model->ActivateTabAt(0, {TabStripModel::GestureType::kOther});
 
   // If the user navigates back, shows only the icon not the bubble.
-  EXPECT_TRUE(GetLocalCardMigrationIconView(/*icon_in_status_chip=*/true)
-                  ->GetVisible());
+  EXPECT_TRUE(GetLocalCardMigrationIconView()->GetVisible());
   EXPECT_FALSE(GetLocalCardMigrationOfferBubbleViews());
 }
 #endif  // !defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.cc
index 91927c9..c2fcfb4 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.cc
@@ -21,12 +21,10 @@
 
 LocalCardMigrationIconView::LocalCardMigrationIconView(
     CommandUpdater* command_updater,
-    PageActionIconView::Delegate* delegate,
-    const gfx::FontList& font_list)
+    PageActionIconView::Delegate* delegate)
     : PageActionIconView(command_updater,
                          IDC_MIGRATE_LOCAL_CREDIT_CARD_FOR_PAGE,
-                         delegate,
-                         font_list) {
+                         delegate) {
   DCHECK(delegate);
   SetID(VIEW_ID_MIGRATE_LOCAL_CREDIT_CARD_BUTTON);
   SetUpForInOutAnimation();
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.h b/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.h
index dcee49e0..84b9099 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.h
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.h
@@ -19,8 +19,7 @@
 class LocalCardMigrationIconView : public PageActionIconView {
  public:
   LocalCardMigrationIconView(CommandUpdater* command_updater,
-                             PageActionIconView::Delegate* delegate,
-                             const gfx::FontList& font_list);
+                             PageActionIconView::Delegate* delegate);
   ~LocalCardMigrationIconView() override;
 
   // PageActionIconView:
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
index 61cc5ce..2555f0c 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
+++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
@@ -687,28 +687,20 @@
     return static_cast<SaveCardBubbleViews*>(save_card_bubble_view);
   }
 
-  SaveCardIconView* GetSaveCardIconView() {
-    if (!browser())
-      return nullptr;
-
-    SaveCardIconView* icon_view = nullptr;
+  PageActionIconView* GetSaveCardIconView() {
     BrowserView* browser_view =
         BrowserView::GetBrowserViewForBrowser(browser());
+    PageActionIconView* icon =
+        browser_view->toolbar_button_provider()->GetPageActionIconView(
+            PageActionIconType::kSaveCard);
     if (base::FeatureList::IsEnabled(
             features::kAutofillEnableToolbarStatusChip)) {
-      ToolbarPageActionIconContainerView*
-          toolbar_page_action_icon_container_view =
-              browser_view->toolbar()->toolbar_page_action_container();
-      DCHECK(toolbar_page_action_icon_container_view->save_card_icon_view());
-      icon_view =
-          toolbar_page_action_icon_container_view->save_card_icon_view();
+      DCHECK(browser_view->toolbar()->toolbar_page_action_container()->Contains(
+          icon));
     } else {
-      LocationBarView* location_bar_view = browser_view->GetLocationBarView();
-      DCHECK(location_bar_view->save_credit_card_icon_view());
-      icon_view = location_bar_view->save_credit_card_icon_view();
+      DCHECK(browser_view->GetLocationBarView()->Contains(icon));
     }
-
-    return icon_view;
+    return icon;
   }
 
   void OpenSettingsFromManageCardsPrompt() {
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_icon_view.cc b/chrome/browser/ui/views/autofill/payments/save_card_icon_view.cc
index 3f50598..05c4210 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_icon_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/save_card_icon_view.cc
@@ -18,12 +18,10 @@
 namespace autofill {
 
 SaveCardIconView::SaveCardIconView(CommandUpdater* command_updater,
-                                   PageActionIconView::Delegate* delegate,
-                                   const gfx::FontList& font_list)
+                                   PageActionIconView::Delegate* delegate)
     : PageActionIconView(command_updater,
                          IDC_SAVE_CREDIT_CARD_FOR_PAGE,
-                         delegate,
-                         font_list) {
+                         delegate) {
   DCHECK(delegate);
   SetID(VIEW_ID_SAVE_CREDIT_CARD_BUTTON);
 
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_icon_view.h b/chrome/browser/ui/views/autofill/payments/save_card_icon_view.h
index aa5735e..209309f 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_icon_view.h
+++ b/chrome/browser/ui/views/autofill/payments/save_card_icon_view.h
@@ -20,8 +20,7 @@
 class SaveCardIconView : public PageActionIconView {
  public:
   SaveCardIconView(CommandUpdater* command_updater,
-                   PageActionIconView::Delegate* delegate,
-                   const gfx::FontList& font_list);
+                   PageActionIconView::Delegate* delegate);
   ~SaveCardIconView() override;
 
   // PageActionIconView:
@@ -35,8 +34,6 @@
   const gfx::VectorIcon& GetVectorIcon() const override;
 
  private:
-  friend class SaveCardBubbleViewsFullFormBrowserTest;
-
   SaveCardBubbleController* GetController() const;
 
   // gfx::AnimationDelegate:
diff --git a/chrome/browser/ui/views/chrome_layout_provider.cc b/chrome/browser/ui/views/chrome_layout_provider.cc
index 3df5ea62..ff20cea 100644
--- a/chrome/browser/ui/views/chrome_layout_provider.cc
+++ b/chrome/browser/ui/views/chrome_layout_provider.cc
@@ -198,40 +198,6 @@
   return false;
 }
 
-int ChromeLayoutProvider::GetCornerRadiusMetric(
-    views::EmphasisMetric emphasis_metric,
-    const gfx::Size& size) const {
-  switch (emphasis_metric) {
-    case views::EMPHASIS_NONE:
-      NOTREACHED();
-      return 0;
-    case views::EMPHASIS_LOW:
-    case views::EMPHASIS_MEDIUM:
-      return 4;
-    case views::EMPHASIS_HIGH:
-      return 8;
-    case views::EMPHASIS_MAXIMUM:
-      return std::min(size.width(), size.height()) / 2;
-  }
-}
-
-int ChromeLayoutProvider::GetShadowElevationMetric(
-    views::EmphasisMetric emphasis_metric) const {
-  switch (emphasis_metric) {
-    case views::EMPHASIS_NONE:
-      NOTREACHED();
-      return 0;
-    case views::EMPHASIS_LOW:
-      return 1;
-    case views::EMPHASIS_MEDIUM:
-      return 2;
-    case views::EMPHASIS_HIGH:
-      return 3;
-    case views::EMPHASIS_MAXIMUM:
-      return 16;
-  }
-}
-
 gfx::ShadowValues ChromeLayoutProvider::MakeShadowValues(int elevation,
                                                          SkColor color) const {
   return gfx::ShadowValue::MakeRefreshShadowValues(elevation, color);
diff --git a/chrome/browser/ui/views/chrome_layout_provider.h b/chrome/browser/ui/views/chrome_layout_provider.h
index b76e680..38f8b19 100644
--- a/chrome/browser/ui/views/chrome_layout_provider.h
+++ b/chrome/browser/ui/views/chrome_layout_provider.h
@@ -92,10 +92,6 @@
   int GetDistanceMetric(int metric) const override;
   int GetSnappedDialogWidth(int min_width) const override;
   const views::TypographyProvider& GetTypographyProvider() const override;
-  int GetCornerRadiusMetric(views::EmphasisMetric emphasis_metric,
-                            const gfx::Size& size = gfx::Size()) const override;
-  int GetShadowElevationMetric(
-      views::EmphasisMetric emphasis_metric) const override;
   gfx::ShadowValues MakeShadowValues(int elevation,
                                      SkColor color) const override;
 
diff --git a/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc b/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc
index db00154c..266d4172 100644
--- a/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc
@@ -74,8 +74,6 @@
       views::BoxLayout::Orientation::kVertical,
       provider->GetInsetsMetric(views::InsetsMetric::INSETS_DIALOG),
       provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)));
-  set_margins(provider->GetDialogInsetsForContentType(
-      views::DialogContentType::TEXT, views::DialogContentType::TEXT));
 
   const base::string16 device_type = ui::GetChromeOSDeviceName();
   const base::string16 message =
diff --git a/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc b/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc
index 06436c44..7988367 100644
--- a/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc
@@ -85,8 +85,6 @@
       views::BoxLayout::Orientation::kVertical,
       provider->GetInsetsMetric(views::InsetsMetric::INSETS_DIALOG),
       provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)));
-  set_margins(provider->GetDialogInsetsForContentType(
-      views::DialogContentType::TEXT, views::DialogContentType::TEXT));
 
   crostini::CrostiniRegistryService* registry =
       crostini::CrostiniRegistryServiceFactory::GetForProfile(profile);
diff --git a/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc b/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc
index 38230ee..65e0e25 100644
--- a/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc
@@ -126,8 +126,6 @@
       views::BoxLayout::Orientation::kVertical,
       provider->GetInsetsMetric(views::InsetsMetric::INSETS_DIALOG),
       provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)));
-  set_margins(provider->GetDialogInsetsForContentType(
-      views::DialogContentType::TEXT, views::DialogContentType::TEXT));
 
   const base::string16 device_type = ui::GetChromeOSDeviceName();
   const base::string16 message =
diff --git a/chrome/browser/ui/views/crostini/crostini_upgrade_container_view.cc b/chrome/browser/ui/views/crostini/crostini_upgrade_container_view.cc
index ddba91ac..8f891f81 100644
--- a/chrome/browser/ui/views/crostini/crostini_upgrade_container_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_upgrade_container_view.cc
@@ -100,7 +100,7 @@
 }
 
 bool CrostiniUpgradeContainerView::ShouldShowCloseButton() const {
-  return true;
+  return false;
 }
 
 gfx::Size CrostiniUpgradeContainerView::CalculatePreferredSize() const {
@@ -124,8 +124,6 @@
       views::BoxLayout::Orientation::kVertical,
       provider->GetInsetsMetric(views::InsetsMetric::INSETS_DIALOG),
       kDialogSpacingVertical));
-  set_margins(provider->GetDialogInsetsForContentType(
-      views::DialogContentType::TEXT, views::DialogContentType::TEXT));
 
   const base::string16 message =
       l10n_util::GetStringUTF16(IDS_CROSTINI_UPGRADING_SUBTEXT);
diff --git a/chrome/browser/ui/views/crostini/crostini_upgrade_view.cc b/chrome/browser/ui/views/crostini/crostini_upgrade_view.cc
index 3891572..421512c2 100644
--- a/chrome/browser/ui/views/crostini/crostini_upgrade_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_upgrade_view.cc
@@ -75,8 +75,6 @@
       views::BoxLayout::Orientation::kVertical,
       provider->GetInsetsMetric(views::InsetsMetric::INSETS_DIALOG),
       provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)));
-  set_margins(provider->GetDialogInsetsForContentType(
-      views::DialogContentType::TEXT, views::DialogContentType::TEXT));
 
   const base::string16 message =
       l10n_util::GetStringUTF16(IDS_CROSTINI_TERMINA_UPDATE_OFFLINE);
diff --git a/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc b/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc
index 9bba096e..8bf76a78 100644
--- a/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc
+++ b/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc
@@ -178,7 +178,6 @@
           PageActionIconType::kPwaInstall);
   PageActionIconView* icon =
       browser_view->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
           ->GetPageActionIconView(PageActionIconType::kPwaInstall);
 
   g_bubble_ = new PWAConfirmationBubbleView(
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_linux.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_linux.cc
new file mode 100644
index 0000000..d2073245
--- /dev/null
+++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_linux.cc
@@ -0,0 +1,88 @@
+// Copyright 2019 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/ui/views/frame/browser_desktop_window_tree_host_linux.h"
+
+#include <utility>
+
+#include "base/macros.h"
+#include "chrome/browser/themes/theme_service.h"
+#include "chrome/browser/themes/theme_service_factory.h"
+#include "chrome/browser/ui/views/frame/browser_frame.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHostLinux, public:
+
+BrowserDesktopWindowTreeHostLinux::BrowserDesktopWindowTreeHostLinux(
+    views::internal::NativeWidgetDelegate* native_widget_delegate,
+    views::DesktopNativeWidgetAura* desktop_native_widget_aura,
+    BrowserView* browser_view,
+    BrowserFrame* browser_frame)
+    : DesktopWindowTreeHostLinuxImpl(native_widget_delegate,
+                                     desktop_native_widget_aura) {
+#if defined(USE_X11)
+  browser_view_ = browser_view;
+#endif
+  browser_frame->set_frame_type(browser_frame->UseCustomFrame()
+                                    ? views::Widget::FrameType::kForceCustom
+                                    : views::Widget::FrameType::kForceNative);
+}
+
+BrowserDesktopWindowTreeHostLinux::~BrowserDesktopWindowTreeHostLinux() {}
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHostLinux,
+//     BrowserDesktopWindowTreeHost implementation:
+
+views::DesktopWindowTreeHost*
+BrowserDesktopWindowTreeHostLinux::AsDesktopWindowTreeHost() {
+  return this;
+}
+
+int BrowserDesktopWindowTreeHostLinux::GetMinimizeButtonOffset() const {
+  return 0;
+}
+
+bool BrowserDesktopWindowTreeHostLinux::UsesNativeSystemMenu() const {
+  return false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHostLinux,
+//     DesktopWindowTreeHostLinuxImpl implementation:
+
+void BrowserDesktopWindowTreeHostLinux::Init(
+    const views::Widget::InitParams& params) {
+  DesktopWindowTreeHostLinuxImpl::Init(std::move(params));
+
+#if defined(USE_X11)
+  // We have now created our backing X11 window. We now need to (possibly)
+  // alert Unity that there's a menu bar attached to it.
+  global_menu_bar_x11_ =
+      std::make_unique<GlobalMenuBarX11>(browser_view_, this);
+#endif
+}
+
+void BrowserDesktopWindowTreeHostLinux::CloseNow() {
+#if defined(USE_X11)
+  global_menu_bar_x11_.reset();
+#endif
+  DesktopWindowTreeHostLinuxImpl::CloseNow();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHost, public:
+
+// static
+BrowserDesktopWindowTreeHost*
+BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
+    views::internal::NativeWidgetDelegate* native_widget_delegate,
+    views::DesktopNativeWidgetAura* desktop_native_widget_aura,
+    BrowserView* browser_view,
+    BrowserFrame* browser_frame) {
+  return new BrowserDesktopWindowTreeHostLinux(native_widget_delegate,
+                                               desktop_native_widget_aura,
+                                               browser_view, browser_frame);
+}
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_linux.h b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_linux.h
new file mode 100644
index 0000000..5ceccb1
--- /dev/null
+++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_linux.h
@@ -0,0 +1,69 @@
+// Copyright 2019 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_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_LINUX_H_
+#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_LINUX_H_
+
+#include "base/macros.h"
+#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
+
+#if defined(USE_X11)
+#include "chrome/browser/ui/views/frame/global_menu_bar_x11.h"  // nogncheck
+#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"  // nogncheck
+#else
+#include "ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h"  // nogncheck
+#endif
+
+// TODO(https://crbug.com/990756): Make sure correct
+// DesktopWindowTreeHost is used while the DWTHX11 is being refactored and
+// merged into the DWTHLinux and the DWTHPlatform. Non-Ozone X11 must use
+// the DWTHX11 now, but Ozone must use DWTHLinux. Remove this guard once
+// DWTHX11 is finally merged into DWTHPlatform and DWTHLinux.
+#if defined(USE_X11)
+using DesktopWindowTreeHostLinuxImpl = views::DesktopWindowTreeHostX11;
+#else
+using DesktopWindowTreeHostLinuxImpl = views::DesktopWindowTreeHostLinux;
+#endif
+
+class BrowserFrame;
+class BrowserView;
+
+namespace views {
+class DesktopNativeWidgetAura;
+}
+
+class BrowserDesktopWindowTreeHostLinux
+    : public BrowserDesktopWindowTreeHost,
+      public DesktopWindowTreeHostLinuxImpl {
+ public:
+  BrowserDesktopWindowTreeHostLinux(
+      views::internal::NativeWidgetDelegate* native_widget_delegate,
+      views::DesktopNativeWidgetAura* desktop_native_widget_aura,
+      BrowserView* browser_view,
+      BrowserFrame* browser_frame);
+  ~BrowserDesktopWindowTreeHostLinux() override;
+
+ private:
+  // Overridden from BrowserDesktopWindowTreeHost:
+  DesktopWindowTreeHost* AsDesktopWindowTreeHost() override;
+  int GetMinimizeButtonOffset() const override;
+  bool UsesNativeSystemMenu() const override;
+
+  // Overridden from views::DesktopWindowTreeHostLinuxImpl:
+  void Init(const views::Widget::InitParams& params) override;
+  void CloseNow() override;
+
+#if defined(USE_X11)
+  BrowserView* browser_view_ = nullptr;
+
+  // Each browser frame maintains its own menu bar object because the lower
+  // level dbus protocol associates a xid to a menu bar; we can't map multiple
+  // xids to the same menu bar.
+  std::unique_ptr<GlobalMenuBarX11> global_menu_bar_x11_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(BrowserDesktopWindowTreeHostLinux);
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_LINUX_H_
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc
deleted file mode 100644
index 4251635..0000000
--- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2012 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/ui/views/frame/browser_desktop_window_tree_host_x11.h"
-
-#include <utility>
-
-#include "base/macros.h"
-#include "chrome/browser/themes/theme_service.h"
-#include "chrome/browser/themes/theme_service_factory.h"
-#include "chrome/browser/ui/views/frame/browser_frame.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
-
-////////////////////////////////////////////////////////////////////////////////
-// BrowserDesktopWindowTreeHostX11, public:
-
-BrowserDesktopWindowTreeHostX11::BrowserDesktopWindowTreeHostX11(
-    views::internal::NativeWidgetDelegate* native_widget_delegate,
-    views::DesktopNativeWidgetAura* desktop_native_widget_aura,
-    BrowserView* browser_view,
-    BrowserFrame* browser_frame)
-    : DesktopWindowTreeHostX11(native_widget_delegate,
-                               desktop_native_widget_aura),
-      browser_view_(browser_view) {
-  browser_frame->set_frame_type(browser_frame->UseCustomFrame()
-                                    ? views::Widget::FrameType::kForceCustom
-                                    : views::Widget::FrameType::kForceNative);
-}
-
-BrowserDesktopWindowTreeHostX11::~BrowserDesktopWindowTreeHostX11() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// BrowserDesktopWindowTreeHostX11,
-//     BrowserDesktopWindowTreeHost implementation:
-
-views::DesktopWindowTreeHost*
-    BrowserDesktopWindowTreeHostX11::AsDesktopWindowTreeHost() {
-  return this;
-}
-
-int BrowserDesktopWindowTreeHostX11::GetMinimizeButtonOffset() const {
-  return 0;
-}
-
-bool BrowserDesktopWindowTreeHostX11::UsesNativeSystemMenu() const {
-  return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// BrowserDesktopWindowTreeHostX11,
-//     views::DesktopWindowTreeHostX11 implementation:
-
-void BrowserDesktopWindowTreeHostX11::Init(
-    const views::Widget::InitParams& params) {
-  views::DesktopWindowTreeHostX11::Init(std::move(params));
-
-  // We have now created our backing X11 window. We now need to (possibly)
-  // alert Unity that there's a menu bar attached to it.
-  global_menu_bar_x11_ =
-      std::make_unique<GlobalMenuBarX11>(browser_view_, this);
-}
-
-void BrowserDesktopWindowTreeHostX11::CloseNow() {
-  global_menu_bar_x11_.reset();
-  DesktopWindowTreeHostX11::CloseNow();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// BrowserDesktopWindowTreeHost, public:
-
-// static
-BrowserDesktopWindowTreeHost*
-    BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
-        views::internal::NativeWidgetDelegate* native_widget_delegate,
-        views::DesktopNativeWidgetAura* desktop_native_widget_aura,
-        BrowserView* browser_view,
-        BrowserFrame* browser_frame) {
-  return new BrowserDesktopWindowTreeHostX11(native_widget_delegate,
-                                             desktop_native_widget_aura,
-                                             browser_view,
-                                             browser_frame);
-}
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.h b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.h
deleted file mode 100644
index 11ab3eff..0000000
--- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2012 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_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_X11_H_
-#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_X11_H_
-
-#include "base/macros.h"
-#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
-#include "chrome/browser/ui/views/frame/global_menu_bar_x11.h"
-#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
-
-class BrowserFrame;
-class BrowserView;
-
-namespace views {
-class DesktopNativeWidgetAura;
-}
-
-class BrowserDesktopWindowTreeHostX11
-    : public BrowserDesktopWindowTreeHost,
-      public views::DesktopWindowTreeHostX11 {
- public:
-  BrowserDesktopWindowTreeHostX11(
-      views::internal::NativeWidgetDelegate* native_widget_delegate,
-      views::DesktopNativeWidgetAura* desktop_native_widget_aura,
-      BrowserView* browser_view,
-      BrowserFrame* browser_frame);
-  ~BrowserDesktopWindowTreeHostX11() override;
-
- private:
-  // Overridden from BrowserDesktopWindowTreeHost:
-  DesktopWindowTreeHost* AsDesktopWindowTreeHost() override;
-  int GetMinimizeButtonOffset() const override;
-  bool UsesNativeSystemMenu() const override;
-
-  // Overridden from views::DesktopWindowTreeHostX11:
-  void Init(const views::Widget::InitParams& params) override;
-  void CloseNow() override;
-
-  BrowserView* browser_view_;
-
-  // Each browser frame maintains its own menu bar object because the lower
-  // level dbus protocol associates a xid to a menu bar; we can't map multiple
-  // xids to the same menu bar.
-  std::unique_ptr<GlobalMenuBarX11> global_menu_bar_x11_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserDesktopWindowTreeHostX11);
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_X11_H_
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
index 2e6ce8d..78d9bae 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
@@ -821,7 +821,6 @@
 
   PageActionIconView* GetPageActionIcon(PageActionIconType type) {
     return browser_view_->toolbar_button_provider()
-        ->GetOmniboxPageActionIconContainerView()
         ->GetPageActionIconView(type);
   }
 
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_browsertest.cc
index 0bbe7f5..d1ec73b 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_browsertest.cc
@@ -18,6 +18,9 @@
 #include "chrome/common/web_application_info.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/autofill/content/browser/content_autofill_driver.h"
+#include "components/autofill/core/browser/form_data_importer.h"
+#include "components/autofill/core/browser/payments/credit_card_save_manager.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "ui/base/theme_provider.h"
@@ -29,6 +32,8 @@
   ~BrowserNonClientFrameViewBrowserTest() override = default;
 
   void SetUp() override {
+    embedded_test_server()->ServeFilesFromSourceDirectory(
+        "components/test/data");
     ASSERT_TRUE(embedded_test_server()->Start());
 
     extensions::ExtensionBrowserTest::SetUp();
@@ -37,10 +42,13 @@
   // Note: A "bookmark app" is a type of hosted app. All of these tests apply
   // equally to hosted and bookmark apps, but it's easier to install a bookmark
   // app in a test.
-  void InstallAndLaunchBookmarkApp() {
+  void InstallAndLaunchBookmarkApp(
+      base::Optional<GURL> app_url = base::nullopt) {
+    if (!app_url)
+      app_url = GetAppURL();
     WebApplicationInfo web_app_info;
-    web_app_info.app_url = GetAppURL();
-    web_app_info.scope = GetAppURL().GetWithoutFilename();
+    web_app_info.app_url = *app_url;
+    web_app_info.scope = app_url->GetWithoutFilename();
     if (app_theme_color_)
       web_app_info.theme_color = *app_theme_color_;
 
@@ -51,16 +59,16 @@
         browser()->profile(), app);
     web_contents_ = app_browser_->tab_strip_model()->GetActiveWebContents();
     // Ensure the main page has loaded and is ready for ExecJs DOM manipulation.
-    ASSERT_TRUE(content::NavigateToURL(web_contents_, GetAppURL()));
+    ASSERT_TRUE(content::NavigateToURL(web_contents_, *app_url));
 
-    BrowserView* browser_view =
-        BrowserView::GetBrowserViewForBrowser(app_browser_);
-    app_frame_view_ = browser_view->frame()->GetFrameView();
+    app_browser_view_ = BrowserView::GetBrowserViewForBrowser(app_browser_);
+    app_frame_view_ = app_browser_view_->frame()->GetFrameView();
   }
 
  protected:
   base::Optional<SkColor> app_theme_color_ = SK_ColorBLUE;
   Browser* app_browser_ = nullptr;
+  BrowserView* app_browser_view_ = nullptr;
   content::WebContents* web_contents_ = nullptr;
   BrowserNonClientFrameView* app_frame_view_ = nullptr;
 
@@ -202,3 +210,49 @@
   EXPECT_EQ(app_frame_view_->GetFrameColor(), SK_ColorYELLOW);
   DCHECK_NE(*app_theme_color_, SK_ColorYELLOW);
 }
+
+class SaveCardOfferObserver
+    : public autofill::CreditCardSaveManager::ObserverForTest {
+ public:
+  explicit SaveCardOfferObserver(content::WebContents* web_contents) {
+    manager_ = autofill::ContentAutofillDriver::GetForRenderFrameHost(
+                   web_contents->GetMainFrame())
+                   ->autofill_manager()
+                   ->client()
+                   ->GetFormDataImporter()
+                   ->credit_card_save_manager_.get();
+    manager_->SetEventObserverForTesting(this);
+  }
+
+  ~SaveCardOfferObserver() override {
+    manager_->SetEventObserverForTesting(nullptr);
+  }
+
+  // CreditCardSaveManager::ObserverForTest:
+  void OnOfferLocalSave() override { run_loop_.Quit(); }
+
+  void Wait() { run_loop_.Run(); }
+
+ private:
+  autofill::CreditCardSaveManager* manager_ = nullptr;
+  base::RunLoop run_loop_;
+};
+
+// Tests that hosted app frames reflect the theme color set by HTML meta tags.
+IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewBrowserTest, SaveCardIcon) {
+  InstallAndLaunchBookmarkApp(embedded_test_server()->GetURL(
+      "/autofill/credit_card_upload_form_address_and_cc.html"));
+  ASSERT_TRUE(content::ExecJs(web_contents_, "fill_form.click();"));
+
+  content::TestNavigationObserver nav_observer(web_contents_);
+  SaveCardOfferObserver offer_observer(web_contents_);
+  ASSERT_TRUE(content::ExecJs(web_contents_, "submit.click();"));
+  nav_observer.Wait();
+  offer_observer.Wait();
+
+  PageActionIconView* icon =
+      app_browser_view_->toolbar_button_provider()->GetPageActionIconView(
+          PageActionIconType::kSaveCard);
+  EXPECT_TRUE(app_frame_view_->Contains(icon));
+  EXPECT_TRUE(icon->GetVisible());
+}
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 21f63cb..56050a2 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -946,7 +946,6 @@
       toolbar_button_provider()->GetAppMenuButton();
   bool app_menu_showing = app_menu_button && app_menu_button->IsMenuShowing();
   toolbar_button_provider()
-      ->GetOmniboxPageActionIconContainerView()
       ->ZoomChangedForActiveTab(can_show_bubble && !app_menu_showing);
 }
 
@@ -1100,12 +1099,14 @@
   toolbar_button_provider_ = provider;
 }
 
-PageActionIconContainer* BrowserView::GetOmniboxPageActionIconContainer() {
-  return toolbar_button_provider_->GetOmniboxPageActionIconContainerView();
+bool BrowserView::UpdatePageActionIcon(PageActionIconType type) {
+  PageActionIconView* icon =
+      toolbar_button_provider_->GetPageActionIconView(type);
+  return icon ? icon->Update() : false;
 }
 
-PageActionIconContainer* BrowserView::GetToolbarPageActionIconContainer() {
-  return toolbar_ ? toolbar_->toolbar_page_action_container() : nullptr;
+void BrowserView::ExecutePageActionIconForTesting(PageActionIconType type) {
+  toolbar_button_provider_->GetPageActionIconView(type)->ExecuteForTesting();
 }
 
 LocationBar* BrowserView::GetLocationBar() const {
@@ -1360,25 +1361,12 @@
     autofill::SaveCardBubbleController* controller,
     bool user_gesture) {
   autofill::BubbleType bubble_type = controller->GetBubbleType();
-  PageActionIconView* icon_view = nullptr;
+  PageActionIconView* icon_view =
+      toolbar_button_provider_->GetPageActionIconView(
+          PageActionIconType::kSaveCard);
   views::View* anchor_view =
       toolbar_button_provider_->GetAnchorView(PageActionIconType::kSaveCard);
 
-  if (base::FeatureList::IsEnabled(
-          autofill::features::kAutofillEnableToolbarStatusChip)) {
-    // Icon will be shown in the status chip when feature is enabled. The anchor
-    // view for the bubble is the status chip container.
-    ToolbarPageActionIconContainerView* toolbar_page_action_container =
-        toolbar_->toolbar_page_action_container();
-    icon_view = toolbar_page_action_container->GetIconView(
-        PageActionIconType::kSaveCard);
-  } else {
-    // Otherwise the bubble is anchored to the credit card icon in the location
-    // bar. This will be removed when the feature is fully enabled.
-    LocationBarView* location_bar = GetLocationBarView();
-    icon_view = location_bar->save_credit_card_icon_view();
-  }
-
   autofill::SaveCardBubbleViews* bubble = nullptr;
   switch (bubble_type) {
     case autofill::BubbleType::LOCAL_SAVE:
@@ -1438,16 +1426,14 @@
           toolbar_button_provider()->GetAnchorView(
               PageActionIconType::kSendTabToSelf),
           web_contents, controller);
-  views::BubbleDialogDelegateView::CreateBubble(bubble);
-  bubble->Show(send_tab_to_self::SendTabToSelfBubbleViewImpl::USER_GESTURE);
-
   PageActionIconView* icon_view =
       toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
           ->GetPageActionIconView(PageActionIconType::kSendTabToSelf);
   if (icon_view)
     bubble->SetHighlightedButton(icon_view);
 
+  views::BubbleDialogDelegateView::CreateBubble(bubble);
+  bubble->Show(send_tab_to_self::SendTabToSelfBubbleViewImpl::USER_GESTURE);
   return bubble;
 }
 
@@ -1455,24 +1441,15 @@
     content::WebContents* web_contents,
     autofill::LocalCardMigrationBubbleController* controller,
     bool user_gesture) {
-  views::View* anchor_view = toolbar_button_provider_->GetAnchorView(
-      PageActionIconType::kLocalCardMigration);
   autofill::LocalCardMigrationBubbleViews* bubble =
-      new autofill::LocalCardMigrationBubbleViews(anchor_view, web_contents,
-                                                  controller);
+      new autofill::LocalCardMigrationBubbleViews(
+          toolbar_button_provider_->GetAnchorView(
+              PageActionIconType::kLocalCardMigration),
+          web_contents, controller);
 
-  PageActionIconView* icon_view = nullptr;
-  if (base::FeatureList::IsEnabled(
-          autofill::features::kAutofillEnableToolbarStatusChip)) {
-    // Icon will be shown in the status chip when feature is enabled. The anchor
-    // view for the bubble is the status chip container.
-    icon_view = toolbar_->toolbar_page_action_container()->GetIconView(
-        PageActionIconType::kLocalCardMigration);
-  } else {
-    // Otherwise the bubble is anchored to the credit card icon in the location
-    // bar. This will be removed when the feature is fully enabled.
-    icon_view = GetLocationBarView()->local_card_migration_icon_view();
-  }
+  PageActionIconView* icon_view =
+      toolbar_button_provider_->GetPageActionIconView(
+          PageActionIconType::kLocalCardMigration);
   if (icon_view)
     bubble->SetHighlightedButton(icon_view);
 
@@ -1505,7 +1482,6 @@
 
   PageActionIconView* translate_icon =
       toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
           ->GetPageActionIconView(PageActionIconType::kTranslate);
   TranslateBubbleView::ShowBubble(
       toolbar_button_provider()->GetAnchorView(PageActionIconType::kTranslate),
@@ -3271,6 +3247,5 @@
 ///////////////////////////////////////////////////////////////////////////////
 // BrowserView, banners::AppBannerManager::Observer implementation:
 void BrowserView::OnInstallableWebAppStatusUpdated() {
-  GetOmniboxPageActionIconContainer()->UpdatePageActionIcon(
-      PageActionIconType::kPwaInstall);
+  UpdatePageActionIcon(PageActionIconType::kPwaInstall);
 }
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 3bf45ab..74908269 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -61,7 +61,6 @@
 class FullscreenControlHost;
 class InfoBarContainerView;
 class LocationBarView;
-class PageActionIconContainer;
 class StatusBubbleViews;
 class TabStrip;
 class TabStripRegionView;
@@ -342,8 +341,8 @@
   bool ShouldHideUIForFullscreen() const override;
   bool IsFullscreen() const override;
   bool IsFullscreenBubbleVisible() const override;
-  PageActionIconContainer* GetOmniboxPageActionIconContainer() override;
-  PageActionIconContainer* GetToolbarPageActionIconContainer() override;
+  bool UpdatePageActionIcon(PageActionIconType type) override;
+  void ExecutePageActionIconForTesting(PageActionIconType type) override;
   LocationBar* GetLocationBar() const override;
   void SetFocusToLocationBar(bool select_all) override;
   void UpdateReloadStopState(bool is_loading, bool force) override;
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc b/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc
index f9da929..71d5847 100644
--- a/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc
+++ b/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc
@@ -10,7 +10,6 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/views/frame/app_menu_button.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
-#include "chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h"
 #include "chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.h"
 #include "chrome/common/web_application_info.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -98,11 +97,9 @@
   if (!InstallAndLaunchWebApp())
     return;
 
-  views::View* omnibox_page_action_icon_container =
-      browser_view_->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView();
-  EXPECT_EQ(omnibox_page_action_icon_container->parent(),
-            web_app_frame_toolbar_);
+  views::View* page_action_icon_container =
+      web_app_frame_toolbar_->GetPageActionIconContainerForTesting();
+  EXPECT_EQ(page_action_icon_container->parent(), web_app_frame_toolbar_);
 
   views::View* menu_button =
       browser_view_->toolbar_button_provider()->GetAppMenuButton();
@@ -110,7 +107,7 @@
 
   // Initially the page action icons are not visible, just the menu button has
   // width.
-  EXPECT_EQ(omnibox_page_action_icon_container->width(), 0);
+  EXPECT_EQ(page_action_icon_container->width(), 0);
   int original_menu_button_width = menu_button->width();
   EXPECT_GT(original_menu_button_width, 0);
 
@@ -118,20 +115,20 @@
   chrome::Zoom(app_browser_, content::PAGE_ZOOM_IN);
 
   // The page action icons should now take up width.
-  EXPECT_GT(omnibox_page_action_icon_container->width(), 0);
+  EXPECT_GT(page_action_icon_container->width(), 0);
   EXPECT_EQ(menu_button->width(), original_menu_button_width);
 
   // Resize the WebAppFrameToolbarView just enough to clip out the page action
   // icons.
   web_app_frame_toolbar_->SetSize(
       gfx::Size(web_app_frame_toolbar_->width() -
-                    omnibox_page_action_icon_container->bounds().right(),
+                    page_action_icon_container->bounds().right(),
                 web_app_frame_toolbar_->height()));
   web_app_frame_toolbar_->Layout();
 
   // The page action icons should be clipped to 0 width while the app menu
   // button retains its full width.
-  EXPECT_EQ(omnibox_page_action_icon_container->width(), 0);
+  EXPECT_EQ(page_action_icon_container->width(), 0);
   EXPECT_EQ(menu_button->width(), original_menu_button_width);
 }
 
diff --git a/chrome/browser/ui/views/frame/toolbar_button_provider.h b/chrome/browser/ui/views/frame/toolbar_button_provider.h
index d4eb5a0..415dc99 100644
--- a/chrome/browser/ui/views/frame/toolbar_button_provider.h
+++ b/chrome/browser/ui/views/frame/toolbar_button_provider.h
@@ -5,11 +5,12 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_TOOLBAR_BUTTON_PROVIDER_H_
 #define CHROME_BROWSER_UI_VIEWS_FRAME_TOOLBAR_BUTTON_PROVIDER_H_
 
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
+
 class AppMenuButton;
 class BrowserActionsContainer;
-class OmniboxPageActionIconContainerView;
+class PageActionIconView;
 class ToolbarActionView;
-enum class PageActionIconType;
 
 namespace gfx {
 class Rect;
@@ -36,9 +37,9 @@
   // ToolbarActionView is not visible or available.
   virtual views::View* GetDefaultExtensionDialogAnchorView() = 0;
 
-  // Gets the omnibox page action icon container.
-  virtual OmniboxPageActionIconContainerView*
-  GetOmniboxPageActionIconContainerView() = 0;
+  // Gets the specified page action icon.
+  virtual PageActionIconView* GetPageActionIconView(
+      PageActionIconType type) = 0;
 
   // Gets the app menu button.
   virtual AppMenuButton* GetAppMenuButton() = 0;
@@ -57,6 +58,9 @@
   // Returns the appropriate anchor view for the page action icon.
   virtual views::View* GetAnchorView(PageActionIconType type) = 0;
 
+  // See comment in browser_window.h for more info.
+  virtual void ZoomChangedForActiveTab(bool can_show_bubble) = 0;
+
   // TODO(calamity): Move other buttons and button actions into here.
  protected:
   virtual ~ToolbarButtonProvider() {}
diff --git a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
index 6d7a8f3..7b1af156 100644
--- a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
@@ -17,12 +17,6 @@
 
 using media_session::mojom::MediaSessionAction;
 
-namespace {
-
-constexpr int kMediaDialogCornerRadius = 8;
-
-}  // anonymous namespace
-
 // static
 MediaDialogView* MediaDialogView::instance_ = nullptr;
 
@@ -85,8 +79,10 @@
 
 void MediaDialogView::AddedToWidget() {
   views::BubbleFrameView* frame = GetBubbleFrameView();
-  if (frame)
-    frame->SetCornerRadius(kMediaDialogCornerRadius);
+  if (frame) {
+    frame->SetCornerRadius(views::LayoutProvider::Get()->GetCornerRadiusMetric(
+        views::EMPHASIS_HIGH));
+  }
 
   controller_->SetDialogDelegate(this);
 }
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view.h b/chrome/browser/ui/views/intent_picker_bubble_view.h
index dec7e1a..8745635 100644
--- a/chrome/browser/ui/views/intent_picker_bubble_view.h
+++ b/chrome/browser/ui/views/intent_picker_bubble_view.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "chrome/browser/apps/intent_helper/apps_navigation_types.h"
 #include "chrome/browser/ui/browser_dialogs.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_bubble_delegate_view.h"
 #include "chrome/services/app_service/public/mojom/types.mojom.h"
 #include "ui/base/accelerators/accelerator.h"
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc
index c1fb51f..0dd6a0ba 100644
--- a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc
@@ -50,6 +50,12 @@
         "document.body.appendChild(iframe);");
   }
 
+  PageActionIconView* GetIntentPickerIcon() {
+    return BrowserView::GetBrowserViewForBrowser(browser())
+        ->toolbar_button_provider()
+        ->GetPageActionIconView(PageActionIconType::kIntentPicker);
+  }
+
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
 };
@@ -70,11 +76,7 @@
       in_scope_url, base::BindOnce(&ClickLinkAndWait, web_contents,
                                    in_scope_url, LinkTarget::SELF, GetParam()));
 
-  PageActionIconView* intent_picker_view =
-      BrowserView::GetBrowserViewForBrowser(browser())
-          ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
-          ->GetPageActionIconView(PageActionIconType::kIntentPicker);
+  PageActionIconView* intent_picker_view = GetIntentPickerIcon();
   EXPECT_TRUE(intent_picker_view->GetVisible());
 
   IntentPickerBubbleView* intent_picker =
@@ -148,11 +150,7 @@
   const GURL out_of_scope_url =
       https_server().GetURL(GetAppUrlHost(), GetOutOfScopeUrlPath());
 
-  PageActionIconView* intent_picker_view =
-      BrowserView::GetBrowserViewForBrowser(browser())
-          ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
-          ->GetPageActionIconView(PageActionIconType::kIntentPicker);
+  PageActionIconView* intent_picker_view = GetIntentPickerIcon();
 
   // OpenNewTab opens a new tab and focus on the new tab.
   OpenNewTab(in_scope_url);
@@ -177,11 +175,7 @@
   const GURL out_of_scope_url =
       https_server().GetURL(GetAppUrlHost(), GetOutOfScopeUrlPath());
 
-  PageActionIconView* intent_picker_view =
-      BrowserView::GetBrowserViewForBrowser(browser())
-          ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
-          ->GetPageActionIconView(PageActionIconType::kIntentPicker);
+  PageActionIconView* intent_picker_view = GetIntentPickerIcon();
 
   OpenNewTab(out_of_scope_url);
   content::WebContents* initial_tab =
@@ -214,11 +208,7 @@
   const GURL redirect_url = https_server().GetURL(
       GetOtherAppUrlHost(), CreateServerRedirect(out_of_scope_url));
 
-  PageActionIconView* intent_picker_view =
-      BrowserView::GetBrowserViewForBrowser(browser())
-          ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
-          ->GetPageActionIconView(PageActionIconType::kIntentPicker);
+  PageActionIconView* intent_picker_view = GetIntentPickerIcon();
 
   OpenNewTab(in_scope_url);
   EXPECT_TRUE(intent_picker_view->GetVisible());
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
index feb3199..d88c9dd 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
@@ -98,6 +98,10 @@
     next_element_interior_padding_ = padding;
   }
 
+  // Reduces the slide duration to 1ms such that animation still follows
+  // through in the code but is short enough that it is essentially skipped.
+  void ReduceAnimationTimeForTesting();
+
  protected:
   static constexpr int kOpenTimeMS = 150;
 
@@ -173,10 +177,6 @@
   // currently paused.
   bool is_animation_paused() const { return is_animation_paused_; }
 
-  // Reduces the slide duration to 1ms such that animation still follows
-  // through in the code but is short enough that it is essentially skipped.
-  void ReduceAnimationTimeForTesting();
-
  private:
   // Spacing between the image and the label.
   int GetInternalSpacing() const;
diff --git a/chrome/browser/ui/views/location_bar/keyword_hint_view.cc b/chrome/browser/ui/views/location_bar/keyword_hint_view.cc
index 23c3e23..5424961 100644
--- a/chrome/browser/ui/views/location_bar/keyword_hint_view.cc
+++ b/chrome/browser/ui/views/location_bar/keyword_hint_view.cc
@@ -61,7 +61,8 @@
   chip_container_->SetBackground(CreateBackgroundFromPainter(
       views::Painter::CreateRoundRectWith1PxBorderPainter(
           tab_bg_color, tab_border_color,
-          GetLayoutConstant(LOCATION_BAR_BUBBLE_CORNER_RADIUS))));
+          views::LayoutProvider::Get()->GetCornerRadiusMetric(
+              views::EMPHASIS_HIGH))));
   chip_container_->AddChildView(chip_label_);
   chip_container_->SetLayoutManager(std::make_unique<views::FillLayout>());
   AddChildView(chip_container_);
@@ -230,7 +231,8 @@
   chip_container_->SetBackground(CreateBackgroundFromPainter(
       views::Painter::CreateRoundRectWith1PxBorderPainter(
           tab_bg_color, tab_border_color,
-          GetLayoutConstant(LOCATION_BAR_BUBBLE_CORNER_RADIUS))));
+          views::LayoutProvider::Get()->GetCornerRadiusMetric(
+              views::EMPHASIS_HIGH))));
 
   trailing_label_->SetEnabledColor(text_color);
   trailing_label_->SetBackgroundColor(background_color);
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index 3f7cf0e..11538a36 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -270,9 +270,17 @@
       params.types_enabled.push_back(PageActionIconType::kCookieControls);
     }
   }
+  // Add icons only when feature is not enabled. Otherwise icons will
+  // be added to the ToolbarPageActionIconContainerView.
+  if (!base::FeatureList::IsEnabled(
+          autofill::features::kAutofillEnableToolbarStatusChip)) {
+    params.types_enabled.push_back(PageActionIconType::kSaveCard);
+    params.types_enabled.push_back(PageActionIconType::kLocalCardMigration);
+  }
   params.icon_size = GetLayoutConstant(LOCATION_BAR_ICON_SIZE);
   params.icon_color = icon_color;
   params.between_icon_spacing = 0;
+  params.font_list = &font_list;
   params.browser = browser_;
   params.command_updater = command_updater();
   params.page_action_icon_delegate = this;
@@ -281,22 +289,6 @@
 
   std::vector<std::unique_ptr<PageActionIconView>> page_action_icons;
   if (browser_) {
-    // Add icons only when feature is not enabled. Otherwise icons will
-    // be added to the ToolbarPageActionIconContainerView.
-    if (!base::FeatureList::IsEnabled(
-            autofill::features::kAutofillEnableToolbarStatusChip)) {
-      auto save_credit_card_icon_view =
-          std::make_unique<autofill::SaveCardIconView>(command_updater(), this,
-                                                       font_list);
-      save_credit_card_icon_view_ = save_credit_card_icon_view.get();
-      page_action_icons.push_back(std::move(save_credit_card_icon_view));
-
-      auto local_card_migration_icon_view =
-          std::make_unique<autofill::LocalCardMigrationIconView>(
-              command_updater(), this, font_list);
-      local_card_migration_icon_view_ = local_card_migration_icon_view.get();
-      page_action_icons.push_back(std::move(local_card_migration_icon_view));
-    }
     auto star_view =
         std::make_unique<StarView>(command_updater(), browser_, this);
     star_view_ = star_view.get();
@@ -592,10 +584,6 @@
   if (star_view_)
     add_trailing_decoration(star_view_);
   add_trailing_decoration(omnibox_page_action_icon_container_view_);
-  if (save_credit_card_icon_view_)
-    add_trailing_decoration(save_credit_card_icon_view_);
-  if (local_card_migration_icon_view_)
-    add_trailing_decoration(local_card_migration_icon_view_);
   for (ContentSettingViews::const_reverse_iterator i(
            content_setting_views_.rbegin());
        i != content_setting_views_.rend(); ++i) {
@@ -701,11 +689,11 @@
   else
     omnibox_view_->Update();
 
-  if (omnibox_page_action_icon_container_view_->GetPageActionIconView(
-          PageActionIconType::kSendTabToSelf))
-    omnibox_page_action_icon_container_view_
-        ->GetPageActionIconView(PageActionIconType::kSendTabToSelf)
-        ->SetVisible(false);
+  PageActionIconView* send_tab_to_self_icon =
+      omnibox_page_action_icon_container_view_->GetIconView(
+          PageActionIconType::kSendTabToSelf);
+  if (send_tab_to_self_icon)
+    send_tab_to_self_icon->SetVisible(false);
 
   OnChanged();  // NOTE: Calls Layout().
 }
@@ -827,9 +815,7 @@
 int LocationBarView::GetMinimumTrailingWidth() const {
   int trailing_width =
       IncrementalMinimumWidth(omnibox_page_action_icon_container_view_) +
-      IncrementalMinimumWidth(star_view_) +
-      IncrementalMinimumWidth(save_credit_card_icon_view_) +
-      IncrementalMinimumWidth(local_card_migration_icon_view_);
+      IncrementalMinimumWidth(star_view_);
 
   for (auto* content_setting_view : content_setting_views_)
     trailing_width += IncrementalMinimumWidth(content_setting_view);
@@ -1037,20 +1023,6 @@
   }
 }
 
-void LocationBarView::UpdateSaveCreditCardIcon() {
-  if (save_credit_card_icon_view_->Update()) {
-    Layout();
-    SchedulePaint();
-  }
-}
-
-void LocationBarView::UpdateLocalCardMigrationIcon() {
-  if (local_card_migration_icon_view_->Update()) {
-    Layout();
-    SchedulePaint();
-  }
-}
-
 void LocationBarView::UpdateBookmarkStarVisibility() {
   if (star_view_) {
     star_view_->SetVisible(browser_defaults::bookmarks_enabled &&
@@ -1063,7 +1035,7 @@
 
 inline bool LocationBarView::UpdateSendTabToSelfIcon() {
   PageActionIconView* icon =
-      this->omnibox_page_action_icon_container_view()->GetPageActionIconView(
+      omnibox_page_action_icon_container_view_->GetIconView(
           PageActionIconType::kSendTabToSelf);
   return icon && icon->Update();
 }
@@ -1279,8 +1251,7 @@
   selected_keyword_view_->SetFontList(font_list);
   for (ContentSettingImageView* view : content_setting_views_)
     view->SetFontList(font_list);
-  if (save_credit_card_icon_view_)
-    save_credit_card_icon_view_->SetFontList(font_list);
+  omnibox_page_action_icon_container_view_->SetFontList(font_list);
   location_icon_view_->Update(/*suppress_animations=*/false);
   PreferredSizeChanged();
 }
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index c7c3b6c..c736c9e 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -18,7 +18,7 @@
 #include "chrome/browser/extensions/extension_context_menu_model.h"
 #include "chrome/browser/ui/location_bar/location_bar.h"
 #include "chrome/browser/ui/omnibox/chrome_omnibox_edit_controller.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/views/dropdown_bar_host.h"
 #include "chrome/browser/ui/views/dropdown_bar_host_delegate.h"
 #include "chrome/browser/ui/views/extensions/extension_popup.h"
@@ -50,11 +50,6 @@
 class SelectedKeywordView;
 class StarView;
 
-namespace autofill {
-class LocalCardMigrationIconView;
-class SaveCardIconView;
-}  // namespace autofill
-
 namespace views {
 class ImageButton;
 class Label;
@@ -142,16 +137,6 @@
   // The star. It may not be visible.  It will be null when |browser_| is null.
   StarView* star_view() { return star_view_; }
 
-  // The save credit card icon. It may not be visible.  It will be null when
-  // |browser_| is null.
-  autofill::SaveCardIconView* save_credit_card_icon_view() {
-    return save_credit_card_icon_view_;
-  }
-
-  autofill::LocalCardMigrationIconView* local_card_migration_icon_view() {
-    return local_card_migration_icon_view_;
-  }
-
   OmniboxPageActionIconContainerView*
   omnibox_page_action_icon_container_view() {
     return omnibox_page_action_icon_container_view_;
@@ -305,8 +290,6 @@
   void AcceptInput(base::TimeTicks match_selection_timestamp) override;
   void FocusSearch() override;
   void UpdateContentSettingsIcons() override;
-  void UpdateSaveCreditCardIcon() override;
-  void UpdateLocalCardMigrationIcon() override;
   void UpdateBookmarkStarVisibility() override;
   void SaveStateToContents(content::WebContents* contents) override;
   const OmniboxView* GetOmniboxView() const override;
@@ -400,13 +383,6 @@
   OmniboxPageActionIconContainerView* omnibox_page_action_icon_container_view_ =
       nullptr;
 
-  // The save credit card icon.  It will be null when |browser_| is null.
-  autofill::SaveCardIconView* save_credit_card_icon_view_ = nullptr;
-
-  // The icon for the local card migration prompt.
-  autofill::LocalCardMigrationIconView* local_card_migration_icon_view_ =
-      nullptr;
-
   // The star for bookmarking.  It will be null when |browser_| is null.
   StarView* star_view_ = nullptr;
 
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view_browsertest.cc b/chrome/browser/ui/views/location_bar/location_bar_view_browsertest.cc
index 95e50eb7..c158d3e 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view_browsertest.cc
@@ -51,7 +51,6 @@
   PageActionIconView* GetZoomView() {
     return BrowserView::GetBrowserViewForBrowser(browser())
         ->toolbar_button_provider()
-        ->GetOmniboxPageActionIconContainerView()
         ->GetPageActionIconView(PageActionIconType::kZoom);
   }
 
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc b/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
index 6006cb2..9594a41 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
@@ -79,7 +79,6 @@
 
   PageActionIconView* icon_view =
       browser_view->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
           ->GetPageActionIconView(PageActionIconType::kTranslate);
   ASSERT_TRUE(icon_view);
   EXPECT_TRUE(icon_view->GetVisible());
diff --git a/chrome/browser/ui/views/location_bar/star_view.cc b/chrome/browser/ui/views/location_bar/star_view.cc
index a7e1c57..bc7278ad 100644
--- a/chrome/browser/ui/views/location_bar/star_view.cc
+++ b/chrome/browser/ui/views/location_bar/star_view.cc
@@ -71,6 +71,12 @@
   }
 }
 
+bool StarView::Update() {
+  // Updates are handled by |LocationBarView::UpdateBookmarkStarVisibility()|.
+  // TODO(https://crbug.com/788051): Make updates handled here.
+  return false;
+}
+
 void StarView::OnExecuting(PageActionIconView::ExecuteSource execute_source) {
   BookmarkEntryPoint entry_point = BOOKMARK_ENTRY_POINT_STAR_MOUSE;
   switch (execute_source) {
diff --git a/chrome/browser/ui/views/location_bar/star_view.h b/chrome/browser/ui/views/location_bar/star_view.h
index 4c8fe39..f69b1662 100644
--- a/chrome/browser/ui/views/location_bar/star_view.h
+++ b/chrome/browser/ui/views/location_bar/star_view.h
@@ -30,6 +30,7 @@
 
  protected:
   // PageActionIconView:
+  bool Update() override;
   void OnExecuting(PageActionIconView::ExecuteSource execute_source) override;
   void ExecuteCommand(ExecuteSource source) override;
   views::BubbleDialogDelegateView* GetBubble() const override;
diff --git a/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc b/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc
index afa091b4..0a7df6c 100644
--- a/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc
+++ b/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc
@@ -149,7 +149,6 @@
   zoom_bubble->SetHighlightedButton(
       BrowserView::GetBrowserViewForBrowser(browser)
           ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
           ->GetPageActionIconView(PageActionIconType::kZoom));
 
   views::BubbleDialogDelegateView::CreateBubble(zoom_bubble);
@@ -296,7 +295,6 @@
     return {};
   return BrowserView::GetBrowserViewForBrowser(browser)
       ->toolbar_button_provider()
-      ->GetOmniboxPageActionIconContainerView()
       ->GetPageActionIconView(PageActionIconType::kZoom)
       ->GetTextForTooltipAndAccessibleName();
 }
@@ -565,12 +563,8 @@
   // may also be destroyed: the call to WindowClosing() may be triggered by
   // parent window destruction tearing down its child windows.
   Browser* browser = chrome::FindBrowserWithID(session_id_);
-  if (browser && browser->window() &&
-      browser->window()->GetOmniboxPageActionIconContainer()) {
-    browser->window()
-        ->GetOmniboxPageActionIconContainer()
-        ->UpdatePageActionIcon(PageActionIconType::kZoom);
-  }
+  if (browser && browser->window())
+    browser->window()->UpdatePageActionIcon(PageActionIconType::kZoom);
 }
 
 void ZoomBubbleView::StartTimerIfNecessary() {
diff --git a/chrome/browser/ui/views/native_file_system/native_file_system_browsertest.cc b/chrome/browser/ui/views/native_file_system/native_file_system_browsertest.cc
index eb66b16..90b4d20 100644
--- a/chrome/browser/ui/views/native_file_system/native_file_system_browsertest.cc
+++ b/chrome/browser/ui/views/native_file_system/native_file_system_browsertest.cc
@@ -111,7 +111,6 @@
   bool IsUsageIndicatorVisible() {
     auto* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
     auto* icon_view = browser_view->toolbar_button_provider()
-                          ->GetOmniboxPageActionIconContainerView()
                           ->GetPageActionIconView(
                               PageActionIconType::kNativeFileSystemAccess);
     return icon_view && icon_view->GetVisible();
diff --git a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
index 8cb9fb8..e2da1b3 100644
--- a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
+++ b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
@@ -250,6 +250,7 @@
 
   ToolbarButtonProvider* button_provider =
       BrowserView::GetBrowserViewForBrowser(browser)->toolbar_button_provider();
+
   // Writable directories are generally also readable, but we don't want to
   // display the same directory twice. So filter out any writable directories
   // from the readable directories list.
@@ -267,9 +268,8 @@
           PageActionIconType::kNativeFileSystemAccess),
       web_contents, origin, std::move(usage));
 
-  bubble_->SetHighlightedButton(
-      button_provider->GetOmniboxPageActionIconContainerView()
-          ->GetPageActionIconView(PageActionIconType::kNativeFileSystemAccess));
+  bubble_->SetHighlightedButton(button_provider->GetPageActionIconView(
+      PageActionIconType::kNativeFileSystemAccess));
   views::BubbleDialogDelegateView::CreateBubble(bubble_);
 
   bubble_->ShowForReason(DisplayReason::USER_GESTURE,
@@ -307,17 +307,10 @@
   if (!browser)
     return {};
 
-  OmniboxPageActionIconContainerView* page_action_icon_container_view =
-      BrowserView::GetBrowserViewForBrowser(browser)
-          ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView();
-  if (!page_action_icon_container_view)
-    return {};
-
-  PageActionIconView* icon_view =
-      page_action_icon_container_view->GetPageActionIconView(
-          PageActionIconType::kNativeFileSystemAccess);
-  return icon_view->GetTextForTooltipAndAccessibleName();
+  return BrowserView::GetBrowserViewForBrowser(browser)
+      ->toolbar_button_provider()
+      ->GetPageActionIconView(PageActionIconType::kNativeFileSystemAccess)
+      ->GetTextForTooltipAndAccessibleName();
 }
 
 int NativeFileSystemUsageBubbleView::GetDialogButtons() const {
diff --git a/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc b/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc
index 4799c52b..c08f4be3 100644
--- a/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc
+++ b/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc
@@ -140,7 +140,8 @@
   // selection highlights.
   // TODO(tapted): Remove this and have the contents paint a half-rounded rect
   // for the background, and when selecting the bottom row.
-  int corner_radius = GetLayoutConstant(LOCATION_BAR_BUBBLE_CORNER_RADIUS);
+  int corner_radius =
+      views::LayoutProvider::Get()->GetCornerRadiusMetric(views::EMPHASIS_HIGH);
   contents_mask_ = views::Painter::CreatePaintedLayer(
       views::Painter::CreateSolidRoundRectPainter(SK_ColorBLACK,
                                                   corner_radius));
diff --git a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc
index 81cfb8bd..a38d18f 100644
--- a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc
+++ b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc
@@ -8,6 +8,8 @@
 #include "chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h"
 #include "chrome/browser/sharing/shared_clipboard/shared_clipboard_ui_controller.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.h"
+#include "chrome/browser/ui/views/autofill/payments/save_card_icon_view.h"
 #include "chrome/browser/ui/views/location_bar/cookie_controls_icon_view.h"
 #include "chrome/browser/ui/views/location_bar/find_bar_icon.h"
 #include "chrome/browser/ui/views/location_bar/intent_picker_view.h"
@@ -119,8 +121,15 @@
         page_action_icons_.push_back(shared_clipboard_icon_view_);
         break;
       case PageActionIconType::kLocalCardMigration:
+        local_card_migration_icon_view_ =
+            new autofill::LocalCardMigrationIconView(
+                params.command_updater, params.page_action_icon_delegate);
+        page_action_icons_.push_back(local_card_migration_icon_view_);
+        break;
       case PageActionIconType::kSaveCard:
-        NOTREACHED();
+        save_card_icon_view_ = new autofill::SaveCardIconView(
+            params.command_updater, params.page_action_icon_delegate);
+        page_action_icons_.push_back(save_card_icon_view_);
         break;
     }
   }
@@ -129,6 +138,7 @@
     icon->SetVisible(false);
     icon->set_icon_size(params.icon_size);
     icon->SetIconColor(params.icon_color);
+    icon->SetFontList(params.font_list ? *params.font_list : gfx::FontList());
     AddChildView(icon);
   }
 
@@ -140,7 +150,7 @@
 
 OmniboxPageActionIconContainerView::~OmniboxPageActionIconContainerView() {}
 
-PageActionIconView* OmniboxPageActionIconContainerView::GetPageActionIconView(
+PageActionIconView* OmniboxPageActionIconContainerView::GetIconView(
     PageActionIconType type) {
   // TODO(https://crbug.com/788051): Update page action icons here as update
   // methods are migrated out of LocationBar to the PageActionIconContainer
@@ -171,9 +181,9 @@
     case PageActionIconType::kSharedClipboard:
       return shared_clipboard_icon_view_;
     case PageActionIconType::kLocalCardMigration:
+      return local_card_migration_icon_view_;
     case PageActionIconType::kSaveCard:
-      NOTREACHED();
-      return nullptr;
+      return save_card_icon_view_;
   }
   return nullptr;
 }
@@ -183,20 +193,6 @@
     icon->Update();
 }
 
-void OmniboxPageActionIconContainerView::UpdatePageActionIcon(
-    PageActionIconType type) {
-  PageActionIconView* icon = GetPageActionIconView(type);
-  if (icon)
-    icon->Update();
-}
-
-void OmniboxPageActionIconContainerView::ExecutePageActionIconForTesting(
-    PageActionIconType type) {
-  PageActionIconView* icon = GetPageActionIconView(type);
-  if (icon)
-    icon->ExecuteForTesting();
-}
-
 bool OmniboxPageActionIconContainerView::
     ActivateFirstInactiveBubbleForAccessibility() {
   for (PageActionIconView* icon : page_action_icons_) {
@@ -217,6 +213,12 @@
     icon->SetIconColor(icon_color);
 }
 
+void OmniboxPageActionIconContainerView::SetFontList(
+    const gfx::FontList& font_list) {
+  for (PageActionIconView* icon : page_action_icons_)
+    icon->SetFontList(font_list);
+}
+
 void OmniboxPageActionIconContainerView::ZoomChangedForActiveTab(
     bool can_show_bubble) {
   if (zoom_view_)
diff --git a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h
index 0894d3513..e3d1fc2 100644
--- a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h
+++ b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h
@@ -7,7 +7,7 @@
 
 #include "base/macros.h"
 #include "base/scoped_observer.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/views/page_action/page_action_icon_view.h"
 #include "components/zoom/zoom_event_manager.h"
 #include "components/zoom/zoom_event_manager_observer.h"
@@ -28,13 +28,17 @@
 class TranslateIconView;
 class ZoomView;
 
+namespace autofill {
+class LocalCardMigrationIconView;
+class SaveCardIconView;
+}  // namespace autofill
+
 namespace send_tab_to_self {
 class SendTabToSelfIconView;
 }
 
 class OmniboxPageActionIconContainerView
     : public views::View,
-      public PageActionIconContainer,
       public zoom::ZoomEventManagerObserver {
  public:
   struct Params {
@@ -45,6 +49,7 @@
     int icon_size = 0;
     SkColor icon_color = gfx::kPlaceholderColor;
     int between_icon_spacing = 0;
+    const gfx::FontList* font_list = nullptr;
     Browser* browser = nullptr;
     CommandUpdater* command_updater = nullptr;
     PageActionIconView::Delegate* page_action_icon_delegate = nullptr;
@@ -56,7 +61,7 @@
   explicit OmniboxPageActionIconContainerView(const Params& params);
   ~OmniboxPageActionIconContainerView() override;
 
-  PageActionIconView* GetPageActionIconView(PageActionIconType type);
+  PageActionIconView* GetIconView(PageActionIconType type);
 
   // Updates the visual state of all enabled page action icons.
   void UpdateAll();
@@ -65,16 +70,15 @@
   // whether any icons were activated.
   bool ActivateFirstInactiveBubbleForAccessibility();
 
-  // Update the icons color.
+  // Update the icons' color.
   void SetIconColor(SkColor icon_color);
 
+  // Update the icons' fonts.
+  void SetFontList(const gfx::FontList& font_list);
+
   // See comment in browser_window.h for more info.
   void ZoomChangedForActiveTab(bool can_show_bubble);
 
-  // PageActionIconContainer:
-  void UpdatePageActionIcon(PageActionIconType type) override;
-  void ExecutePageActionIconForTesting(PageActionIconType type) override;
-
  private:
   // views::View:
   void ChildPreferredSizeChanged(views::View* child) override;
@@ -97,6 +101,10 @@
   ReaderModeIconView* reader_mode_icon_ = nullptr;
   SharingIconView* click_to_call_icon_view_ = nullptr;
   SharingIconView* shared_clipboard_icon_view_ = nullptr;
+  autofill::LocalCardMigrationIconView* local_card_migration_icon_view_ =
+      nullptr;
+  autofill::SaveCardIconView* save_card_icon_view_ = nullptr;
+
   std::vector<PageActionIconView*> page_action_icons_;
 
   ScopedObserver<zoom::ZoomEventManager, zoom::ZoomEventManagerObserver>
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_view.cc b/chrome/browser/ui/views/page_action/page_action_icon_view.cc
index c413d4b..1ee53a86 100644
--- a/chrome/browser/ui/views/page_action/page_action_icon_view.cc
+++ b/chrome/browser/ui/views/page_action/page_action_icon_view.cc
@@ -76,10 +76,6 @@
   return command_updater_->IsCommandEnabled(command_id_);
 }
 
-bool PageActionIconView::Update() {
-  return false;
-}
-
 SkColor PageActionIconView::GetLabelColorForTesting() const {
   return label()->GetEnabledColor();
 }
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_view.h b/chrome/browser/ui/views/page_action/page_action_icon_view.h
index 8d6f6155..b19d5df 100644
--- a/chrome/browser/ui/views/page_action/page_action_icon_view.h
+++ b/chrome/browser/ui/views/page_action/page_action_icon_view.h
@@ -62,13 +62,13 @@
 
   void set_icon_size(int size) { icon_size_ = size; }
 
+  // Updates the visibility of the icon based on the associated model state,
+  // returns whether any change occurred.
+  virtual bool Update() = 0;
+
   // Returns the bubble instance for the icon.
   virtual views::BubbleDialogDelegateView* GetBubble() const = 0;
 
-  // Updates the icon state and associated bubble when the WebContents changes.
-  // Returns true if there was a change.
-  virtual bool Update();
-
   // Retrieve the text to be used for a tooltip or accessible name.
   virtual base::string16 GetTextForTooltipAndAccessibleName() const = 0;
 
diff --git a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
index 56e21f5f..73a7111 100644
--- a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
+++ b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
@@ -83,7 +83,6 @@
     pwa_install_view_ =
         BrowserView::GetBrowserViewForBrowser(browser())
             ->toolbar_button_provider()
-            ->GetOmniboxPageActionIconContainerView()
             ->GetPageActionIconView(PageActionIconType::kPwaInstall);
     EXPECT_FALSE(pwa_install_view_->GetVisible());
 
diff --git a/chrome/browser/ui/views/page_action/zoom_view_browsertest.cc b/chrome/browser/ui/views/page_action/zoom_view_browsertest.cc
index d32f40e9..39ad664 100644
--- a/chrome/browser/ui/views/page_action/zoom_view_browsertest.cc
+++ b/chrome/browser/ui/views/page_action/zoom_view_browsertest.cc
@@ -18,12 +18,10 @@
   views::View* zoom_icon =
       BrowserView::GetBrowserViewForBrowser(browser())
           ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
           ->GetPageActionIconView(PageActionIconType::kZoom);
   views::View* second_zoom_icon =
       BrowserView::GetBrowserViewForBrowser(CreateBrowser(browser()->profile()))
           ->toolbar_button_provider()
-          ->GetOmniboxPageActionIconContainerView()
           ->GetPageActionIconView(PageActionIconType::kZoom);
 
   // Initially no icon.
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_icon_view_interactive_uitest.cc b/chrome/browser/ui/views/passwords/manage_passwords_icon_view_interactive_uitest.cc
index 2a6961e1..9c902d2 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_icon_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_icon_view_interactive_uitest.cc
@@ -51,7 +51,6 @@
     } else {
       view = BrowserView::GetBrowserViewForBrowser(browser())
                  ->toolbar_button_provider()
-                 ->GetOmniboxPageActionIconContainerView()
                  ->GetPageActionIconView(PageActionIconType::kManagePasswords);
     }
     DCHECK_EQ(view->GetClassName(), ManagePasswordsIconViews::kClassName);
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
index 3a5d536..0b80c1b 100644
--- a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
+++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
@@ -44,21 +44,11 @@
   PasswordBubbleViewBase* bubble =
       CreateBubble(web_contents, anchor_view, reason);
   DCHECK(bubble);
-  DCHECK(bubble == g_manage_passwords_bubble_);
+  DCHECK_EQ(bubble, g_manage_passwords_bubble_);
 
-  views::Button* highlighted_button;
-  if (base::FeatureList::IsEnabled(
-          autofill::features::kAutofillEnableToolbarStatusChip)) {
-    highlighted_button =
-        browser_view->toolbar()->toolbar_page_action_container()->GetIconView(
-            PageActionIconType::kManagePasswords);
-  } else {
-    highlighted_button =
-        browser_view->toolbar_button_provider()
-            ->GetOmniboxPageActionIconContainerView()
-            ->GetPageActionIconView(PageActionIconType::kManagePasswords);
-  }
-  g_manage_passwords_bubble_->SetHighlightedButton(highlighted_button);
+  g_manage_passwords_bubble_->SetHighlightedButton(
+      button_provider->GetPageActionIconView(
+          PageActionIconType::kManagePasswords));
 
   views::BubbleDialogDelegateView::CreateBubble(g_manage_passwords_bubble_);
 
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
index 1a83aea..85d21d05c 100644
--- a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
+++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
@@ -210,9 +210,8 @@
   }
 
   SetInsets();
-  SetHighlightColor(color);
-  SetText(text);
   SetTooltipText(GetAvatarTooltipText());
+  SetHighlight(text, color);
 }
 
 void AvatarToolbarButton::SetAutofillIconVisible(bool autofill_icon_visible) {
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc
index 5598e64..3283941 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -170,6 +170,7 @@
   }
   BuildIdentity();
   BuildAutofillButtons();
+  BuildAccountFeatureButtons();
   BuildSelectableProfiles();
 }
 
@@ -199,8 +200,14 @@
   // TODO(crbug.com/995757): Remove user action.
   base::RecordAction(
       base::UserMetricsAction("ProfileChooser_ManageGoogleAccountClicked"));
-  DCHECK(!dice_accounts_.empty());
-  NavigateToGoogleAccountPage(browser()->profile(), dice_accounts_[0].email);
+
+  Profile* profile = browser()->profile();
+  signin::IdentityManager* identity_manager =
+      IdentityManagerFactory::GetForProfile(profile);
+  DCHECK(identity_manager->HasUnconsentedPrimaryAccount());
+
+  NavigateToGoogleAccountPage(
+      profile, identity_manager->GetUnconsentedPrimaryAccountInfo().email);
 }
 
 void ProfileMenuView::OnPasswordsButtonClicked() {
@@ -414,6 +421,34 @@
                           base::Unretained(this)));
 }
 
+void ProfileMenuView::BuildAccountFeatureButtons() {
+  signin::IdentityManager* identity_manager =
+      IdentityManagerFactory::GetForProfile(browser()->profile());
+  if (!identity_manager->HasUnconsentedPrimaryAccount())
+    return;
+
+  AddAccountFeatureButton(
+#if defined(GOOGLE_CHROME_BUILD)
+      // The Google G icon needs to be shrunk, so it won't look too big
+      // compared to the other icons.
+      ImageForMenu(kGoogleGLogoIcon, /*icon_to_image_ratio=*/0.75),
+#else
+      gfx::ImageSkia(),
+#endif
+      l10n_util::GetStringUTF16(IDS_SETTINGS_MANAGE_GOOGLE_ACCOUNT),
+      base::BindRepeating(&ProfileMenuView::OnManageGoogleAccountButtonClicked,
+                          base::Unretained(this)));
+
+  if (!identity_manager->HasPrimaryAccount()) {
+    // The sign-out button is only shown when sync is off.
+    AddAccountFeatureButton(
+        ImageForMenu(kSignOutIcon),
+        l10n_util::GetStringUTF16(IDS_SCREEN_LOCK_SIGN_OUT),
+        base::BindRepeating(&ProfileMenuView::OnSignoutButtonClicked,
+                            base::Unretained(this)));
+  }
+}
+
 void ProfileMenuView::BuildSelectableProfiles() {
   auto profile_entries = g_browser_process->profile_manager()
                              ->GetProfileAttributesStorage()
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.h b/chrome/browser/ui/views/profiles/profile_menu_view.h
index 08876c81..0317d59 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view.h
+++ b/chrome/browser/ui/views/profiles/profile_menu_view.h
@@ -100,6 +100,7 @@
   // Helper methods for building the menu.
   void BuildIdentity();
   void BuildAutofillButtons();
+  void BuildAccountFeatureButtons();
   void BuildSelectableProfiles();
 
   // Adds the profile chooser view.
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
index cec8961..e57a0555 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -25,6 +25,8 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
+#include "ui/gfx/image/canvas_image_source.h"
+#include "ui/gfx/image/image_skia_operations.h"
 #include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/button/md_text_button.h"
@@ -47,6 +49,7 @@
 constexpr int kMenuWidth = 288;
 constexpr int kIconSize = 16;
 constexpr int kIdentityImageSize = 64;
+constexpr int kMaxImageSize = kIdentityImageSize;
 
 // If the bubble is too large to fit on the screen, it still needs to be at
 // least this tall to show one row.
@@ -56,6 +59,15 @@
 // the menu items.
 constexpr int kMenuEdgeMargin = 16;
 
+gfx::ImageSkia SizeImage(const gfx::ImageSkia& image, int size) {
+  return gfx::ImageSkiaOperations::CreateResizedImage(
+      image, skia::ImageOperations::RESIZE_BEST, gfx::Size(size, size));
+}
+
+gfx::ImageSkia ColorImage(const gfx::ImageSkia& image, SkColor color) {
+  return gfx::ImageSkiaOperations::CreateColorMask(image, color);
+}
+
 std::unique_ptr<views::BoxLayout> CreateBoxLayout(
     views::BoxLayout::Orientation orientation,
     views::BoxLayout::CrossAxisAlignment cross_axis_alignment) {
@@ -68,7 +80,6 @@
     std::unique_ptr<views::View> children_container) {
   constexpr int kOuterMargin = 16;
   constexpr int kBorderThickness = 1;
-  constexpr int kCornerRadius = 8;
   const SkColor kBorderColor =
       ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
           ui::NativeTheme::kColorId_MenuSeparatorColor);
@@ -77,7 +88,9 @@
   children_container->SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical));
   children_container->SetBorder(views::CreateRoundedRectBorder(
-      kBorderThickness, kCornerRadius, kBorderColor));
+      kBorderThickness,
+      views::LayoutProvider::Get()->GetCornerRadiusMetric(views::EMPHASIS_HIGH),
+      kBorderColor));
 
   // Create outer view with margin.
   // The outer view is needed because |BoxLayout| doesn't support outer
@@ -219,7 +232,7 @@
     const gfx::VectorIcon& icon,
     const base::string16& text,
     base::RepeatingClosure action) {
-  constexpr int kTopMargin = 8;
+  constexpr int kVerticalMargin = 8;
   constexpr int kButtonSpacing = 6;
   constexpr int kIconSize = 16;
   constexpr int kIconPadding = 6;
@@ -235,7 +248,7 @@
     views::BoxLayout* layout = shortcut_features_container_->SetLayoutManager(
         std::make_unique<views::BoxLayout>(
             views::BoxLayout::Orientation::kHorizontal,
-            gfx::Insets(kTopMargin, 0, 0, 0), kButtonSpacing));
+            gfx::Insets(kVerticalMargin, 0), kButtonSpacing));
     layout->set_main_axis_alignment(
         views::BoxLayout::MainAxisAlignment::kCenter);
   }
@@ -255,6 +268,32 @@
   RegisterClickAction(button, std::move(action));
 }
 
+void ProfileMenuViewBase::AddAccountFeatureButton(
+    const gfx::ImageSkia& icon,
+    const base::string16& text,
+    base::RepeatingClosure action) {
+  constexpr int kIconSize = 16;
+  const SkColor kIconColor =
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
+          ui::NativeTheme::kColorId_DefaultIconColor);
+
+  // Initialize layout if this is the first time a button is added.
+  if (!account_features_container_->GetLayoutManager()) {
+    account_features_container_->SetLayoutManager(
+        std::make_unique<views::BoxLayout>(
+            views::BoxLayout::Orientation::kVertical));
+  }
+
+  account_features_container_->AddChildView(
+      std::make_unique<views::Separator>());
+
+  views::Button* button =
+      account_features_container_->AddChildView(std::make_unique<HoverButton>(
+          this, SizeImage(ColorImage(icon, kIconColor), kIconSize), text));
+
+  RegisterClickAction(button, std::move(action));
+}
+
 void ProfileMenuViewBase::AddSelectableProfile(const gfx::Image& image,
                                                const base::string16& name,
                                                base::RepeatingClosure action) {
@@ -277,6 +316,19 @@
   RegisterClickAction(button, std::move(action));
 }
 
+gfx::ImageSkia ProfileMenuViewBase::ImageForMenu(const gfx::VectorIcon& icon,
+                                                 float icon_to_image_ratio) {
+  const SkColor kIconColor =
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
+          ui::NativeTheme::kColorId_DefaultIconColor);
+  const int padding =
+      static_cast<int>(kMaxImageSize * (1.0 - icon_to_image_ratio) / 2.0);
+
+  auto sized_icon =
+      gfx::CreateVectorIcon(icon, kMaxImageSize - 2 * padding, kIconColor);
+  return gfx::CanvasImageSource::CreatePadded(sized_icon, gfx::Insets(padding));
+}
+
 ax::mojom::Role ProfileMenuViewBase::GetAccessibleWindowRole() {
   // Return |ax::mojom::Role::kDialog| which will make screen readers announce
   // the following in the listed order:
@@ -368,6 +420,8 @@
       bordered_box_container->AddChildView(std::make_unique<views::View>());
   shortcut_features_container_ =
       bordered_box_container->AddChildView(std::make_unique<views::View>());
+  account_features_container_ =
+      bordered_box_container->AddChildView(std::make_unique<views::View>());
   components->AddChildView(
       CreateBorderedBoxView(std::move(bordered_box_container)));
 
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.h b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
index 3ede808..f70365e 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.h
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
@@ -100,9 +100,17 @@
   void AddShortcutFeatureButton(const gfx::VectorIcon& icon,
                                 const base::string16& text,
                                 base::RepeatingClosure action);
+  void AddAccountFeatureButton(const gfx::ImageSkia& icon,
+                               const base::string16& text,
+                               base::RepeatingClosure action);
   void AddSelectableProfile(const gfx::Image& image,
                             const base::string16& name,
                             base::RepeatingClosure action);
+  // 0 < |icon_to_image_ratio| <= 1 is the size ratio of |icon| in the returned
+  // image. E.g. a value of 0.8 means that |icon| only takes up 80% of the
+  // returned image, with the rest being padding around it.
+  gfx::ImageSkia ImageForMenu(const gfx::VectorIcon& icon,
+                              float icon_to_image_ratio = 1.0f);
 
   // Initializes a new group of menu items. A separator is added before them if
   // |add_separator| is true.
@@ -203,6 +211,7 @@
   // Component containers.
   views::View* identity_info_container_ = nullptr;
   views::View* shortcut_features_container_ = nullptr;
+  views::View* account_features_container_ = nullptr;
   views::View* selectable_profiles_container_ = nullptr;
 
   CloseBubbleOnTabActivationHelper close_bubble_helper_;
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
index 134cf7e1..1fcefb9 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
@@ -26,6 +26,7 @@
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/scoped_account_consistency.h"
+#include "chrome/browser/sync/test/integration/secondary_account_helper.h"
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -48,6 +49,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/test_utils.h"
 #include "extensions/browser/extension_registry.h"
+#include "services/network/test/test_url_loader_factory.h"
 #include "ui/events/event_utils.h"
 #include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/webview/webview.h"
@@ -709,10 +711,11 @@
  public:
   // List of actionable items in the correct order as they appear in the menu.
   // If a new button is added to the menu, it should also be added to this list.
-  static constexpr ProfileMenuView::ActionableItem kOrderedActionableItems[4] =
+  static constexpr ProfileMenuView::ActionableItem kOrderedActionableItems[5] =
       {ProfileMenuView::ActionableItem::kPasswordsButton,
        ProfileMenuView::ActionableItem::kCreditCardsButton,
        ProfileMenuView::ActionableItem::kAddressesButton,
+       ProfileMenuView::ActionableItem::kManageGoogleAccountButton,
        // The first button is added again to finish the cycle and test that
        // there are no other buttons at the end.
        ProfileMenuView::ActionableItem::kPasswordsButton};
@@ -748,3 +751,74 @@
         size_t(0),
         base::size(
             ProfileMenuClickTest_WithPrimaryAccount::kOrderedActionableItems)));
+
+class ProfileMenuClickTest_WithUnconsentedPrimaryAccount
+    : public ProfileMenuClickTest {
+ public:
+  // List of actionable items in the correct order as they appear in the menu.
+  // If a new button is added to the menu, it should also be added to this list.
+  static constexpr ProfileMenuView::ActionableItem kOrderedActionableItems[6] =
+      {ProfileMenuView::ActionableItem::kPasswordsButton,
+       ProfileMenuView::ActionableItem::kCreditCardsButton,
+       ProfileMenuView::ActionableItem::kAddressesButton,
+       ProfileMenuView::ActionableItem::kManageGoogleAccountButton,
+       ProfileMenuView::ActionableItem::kSignoutButton,
+       // The first button is added again to finish the cycle and test that
+       // there are no other buttons at the end.
+       ProfileMenuView::ActionableItem::kPasswordsButton};
+
+  ProfileMenuClickTest_WithUnconsentedPrimaryAccount() = default;
+
+  void SetUpInProcessBrowserTestFixture() override {
+    // This is required to support (fake) secondary-account-signin (based on
+    // cookies) in tests. Without this, the real GaiaCookieManagerService would
+    // try talking to Google servers which of course wouldn't work in tests.
+    test_signin_client_factory_ =
+        secondary_account_helper::SetUpSigninClient(&test_url_loader_factory_);
+    ProfileMenuClickTest::SetUpInProcessBrowserTestFixture();
+  }
+
+  ProfileMenuView::ActionableItem GetExpectedActionableItemAtIndex(
+      size_t index) override {
+    return kOrderedActionableItems[index];
+  }
+
+  void SetUnconsentedPrimaryAccount() {
+    signin::MakeAccountAvailableWithCookies(
+        IdentityManagerFactory::GetForProfile(browser()->profile()),
+        &test_url_loader_factory_, "account@example.com", "dummyId");
+  }
+
+ private:
+  secondary_account_helper::ScopedSigninClientFactory
+      test_signin_client_factory_;
+  network::TestURLLoaderFactory test_url_loader_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(ProfileMenuClickTest_WithUnconsentedPrimaryAccount);
+};
+
+// static
+constexpr ProfileMenuView::ActionableItem
+    ProfileMenuClickTest_WithUnconsentedPrimaryAccount::kOrderedActionableItems
+        [];
+
+IN_PROC_BROWSER_TEST_P(ProfileMenuClickTest_WithUnconsentedPrimaryAccount,
+                       SetupAndRunTest) {
+  signin::IdentityManager* identity_manager =
+      IdentityManagerFactory::GetForProfile(browser()->profile());
+
+  ASSERT_FALSE(identity_manager->HasUnconsentedPrimaryAccount());
+  SetUnconsentedPrimaryAccount();
+  ASSERT_FALSE(identity_manager->HasPrimaryAccount());
+  ASSERT_TRUE(identity_manager->HasUnconsentedPrimaryAccount());
+
+  RunTest();
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    ProfileMenuClickTest_WithUnconsentedPrimaryAccount,
+    ::testing::Range(
+        size_t(0),
+        base::size(ProfileMenuClickTest_WithUnconsentedPrimaryAccount::
+                       kOrderedActionableItems)));
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
index db04a6a6..ab93e85 100644
--- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
+++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
@@ -199,10 +199,8 @@
       break;
   }
 
-  if (base::FeatureList::IsEnabled(features::kUseTextForUpdateButton)) {
-    SetHighlightColor(color);
-    SetText(text);
-  }
+  if (base::FeatureList::IsEnabled(features::kUseTextForUpdateButton))
+    SetHighlight(text, color);
 
   SetTooltipText(l10n_util::GetStringUTF16(message_id));
   UpdateIcon();
diff --git a/chrome/browser/ui/views/toolbar/toolbar_button.cc b/chrome/browser/ui/views/toolbar/toolbar_button.cc
index f0b67fa..e620189 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_button.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_button.cc
@@ -82,16 +82,29 @@
   SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
 }
 
-void ToolbarButton::SetHighlightColor(base::Optional<SkColor> color) {
-  if (highlight_color_ == color)
+void ToolbarButton::SetHighlight(const base::string16& highlight_text,
+                                 base::Optional<SkColor> highlight_color) {
+  if (highlight_color_ == highlight_color && GetText() == highlight_text)
     return;
+  if (highlight_text.empty() && !highlight_color.has_value()) {
+    ClearHighlight();
+    return;
+  }
 
-  highlight_color_ = color;
+  LabelButton::SetText(highlight_text);
+  highlight_color_ = highlight_color;
   UpdateHighlightBackgroundAndInsets();
 }
 
 void ToolbarButton::SetText(const base::string16& text) {
-  LabelButton::SetText(text);
+  NOTREACHED() << "Use SetHighlight(text, _) instead of SetText(text)";
+}
+
+void ToolbarButton::ClearHighlight() {
+  DCHECK(!GetText().empty() || highlight_color_.has_value());
+
+  LabelButton::SetText(base::string16());
+  highlight_color_.reset();
   UpdateHighlightBackgroundAndInsets();
 }
 
@@ -117,20 +130,31 @@
                            layout_inset_delta_ +
                            *GetProperty(views::kInternalPaddingKey);
 
-  if (!GetText().empty()) {
-    const int text_side_inset = highlight_radius / 2;
-
-    // Some subclasses (AvatarToolbarButton) may be change alignment. This adds
-    // an inset to the text-label side.
-    if (GetHorizontalAlignment() == gfx::ALIGN_RIGHT) {
-      new_insets += gfx::Insets(0, text_side_inset, 0, 0);
-    } else {
-      new_insets += gfx::Insets(0, 0, 0, text_side_inset);
-    }
-  }
-
   if (!border() || new_insets != border()->GetInsets())
     SetBorder(views::CreateEmptyBorder(new_insets));
+
+  // Update spacing on the outer-side of the label to match the current
+  // highlight radius.
+  SetLabelSideSpacing(highlight_radius / 2);
+}
+
+void ToolbarButton::SetLabelSideSpacing(int spacing) {
+  gfx::Insets label_insets;
+  // Add the spacing only if text is non-empty.
+  if (GetText().empty()) {
+    // Add spacing to the opposing side.
+    if (GetHorizontalAlignment() == gfx::ALIGN_RIGHT) {
+      label_insets = gfx::Insets(0, spacing, 0, 0);
+    } else {
+      DCHECK_EQ(GetHorizontalAlignment(), gfx::ALIGN_LEFT);
+      label_insets = gfx::Insets(0, 0, 0, spacing);
+    }
+  }
+  if (!label()->border() || label_insets != label()->border()->GetInsets()) {
+    label()->SetBorder(views::CreateEmptyBorder(label_insets));
+    // Forces LabelButton to dump the cached preferred size and recompute it.
+    PreferredSizeChanged();
+  }
 }
 
 void ToolbarButton::SetLayoutInsetDelta(const gfx::Insets& inset_delta) {
diff --git a/chrome/browser/ui/views/toolbar/toolbar_button.h b/chrome/browser/ui/views/toolbar/toolbar_button.h
index 99af5fc..cfc9d2d 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_button.h
+++ b/chrome/browser/ui/views/toolbar/toolbar_button.h
@@ -56,7 +56,13 @@
   // Should be called before first paint.
   void Init();
 
-  void SetHighlightColor(base::Optional<SkColor> color);
+  // Highlights the button by setting the label to given |highlight_text|, using
+  // tinting it using the |hightlight_color| if set. The highlight is displayed
+  // using an animation. If some highlight is already set, it shows the new
+  // highlight directly without any animation. To clear the previous highlight
+  // (also using an animation), call this function with both parameters empty.
+  void SetHighlight(const base::string16& highlight_text,
+                    base::Optional<SkColor> highlight_color);
 
   // Sets |margin_leading_| when the browser is maximized and updates layout
   // to make the focus rectangle centered.
@@ -122,8 +128,18 @@
  private:
   friend test::ToolbarButtonTestApi;
 
+  // Clears the current highlight, i.e. it sets the label to an empty string and
+  // clears the highlight color. If there was a non-empty highlight, previously,
+  // it hides the current highlight using an animation. Otherwise, it is a
+  // no-op.
+  void ClearHighlight();
+
   void UpdateHighlightBackgroundAndInsets();
 
+  // Sets the spacing on the outer side of the label (not the side where the
+  // image is). The spacing is applied only when the label is non-empty.
+  void SetLabelSideSpacing(int spacing);
+
   // Callback for MenuModelAdapter.
   void OnMenuClosed();
 
diff --git a/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.cc b/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.cc
index 0ac7c421..4ec46b7 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.cc
@@ -28,23 +28,20 @@
   page_action_icons_.push_back(manage_passwords_icon_views_);
 
   local_card_migration_icon_view_ = new autofill::LocalCardMigrationIconView(
-      browser->command_controller(), this,
-      // TODO(crbug.com/932818): The font list and the icon color may not be
-      // what we want here. Put placeholders for now.
-      views::style::GetFont(CONTEXT_TOOLBAR_BUTTON,
-                            views::style::STYLE_PRIMARY));
+      browser->command_controller(), this);
   page_action_icons_.push_back(local_card_migration_icon_view_);
 
-  save_card_icon_view_ = new autofill::SaveCardIconView(
-      browser->command_controller(), this,
-      // TODO(crbug.com/932818): The font list and the icon color may not be
-      // what we want here. Put placeholders for now.
-      views::style::GetFont(CONTEXT_TOOLBAR_BUTTON,
-                            views::style::STYLE_PRIMARY));
+  save_card_icon_view_ =
+      new autofill::SaveCardIconView(browser->command_controller(), this);
   page_action_icons_.push_back(save_card_icon_view_);
 
+  // TODO(crbug.com/932818): The font list and the icon color may not be
+  // what we want here. Put placeholders for now.
+  const gfx::FontList& font_list = views::style::GetFont(
+      CONTEXT_TOOLBAR_BUTTON, views::style::STYLE_PRIMARY);
   for (PageActionIconView* icon_view : page_action_icons_) {
     icon_view->SetVisible(false);
+    icon_view->SetFontList(font_list);
     icon_view->AddButtonObserver(this);
     icon_view->views::View::AddObserver(this);
     AddChildView(icon_view);
@@ -73,8 +70,6 @@
 
   if (avatar_)
     avatar_->UpdateIcon();
-
-  UpdateAvatarIconStateUi();
 }
 
 PageActionIconView* ToolbarPageActionIconContainerView::GetIconView(
@@ -101,22 +96,6 @@
   return false;
 }
 
-void ToolbarPageActionIconContainerView::UpdatePageActionIcon(
-    PageActionIconType icon_type) {
-  PageActionIconView* icon = GetIconView(icon_type);
-  if (icon)
-    icon->Update();
-
-  UpdateAvatarIconStateUi();
-}
-
-void ToolbarPageActionIconContainerView::ExecutePageActionIconForTesting(
-    PageActionIconType type) {
-  PageActionIconView* icon = GetIconView(type);
-  if (icon)
-    icon->ExecuteForTesting();
-}
-
 SkColor ToolbarPageActionIconContainerView::GetPageActionInkDropColor() const {
   return GetToolbarInkDropBaseColor(this);
 }
@@ -139,20 +118,9 @@
   UpdateAllIcons();
 }
 
-bool ToolbarPageActionIconContainerView::FocusInactiveBubbleForIcon(
-    PageActionIconView* icon_view) {
-  if (!icon_view->GetVisible() || !icon_view->GetBubble())
-    return false;
-
-  views::Widget* widget = icon_view->GetBubble()->GetWidget();
-  if (widget && widget->IsVisible() && !widget->IsActive()) {
-    widget->Show();
-    return true;
-  }
-  return false;
-}
-
-void ToolbarPageActionIconContainerView::UpdateAvatarIconStateUi() {
+void ToolbarPageActionIconContainerView::ChildVisibilityChanged(View* child) {
+  // The avatar should not show UI for paused state or error state when any icon
+  // in the toolbar page action icon container view is visible.
   // If it is in Incognito window, the avatar button shows a text "Incognito"
   // which should not be updated in any case.
   if (browser_->profile()->IsIncognitoProfile())
@@ -167,3 +135,16 @@
   }
   avatar_->SetAutofillIconVisible(autofill_icon_visible);
 }
+
+bool ToolbarPageActionIconContainerView::FocusInactiveBubbleForIcon(
+    PageActionIconView* icon_view) {
+  if (!icon_view->GetVisible() || !icon_view->GetBubble())
+    return false;
+
+  views::Widget* widget = icon_view->GetBubble()->GetWidget();
+  if (widget && widget->IsVisible() && !widget->IsActive()) {
+    widget->Show();
+    return true;
+  }
+  return false;
+}
diff --git a/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.h b/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.h
index 19f7646..fcf8a99 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.h
+++ b/chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_UI_VIEWS_TOOLBAR_TOOLBAR_PAGE_ACTION_ICON_CONTAINER_VIEW_H_
 
 #include "base/macros.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/views/page_action/page_action_icon_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h"
 
@@ -22,7 +22,6 @@
 // A container view for user-account-related PageActionIconViews and the profile
 // avatar icon.
 class ToolbarPageActionIconContainerView : public ToolbarIconContainerView,
-                                           public PageActionIconContainer,
                                            public PageActionIconView::Delegate {
  public:
   explicit ToolbarPageActionIconContainerView(Browser* browser);
@@ -37,10 +36,6 @@
   // ToolbarIconContainerView:
   void UpdateAllIcons() override;
 
-  // PageActionIconContainer:
-  void UpdatePageActionIcon(PageActionIconType icon_type) override;
-  void ExecutePageActionIconForTesting(PageActionIconType icon_type) override;
-
   // PageActionIconView::Delegate:
   SkColor GetPageActionInkDropColor() const override;
   content::WebContents* GetWebContentsForPageActionIconView() override;
@@ -48,6 +43,7 @@
 
   // views::View:
   void OnThemeChanged() override;
+  void ChildVisibilityChanged(View* child) override;
 
   autofill::LocalCardMigrationIconView* local_card_migration_icon_view() const {
     return local_card_migration_icon_view_;
@@ -66,10 +62,6 @@
  private:
   bool FocusInactiveBubbleForIcon(PageActionIconView* icon_view);
 
-  // The avatar should not show Ui for paused state or error state when any icon
-  // in the toolbar page action icon container view is visible.
-  void UpdateAvatarIconStateUi();
-
   autofill::LocalCardMigrationIconView* local_card_migration_icon_view_ =
       nullptr;
   autofill::SaveCardIconView* save_card_icon_view_ = nullptr;
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index 862adbc6..35dd3a41 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -415,10 +415,8 @@
     bool show_remember_selection,
     PageActionIconType icon_type,
     IntentPickerResponse callback) {
-  PageActionIconView* intent_picker_view =
-      location_bar()
-          ->omnibox_page_action_icon_container_view()
-          ->GetPageActionIconView(icon_type);
+  PageActionIconView* const intent_picker_view =
+      GetPageActionIconView(icon_type);
   if (!intent_picker_view)
     return;
 
@@ -814,9 +812,16 @@
   return GetAppMenuButton();
 }
 
-OmniboxPageActionIconContainerView*
-ToolbarView::GetOmniboxPageActionIconContainerView() {
-  return location_bar_->omnibox_page_action_icon_container_view();
+PageActionIconView* ToolbarView::GetPageActionIconView(
+    PageActionIconType type) {
+  PageActionIconView* icon =
+      location_bar()->omnibox_page_action_icon_container_view()->GetIconView(
+          type);
+  if (icon)
+    return icon;
+  return toolbar_page_action_container_
+             ? toolbar_page_action_container_->GetIconView(type)
+             : nullptr;
 }
 
 AppMenuButton* ToolbarView::GetAppMenuButton() {
@@ -845,30 +850,24 @@
 }
 
 views::View* ToolbarView::GetAnchorView(PageActionIconType type) {
-  if (base::FeatureList::IsEnabled(
-          autofill::features::kAutofillEnableToolbarStatusChip)) {
-    switch (type) {
-      case PageActionIconType::kLocalCardMigration:
-      case PageActionIconType::kManagePasswords:
-      case PageActionIconType::kSaveCard:
-        return toolbar_page_action_container_;
-      case PageActionIconType::kFind:
-      case PageActionIconType::kIntentPicker:
-      case PageActionIconType::kPwaInstall:
-      case PageActionIconType::kReaderMode:
-      case PageActionIconType::kSendTabToSelf:
-      case PageActionIconType::kSharedClipboard:
-      case PageActionIconType::kTranslate:
-      case PageActionIconType::kZoom:
-      case PageActionIconType::kNativeFileSystemAccess:
-      case PageActionIconType::kClickToCall:
-      case PageActionIconType::kCookieControls:
-        break;
+  // Return the container visually housing the icon so all the bubbles align
+  // with the same visible edge.
+  if (toolbar_page_action_container_) {
+    views::View* icon = GetPageActionIconView(type);
+    if (toolbar_page_action_container_->Contains(icon)) {
+      DCHECK(base::FeatureList::IsEnabled(
+          autofill::features::kAutofillEnableToolbarStatusChip));
+      return toolbar_page_action_container_;
     }
   }
   return location_bar_;
 }
 
+void ToolbarView::ZoomChangedForActiveTab(bool can_show_bubble) {
+  location_bar_->omnibox_page_action_icon_container_view()
+      ->ZoomChangedForActiveTab(can_show_bubble);
+}
+
 BrowserRootView::DropIndex ToolbarView::GetDropIndex(
     const ui::DropTargetEvent& event) {
   return {browser_->tab_strip_model()->active_index(), false};
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.h b/chrome/browser/ui/views/toolbar/toolbar_view.h
index 28eca1fd..eccd706f 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.h
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.h
@@ -12,7 +12,7 @@
 #include "base/observer_list.h"
 #include "base/scoped_observer.h"
 #include "chrome/browser/command_observer.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
+#include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/toolbar/app_menu_icon_controller.h"
 #include "chrome/browser/ui/toolbar/back_forward_menu_model.h"
 #include "chrome/browser/ui/views/frame/browser_root_view.h"
@@ -231,13 +231,13 @@
   BrowserActionsContainer* GetBrowserActionsContainer() override;
   ToolbarActionView* GetToolbarActionViewForId(const std::string& id) override;
   views::View* GetDefaultExtensionDialogAnchorView() override;
-  OmniboxPageActionIconContainerView* GetOmniboxPageActionIconContainerView()
-      override;
+  PageActionIconView* GetPageActionIconView(PageActionIconType type) override;
   AppMenuButton* GetAppMenuButton() override;
   gfx::Rect GetFindBarBoundingBox(int contents_height) const override;
   void FocusToolbar() override;
   views::AccessiblePaneView* GetAsAccessiblePaneView() override;
   views::View* GetAnchorView(PageActionIconType type) override;
+  void ZoomChangedForActiveTab(bool can_show_bubble) override;
 
   // BrowserRootView::DropTarget
   BrowserRootView::DropIndex GetDropIndex(
diff --git a/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc b/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc
index 31529c4..77c7c68 100644
--- a/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc
@@ -229,6 +229,8 @@
     params.types_enabled.push_back(PageActionIconType::kNativeFileSystemAccess);
   if (base::FeatureList::IsEnabled(content_settings::kImprovedCookieControls))
     params.types_enabled.push_back(PageActionIconType::kCookieControls);
+  params.types_enabled.push_back(PageActionIconType::kLocalCardMigration);
+  params.types_enabled.push_back(PageActionIconType::kSaveCard);
   params.icon_size = GetLayoutConstant(WEB_APP_PAGE_ACTION_ICON_SIZE);
   params.icon_color = GetCaptionColor();
   params.between_icon_spacing = HorizontalPaddingBetweenItems();
@@ -411,9 +413,9 @@
   return GetAppMenuButton();
 }
 
-OmniboxPageActionIconContainerView*
-WebAppFrameToolbarView::GetOmniboxPageActionIconContainerView() {
-  return omnibox_page_action_icon_container_view_;
+PageActionIconView* WebAppFrameToolbarView::GetPageActionIconView(
+    PageActionIconType type) {
+  return omnibox_page_action_icon_container_view_->GetIconView(type);
 }
 
 AppMenuButton* WebAppFrameToolbarView::GetAppMenuButton() {
@@ -450,6 +452,11 @@
   return web_app_menu_button_;
 }
 
+void WebAppFrameToolbarView::ZoomChangedForActiveTab(bool can_show_bubble) {
+  omnibox_page_action_icon_container_view_->ZoomChangedForActiveTab(
+      can_show_bubble);
+}
+
 void WebAppFrameToolbarView::OnWidgetVisibilityChanged(views::Widget* widget,
                                                        bool visibility) {
   if (!visibility || !pending_widget_visibility_)
@@ -464,6 +471,14 @@
   }
 }
 
+void WebAppFrameToolbarView::DisableAnimationForTesting() {
+  g_animation_disabled_for_testing = true;
+}
+
+views::View* WebAppFrameToolbarView::GetPageActionIconContainerForTesting() {
+  return omnibox_page_action_icon_container_view_;
+}
+
 gfx::Size WebAppFrameToolbarView::CalculatePreferredSize() const {
   // Prefer height consistency over accommodating edge case icons that may bump
   // up the container height (e.g. extension action icons with badges).
@@ -504,10 +519,6 @@
     content_settings_container_->FadeIn();
 }
 
-void WebAppFrameToolbarView::DisableAnimationForTesting() {
-  g_animation_disabled_for_testing = true;
-}
-
 views::View* WebAppFrameToolbarView::GetContentSettingContainerForTesting() {
   return content_settings_container_;
 }
diff --git a/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.h b/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.h
index 5a0b1579..3b34b77 100644
--- a/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.h
+++ b/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.h
@@ -27,6 +27,7 @@
 class AppMenuButton;
 class BrowserView;
 class ExtensionsToolbarContainer;
+class OmniboxPageActionIconContainerView;
 class WebAppOriginText;
 class WebAppMenuButton;
 
@@ -110,17 +111,20 @@
   BrowserActionsContainer* GetBrowserActionsContainer() override;
   ToolbarActionView* GetToolbarActionViewForId(const std::string& id) override;
   views::View* GetDefaultExtensionDialogAnchorView() override;
-  OmniboxPageActionIconContainerView* GetOmniboxPageActionIconContainerView()
-      override;
+  PageActionIconView* GetPageActionIconView(PageActionIconType type) override;
   AppMenuButton* GetAppMenuButton() override;
   gfx::Rect GetFindBarBoundingBox(int contents_height) const override;
   void FocusToolbar() override;
   views::AccessiblePaneView* GetAsAccessiblePaneView() override;
   views::View* GetAnchorView(PageActionIconType type) override;
+  void ZoomChangedForActiveTab(bool can_show_bubble) override;
 
   // views::WidgetObserver:
   void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override;
 
+  static void DisableAnimationForTesting();
+  views::View* GetPageActionIconContainerForTesting();
+
  protected:
   // views::AccessiblePaneView:
   gfx::Size CalculatePreferredSize() const override;
@@ -129,7 +133,6 @@
 
  private:
   friend class WebAppNonClientFrameViewAshTest;
-  friend class WebAppGlassBrowserFrameViewTest;
   friend class ImmersiveModeControllerAshWebAppBrowserTest;
   friend class WebAppAshInteractiveUITest;
 
@@ -142,7 +145,6 @@
   bool ShouldAnimate() const;
   void StartTitlebarAnimation();
   void FadeInContentSettingIcons();
-  static void DisableAnimationForTesting();
 
   class ContentSettingsContainer;
 
diff --git a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc
index d4fe70b6..74557d8 100644
--- a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc
@@ -92,7 +92,14 @@
   DISALLOW_COPY_AND_ASSIGN(AddSupervisionBrowserTest);
 };
 
-IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, URLParameters) {
+// Disabled on ASan and LSAn builds, because it's very flaky. See
+// crbug.com/1004237
+#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER)
+#define MAYBE_URLParameters DISABLED_URLParameters
+#else
+#define MAYBE_URLParameters URLParameters
+#endif
+IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, MAYBE_URLParameters) {
   // Open the Add Supervision URL.
   ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url());
   content::WaitForLoadStop(contents());
@@ -163,7 +170,15 @@
                                std::string(".webviewDiv")));
 }
 
-IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, ShowConfirmSignoutDialog) {
+// Disabled on ASan and LSAn builds, because it's very flaky. See
+// crbug.com/1004237
+#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER)
+#define MAYBE_ShowConfirmSignoutDialog DISABLED_ShowConfirmSignoutDialog
+#else
+#define MAYBE_ShowConfirmSignoutDialog ShowConfirmSignoutDialog
+#endif
+IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest,
+                       MAYBE_ShowConfirmSignoutDialog) {
   // Open the Add Supervision URL.
   ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url());
   content::WaitForLoadStop(contents());
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index ac9d5df..cc4df48 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -793,10 +793,6 @@
 const base::Feature kCrOSEnableUSMUserService{"CrOSEnableUSMUserService",
                                               base::FEATURE_ENABLED_BY_DEFAULT};
 
-// Enables or disables initialization & use of the Chrome OS ML Service.
-const base::Feature kMachineLearningService{"MachineLearningService",
-                                            base::FEATURE_DISABLED_BY_DEFAULT};
-
 // Enables or disables SmartDim on Chrome OS.
 const base::Feature kSmartDim{"SmartDim", base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index ae722d0f..ceaa3c6 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -498,9 +498,6 @@
 COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kCrOSEnableUSMUserService;
 
-COMPONENT_EXPORT(CHROME_FEATURES)
-extern const base::Feature kMachineLearningService;
-
 COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kSmartDim;
 
 COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kUsbguard;
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb
index cbc6b86..9d23344 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">‏قد تؤدي المتابعة بدون إدخال كلمة مرور Windows الحالية إلى فقدان المعلومات بطريقة لا يمكن التراجع عنها.</translation>
 <translation id="1383286653814676580">‏يُستخدم لتشغيل صفحة تسجيل الدخول لمقدِّم بيانات الاعتماد في Google.</translation>
 <translation id="1894475569413661128">تسجيل الدخول باستخدام حساب العمل</translation>
+<translation id="2329184763010379754">يتم السماح فقط للمستخدم الذي قفل هذا الكمبيوتر بتسجيل الدخول.</translation>
+<translation id="2398071111662077301">‏يتعذّر تحميل شاشة تسجيل الدخول بحساب Google بسبب حدوث مشكلة في تثبيت Chrome. لذا، يُرجى التواصل مع مشرفك.</translation>
 <translation id="2469311484561825731">تعذَّر تسجيل الدخول إلى حساب العمل. يُرجى التأكُّد من اتصال جهاز الكمبيوتر بالإنترنت ثم إعادة المحاولة.</translation>
+<translation id="2679096858700291438">‏لقد أدخلت كلمة مرور Windows غير صحيحة. يُرجى إعادة المحاولة.</translation>
+<translation id="2831078752570172210">تم قفل حسابك. يُرجى التواصل مع مشرف النظام.</translation>
+<translation id="2844349213149998955">لا يُسمح بتسجيل الدخول باستخدام حساب شخصي على هذا الجهاز. يُرجى تسجيل الدخول باستخدام حساب عمل.</translation>
 <translation id="3306357053520292004">سبق وتمت إضافة مستخدم على جهاز الكمبيوتر هذا باستخدام هذا الحساب. يُرجى تسجيل الدخول باستخدام حساب آخر.</translation>
 <translation id="3968372833844047539">‏لا يمكن إلا لمستخدمي "G Suite للمؤسسات" بتسجيل الدخول</translation>
 <translation id="4057329986137569701">حدث خطأ داخلي.</translation>
 <translation id="4267670563222825190">يتعذّر العثور على أي مستخدم نطاق في حسابك. يُرجى التواصل مع المشرف.</translation>
 <translation id="4300229033992784001">‏تم تغيير كلمة مرور حسابك. يُرجى إدخال كلمة مرور حساب Windows الحالي من أجل مزامنة حسابك على Windows مع حساب العمل.</translation>
 <translation id="4706454071748629324">تعذَّرت إضافة مستخدم جديد. يسمح جهاز الكمبيوتر هذا بإنشاء مستخدم واحد فقط باستخدام حساب عمل.</translation>
+<translation id="6033715878377252112">‏مزوّد بيانات الاعتماد في Google لمساعد Windows</translation>
+<translation id="6149399665202317746">‏مزوّد بيانات الاعتماد في Google لنظام التشغيل Windows</translation>
 <translation id="6312494990035843744">لا يُسمَح بتسجيل الدخول باستخدام حساب عمل على هذا النطاق. يُرجى المحاولة باستخدام حساب آخر.</translation>
 <translation id="6463752215771576050">تعذَّر تسجيل جهاز الكمبيوتر هذا لإدارة المؤسسة.  يُرجى تسجيل الدخول باستخدام حساب عمل آخر.</translation>
 <translation id="6657585470893396449">كلمة المرور</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">‏نسيت كلمة مرور Windows</translation>
 <translation id="866458870819756755">تعذَّر إنشاء مستخدم.</translation>
 <translation id="8875753657315897487">تسجيل الدخول باستخدام حساب العمل</translation>
+<translation id="8973975512230260387">‏لقد انتهت صلاحية الجلسة. سجّل الدخول باستخدام حساب العمل على Google.</translation>
+<translation id="9055998212250844221">‏حساب المستخدم الذي تم إنشاؤه من خلال مزوّد بيانات الاعتماد في Google لنظام التشغيل Windows</translation>
 <translation id="9135619837062629367">لا يُسمَح بتسجيل الدخول باستخدام هذا الحساب. يُرجى المحاولة باستخدام حساب آخر.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb
index 368fde3..74302e9 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Продължаването без въвеждане на текущата парола за Windows може да доведе до необратимо заличаване на информация.</translation>
 <translation id="1383286653814676580">Служи за стартиране на страницата за вход за доставчика на идентификационни данни за Google.</translation>
 <translation id="1894475569413661128">Влезте със служебния си профил.</translation>
+<translation id="2329184763010379754">Влизането в профила е разрешено само за потребителя, заключил този компютър.</translation>
+<translation id="2398071111662077301">Екранът за вход в Google не може да се зареди поради проблем в инсталацията на Chrome. Обърнете се към администратора си.</translation>
 <translation id="2469311484561825731">Влизането в служебния ви профил не бе успешно. Уверете се, че компютърът е свързан с интернет, и опитайте отново.</translation>
+<translation id="2679096858700291438">Въведохте неправилна парола за Windows. Моля, опитайте отново.</translation>
+<translation id="2831078752570172210">Профилът ви е заключен. Моля, свържете се със системния си администратор.</translation>
+<translation id="2844349213149998955">Влизането с личен профил в това устройство не е разрешено. Моля, използвайте служебен профил.</translation>
 <translation id="3306357053520292004">Потребител на този компютър вече е добавен посредством същия профил. Моля, влезте с друг профил.</translation>
 <translation id="3968372833844047539">Входът е разрешен само за потребители на G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Възникна вътрешна грешка.</translation>
 <translation id="4267670563222825190">Не е намерен потребител на домейна за профила ви. Моля, обърнете се към администратора си.</translation>
 <translation id="4300229033992784001">Паролата за профила ви е променена. Моля, въведете текущата си парола за Windows, за да синхронизирате акаунта си в Windows със служебния си профил.</translation>
 <translation id="4706454071748629324">Добавянето на нов потребител не бе успешно. Този компютър позволява само един потребител да бъде създаден посредством служебен профил.</translation>
+<translation id="6033715878377252112">Помощник за доставчика на идентификационни данни за Google за Windows</translation>
+<translation id="6149399665202317746">Доставчик на идентификационни данни за Google за Windows</translation>
 <translation id="6312494990035843744">Влизането със служебен профил в този домейн не е разрешено. Опитайте с друг профил.</translation>
 <translation id="6463752215771576050">Този компютър не може да бъде регистриран за корпоративно управление.  Моля, влезте с друг служебен профил.</translation>
 <translation id="6657585470893396449">Парола</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Забравена парола за Windows</translation>
 <translation id="866458870819756755">Създаването на потребител не бе успешно.</translation>
 <translation id="8875753657315897487">Влизане със служебния ви профил</translation>
+<translation id="8973975512230260387">Сесията ви изтече. Влезте със служебния си профил в Google.</translation>
+<translation id="9055998212250844221">Профил на потребител, създаден от доставчика на идентификационни данни за Google за Windows</translation>
 <translation id="9135619837062629367">Влизането с този профил не е разрешено. Опитайте с друг.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ca.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ca.xtb
index c92b6ba..d948a65 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ca.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ca.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Si continues sense introduir la contrasenya actual de Windows, pot ser que es perdi informació de forma irreversible.</translation>
 <translation id="1383286653814676580">S'utilitza per executar la pàgina d'inici de sessió del proveïdor de credencials de Google.</translation>
 <translation id="1894475569413661128">Inicia la sessió amb el compte de la feina.</translation>
+<translation id="2329184763010379754">Només l'usuari que ha bloquejat aquest ordinador pot iniciar-hi la sessió.</translation>
+<translation id="2398071111662077301">No es pot carregar la pantalla d'inici de sessió de Google perquè s'ha produït un problema en la instal·lació de Chrome. Contacta amb l'administrador.</translation>
 <translation id="2469311484561825731">No s'ha pogut iniciar la sessió al compte de la feina. Assegura't que l'ordinador tingui connexió a Internet i torna-ho a provar.</translation>
+<translation id="2679096858700291438">Has introduït una contrasenya de Windows incorrecta. Torna-ho a provar.</translation>
+<translation id="2831078752570172210">El teu compte s'ha bloquejat. Contacta amb l'administrador del sistema.</translation>
+<translation id="2844349213149998955">No es permet iniciar la sessió amb un compte personal en aquest dispositiu. Utilitza un compte de la feina.</translation>
 <translation id="3306357053520292004">Ja s'ha afegit un usuari a l'ordinador amb aquest compte. Inicia la sessió amb un altre compte.</translation>
 <translation id="3968372833844047539">Només poden iniciar la sessió els usuaris de G Suite Enterprise.</translation>
 <translation id="4057329986137569701">S'ha produït un error intern.</translation>
 <translation id="4267670563222825190">No s'ha trobat cap usuari del domini per al teu compte. Contacta amb l'administrador.</translation>
 <translation id="4300229033992784001">La contrasenya del compte ha canviat. Introdueix la contrasenya actual de Windows per sincronitzar el compte de Windows amb el de la feina.</translation>
 <translation id="4706454071748629324">No s'ha pogut afegir un usuari nou. En aquest ordinador només es pot crear un usuari amb un compte de la feina.</translation>
+<translation id="6033715878377252112">Aplicació d'ajuda del proveïdor de credencials de Google per a Windows</translation>
+<translation id="6149399665202317746">Proveïdor de credencials de Google per a Windows</translation>
 <translation id="6312494990035843744">No es permet iniciar la sessió amb un compte de la feina en aquest domini. Prova-ho amb un altre compte.</translation>
 <translation id="6463752215771576050">No es pot inscriure aquest ordinador en la gestió empresarial.  Inicia la sessió amb un altre compte de la feina.</translation>
 <translation id="6657585470893396449">Contrasenya</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">He oblidat la contrasenya de Windows</translation>
 <translation id="866458870819756755">No s'ha pogut crear cap usuari.</translation>
 <translation id="8875753657315897487">Inicia la sessió amb el compte de la feina</translation>
+<translation id="8973975512230260387">La sessió ha caducat. Inicia la sessió amb el compte de la feina de Google.</translation>
+<translation id="9055998212250844221">Compte d'usuari creat per un proveïdor de credencials de Google per a Windows</translation>
 <translation id="9135619837062629367">No es permet iniciar la sessió amb aquest compte. Prova-ho amb un altre.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb
index cef92e7..9ba1f79 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Pokud budete pokračovat bez zadání svého aktuálního hesla účtu Windows, může to vést k nevratné ztrátě informací.</translation>
 <translation id="1383286653814676580">Používá se ke spuštění přihlašovací stránky poskytovatele identifikačních údajů Google.</translation>
 <translation id="1894475569413661128">Přihlaste se pomocí pracovního účtu.</translation>
+<translation id="2329184763010379754">Přihlásit se může jen uživatel, který tento počítač uzamknul.</translation>
+<translation id="2398071111662077301">Přihlašovací obrazovku Google kvůli problému v instalaci Chromu nebylo možné načíst. Kontaktujte administrátora.</translation>
 <translation id="2469311484561825731">Přihlášení k pracovnímu účtu se nezdařilo. Zkontrolujte, zda je počítač připojen k internetu, a potom to zkuste znovu.</translation>
+<translation id="2679096858700291438">Zadali jste nesprávné heslo účtu Windows. Zkuste to znovu.</translation>
+<translation id="2831078752570172210">Váš účet byl uzamčen. Kontaktujte administrátora systému.</translation>
+<translation id="2844349213149998955">Přihlášení pomocí osobního účtu na tomto zařízení není povoleno. Přihlaste se pomocí pracovního účtu.</translation>
 <translation id="3306357053520292004">Pomocí tohoto účtu již byl do tohoto počítače uživatel přidán. Přihlaste se pomocí jiného účtu.</translation>
 <translation id="3968372833844047539">Přihlásit se smějí pouze uživatelé G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Došlo k interní chybě.</translation>
 <translation id="4267670563222825190">Pro váš účet nebyl nalezen žádný doménový uživatel. Obraťte se na administrátora.</translation>
 <translation id="4300229033992784001">Heslo vašeho účtu se změnilo. Chcete-li účet Windows synchronizovat se svým pracovním účtem, zadejte své aktuální heslo pro Windows.</translation>
 <translation id="4706454071748629324">Přidání nového uživatele se nezdařilo. Na tomto počítači lze pomocí pracovního účtu vytvořit jen jednoho uživatele.</translation>
+<translation id="6033715878377252112">Pomocník Poskytovatele identifikačních údajů Google pro Windows</translation>
+<translation id="6149399665202317746">Poskytovatel identifikačních údajů Google pro Windows</translation>
 <translation id="6312494990035843744">Přihlášení pomocí pracovních účtů v této doméně není povoleno. Zkuste jiný účet.</translation>
 <translation id="6463752215771576050">Tento počítač nelze zaregistrovat do podnikové správy.  Přihlaste se pomocí jiného pracovního účtu.</translation>
 <translation id="6657585470893396449">Heslo</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Zapomněl(a) jsem heslo účtu Windows</translation>
 <translation id="866458870819756755">Uživatele se nepodařilo vytvořit.</translation>
 <translation id="8875753657315897487">Přihlaste se pomocí pracovního účtu</translation>
+<translation id="8973975512230260387">Platnost relace vypršela. Přihlaste se pomocí pracovního účtu Google.</translation>
+<translation id="9055998212250844221">Uživatelský účet vytvořený pomocí Poskytovatele identifikačních údajů Google pro Windows</translation>
 <translation id="9135619837062629367">Přihlášení pomocí tohoto účtu není povoleno. Zkuste jiný účet.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_da.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_da.xtb
index beaef86..54a8fde 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_da.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_da.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Hvis du fortsætter uden at angive din aktuelle adgangskode til Windows, kan det medføre uopretteligt tab af oplysninger.</translation>
 <translation id="1383286653814676580">Bruges til at køre Google Loginhåndterings loginside.</translation>
 <translation id="1894475569413661128">Log ind med din arbejdskonto.</translation>
+<translation id="2329184763010379754">Det er kun den bruger, som låste computeren, der kan logge ind.</translation>
+<translation id="2398071111662077301">Google-loginskærmen kan ikke indlæses på grund af et problem med din Chrome-installation. Kontakt din administrator.</translation>
 <translation id="2469311484561825731">Der kunne ikke logges ind på din arbejdskonto. Sørg for, at computeren har internetforbindelse, og prøv igen.</translation>
+<translation id="2679096858700291438">Du har indtastet en forkert Windows-adgangskode. Prøv igen.</translation>
+<translation id="2831078752570172210">Din konto kan ikke åbnes. Kontakt din systemadministrator.</translation>
+<translation id="2844349213149998955">Det er ikke tilladt at logge ind med en personlig konto på denne enhed. Log ind med en arbejdskonto.</translation>
 <translation id="3306357053520292004">Der er allerede tilføjet en bruger ved hjælp af denne konto på denne computer. Log ind med en anden konto.</translation>
 <translation id="3968372833844047539">Kun G Suite Enterprise-brugere har tilladelse til at logge ind.</translation>
 <translation id="4057329986137569701">Der opstod en intern fejl.</translation>
 <translation id="4267670563222825190">Der blev ikke fundet nogen domænebruger for din konto. Kontakt din administrator.</translation>
 <translation id="4300229033992784001">Adgangskoden til din konto er ændret. Angiv din nuværende Windows-adgangskode for at synkronisere din Windows-konto med din arbejdskonto.</translation>
 <translation id="4706454071748629324">Det var ikke muligt at tilføje en ny bruger. Denne computer giver kun mulighed for at oprette én bruger med en arbejdskonto.</translation>
+<translation id="6033715878377252112">Hjælp til Google Loginhåndtering til Windows</translation>
+<translation id="6149399665202317746">Google Loginhåndtering til Windows</translation>
 <translation id="6312494990035843744">Det er ikke tilladt at logge ind på dette domæne med en arbejdskonto. Prøv med en anden konto.</translation>
 <translation id="6463752215771576050">Denne computer kan ikke tilmeldes virksomhedsadministration.  Log ind med en anden arbejdskonto.</translation>
 <translation id="6657585470893396449">Adgangskode</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Glemt adgangskode til Windows</translation>
 <translation id="866458870819756755">En bruger kunne ikke oprettes.</translation>
 <translation id="8875753657315897487">Log ind med din arbejdskonto</translation>
+<translation id="8973975512230260387">Din session er udløbet. Log ind med din Google-arbejdskonto.</translation>
+<translation id="9055998212250844221">Brugerkonto, der er oprettet af Google Loginhåndtering til Windows</translation>
 <translation id="9135619837062629367">Det er ikke tilladt at logge ind med denne konto. Prøv med en anden konto.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb
index 134e029..2d118833 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Wenn Sie fortfahren, ohne Ihr aktuelles Windows-Passwort einzugeben, gehen möglicherweise Informationen verloren, die nicht wiederhergestellt werden können.</translation>
 <translation id="1383286653814676580">Wird für die Anmeldeseite des Google-Anmeldeinformationsanbieters genutzt.</translation>
 <translation id="1894475569413661128">Melden Sie sich mit Ihrem Arbeitskonto an.</translation>
+<translation id="2329184763010379754">Nur der Nutzer, der den Computer gesperrt hat, kann sich anmelden.</translation>
+<translation id="2398071111662077301">Der Google-Anmeldebildschirm kann aufgrund eines Problems mit Ihrer Installation von Chrome nicht geladen werden. Wenden Sie sich an Ihren Administrator.</translation>
 <translation id="2469311484561825731">Die Anmeldung in Ihrem Arbeitskonto ist fehlgeschlagen. Kontrollieren Sie, ob der Computer mit dem Internet verbunden ist, und versuchen Sie es noch einmal.</translation>
+<translation id="2679096858700291438">Sie haben ein falsches Windows-Passwort eingegeben. Versuchen Sie es noch einmal.</translation>
+<translation id="2831078752570172210">Ihr Konto wurde gesperrt. Bitte setzen Sie sich mit dem Systemadministrator in Verbindung.</translation>
+<translation id="2844349213149998955">Die Anmeldung mit einem privaten Konto ist auf diesem Gerät nicht zulässig. Melden Sie sich bitte mit einem Arbeitskonto an.</translation>
 <translation id="3306357053520292004">Ein Nutzer dieses Computers wurde bereits über dieses Konto hinzugefügt. Bitte melden Sie sich mit einem anderen Konto an.</translation>
 <translation id="3968372833844047539">Nur G Suite Enterprise-Nutzer dürfen sich anmelden.</translation>
 <translation id="4057329986137569701">Ein interner Fehler ist aufgetreten.</translation>
 <translation id="4267670563222825190">Für Ihr Konto wurde kein Domainnutzer gefunden. Bitte wenden Sie sich an Ihren Administrator.</translation>
 <translation id="4300229033992784001">Das Passwort für Ihr Konto wurde geändert. Geben Sie Ihr aktuelles Windows-Passwort ein, um Ihr Windows-Konto mit Ihrem Arbeitskonto zu synchronisieren.</translation>
 <translation id="4706454071748629324">Es konnte kein neuer Nutzer hinzugefügt werden. Auf diesem Computer kann nur ein Nutzer mit einem Arbeitskonto erstellt werden.</translation>
+<translation id="6033715878377252112">Google-Anmeldeinformationsanbieter-Hilfsdienst für Windows</translation>
+<translation id="6149399665202317746">Google-Anmeldeinformationsanbieter für Windows</translation>
 <translation id="6312494990035843744">Die Anmeldung mit einem Arbeitskonto ist bei dieser Domain nicht zulässig. Versuchen Sie es mit einem anderen Konto.</translation>
 <translation id="6463752215771576050">Dieser Computer kann nicht für die Unternehmensverwaltung registriert werden.  Bitte melden Sie sich mit einem anderen Arbeitskonto an.</translation>
 <translation id="6657585470893396449">Passwort</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Windows-Passwort vergessen</translation>
 <translation id="866458870819756755">Ein Nutzer konnte nicht erstellt werden.</translation>
 <translation id="8875753657315897487">Mit Ihrem Arbeitskonto anmelden</translation>
+<translation id="8973975512230260387">Ihre Sitzung ist abgelaufen. Melden Sie sich mit Ihrem Google-Arbeitskonto an.</translation>
+<translation id="9055998212250844221">Nutzerkonto wurde vom Google-Anmeldeinformationsanbieter für Windows erstellt</translation>
 <translation id="9135619837062629367">Die Anmeldung mit diesem Konto ist nicht zulässig. Versuchen Sie es mit einem anderen Konto.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_el.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_el.xtb
index 1d157f4c..f193bfa 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_el.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_el.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Η συνέχεια χωρίς την εισαγωγή του τρέχοντος κωδικού πρόσβασης των Windows μπορεί να προκαλέσει μη αντιστρέψιμη απώλεια πληροφοριών.</translation>
 <translation id="1383286653814676580">Χρησιμοποιείται για την εκτέλεση της σελίδας σύνδεσης του Google Credential Provider.</translation>
 <translation id="1894475569413661128">Συνδεθείτε χρησιμοποιώντας τον λογαριασμό εργασίας σας.</translation>
+<translation id="2329184763010379754">Μόνο ο χρήστης που κλείδωσε αυτόν τον υπολογιστή επιτρέπεται να συνδεθεί.</translation>
+<translation id="2398071111662077301">Δεν είναι δυνατή η φόρτωση της οθόνης σύνδεσης Google, λόγω ενός ζητήματος στην εγκατάσταση του Chrome. Επικοινωνήστε με τον διαχειριστή σας.</translation>
 <translation id="2469311484561825731">Η σύνδεση στον λογαριασμό εργασίας σας απέτυχε. Βεβαιωθείτε ότι ο υπολογιστής είναι συνδεδεμένος στο διαδίκτυο και έπειτα προσπαθήστε ξανά.</translation>
+<translation id="2679096858700291438">Έχετε εισαγάγει έναν εσφαλμένο κωδικό πρόσβασης των Windows. Δοκιμάστε ξανά.</translation>
+<translation id="2831078752570172210">Ο λογαριασμός σας κλειδώθηκε. Επικοινωνήστε με τον διαχειριστή του συστήματός σας.</translation>
+<translation id="2844349213149998955">Δεν επιτρέπεται η σύνδεση σε αυτήν τη συσκευή με προσωπικούς λογαριασμούς. Συνδεθείτε με έναν λογαριασμό εργασίας.</translation>
 <translation id="3306357053520292004">Ένας χρήστης σε αυτόν τον υπολογιστή προστέθηκε ήδη χρησιμοποιώντας αυτόν τον λογαριασμό. Συνδεθείτε με άλλον λογαριασμό.</translation>
 <translation id="3968372833844047539">Η σύνδεση επιτρέπεται μόνο στους χρήστες του Gsuite Enterprise.</translation>
 <translation id="4057329986137569701">Προέκυψε εσωτερικό σφάλμα.</translation>
 <translation id="4267670563222825190">Δεν βρέθηκε χρήστης τομέα για τον λογαριασμό σας. Επικοινωνήστε με τον διαχειριστή.</translation>
 <translation id="4300229033992784001">Ο κωδικός πρόσβασης του λογαριασμού σας άλλαξε. Εισαγάγετε τον τρέχοντα κωδικό πρόσβασης των Windows προκειμένου να συγχρονίσετε τον λογαριασμό σας Windows με τον λογαριασμό εργασίας σας.</translation>
 <translation id="4706454071748629324">Η προσθήκη του νέου χρήστη απέτυχε. Αυτός ο υπολογιστής επιτρέπει τη δημιουργία μόνο ενός χρήστη με τη χρήση λογαριασμού εργασίας.</translation>
+<translation id="6033715878377252112">Βοηθός Υπηρεσίας παροχής διαπιστευτηρίων Google για Windows</translation>
+<translation id="6149399665202317746">Υπηρεσία παροχής διαπιστευτηρίων Google για Windows</translation>
 <translation id="6312494990035843744">Δεν επιτρέπεται η σύνδεση σε αυτόν τον τομέα με λογαριασμούς εργασίας. Δοκιμάστε έναν άλλον λογαριασμό.</translation>
 <translation id="6463752215771576050">Δεν ήταν δυνατή η εγγραφή αυτού του υπολογιστή για διαχείριση επιχειρήσεων.  Συνδεθείτε με έναν άλλο λογαριασμό εργασίας.</translation>
 <translation id="6657585470893396449">Κωδικός πρόσβασης</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Ξέχασα τον κωδικό πρόσβασης των Windows</translation>
 <translation id="866458870819756755">Δεν ήταν δυνατή η δημιουργία χρήστη.</translation>
 <translation id="8875753657315897487">Συνδεθείτε χρησιμοποιώντας τον λογαριασμό εργασίας σας.</translation>
+<translation id="8973975512230260387">Η περίοδος σύνδεσής σας έχει λήξει. Συνδεθείτε χρησιμοποιώντας τον λογαριασμό εργασίας σας Google.</translation>
+<translation id="9055998212250844221">Ο λογαριασμός χρήστη δημιουργήθηκε από την Υπηρεσία παροχής διαπιστευτηρίων Google για Windows.</translation>
 <translation id="9135619837062629367">Δεν επιτρέπεται η σύνδεση με αυτόν τον λογαριασμό. Δοκιμάστε κάποιον άλλον λογαριασμό.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb
index 2b0b31ef..83733bb3 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Si continúas sin ingresar tu contraseña de Windows actual, es posible que se pierda información de forma irreversible.</translation>
 <translation id="1383286653814676580">Se usa para ejecutar la página de acceso del proveedor de credenciales de Google.</translation>
 <translation id="1894475569413661128">Accede con tu cuenta de trabajo.</translation>
+<translation id="2329184763010379754">Solo puede acceder el usuario que bloqueó esta computadora.</translation>
+<translation id="2398071111662077301">No es posible cargar la página de acceso de Google debido a un problema en la instalación del navegador Chrome. Comunícate con el administrador.</translation>
 <translation id="2469311484561825731">No pudiste acceder a tu cuenta de trabajo. Asegúrate de que la computadora tenga una conexión a Internet y vuelve a intentarlo.</translation>
+<translation id="2679096858700291438">Ingresaste una contraseña de Windows incorrecta. Vuelve a intentarlo.</translation>
+<translation id="2831078752570172210">Se bloqueó tu cuenta. Comunícate con tu administrador del sistema.</translation>
+<translation id="2844349213149998955">No se permite el acceso con una cuenta personal en este dispositivo. Usa una cuenta de trabajo para acceder.</translation>
 <translation id="3306357053520292004">Ya se agregó un usuario en esta computadora que usa esta cuenta. Accede con una diferente.</translation>
 <translation id="3968372833844047539">Solo pueden acceder los usuarios de G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Ocurrió un error interno.</translation>
 <translation id="4267670563222825190">No se encontró ningún usuario de dominio para tu cuenta. Ponte en contacto con el administrador.</translation>
 <translation id="4300229033992784001">Se cambió la contraseña de tu cuenta. Ingresa tu contraseña de Windows actual para sincronizar tu cuenta de Windows con tu cuenta de trabajo.</translation>
 <translation id="4706454071748629324">No se pudo agregar un usuario nuevo. Esta computadora solo permite crear un usuario con una cuenta de trabajo.</translation>
+<translation id="6033715878377252112">Proveedor de credenciales de Google para el asistente de Windows</translation>
+<translation id="6149399665202317746">Proveedor de credenciales de Google para Windows</translation>
 <translation id="6312494990035843744">No se permite el acceso con una cuenta de trabajo en este dominio. Prueba con una cuenta diferente.</translation>
 <translation id="6463752215771576050">No se pudo inscribir esta computadora para la administración empresarial.  Accede con otra cuenta de trabajo.</translation>
 <translation id="6657585470893396449">Contraseña</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Olvidé la contraseña de Windows</translation>
 <translation id="866458870819756755">No se pudo crear el usuario.</translation>
 <translation id="8875753657315897487">Acceder con tu cuenta de trabajo</translation>
+<translation id="8973975512230260387">Finalizó la sesión. Accede con tu Cuenta de Google de trabajo.</translation>
+<translation id="9055998212250844221">Cuenta de usuario creada por el Proveedor de credenciales de Google para Windows</translation>
 <translation id="9135619837062629367">No se permite acceder con esta cuenta. Prueba con una cuenta diferente.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_es.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_es.xtb
index 3a972b8..c9380c0 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_es.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_es.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Continuar sin introducir tu contraseña actual de Windows podría causar una pérdida de información irreversible.</translation>
 <translation id="1383286653814676580">Se usa para ejecutar la página de inicio de sesión de Google Credential Provider.</translation>
 <translation id="1894475569413661128">Inicia sesión con tu cuenta de trabajo.</translation>
+<translation id="2329184763010379754">Solo el usuario que ha bloqueado este ordenador puede iniciar sesión.</translation>
+<translation id="2398071111662077301">No se ha podido cargar la pantalla de inicio de sesión de Google debido a un problema con tu instalación de Chrome. Ponte en contacto con el administrador.</translation>
 <translation id="2469311484561825731">Se ha producido un error al iniciar sesión con tu cuenta de trabajo. Asegúrate de que el ordenador está conectado a Internet e inténtalo de nuevo.</translation>
+<translation id="2679096858700291438">La contraseña de Windows que has introducido es incorrecta. Inténtalo de nuevo.</translation>
+<translation id="2831078752570172210">Parece que se ha bloqueado tu cuenta. Ponte en contacto con el administrador del sistema.</translation>
+<translation id="2844349213149998955">No se permite iniciar sesión con una cuenta personal en este dispositivo. Inicia sesión con una cuenta de trabajo.</translation>
 <translation id="3306357053520292004">Ya se ha registrado otro usuario en este ordenador con esta cuenta. Inicia sesión con otra cuenta.</translation>
 <translation id="3968372833844047539">Solo pueden iniciar sesión los usuarios de empresa de G Suite.</translation>
 <translation id="4057329986137569701">Se ha producido un error interno.</translation>
 <translation id="4267670563222825190">No se ha encontrado ningún usuario de dominio para tu cuenta. Ponte en contacto con tu administrador.</translation>
 <translation id="4300229033992784001">La contraseña de tu cuenta ha cambiado. Introduce tu contraseña de Windows actual para sincronizar tu cuenta de Windows con la de trabajo.</translation>
 <translation id="4706454071748629324">No se ha podido añadir un nuevo usuario. En este ordenador solo se pueden crear usuarios con una cuenta de trabajo.</translation>
+<translation id="6033715878377252112">Asistente del proveedor de credenciales de Google para Windows</translation>
+<translation id="6149399665202317746">Proveedor de credenciales de Google para Windows</translation>
 <translation id="6312494990035843744">No se permite iniciar sesión con cuentas de trabajo en este dominio. Prueba con otra cuenta.</translation>
 <translation id="6463752215771576050">No se puede registrar este ordenador para que lo gestione la empresa.  Inicia sesión con otra cuenta de trabajo.</translation>
 <translation id="6657585470893396449">Contraseña</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">He olvidado la contraseña de Windows</translation>
 <translation id="866458870819756755">No se ha podido crear el usuario.</translation>
 <translation id="8875753657315897487">Inicia sesión con tu cuenta de trabajo</translation>
+<translation id="8973975512230260387">Tu sesión ha caducado. Inicia sesión con tu cuenta de trabajo de Google.</translation>
+<translation id="9055998212250844221">El proveedor de credenciales de Google para Windows ha creado esta cuenta de usuario</translation>
 <translation id="9135619837062629367">No se permite iniciar sesión con esta cuenta. Prueba con otra.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb
index 1e2f3d59..6ed431b 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Kui jätkate ilma Windowsi praegust parooli sisestamata, võib teave jäädavalt kaotsi minna.</translation>
 <translation id="1383286653814676580">Kasutatakse Google'i mandaadipakkuja sisselogimislehe käitamiseks.</translation>
 <translation id="1894475569413661128">Logige sisse oma töökontoga.</translation>
+<translation id="2329184763010379754">Ainult kasutaja, kes selle arvuti lukustas, tohib sisse logida.</translation>
+<translation id="2398071111662077301">Chrome'i installimisega seotud probleemi tõttu ei saa Google'i sisselogimiskuva laadida. Võtke ühendust administraatoriga.</translation>
 <translation id="2469311484561825731">Töökontole sisselogimine nurjus. Veenduge, et Interneti-ühendus töötaks, ja proovige uuesti.</translation>
+<translation id="2679096858700291438">Sisestasite Windowsi jaoks vale parooli. Proovige uuesti.</translation>
+<translation id="2831078752570172210">Teie konto on lukustatud. Võtke ühendust süsteemiadministraatoriga.</translation>
+<translation id="2844349213149998955">Isikliku kontoga sisselogimine pole selles seadmes lubatud. Logige sisse töökontoga.</translation>
 <translation id="3306357053520292004">Arvutis lisati juba selle kontoga kasutaja. Logige sisse teise kontoga.</translation>
 <translation id="3968372833844047539">Sisse saavad logida ainult Gsuite Enterprise'i kasutajad.</translation>
 <translation id="4057329986137569701">Ilmnes sisemine viga.</translation>
 <translation id="4267670563222825190">Teie konto puhul ühtegi domeenikasutajat ei leitud. Võtke ühendust administraatoriga.</translation>
 <translation id="4300229033992784001">Teie konto parool on muutunud. Sisestage oma praegune Windowsi parool, et sünkroonida Windowsi konto töökontoga.</translation>
 <translation id="4706454071748629324">Uue kasutaja lisamine nurjus. Arvuti lubab töökontoga luua ainult ühe kasutada.</translation>
+<translation id="6033715878377252112">Windowsi jaoks mõeldud Google'i identimisteabe teenuste pakkuja abi</translation>
+<translation id="6149399665202317746">Windowsi jaoks mõeldud Google'i identimisteabe teenuste pakkuja</translation>
 <translation id="6312494990035843744">Selles domeenis on töökontoga sisselogimine keelatud. Proovige teist kontot.</translation>
 <translation id="6463752215771576050">Seda arvutit ei saa ettevõtte halduses registreerida.  Logige sisse muu töökontoga.</translation>
 <translation id="6657585470893396449">Parool</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Unustasin Windowsi parooli</translation>
 <translation id="866458870819756755">Kasutajat ei saanud luua.</translation>
 <translation id="8875753657315897487">Logige sisse oma töökontoga</translation>
+<translation id="8973975512230260387">Teie seanss on aegunud. Logige sisse oma Google'i töökontoga.</translation>
+<translation id="9055998212250844221">Windowsi jaoks mõeldud Google'i identimisteabe teenuste pakkuja loodud kasutajakonto</translation>
 <translation id="9135619837062629367">Sisselogimine selle Google'i kontoga pole lubatud. Proovige muud kontot.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_fa.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_fa.xtb
index 4a0257a..0b5cc0d8 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_fa.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_fa.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">‏ادامه دادن بدون وارد کردن گذرواژه کنونی Windows ممکن است باعث شود اطلاعات به‌طرز غیرفابل برگشت از دست برود.</translation>
 <translation id="1383286653814676580">‏برای اجرای صفحه ورود به سیستم «ارائه‌دهنده اطلاعات کاربری Google» استفاده می‌شود.</translation>
 <translation id="1894475569413661128">ورود به سیستم با استفاده از حساب کاری</translation>
+<translation id="2329184763010379754">فقط کاربری که این رایانه را قفل کرده مجاز است به سیستم وارد شود.</translation>
+<translation id="2398071111662077301">‏به‌دلیل بروز مشکل در نصب Chrome، صفحه ورود به سیستم Google بار نشد. با سرپرست تماس بگیرید.</translation>
 <translation id="2469311484561825731">ورود به سیستم حساب کاری انجام نشد. مطمئن شوید رایانه اتصال اینترنت داشته باشد و سپس دوباره امتحان کنید.</translation>
+<translation id="2679096858700291438">‏گذرواژه نادرستی برای Windows وارد کردید. لطفاً دوباره امتحان کنید.</translation>
+<translation id="2831078752570172210">حسابتان مسدود شده است. لطفاً با سرپرست سیستم تماس بگیرید.</translation>
+<translation id="2844349213149998955">ورود به سیستم با حساب شخصی در این دستگاه مجاز نیست. لطفاً با حساب کاری به سیستم وارد شوید.</translation>
 <translation id="3306357053520292004">کاربری در این رایانه قبلاً با استفاده از این حساب اضافه شده است. لطفاً با حساب دیگری به سیستم وارد شوید.</translation>
 <translation id="3968372833844047539">‏تنها کاربران سازمانی Gsuite مجازند به سیستم وارد شوند.</translation>
 <translation id="4057329986137569701">خطای داخلی روی داد.</translation>
 <translation id="4267670563222825190">کاربر دامنه‌ای برای حسابتان پیدا نشد. لطفاً با سرپرست خود تماس بگیرید.</translation>
 <translation id="4300229033992784001">‏گذرواژه حسابتان تغییر کرد. لطفاً برای همگام‌سازی حساب Windows با حساب کاری خود، گذرواژه فعلی Windows را وارد کنید.</translation>
 <translation id="4706454071748629324">کاربر جدید اضافه نشد. این رایانه فقط اجازه می‌دهد یک کاربر با استفاده از حساب کاری ایجاد شود.</translation>
+<translation id="6033715878377252112">‏راهنمای «ارائه‌دهنده اطلاعات کاربری Google» ویژه Windows</translation>
+<translation id="6149399665202317746">‏«ارائه‌دهنده اطلاعات کاربری Google» ویژه Windows</translation>
 <translation id="6312494990035843744">ورود به سیستم با حساب کاری در این دامنه مجاز نیست. حساب دیگری را امتحان کنید.</translation>
 <translation id="6463752215771576050">این رایانه برای مدیریت سازمانی ثبت‌نام نشد.  لطفاً با حساب کاری دیگری به سیستم وارد شوید.</translation>
 <translation id="6657585470893396449">گذرواژه</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">‏فراموش کردن گذرواژه Windows</translation>
 <translation id="866458870819756755">کاربر ایجاد نشد.</translation>
 <translation id="8875753657315897487">ورود به سیستم بااستفاده از حساب کاری</translation>
+<translation id="8973975512230260387">‏جلسه شما منقضی شده است. بااستفاده از حساب Google کاری، به سیستم وارد شوید.</translation>
+<translation id="9055998212250844221">‏حساب کاربر را «ارائه‌دهنده اطلاعات کاربری Google» ویژه Windows ایجاد کرده است</translation>
 <translation id="9135619837062629367">ورود به سیستم با این حساب مجاز نیست. حساب دیگری را امتحان کنید.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_fi.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_fi.xtb
index 0be3ae86..5960a712 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_fi.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_fi.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Jos jatkat lisäämättä nykyistä Windows-salasanaa, saatat menettää joitain tietoja pysyvästi.</translation>
 <translation id="1383286653814676580">Käytetään Googlen tunnistuspalvelun kirjautumissivun käynnistämiseen.</translation>
 <translation id="1894475569413661128">Kirjaudu sisään työtililläsi.</translation>
+<translation id="2329184763010379754">Vain tietokoneen lukinneella käyttäjällä on oikeus kirjautua sisään.</translation>
+<translation id="2398071111662077301">Googlen kirjautumisnäyttöä ei voitu ladata Chromen asennuksessa ilmenneen ongelman takia. Ota yhteyttä järjestelmänvalvojaasi.</translation>
 <translation id="2469311484561825731">Työtilillesi kirjautuminen epäonnistui. Varmista, että tietokoneen internetyhteys toimii, ja yritä uudelleen.</translation>
+<translation id="2679096858700291438">Kirjoittamasi Windows-salasana on virheellinen. Yritä uudelleen.</translation>
+<translation id="2831078752570172210">Tilisi on lukittu. Ota yhteyttä tilisi järjestelmänvalvojaan.</translation>
+<translation id="2844349213149998955">Kirjautuminen tähän laitteeseen kuuluvalla henkilökohtaisella tilillä on estetty. Kirjaudu sisään työtilillä.</translation>
 <translation id="3306357053520292004">Tämän tietokoneen käyttäjä on jo lisätty tällä tilillä. Kirjaudu sisään toisella tilillä.</translation>
 <translation id="3968372833844047539">Vain Gsuite Enterprise ‑käyttäjät voivat kirjautua sisään.</translation>
 <translation id="4057329986137569701">Tapahtui sisäinen virhe.</translation>
 <translation id="4267670563222825190">Verkkotunnuksen käyttäjää ei löytynyt tililtäsi. Ota yhteyttä järjestelmänvalvojaasi.</translation>
 <translation id="4300229033992784001">Tilisi salasana on muuttunut. Synkronoi Windows- ja työtilisi lisäämällä nykyinen Windows-salasanasi.</translation>
 <translation id="4706454071748629324">Uuden käyttäjän lisääminen epäonnistui. Tämä tietokone sallii vain yhden käyttäjän luomisen työtilillä.</translation>
+<translation id="6033715878377252112">Googlen tunnistuspalvelu Windowsille ‑apuri</translation>
+<translation id="6149399665202317746">Googlen tunnistuspalvelu Windowsille</translation>
 <translation id="6312494990035843744">Kirjautuminen tähän verkkotunnukseen kuuluvalla työtilillä on estetty. Käytä toista tiliä.</translation>
 <translation id="6463752215771576050">Tämän tietokoneen rekisteröinti yritysylläpitoon epäonnistui.  Kirjaudu sisään toisella työtilillä.</translation>
 <translation id="6657585470893396449">Salasana</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Unohdin Windows-salasanan</translation>
 <translation id="866458870819756755">Käyttäjän luominen epäonnistui.</translation>
 <translation id="8875753657315897487">Kirjaudu sisään työtililläsi</translation>
+<translation id="8973975512230260387">Istuntosi on vanhentunut. Kirjaudu sisään Google-työtililläsi.</translation>
+<translation id="9055998212250844221">Käyttäjätilin loi Googlen tunnistuspalvelu Windowsille</translation>
 <translation id="9135619837062629367">Kirjautuminen tällä tilillä on estetty. Käytä toista tiliä.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb
index 0cd71ec..26b7f1cb 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Si vous poursuivez sans saisir votre mot de passe Windows actuel, vous risquez de perdre des informations définitivement.</translation>
 <translation id="1383286653814676580">Utilisé pour exécuter la page de connexion du fournisseur d'informations d'identification Google.</translation>
 <translation id="1894475569413661128">Connectez-vous avec votre compte professionnel.</translation>
+<translation id="2329184763010379754">Seul l'utilisateur ayant verrouillé cet ordinateur est autorisé à se connecter.</translation>
+<translation id="2398071111662077301">Impossible de charger l'écran de connexion Google en raison d'un problème d'installation de Chrome. Contactez votre administrateur.</translation>
 <translation id="2469311484561825731">Échec de la connexion à votre compte professionnel. Assurez-vous que l'ordinateur est connecté à Internet, puis réessayez.</translation>
+<translation id="2679096858700291438">Le mot de passe Windows que vous avez saisi est incorrect. Veuillez réessayer.</translation>
+<translation id="2831078752570172210">Votre compte a été verrouillé. Veuillez contacter votre administrateur système.</translation>
+<translation id="2844349213149998955">Vous n'êtes pas autorisé à vous connecter avec un compte personnel sur cet appareil. Veuillez vous connecter avec un compte professionnel.</translation>
 <translation id="3306357053520292004">Un utilisateur de cet ordinateur a déjà été ajouté à l'aide de ce compte. Veuillez vous connecter avec un autre compte.</translation>
 <translation id="3968372833844047539">Seuls les utilisateurs de G Suite Enterprise sont autorisés à se connecter.</translation>
 <translation id="4057329986137569701">Une erreur interne s'est produite.</translation>
 <translation id="4267670563222825190">Impossible de trouver un utilisateur du domaine pour votre compte. Veuillez contacter votre administrateur.</translation>
 <translation id="4300229033992784001">Le mot de passe de votre compte a été modifié. Veuillez saisir votre mot de passe Windows actuel afin de synchroniser votre compte Windows avec votre compte professionnel.</translation>
 <translation id="4706454071748629324">Échec de l'ajout d'un nouvel utilisateur. Ce ordinateur n'autorise que la création d'un utilisateur avec un compte professionnel.</translation>
+<translation id="6033715878377252112">Outil d'aide du fournisseur d'informations d'identification Google pour Windows</translation>
+<translation id="6149399665202317746">Fournisseur d'informations d'identification Google pour Windows</translation>
 <translation id="6312494990035843744">La connexion avec un compte professionnel n'est pas autorisée sur ce domaine. Utilisez un autre compte.</translation>
 <translation id="6463752215771576050">Impossible d'enregistrer cet ordinateur pour bénéficier de la gestion d'entreprise.  Veuillez vous connecter avec un autre compte professionnel.</translation>
 <translation id="6657585470893396449">Mot de passe</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Vous avez oublié votre mot de passe Windows ?</translation>
 <translation id="866458870819756755">Impossible de créer le compte utilisateur.</translation>
 <translation id="8875753657315897487">Connectez-vous avec votre compte professionnel</translation>
+<translation id="8973975512230260387">Votre session est arrivée à expiration. Connectez-vous avec votre compte professionnel Google.</translation>
+<translation id="9055998212250844221">Compte utilisateur créé par le fournisseur d'informations d'identification Google pour Windows</translation>
 <translation id="9135619837062629367">La connexion avec ce compte n'est pas autorisée. Utilisez un autre compte.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_hr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_hr.xtb
index 70b7647..52b8b8fa 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_hr.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_hr.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Ako nastavite bez unošenja svoje trenutačne zaporke za Windows, možete nepovratno izgubiti informacije.</translation>
 <translation id="1383286653814676580">Upotrebljava se za pokretanje stranice za prijavu na Google davatelj vjerodajnica.</translation>
 <translation id="1894475569413661128">Prijavite se radnim računom.</translation>
+<translation id="2329184763010379754">Može se prijaviti samo korisnik koji je zaključao računalo.</translation>
+<translation id="2398071111662077301">Učitavanje zaslona za prijavu Google računom nije uspjelo zbog problema s vašom instalacijom Chromea. Obratite se svom administratoru.</translation>
 <translation id="2469311484561825731">Prijava na radni račun nije uspjela. Provjerite je li računalo povezano s internetom i pokušajte ponovo.</translation>
+<translation id="2679096858700291438">Unijeli ste netočnu zaporku za Windows. Pokušajte ponovo.</translation>
+<translation id="2831078752570172210">Izgubili ste pristup računu. Obratite se administratoru sustava.</translation>
+<translation id="2844349213149998955">Na ovom uređaju nije dopuštena prijava osobnim računom. Prijavite se poslovnim računom.</translation>
 <translation id="3306357053520292004">Na ovom je računalu već dodan korisnik pomoću tog. Prijavite se nekim drugim računom.</translation>
 <translation id="3968372833844047539">Prijava je dopuštena samo poslovnim korisnicima Gsuitea.</translation>
 <translation id="4057329986137569701">Došlo je do interne pogreške.</translation>
 <translation id="4267670563222825190">Za vaš račun nije pronađen nijedan korisnik domene. Obratite se administratoru.</translation>
 <translation id="4300229033992784001">Promijenjena je zaporka vašeg računa. Unesite svoju trenutačnu zaporku za Windows kako biste sinkronizirali svoj Windows račun s radnim računom.</translation>
 <translation id="4706454071748629324">Dodavanje novog korisnika nije uspjelo. Ovo računalo dopušta izradu samo jednog korisnika s radnim računom.</translation>
+<translation id="6033715878377252112">Pomoć za Google davatelj vjerodajnica za Windows</translation>
+<translation id="6149399665202317746">Google davatelj vjerodajnica za Windows</translation>
 <translation id="6312494990035843744">Na toj domeni nije dopuštena prijava radnim računom. Pokušajte s nekim drugim računom.</translation>
 <translation id="6463752215771576050">To računalo nije moguće prijaviti za poslovno upravljanje.  Prijavite se nekim drugim radnim računom.</translation>
 <translation id="6657585470893396449">Zaporka</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Zaboravili ste zaporku za Windows</translation>
 <translation id="866458870819756755">Izrada korisnika nije uspjela</translation>
 <translation id="8875753657315897487">Prijavite se radnim računom</translation>
+<translation id="8973975512230260387">Vaša je sesija istekla. Prijavite se poslovnim računom za Google.</translation>
+<translation id="9055998212250844221">Korisnički račun koji je izradio Google davatelj vjerodajnica za Windows</translation>
 <translation id="9135619837062629367">Prijava tim računom nije dopuštena. Pokušajte s nekim drugim računom.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_hu.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_hu.xtb
index 246fe067..9b7a2e6 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_hu.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_hu.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">A jelenlegi Windows-jelszó megadása nélküli továbblépés visszafordíthatatlan adatvesztéshez vezethet.</translation>
 <translation id="1383286653814676580">A Google Credential Provider bejelentkezési oldalának megnyitására szolgál.</translation>
 <translation id="1894475569413661128">Bejelentkezés munkahelyi fiókkal.</translation>
+<translation id="2329184763010379754">Csak az a felhasználó jelentkezhet be, aki lezárta ezt a számítógépet.</translation>
+<translation id="2398071111662077301">A Chrome telepítési problémája miatt nem lehet betölteni a Google bejelentkezési képernyőjét. Forduljon az adminisztrátorhoz.</translation>
 <translation id="2469311484561825731">Nem sikerült bejelentkezni a munkahelyi fiókjába. Ellenőrizze a számítógép internetkapcsolatát, majd próbálja újra.</translation>
+<translation id="2679096858700291438">Helytelen Windows-jelszót adott meg. Próbálja újra.</translation>
+<translation id="2831078752570172210">Fiókja ki lett zárva a rendszerből. Kérjük, forduljon a rendszergazdához.</translation>
+<translation id="2844349213149998955">Ezen az eszközön nem engedélyezett a személyes fiókkal való bejelentkezés. Jelentkezzen be munkahelyi fiókkal.</translation>
 <translation id="3306357053520292004">A számítógép egyik felhasználója már hozzá lett adva ezzel a fiókkal. Jelentkezzen be másik fiókkal.</translation>
 <translation id="3968372833844047539">Csak G Suite Enterprise-felhasználók jelentkezhetnek be.</translation>
 <translation id="4057329986137569701">Belső hiba történt.</translation>
 <translation id="4267670563222825190">Nem található domainfelhasználó a fiókjához. Forduljon az adminisztrátorhoz.</translation>
 <translation id="4300229033992784001">A fiók jelszava megváltozott. Adja meg jelenlegi Windows-jelszavát Windows-fiókjának és munkahelyi fiókjának a szinkronizálásához.</translation>
 <translation id="4706454071748629324">Nem sikerült az új felhasználó hozzáadása. Ez a számítógép csak egy felhasználó létrehozását engedélyezi munkahelyi fiók használatával.</translation>
+<translation id="6033715878377252112">A Windows rendszerhez készült Google Credential Provider segítője</translation>
+<translation id="6149399665202317746">Google Credential Provider Windows rendszerhez</translation>
 <translation id="6312494990035843744">Ezen a domainen nem engedélyezett a munkahelyi fiókkal való bejelentkezés. Próbálkozzon másik fiókkal.</translation>
 <translation id="6463752215771576050">Ezt a számítógépet nem lehet regisztrálni vállalati kezelés céljából.  Jelentkezzen be másik munkahelyi fiókkal.</translation>
 <translation id="6657585470893396449">Jelszó</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Elfelejtett Windows-jelszó</translation>
 <translation id="866458870819756755">Nem sikerült létrehozni a felhasználót.</translation>
 <translation id="8875753657315897487">Bejelentkezés munkahelyi fiókkal</translation>
+<translation id="8973975512230260387">A munkamenet lejárt. Jelentkezzen be munkahelyi Google-fiókkal.</translation>
+<translation id="9055998212250844221">A felhasználói fiókot a Windows rendszerre készített Google Credential Provider hozta létre</translation>
 <translation id="9135619837062629367">Az ezzel a fiókkal való bejelentkezés nem engedélyezett. Próbálkozzon másik fiókkal.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_it.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_it.xtb
index 8e1e9554..e4552314 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_it.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_it.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Se continui senza inserire l'attuale password di Windows, potrebbe verificarsi una perdita irreversibile di informazioni.</translation>
 <translation id="1383286653814676580">Consente di eseguire la pagina di accesso Provider di credenziali Google.</translation>
 <translation id="1894475569413661128">Accedi con il tuo account di lavoro.</translation>
+<translation id="2329184763010379754">Solo l'utente che ha bloccato questo computer può accedere.</translation>
+<translation id="2398071111662077301">Impossibile caricare la schermata di accesso Google a causa di un problema con l'installazione di Chrome. Contatta l'amministratore.</translation>
 <translation id="2469311484561825731">Accesso all'account di lavoro non riuscito. Assicurati che il computer abbia una connessione a Internet e riprova.</translation>
+<translation id="2679096858700291438">Hai inserito una password Windows errata. Riprova.</translation>
+<translation id="2831078752570172210">Il tuo account è stato bloccato. Contatta l'amministratore di sistema.</translation>
+<translation id="2844349213149998955">Su questo dispositivo non è consentito l'accesso con un account personale. Accedi con un account di lavoro.</translation>
 <translation id="3306357053520292004">Su questo computer è stato già aggiunto un utente usando questo account. Accedi con un altro account.</translation>
 <translation id="3968372833844047539">Solo gli utenti di G Suite Enterprise sono autorizzati ad accedere.</translation>
 <translation id="4057329986137569701">Errore interno.</translation>
 <translation id="4267670563222825190">Nessun Dominio utente trovato per il tuo account. Contatta l'amministratore.</translation>
 <translation id="4300229033992784001">La password del tuo account è cambiata. Inserisci la tua attuale password Windows per sincronizzare l'account Windows con l'account di lavoro.</translation>
 <translation id="4706454071748629324">Aggiunta di un nuovo utente non riuscita. Su questo computer è possibile creare un solo utente con un account di lavoro.</translation>
+<translation id="6033715878377252112">Assistente Provider di credenziali Google per Windows</translation>
+<translation id="6149399665202317746">Provider di credenziali Google per Windows</translation>
 <translation id="6312494990035843744">L'accesso a questo dominio con un account di lavoro non è consentito. Prova con un altro account.</translation>
 <translation id="6463752215771576050">Impossibile registrare questo computer per la gestione aziendale.  Accedi con un altro account di lavoro.</translation>
 <translation id="6657585470893396449">Password</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Password di Windows dimenticata</translation>
 <translation id="866458870819756755">Impossibile creare un utente.</translation>
 <translation id="8875753657315897487">Accedi con il tuo account di lavoro</translation>
+<translation id="8973975512230260387">La sessione è scaduta. Accedi con il tuo account di lavoro Google.</translation>
+<translation id="9055998212250844221">Account utente creato tramite Provider di credenziali Google per Windows</translation>
 <translation id="9135619837062629367">L'accesso con questo account non è consentito. Prova con un altro account.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb
index fe415d8..e6ac75aa 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">‏המשך הפעולה ללא הזנה של הסיסמה העדכנית של Windows עלול לגרום לאובדן נתונים ללא אפשרות לשחזר אותם.</translation>
 <translation id="1383286653814676580">‏הריץ בעבר את דף הכניסה אל 'ספק פרטי הכניסה של Google'.</translation>
 <translation id="1894475569413661128">כניסה באמצעות חשבון לצורכי עבודה.</translation>
+<translation id="2329184763010379754">רק המשתמש שנעל את המחשב הזה רשאי להיכנס.</translation>
+<translation id="2398071111662077301">‏לא ניתן לטעון את מסך הכניסה של Google כתוצאה מבעיה בהתקנה של Chrome. יש ליצור קשר עם מנהל המערכת.</translation>
 <translation id="2469311484561825731">הכניסה לחשבון שלך לצורכי עבודה נכשלה. יש לוודא שהמחשב מחובר לאינטרנט ולנסות שוב.</translation>
+<translation id="2679096858700291438">‏הזנת סיסמת Windows שגויה. יש לנסות שוב.</translation>
+<translation id="2831078752570172210">החשבון שלך ננעל. יש לפנות למנהל המערכת.</translation>
+<translation id="2844349213149998955">לא ניתן להיכנס למכשיר הזה באמצעות חשבון אישי. יש להיכנס באמצעות חשבון לצורכי עבודה.</translation>
 <translation id="3306357053520292004">משתמש במחשב הזה כבר נוסף באמצעות חשבון זה. יש להיכנס באמצעות חשבון אחר.</translation>
 <translation id="3968372833844047539">‏רק משתמשי G Suite Enterprise מורשים להתחבר.</translation>
 <translation id="4057329986137569701">אירעה שגיאה פנימית.</translation>
 <translation id="4267670563222825190">לא ניתן היה למצוא בדומיין אף משתמש עם החשבון הזה. עליך לפנות למנהל המערכת.</translation>
 <translation id="4300229033992784001">‏הסיסמה לחשבון שלך השתנתה. יש להזין את הסיסמה הנוכחית של Windows כדי לסנכרן את חשבון Windows עם החשבון שלך לצורכי עבודה.</translation>
 <translation id="4706454071748629324">הוספת המשתמש החדש נכשלה. המחשב הזה מאפשר ליצור רק משתמש אחד באמצעות חשבון לצורכי עבודה.</translation>
+<translation id="6033715878377252112">‏כלי העזרה של ספק פרטי הכניסה של Google ל-Windows</translation>
+<translation id="6149399665202317746">‏ספק פרטי הכניסה של Google ל-Windows</translation>
 <translation id="6312494990035843744">אין להיכנס לדומיין הזה באמצעות חשבון לצורכי עבודה. יש לנסות חשבון אחר.</translation>
 <translation id="6463752215771576050">לא ניתן לרשום את המחשב הזה לניהול ארגוני.  יש להיכנס באמצעות חשבון אחר לצורכי עבודה.</translation>
 <translation id="6657585470893396449">סיסמה</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">‏שכחתי את הסיסמה של Windows</translation>
 <translation id="866458870819756755">לא ניתן היה ליצור משתמש.</translation>
 <translation id="8875753657315897487">כניסה באמצעות חשבון לצורכי עבודה</translation>
+<translation id="8973975512230260387">‏התוקף של הסשן שלך פג. יש להיכנס באמצעות חשבון Google שלך לצורכי עבודה.</translation>
+<translation id="9055998212250844221">‏חשבון המשתמש נוצר על ידי ספק פרטי הכניסה של Google ל-Windows</translation>
 <translation id="9135619837062629367">לא ניתן להיכנס באמצעות חשבון זה. יש לנסות חשבון אחר.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb
index 4d658dbb..bbe57d9 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">現在の Windows パスワードを入力しないで続行すると、情報が永久的に失われる可能性があります。</translation>
 <translation id="1383286653814676580">Google 認証プロバイダのログインページを実行するために使用します。</translation>
 <translation id="1894475569413661128">仕事用アカウントを使用してログインしてください。</translation>
+<translation id="2329184763010379754">ログインできるのは、このパソコンをロックしたユーザーのみです。</translation>
+<translation id="2398071111662077301">Chrome のインストールに問題があったため、Google ログイン画面を読み込めません。管理者にお問い合わせください。</translation>
 <translation id="2469311484561825731">仕事用アカウントにログインできませんでした。パソコンがインターネットに接続していることを確認してから、もう一度お試しください。</translation>
+<translation id="2679096858700291438">入力した Windows パスワードが正しくありません。もう一度お試しください。</translation>
+<translation id="2831078752570172210">お使いのアカウントはロックアウトされています。システム管理者にお問い合わせください。</translation>
+<translation id="2844349213149998955">このデバイスで個人用アカウントでログインすることはできません。仕事用アカウントでログインしてください。</translation>
 <translation id="3306357053520292004">このパソコンのユーザーはこのアカウントですでに追加されています。別のアカウントでログインしてください。</translation>
 <translation id="3968372833844047539">ログインできるのは G Suite Enterprise のユーザーのみです。</translation>
 <translation id="4057329986137569701">内部エラーが発生しました。</translation>
 <translation id="4267670563222825190">ドメイン ユーザーがお使いのアカウントで見つかりませんでした。管理者にお問い合わせください。</translation>
 <translation id="4300229033992784001">アカウントのパスワードが変更されました。Windows アカウントと仕事用アカウントを同期するには、現在の Windows のパスワードを入力してください。</translation>
 <translation id="4706454071748629324">新しいユーザーを追加できませんでした。このパソコンで仕事用アカウントを使用して作成できるユーザーは 1 人のみです。</translation>
+<translation id="6033715878377252112">Windows 用 Google 認証情報プロバイダ ヘルパー</translation>
+<translation id="6149399665202317746">Windows 用 Google 認証情報プロバイダ</translation>
 <translation id="6312494990035843744">このドメインでは、仕事用アカウントでのログインは許可されていません。別のアカウントでお試しください。</translation>
 <translation id="6463752215771576050">このパソコンを企業の管理対象として登録できません。別の仕事用アカウントでログインしてください。</translation>
 <translation id="6657585470893396449">パスワード</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Windows パスワードをお忘れの場合</translation>
 <translation id="866458870819756755">ユーザーを作成できませんでした。</translation>
 <translation id="8875753657315897487">仕事用アカウントを使用してログイン</translation>
+<translation id="8973975512230260387">セッションが時間切れとなりました。Google 仕事用アカウントでログインします。</translation>
+<translation id="9055998212250844221">Windows 用 Google 認証情報プロバイダによって作成されたユーザー アカウント</translation>
 <translation id="9135619837062629367">このアカウントでのログインは許可されていません。別のアカウントでお試しください。</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb
index 074bf6b..03223683 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">ನಿಮ್ಮ ಪ್ರಸ್ತುತ Windows ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸದೆಯೇ ಮುಂದುವರಿಸಿದರೆ, ಮಾಹಿತಿಯ ನಷ್ಟಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು. ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="1383286653814676580">Google ರುಜುವಾತು ಪೂರೈಕೆದಾರರ ಸೈನ್ ಇನ್ ಪುಟವನ್ನು ಚಲಾಯಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="1894475569413661128">ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
+<translation id="2329184763010379754">ಈ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಲಾಕ್ ಮಾಡಿದ ಬಳಕೆದಾರರು ಮಾತ್ರ ಸೈನ್ ಇನ್ ಮಾಡಲು ಅನುಮತಿಸಲಾಗುತ್ತದೆ.</translation>
+<translation id="2398071111662077301">ನಿಮ್ಮ Chrome ಇನ್‌ಸ್ಟಲೇಶನ್‌ ಮಾಡುವಾಗ ಉಂಟಾದ ಸಮಸ್ಯೆಯಿಂದಾಗಿ Google ಸೈನ್ ಇನ್ ಪರದೆಯನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="2469311484561825731">ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವಿದೆಯೇ ಎಂದು ನೋಡಿ, ಆಮೇಲೆ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
+<translation id="2679096858700291438">ನೀವು ತಪ್ಪಾದ Windows ಪಾಸ್‌ವರ್ಡ್ ಒಂದನ್ನು ನಮೂದಿಸಿದ್ದೀರಿ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
+<translation id="2831078752570172210">ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
+<translation id="2844349213149998955">ಈ ಸಾಧನದಲ್ಲಿ ವೈಯಕ್ತಿಕ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವುದನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ. ಕೆಲಸದ ಖಾತೆಯೊಂದಿಗೆ ಲಾಗಿನ್ ಮಾಡಿ.</translation>
 <translation id="3306357053520292004">ಈ ಖಾತೆಯನ್ನು ಬಳಸಿ, ಈ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿನ ಒಬ್ಬ ಬಳಕೆದಾರರನ್ನು ಈಗಾಗಲೇ ಸೇರಿಸಲಾಗಿದೆ ಬೇರೊಂದು ಖಾತೆಯನ್ನು ಬಳಸಿ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="3968372833844047539">Gsuite ಎಂಟರ್‌ಪ್ರೈಸ್ ಬಳಕೆದಾರರು ಮಾತ್ರ ಲಾಗಿನ್ ಮಾಡಬಹುದು.</translation>
 <translation id="4057329986137569701">ಆಂತರಿಕ ದೋಷ ಸಂಭವಿಸಿದೆ.</translation>
 <translation id="4267670563222825190">ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಯಾವುದೇ ಡೊಮೇನ್ ಬಳಕೆದಾರರು ಕಂಡುಬಂದಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="4300229033992784001">ನಿಮ್ಮ ಖಾತೆಯ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಗಿದೆ. ನಿಮ್ಮ Windows ಖಾತೆಯನ್ನು ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯೊಂದಿಗೆ ಸಿಂಕ್ ಮಾಡುವುದಕ್ಕಾಗಿ, ನಿಮ್ಮ ಪ್ರಸ್ತುತ Windows ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ.</translation>
 <translation id="4706454071748629324">ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಲು ವಿಫಲವಾಗಿದೆ. ಕೆಲಸದ ಖಾತೆಯನ್ನು ಬಳಸಿ, ಒರ್ವ ಬಳಕೆದಾರರನ್ನು ಮಾತ್ರ ರಚಿಸಲು ಈ ಕಂಪ್ಯೂಟರ್ ಅನುಮತಿ ನೀಡುತ್ತದೆ.</translation>
+<translation id="6033715878377252112">Windows ಸಹಾಯಕಕ್ಕಾಗಿ Google ರುಜುವಾತು ಪೂರೈಕೆದಾರ</translation>
+<translation id="6149399665202317746">Windows ಗಾಗಿ Google ರುಜುವಾತು ಪೂರೈಕೆದಾರ</translation>
 <translation id="6312494990035843744">ಈ ಡೊಮೇನ್‌ನಲ್ಲಿ ಕೆಲಸದ ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಲು ಅನುಮತಿಯಿಲ್ಲ. ಬೇರೊಂದು ಖಾತೆಯನ್ನು ಬಳಸಿ ನೋಡಿ.</translation>
 <translation id="6463752215771576050">ಎಂಟರ್‌ಪ್ರೈಸ್ ನಿರ್ವಹಣೆಗಾಗಿ ಈ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ನೋಂದಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ.  ಬೇರೊಂದು ಕೆಲಸದ ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="6657585470893396449">ಪಾಸ್‌ವರ್ಡ್</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Windows ಪಾಸ್‌ವರ್ಡ್ ಮರೆತು ಹೋಗಿದೆ</translation>
 <translation id="866458870819756755">ಬಳಕೆದಾರರೊಬ್ಬರನ್ನು ರಚಿಸಲಾಗಲಿಲ್ಲ.</translation>
 <translation id="8875753657315897487">ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
+<translation id="8973975512230260387">ನಿಮ್ಮ ಸೆಶನ್ ಅವಧಿ ಮುಕ್ತಾಯವಾಗಿದೆ. ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
+<translation id="9055998212250844221">Windows ಗಾಗಿ Google ರುಜುವಾತು ಪೂರೈಕೆದಾರರು ರಚಿಸಿದ ಬಳಕೆದಾರ ಖಾತೆ</translation>
 <translation id="9135619837062629367">ಈ ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಲು ಅನುಮತಿಯಿಲ್ಲ. ಬೇರೊಂದು ಖಾತೆಯನ್ನು ಬಳಸಿ ನೋಡಿ.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb
index 8d63291..d959737 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Ja turpināsiet darbu, neievadot pašreizējo Windows paroli, var tikt neatgriezeniski zaudēta informācija.</translation>
 <translation id="1383286653814676580">Tiek izmantots Google akreditācijas datu nodrošinātāja pierakstīšanās lapā.</translation>
 <translation id="1894475569413661128">Pierakstieties, izmantojot savu darba kontu.</translation>
+<translation id="2329184763010379754">Drīkst pierakstīties tikai lietotājs, kurš bloķēja šo datoru.</translation>
+<translation id="2398071111662077301">Neizdevās ielādēt Google pierakstīšanās ekrānu, jo jūsu Chrome instalācijā radās problēma. Sazinieties ar administratoru.</translation>
 <translation id="2469311484561825731">Neizdevās pierakstīties darba kontā Pārbaudiet, vai datoram ir interneta savienojums, un pēc tam mēģiniet vēlreiz.</translation>
+<translation id="2679096858700291438">Jūs ievadījāt nepareizu Windows paroli. Mēģiniet vēlreiz.</translation>
+<translation id="2831078752570172210">Piekļuve jūsu kontam ir bloķēta. Lūdzu, sazinieties ar sistēmas administratoru.</translation>
+<translation id="2844349213149998955">Šajā ierīcē nav atļauts pierakstīties ar personīgo kontu. Lūdzu, pierakstieties ar darba kontu.</translation>
 <translation id="3306357053520292004">Lietotājs šajā datorā jau tika pievienots, izmantojot šo kontu. Lūdzu, pierakstieties ar citu kontu.</translation>
 <translation id="3968372833844047539">Drīkst pieteikties tikai G Suite Enterprise lietotāji.</translation>
 <translation id="4057329986137569701">Radās iekšēja kļūda.</translation>
 <translation id="4267670563222825190">Jūsu kontam nevarēja atrast nevienu domēna lietotāju. Lūdzu, sazinieties ar savu administratoru.</translation>
 <translation id="4300229033992784001">Jūsu konta parole ir mainīta. Lūdzu, ievadiet pašreizējo Windows paroli, lai sinhronizētu Windows kontu ar jūsu darba kontu.</translation>
 <translation id="4706454071748629324">Neizdevās pievienot jaunu lietotāju. Šis dators ļauj tikai vienam lietotājam veidot darba kontu.</translation>
+<translation id="6033715878377252112">Palīgs programmai “Google akreditācijas datu nodrošinātājs” operētājsistēmai Windows</translation>
+<translation id="6149399665202317746">Google akreditācijas datu nodrošinātājs operētājsistēmai Windows</translation>
 <translation id="6312494990035843744">Pierakstīšanās ar darba kontu šajā domēnā nav atļauta. Mēģiniet lietot citu kontu.</translation>
 <translation id="6463752215771576050">Nevar reģistrēt šo datoru uzņēmuma pārvaldībai.  Lūdzu, pierakstieties ar citu darba kontu.</translation>
 <translation id="6657585470893396449">Parole</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Aizmirsu Windows paroli</translation>
 <translation id="866458870819756755">Nevarēja izveidot lietotāju.</translation>
 <translation id="8875753657315897487">Pierakstīties, izmantojot darba kontu</translation>
+<translation id="8973975512230260387">Sesija ir beigusies. Pierakstieties Google darba kontā.</translation>
+<translation id="9055998212250844221">Lietotāja konts izveidots, izmantojot Google akreditācijas datu nodrošinātāju operētājsistēmai Windows</translation>
 <translation id="9135619837062629367">Pierakstīšanās ar šo kontu nav atļauta. Mēģiniet lietot citu kontu.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ms.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ms.xtb
index c97c7244..485105b 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ms.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ms.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Meneruskan proses ini tanpa memasukkan kata laluan semasa Windows anda mungkin menyebabkan kehilangan maklumat yang tidak dapat dibalikkan.</translation>
 <translation id="1383286653814676580">Digunakan untuk menjalankan halaman log masuk Penyedia Bukti Kelayakan Google.</translation>
 <translation id="1894475569413661128">Log masuk menggunakan akaun kerja anda.</translation>
+<translation id="2329184763010379754">Hanya pengguna yang mengunci komputer ini dibenarkan log masuk.</translation>
+<translation id="2398071111662077301">Tidak dapat memuatkan skrin log masuk Google disebabkan oleh masalah dalam pemasangan Chrome anda. Hubungi pentadbir anda.</translation>
 <translation id="2469311484561825731">Gagal untuk log masuk ke akaun kerja anda. Pastikan komputer mempunyai sambungan Internet, kemudian cuba lagi.</translation>
+<translation id="2679096858700291438">Anda memasukkan kata laluan Windows yang salah. Sila cuba lagi.</translation>
+<translation id="2831078752570172210">Akaun anda telah dikunci. Sila hubungi pentadbir sistem anda.</translation>
+<translation id="2844349213149998955">Log masuk dengan akaun peribadi pada peranti ini tidak benarkan. Sila log masuk dengan akaun kerja.</translation>
 <translation id="3306357053520292004">Seorang pengguna pada komputer ini sudah pun ditambahkan menggunakan akaun ini. Sila log masuk dengan akaun lain.</translation>
 <translation id="3968372833844047539">Hanya pengguna Gsuite Enterprise dibenarkan untuk log masuk.</translation>
 <translation id="4057329986137569701">Ralat dalaman telah berlaku.</translation>
 <translation id="4267670563222825190">Tiada pengguna Domain ditemui untuk akaun anda. Sila hubungi pentadbir anda.</translation>
 <translation id="4300229033992784001">Kata laluan akaun anda telah berubah. Sila masukkan kata laluan Windows semasa anda untuk menyegerakkan akaun Windows anda dengan akaun kerja anda.</translation>
 <translation id="4706454071748629324">Gagal menambahkan pengguna baharu. Komputer ini hanya membenarkan satu pengguna dibuat menggunakan akaun kerja.</translation>
+<translation id="6033715878377252112">Pembantu Penyedia Bukti Kelayakan Google untuk Windows</translation>
+<translation id="6149399665202317746">Penyedia Bukti Kelayakan Google untuk Windows</translation>
 <translation id="6312494990035843744">Log masuk dengan akaun kerja pada domain ini tidak benarkan. Cuba akaun lain.</translation>
 <translation id="6463752215771576050">Tidak dapat mendaftarkan komputer ini untuk pengurusan perusahaan.  Sila log masuk dengan akaun kerja lain.</translation>
 <translation id="6657585470893396449">Kata laluan</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Terlupa Kata Laluan Windows</translation>
 <translation id="866458870819756755">Pengguna tidak dapat dibuat.</translation>
 <translation id="8875753657315897487">Log masuk menggunakan akaun kerja anda</translation>
+<translation id="8973975512230260387">Sesi anda telah tamat tempoh. Log masuk menggunakan akaun kerja Google anda.</translation>
+<translation id="9055998212250844221">Akaun pengguna yang dibuat oleh Penyedia Bukti Kelayakan Google untuk Windows</translation>
 <translation id="9135619837062629367">Tidak dibenarkan log masuk menggunakan akaun ini. Cuba akaun lain.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_nl.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_nl.xtb
index 4485fe31..0470796 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_nl.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_nl.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Als je doorgaat zonder je huidige Windows-wachtwoord in te voeren, kun je gegevens kwijtraken die je niet meer kunt terughalen.</translation>
 <translation id="1383286653814676580">Wordt gebruikt om de inlogpagina van Google-inlogprovider uit te voeren.</translation>
 <translation id="1894475569413661128">Log in met je werkaccount.</translation>
+<translation id="2329184763010379754">Alleen de gebruiker die deze computer heeft vergrendeld, mag inloggen.</translation>
+<translation id="2398071111662077301">Kan het Google-inlogscherm niet laden als gevolg van een probleem bij de installatie van Chrome. Neem contact op met je beheerder.</translation>
 <translation id="2469311484561825731">Inloggen op je werkaccount is mislukt. Zorg dat de computer verbinding heeft met internet en probeer het daarna opnieuw.</translation>
+<translation id="2679096858700291438">Je hebt een onjuist Windows-wachtwoord ingevoerd. Probeer het opnieuw.</translation>
+<translation id="2831078752570172210">Je hebt geen toegang meer tot je account. Neem contact op met je systeembeheerder.</translation>
+<translation id="2844349213149998955">Inloggen met een persoonlijk account op dit apparaat is niet toegestaan. Log in met een werkaccount.</translation>
 <translation id="3306357053520292004">Er is al een gebruiker op deze computer toegevoegd met dit account. Log in met een ander account.</translation>
 <translation id="3968372833844047539">Alleen G Suite Enterprise-gebruikers mogen inloggen.</translation>
 <translation id="4057329986137569701">Er is een interne fout opgetreden.</translation>
 <translation id="4267670563222825190">Er kan geen domeingebruiker worden gevonden voor je account. Neem contact op met je beheerder.</translation>
 <translation id="4300229033992784001">Het wachtwoord van je account is gewijzigd. Geef je huidige Windows-wachtwoord op om je Windows-account te synchroniseren met je werkaccount.</translation>
 <translation id="4706454071748629324">Nieuwe gebruiker toevoegen is mislukt. Op deze computer kan slechts één gebruiker worden gemaakt met een werkaccount.</translation>
+<translation id="6033715878377252112">Helper voor Google-referentieprovider voor Windows</translation>
+<translation id="6149399665202317746">Google-referentieprovider voor Windows</translation>
 <translation id="6312494990035843744">Inloggen op een werkaccount op dit domein is niet toegestaan. Gebruik een ander account.</translation>
 <translation id="6463752215771576050">Deze computer niet kan niet worden ingeschreven voor zakelijk beheer.  Log in met een ander werkaccount.</translation>
 <translation id="6657585470893396449">Wachtwoord</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Windows-wachtwoord vergeten</translation>
 <translation id="866458870819756755">Gebruiker kan niet worden gemaakt.</translation>
 <translation id="8875753657315897487">Log in met je werkaccount</translation>
+<translation id="8973975512230260387">Je sessie is verlopen. Log in met je Google-werkaccount.</translation>
+<translation id="9055998212250844221">Gebruikersaccount gemaakt door Google-referentieprovider voor Windows</translation>
 <translation id="9135619837062629367">Inloggen met dit account is niet toegestaan. Gebruik een ander account.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_pl.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_pl.xtb
index 6dd89dde..ea78315 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_pl.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_pl.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Przejście dalej bez wpisania obecnego hasła do Windows może spowodować nieodwracalną utratę danych.</translation>
 <translation id="1383286653814676580">Używane do uruchamiania strony logowania dostawcy danych uwierzytelniających Google.</translation>
 <translation id="1894475569413661128">Zaloguj się, używając swojego konta do pracy.</translation>
+<translation id="2329184763010379754">Na tym komputerze może się zalogować tylko użytkownik, który go zablokował.</translation>
+<translation id="2398071111662077301">Problem z instalacją Chrome uniemożliwił załadowanie ekranu logowania w usługach Google. Skontaktuj się z administratorem.</translation>
 <translation id="2469311484561825731">Nie udało się zalogować na Twoje konto do pracy. Sprawdź, czy komputer jest połączony z internetem, i spróbuj ponownie.</translation>
+<translation id="2679096858700291438">Podane hasło do systemu Windows jest nieprawidłowe. Spróbuj ponownie.</translation>
+<translation id="2831078752570172210">Twoje konto zostało zablokowane. Skontaktuj się z administratorem systemu.</translation>
+<translation id="2844349213149998955">Logowanie się na to urządzenie za pomocą konta osobistego jest niedozwolone. Zaloguj się za pomocą konta do pracy.</translation>
 <translation id="3306357053520292004">Inny użytkownik komputera został już dodany za pomocą tego konta. Zaloguj się, używając innego konta.</translation>
 <translation id="3968372833844047539">Logować się mogą tylko użytkownicy korzystający z G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Wystąpił błąd wewnętrzny.</translation>
 <translation id="4267670563222825190">Z tym kontem nie jest powiązany żaden użytkownik w domenie. Skontaktuj się z administratorem.</translation>
 <translation id="4300229033992784001">Zmieniło się hasło do Twojego konta. Aby zsynchronizować konto Windows z kontem do pracy, wpisz swoje aktualne hasło do systemu Windows.</translation>
 <translation id="4706454071748629324">Nie udało się dodać nowego użytkownika. Ten komputer zezwala na utworzenie tylko jednego użytkownika za pomocą konta do pracy.</translation>
+<translation id="6033715878377252112">Konto pomocnicze dostawcy danych uwierzytelniających Google do systemów Windows</translation>
+<translation id="6149399665202317746">Dostawca danych uwierzytelniających Google do systemów Windows</translation>
 <translation id="6312494990035843744">Logowanie się w tej domenie za pomocą konta do pracy jest niedozwolone. Użyj innego konta.</translation>
 <translation id="6463752215771576050">Nie udało się zarejestrować tego komputera na potrzeby zarządzania w firmie.  Zaloguj się, używając innego konta do pracy.</translation>
 <translation id="6657585470893396449">Hasło</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Nie pamiętam hasła do Windows</translation>
 <translation id="866458870819756755">Nie udało się utworzyć użytkownika.</translation>
 <translation id="8875753657315897487">Zaloguj się, używając swojego konta do pracy</translation>
+<translation id="8973975512230260387">Sesja wygasła. Zaloguj się, używając swojego konta Google do pracy.</translation>
+<translation id="9055998212250844221">Konto użytkownika utworzone przez dostawcę danych uwierzytelniających Google do systemów Windows</translation>
 <translation id="9135619837062629367">Logowanie się za pomocą tego konta jest niedozwolone. Użyj innego konta.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-BR.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-BR.xtb
index 40eae2e..4777c70 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-BR.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-BR.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Se continuar sem inserir sua senha atual do Windows, pode haver uma perda irreversível de informações.</translation>
 <translation id="1383286653814676580">Usado para executar a página de login do Provedor de credenciais do Google.</translation>
 <translation id="1894475569413661128">Faça login usando sua conta de trabalho.</translation>
+<translation id="2329184763010379754">Apenas o usuário que bloqueou este computador tem permissão para fazer login.</translation>
+<translation id="2398071111662077301">Não foi possível carregar a tela de login do Google devido um problema na instalação do Chrome. Entre em contato com seu administrador.</translation>
 <translation id="2469311484561825731">Não foi possível fazer login na sua conta de trabalho. Verifique a conexão do computador com a Internet e tente novamente.</translation>
+<translation id="2679096858700291438">Você digitou uma senha incorreta para o Windows. Tente novamente.</translation>
+<translation id="2831078752570172210">Sua conta foi bloqueada. Fale com o administrador do sistema.</translation>
+<translation id="2844349213149998955">O login com uma conta pessoal não é permitido neste dispositivo. Faça login com uma conta de trabalho.</translation>
 <translation id="3306357053520292004">Um usuário neste computador já foi registrado com essa conta. Faça login com uma conta diferente.</translation>
 <translation id="3968372833844047539">Login permitido apenas para os usuários do G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Ocorreu um erro interno.</translation>
 <translation id="4267670563222825190">Nenhum usuário de domínio encontrado para sua conta. Entre em contato com seu administrador.</translation>
 <translation id="4300229033992784001">A senha da sua conta foi alterada. Informe sua senha atual do Windows para sincronizar sua conta do Windows com sua conta de trabalho.</translation>
 <translation id="4706454071748629324">Falha ao adicionar um novo usuário. Este computador só permite que um único usuário seja criado com uma conta de trabalho.</translation>
+<translation id="6033715878377252112">Assistente do Provedor de credenciais do Google para Windows</translation>
+<translation id="6149399665202317746">Provedor de credenciais do Google para Windows</translation>
 <translation id="6312494990035843744">O login com uma conta de trabalho não é permitido neste domínio. Use outra conta.</translation>
 <translation id="6463752215771576050">Não é possível inscrever este computador para o gerenciamento empresarial.  Faça login com outra conta de trabalho.</translation>
 <translation id="6657585470893396449">Senha</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Esqueci minha senha do Windows</translation>
 <translation id="866458870819756755">Não foi possível criar um usuário.</translation>
 <translation id="8875753657315897487">Faça login usando sua conta de trabalho</translation>
+<translation id="8973975512230260387">Sua sessão expirou. Faça login usando sua Conta do Google de trabalho.</translation>
+<translation id="9055998212250844221">Conta de usuário criada pelo Provedor de credenciais do Google para Windows</translation>
 <translation id="9135619837062629367">O login com essa conta não é permitido. Use uma conta diferente.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-PT.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-PT.xtb
index 377b4df..e553d236 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-PT.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_pt-PT.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Continuar sem introduzir a palavra-passe atual do Windows pode provocar a perda irreversível de informações.</translation>
 <translation id="1383286653814676580">Utilizado para executar a página de início de sessão do Google Credential Provider.</translation>
 <translation id="1894475569413661128">Inicie sessão com a sua conta profissional.</translation>
+<translation id="2329184763010379754">Apenas o utilizador que bloqueou este computador tem autorização para iniciar sessão.</translation>
+<translation id="2398071111662077301">Não é possível carregar o ecrã de início de sessão do Google devido a um problema na instalação do Chrome. Contacte o seu administrador.</translation>
 <translation id="2469311484561825731">Falha ao iniciar sessão na sua conta profissional. Certifique-se de que o computador possui uma ligação à Internet e, em seguida, tente novamente.</translation>
+<translation id="2679096858700291438">Introduziu uma palavra-passe do Windows incorreta. Tente novamente.</translation>
+<translation id="2831078752570172210">Perdeu o acesso à sua conta. Contacte o administrador do sistema.</translation>
+<translation id="2844349213149998955">Não é permitido iniciar sessão com uma conta pessoal neste dispositivo. Inicie sessão com uma conta profissional.</translation>
 <translation id="3306357053520292004">Já foi adicionado um utilizador neste computador com esta conta. Inicie sessão com uma conta diferente.</translation>
 <translation id="3968372833844047539">Apenas os utilizadores do G Suite Enterprise têm autorização para iniciar sessão.</translation>
 <translation id="4057329986137569701">Ocorreu um erro interno.</translation>
 <translation id="4267670563222825190">Não foi possível encontrar qualquer utilizador do domínio para a sua conta. Contacte o seu administrador.</translation>
 <translation id="4300229033992784001">A palavra-passe da sua conta foi alterada. Introduza a sua palavra-passe do Windows atual para sincronizar a conta do Windows com a sua conta profissional.</translation>
 <translation id="4706454071748629324">Falha ao adicionar um novo utilizador. Este computador apenas permite a criação de um utilizador através de uma conta profissional.</translation>
+<translation id="6033715878377252112">Assistente do Google Credential Provider para Windows</translation>
+<translation id="6149399665202317746">Google Credential Provider para Windows</translation>
 <translation id="6312494990035843744">Não é permitido iniciar sessão com uma conta profissional neste domínio. Experimente com outra conta.</translation>
 <translation id="6463752215771576050">Não é possível inscrever este computador para gestão empresarial.  Inicie sessão com uma conta profissional diferente.</translation>
 <translation id="6657585470893396449">Palavra-passe</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Esqueci-me da palavra-passe do Windows</translation>
 <translation id="866458870819756755">Não foi possível criar um utilizador.</translation>
 <translation id="8875753657315897487">Iniciar sessão com a sua conta profissional</translation>
+<translation id="8973975512230260387">A sua sessão expirou. Inicie sessão com a sua conta profissional Google.</translation>
+<translation id="9055998212250844221">Conta de utilizador criada pelo Google Credential Provider para Windows</translation>
 <translation id="9135619837062629367">Não é permitido iniciar sessão com esta conta. Experimente uma conta diferente.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ro.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ro.xtb
index 40349c0..989a7635 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ro.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ro.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Dacă vei continua fără să introduci parola pentru Windows actuală, este posibil să pierzi informații fără să le mai poți recupera.</translation>
 <translation id="1383286653814676580">Folosit pentru a afișa pagina de conectare la furnizorul de date de conectare la Google.</translation>
 <translation id="1894475569413661128">Conectează-te folosind contul de serviciu.</translation>
+<translation id="2329184763010379754">Numai utilizatorul care a blocat acest computer are permisiunea de a se conecta.</translation>
+<translation id="2398071111662077301">Nu se poate încărca ecranul de conectare Google din cauza unei probleme cu instalarea Chrome. Contactează administratorul.</translation>
 <translation id="2469311484561825731">Conectarea la contul de serviciu nu a reușit. Asigură-te că acest computer e conectat la internet, apoi încearcă din nou.</translation>
+<translation id="2679096858700291438">Ai introdus o parolă Windows incorectă. Încearcă din nou.</translation>
+<translation id="2831078752570172210">Contul tău a fost blocat. Contactează administratorul de sistem.</translation>
+<translation id="2844349213149998955">Pe acest dispozitiv nu este permisă conectarea folosind un cont personal. Conectează-te cu un cont de serviciu.</translation>
 <translation id="3306357053520292004">Un utilizator de pe acest computer a fost deja adăugat cu acest cont. Conectați-vă cu un alt cont.</translation>
 <translation id="3968372833844047539">Doar utilizatorii G Suite Enterprise au permisiunea de a se conecta.</translation>
 <translation id="4057329986137569701">A apărut o eroare internă.</translation>
 <translation id="4267670563222825190">Nu s-a găsit niciun utilizator de domeniu pentru contul tău. Contactează administratorul.</translation>
 <translation id="4300229033992784001">Parola contului a fost schimbată. Introdu parola Windows curentă pentru a sincroniza parola Windows cu contul de serviciu.</translation>
 <translation id="4706454071748629324">Nu s-a reușit adăugarea unui utilizator nou. Computerul permite crearea unui singur utilizator folosind un cont de serviciu.</translation>
+<translation id="6033715878377252112">Instrumentul Furnizor de date de conectare Google pentru Windows</translation>
+<translation id="6149399665202317746">Furnizor de date de conectare Google pentru Windows</translation>
 <translation id="6312494990035843744">Pe acest domeniu nu este permisă conectarea folosind un cont de serviciu. Încearcă un alt cont.</translation>
 <translation id="6463752215771576050">Nu s-a putut înregistra acest computer pentru gestionarea de întreprindere.  Conectează-te cu un alt cont de serviciu.</translation>
 <translation id="6657585470893396449">Parolă</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Am uitat parola pentru Windows</translation>
 <translation id="866458870819756755">Nu s-a putut crea un utilizator.</translation>
 <translation id="8875753657315897487">Conectează-te folosind contul de serviciu</translation>
+<translation id="8973975512230260387">Sesiunea a expirat. Conectează-te folosind contul de serviciu Google.</translation>
+<translation id="9055998212250844221">Cont de utilizator creat de Furnizorul de date de conectare Google pentru Windows</translation>
 <translation id="9135619837062629367">Conectarea cu acest cont nu este permisă. Încearcă un alt cont.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
index 7ac5107..81e7a48 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Продолжение работы без ввода пароля Windows может привести к безвозвратной утере данных.</translation>
 <translation id="1383286653814676580">Используется для перехода на страницу входа поставщика учетных данных Google.</translation>
 <translation id="1894475569413661128">Войти, используя рабочий аккаунт</translation>
+<translation id="2329184763010379754">В систему может войти только пользователь, заблокировавший компьютер.</translation>
+<translation id="2398071111662077301">Не удалось загрузить экран входа в Google из-за проблемы во время установки браузера Chrome. Обратитесь к администратору.</translation>
 <translation id="2469311484561825731">Не удалось войти в рабочий аккаунт. Убедитесь, что компьютер подключен к Интернету, и повторите попытку.</translation>
+<translation id="2679096858700291438">Вы ввели неверный пароль Windows. Повторите попытку.</translation>
+<translation id="2831078752570172210">Ваш аккаунт заблокирован. Обратитесь к системному администратору.</translation>
+<translation id="2844349213149998955">На этом устройстве запрещен вход с личным аккаунтом. Войдите в рабочий аккаунт.</translation>
 <translation id="3306357053520292004">Указанный аккаунт уже используется на этом компьютере. Выполните вход, используя другой аккаунт.</translation>
 <translation id="3968372833844047539">Вход разрешен только пользователям G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Произошла внутренняя ошибка.</translation>
 <translation id="4267670563222825190">С вашим аккаунтом не связан ни один из пользователей домена. Обратитесь к администратору.</translation>
 <translation id="4300229033992784001">Пароль вашего аккаунта изменен. Чтобы синхронизировать аккаунт Windows с рабочим аккаунтом, введите актуальный пароль для Windows.</translation>
 <translation id="4706454071748629324">Не удалось добавить нового пользователя. На этом компьютере можно создать только одного пользователя с помощью рабочего аккаунта.</translation>
+<translation id="6033715878377252112">Мастер поставщика учетных данных Google для Windows</translation>
+<translation id="6149399665202317746">Поставщик учетных данных Google для Windows</translation>
 <translation id="6312494990035843744">В этом домене запрещен вход с рабочим аккаунтом. Используйте другой.</translation>
 <translation id="6463752215771576050">Не удалось зарегистрировать этот компьютер в качестве корпоративного.  Войдите в другой рабочий аккаунт.</translation>
 <translation id="6657585470893396449">Пароль</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Забыли пароль?</translation>
 <translation id="866458870819756755">Не удалось создать пользователя.</translation>
 <translation id="8875753657315897487">Войти, используя рабочий аккаунт</translation>
+<translation id="8973975512230260387">Время сессии истекло. Выполните вход с помощью рабочего аккаунта Google.</translation>
+<translation id="9055998212250844221">Аккаунт пользователя, созданный поставщиком учетных данных Google для Windows</translation>
 <translation id="9135619837062629367">Вход запрещен. Используйте другой аккаунт.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_sk.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_sk.xtb
index 7827242..78f0439e 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_sk.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_sk.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Ak budete pokračovať bez zadania aktuálneho hesla systému Windows, môže dôjsť k nevratnej strate informácií.</translation>
 <translation id="1383286653814676580">Používa sa na spúšťanie prihlasovacej stránky poskytovateľa poverení Google</translation>
 <translation id="1894475569413661128">Prihláste sa pomocou pracovného účtu.</translation>
+<translation id="2329184763010379754">Prihlásiť sa môže iba používateľ, ktorý tento počítač uzamkol.</translation>
+<translation id="2398071111662077301">Prihlasovaciu obrazovku Google sa nepodarilo načítať pre problém s vašou inštaláciou Chromu. Kontaktujte správcu.</translation>
 <translation id="2469311484561825731">Nepodarilo sa prihlásiť do pracovného účtu. Skontrolujte, či má počítač internetové pripojenie, a potom to skúste znova.</translation>
+<translation id="2679096858700291438">Zadali ste nesprávne heslo pre Windows. Skúste to znova.</translation>
+<translation id="2831078752570172210">Účet je pre vás uzamknutý. Obráťte sa na správcu systému.</translation>
+<translation id="2844349213149998955">V tomto zariadení sa nemôžete prihlásiť pomocou osobného účtu. Prihláste sa pomocou pracovného.</translation>
 <translation id="3306357053520292004">Pomocou tohoto účtu už bol do tohto počítača pridaný používateľ. Prihláste sa pomocou iného účtu.</translation>
 <translation id="3968372833844047539">Prihlásiť sa môžu iba používatelia služby G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Vyskytla sa interná chyba.</translation>
 <translation id="4267670563222825190">Pre váš účet sa nenašiel žiadny používateľ domény. Kontaktujte správcu.</translation>
 <translation id="4300229033992784001">Zmenilo sa heslo vášho účtu. Zadajte svoje aktuálne heslo systému Windows, aby sa váš účet Windows synchronizoval s pracovným účtom.</translation>
 <translation id="4706454071748629324">Nepodarilo sa pridať nového používateľa. V tomto počítači je možné pomocou pracovného účtu vytvoriť iba jedného používateľa.</translation>
+<translation id="6033715878377252112">Pomocník poskytovateľa poverení Google pre Windows</translation>
+<translation id="6149399665202317746">Poskytovateľ poverení Google pre Windows</translation>
 <translation id="6312494990035843744">Prihlásenie pomocou pracovného účtu nie je v tejto doméne povolené. Skúste iný účet.</translation>
 <translation id="6463752215771576050">Tento počítač sa nepodarilo zaregistrovať do podnikovej správy.  Prihláste sa pomocou iného pracovného účtu.</translation>
 <translation id="6657585470893396449">Heslo</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Nepamätám si heslo systému Windows</translation>
 <translation id="866458870819756755">Používateľa sa nepodarilo vytvoriť.</translation>
 <translation id="8875753657315897487">Prihláste sa pomocou pracovného účtu</translation>
+<translation id="8973975512230260387">Platnosť vašej relácie vypršala. Prihláste sa pomocou pracovného účtu Google.</translation>
+<translation id="9055998212250844221">Používateľský účet vytvorený poskytovateľom poverení Google pre Windows</translation>
 <translation id="9135619837062629367">Prihlasovanie pomocou tohto účtu je zakázané. Vyskúšajte iný účet.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb
index 7359cc24..c2b4b8c 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Če boste nadaljevali brez vnosa trenutnega gesla za Windows, lahko pride do trajne izgube podatkov.</translation>
 <translation id="1383286653814676580">Uporabljeno za izvajanje strani za prijavo z Googlovim ponudnikom poverilnic.</translation>
 <translation id="1894475569413661128">Prijavite se s službenim računom.</translation>
+<translation id="2329184763010379754">Samo uporabnik, ki je zaklenil ta računalnik, se lahko prijavi.</translation>
+<translation id="2398071111662077301">Zaslona za prijavo v Google ni mogoče naložiti zaradi težave pri namestitvi Chroma. Obrnite se na skrbnika.</translation>
 <translation id="2469311484561825731">Prijava v službeni račun ni uspela. Preverite, ali je v računalniku vzpostavljena internetna povezava, in poskusite znova.</translation>
+<translation id="2679096858700291438">Vnesli ste nepravilno geslo za Windows. Poskusite znova.</translation>
+<translation id="2831078752570172210">Vaš račun je zaklenjen. Obrnite se na skrbnika sistema.</translation>
+<translation id="2844349213149998955">Prijava z osebnim računom v tej napravi ni dovoljena. Prijavite se s službenim računom.</translation>
 <translation id="3306357053520292004">V tem računalniku je že bil dodan uporabnik s tem računom. Prijavite se z drugim računom.</translation>
 <translation id="3968372833844047539">Prijavijo se lahko samo uporabniki storitve Gsuite Enterprise.</translation>
 <translation id="4057329986137569701">Prišlo je do notranje napake.</translation>
 <translation id="4267670563222825190">Za vaš račun ni bilo mogoče najti nobenega uporabnika domene. Obrnite se na skrbnika.</translation>
 <translation id="4300229033992784001">Geslo računa je spremenjeno. Vnesite trenutno geslo za Windows, če želite sinhronizirati račun za Windows s službenim računom.</translation>
 <translation id="4706454071748629324">Ni bilo mogoče dodati novega uporabnika. V tem računalniku je s službenim računom dovoljeno ustvariti samo enega uporabnika.</translation>
+<translation id="6033715878377252112">Pomočnik za Googlov ponudnik poverilnic za Windows</translation>
+<translation id="6149399665202317746">Googlov ponudnik poverilnic za Windows</translation>
 <translation id="6312494990035843744">Prijava s službenim računom v tej domeni ni dovoljena. Poskusite z drugim računom.</translation>
 <translation id="6463752215771576050">Tega računalnika ni mogoče včlaniti za upravljanje v poslovnem okolju.  Prijavite se z drugim službenim računom.</translation>
 <translation id="6657585470893396449">Geslo</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Pozabljeno geslo za Windows</translation>
 <translation id="866458870819756755">Uporabnika ni bilo mogoče ustvariti.</translation>
 <translation id="8875753657315897487">Prijavite se s službenim računom</translation>
+<translation id="8973975512230260387">Seja je potekla. Prijavite se z Googlovim službenim računom.</translation>
+<translation id="9055998212250844221">Uporabniški račun, ki ga je ustvaril Googlov ponudnik poverilnic za Windows</translation>
 <translation id="9135619837062629367">Prijava s tem računom ni dovoljena. Poskusite z drugim računom.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_sr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_sr.xtb
index be829ec..8d77197 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_sr.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_sr.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Ако наставите без уноса актуелне лозинке за Windows, можете неповратно да изгубите информације.</translation>
 <translation id="1383286653814676580">Користи се за покретање Google Credential Provider странице за пријављивање.</translation>
 <translation id="1894475569413661128">Пријавите се помоћу пословног налога.</translation>
+<translation id="2329184763010379754">Пријављивање је дозвољено само кориснику који је закључао овај рачунар.</translation>
+<translation id="2398071111662077301">Учитавање Google екрана није успело због проблема са инсталацијом Chrome-а. Контактирајте администратора.</translation>
 <translation id="2469311484561825731">Пријављивање на пословни налог није успело. Уверите се да рачунар има интернет везу, па пробајте поново.</translation>
+<translation id="2679096858700291438">Унели сте нетачну лозинку за Windows. Пробајте поново.</translation>
+<translation id="2831078752570172210">Налог је закључан. Контактирајте администратора система.</translation>
+<translation id="2844349213149998955">Пријављивање помоћу личног налога није дозвољено на овом уређају. Пријавите се помоћу пословног налога.</translation>
 <translation id="3306357053520292004">Корисник на овом рачунару је већ додат помоћу овог налога. Пријавите се помоћу другог налога.</translation>
 <translation id="3968372833844047539">Само корисници Gsuite верзије за предузећа могу да се пријаве.</translation>
 <translation id="4057329986137569701">Дошло је до интерне грешке.</translation>
 <translation id="4267670563222825190">Нисмо пронашли ниједног корисника домена за ваш налог. Обратите се администратору.</translation>
 <translation id="4300229033992784001">Лозинка налога је промењена. Унесите актуелну лозинку за Windows да бисте синхронизовали Windows налог са пословним налогом.</translation>
 <translation id="4706454071748629324">Додавање новог корисника није успело. Овај рачунар дозвољава прављење само једног корисника помоћу пословног налога.</translation>
+<translation id="6033715878377252112">Помоћ за Google добављач акредитива за Windows</translation>
+<translation id="6149399665202317746">Google добављач акредитива за Windows</translation>
 <translation id="6312494990035843744">Пријављивање помоћу пословног налога на овом домену није дозвољено. Пробајте са другим налогом.</translation>
 <translation id="6463752215771576050">Регистровање овог рачунара за управљање предузећима није успело.  Пријавите се помоћу неког другог пословног налога.</translation>
 <translation id="6657585470893396449">Лозинка</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Заборавили сте лозинку за Windows</translation>
 <translation id="866458870819756755">Прављење корисника није успело.</translation>
 <translation id="8875753657315897487">Пријавите се помоћу пословног налога</translation>
+<translation id="8973975512230260387">Сесија је истекла. Пријавите се помоћу пословног Google налога.</translation>
+<translation id="9055998212250844221">Кориснички налог који је отворио Google добављач акредитива за Windows</translation>
 <translation id="9135619837062629367">Пријављивање помоћу овог налога није дозвољено. Пробајте са другим налогом.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb
index 7183ae80..e78c79b 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">தற்போதைய Windows கடவுச்சொல்லை உள்ளிடாமல் தொடர்வது மீட்க முடியாத தகவல் இழப்பை ஏற்படுத்தக்கூடும்.</translation>
 <translation id="1383286653814676580">Google அனுமதிச் சான்று வழங்குநர் உள்நுழைவுப் பக்கத்தை இயக்கப் பயன்படுத்தப்படுகிறது.</translation>
 <translation id="1894475569413661128">உங்கள் பணிக் கணக்கில் உள்நுழையவும்.</translation>
+<translation id="2329184763010379754">இந்தக் கம்ப்யூட்டரைப் பூட்டிய பயனர் மட்டுமே உள்நுழைய அனுமதிக்கப்படுவார்.</translation>
+<translation id="2398071111662077301">Chrome நிறுவலில் உள்ள ஒரு சிக்கலின் காரணமாக Google உள்நுழைவுத் திரையைக் காட்ட முடியவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="2469311484561825731">உங்கள் பணிக் கணக்கில் உள்நுழைய முடியவில்லை. கம்ப்யூட்டரில் இணைய இணைப்பு உள்ளதா என்பதைச் சரிபார்த்து மீண்டும் முயலவும்.</translation>
+<translation id="2679096858700291438">தவறான Windows கடவுச்சொல்லை உள்ளிட்டுள்ளீர்கள். மீண்டும் முயலவும்.</translation>
+<translation id="2831078752570172210">உங்கள் கணக்கு பூட்டப்பட்டுள்ளது. உங்கள் சிஸ்டம் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
+<translation id="2844349213149998955">இந்த சாதனத்தில் தனிப்பட்ட கணக்கின் மூலம் உள்நுழைய அனுமதியில்லை. பணிக் கணக்கின் மூலம் உள்நுழையவும்.</translation>
 <translation id="3306357053520292004">இந்தக் கம்ப்யூட்டரில் இந்தக் கணக்கைப் பயன்படுத்தி ஏற்கனவே ஒரு பயனர் சேர்க்கப்பட்டுள்ளார். வேறொரு கணக்கில் உள்நுழையவும்.</translation>
 <translation id="3968372833844047539">Gsuite நிறுவனப் பயனர்கள் மட்டுமே உள்நுழைய அனுமதிக்கப்படுவார்கள்.</translation>
 <translation id="4057329986137569701">அகப்பிழை ஏற்பட்டது.</translation>
 <translation id="4267670563222825190">உங்கள் கணக்கிற்கான டொமைன் பயனர் இல்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="4300229033992784001">உங்கள் கணக்கின் கடவுச்சொல் மாற்றப்பட்டது. உங்கள் Windows கணக்கை பணிக் கணக்குடன் ஒத்திசைக்க உங்களின் தற்போதைய Windows கடவுச்சொல்லை உள்ளிடவும்.</translation>
 <translation id="4706454071748629324">புதிய பயனரைச் சேர்க்க முடியவில்லை. இந்தக் கம்ப்யூட்டர் பணிக் கணக்கைப் பயன்படுத்தி ஒரு பயனரை மட்டுமே உருவாக்க அனுமதிக்கும்.</translation>
+<translation id="6033715878377252112">Windowsஸுக்கான Google அனுமதிச் சான்று வழங்குநர் உதவி நிரல்</translation>
+<translation id="6149399665202317746">Windowsஸுக்கான Google அனுமதிச் சான்று வழங்குநர்</translation>
 <translation id="6312494990035843744">இந்த டொமைனில் பணிக் கணக்கில் உள்நுழைய அனுமதியில்லை. வேறொரு கணக்கைப் பயன்படுத்திப் பார்க்கவும்.</translation>
 <translation id="6463752215771576050">நிறுவன மேலாண்மைக்கு இந்தக் கம்ப்யூட்டரைப் பதிவுசெய்ய முடியவில்லை.  வேறொரு பணிக் கணக்கில் உள்நுழையவும்.</translation>
 <translation id="6657585470893396449">கடவுச்சொல்</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Windows கடவுச்சொல் மறந்துவிட்டது</translation>
 <translation id="866458870819756755">பயனரை உருவாக்க முடியவில்லை.</translation>
 <translation id="8875753657315897487">உங்கள் பணிக் கணக்கைப் பயன்படுத்தி உள்நுழையவும்</translation>
+<translation id="8973975512230260387">உங்கள் அமர்வு காலாவதியானது. உங்கள் Google பணிக் கணக்கைப் பயன்படுத்தி உள்நுழையவும்.</translation>
+<translation id="9055998212250844221">Windowsஸுக்கான Google அனுமதிச் சான்று வழங்குநர் மூலம் பயனர் கணக்கு உருவாக்கப்பட்டுள்ளது</translation>
 <translation id="9135619837062629367">இந்தக் கணக்கில் உள்நுழைய அனுமதியில்லை. வேறொரு கணக்கைப் பயன்படுத்திப் பார்க்கவும்.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb
index cf807bf..d6f5d43 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">การดำเนินการต่อโดยไม่ป้อนรหัสผ่านปัจจุบันของ Windows อาจทำให้สูญเสียข้อมูลแบบเอากลับคืนมาไม่ได้</translation>
 <translation id="1383286653814676580">ใช้เพื่อเรียกใช้หน้าการลงชื่อเข้าใช้ของผู้ให้บริการข้อมูลรับรอง Google</translation>
 <translation id="1894475569413661128">ลงชื่อเข้าใช้ด้วยบัญชีงาน</translation>
+<translation id="2329184763010379754">มีเฉพาะผู้ใช้ที่ล็อกคอมพิวเตอร์เครื่องนี้ที่ได้รับอนุญาตให้ลงชื่อเข้าใช้</translation>
+<translation id="2398071111662077301">โหลดหน้าจอลงชื่อเข้าใช้ Google ไม่ได้เนื่องจากมีปัญหาในการติดตั้ง Chrome โปรดติดต่อผู้ดูแลระบบ</translation>
 <translation id="2469311484561825731">ลงชื่อเข้าใช้บัญชีงานไม่สำเร็จ ตรวจสอบว่าคอมพิวเตอร์เชื่อมต่ออินเทอร์เน็ต แล้วลองอีกครั้ง</translation>
+<translation id="2679096858700291438">คุณป้อนรหัสผ่าน Windows ไม่ถูกต้อง โปรดลองอีกครั้ง</translation>
+<translation id="2831078752570172210">บัญชีของคุณถูกล็อก โปรดติดต่อผู้ดูแลระบบ</translation>
+<translation id="2844349213149998955">ไม่อนุญาตให้ลงชื่อเข้าใช้ด้วยบัญชีส่วนบุคคลในอุปกรณ์นี้ โปรดเข้าสู่ระบบด้วยบัญชีงาน</translation>
 <translation id="3306357053520292004">ใช้บัญชีนี้เพื่อเพิ่มผู้ใช้ในคอมพิวเตอร์เครื่องนี้แล้ว โปรดลงชื่อเข้าใช้ด้วยบัญชีอื่น</translation>
 <translation id="3968372833844047539">อนุญาตให้เข้าสู่ระบบได้เฉพาะผู้ใช้ G Suite Enterprise</translation>
 <translation id="4057329986137569701">เกิดข้อผิดพลาดภายใน</translation>
 <translation id="4267670563222825190">ไม่พบผู้ใช้โดเมนสำหรับบัญชีของคุณ โปรดติดต่อผู้ดูแลระบบ</translation>
 <translation id="4300229033992784001">รหัสผ่านของบัญชีมีการเปลี่ยนแปลง โปรดป้อนรหัสผ่าน Windows ปัจจุบันเพื่อซิงค์บัญชี Windows กับบัญชีงาน</translation>
 <translation id="4706454071748629324">เพิ่มผู้ใช้ใหม่ไม่สำเร็จ คอมพิวเตอร์เครื่องนี้อนุญาตให้สร้างผู้ใช้โดยใช้บัญชีงานได้เพียงคนเดียว</translation>
+<translation id="6033715878377252112">ตัวช่วยเหลือโปรแกรมการเข้าสู่ระบบโดยใช้บัญชี Google สำหรับ Windows</translation>
+<translation id="6149399665202317746">โปรแกรมการเข้าสู่ระบบโดยใช้บัญชี Google สำหรับ Windows</translation>
 <translation id="6312494990035843744">ไม่อนุญาตให้ลงชื่อเข้าใช้ด้วยบัญชีงานในโดเมนนี้ ลองใช้บัญชีอื่น</translation>
 <translation id="6463752215771576050">ลงทะเบียนคอมพิวเตอร์เครื่องนี้สำหรับการจัดการองค์กรไม่ได้  โปรดลงชื่อเข้าใช้ด้วยบัญชีงานอื่น</translation>
 <translation id="6657585470893396449">รหัสผ่าน</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">ลืมรหัสผ่าน Windows</translation>
 <translation id="866458870819756755">สร้างผู้ใช้ไม่ได้</translation>
 <translation id="8875753657315897487">ลงชื่อเข้าใช้ด้วยบัญชีงาน</translation>
+<translation id="8973975512230260387">เซสชันของคุณหมดเวลาแล้ว ลงชื่อเข้าใช้ด้วยบัญชีงาน Google</translation>
+<translation id="9055998212250844221">บัญชีผู้ใช้ที่สร้างโดยโปรแกรมการเข้าสู่ระบบโดยใช้บัญชี Google สำหรับ Windows</translation>
 <translation id="9135619837062629367">ไม่อนุญาตให้ลงชื่อเข้าใช้ด้วยบัญชีนี้ ลองใช้บัญชีอื่น</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_uk.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_uk.xtb
index 1b3ad66..7fe4ed4 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_uk.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_uk.xtb
@@ -4,13 +4,20 @@
 <translation id="1337821341856692531">Якщо ви продовжите, не ввівши поточний пароль Windows, певна інформація може бути втрачена назавжди.</translation>
 <translation id="1383286653814676580">Використовується для запуску сторінки входу в Постачальник облікових даних Google.</translation>
 <translation id="1894475569413661128">Увійдіть у корпоративний обліковий запис.</translation>
+<translation id="2329184763010379754">Входити в систему може лише користувач, який заблокував цей комп'ютер.</translation>
+<translation id="2398071111662077301">Не вдалося завантажити екран входу Google через проблему зі встановленням Chrome. Зверніться до свого адміністратора.</translation>
 <translation id="2469311484561825731">Не вдалося ввійти в корпоративний обліковий запис. Перевірте інтернет-з’єднання й повторіть спробу.</translation>
+<translation id="2679096858700291438">Ви ввели неправильний пароль Windows. Повторіть спробу.</translation>
+<translation id="2831078752570172210">Ваш обліковий запис заблоковано. Зв'яжіться із системним адміністратором.</translation>
+<translation id="2844349213149998955">На цьому пристрої заборонено входити в особистий обліковий запис. Увійдіть у корпоративний обліковий запис.</translation>
 <translation id="3306357053520292004">На цьому комп’ютері вже додано користувача з таким обліковим записом. Увійдіть в інший обліковий запис.</translation>
 <translation id="3968372833844047539">Можуть входити лише користувачі G Suite Enterprise.</translation>
 <translation id="4057329986137569701">Сталася внутрішня помилка.</translation>
 <translation id="4267670563222825190">Не знайдено користувачів домену для вашого облікового запису. Зв'яжіться з адміністратором.</translation>
 <translation id="4300229033992784001">Пароль вашого облікового запису змінено. Введіть поточний пароль Windows, щоб синхронізувати обліковий запис Windows і корпоративний обліковий запис.</translation>
 <translation id="4706454071748629324">Не вдалося додати нового користувача. На цьому комп’ютері дозволено створювати лише одного користувача з корпоративним обліковим записом.</translation>
+<translation id="6033715878377252112">Помічник для Постачальника облікових даних Google для Windows</translation>
+<translation id="6149399665202317746">Постачальник облікових даних Google для Windows</translation>
 <translation id="6312494990035843744">Входити в корпоративний обліковий запис у цьому домені заборонено. Спробуйте інший.</translation>
 <translation id="6463752215771576050">Не вдалося зареєструвати цей комп’ютер для корпоративного керування.  Увійдіть в інший корпоративний обліковий запис.</translation>
 <translation id="6657585470893396449">Пароль</translation>
@@ -22,5 +29,7 @@
 <translation id="8639729688781680518">Не пам’ятаю пароль Windows</translation>
 <translation id="866458870819756755">Не вдалося створити користувача.</translation>
 <translation id="8875753657315897487">Увійдіть у корпоративний обліковий запис</translation>
+<translation id="8973975512230260387">Ваш сеанс завершено. Увійдіть у корпоративний обліковий запис Google.</translation>
+<translation id="9055998212250844221">Обліковий запис користувача створено Постачальником облікових даних Google для Windows</translation>
 <translation id="9135619837062629367">Входити в цей обліковий запис заборонено. Спробуйте інший.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/test/base/test_browser_window.cc b/chrome/test/base/test_browser_window.cc
index 6ff94c71..2abf2cd 100644
--- a/chrome/test/base/test_browser_window.cc
+++ b/chrome/test/base/test_browser_window.cc
@@ -139,14 +139,8 @@
   return const_cast<TestLocationBar*>(&location_bar_);
 }
 
-PageActionIconContainer*
-TestBrowserWindow::GetOmniboxPageActionIconContainer() {
-  return &omnibox_page_action_icon_container_;
-}
-
-PageActionIconContainer*
-TestBrowserWindow::GetToolbarPageActionIconContainer() {
-  return nullptr;
+bool TestBrowserWindow::UpdatePageActionIcon(PageActionIconType type) {
+  return false;
 }
 
 ToolbarActionsBar* TestBrowserWindow::GetToolbarActionsBar() {
diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h
index 67f722b..94187e5 100644
--- a/chrome/test/base/test_browser_window.h
+++ b/chrome/test/base/test_browser_window.h
@@ -16,7 +16,6 @@
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/location_bar/location_bar.h"
-#include "chrome/browser/ui/page_action/page_action_icon_container.h"
 #include "chrome/common/buildflags.h"
 
 #if !defined(OS_ANDROID)
@@ -94,8 +93,8 @@
   bool IsFullscreen() const override;
   bool IsFullscreenBubbleVisible() const override;
   LocationBar* GetLocationBar() const override;
-  PageActionIconContainer* GetOmniboxPageActionIconContainer() override;
-  PageActionIconContainer* GetToolbarPageActionIconContainer() override;
+  bool UpdatePageActionIcon(PageActionIconType type) override;
+  void ExecutePageActionIconForTesting(PageActionIconType type) override {}
   void SetFocusToLocationBar(bool select_all) override {}
   void UpdateReloadStopState(bool is_loading, bool force) override {}
   void UpdateToolbar(content::WebContents* contents) override {}
@@ -209,8 +208,6 @@
     void FocusLocation(bool select_all) override {}
     void FocusSearch() override {}
     void UpdateContentSettingsIcons() override {}
-    void UpdateSaveCreditCardIcon() override {}
-    void UpdateLocalCardMigrationIcon() override {}
     void UpdateBookmarkStarVisibility() override {}
     void SaveStateToContents(content::WebContents* contents) override {}
     void Revert() override {}
@@ -222,22 +219,8 @@
     DISALLOW_COPY_AND_ASSIGN(TestLocationBar);
   };
 
-  class TestOmniboxPageActionIconContainer : public PageActionIconContainer {
-   public:
-    TestOmniboxPageActionIconContainer() {}
-    ~TestOmniboxPageActionIconContainer() override {}
-
-    // PageActionIconContainer:
-    void UpdatePageActionIcon(PageActionIconType type) override {}
-    void ExecutePageActionIconForTesting(PageActionIconType type) override {}
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(TestOmniboxPageActionIconContainer);
-  };
-
   TestDownloadShelf download_shelf_;
   TestLocationBar location_bar_;
-  TestOmniboxPageActionIconContainer omnibox_page_action_icon_container_;
 
   DISALLOW_COPY_AND_ASSIGN(TestBrowserWindow);
 };
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index b49c7435..9a876a2 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -98,8 +98,6 @@
     "webui_resource_async_browsertest.js",
   ]
 
-  gen_include_files = [ "a11y/accessibility_audit_rules.js" ]
-
   extra_js_files = [
     "test_browser_proxy.js",
     "settings/test_password_manager_proxy.js",
diff --git a/chrome/test/data/webui/a11y/accessibility_audit_rules.js b/chrome/test/data/webui/a11y/accessibility_audit_rules.js
index 6c08d3e..5079576 100644
--- a/chrome/test/data/webui/a11y/accessibility_audit_rules.js
+++ b/chrome/test/data/webui/a11y/accessibility_audit_rules.js
@@ -52,6 +52,7 @@
   'frame-title',
   'heading-order',
   'hidden-content',
+  'href-no-hash',
   'html-has-lang',
   'html-lang-valid',
   'image-alt',
diff --git a/chrome/test/data/webui/extensions/a11y/extensions_a11y_test.js b/chrome/test/data/webui/extensions/a11y/extensions_a11y_test.js
index 11bc8789..fcb77c0 100644
--- a/chrome/test/data/webui/extensions/a11y/extensions_a11y_test.js
+++ b/chrome/test/data/webui/extensions/a11y/extensions_a11y_test.js
@@ -56,16 +56,6 @@
         return parentNode && parentNode.host &&
             parentNode.host.tagName == 'CR-TOGGLE';
       },
-
-      // TODO(crbug.com/1002620): this filter can be removed after
-      // addressing the bug
-      'heading-order': function(nodeResult) {
-        // Filter out 'Heading levels do not increase by one' error when
-        // enumerating extensions
-        const expectedMarkup = '<div id="name" role="heading" aria-level="3" \
-class="clippable-flex-text">My extension 1</div>';
-        return nodeResult['html'] === expectedMarkup;
-      },
     };
   }
 
@@ -95,13 +85,7 @@
   name: 'NoExtensions',
 
   /** @override */
-  // TODO(crbug.com/1002627): when bug is addressed, this should be replaced
-  // with axeOptions: CrExtensionsA11yTest.axeOptions,
-  axeOptions: Object.assign({}, CrExtensionsA11yTest.axeOptions, {
-    'rules': Object.assign({}, CrExtensionsA11yTest.axeOptions.rules, {
-      'link-in-text-block': {enabled: false},
-    })
-  }),
+  axeOptions: CrExtensionsA11yTest.axeOptions,
 
   /** @override */
   violationFilter: CrExtensionsA11yTest.violationFilter,
diff --git a/chrome/test/data/webui/management/a11y/management_a11y_test.js b/chrome/test/data/webui/management/a11y/management_a11y_test.js
index bc54861..a89088c 100644
--- a/chrome/test/data/webui/management/a11y/management_a11y_test.js
+++ b/chrome/test/data/webui/management/a11y/management_a11y_test.js
@@ -31,8 +31,6 @@
         'skip-link': {enabled: false},
         // TODO(crbug.com/761461): enable after addressing flaky tests.
         'color-contrast': {enabled: false},
-        // TODO(crbug.com/1002623): remove this line after addressing bug
-        'link-in-text-block': {enabled: false},
       },
     };
   }
diff --git a/chrome/test/data/webui/settings/a11y/crostini_settings_subpage_a11y_test.js b/chrome/test/data/webui/settings/a11y/crostini_settings_subpage_a11y_test.js
index c2a8327..f9349f2 100644
--- a/chrome/test/data/webui/settings/a11y/crostini_settings_subpage_a11y_test.js
+++ b/chrome/test/data/webui/settings/a11y/crostini_settings_subpage_a11y_test.js
@@ -15,7 +15,7 @@
   /** @override */
   name: 'CROSTINI',
   /** @override */
-  axeOptions: SettingsAccessibilityTest.axeOptionsExcludeLinkInTextBlock,
+  axeOptions: SettingsAccessibilityTest.axeOptions,
   /** @override */
   setup: function() {
     settings.router.navigateTo(settings.routes.CROSTINI);
diff --git a/chrome/test/data/webui/settings/a11y/multidevice_a11y_test.js b/chrome/test/data/webui/settings/a11y/multidevice_a11y_test.js
index 97c7759..1eb57f3 100644
--- a/chrome/test/data/webui/settings/a11y/multidevice_a11y_test.js
+++ b/chrome/test/data/webui/settings/a11y/multidevice_a11y_test.js
@@ -32,7 +32,7 @@
   /** @override */
   name: 'MULTIDEVICE',
   /** @override */
-  axeOptions: SettingsAccessibilityTest.axeOptionsExcludeLinkInTextBlock,
+  axeOptions: SettingsAccessibilityTest.axeOptions,
   /** @override */
   setup: function() {
     settings.router.navigateTo(settings.routes.MULTIDEVICE);
diff --git a/chrome/test/data/webui/settings/a11y/multidevice_features_a11y_test.js b/chrome/test/data/webui/settings/a11y/multidevice_features_a11y_test.js
index 5a0f2a07..841c3feb 100644
--- a/chrome/test/data/webui/settings/a11y/multidevice_features_a11y_test.js
+++ b/chrome/test/data/webui/settings/a11y/multidevice_features_a11y_test.js
@@ -32,7 +32,7 @@
   /** @override */
   name: 'MULTIDEVICE_FEATURES_ACCESSIBILITY',
   /** @override */
-  axeOptions: SettingsAccessibilityTest.axeOptionsExcludeLinkInTextBlock,
+  axeOptions: SettingsAccessibilityTest.axeOptions,
   /** @override */
   setup: function() {
     settings.router.navigateTo(settings.routes.MULTIDEVICE_FEATURES);
diff --git a/chrome/test/data/webui/settings/a11y/settings_accessibility_test.js b/chrome/test/data/webui/settings/a11y/settings_accessibility_test.js
index b871ad8..7d52614 100644
--- a/chrome/test/data/webui/settings/a11y/settings_accessibility_test.js
+++ b/chrome/test/data/webui/settings/a11y/settings_accessibility_test.js
@@ -28,17 +28,6 @@
   }
 };
 
-// TODO(crbug.com/1002627): This block prevents generation of a
-// link-in-text-block browser-test. This can be removed once the bug is
-// addressed, and usage should be replaced with
-// SettingsAccessibilityTest.axeOptions
-SettingsAccessibilityTest.axeOptionsExcludeLinkInTextBlock =
-    Object.assign({}, SettingsAccessibilityTest.axeOptions, {
-      'rules': Object.assign({}, SettingsAccessibilityTest.axeOptions.rules, {
-        'link-in-text-block': {enabled: false},
-      })
-    });
-
 // Default accessibility audit options. Specify in test definition to use.
 SettingsAccessibilityTest.violationFilter = {
   // Polymer components use aria-active-attribute.
diff --git a/components/autofill/core/browser/form_data_importer.h b/components/autofill/core/browser/form_data_importer.h
index 1fd598e0..f49a4e69 100644
--- a/components/autofill/core/browser/form_data_importer.h
+++ b/components/autofill/core/browser/form_data_importer.h
@@ -19,6 +19,8 @@
 #include "components/autofill/core/browser/payments/payments_client.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 
+class SaveCardOfferObserver;
+
 namespace autofill {
 
 // Manages logic for importing address profiles and credit card information from
@@ -155,6 +157,7 @@
   friend class LocalCardMigrationBrowserTest;
   friend class SaveCardBubbleViewsFullFormBrowserTest;
   friend class SaveCardInfobarEGTestHelper;
+  friend class ::SaveCardOfferObserver;
   FRIEND_TEST_ALL_PREFIXES(AutofillMergeTest, MergeProfiles);
   FRIEND_TEST_ALL_PREFIXES(FormDataImporterTest,
                            AllowDuplicateMaskedServerCardIfFlagEnabled);
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager.h b/components/autofill/core/browser/payments/credit_card_save_manager.h
index 2826bd8..4588713d 100644
--- a/components/autofill/core/browser/payments/credit_card_save_manager.h
+++ b/components/autofill/core/browser/payments/credit_card_save_manager.h
@@ -25,6 +25,8 @@
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "url/origin.h"
 
+class SaveCardOfferObserver;
+
 namespace autofill {
 
 // Manages logic for determining whether upload credit card save to Google
@@ -80,12 +82,13 @@
   // particular actions occur.
   class ObserverForTest {
    public:
-    virtual void OnOfferLocalSave() = 0;
-    virtual void OnDecideToRequestUploadSave() = 0;
-    virtual void OnReceivedGetUploadDetailsResponse() = 0;
-    virtual void OnSentUploadCardRequest() = 0;
-    virtual void OnReceivedUploadCardResponse() = 0;
-    virtual void OnStrikeChangeComplete() = 0;
+    virtual ~ObserverForTest() {}
+    virtual void OnOfferLocalSave() {}
+    virtual void OnDecideToRequestUploadSave() {}
+    virtual void OnReceivedGetUploadDetailsResponse() {}
+    virtual void OnSentUploadCardRequest() {}
+    virtual void OnReceivedUploadCardResponse() {}
+    virtual void OnStrikeChangeComplete() {}
   };
 
   // The parameters should outlive the CreditCardSaveManager.
@@ -139,6 +142,7 @@
   friend class TestCreditCardSaveManager;
   friend class SaveCardBubbleViewsFullFormBrowserTest;
   friend class SaveCardInfobarEGTestHelper;
+  friend class ::SaveCardOfferObserver;
   FRIEND_TEST_ALL_PREFIXES(SaveCardBubbleViewsFullFormBrowserTest,
                            StrikeDatabase_Local_FullFlowTest);
   FRIEND_TEST_ALL_PREFIXES(SaveCardBubbleViewsFullFormBrowserTest,
diff --git a/components/autofill/ios/browser/credit_card_save_manager_test_observer_bridge.h b/components/autofill/ios/browser/credit_card_save_manager_test_observer_bridge.h
index 6c8f2d6..85a66449 100644
--- a/components/autofill/ios/browser/credit_card_save_manager_test_observer_bridge.h
+++ b/components/autofill/ios/browser/credit_card_save_manager_test_observer_bridge.h
@@ -38,7 +38,7 @@
   explicit CreditCardSaveManagerTestObserverBridge(
       CreditCardSaveManager* credit_card_save_manager,
       id<CreditCardSaveManagerTestObserver> observer);
-  virtual ~CreditCardSaveManagerTestObserverBridge() = default;
+  ~CreditCardSaveManagerTestObserverBridge() override = default;
 
   // CreditCardSaveManager::ObserverForTest:
   void OnOfferLocalSave() override;
diff --git a/components/autofill_assistant/browser/metrics.cc b/components/autofill_assistant/browser/metrics.cc
index 57f7ffe..b2ccaa64 100644
--- a/components/autofill_assistant/browser/metrics.cc
+++ b/components/autofill_assistant/browser/metrics.cc
@@ -14,14 +14,19 @@
     "Android.AutofillAssistant.PaymentRequest.Prefilled";
 const char kPaymentRequestAutofillInfoChangedName[] =
     "Android.AutofillAssistant.PaymentRequest.AutofillChanged";
+static bool DROPOUT_RECORDED = false;
 }  // namespace
 
 // static
 void Metrics::RecordDropOut(DropOutReason reason) {
   DCHECK_LE(reason, DropOutReason::kMaxValue);
+  if (DROPOUT_RECORDED) {
+    return;
+  }
   DVLOG_IF(3, reason != DropOutReason::AA_START)
       << "Drop out with reason: " << reason;
   base::UmaHistogramEnumeration(kDropOutEnumName, reason);
+  DROPOUT_RECORDED = true;
 }
 
 // static
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 724fafc5..5554359 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -96,6 +96,7 @@
       Si no se especifica la política, pueden volverse a utilizar los GPO almacenados en caché por hasta 25 horas.
 
       Si se establece la política en 0, los GPO dejan de almacenarse en caché. Ten en cuenta que esta acción aumenta la carga del servidor, ya que se vuelven a descargar los GPO en cada obtención de la política, incluso si no cambiaron.</translation>
+<translation id="1111470455889178048">Analizar las cargas y descargas del usuario</translation>
 <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> omitirá cualquier proxy de la lista de hosts que se proporciona aquí.
 
           Esta política solo se aplicará si se selecciona la configuración manual de proxy en "Elegir cómo especificar la configuración del servidor proxy" y si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" />.
@@ -396,6 +397,7 @@
        se rechaza de forma automática. Los patrones comodines no se permiten.</translation>
 <translation id="1634989431648355062">Permitir el complemento <ph name="FLASH_PLUGIN_NAME" /> en estos sitios</translation>
 <translation id="1645793986494086629">Esquema:</translation>
+<translation id="1648816843164517573">Lista de nombres que omitirán la revisión de la política de HSTS</translation>
 <translation id="1653229475925941921">Si se configura esta política, controlará el tipo de lupa habilitado. Si la política se configura como "ninguna", se inhabilitará la lupa.
 
           Si configuras esta política, los usuarios no podrán modificarla ni anularla.
@@ -879,6 +881,7 @@
 <translation id="254653220329944566">Habilitar los informes en la nube de <ph name="PRODUCT_NAME" /></translation>
 <translation id="2548572254685798999">Enviar información de "Navegación segura"</translation>
 <translation id="2550593661567988768">Solo impresión simple</translation>
+<translation id="2551520365302988324">Analizar las cargas del usuario</translation>
 <translation id="2552966063069741410">Zona horaria</translation>
 <translation id="2562339630163277285">Especifica la URL del motor de búsqueda que se usa para proporcionar resultados al instante. La URL debe contener el string "<ph name="SEARCH_TERM_MARKER" />", el cual se reemplazará en el momento de la consulta con el texto que el usuario haya ingresado hasta entonces.
 
@@ -953,6 +956,7 @@
 <translation id="2665422249821137126">Habilita el cursor grande en la pantalla de acceso</translation>
 <translation id="2672012807430078509">Controlar el uso de NTLM como protocolo de autenticación para las activaciones de archivos compartidos SMB</translation>
 <translation id="267596348720209223">Especifica la codificación de caracteres admitida por el proveedor de búsqueda. Las codificaciones son nombres de páginas de códigos, como UTF-8, GB2312 e ISO-8859-1. Se prueban en el orden dado. Esta política es opcional. Si no se configura, se usará el valor predeterminado, que es UTF-8. Esta política solo se respeta si la política "DefaultSearchProviderEnabled" está habilitada.</translation>
+<translation id="2679827548357140943">Lista de dominios en los que es necesario revisar el contenido subido para detectar software malicioso</translation>
 <translation id="268577405881275241">Habilitar la función del proxy de compresión de datos</translation>
 <translation id="2693108589792503178">Configura la URL de cambio de contraseña.</translation>
 <translation id="2694143893026486692">Se habilitó la lupa con vista acoplada</translation>
@@ -1323,6 +1327,10 @@
 <translation id="332771718998993005">Determina el nombre anunciado como un destino de <ph name="PRODUCT_NAME" />.
 
           Si esta política se establece con una string no vacía, esa string se usará como el nombre del destino de <ph name="PRODUCT_NAME" />. De lo contrario, el nombre del destino será el nombre del dispositivo. Si esta política no se establece, el nombre del destino será el nombre del dispositivo, y el propietario del dispositivo (o un usuario del dominio que administre el dispositivo) podrá cambiarlo. El nombre tiene un límite máximo de 24 caracteres.</translation>
+<translation id="3331950121151548952">Indica una lista de dominios en los que es necesario revisar las cargas para detectar software malicioso.  Se utiliza esta política únicamente si se establece <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> con un valor que permite la revisión de las cargas para detectar software malicioso o la aplica de manera forzosa.
+
+      Si no se establece esta política o se establece como una lista vacía de dominios, no se revisarán las cargas para detectar si hay software malicioso.
+      </translation>
 <translation id="3335468714959531450">Te permite configurar una lista de patrones de URL con los sitios autorizados para configurar cookies.
 
           Si no se configura esta política, se usará el valor global predeterminado para todos los sitios ya sea de la política "DefaultCookiesSetting" (si está configurada) o de otro tipo de configuración personal del usuario.
@@ -1393,6 +1401,15 @@
           Si esta política no se establece o se establece en "False", las demoras de administración de energía y el límite de duración de la sesión se ejecutan tan pronto como comienza la sesión.</translation>
 <translation id="3478024346823118645">Eliminar los datos del usuario al salir</translation>
 <translation id="3480961938508521469">Cargar la batería por completo a un ritmo normal</translation>
+<translation id="3483729306380590354">Establece el porcentaje del nivel de la batería en el que debe comenzar la carga.
+
+          La batería comienza a cargarse cuando se agota el nivel personalizado para el comienzo de la carga.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> debe estar al menos cinco puntos porcentuales por debajo de <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Se usa esta política únicamente si se establece <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> como <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Si no se configura o no se establece esta política, se aplicará el modo de carga <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> para la batería.</translation>
 <translation id="348495353354674884">Habilitar el teclado virtual</translation>
 <translation id="3487623755010328395">
         Si se establece esta política, <ph name="PRODUCT_NAME" /> intentará registrarse y aplicar la política de nube asociada para todos los perfiles.
@@ -1835,6 +1852,15 @@
           Si estableces esta política, los usuarios no podrán cambiarla ni anularla.
 
           Si no la estableces, el clic automático estará inicialmente inhabilitado, pero el usuario podrá habilitarlo en cualquier momento.</translation>
+<translation id="4215197846797661927">Establece la configuración avanzada para el modo de carga de la batería durante el día.
+
+          Se usa esta política únicamente si se establece <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> como verdadero.
+
+          Si no se configura o no se establece, el modo avanzado de carga de la batería estará siempre inhabilitado.
+
+          Nota: <ph name="CHARGE_START_TIME_FIELD_NAME" /> debe ser menor que <ph name="CHARGE_END_TIME_FIELD_NAME" />.
+
+          Nota: Los valores permitidos para el campo <ph name="MINUTE_FIELD_NAME" /> en <ph name="CHARGE_START_TIME_FIELD_NAME" /> y <ph name="CHARGE_END_TIME_FIELD_NAME" /> son 0, 15, 30, 45.</translation>
 <translation id="4224610387358583899">Demoras de bloqueo de pantalla</translation>
 <translation id="423797045246308574">Te permite configurar una lista de patrones de URL que especifican los sitios a los que no se les permite utilizar la generación de claves. Si un patrón de URL tiene configurada la política "KeygenAllowedForUrls", esta anula estas excepciones.
 
@@ -1900,6 +1926,17 @@
           El valor de la política deberá especificarse en milisegundos. Los valores deben ser menores o iguales que la demora por inactividad.
 
           Solo se muestra el mensaje de advertencia si la acción de inactividad es salir de la cuenta o apagar el dispositivo.</translation>
+<translation id="4342827592971649626">Esta política controla el análisis detallado de las descargas del usuario con Navegación segura. Si no se configura o se le asigna el valor predeterminado "No analizar archivos", Navegación segura no analizará las descargas del usuario.
+
+      Si se le asigna el valor "Prohibir el análisis de archivos", los usuarios no podrán analizar las descargas. El valor predeterminado permite que algunos usuarios (p. ej., los de la Protección avanzada) analicen sus descargas. Por el contrario, esta configuración impedirá que estos usuarios realicen el análisis.
+
+      Si se establece el valor "Analizar las descargas del usuario", se enviarán las descargas de los usuarios a través de la red a Navegación segura para analizar la presencia de software malicioso.
+
+      Si se establece el valor "Analizar las cargas del usuario", se enviarán las cargas de los usuarios a través de la red a Navegación segura para analizar la presencia de software malicioso.
+
+      Si se le asigna el valor "Analizar las cargas y descargas del usuario", se comportará conforme a las reglas que se describen en "Analizar las descargas del usuario" y "Analizar las cargas del usuario".
+
+      Consulta las políticas <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> y <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> para obtener información sobre la forma en que el usuario y el administrador ven los resultados del análisis.</translation>
 <translation id="4344356660952451291">Lista de dominios en los que se comprobará el cumplimiento de las normas del contenido descargado</translation>
 <translation id="4346674324214534449">Te permite establecer si se bloquearán los anuncios en sitios con anuncios intrusivos.
 
@@ -2449,6 +2486,16 @@
       Si configuras esta política, los usuarios no podrán modificarla ni anularla.
 
       Si no se configura esta política, los usuarios podrán elegir la imagen del fondo de pantalla del escritorio y de la pantalla de acceso.</translation>
+<translation id="5437214086679373363">Controla si se permite a los usuarios cargar o descargar archivos protegidos con contraseña cuando sea necesario analizarlos.  Esta restricción solo se aplica a los archivos que deban analizarse conforme a lo determinado en <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> y las políticas que controlan la lista de dominios en los que se hayan habilitado las comprobaciones.
+
+      Si se configura esta política como "Ninguno", <ph name="PRODUCT_NAME" /> evitará que el usuario cargue o descargue archivos protegidos por contraseña.
+
+      Si se le asigna el valor "Permitir descargas", <ph name="PRODUCT_NAME" /> permitirá que el usuario descargue archivos protegidos con contraseña.
+
+      Si se le asigna el valor "Permitir cargas", <ph name="PRODUCT_NAME" /> permitirá que el usuario cargue archivos protegidos con contraseña.
+
+      Si se le asigna el valor "Permitir cargas y descargas", <ph name="PRODUCT_NAME" /> se comportará conforme a las reglas que se describen en "Permitir descargas" y "Permitir cargas".
+      </translation>
 <translation id="5437733496511628148">Si habilitas esta configuración, se impide que se configuren cookies mediante elementos de páginas web que no son del dominio y que se encuentran en la barra de direcciones del navegador.
 
       Si inhabilitas esta configuración, las cookies pueden configurarse mediante elementos de páginas web que no son del dominio y que se encuentran en la barra de direcciones del navegador. Además, el usuario no podrá cambiar esta configuración.
@@ -3348,13 +3395,32 @@
 
       Para obtener más información sobre la política <ph name="IEEM_SITELIST_POLICY" /> de Internet Explorer, consulta: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
 <translation id="7132877481099023201">Las URL que recibirán acceso a dispositivos de captura de video sin solicitarlo</translation>
+<translation id="713712866686796666">Establece la configuración diurna para el cambio de pico de consumo de energía.
+
+          Se usa esta política únicamente si se establece <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> como verdadero.
+
+          Si no se configura o no se establece esta política, el cambio de pico de consumo de energía estará siempre inhabilitado.
+
+          Nota: Los valores permitidos para el campo <ph name="MINUTE_FIELD_NAME" /> en <ph name="START_TIME_FIELD_NAME" />, <ph name="END_TIME_FIELD_NAME" /> y <ph name="CHARGE_START_TIME_FIELD_NAME" /> son 0, 15, 30, 45.</translation>
 <translation id="7138678301420049075">Otros</translation>
+<translation id="7139809614375682935">Establece el porcentaje del nivel de la batería en el que se debe detener la carga.
+
+          Cuando se alcance este valor, se detendrá la carga de la batería.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> debe estar al menos cinco puntos porcentuales por debajo de <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Se usa esta política únicamente si se establece <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> como <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Si no se configura o no se establece esta política, se aplicará el modo de carga <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> para la batería.</translation>
 <translation id="7140629953254369759">Indica a <ph name="PRODUCT_OS_NAME" /> que use la configuración del programador de tareas identificada con el nombre indicado.
 
       Esta política se puede configurar con los valores "conservador" y "rendimiento" para darle prioridad a la estabilidad o el máximo rendimiento del programador de tareas respectivamente.
 
       Si la política no se configura, el usuario puede tomar su propia decisión.</translation>
 <translation id="7145335384492396213">Modo de impresión con PIN predeterminado</translation>
+<translation id="7149042336307555519"> Esta política controla los tipos de conexiones permitidos en las actualizaciones del SO. Es posible que el tamaño de las actualizaciones del SO sobrecargue la conexión, lo que podría generar costos adicionales para el usuario. Por lo tanto, no están habilitadas de forma predeterminada en conexiones que se consideren costosas (actualmente, solo "cellular").
+
+      Los identificadores de tipos de conexión son <ph name="CONNECTION_TYPE_ETHERNET_NAME" />, <ph name="CONNECTION_TYPE_WIFI_NAME" /> y <ph name="CONNECTION_TYPE_CELLULAR_NAME" />.</translation>
 <translation id="7152605873936173525">Controla el modo del agente de resolución de DNS sobre HTTPS. Ten en cuenta que esta política solo establecerá el modo predeterminado para cada consulta. Se puede anular el modo en tipos de solicitudes especiales, como las que se usan para resolver el nombre de host de un servidor con el protocolo DNS sobre HTTPS.
 
       El modo <ph name="SECURE_DNS_MODE_OFF" /> inhabilitará DNS sobre HTTPS.
@@ -3387,6 +3453,17 @@
           Si se establece esta política como falsa, las solicitudes de bloqueos de activación pantalla se considerarán como del sistema.</translation>
 <translation id="7177857088692019405">Desbloqueo rápido</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
+<translation id="7187447094921703950">Habilita la política de administración energética para el cambio de pico de consumo de energía.
+
+          El cambio de pico es una política destinada a ahorrar energía que minimiza el uso de corriente alterna en los picos de consumo de energía durante el día. Se puede establecer una hora de comienzo y finalización para ejecutar el modo de cambio de pico de consumo de energía en cada día de la semana. En estos períodos, el sistema utilizará la energía de la batería, incluso si está conectada la corriente alterna, siempre que la batería se encuentre por encima del umbral especificado. Después del tiempo de finalización especificado, el sistema funcionará mediante corriente alterna (en caso de estar conectado), pero no cargará la batería. El sistema volverá a funcionar con normalidad a través de corriente alterna y cargará la batería después del tiempo de inicio de carga especificado.
+
+          Si se establece esta política como verdadera y se establecen <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_NAME" /> y <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_NAME" />, el cambio de pico de consumo de energía estará siempre habilitado (cuando el dispositivo admita esta función).
+
+          Si se establece como falsa, el cambio de pico de consumo de energía estará siempre inhabilitado.
+
+          Si estableces esta política, los usuarios no podrán cambiarla ni anularla.
+
+          Si no se establece, se inhabilitará el cambio de pico de consumo de energía desde un principio, y el usuario no podrá habilitarla.</translation>
 <translation id="718956142899066210">Tipos de conexión permitidos para realizar actualizaciones</translation>
 <translation id="7190286937411178540">Habilita la función de accesibilidad para destacar el cursor del teclado</translation>
 <translation id="7194407337890404814">Nombre del proveedor de búsqueda predeterminado</translation>
@@ -4021,6 +4098,17 @@
 
           Si no se establece esta política, se habilitará la configuración.</translation>
 <translation id="8382184662529825177">Habilita el uso de la atestación remota para la protección de contenido del dispositivo.</translation>
+<translation id="8382693763260501307">Habilita la política para administrar la energía en el modo avanzado de carga de la batería.
+
+          El modo avanzado de carga permite que el usuario optimice el estado de la batería. En el modo avanzado de carga, el sistema usará un algoritmo estándar de carga y otras técnicas durante las horas en que no se utilice el dispositivo para optimizar el estado de la batería. Durante las horas de funcionamiento, se usará una carga rápida. La carga rápida permite que la batería se cargue más rápido; por lo tanto, se completará antes. Para cada día, se especifica el período en que el sistema tendrá más actividad mediante la hora de inicio y la duración.
+
+          Si se establece esta política como verdadera y se configura <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_NAME" />, siempre estará habilitado el modo avanzado de carga de la batería (cuando lo admita el dispositivo).
+
+          Si se establece como falsa, el modo avanzado de carga de la batería estará siempre inhabilitado.
+
+          Si estableces esta política, los usuarios no podrán cambiarla ni anularla.
+
+          Si no se establece, se inhabilitará el modo avanzado de carga de la batería, y el usuario no podrá habilitarlo.</translation>
 <translation id="838870586332499308">Activar la itinerancia de datos</translation>
 <translation id="8390049129576938611">Inhabilita la app interna para ver archivos PDF <ph name="PRODUCT_NAME" />. Los considera archivos de descarga y le permite al usuario abrirlos con la aplicación predeterminada.
 
@@ -4229,9 +4317,15 @@
       Si se configura esta política, el usuario no podrá cambiar el conjunto de apps.
 
       Si no se configura, el usuario podrá cambiar la lista de apps fijas en el Selector.</translation>
+<translation id="8779504970846195767">Establece en porcentaje el umbral de la batería para el cambio de pico de consumo de energía.
+
+          Se usa esta política únicamente si se establece <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> como verdadero.
+
+          Si no se configura o no se establece esta política, el cambio de pico de consumo de energía estará siempre inhabilitado.</translation>
 <translation id="8798099450830957504">Predeterminado</translation>
 <translation id="8800453707696044281">Establecer el porcentaje del nivel de la batería en el que se debe detener la carga</translation>
 <translation id="8801680448782904838">Notificar a un usuario que se recomienda o es obligatorio reiniciar el navegador o el dispositivo</translation>
+<translation id="8802816494059596691">Los nombres de host que se especifican en esta lista no se incluirán en la revisión de la política de HSTS que podría mejorar las solicitudes de http a https. En esta política, solo se permiten nombres de host con una sola etiqueta. Los nombres de host deben estar canonicalizados: debe convertirse cualquier IDN a su formato de etiqueta A y deben estar en minúscula todas las letras en formato ASCII. Esta política solo se aplica a los nombres de host específicos de la lista; no se aplica a los subdominios de estos nombres.</translation>
 <translation id="8818173863808665831">Informa la ubicación geográfica del dispositivo.
 
      Si no se configura la política, ni se establece como falsa, no se informará la ubicación.</translation>
@@ -4392,6 +4486,17 @@
       Si se establece el valor de esta política en un token que se mapee a una versión de corrección rápida, se actualizará el dispositivo a la versión de corrección rápida correspondiente en caso de que otra política no haya bloqueado la actualización.
 
       Si no se establece esta política, o su valor no se mapea a una versión de corrección rápida, no se actualizará el dispositivo a una versión de corrección rápida. Si el dispositivo ya está ejecutando una versión de corrección rápida y la política dejó de establecerse, o su valor ya no se mapea a una versión de corrección rápida, el dispositivo se actualizará a una versión convencional en caso de que otra política no haya bloqueado la actualización.</translation>
+<translation id="9053158112041032237">Especifica la política para administrar la energía en el modo avanzado de carga de la batería.
+
+          Controla de forma dinámica la carga de la batería para reducir su desgaste debido al uso y aumentar su duración.
+
+          Si se selecciona el modo personalizado de carga de la batería, deben especificarse las políticas <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> y <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Si se establece esta política, se aplicará el modo de carga de la batería (cuando lo admita el dispositivo).
+
+          Si no se establece esta política (y el dispositivo no la admite), se aplicará el modo estándar de carga de la batería, y el usuario no podrá cambiarlo.
+
+          Nota: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> anula esta política si se especifica la política anterior.</translation>
 <translation id="9054012305936267950">Esta política controla el comportamiento de acceso en el navegador. Te permite especificar si el usuario puede acceder a <ph name="PRODUCT_NAME" /> con su cuenta y usar los servicios relacionados, como la "Sincronización de Chrome".
 
       Si la política se establece como "Inhabilitar el acceso en el navegador", el usuario no podrá acceder a su cuenta en el navegador ni podrá usar los servicios basados en la cuenta. En este caso, las funciones al nivel del navegador (como la "Sincronización de Chrome") no se podrán usar ni estarán disponibles. Si el usuario accedió a su cuenta y la política se establece como "Inhabilitada", saldrá de su cuenta la próxima vez que ejecute Chrome, pero se conservarán sus datos de perfil locales (como los favoritos, las contraseñas, etc.). El usuario podrá acceder a servicios web de Google, como Gmail, y usarlos.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index a546bd5..4740f27d3 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -96,6 +96,7 @@
       Si no se asigna ningún valor a esta política, los GPO almacenados en la memoria caché pueden reutilizarse durante un periodo máximo de 25 horas.
 
       Si se le asigna el valor 0, se inhabilita el almacenamiento en caché de los GPO. Ten en cuenta que esto incrementa la carga de trabajo del servidor, ya que los GPO deberán descargarse cada vez que se recuperen datos de políticas, aunque no se hayan modificado.</translation>
+<translation id="1111470455889178048">Enviar subidas y descargas de usuario para analizarlas</translation>
 <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> omitirá cualquier proxy que se incluya en la lista de hosts especificada.
 
           Esta política solo tendrá validez si has seleccionado una configuración manual del proxy en la opción Seleccionar la forma de especificar la configuración del servidor proxy y si no se ha especificado la política <ph name="PROXY_SETTINGS_POLICY_NAME" />.
@@ -394,6 +395,7 @@
       permitidos.</translation>
 <translation id="1634989431648355062">Permitir el complemento <ph name="FLASH_PLUGIN_NAME" /> en estos sitios web</translation>
 <translation id="1645793986494086629">Esquema:</translation>
+<translation id="1648816843164517573">Lista de nombres que omitirán la comprobación de la política de HSTS</translation>
 <translation id="1653229475925941921">Si se asigna un valor a esta política, permite controlar el tipo de lupa que se habilita. Si se le asigna el valor "None", se inhabilitará la lupa.
 
           Si asignas un valor a esta política, los usuarios no podrán cambiarla ni anularla.
@@ -900,6 +902,7 @@
 <translation id="254653220329944566">Activa los informes en la nube de <ph name="PRODUCT_NAME" /></translation>
 <translation id="2548572254685798999">Recoger información sobre Navegación Segura</translation>
 <translation id="2550593661567988768">Solo impresión por una cara</translation>
+<translation id="2551520365302988324">Enviar subidas de usuario para analizarlas</translation>
 <translation id="2552966063069741410">Zona horaria</translation>
 <translation id="2562339630163277285">Especifica la URL del motor de búsqueda utilizada para proporcionar resultados instantáneos. La URL debe contener la cadena <ph name="SEARCH_TERM_MARKER" />, que se sustituirá en el momento de la consulta por el texto que el usuario haya introducido hasta el momento.
 
@@ -983,6 +986,7 @@
           Esta política es opcional. Si no se establece se usará el valor predeterminado, es decir, UTF-8.
 
           Para que se aplique esta política, se debe habilitar la política DefaultSearchProviderEnabled.</translation>
+<translation id="2679827548357140943">Lista de dominios en los que deberá comprobarse que el contenido subido no contiene software malicioso</translation>
 <translation id="268577405881275241">Habilitar la función del proxy de compresión de datos</translation>
 <translation id="2693108589792503178">Configura la URL de cambio de contraseñas.</translation>
 <translation id="2694143893026486692">Lupa fijada habilitada</translation>
@@ -1360,6 +1364,10 @@
 <translation id="332771718998993005">Determina el nombre que se utiliza como destino de <ph name="PRODUCT_NAME" />.
 
           Si se asigna una cadena que no esté vacía a esta política, esa cadena se utilizará como nombre del destino de <ph name="PRODUCT_NAME" />. De lo contrario, el nombre del destino será el nombre del dispositivo. Si esta política no se establece, el nombre del destino será el nombre del dispositivo y su propietario (o un usuario del dominio que gestiona el dispositivo) podrá cambiarlo. El nombre tiene un límite de 24 caracteres.</translation>
+<translation id="3331950121151548952">Indica la lista de dominios en los que deberá comprobarse que el contenido subido no contiene software malicioso.  Esta política solo se utilizará si se le asigna a la política <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> un valor que permita o implemente obligatoriamente las comprobaciones de software malicioso en el contenido subido.
+
+      Si no se habilita esta política o se define con una lista vacía de dominios, no se comprobará si el contenido subido contiene software malicioso.
+      </translation>
 <translation id="3335468714959531450">Permite definir una lista de patrones de URL para especificar los sitios web que pueden establecer cookies.
 
           Si no se le asigna ningún valor a esta política, se usará para todos los sitios web el valor general predeterminado de la política "DefaultCookiesSetting" (si se ha establecido) o el valor personalizado que haya definido el usuario (en caso contrario).
@@ -1429,6 +1437,15 @@
           Si esta política se establece en false o no se establece, los retrasos de administración de energía y el límite de duración de sesión se ejecutarán inmediatamente al iniciar la sesión.</translation>
 <translation id="3478024346823118645">Borrar los datos del usuario al cerrar sesión</translation>
 <translation id="3480961938508521469">Carga totalmente la batería a velocidad estándar.</translation>
+<translation id="3483729306380590354">Establece un porcentaje personalizado de inicio de carga de la batería.
+
+          La batería empezará a cargarse cuando alcance el valor personalizado de inicio de carga.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> debe tener un valor al menos cinco puntos porcentuales inferior al de <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Esta política solo se utilizará si se le asigna el valor <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" /> a <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" />.
+
+          Si no se configura esta política o no se le asigna ningún valor, se aplicará el modo <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> de carga de la batería.</translation>
 <translation id="348495353354674884">Habilitar teclado virtual</translation>
 <translation id="3487623755010328395">Si se habilita la política, <ph name="PRODUCT_NAME" /> intentará registrarse y aplicar la política relativa a la nube asociada a todos los perfiles.
 
@@ -1876,6 +1893,15 @@
           Si se asigna un valor a esta política, los usuarios no podrán cambiarla ni anularla.
 
           Si no le asignas ningún valor, el clic automático se inhabilitará al inicio, pero los usuarios podrán habilitarlo en cualquier momento.</translation>
+<translation id="4215197846797661927">Define la configuración diaria del modo avanzado de carga de la batería.
+
+          Esta política solo se utilizará si se le asigna el valor true a la política <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" />.
+
+          Si no se configura esta política o no se le asigna ningún valor, el modo avanzado de carga de la batería siempre estará inhabilitado.
+
+          Nota: <ph name="CHARGE_START_TIME_FIELD_NAME" /> debe ser inferior a <ph name="CHARGE_END_TIME_FIELD_NAME" />.
+
+          Nota: Los valores permitidos para el campo <ph name="MINUTE_FIELD_NAME" /> en <ph name="CHARGE_START_TIME_FIELD_NAME" /> y<ph name="CHARGE_END_TIME_FIELD_NAME" /> son 0, 15, 30 y 45.</translation>
 <translation id="4224610387358583899">Retrasos de bloqueo de pantalla</translation>
 <translation id="423797045246308574">Te permite establecer una lista de patrones de URL para especificar los sitios web que no pueden utilizar la generación de claves. Si un patrón de URL está en KeygenAllowedForUrls, se anularán estas excepciones.
 
@@ -1943,6 +1969,17 @@
           El valor de esta política debe especificarse en milisegundos. Los valores deben ser inferiores o iguales al retraso de inactividad.
 
           El mensaje de advertencia solo se muestra si el modo de inactividad cierra la sesión o apaga el equipo.</translation>
+<translation id="4342827592971649626">Esta política controla el análisis profundo de las descargas de usuario con Navegación Segura. Si no se le asigna ningún valor o se selecciona el valor predeterminado "No analizar archivos", las descargas de usuario no se analizarán con Navegación Segura.
+
+      Si se selecciona "Prohibir el análisis de archivos", los usuarios no podrán analizar sus descargas. Este valor es distinto del predeterminado, ya que algunos usuarios, como los de Protección Avanzada, podrán enviar sus descargas para analizarlas si se asigna el valor predeterminado a esta política. Este ajuste impedirá que esos usuarios puedan analizar sus archivos.
+
+      Si se le selecciona "Enviar descargas de usuario para analizarlas", las descargas de usuario se enviarán a Navegación Segura a través de la red para realizar un análisis de software malicioso.
+
+      Si se selecciona "Enviar subidas de usuario para analizarlas", las subidas de usuario se enviarán a Navegación Segura a través de la red para realizar un análisis de software malicioso.
+
+      Si se selecciona "Enviar subidas y descargas de usuario para analizarlas", seguirá las reglas descritas en los valores "Enviar subidas de usuario para analizarlas" y "Enviar descargas de usuario para analizarlas".
+
+      Consulta las políticas <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> y <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> para obtener más información sobre cómo se muestran los resultados del análisis al usuario y al administrador.</translation>
 <translation id="4344356660952451291">Lista de dominios en los que se comprobará el cumplimiento de las normas del contenido descargado.</translation>
 <translation id="4346674324214534449">Te permite decidir si se deberían bloquear los anuncios en los sitios web con anuncios invasivos.
 
@@ -2536,6 +2573,16 @@
       Si se asigna un valor a esta política, los usuarios no podrán cambiarlo ni anularlo.
 
       Si no se le asigna ninguno, los usuarios podrán elegir la imagen que se mostrará en el escritorio y en la pantalla de inicio de sesión.</translation>
+<translation id="5437214086679373363">Controla si se permite a los usuarios subir o descargar archivos protegidos con contraseña cuando sea necesario realizar un análisis de los ficheros.  Esta restricción solo se aplica a los archivos que deban analizarse según se establezca en las políticas <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> y en las políticas que controlan la lista de dominios en los que se hayan habilitado las comprobaciones.
+
+      Si se selecciona "Ninguno" en esta política, <ph name="PRODUCT_NAME" /> impide que el usuario suba o descargue archivos protegidos con contraseña.
+
+      Si se selecciona "Permitir descargas", <ph name="PRODUCT_NAME" /> permitirá al usuario la descarga de archivos protegidos con contraseña.
+
+      Si se selecciona "Permitir subidas", <ph name="PRODUCT_NAME" /> permitirá al usuario la subida de archivos protegidos con contraseña.
+
+      Si no se le asigna ningún valor a esta política o se selecciona "Permitir subidas y descargas", <ph name="PRODUCT_NAME" /> seguirá las reglas descritas en los valores "Permitir descargas" y "Permitir subidas".
+      </translation>
 <translation id="5437733496511628148">Si se habilita esta opción, no se podrán establecer cookies mediante elementos de página web que no pertenezcan al dominio que aparece en la barra de direcciones del navegador.
 
       Si se inhabilita esta opción, se podrán establecer cookies mediante elementos de página web que no pertenezcan al dominio que aparece en la barra de direcciones del navegador, y los usuarios no podrán modificar esta opción.
@@ -3458,13 +3505,32 @@
 
       Para obtener más información sobre la política <ph name="IEEM_SITELIST_POLICY" /> de Internet Explorer, consulta esta página web: https://docs.microsoft.com/es-es/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
 <translation id="7132877481099023201">URLs a las que se concederá acceso a dispositivos de captura de vídeo sin confirmación</translation>
+<translation id="713712866686796666">Define la configuración diaria de Peak Shift.
+
+          Esta política solo se utilizará si se le asigna el valor true a la política <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" />.
+
+          Si no se configura esta política o no se le asigna ningún valor, Peak Shift siempre estará inhabilitado.
+
+          Nota: Los valores permitidos para el campo <ph name="MINUTE_FIELD_NAME" /> en <ph name="START_TIME_FIELD_NAME" />, <ph name="END_TIME_FIELD_NAME" /> y <ph name="CHARGE_START_TIME_FIELD_NAME" /> son 0, 15, 30 y 45.</translation>
 <translation id="7138678301420049075">Otro</translation>
+<translation id="7139809614375682935">Establece un porcentaje personalizado de parada de carga para la batería.
+
+          La batería dejará de cargarse cuando alcance el valor personalizado de parada de carga.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> debe tener un valor al menos cinco puntos porcentuales inferior al de <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Esta política solo se utilizará si se le asigna el valor <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" /> a <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" />.
+
+          Si no se configura esta política o no se le asigna ningún valor, se aplicará el modo <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> de carga de la batería.</translation>
 <translation id="7140629953254369759">Indica a <ph name="PRODUCT_OS_NAME" /> que utilice la configuración del programador de tareas identificada por el nombre especificado.
 
       A esta política se le puede asignar el valor "Conservative" o "Performance", que selecciona las configuraciones del programador de tareas que están ajustadas para ofrecer estabilidad o rendimiento máximo, respectivamente.
 
       Si no se asigna ningún valor a esta política, el usuario podrá elegirlo.</translation>
 <translation id="7145335384492396213">Modo predeterminado de impresión con PIN</translation>
+<translation id="7149042336307555519"> Indica los tipos de conexiones que se pueden utilizar para actualizar el sistema operativo. Estas actualizaciones pueden constituir un lastre para la conexión debido a su tamaño y pueden suponer costes adicionales. Por tanto, están inhabilitadas de forma predeterminada en los tipos de conexión que se consideran más costosos (actualmente, solo las redes móviles).
+
+      Los identificadores de tipos de conexión reconocidos son <ph name="CONNECTION_TYPE_ETHERNET_NAME" />, <ph name="CONNECTION_TYPE_WIFI_NAME" /> y <ph name="CONNECTION_TYPE_CELLULAR_NAME" />.</translation>
 <translation id="7152605873936173525">Controla el modo de resolución de DNS sobre HTTPS. Ten en cuenta que esta política solo definirá el modo predeterminado de cada solicitud. El modo se puede anular en tipos de solicitudes especiales, como las que se usan para resolver el nombre de host de un servidor con el protocolo DNS sobre HTTPS.
 
       El modo <ph name="SECURE_DNS_MODE_OFF" /> inhabilitará DNS sobre HTTPS.
@@ -3496,6 +3562,17 @@
           Si se le asigna el valor "False" a esta política, se disminuirá el nivel de las solicitudes de wake locks de pantalla y se convertirán en solicitudes de wake locks del sistema.</translation>
 <translation id="7177857088692019405">Desbloqueo rápido</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
+<translation id="7187447094921703950">Habilita la política de gestión de energía Peak Shift.
+
+          Peak Shift es una política de ahorro de energía que minimiza el uso de corriente alterna durante las horas de mayor uso de energía del día. Para ejecutar el modo de energía Peak Shift, se puede configurar una hora de inicio y de finalización para cada día de la semana. Durante ese tiempo, el sistema funcionará con la batería, incluso si la corriente alterna funciona, siempre que la batería se mantenga por encima del umbral especificado. Después del tiempo especificado, el sistema funcionará con corriente alterna, pero no cargará la batería. El sistema volverá a funcionar con normalidad usando la corriente alterna y cargando la batería después de la hora de inicio de carga especificada.
+
+          Si a esta política se le asigna el valor true y las políticas <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_NAME" /> y <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_NAME" /> están configuradas, Peak Shift siempre estará habilitado si el dispositivo lo permite.
+
+          Si se le asigna el valor false a esta política, Peak Shift siempre estará inhabilitado.
+
+          Además, los usuarios no podrán cambiarla ni anularla.
+
+          Si no le asignas ningún valor, Peak Shift estará inhabilitado inicialmente y el usuario no podrá habilitarlo.</translation>
 <translation id="718956142899066210">Tipos de conexión permitidos para realizar actualizaciones</translation>
 <translation id="7190286937411178540">Habilita la función de accesibilidad de elementos destacados</translation>
 <translation id="7194407337890404814">Nombre del proveedor de búsquedas predeterminadas</translation>
@@ -4133,6 +4210,17 @@
 
           Si no se asigna ningún valor a esta política, se habilitará la opción.</translation>
 <translation id="8382184662529825177">Habilitar el uso de la confirmación remota para la protección del contenido del dispositivo</translation>
+<translation id="8382693763260501307">Habilita la política de gestión del modo avanzado de carga de la batería.
+
+          El modo avanzado de carga de la batería permite que el usuario maximice el estado de la batería. Cuando el sistema esté en modo de Carga avanzada, usará un algoritmo de carga estándar y otras técnicas fuera del horario laboral para mejorar el estado de la batería. En horas de trabajo, se usará la carga exprés. La carga exprés permite que la batería se cargue rápidamente, por tanto, la batería tardará menos tiempo en cargarse completamente. El periodo de tiempo en el que el sistema se usa de manera más frecuente se especifica para cada día mediante la hora de inicio y la duración.
+
+          Si se asigna el valor true a esta política y <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_NAME" /> está configurada, el modo avanzado de carga de la batería siempre estará habilitado si el dispositivo lo admite.
+
+          Si se le asigna el valor false, el modo avanzado de carga de la batería siempre estará inhabilitado.
+
+          Además, los usuarios no podrán cambiarla ni anularla.
+
+          Si no se le asigna ningún valor, el modo avanzado de carga de la batería está inhabilitado y el usuario no podrá habilitarlo.</translation>
 <translation id="838870586332499308">Habilitar la itinerancia de datos</translation>
 <translation id="8390049129576938611">Inhabilita el visor de PDF interno en <ph name="PRODUCT_NAME" />. En su lugar, trata el archivo PDF como una descarga y permite al usuario abrir archivos PDF con la aplicación predeterminada.
 
@@ -4331,9 +4419,15 @@
       Si se configura esta política, el conjunto de aplicaciones es fijo y el usuario no podrá cambiarlo.
 
       Si no se configura, el usuario podrá cambiar la lista de aplicaciones fijadas en el menú de aplicaciones.</translation>
+<translation id="8779504970846195767">Establece el umbral del ahorro de batería de Peak Shift en forma de porcentaje.
+
+          Esta política solo se utilizará si se le asigna el valor true a la política <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" />.
+
+          Si no se configura esta política o no se le asigna ningún valor, Peak Shift siempre estará inhabilitado.</translation>
 <translation id="8798099450830957504">Predeterminado</translation>
 <translation id="8800453707696044281">Define un porcentaje personalizado de la parada de carga de la batería</translation>
 <translation id="8801680448782904838">Informar al usuario de que es necesario o recomendable reiniciar el navegador o el dispositivo</translation>
+<translation id="8802816494059596691">Los nombres de host que se especifican en esta lista quedarán exentos de la comprobación de la política de HSTS, que podría actualizar las solicitudes de http a https. Esta política solo admite nombres de host de una sola etiqueta. Los nombres de host deben seguir el canon de formato: cada IDN debe codificarse en su formato de etiqueta A y todas las letras ASCII deben ser minúsculas. Esta política solo se aplica a los nombres de host que se especifican en esta lista; no se aplica a sus subdominios.</translation>
 <translation id="8818173863808665831">Informa de la ubicación geográfica del dispositivo.
 
      Si no se establece esta política o se establece el valor "false", no se informará de la ubicación.</translation>
@@ -4495,6 +4589,17 @@
       Si el valor de la política se establece en un token que se asocia a una versión Quick Fix, el dispositivo se actualizará a la versión Quick Fix correspondiente, a no ser que otra política bloquee la actualización.
 
       Si no se le asigna ningún valor a la política, o su valor no se asocia a ninguna versión Quick Fix, el dispositivo no se actualizará a ninguna versión Quick Fix. Si el dispositivo utiliza una versión Quick Fix y la política no está configurada o su valor no se asocia a una versión Quick Fix, el dispositivo se actualizará a una versión normal, a no ser que otra política bloquee la actualización.</translation>
+<translation id="9053158112041032237">Especifica la política de gestión del modo de carga de la batería.
+
+          Controla dinámicamente la carga de la batería para reducir su desgaste a causa de estrés y para prolongar su duración.
+
+          Si se ha seleccionado el modo personalizado de carga de la batería, se debe especificar un valor para <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> y <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Si se configura esta política, se aplicará el modo de carga de la batería si el dispositivo lo admite.
+
+          Si no se le asigna ningún valor y el dispositivo admite esta política, se aplicará el modo estándar de carga de la batería y el usuario no podrá cambiarlo.
+
+          Nota: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> anula esta política si se especifica la anterior.</translation>
 <translation id="9054012305936267950">Esta política controla el comportamiento del navegador cuando se inicia sesión. Permite definir si los usuarios pueden iniciar sesión en <ph name="PRODUCT_NAME" /> con su cuenta y usar los servicios asociados a esta, como la función Sincronización de Chrome.
 
       Si se asigna el valor "Inhabilitar inicio de sesión en el navegador" a esta política, el usuario no podrá iniciar sesión en el navegador ni usar los servicios asociados a la cuenta. Además, las funciones del navegador, como Sincronización de Chrome, no se podrán usar ni estarán disponibles. Si el usuario había iniciado sesión y se establece el valor "Inhabilitar inicio de sesión en el navegador" para esta política, la próxima vez que ejecute Chrome se cerrará la sesión, pero se conservarán los datos de su perfil local, como los marcadores o las contraseñas. No obstante, podrá iniciar sesión y usar servicios web de Google como Gmail.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 759bae7..8b1d20ae 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -84,6 +84,7 @@
       Jika kebijakan ini tidak disetel, GPO yang disimpan dalam cache dapat digunakan kembali selama maksimal 25 jam.
 
       Jika kebijakan ini disetel ke 0, menyimpan GPO ke cache akan dinonaktifkan. Perlu diketahui bahwa ini akan meningkatkan beban server karena GPO akan didownload ulang pada setiap pengambilan kebijakan, walaupun GPO tidak berubah.</translation>
+<translation id="1111470455889178048">Kirim upload dan download pengguna untuk pemindaian</translation>
 <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> akan mengabaikan proxy apa pun untuk daftar host yang diberikan di sini.
 
           Kebijakan ini hanya berpengaruh jika Anda telah memilih setelan proxy manual pada 'Pilih cara menentukan setelan server proxy' dan jika kebijakan <ph name="PROXY_SETTINGS_POLICY_NAME" /> tidak ditentukan.
@@ -383,6 +384,7 @@
       tidak diizinkan.</translation>
 <translation id="1634989431648355062">Izinkan plugin <ph name="FLASH_PLUGIN_NAME" /> di situs ini</translation>
 <translation id="1645793986494086629">Skema:</translation>
+<translation id="1648816843164517573">Daftar nama yang akan melewati pemeriksaan kebijakan HSTS</translation>
 <translation id="1653229475925941921">Jika ditetapkan, kebijakan ini akan mengontrol jenis kaca pembesar layar yang diaktifkan. Jika ditetapkan ke "None", kebijakan ini akan menonaktifkan kaca pembesar layar.
 
           Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
@@ -870,6 +872,7 @@
 <translation id="254653220329944566">Mengaktifkan pelaporan cloud <ph name="PRODUCT_NAME" /></translation>
 <translation id="2548572254685798999">Laporkan informasi Safe Browsing</translation>
 <translation id="2550593661567988768">Khusus pencetakan simpleks</translation>
+<translation id="2551520365302988324">Kirim upload pengguna untuk pemindaian</translation>
 <translation id="2552966063069741410">Zona Waktu</translation>
 <translation id="2562339630163277285">Menentukan URL mesin telusur yang digunakan untuk memberikan hasil instan. URL harus berisi string <ph name="SEARCH_TERM_MARKER" />, yang akan diganti pada waktu kueri dengan teks yang telah dimasukkan oleh pengguna sejauh ini.
 
@@ -946,6 +949,7 @@
 <translation id="2665422249821137126">Mengaktifkan kursor besar di layar login</translation>
 <translation id="2672012807430078509">Kontrol yang mengaktifkan NTLM sebagai protokol autentikasi untuk pemasangan SMB</translation>
 <translation id="267596348720209223">Menentukan penyandiaksaraan karakter yang didukung oleh penyedia penelusuran. Penyandiaksaraan adalah nama-nama halaman kode seperti UTF-8, GB2312, dan ISO-8859-1. Kode tersebut dicoba dalam urutan yang disediakan. Kebijakan ini bersifat opsional. Jika tidak disetel, default yang akan digunakan adalah UTF-8. Kebijakan ini hanya dipatuhi jika kebijakan 'DefaultSearchProviderEnabled' diaktifkan.</translation>
+<translation id="2679827548357140943">Daftar domain di mana konten yang diupload perlu mendapat pemeriksaan malware</translation>
 <translation id="268577405881275241">Aktifkan fitur proxy kompresi data</translation>
 <translation id="2693108589792503178">Mengonfigurasi URL ubah sandi.</translation>
 <translation id="2694143893026486692">Kaca pembesar yang dipasang ke dok diaktifkan</translation>
@@ -1318,6 +1322,10 @@
 <translation id="332771718998993005">Tentukan nama yang diiklankan sebagai tujuan <ph name="PRODUCT_NAME" />.
 
           Jika kebijakan ini disetel ke string yang tidak kosong, string tersebut akan digunakan sebagai nama tujuan <ph name="PRODUCT_NAME" />. Jika tidak, nama tujuan akan menjadi nama perangkat. Jika kebijakan ini tidak disetel, nama tujuan akan menjadi nama perangkat, dan pemilik perangkat (atau pengguna dari domain yang mengelola perangkat) akan diizinkan untuk mengubahnya. Karakter nama dibatasi hingga 24 karakter.</translation>
+<translation id="3331950121151548952">Daftar domain di mana konten yang diupload perlu mendapat pemeriksaan malware.  Kebijakan ini hanya digunakan jika <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> ditetapkan ke nilai yang mengizinkan atau menerapkan pemeriksaan malware pada file yang diupload.
+
+      Jika kebijakan ini tidak ditetapkan atau ditetapkan ke daftar domain kosong, konten yang diupload tidak ada yang mendapat pemeriksaan malware.
+      </translation>
 <translation id="3335468714959531450">Memungkinkan Anda menyetel daftar pola URL yang menentukan situs mana yang diizinkan untuk menyetel cookie.
 
           Jika kebijakan ini tidak disetel, nilai default global akan digunakan untuk semua situs yaitu dari kebijakan 'DefaultCookiesSetting' jika disetel, atau dari konfigurasi pribadi pengguna.
@@ -1387,6 +1395,15 @@
           Jika kebijakan ini disetel ke False atau dibiarkan tidak disetel, penundaan pengelolaan daya dan batas lama sesi mulai berjalan langsung saat sesi dimulai.</translation>
 <translation id="3478024346823118645">Hapus data pengguna saat keluar</translation>
 <translation id="3480961938508521469">Mengisi baterai hingga penuh pada kecepatan standar.</translation>
+<translation id="3483729306380590354">Menetapkan nilai awal pengisian daya baterai kustom dalam persen.
+
+          Baterai akan memulai pengisian daya jika sudah mencapai nilai awal pengisian daya baterai kustom.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> harus minimal lima persen di bawah <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Kebijakan ini hanya digunakan jika <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> ditetapkan ke <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Jika kebijakan ini tidak dikonfigurasi atau tidak ditetapkan, mode pengisian daya baterai standar <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> akan diterapkan.</translation>
 <translation id="348495353354674884">Aktifkan keyboard virtual</translation>
 <translation id="3487623755010328395">
         Jika kebijakan ini disetel, <ph name="PRODUCT_NAME" /> akan mencoba mendaftar dan menerapkan kebijakan cloud yang terkait untuk semua profil.
@@ -1829,6 +1846,15 @@
           Jika Anda menetapkan kebijakan ini, pengguna tidak dapat mengubah atau menggantinya.
 
           Jika kebijakan ini tidak ditetapkan, klik otomatis mula-mula akan dinonaktifkan, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation>
+<translation id="4215197846797661927">Menetapkan konfigurasi hari mode pengisian daya baterai lanjutan.
+
+          Kebijakan ini hanya digunakan jika <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> ditetapkan ke true.
+
+          Jika kebijakan ini tidak dikonfigurasi atau tidak ditetapkan, mode pengisian daya baterai lanjutan akan selalu nonaktif.
+
+          Catatan: <ph name="CHARGE_START_TIME_FIELD_NAME" /> harus lebih kecil dari <ph name="CHARGE_END_TIME_FIELD_NAME" />.
+
+          Catatan: nilai yang diizinkan untuk kolom <ph name="MINUTE_FIELD_NAME" /> di <ph name="CHARGE_START_TIME_FIELD_NAME" /> dan <ph name="CHARGE_END_TIME_FIELD_NAME" /> adalah 0, 15, 30, 45.</translation>
 <translation id="4224610387358583899">Penundaan kunci layar</translation>
 <translation id="423797045246308574">Memungkinkan Anda menyetel daftar pola URL guna menentukan situs yang diizinkan untuk menggunakan pembuatan kunci. Jika pola URL ada di dalam 'KeygenAllowedForUrls', maka kebijakan ini akan mengganti pengecualian ini.
 
@@ -1894,6 +1920,17 @@
           Nilai kebijakan harus ditentukan dalam milidetik. Nilai dikunci ke kurang dari atau sama dengan penundaan menganggur.
 
           Pesan peringatan hanya ditampilkan jika tindakan menganggurnya adalah untuk logout atau mematikan.</translation>
+<translation id="4342827592971649626">Kebijakan ini mengontrol pemindaian mendalam pada download pengguna dengan Safe Browsing. Jika tidak ditetapkan, atau ditetapkan ke default, 'Jangan pindai file', download pengguna tidak akan dipindai oleh Safe Browsing.
+
+      Jika ditetapkan ke 'Tolak pemindaian file.', pengguna akan dilarang memindai download mereka. Ini berbeda dari default, karena pengguna tertentu (misalnya pengguna Perlindungan Lanjutan) dapat mengirimkan download mereka untuk dipindai. Setelan ini akan mencegah pengguna dalam melakukan pemindaian.
+
+      Jika ditetapkan ke 'Kirim download pengguna untuk pemindaian', download pengguna akan dikirimkan melalui jaringan ke Safe Browsing untuk pemindaian malware.
+
+      Jika ditetapkan ke 'Kirim upload pengguna untuk pemindaian', upload pengguna akan dikirimkan melalui jaringan ke Safe Browsing untuk pemindaian malware.
+
+      Jika ditetapkan ke 'Kirim upload dan download pengguna untuk pemindaian', akan berperilaku sesuai aturan yang dijelaskan di 'Kirim upload pengguna untuk pemindaian' dan 'Kirim download pengguna untuk pemindaian'.
+
+      Lihat kebijakan <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> dan <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> untuk mengetahui bagaimana detail hasil pemindaian ditampilkan kepada pengguna dan admin.</translation>
 <translation id="4344356660952451291">Daftar domain yang akan digunakan untuk memeriksa kepatuhan konten yang didownload</translation>
 <translation id="4346674324214534449">Memungkinkan Anda menyetel apakah iklan harus diblokir di situs yang menayangkan iklan mengganggu.
 
@@ -2449,6 +2486,16 @@
       Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
 
       Jika kebijakan ini tidak ditetapkan, pengguna dapat memilih gambar yang akan ditampilkan di desktop dan di latar belakang layar login.</translation>
+<translation id="5437214086679373363">Mengontrol apakah pengguna akan diizinkan untuk mengupload atau mendownload file yang dilindungi sandi saat diperlukan pemindaian.  Batasan ini hanya berlaku untuk file yang akan memerlukan pemindaian seperti ditentukan oleh <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" />, dan kebijakan yang mengontrol daftar domain yang dapat diperiksa.
+
+      Jika kebijakan ini ditetapkan ke 'Tidak ada', <ph name="PRODUCT_NAME" /> akan memblokir pengguna untuk mengupload atau mendownload file yang dilindungi sandi.
+
+      Jika kebijakan ini ditetapkan ke 'Izinkan download', <ph name="PRODUCT_NAME" /> akan mengizinkan pengguna untuk mendownload file yang dilindungi sandi.
+
+      Jika kebijakan ini ditetapkan ke 'Izinkan upload', <ph name="PRODUCT_NAME" /> akan mengizinkan pengguna untuk mengupload file yang dilindungi sandi.
+
+      Jika kebijakan ini tidak ditetapkan atau ditetapkan ke 'Izinkan upload dan download', <ph name="PRODUCT_NAME" /> akan berperilaku sesuai dengan aturan yang dijelaskan di 'Izinkan download' dan 'Izinkan upload'.
+      </translation>
 <translation id="5437733496511628148">Jika setelan ini diaktifkan, elemen halaman web tidak diizinkan menyetel cookie yang tidak berasal dari domain yang tercantum di kolom URL browser.
 
       Jika setelan ini dinonaktifkan, elemen halaman diizinkan menyetel cookie yang tidak berasal dari domain yang tercantum di kolom URL browser dan pengguna tidak dapat mengubah setelan ini.
@@ -3324,13 +3371,32 @@
 
       Untuk informasi selengkapnya terkait kebijakan <ph name="IEEM_SITELIST_POLICY" /> Internet Explorer: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
 <translation id="7132877481099023201">URL yang akan diberi akses ke perangkat perekam video tanpa peringatan</translation>
+<translation id="713712866686796666">Menetapkan konfigurasi hari pergeseran puncak daya.
+
+          Kebijakan ini hanya digunakan jika <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> ditetapkan ke true.
+
+          Jika kebijakan ini tidak dikonfigurasi atau tidak ditetapkan, pergeseran puncak daya akan selalu dinonaktifkan.
+
+          Catatan: nilai yang diizinkan untuk kolom <ph name="MINUTE_FIELD_NAME" /> di <ph name="START_TIME_FIELD_NAME" />, <ph name="END_TIME_FIELD_NAME" />, dan <ph name="CHARGE_START_TIME_FIELD_NAME" /> adalah 0, 15, 30, 45.</translation>
 <translation id="7138678301420049075">Lainnya</translation>
+<translation id="7139809614375682935">Menetapkan nilai akhir pengisian daya baterai kustom dalam persen.
+
+          Baterai akan berhenti mengisi daya jika sudah mencapai nilai akhir pengisian daya baterai kustom.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> harus minimal lima persen di bawah <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Kebijakan ini hanya digunakan jika <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> ditetapkan ke <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Jika kebijakan ini tidak dikonfigurasi atau tidak ditetapkan, mode pengisian daya baterai standar <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> akan diterapkan.</translation>
 <translation id="7140629953254369759">Menginstruksikan <ph name="PRODUCT_OS_NAME" /> untuk menggunakan konfigurasi penjadwal tugas yang diidentifikasi berdasarkan nama yang ditentukan.
 
       Kebijakan ini dapat disetel ke "konservatif" dan "performa", yang akan memilih konfigurasi penjadwal tugas yang disetel untuk stabilitas vs performa maksimum.
 
       Jika kebijakan tidak disetel, pengguna akan dapat memilih sendiri.</translation>
 <translation id="7145335384492396213">Mode pencetakan PIN default</translation>
+<translation id="7149042336307555519"> Jenis sambungan yang diizinkan untuk digunakan update OS. Update OS berpotensi menyebabkan beban berat pada sambungan karena ukurannya dan mungkin menimbulkan biaya tambahan. Oleh karena itu, update tersebut akan dinonaktifkan secara default untuk jenis sambungan yang dianggap mahal (saat ini hanya "data seluler").
+
+      Pengidentifikasi jenis sambungan yang dikenal adalah <ph name="CONNECTION_TYPE_ETHERNET_NAME" />, <ph name="CONNECTION_TYPE_WIFI_NAME" />, dan <ph name="CONNECTION_TYPE_CELLULAR_NAME" />.</translation>
 <translation id="7152605873936173525">Mengontrol mode resolver DNS-over-HTTPS. Perlu diingat bahwa kebijakan ini hanya akan menetapkan mode default untuk setiap kueri. Mode tersebut mungkin digantikan untuk jenis kueri khusus seperti permintaan untuk memutuskan hostname server DNS-over-HTTPS.
 
       Mode <ph name="SECURE_DNS_MODE_OFF" /> akan menonaktifkan DNS-over-HTTPS.
@@ -3363,6 +3429,17 @@
 Jika kebijakan ini disetel ke false, permintaan penguncian layar saat aktif akan didemosikan ke permintaan penguncian layar saat aktif di sistem.</translation>
 <translation id="7177857088692019405">Membuka kunci dengan cepat</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
+<translation id="7187447094921703950">Mengaktifkan kebijakan pengelolaan pergeseran puncak daya.
+
+          Pergeseran Puncak adalah kebijakan penghematan daya yang meminimalkan penggunaan arus listrik AC selama waktu penggunaan puncak sepanjang hari itu. Untuk setiap hari kerja, waktu mulai dan berakhir bagi sistem untuk berjalan dalam mode Pergeseran Puncak daya dapat disetel. Selama waktu tersebut, sistem akan dijalankan dari baterai meskipun arus listrik AC terhubung, dengan syarat daya baterai masih berada di atas ambang batas yang ditentukan. Setelah waktu berakhir yang ditentukan, sistem akan berjalan menggunakan arus listrik AC jika terhubung tetapi tidak akan mengisi daya baterai. Sistem akan berfungsi kembali secara normal menggunakan arus listrik AC dan mengisi ulang daya baterai setelah waktu Mulai Pengisian yang ditentukan.
+
+          Jika kebijakan ini ditetapkan ke true, dan <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_NAME" />, <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_NAME" /> ditetapkan, pergeseran puncak daya akan selalu diaktifkan dengan syarat didukung di perangkat.
+
+          Jika kebijakan ini ditetapkan ke false, pergeseran puncak daya akan selalu dinonaktifkan.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, pergeseran puncak daya mula-mula dinonaktifkan dan tidak dapat diaktifkan oleh pengguna.</translation>
 <translation id="718956142899066210">Jenis sambungan yang diizinkan untuk pembaruan</translation>
 <translation id="7190286937411178540">Mengaktifkan fitur aksesibilitas penyorotan fokus keyboard</translation>
 <translation id="7194407337890404814">Nama penyedia penelusuran default</translation>
@@ -3983,6 +4060,17 @@
 
           Jika kebijakan ini tidak ditetapkan, setelan tersebut akan diaktifkan.</translation>
 <translation id="8382184662529825177">Mengaktifkan penggunaan pengesahan jarak jauh untuk perlindungan konten bagi perangkat</translation>
+<translation id="8382693763260501307">Mengaktifkan kebijakan pengelolaan daya mode pengisian daya baterai lanjutan.
+
+          Mode Pengisian Daya Baterai Lanjutan memungkinkan pengguna memaksimalkan kesehatan baterai. Dalam Mode Pengisian Daya Lanjutan, sistem akan menggunakan algoritme pengisian daya standar dan teknik lainnya selama di luar jam kerja untuk memaksimalkan kesehatan baterai. Selama jam kerja, pengisian daya ekspres digunakan. Pengisian daya ekspres ini memungkinkan baterai untuk terisi lebih cepat, sehingga baterai akan penuh lebih cepat. Waktu saat sistem akan paling banyak digunakan setiap harinya ditentukan dengan waktu mulai dan durasi.
+
+          Jika kebijakan ini ditetapkan ke true, dan <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_NAME" /> ditetapkan, mode pengisian daya baterai lanjutan akan selalu aktif dengan syarat didukung di perangkat.
+
+          Jika kebijakan ini ditetapkan ke false, mode pengisian daya baterai lanjutan akan selalu nonaktif.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, mode pengisian daya baterai lanjutan dinonaktifkan dan tidak dapat diaktifkan oleh pengguna.</translation>
 <translation id="838870586332499308">Aktifkan roaming data</translation>
 <translation id="8390049129576938611">Menonaktifkan penampil PDF internal di <ph name="PRODUCT_NAME" />. Bukan memperlakukannya sebagai download dan mengizinkan membuka file PDF menggunakan aplikasi default.
 
@@ -4175,9 +4263,15 @@
       Jika kebijakan ini dikonfigurasi, kumpulan aplikasi akan ditetapkan dan tidak dapat diubah oleh pengguna.
 
       Jika kebijakan ini tidak ditetapkan, pengguna dapat mengubah daftar aplikasi yang dipasangi pin di peluncur.</translation>
+<translation id="8779504970846195767">Menetapkan ambang batas pergeseran puncak daya baterai dalam persen.
+
+          Kebijakan ini hanya digunakan jika <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> ditetapkan ke true.
+
+          Jika kebijakan ini tidak dikonfigurasi atau tidak ditetapkan, pergeseran puncak daya akan selalu dinonaktifkan.</translation>
 <translation id="8798099450830957504">Default</translation>
 <translation id="8800453707696044281">Menetapkan nilai akhir pengisian daya baterai kustom dalam persen</translation>
 <translation id="8801680448782904838">Beri tahu pengguna bahwa meluncurkan ulang browser atau memulai ulang perangkat direkomendasikan atau diperlukan</translation>
+<translation id="8802816494059596691">Hostname yang ditentukan dalam daftar ini akan dikecualikan dari pemeriksaan kebijakan HSTS yang berpotensi mengupgrade permintaan dari http ke https. Hanya hostname berlabel tunggal yang diizinkan dalam kebijakan ini. Hostname harus dikanonikalisasi: semua IDN harus dikonversi ke format berlabel A, dan semua huruf ASCII harus berupa huruf kecil. Kebijakan ini hanya berlaku untuk hostname tertentu yang sudah ditentukan; tidak berlaku bagi subdomain nama yang ditentukan.</translation>
 <translation id="8818173863808665831">Melaporkan lokasi geografis perangkat.
 
       Jika kebijakan tidak disetel, atau disetel ke false, lokasi tidak akan dilaporkan.</translation>
@@ -4325,6 +4419,17 @@
       Jika nilai kebijakan ditetapkan ke token yang dipetakan ke Quick Fix Build, perangkat akan diupdate ke Quick Fix Build yang sesuai jika update tidak diblokir oleh kebijakan lain.
 
       Jika kebijakan ini tidak ditetapkan, atau jika nilainya tidak dipetakan ke Quick Fix Build, perangkat tidak akan diupdate ke Quick Fix Build. Jika perangkat sudah menjalankan Quick Fix Build dan kebijakan tidak ditetapkan lagi atau nilainya tidak lagi dipetakan ke Quick Fix Build, perangkat akan diupdate ke versi reguler jika update tidak diblokir oleh kebijakan lain.</translation>
+<translation id="9053158112041032237">Menentukan kebijakan pengelolaan daya mode pengisian daya baterai.
+
+          Mengontrol pengisian daya baterai secara dinamis untuk meminimalkan keausan baterai akibat ketegangan baterai dan memperpanjang masa pakai baterai.
+
+          Jika mode pengisian daya baterai kustom dipilih, <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> dan <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" /> harus ditentukan.
+
+          Jika kebijakan ini ditetapkan, mode pengisian daya baterai akan diterapkan dengan syarat didukung di perangkat.
+
+          Jika kebijakan ini tidak ditetapkan dan kebijakan didukung di perangkat, mode pengisian daya baterai standar akan diterapkan dan tidak dapat diubah oleh pengguna.
+
+          Catatan: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> akan mengganti kebijakan ini jika kebijakan tersebut ditentukan.</translation>
 <translation id="9054012305936267950">Kebijakan ini mengontrol perilaku login browser. Dengan kebijakan ini, Anda dapat menentukan apakah pengguna dapat login ke <ph name="PRODUCT_NAME" /> dengan akun mereka dan menggunakan layanan terkait akun seperti sinkronisasi Chrome.
 
       Jika kebijakan ini ditetapkan ke "Nonaktifkan login browser", pengguna tidak dapat login ke browser dan menggunakan layanan berbasis akun. Dalam hal ini, fitur tingkat browser seperti sinkronisasi Chrome tidak dapat digunakan dan tidak akan tersedia. Jika pengguna telah login dan kebijakan ini ditetapkan ke "Nonaktif", pengguna akan dibuat logout saat berikutnya menjalankan Chrome, tetapi data profil lokalnya, seperti bookmark, sandi, dsb. akan tetap tersimpan. Pengguna tetap dapat login dan menggunakan layanan web Google seperti Gmail.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 1f908ba..e709be30 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -87,6 +87,7 @@
       Se la norma non viene impostata, i GPO memorizzati nella cache possono essere riutilizzati per un periodo massimo di 25 ore.
 
       Se la norma è impostata su 0, la memorizzazione nella cache del GPO è disattivata. Tieni presente che in questo modo aumenterà il carico del server perché i GPO verranno scaricati nuovamente a ogni recupero della norma, anche se non sono stati modificati.</translation>
+<translation id="1111470455889178048">Invia caricamenti e download degli utenti da analizzare</translation>
 <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> aggirerà qualsiasi proxy per l'elenco di host fornito.
 
           Questa norma viene applicata solo se hai selezionato manualmente le impostazioni proxy in "Scegli come specificare le impostazioni del server proxy" e se la norma <ph name="PROXY_SETTINGS_POLICY_NAME" /> non è stata specificata.
@@ -378,6 +379,7 @@
 <translation id="163200210584085447">I pattern di questo elenco verranno confrontati con l'origine di sicurezza dell'URL richiedente. Se viene trovata una corrispondenza, l'accesso ai dispositivi di acquisizione video verrà concesso sulle pagine di accesso SAML. In caso contrario, l'accesso verrà automaticamente negato. Non sono consentite sequenze con caratteri jolly.</translation>
 <translation id="1634989431648355062">Consenti il plug-in <ph name="FLASH_PLUGIN_NAME" /> su questi siti</translation>
 <translation id="1645793986494086629">Schema:</translation>
+<translation id="1648816843164517573">Elenco di nomi che eviteranno il controllo dei criteri HSTS</translation>
 <translation id="1653229475925941921">Se questa norma viene impostata, consente di controllare il tipo di lente di ingrandimento che viene attivata. Se imposti la norma su "None", la lente di ingrandimento viene disatttivata.
 
           Se imposti questa norma, gli utenti non potranno modificarla o sostituirla.
@@ -864,6 +866,7 @@
 <translation id="254653220329944566">Consente di attivare il reporting su cloud di <ph name="PRODUCT_NAME" /></translation>
 <translation id="2548572254685798999">Segnala dati di Navigazione sicura</translation>
 <translation id="2550593661567988768">Solo stampa su un lato</translation>
+<translation id="2551520365302988324">Invia caricamenti degli utenti da analizzare</translation>
 <translation id="2552966063069741410">Fuso orario</translation>
 <translation id="2562339630163277285">Consente di specificare l'URL del motore di ricerca utilizzato per fornire risultati immediati. L'URL deve contenere la stringa <ph name="SEARCH_TERM_MARKER" />, che verrà sostituita in fase di query dal testo inserito dall'utente fino a quel momento.
 
@@ -938,6 +941,7 @@
 <translation id="2665422249821137126">Attiva il puntatore grande nella schermata di accesso</translation>
 <translation id="2672012807430078509">Controlla l'attivazione del protocollo di autenticazione NTLM per i montaggi SMB</translation>
 <translation id="267596348720209223">Consente di specificare le codifiche dei caratteri supportate dal provider di ricerca. Le codifiche sono nomi di pagine codificati come UTF-8, GB2312 e ISO-8859-1. Vengono provate nell'ordine indicato. Questa norma è facoltativa. Se non viene impostata viene utilizzato il valore predefinito UTF-8. Questa norma viene rispettata soltanto se è attiva la norma "DefaultSearchProviderEnabled".</translation>
+<translation id="2679827548357140943">Elenco di domini per i quali è necessario controllare la presenza di malware nei contenuti caricati</translation>
 <translation id="268577405881275241">Attiva la funzione proxy di compressione dei dati</translation>
 <translation id="2693108589792503178">Configura l'URL di modifica della password.</translation>
 <translation id="2694143893026486692">Lente d'ingrandimento ancorata attivata</translation>
@@ -1307,6 +1311,10 @@
 <translation id="332771718998993005">Consente di stabilire il nome pubblicizzato come destinazione di <ph name="PRODUCT_NAME" />.
 
           Se questa norma viene impostata su una stringa non vuota, tale stringa verrà usata come nome della destinazione di <ph name="PRODUCT_NAME" />. In caso contrario, il nome della destinazione sarà quello del dispositivo. Se questa norma non viene impostata, il nome della destinazione sarà il nome del dispositivo, che il proprietario (o un utente del dominio che gestisce il dispositivo) potrà cambiare. Il nome può essere formato da massimo 24 caratteri.</translation>
+<translation id="3331950121151548952">Elenco di domini per i quali è necessario controllare la presenza di malware nei contenuti caricati.  Questo criterio viene utilizzato solo se il criterio <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> viene impostato su un valore che consente o applica i controlli della presenza di malware per i caricamenti.
+
+      Se questo criterio non viene impostato o viene impostato su un elenco di domini vuoto, non verrà verificata la presenza di malware nei contenuti caricati.
+      </translation>
 <translation id="3335468714959531450">Questa norma consente di impostare un elenco di pattern URL che specificano i siti autorizzati a impostare cookie.
 
           Se questa norma non viene impostata, per tutti i siti verrà utilizzato il valore predefinito globale della norma "DefaultCookiesSetting", se è impostata, oppure verrà utilizzata la configurazione personale dell'utente.
@@ -1374,6 +1382,15 @@
 Se questa norma viene impostata su False o non viene impostata, i ritardi di gestione dell'alimentazione e il limite di durata delle sessioni iniziano immediatamente all'avvio della sessione.</translation>
 <translation id="3478024346823118645">Cancella dati utente all'uscita</translation>
 <translation id="3480961938508521469">Carica completamente la batteria con la modalità standard.</translation>
+<translation id="3483729306380590354">Consente di impostare il valore personalizzato espresso in percentuale raggiunto il quale viene avviata la ricarica della batteria.
+
+          La ricarica della batteria viene avviata quando viene raggiunto il valore di avvio della ricarica personalizzato.
+
+          Il valore <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> deve essere di almeno cinque punti percentuali inferiore al valore <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Questo criterio viene usato soltanto se il criterio <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> è impostato su <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Se questo criterio non viene configurato o non viene impostato, verrà applicata la modalità di ricarica <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> della batteria.</translation>
 <translation id="348495353354674884">Attiva tastiera virtuale</translation>
 <translation id="3487623755010328395">
         Se è impostata questa norma, <ph name="PRODUCT_NAME" /> proverà a registrarsi e ad applicare a tutti i profili la norma relativa alla cloud associata.
@@ -1807,6 +1824,15 @@
           Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
 
           Se questo criterio non viene impostato, inizialmente il clic automatico è disattivato, ma l'utente può attivarlo in qualsiasi momento.</translation>
+<translation id="4215197846797661927">Consente di impostare la configurazione giornaliera per la modalità di ricarica avanzata della batteria.
+
+          Questo criterio viene usato soltanto se il criterio <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> è impostato su true.
+
+          Se questo criterio non viene configurato o non viene impostato, la modalità di ricarica avanzata della batteria sarà sempre disattivata.
+
+          Nota: il valore <ph name="CHARGE_START_TIME_FIELD_NAME" /> deve essere inferiore al valore <ph name="CHARGE_END_TIME_FIELD_NAME" />.
+
+          Nota: i valori consentiti per il campo <ph name="MINUTE_FIELD_NAME" /> in <ph name="CHARGE_START_TIME_FIELD_NAME" /> e <ph name="CHARGE_END_TIME_FIELD_NAME" /> sono 0, 15, 30, 45.</translation>
 <translation id="4224610387358583899">Ritardi del blocco schermo</translation>
 <translation id="423797045246308574">Consente di impostare un elenco di pattern URL che specificano i siti in cui non è consentito l'utilizzo della generazione di chiavi. Se un pattern URL è indicato nella norma "KeygenAllowedForUrls", quest'ultima ha la precedenza su queste eccezioni.
 
@@ -1872,6 +1898,17 @@
           Il valore della norma deve essere specificato in millisecondi. I valori sono fissati in modo da essere minori o uguali al ritardo di inattività.
 
           L'avviso viene mostrato solo se l'azione richiesta in caso di inattività è la disconnessione o lo spegnimento.</translation>
+<translation id="4342827592971649626">Questo criterio consente di controllare l'analisi approfondita dei download degli utenti tramite Navigazione sicura. Se non viene impostato o viene impostata l'opzione predefinita "Non analizzare i file", i download degli utenti non verranno analizzati dalla funzionalità Navigazione sicura.
+
+      Se viene impostata l'opzione "Vieta l'analisi dei file", gli utenti non potranno analizzare i propri download. Quest'ultima impostazione differisce da quella predefinita che permette ad alcuni utenti, ad esempio gli utenti che usano la protezione avanzata, di inviare i propri download da analizzare. Questa impostazione impedirà l'analisi anche a questi utenti.
+
+      Se viene impostata l'opzione "Invia download degli utenti da analizzare", i download degli utenti verranno inviati tramite la rete alla funzionalità Navigazione sicura per verificare l'eventuale presenza di malware.
+
+      Se viene impostata l'opzione "Invia caricamenti degli utenti da analizzare", i caricamenti degli utenti verranno inviati tramite la rete alla funzionalità Navigazione sicura per verificare l'eventuale presenza di malware.
+
+      Se viene impostata l'opzione "Invia caricamenti e download degli utenti da analizzare", il comportamento del criterio è basato sulle regole descritte nelle impostazioni "Invia caricamenti degli utenti da analizzare" e "Invia download degli utenti da analizzare".
+
+      Per informazioni dettagliate sulla modalità di visualizzazione dei risultati dell'analisi per l'utente e l'amministratore, vedi i criteri <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> e <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" />.</translation>
 <translation id="4344356660952451291">Elenco di domini per i quali è necessario verificare la conformità dei contenuti scaricati</translation>
 <translation id="4346674324214534449">Consente di stabilire se bloccare o meno gli annunci su siti con annunci invasivi.
 
@@ -2424,6 +2461,16 @@
       Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
 
       Se il criterio non è impostato, l'utente può scegliere un'immagine da visualizzare sul desktop e sullo sfondo della schermata di accesso.</translation>
+<translation id="5437214086679373363">Consente di stabilire se consentire o meno agli utenti di caricare o scaricare i file protetti da password quando è richiesta l'analisi.  Tale limitazione si applica esclusivamente ai file che dovrebbero essere analizzati secondo quanto stabilito da <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> e dai criteri che controllano l'elenco di domini per i quali sono attivi i controlli.
+
+      Se questo criterio viene impostato su "Nessuno", <ph name="PRODUCT_NAME" /> impedisce all'utente di caricare o scaricare file protetti da password.
+
+      Se questo criterio viene impostato su "Consenti download", <ph name="PRODUCT_NAME" /> consente all'utente di scaricare file protetti da password.
+
+      Se questo criterio viene impostato su "Consenti caricamenti", <ph name="PRODUCT_NAME" /> consente all'utente di caricare file protetti da password.
+
+      Se questo criterio non viene impostato o viene impostato su "Consenti caricamenti e download", <ph name="PRODUCT_NAME" /> si comporta secondo le regole descritte nelle impostazioni "Consenti download" e "Consenti caricamenti".
+      </translation>
 <translation id="5437733496511628148">L'attivazione di questa impostazione impedisce l'impostazione dei cookie da parte degli elementi delle pagine web non provenienti dal dominio riportato nella barra degli indirizzi del browser.
 
       La disattivazione di questa impostazione consente ai cookie di essere impostati da elementi delle pagine web non provenienti dal dominio riportato nella barra degli indirizzi del browser e impedisce agli utenti di modificare questa impostazione.
@@ -3313,13 +3360,32 @@
 
       Per ulteriori informazioni sul criterio <ph name="IEEM_SITELIST_POLICY" /> di Internet Explorer: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
 <translation id="7132877481099023201">URL a cui verrà concesso l'accesso ai dispositivi di acquisizione video senza richieste</translation>
+<translation id="713712866686796666">Consente di impostare la configurazione giornaliera della variazione dei picchi energetici.
+
+          Questo criterio viene usato soltanto se il criterio <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> è impostato su true.
+
+          Se questo criterio non viene configurato o non viene impostato, la variazione dei picchi energetici risulterà sempre disattivata.
+
+          Nota: i valori consentiti per il campo <ph name="MINUTE_FIELD_NAME" /> in <ph name="START_TIME_FIELD_NAME" />, <ph name="END_TIME_FIELD_NAME" /> e <ph name="CHARGE_START_TIME_FIELD_NAME" /> sono 0, 15, 30, 45.</translation>
 <translation id="7138678301420049075">Altro</translation>
+<translation id="7139809614375682935">Consente di impostare il valore personalizzato espresso in percentuale raggiunto il quale viene interrotta la ricarica della batteria.
+
+          La ricarica della batteria viene interrotta quando viene raggiunto il valore di interruzione della ricarica personalizzato.
+
+          Il valore <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> deve essere di almeno cinque punti percentuali inferiore al valore <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Questo criterio viene usato soltanto se il criterio <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> è impostato su <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Se questo criterio non viene configurato o non viene impostato, verrà applicata la modalità di ricarica <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> della batteria.</translation>
 <translation id="7140629953254369759">Indica a <ph name="PRODUCT_OS_NAME" /> di usare la configurazione del programma di pianificazione delle attività identificato dal nome specificato.
 
       La norma può essere impostata su "conservativa" e "rendimento", opzioni che selezionano le configurazioni del programma di pianificazione più adatte, rispettivamente, per la stabilità o il massimo rendimento.
 
       Se la norma non viene impostata, l'utente è libero di fare la propria scelta.</translation>
 <translation id="7145335384492396213">Modalità di stampa PIN predefinita</translation>
+<translation id="7149042336307555519"> I tipi di connessioni che è consentito utilizzare per gli aggiornamenti del sistema operativo. Gli aggiornamenti del sistema operativo potrebbero gravare sulla connessione a causa delle loro dimensioni e potrebbero comportare costi aggiuntivi. Di conseguenza, per impostazione predefinita non sono attivi per i tipi di connessione considerati costosi (attualmente solo "cellulare").
+
+      Gli identificatori dei tipi di connessione riconosciuti sono <ph name="CONNECTION_TYPE_ETHERNET_NAME" />, <ph name="CONNECTION_TYPE_WIFI_NAME" /> e <ph name="CONNECTION_TYPE_CELLULAR_NAME" />.</translation>
 <translation id="7152605873936173525">Consente di controllare la modalità del resolver di DNS over HTTPS. Tieni presente che questo criterio imposta solo la modalità predefinita per ciascuna query. La modalità può essere ignorata per tipi speciali di query, ad esempio le richieste di risoluzione del nome host del server DNS over HTTPS.
 
       La modalità <ph name="SECURE_DNS_MODE_OFF" /> disattiverà DNS over HTTPS.
@@ -3348,6 +3414,17 @@
           Se questa norma viene impostata su false, le richieste di wakelock dello schermo verranno retrocesse a richieste di wakelock di sistema.</translation>
 <translation id="7177857088692019405">Sblocco rapido</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
+<translation id="7187447094921703950">Consente di attivare il criterio di gestione della variazione dei picchi energetici.
+
+          Variazione dei picchi è un criterio per il risparmio energetico che riduce al minimo l'utilizzo della corrente alternata durante i momenti della giornata di utilizzo più intenso. Per ogni giorno feriale è possibile impostare un orario di inizio e di fine per l'esecuzione della modalità Variazione dei picchi energetici. Nel periodo impostato, il sistema usa la batteria, anche se è presente il collegamento alla corrente alternata, finché il livello della batteria rimane al di sopra della soglia specificata. Dopo l'orario di fine specificato, il sistema usa la corrente alternata, se è presente il collegamento, ma non ricarica la batteria. Il sistema funzionerà di nuovo normalmente con la corrente alternata e la ricarica della batteria, dopo l'orario di inizio della ricarica specificato.
+
+          Se questo criterio viene impostato su true e sono impostati i criteri <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_NAME" /> e <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_NAME" />, la variazione dei picchi energetici sarà sempre attiva, se supportata dal dispositivo.
+
+          Se questo criterio viene impostato su false, la variazione dei picchi energetici sarà sempre disattivata.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, inizialmente la variazione dei picchi energetici è disattivata e non può essere attivata dall'utente.</translation>
 <translation id="718956142899066210">Tipi di connessioni consentiti per gli aggiornamenti</translation>
 <translation id="7190286937411178540">Attiva la funzione di accessibilità di evidenziazione dell'elemento attivo tramite tastiera</translation>
 <translation id="7194407337890404814">Nome del provider di ricerca predefinito</translation>
@@ -3971,6 +4048,17 @@
 
           Se questa norma non è impostata, l'impostazione viene attivata.</translation>
 <translation id="8382184662529825177">Attiva l'utilizzo dell'attestazione remota per la protezione dei contenuti per il dispositivo</translation>
+<translation id="8382693763260501307">Consente di attivare il criterio di gestione della modalità di ricarica avanzata della batteria.
+
+          La modalità di ricarica avanzata della batteria consente all'utente di massimizzare le condizioni della batteria. In modalità di ricarica avanzata, il sistema utilizza un algoritmo di ricarica standard e altre tecniche durante gli orari non di lavoro per massimizzare le condizioni della batteria. Durante gli orari di lavoro viene utilizzata una ricarica express. La ricarica express permette di ricaricare la batteria in modo più rapido; perciò, la carica completa avviene in tempi minori. Per ogni giorno, il tempo in cui il sistema viene usato con maggiore frequenza è specificato da ora di inizio e durata.
+
+          Se questo criterio viene impostato su true e il criterio <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_NAME" /> è impostato, la modalità di ricarica avanzata della batteria sarà sempre attiva se supportata sul dispositivo.
+
+          Se questo criterio viene impostato su false, la modalità di ricarica avanzata della batteria sarà sempre disattivata.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, la modalità di ricarica avanzata della batteria è disattivata e non può essere attivata dall'utente.</translation>
 <translation id="838870586332499308">Attiva roaming dati</translation>
 <translation id="8390049129576938611">Consente di disattivare il visualizzatore di PDF interno di <ph name="PRODUCT_NAME" />. I file PDF vengono gestiti come download che l'utente può aprire con l'applicazione predefinita.
 
@@ -4157,10 +4245,16 @@
       Se questo criterio viene configurato, il gruppo di applicazioni è fisso e non può essere modificato dagli utenti.
 
       Se questo criterio non viene impostato, gli utenti possono modificare l'elenco di app bloccate in Avvio app.</translation>
+<translation id="8779504970846195767">Consente di impostare un valore percentuale per il limite di consumo della batteria per la variazione dei picchi energetici.
+
+          Questo criterio viene usato soltanto se il criterio <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> è impostato su true.
+
+          Se questo criterio non viene configurato o non viene impostato, la variazione dei picchi energetici risulterà sempre disattivata.</translation>
 <translation id="8798099450830957504">Predefinito</translation>
 <translation id="8800453707696044281">Imposta il valore percentuale personalizzato raggiunto il quale viene interrotta la ricarica della batteria</translation>
 <translation id="8801680448782904838">Invia a un utente una notifica che comunica che è consigliato o necessario eseguire un riavvio del browser o del dispositivo
 </translation>
+<translation id="8802816494059596691">I nomi host specificati in questo elenco saranno esenti dal controllo dei criteri HSTS che potrebbero eseguire l'upgrade delle richieste da http a https. Solo i nomi host con etichetta singola sono consentiti in questo criterio. I nomi host devono essere in forma canonica: ogni IDN deve essere convertito nel relativo formato A-label e tutte le lettere ASCII devono essere minuscole. Questo criterio si applica soltanto ai nomi host specificati e non ai relativi sottodomini.</translation>
 <translation id="8818173863808665831">Consente di segnalare la posizione geografica del dispositivo.
 
 Se la norma non viene impostata o viene impostata su false, la posizione non viene segnalata.</translation>
@@ -4307,6 +4401,17 @@
       Se il valore della norma viene impostato su un token associato a una build di correzione rapida, il dispositivo verrà aggiornato alla build di correzione rapida corrispondente se l'aggiornamento non è bloccato da un'altra norma.
 
       Se questa norma non è impostata o se il valore non è associato a una build di correzione rapida, il dispositivo non verrà aggiornato a una build di correzione rapida. Se il dispositivo esegue già una build di correzione rapida e la norma non è più impostata o il suo valore non è più associato a una build di correzione rapida, il dispositivo verrà aggiornato a una normale build se l'aggiornamento non è bloccato da un'altra norma.</translation>
+<translation id="9053158112041032237">Consente di specificare il criterio di gestione della modalità di ricarica della batteria.
+
+          Controlla in modo dinamico la carica della batteria per minimizzarne l'usura dovuta alle sollecitazioni dell'utilizzo e aumentarne la durata.
+
+          Se viene selezionata la modalità di ricarica personalizzata della batteria, è necessario specificare i criteri <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> e <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Se questo criterio viene impostato, la modalità di ricarica della batteria verrà applicata se supportata sul dispositivo.
+
+          Se questo criterio non viene impostato ed è supportato sul dispositivo, verrà applicata la modalità di ricarica standard della batteria e l'impostazione non potrà essere modificata dall'utente.
+
+          Nota: se specificato, <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> sostituisce questo criterio.</translation>
 <translation id="9054012305936267950">Questo criterio consente di stabilire il comportamento di accesso del browser. Ti consente di specificare se l'utente può accedere a <ph name="PRODUCT_NAME" /> con il proprio account e usare i servizi correlati all'account come Sincronizzazione Chrome.
 
       Se il criterio viene impostato su "Disattiva accesso al browser", l'utente non potrà accedere al browser e usare i servizi basati sull'account. In questo caso, le funzionalità a livello di browser come la Sincronizzazione Chrome non potranno essere usate e non saranno disponibili. Se il criterio viene impostato su "Disattivata" dopo che l'utente ha eseguito l'accesso, l'utente verrà scollegato alla successiva esecuzione di Chrome, ma i dati locali del profilo, come preferiti, password ecc., verranno mantenuti. L'utente potrà comunque accedere e usare i servizi web di Google come Gmail.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 8cb7f8c..e66c39dd 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -98,6 +98,7 @@
       このポリシーを未設定にすると、キャッシュされた GPO は最大 25 時間まで再使用される可能性があります。
 
       このポリシーを 0 に設定すると、GPO のキャッシュは無効になります。この場合、GPO は変更が発生していなくてもポリシーを取り込むたびに再ダウンロードされるため、サーバーの負荷は高くなります。</translation>
+<translation id="1111470455889178048">ユーザーのアップロードとダウンロードをスキャンに送信する</translation>
 <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> はここで指定したホストのリストに対してプロキシをすべて無視します。
 
           このポリシーが適用されるのは、[プロキシ サーバー設定の指定方法を選択する] で手動によるプロキシ設定を選択し、<ph name="PROXY_SETTINGS_POLICY_NAME" /> ポリシーが指定されていない場合のみです。
@@ -397,6 +398,7 @@
       ワイルドカードのパターンは許可されません。</translation>
 <translation id="1634989431648355062">これらのサイトで <ph name="FLASH_PLUGIN_NAME" /> プラグインを許可する</translation>
 <translation id="1645793986494086629">スキーマ:</translation>
+<translation id="1648816843164517573">HSTS ポリシー チェックをバイパスする名前の一覧</translation>
 <translation id="1653229475925941921">このポリシーでは、有効にする拡大鏡のタイプを管理します。このポリシーが [None] の場合、拡大鏡は無効になります。
 
           このポリシーを設定した場合、ユーザーが変更したりオーバーライドしたりすることはできません。
@@ -879,6 +881,7 @@
 <translation id="254653220329944566"><ph name="PRODUCT_NAME" /> のクラウド レポートを有効にする</translation>
 <translation id="2548572254685798999">セーフ ブラウジングの情報についてレポートを作成する</translation>
 <translation id="2550593661567988768">片面印刷のみ</translation>
+<translation id="2551520365302988324">ユーザーのアップロードをスキャンに送信する</translation>
 <translation id="2552966063069741410">タイムゾーン</translation>
 <translation id="2562339630163277285">インスタント検索の結果表示に使用する検索エンジンの URL を指定します。この URL には <ph name="SEARCH_TERM_MARKER" /> という文字列を含めます。この文字列は、検索時にユーザーが入力したテキストに置き換えられます。
 
@@ -953,6 +956,7 @@
 <translation id="2665422249821137126">ログイン画面で大きいカーソルを有効にする</translation>
 <translation id="2672012807430078509">SMB マウントの認証プロトコルとして NTLM を有効にするかどうかを設定する</translation>
 <translation id="267596348720209223">検索プロバイダによってサポートされる文字エンコードを指定します。エンコードは、UTF-8、GB2312、ISO-8859-1 などのコード ページ名であり、指定された順序で適用されます。このポリシーは省略可能です。未設定の場合、デフォルトでは UTF-8 が使用されます。このポリシーは、「DefaultSearchProviderEnabled」ポリシーが有効な場合にのみ適用されます。</translation>
+<translation id="2679827548357140943">アップロードしたコンテンツに対してマルウェアのチェックを行う必要のあるドメインのリスト</translation>
 <translation id="268577405881275241">データ圧縮プロキシ機能を有効にする</translation>
 <translation id="2693108589792503178">パスワード変更 URL を設定する。</translation>
 <translation id="2694143893026486692">拡大鏡(ドッキング)の有効化</translation>
@@ -1324,6 +1328,10 @@
 <translation id="332771718998993005"><ph name="PRODUCT_NAME" /> のレシーバーとして表示する名前を指定します。
 
           このポリシーが空でない文字列に設定されている場合は、その文字列が <ph name="PRODUCT_NAME" /> のレシーバー名として使用されます。それ以外の場合、レシーバー名にはデバイス名が設定されます。このポリシーが未設定の場合、レシーバー名にはデバイス名が設定され、デバイスの所有者(またはデバイスを管理するドメインのユーザー)はその名前を変更できます。なお、名前は 24 文字以内で指定する必要があります。</translation>
+<translation id="3331950121151548952">アップロードしたコンテンツに対してマルウェアのチェックを行う必要のあるドメインのリスト。このポリシーは、<ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> の値をアップロードの際のマルウェア チェックの許可または実行に設定している場合にのみ使用されます。
+
+      このポリシーを設定しないか空のドメインリストに設定した場合、アップロードしたコンテンツに対してマルウェアのチェックが行われません。
+      </translation>
 <translation id="3335468714959531450">Cookie の設定を許可するサイトの URL パターンリストを設定します。
 
           このポリシーが未設定の場合は、すべてのサイトでグローバルなデフォルト値(「DefaultCookiesSetting」ポリシーで値が設定されている場合はその値、設定されていない場合はユーザーの個人設定の値)が使用されます。
@@ -1393,6 +1401,15 @@
           このポリシーが false または未設定の場合、電源管理の遅延とセッションの時間制限の開始は、セッション開始直後に行われます。</translation>
 <translation id="3478024346823118645">ログアウト時にユーザー データを消去するかを指定する</translation>
 <translation id="3480961938508521469">標準速度でバッテリーをフル充電する。</translation>
+<translation id="3483729306380590354">バッテリー充電のカスタムの充電開始設定(%)を行います。
+
+          バッテリー残量がこの設定値まで低下すると充電を開始します。
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> には <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" /> より 5% 以上低い値を指定してください。
+
+          このポリシーは <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> が <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" /> に設定されている場合にのみ使用されます。
+
+          このポリシーを設定していない場合は、<ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> バッテリー充電モードが適用されます。</translation>
 <translation id="348495353354674884">仮想キーボードを有効にする</translation>
 <translation id="3487623755010328395">
         このポリシーが設定されている場合、<ph name="PRODUCT_NAME" /> では自己登録が行われ、関連するクラウド ポリシーがすべてのプロフィールに適用されます。
@@ -1826,6 +1843,15 @@
           このポリシーを設定した場合、ユーザーによる変更やオーバーライドはできません。
 
           このポリシーを未設定のままにした場合、自動クリックが無効(初期設定)になりますが、ユーザーはいつでも有効にできます。</translation>
+<translation id="4215197846797661927">詳細なバッテリー充電モードの曜日の設定を行います。
+
+          このポリシーは <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> が true に設定されている場合にのみ使用されます。
+
+          このポリシーを設定していない場合、詳細なバッテリー充電モードは常に無効になります。
+
+          注: <ph name="CHARGE_START_TIME_FIELD_NAME" /> は、<ph name="CHARGE_END_TIME_FIELD_NAME" /> 未満で入力してください。
+
+          注: <ph name="CHARGE_START_TIME_FIELD_NAME" />、<ph name="CHARGE_END_TIME_FIELD_NAME" /> の <ph name="MINUTE_FIELD_NAME" /> フィールドで指定できる値は 0、15、30、45 です。</translation>
 <translation id="4224610387358583899">画面ロック遅延時間</translation>
 <translation id="423797045246308574">キー生成を使用できないサイトの URL パターンを登録します。URL パターンが「KeygenAllowedForUrls」にも含まれる場合は、このブロック ポリシーが優先されます。
 
@@ -1891,6 +1917,17 @@
           ポリシーの値はミリ秒単位で指定します。値には、アイドル待機時間と同じかそれより短い時間を指定できます。
 
           警告メッセージは、アイドル時の操作がログアウトかシャットダウンの場合にのみ表示されます。</translation>
+<translation id="4342827592971649626">このポリシーは、セーフ ブラウジングによるユーザーのダウンロードの詳細なスキャンを管理します。このポリシーを設定しないか、デフォルトの「ファイルをスキャンしない」に設定した場合、ユーザーのダウンロードに対してセーフ ブラウジングによるスキャンは行われません。
+
+      「ファイルのスキャンを禁止する」に設定した場合、ユーザーによるダウンロードのスキャンは禁止されます。この設定は、デフォルトの設定とは異なります。デフォルトの設定では、一部のユーザー(高度な保護機能が適用されるユーザーなど)はダウンロードをスキャンに送信することができます。一方、この設定を指定した場合は、そうしたユーザーもスキャンを行えなくなります。
+
+      「ユーザーのダウンロードをスキャンに送信する」に設定した場合、ユーザーのダウンロードはネットワークを介してセーフ ブラウジングに送信され、不正なソフトウェアのスキャンが行われます。
+
+      「ユーザーのアップロードをスキャンに送信する」に設定した場合、ユーザーのアップロードはネットワークを介してセーフ ブラウジングに送信され、不正なソフトウェアのスキャンが行われます。
+
+      「ユーザーのアップロードとダウンロードをスキャンに送信する」に設定した場合、「ユーザーのアップロードをスキャンに送信する」と「ユーザーのダウンロードをスキャンに送信する」のルールに従って動作します。
+
+      スキャンの結果がユーザーや管理者にどのように表示されるかについて詳しくは、<ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> ポリシーと <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> ポリシーをご覧ください。</translation>
 <translation id="4344356660952451291">ダウンロードしたコンテンツに対してコンプライアンス チェックを行う必要のあるドメインのリスト</translation>
 <translation id="4346674324214534449">煩わしい広告を含むサイトで広告をブロックするかどうかを設定します。
 
@@ -2445,6 +2482,16 @@
       このポリシーが設定されている場合、ユーザーが設定を変更またはオーバーライドすることはできません。
 
       このポリシーが未設定の場合、ユーザーはデスクトップ画面やログイン画面の背景に表示される画像を選択できます。</translation>
+<translation id="5437214086679373363">パスワードで保護されているファイルについて、スキャンが必要な場合のアップロードまたはダウンロードをユーザーに許可するかどうかを管理します。ファイルのスキャンは、<ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />、<ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" />、およびチェックが有効なドメインのリストを管理するポリシーによりスキャンが必要とされたファイルにのみ実行されます。
+
+      このポリシーを「なし」に設定した場合、<ph name="PRODUCT_NAME" /> は、ユーザーがパスワードで保護されているファイルをアップロードまたはダウンロードできないようにブロックします。
+
+      このポリシーを「ダウンロードを許可する」に設定した場合、<ph name="PRODUCT_NAME" /> は、パスワードで保護されているファイルのダウンロードをユーザーに許可します。
+
+      このポリシーを「アップロードを許可する」に設定した場合、<ph name="PRODUCT_NAME" /> は、パスワードで保護されているファイルのアップロードをユーザーに許可します。
+
+      このポリシーを「アップロードとダウンロードを許可する」に設定した場合、<ph name="PRODUCT_NAME" /> は「ダウンロードを許可する」と「アップロードを許可する」のルールに従って動作します。
+      </translation>
 <translation id="5437733496511628148">この設定を有効にすると、ブラウザのアドレスバーに表示されているドメイン以外のウェブページ要素による Cookie の設定が禁止されます。
 
       この設定を無効にすると、ブラウザのアドレスバーに表示されているドメイン以外のウェブページ要素による Cookie の設定が許可されます。ユーザーはこの設定を変更できません。
@@ -3341,12 +3388,30 @@
 
       Internet Explorer の <ph name="IEEM_SITELIST_POLICY" /> ポリシーについて詳しくは、https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode をご覧ください。</translation>
 <translation id="7132877481099023201">ユーザー確認なしで動画キャプチャ デバイスへのアクセスが許可される URL</translation>
+<translation id="713712866686796666">電力ピークシフトの曜日の設定を指定します。
+
+          このポリシーは <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> が true に設定されている場合にのみ使用されます。
+
+          このポリシーを設定しない場合、電力ピークシフトは常に無効になります。
+
+          注: <ph name="START_TIME_FIELD_NAME" />、<ph name="END_TIME_FIELD_NAME" />、<ph name="CHARGE_START_TIME_FIELD_NAME" /> の <ph name="MINUTE_FIELD_NAME" /> フィールドで指定できる値は 0、15、30、45 です。</translation>
 <translation id="7138678301420049075">その他</translation>
+<translation id="7139809614375682935">バッテリー充電のカスタムの充電停止設定(%)を行います。
+
+          バッテリー残量がこの設定値に達すると充電を停止します。
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> には <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" /> より 5% 以上低い値を指定してください。
+
+          このポリシーは <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> が <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" /> に設定されている場合にのみ使用されます。
+
+          このポリシーを設定していない場合は、<ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> バッテリー充電モードが適用されます。</translation>
 <translation id="7140629953254369759">名称で指定したタスク スケジューラ設定を <ph name="PRODUCT_OS_NAME" /> で使用するよう制御します。
 
       安定性を重視したタスク スケジューラ設定を使用する場合は「conservative」、パフォーマンスを重視したタスク スケジューラ設定を使用する場合は「performance」と指定します。
       このポリシーを設定しない場合は、ユーザーが設定を選択できます。</translation>
 <translation id="7145335384492396213">デフォルトの PIN 印刷モードです</translation>
+<translation id="7149042336307555519"> OS アップデートに使用できる接続のタイプです。OS アップデートは、サイズが大きいために接続に大きな負担がかかり、余分な費用が発生する可能性があります。そのためデフォルトでは、費用が高くなる接続タイプ(現時点では「cellular」)を利用できません。
+
+      認識される接続タイプ ID は <ph name="CONNECTION_TYPE_ETHERNET_NAME" />、<ph name="CONNECTION_TYPE_WIFI_NAME" />、<ph name="CONNECTION_TYPE_CELLULAR_NAME" /> です。</translation>
 <translation id="7152605873936173525">DNS-over-HTTPS リゾルバのモードを管理します。このポリシーは、各クエリのデフォルトのモードのみを設定します。このモードは、特殊な種類のクエリ(DNS-over-HTTPS サーバーのホスト名を解決するリクエストなど)の場合はオーバーライドされることがあります。
 
       <ph name="SECURE_DNS_MODE_OFF" /> モードの場合、DNS-over-HTTPS が無効になります。
@@ -3379,6 +3444,17 @@
           このポリシーが false に設定されている場合、画面の起動ロックのリクエストはシステムの起動ロックのリクエストに引き下げられます。</translation>
 <translation id="7177857088692019405">ロックのクイック解除</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
+<translation id="7187447094921703950">電力ピークシフトの電力管理ポリシーを有効にします。
+
+          ピークシフトは、日中のピーク使用時に交流電流の使用量を最小限に抑える省電力ポリシーです。各平日に、電力ピークシフト モードの開始時刻と終了時刻を設定できます。この時間帯は、電池残量が指定されたしきい値を上回っている限り、交流電流が接続されている場合でも、システムの実行には電池が使用されます。指定した終了時刻を過ぎると、電源に接続されている場合、システムの実行には交流電流が使用されますが、電池は充電されません。指定された充電開始時刻を過ぎると、システムは再び、交流電流を使って通常どおりに動作し、電池が充電されます。
+
+          このポリシーが true に設定されていて、<ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_NAME" /> と <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_NAME" /> が設定されている場合は、デバイスでサポートされている限り、電力ピークシフトは常に有効になります。
+
+          このポリシーを false に設定した場合、電力ピークシフトは常に無効になります。
+
+          このポリシーを設定した場合、ユーザーによる変更やオーバーライドはできません。
+
+          このポリシーを設定しない場合、電力ピークシフトは最初から無効になっていて、ユーザーが有効にすることはできません。</translation>
 <translation id="718956142899066210">更新で許可される接続タイプ</translation>
 <translation id="7190286937411178540">「キーボード フォーカスによるハイライト表示」のユーザー補助機能を有効にする</translation>
 <translation id="7194407337890404814">デフォルトの検索プロバイダ名</translation>
@@ -3994,6 +4070,17 @@
 
           このポリシーが未設定の場合、この設定は有効になります。</translation>
 <translation id="8382184662529825177">デバイスのコンテンツ保護に関するリモート認証の使用を有効にする</translation>
+<translation id="8382693763260501307">詳細なバッテリー充電モードの電力管理ポリシーを有効にします。
+
+          ユーザーは、詳細なバッテリー充電モードを使ってバッテリーを最適な状態にすることができます。詳細な充電モードでは、システムは、ユーザーが使用していない間、標準の充電アルゴリズムや他の技術を活用してバッテリーを最適な状態にします。ユーザーが使用している間は、急速充電が行われます。急速充電により、より短時間でバッテリーをフル充電できます。曜日ごとに、システムの使用頻度が最も高くなる時間帯を、開始時間とその継続時間で指定します。
+
+          このポリシーを true に設定していて、<ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_NAME" /> が設定されている場合、詳細なバッテリー充電モードに対応しているデバイスではこのモードが常に有効になります。
+
+          このポリシーを false に設定した場合、詳細なバッテリー充電モードは常に無効になります。
+
+          このポリシーを設定した場合、ユーザーによる変更やオーバーライドはできません。
+
+          このポリシーを未設定のままにした場合、詳細なバッテリー充電モードは無効となり、ユーザーが有効にすることはできません。</translation>
 <translation id="838870586332499308">データ ローミングを有効にする</translation>
 <translation id="8390049129576938611"><ph name="PRODUCT_NAME" /> で内部 PDF ビューアを無効にします。この場合、ユーザーはダウンロードしたファイルと同じように、PDF ファイルをデフォルトのアプリで開くことができます。
 
@@ -4196,9 +4283,14 @@
       このポリシーが設定されている場合、アプリケーション セットが固定され、ユーザーは変更できません。
 
       このポリシーが未設定の場合、ユーザーはランチャーの固定アプリのリストを変更できます。</translation>
+<translation id="8779504970846195767">電力ピークシフトの電池のしきい値をパーセントで設定します。
+          このポリシーは <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> が true に設定されている場合にのみ使用されます。
+
+          このポリシーを設定しない場合、電力ピークシフトは常に無効になります。</translation>
 <translation id="8798099450830957504">既定</translation>
 <translation id="8800453707696044281">バッテリー充電のカスタムの充電停止設定(%)を行う</translation>
 <translation id="8801680448782904838">ブラウザまたはデバイスの再起動が推奨されるか必要であることをユーザーに通知する</translation>
+<translation id="8802816494059596691">このリストに記されたホスト名については、HTTP から HTTPS へのアップグレード リクエストになる可能性がある HSTS ポリシー チェックから除外されます。このポリシーでは、単一ラベルのホスト名のみが許可されます。ホスト名は正規化されている必要があります。IDN はすべて A ラベル形式に対応し、すべての ASCII 文字列が小文字である必要があります。ポリシーが適用されるのは指定された特定のホスト名のみです。指定された名前のサブドメインには適用されません。</translation>
 <translation id="8818173863808665831">デバイスの地理的位置をレポートします。
 
       このポリシーを設定していない場合、あるいは false に設定している場合、位置はレポートされません。</translation>
@@ -4358,6 +4450,17 @@
       Quick Fix ビルドにマッピングされているトークンをポリシーの値に設定した場合、別のポリシーで更新がブロックされていない限り、デバイスを対応する Quick Fix ビルドに更新します。
 
       このポリシーを設定しない場合、または設定した値が Quick Fix ビルドにマッピングされていない場合、デバイスは Quick Fix ビルドに更新されません。デバイスですでに Quick Fix ビルドが実行され、ポリシーの設定が削除されたか、設定した値が Quick Fix ビルドにマッピングされなくなった場合、別のポリシーで更新がブロックされていない限り、デバイスを通常のビルドに更新します。</translation>
+<translation id="9053158112041032237">バッテリー充電モードの電力管理ポリシーを指定します。
+
+          バッテリー充電を動的に管理することで、バッテリー ストレスによる消耗を最小限に抑えてバッテリー寿命を延ばします。
+
+          カスタムのバッテリー充電モードを選択した場合は、<ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> と <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" /> を指定する必要があります。
+
+          このポリシーを設定した場合、デバイスが対応していればバッテリー充電モードが適用されます。
+
+          このポリシーを未設定のままにした場合、デバイスがポリシーに対応していれば、標準のバッテリー充電モードが適用され、ユーザーは変更することができなくなります。
+
+          注: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> が指定されている場合はこのポリシーより優先されます。</translation>
 <translation id="9054012305936267950">ブラウザのログイン動作を制御するポリシーです。ユーザーが自分のアカウントで <ph name="PRODUCT_NAME" /> にログインして Chrome 同期などのアカウント関連のサービスを使用できるかどうかを指定します。
 
       このポリシーが「ブラウザのログインを無効にする」に設定されている場合、ユーザーは、ブラウザにログインしてアカウントに基づくサービスを使用することができません。この場合、Chrome 同期のようなブラウザレベルの機能は使用不可となります。ユーザーがすでにログインしている状態でこのポリシーが「無効」に設定された場合は、次回 Chrome を起動するとログアウトの状態になります。ただし、ブックマーク、パスワードといったローカルのプロフィール データは保持されます。Gmail のような Google ウェブサービスは、引き続きログインして使用することができます。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index e4db7c3..2d54446d 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -2877,7 +2877,7 @@
 <translation id="6036523166753287175">원격 액세스 호스트의 방화벽 통과 허용</translation>
 <translation id="6038407313189625985">정책이 사용 설정되거나 설정되지 않으면 렌더러 코드 무결성이 사용 설정됩니다. 이 정책은 Chrome의 렌더러 프로세스 내에서 실행되어야 하는 타사 소프트웨어와의 호환성 문제가 발생하는 경우에만 사용 중지해야 합니다.
 
-      이 정책을 사용 중지하면 알려지지 않고 잠재적으로 적대적인 코드가 Chrome의 렌더러 프로세스 내에서 로드될 수 있으므로 Chrome의 보안 및 안정성에 부정적인 영향을 미칩니다. 자세한 내용은 https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md#Process-mitigation-policies를 참조하세요.</translation>
+      이 정책을 사용 중지하면 알려져 있지 않고 악성일 가능성이 큰 코드가 Chrome의 렌더러 프로세스 내에서 로드될 수 있으므로 Chrome의 보안 및 안정성에 부정적인 영향을 미칩니다. 자세한 내용은 https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md#Process-mitigation-policies를 참조하세요.</translation>
 <translation id="605475635122964053">PIN 인쇄 모드를 제한합니다. 정책이 설정되지 않으면 제한이 없는 것으로 간주됩니다. 이 모드를 사용할 수 없는 경우 이 정책은 무시됩니다. PIN 인쇄 기능은 IPPS, USB 또는 IPP-over-USB 프로토콜을 사용하는 프린터에서만 지원됩니다. </translation>
 <translation id="6070667616071269965">기기 로그인 화면 키보드 레이아웃</translation>
 <translation id="6074963268421707432">모든 사이트에서 데스크톱 알림 표시 허용 안함</translation>
@@ -3262,7 +3262,7 @@
 
       이 정책이 설정되지 않으면 MacOS, Android(비공개 DNS 또는 VPN이 사용 설정되지 않은 경우), ChromeOS에서 내장 DNS 클라이언트가 기본으로 사용 설정되며, 사용자는 chrome://flags를 수정하거나 명령줄 플래그를 사용하여 내장 DNS 클라이언트 사용 여부를 변경할 수 있습니다.</translation>
 <translation id="6843296367238757293">지원 중단된 정책입니다. 사용하지 마시기 바랍니다. https://support.google.com/chrome/a/answer/7643500에서 자세히 알아보세요.</translation>
-<translation id="6845546921986645941">정책이 사용 설정되면 <ph name="PRODUCT_NAME" />에서 비밀번호 재사용, 멀웨어 다운로드, 전면 광고, 콘텐츠 규정 미준수와 같은 안전하지 않은 이벤트를 분석을 위해 Google에 보고합니다.  콘텐츠 규정 미준수와 같은 일부 안전하지 않은 이벤트에는 이 검사가 사용 설정된 다른 정책이 적용됩니다.
+<translation id="6845546921986645941">정책이 사용 설정되면 <ph name="PRODUCT_NAME" />에서 비밀번호 재사용, 멀웨어 다운로드, 전면 광고, 콘텐츠 규정 미준수와 같은 안전하지 않은 이벤트를 분석을 위해 Google에 보고합니다.  콘텐츠 규정 미준수와 같은 일부 안전하지 않은 이벤트에는 이 검사를 사용 설정하는 다른 정책에 따라 검사가 적용됩니다.
 
       정책이 사용 중지되거나 설정되지 않으면 <ph name="PRODUCT_NAME" />에서 안전하지 않은 이벤트를 보고하지 않습니다.
       </translation>
@@ -3475,7 +3475,7 @@
 
       <ph name="SECURE_DNS_MODE_OFF" /> 모드는 DNS-over-HTTPS를 사용 중지합니다.
 
-      <ph name="SECURE_DNS_MODE_AUTOMATIC" /> 모드는 DNS-over-HTTPS 서버를 사용할 수 있으며 오류 시 안전하지 않은 쿼리를 보내는 것으로 대체할 수 있는 경우 DNS-over-HTTPS 쿼리를 먼저 전송합니다.
+      <ph name="SECURE_DNS_MODE_AUTOMATIC" /> 모드는 DNS-over-HTTPS 서버를 사용할 수 있는 경우 DNS-over-HTTPS 쿼리를 먼저 전송하며 오류 시 안전하지 않은 쿼리를 보내는 것으로 대체할 수 있습니다.
 
       <ph name="SECURE_DNS_MODE_SECURE" /> 모드는 DNS-over-HTTPS 쿼리만 전송하며 오류 시 리졸브하지 못합니다.
 
@@ -3648,7 +3648,7 @@
       </translation>
 <translation id="7360181094056034924">스캔이 필요하다고 결정되는 업로드 및 다운로드된 데이터에 대한 <ph name="PRODUCT_NAME" />의 작동 방식을 제어합니다.  전송이 지연되면 스캔이 완료되고 스캔 평가가 확인될 때까지 <ph name="PRODUCT_NAME" />에서 사용자가 다운로드된 파일에 액세스하거나, 업로드할 파일을 선택하거나, 데이터를 클립보드로부터 붙여넣거나 드래그 앤 드롭하도록 허용하지 않습니다.  이 제한은 검사가 사용 설정된 도메인 목록을 제어하는 정책, <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> 및 <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" />에서 스캔이 필요하다고 결정하는 파일 또는 데이터에만 적용됩니다.
 
-      정책이 설정되지 않거나 '없음'으로 설정되면 <ph name="PRODUCT_NAME" />에서 파일 업로드 지연, 클립보드로부터 붙여넣기, 데이터 드래그 앤 드롭 또는 다운로드된 파일에 대한 액세스 지연을 사용하지 않습니다.  스캔은 백그라운드에서 진행됩니다.
+      정책이 설정되지 않거나 '없음'으로 설정되면 <ph name="PRODUCT_NAME" />에서 파일 업로드, 클립보드로부터 붙여넣기, 데이터 드래그 앤 드롭 또는 다운로드된 파일에 대한 액세스 지연을 사용하지 않습니다.  스캔은 백그라운드에서 진행됩니다.
 
       정책이 '다운로드 지연'으로 설정되면 사용자는 파일이 스캔되고 스캔 평가가 확인될 때까지 다운로드된 파일에 액세스할 수 없습니다.
 
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 23bcdcc..2a963af 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -97,6 +97,7 @@
       Als dit beleid niet is ingesteld, mogen in het cachegeheugen opgeslagen GPO's maximaal gedurende 25 uur opnieuw worden gebruikt.
 
       Als dit beleid is ingesteld op 0, worden er geen GPO's in het cachegeheugen opgeslagen. Houd er rekening mee dat de server hierdoor zwaarder wordt belast, aangezien GPO's telkens opnieuw worden gedownload wanneer er beleid wordt opgehaald, zelfs als ze niet zijn gewijzigd.</translation>
+<translation id="1111470455889178048">Gebruikersuploads en -downloads verzenden om te laten scannen</translation>
 <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> omzeilt elke proxy voor de lijst met hosts die hier wordt gespecificeerd.
 
           Dit beleid wordt alleen van kracht als je handmatige proxyinstellingen hebt geselecteerd bij 'Kies hoe je proxyserverinstellingen wilt specificeren' en als het beleid <ph name="PROXY_SETTINGS_POLICY_NAME" /> niet is gespecificeerd.
@@ -399,6 +400,7 @@
       zijn niet toegestaan</translation>
 <translation id="1634989431648355062">De <ph name="FLASH_PLUGIN_NAME" />-plug-in toestaan op deze sites</translation>
 <translation id="1645793986494086629">Schema:</translation>
+<translation id="1648816843164517573">Lijst met namen die de controle van het HSTS-beleid overslaan</translation>
 <translation id="1653229475925941921">Als dit beleid is ingesteld, bepaalt dit het type vergrootglas dat is ingeschakeld. Als het beleid is ingesteld op 'Geen', wordt het vergrootglas uitgeschakeld.
 
           Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of overschrijven.
@@ -904,6 +906,7 @@
 <translation id="254653220329944566">Schakelt cloudrapportage voor <ph name="PRODUCT_NAME" /> in</translation>
 <translation id="2548572254685798999">Gegevens over Safe Browsing rapporteren</translation>
 <translation id="2550593661567988768">Alleen enkelzijdig afdrukken</translation>
+<translation id="2551520365302988324">Gebruikersuploads verzenden om te laten scannen</translation>
 <translation id="2552966063069741410">Tijdzone</translation>
 <translation id="2562339630163277285">Hiermee kun je de URL opgeven van de zoekmachine die wordt gebruikt om instantresultaten te leveren. De URL moet de tekenreeks <ph name="SEARCH_TERM_MARKER" /> bevatten. Deze tekenreeks wordt op het moment van de zoekopdracht vervangen door de tekst die de gebruiker tot op dat moment heeft getypt.
 
@@ -984,6 +987,7 @@
           Dit beleid is optioneel. Als het beleid niet wordt ingesteld, wordt de standaardcodering (UTF-8) gebruikt.
 
           Dit beleid wordt alleen gerespecteerd als het beleid 'DefaultSearchProviderEnabled' is ingeschakeld.</translation>
+<translation id="2679827548357140943">Lijst met domeinen waarvoor geüploade content moet worden gecontroleerd op malware</translation>
 <translation id="268577405881275241">De proxyfunctie voor het comprimeren van gegevens inschakelen</translation>
 <translation id="2693108589792503178">Configureer de URL voor het wijzigen van het wachtwoord.</translation>
 <translation id="2694143893026486692">Gedockt vergrootglas ingeschakeld</translation>
@@ -1361,6 +1365,10 @@
 <translation id="332771718998993005">De naam bepalen die wordt geadverteerd als een bestemming van <ph name="PRODUCT_NAME" />.
 
           Als dit beleid is ingesteld op een niet-lege tekenreeks, wordt die tekenreeks gebruikt als de naam van de <ph name="PRODUCT_NAME" />-bestemming. Anders wordt de apparaatnaam gebruikt voor de bestemmingsnaam. Als dit beleid niet is ingesteld, is de naam van de bestemming de apparaatnaam en kan de eigenaar van het apparaat (of een gebruiker in het domein dat het apparaat beheert) deze naam wijzigen. De naam mag maximaal 24 tekens lang zijn.</translation>
+<translation id="3331950121151548952">Lijst met domeinen waarvoor geüploade content moet worden gecontroleerd op malware.  Dit beleid wordt alleen gebruikt als <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> is ingesteld op een waarde die malwarecontroles voor uploads toestaat of afdwingt.
+
+      Als dit beleid niet is ingesteld of is ingesteld op een lege lijst met domeinen, wordt geüploade content niet gecontroleerd op malware.
+      </translation>
 <translation id="3335468714959531450">Hiermee kun je een lijst met URL-patronen instellen waarmee sites worden gespecificeerd die cookies mogen instellen.
 
           Als dit beleid niet wordt ingesteld, wordt de algemene standaardwaarde gebruikt voor alle sites op basis van het beleid DefaultCookiesSetting (als dit is ingesteld) of anders op basis van de configuratie van de gebruiker.
@@ -1430,6 +1438,15 @@
           Als dit beleid is ingesteld op 'False', worden vertragingen in energiebeheer en de limiet voor sessielengte gestart bij het starten van de sessie.</translation>
 <translation id="3478024346823118645">Gebruikersgegevens wissen bij uitloggen</translation>
 <translation id="3480961938508521469">De batterij volledig opladen met een normale snelheid.</translation>
+<translation id="3483729306380590354">Geef een aangepast startpunt voor batterijoplading op in procenten.
+
+          De batterij begint met opladen wanneer de waarde van het aangepaste startpunt voor batterijoplading wordt bereikt.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> moet ten minste vijf procentpunten lager zijn dan <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Dit beleid wordt alleen gebruikt als <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> is ingesteld op <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Als dit beleid niet is geconfigureerd of niet is ingesteld, wordt de <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> batterijoplaadmodus toegepast.</translation>
 <translation id="348495353354674884">Virtueel toetsenbord inschakelen</translation>
 <translation id="3487623755010328395">
         Als dit beleid is ingesteld, probeert <ph name="PRODUCT_NAME" /> zichzelf te registreren en het bijbehorende cloudbeleid voor alle profielen toe te passen.
@@ -1868,6 +1885,15 @@
           Als je dit beleid instelt, kunnen gebruikers het niet wijzigen of overschrijven.
 
           Als dit beleid niet is ingesteld, is de functie voor automatisch klikken in eerste instantie uitgeschakeld, maar kan de gebruiker deze op elk gewenst moment inschakelen.</translation>
+<translation id="4215197846797661927">Stel een dagconfiguratie voor de geavanceerde batterijoplaadmodus in.
+
+          Dit beleid wordt alleen gebruikt als <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> is ingesteld op True.
+
+          Als dit beleid niet is geconfigureerd of niet is ingesteld, is de geavanceerde batterijoplaadmodus altijd uitgeschakeld.
+
+          Opmerking: <ph name="CHARGE_START_TIME_FIELD_NAME" /> moet minder zijn dan <ph name="CHARGE_END_TIME_FIELD_NAME" />.
+
+          Opmerking: Toegestane waarden voor het veld <ph name="MINUTE_FIELD_NAME" /> in <ph name="CHARGE_START_TIME_FIELD_NAME" /> en <ph name="CHARGE_END_TIME_FIELD_NAME" /> zijn 0, 15, 30, 45.</translation>
 <translation id="4224610387358583899">Drempels voor schermvergrendeling</translation>
 <translation id="423797045246308574">Hiermee kun je een lijst met URL-patronen instellen waarmee sites worden gespecificeerd die geen sleutels mogen genereren. Als een URL-patroon in 'KeygenAllowedForUrls' staat, worden deze uitzonderingen overschreven door dit beleid.
 
@@ -1933,6 +1959,17 @@
           De beleidswaarde moet worden gespecificeerd in milliseconden. De opgegeven waarden moeten kleiner dan of gelijk aan de inactieve vertraging zijn.
 
           Het waarschuwingsbericht wordt alleen weergegeven als de inactieve actie 'uitloggen' of 'afsluiten' is.</translation>
+<translation id="4342827592971649626">Met dit beleid worden uitgebreide scans van gebruikersdownloads met Safe Browsing beheerd. Als dit beleid niet is ingesteld of 'Bestanden niet scannen' (de standaardinstelling) is ingesteld, worden gebruikersdownloads niet gescand door Safe Browsing.
+
+      Als 'Het scannen van bestanden verbieden' is ingesteld, mogen gebruikers hun downloads niet scannen. Dit wijkt af van de standaardinstelling omdat bepaalde gebruikers (zoals gebruikers van 'Geavanceerde beveiliging') hun downloads kunnen sturen om ze te laten scannen. Deze instelling voorkomt dat deze gebruikers downloads scannen.
+
+      Als 'Gebruikersdownloads verzenden voor scannen' is ingesteld, worden gebruikersdownloads via het netwerk naar Safe Browsing gestuurd om ze te scannen op malware.
+
+      Als 'Gebruikersuploads verzenden voor scannen' is ingesteld, worden gebruikersuploads via het netwerk naar Safe Browsing gestuurd om ze te scannen op malware.
+
+      Als 'Gebruikersuploads en -downloads verzenden voor scannen' is ingesteld, gedraagt deze zich volgens de regels die zijn beschreven onder 'Gebruikersuploads verzenden voor scannen' en 'Gebruikersdownloads verzenden voor scannen'.
+
+      Lees <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> en <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> voor meer informatie over hoe de gebruiker en de beheerder de resultaten van de scans te zien krijgen.</translation>
 <translation id="4344356660952451291">Lijst met domeinen waarvoor gedownloade content moet worden gecontroleerd op naleving</translation>
 <translation id="4346674324214534449">Hiermee kun je instellen of advertenties moeten worden voorkomen op sites met opdringerige advertenties.
 
@@ -2523,6 +2560,16 @@
       Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of negeren.
 
       Als het beleid niet wordt ingesteld, kan de gebruiker een afbeelding kiezen die op het bureaublad en op de achtergrond van het inlogscherm wordt weergegeven.</translation>
+<translation id="5437214086679373363">Hiermee wordt bepaald of gebruikers bestanden met wachtwoordbeveiliging mogen uploaden of downloaden wanneer scannen is vereist.  Deze beperking geldt alleen voor bestanden die moeten worden gescand, zoals bepaald door <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> en de beleidsregels die de lijst met domeinen beheren waarvoor controles zijn ingeschakeld.
+
+      Als dit beleid is ingesteld op 'Geen', voorkomt <ph name="PRODUCT_NAME" /> dat de gebruiker met een wachtwoord beschermde bestanden uploadt of downloadt.
+
+      Als dit beleid is ingesteld op 'Downloads toestaan', staat <ph name="PRODUCT_NAME" /> toe dat de gebruiker bestanden met wachtwoordbeveiliging downloadt.
+
+      Als dit beleid is ingesteld op 'Uploads toestaan', staat <ph name="PRODUCT_NAME" /> toe dat de gebruiker bestanden met wachtwoordbeveiliging uploadt.
+
+      Als dit beleid niet is ingesteld of is ingesteld op 'Uploads en downloads toestaan', werkt <ph name="PRODUCT_NAME" /> in overeenstemming met de regels die worden beschreven onder 'Downloads toestaan' en 'Uploads toestaan'.
+      </translation>
 <translation id="5437733496511628148">Als je deze instelling inschakelt, kunnen er geen cookies worden ingesteld door webpagina-elementen die niet afkomstig zijn van het domein dat in de adresbalk van de browser staat.
 
       Als je deze instelling uitschakelt, kunnen cookies worden ingesteld door webpagina-elementen die niet afkomstig zijn van het domein dat in de adresbalk van de browser staat, en wordt voorkomen dat gebruikers deze instelling kunnen wijzigen.
@@ -3431,13 +3478,32 @@
 
       Ga naar https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode voor meer informatie over het beleid <ph name="IEEM_SITELIST_POLICY" /> van Internet Explorer</translation>
 <translation id="7132877481099023201">URL's die zonder prompt toegang krijgen tot apparaten voor het vastleggen van video</translation>
+<translation id="713712866686796666">Stel de dagelijkse configuratie voor stroompiekverschuiving in.
+
+          Dit beleid wordt alleen gebruikt als <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> is ingesteld op True.
+
+          Als dit beleid niet is geconfigureerd of niet is ingesteld, is stroompiekverschuiving altijd uitgeschakeld.
+
+          Opmerking: Toegestane waarden voor het veld <ph name="MINUTE_FIELD_NAME" /> in <ph name="START_TIME_FIELD_NAME" />, <ph name="END_TIME_FIELD_NAME" /> en <ph name="CHARGE_START_TIME_FIELD_NAME" /> zijn 0, 15, 30, 45.</translation>
 <translation id="7138678301420049075">Overige</translation>
+<translation id="7139809614375682935">Geef een aangepaste batterijoplaadstop op in procenten.
+
+          De batterij stopt met opladen wanneer de waarde van de aangepaste batterijoplaadstop wordt bereikt.
+
+          <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> moet ten minste vijf procentpunten lager zijn dan <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Dit beleid wordt alleen gebruikt als <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> is ingesteld op <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />.
+
+          Als dit beleid niet is geconfigureerd of niet is ingesteld, wordt de <ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" /> batterijoplaadmodus toegepast.</translation>
 <translation id="7140629953254369759">Geeft <ph name="PRODUCT_OS_NAME" /> de instructie om de taakplannerconfiguratie met de opgegeven naam te gebruiken.
 
       Dit beleid kan worden ingesteld op 'Conservative' (Conservatief) en 'Performance' (Prestaties), waarmee een taakplannerconfiguratie wordt gekozen die is afgestemd op respectievelijk stabiliteit of optimale prestaties.
 
       Als het beleid niet is ingesteld, kan de gebruiker zelf een keuze maken.</translation>
 <translation id="7145335384492396213">Standaardmodus voor afdrukken met pincode</translation>
+<translation id="7149042336307555519"> De typen verbindingen die mogen worden gebruikt voor OS-updates. Vanwege hun grootte kunnen OS-updates de verbinding zwaar belasten, wat kan leiden tot extra kosten. Daarom zijn ze standaard niet ingeschakeld voor verbindingstypen die als duur worden beschouwd (momenteel alleen verbindingen van het type 'mobiel').
+
+      De herkende ID's voor verbindingstypen zijn <ph name="CONNECTION_TYPE_ETHERNET_NAME" />, <ph name="CONNECTION_TYPE_WIFI_NAME" /> en <ph name="CONNECTION_TYPE_CELLULAR_NAME" />.</translation>
 <translation id="7152605873936173525">Hiermee wordt de modus van de DNS-over-HTTPS-resolver bepaald. Houd er rekening mee dat dit beleid alleen de standaardmodus voor elke query instelt. De modus kan worden overschreven voor speciale typen query's, zoals verzoeken om de hostnaam van een DNS-over-HTTPS-server om te zetten.
 
       In de modus <ph name="SECURE_DNS_MODE_OFF" /> wordt DNS-over-HTTPS uitgeschakeld.
@@ -3469,6 +3535,17 @@
           Als dit beleid is ingesteld op 'false', worden verzoeken voor wake locks van het scherm gedegradeerd tot verzoeken voor wake locks van het systeem.</translation>
 <translation id="7177857088692019405">Snel ontgrendelen</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
+<translation id="7187447094921703950">Schakel het beleid voor het beheer van stroompiekverschuiving in.
+
+          Piekverschuiving is een energiebesparingsbeleid waarmee het gebruik van wisselstroom op piekuren gedurende de dag wordt geminimaliseerd. Voor elke dag van de week kan een begin- en eindtijd voor stroompiekverschuiving worden ingesteld. Op deze tijden gebruikt het systeem de batterij, ook als de wisselstroom is aangesloten, zolang het batterijniveau maar boven de opgegeven drempel blijft. Na de opgegeven eindtijd gebruikt het systeem wisselstroom als deze is aangesloten maar wordt de batterij niet opgeladen. Het systeem keert terug naar de normale werking waarbij wisselstroom wordt gebruikt en de batterij wordt opgeladen na de opgegeven starttijd voor opladen.
+
+          Als dit beleid is ingesteld op True en <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_NAME" /> en <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_NAME" /> zijn ingesteld, wordt stroompiekverschuiving altijd ingeschakeld als dit wordt ondersteund door het apparaat.
+
+          Als dit beleid is ingesteld op False, wordt stroompiekverschuiving altijd uitgeschakeld.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of negeren.
+
+          Als dit beleid niet wordt ingesteld, wordt stroompiekverschuiving in eerste instantie uitgeschakeld en kan dit worden ingeschakeld door de gebruiker.</translation>
 <translation id="718956142899066210">Verbindingstypen die zijn toegestaan voor updates</translation>
 <translation id="7190286937411178540">De toegankelijkheidsfunctie voor markeren via toetsenbordfocus inschakelen</translation>
 <translation id="7194407337890404814">Naam van standaardzoekprovider</translation>
@@ -4105,6 +4182,17 @@
 
           Als dit beleid niet is ingesteld, wordt de instelling ingeschakeld.</translation>
 <translation id="8382184662529825177">Het gebruik van externe verificatie inschakelen voor het beveiligen van content voor het apparaat</translation>
+<translation id="8382693763260501307">Schakel het stroombeheerbeleid voor de geavanceerde batterijoplaadmodus in.
+
+          In de geavanceerde batterijoplaadmodus kan de gebruiker de staat van de batterij maximaliseren. In de geavanceerde batterijoplaadmodus gebruikt het systeem buiten werktijden een standaard oplaadalgoritme en andere technieken om de staat van de batterij te maximaliseren. Tijdens werktijden wordt snel opgeladen. Dankzij dit snelle opladen is de batterij sneller volledig opgeladen. Voor elke dag wordt een begintijd en een duur opgegeven om aan te geven wanneer het systeem het intensiefst wordt gebruikt.
+
+          Als dit beleid is ingesteld op True en <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_NAME" /> is ingesteld, wordt de geavanceerde batterijoplaadmodus altijd ingeschakeld als dit wordt ondersteund door het apparaat.
+
+          Als dit beleid is ingesteld op False, wordt de geavanceerde batterijoplaadmodus altijd uitgeschakeld.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of negeren.
+
+          Als dit beleid niet wordt ingesteld, wordt de geavanceerde batterijoplaadmodus uitgeschakeld en kan deze niet worden ingeschakeld door de gebruiker.</translation>
 <translation id="838870586332499308">Dataroaming inschakelen</translation>
 <translation id="8390049129576938611">Hiermee wordt de interne pdf-viewer in <ph name="PRODUCT_NAME" /> uitgeschakeld. In plaats daarvan wordt dit beschouwd als download. De gebruiker kan pdf-bestanden openen met de standaard-app.
 
@@ -4300,9 +4388,15 @@
       Als dit beleid is geconfigureerd, staat de reeks met apps vast en kan de gebruiker deze niet wijzigen.
 
       Als dit beleid niet is ingesteld, kan de gebruiker de lijst met vastgezette apps in de Launcher wijzigen.</translation>
+<translation id="8779504970846195767">Stel de drempel voor stroompiekverschuiving van de batterij in procenten in.
+
+          Dit beleid wordt alleen gebruikt als <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> is ingesteld op True.
+
+          Als dit beleid niet is geconfigureerd of niet is ingesteld, is stroompiekverschuiving altijd uitgeschakeld.</translation>
 <translation id="8798099450830957504">Standaard</translation>
 <translation id="8800453707696044281">Een custom batterijoplaadstop opgeven in procenten</translation>
 <translation id="8801680448782904838">Een gebruiker laten weten dat het aanbevolen of vereist is om de browser of het apparaat opnieuw op te starten</translation>
+<translation id="8802816494059596691">De op deze lijst vermelde hostnamen zijn vrijgesteld van de controle van het HSTS-beleid die verzoeken kan upgraden van HTTP naar HTTPS. In dit beleid zijn alleen hostnamen met één label toegestaan. Hostnamen moeten een canonieke URL hebben: Eventuele IDN's moeten worden geconverteerd naar de A-labelindeling en alle ASCII-letters moeten kleine letters zijn. Dit beleid is alleen van toepassing op de vermelde specifieke hostnamen en is niet van toepassing op de subdomeinen van de vermelde namen.</translation>
 <translation id="8818173863808665831">De geografische locatie van het apparaat rapporteren.
 
       Als het beleid niet is ingesteld of is ingesteld op 'false', wordt de locatie niet gerapporteerd.</translation>
@@ -4465,6 +4559,17 @@
       Als de beleidswaarde is ingesteld op een token dat naar een Quick Fix Build verwijst, wordt het apparaat geüpdatet naar de bijbehorende Quick Fix Build als de update niet wordt geblokkeerd door een ander beleid.
 
       Als dit beleid niet is ingesteld of als de waarde niet verwijst naar een Quick Fix Build, wordt het apparaat niet geüpdatet naar een Quick Fix Build. Als er al een Quick Fix Build op het apparaat wordt uitgevoerd en het beleid niet meer is ingesteld of de waarde niet meer verwijst naar een Quick Fix Build, wordt het apparaat geüpdatet naar een reguliere build als de update niet wordt geblokkeerd door een ander beleid.</translation>
+<translation id="9053158112041032237">Bepaalt het stroombeheerbeleid van de geavanceerde batterijoplaadmodus.
+
+          Hiermee wordt het opladen van de batterij dynamisch beheerd om de batterijbelasting te minimaliseren en de levensduur van de batterij te verlengen.
+
+          Als de geavanceerde batterijoplaadmodus is geselecteerd, moeten <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> en <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" /> worden opgegeven.
+
+          Als dit beleid wordt ingesteld en het apparaat deze modus ondersteunt, wordt de batterijoplaadmodus toegepast.
+
+          Als het apparaat het beleid wel ondersteunt, maar het beleid niet wordt ingesteld, wordt de standaard batterijoplaadmodus toegepast en kan de gebruiker de modus niet wijzigen.
+
+          Opmerking: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> overschrijft dit beleid als het is opgegeven.</translation>
 <translation id="9054012305936267950">Met dit beleid wordt het inloggedrag van de browser beheerd. Hiermee kun je specificeren of gebruikers kunnen inloggen bij <ph name="PRODUCT_NAME" /> met kun account en accountgerelateerde services (zoals Chrome-synchronisatie) kunnen gebruiken.
 
       Als het beleid is ingesteld op 'Inloggen bij browser uitschakelen', kan de gebruiker niet inloggen bij de browser en geen accountgebaseerde services gebruiken. Functies op browserniveau (zoals Chrome-synchronisatie) kunnen in dit geval niet worden gebruikt en zijn niet beschikbaar. Als de gebruiker was ingelogd en het beleid is ingesteld op 'Uitgeschakeld', wordt de gebruiker uitgelogd wanneer die Chrome de volgende keer gebruikt. De lokale profielgegevens van de gebruiker (zoals bladwijzers, wachtwoorden, enzovoort) blijven behouden. De gebruiker kan nog steeds inloggen bij en gebruikmaken van Google-webservices zoals Gmail.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 2df76fe..61ef9ce 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -98,6 +98,7 @@
       Если правило не настроено, кешированные объекты групповой политики могут использоваться в течение 25 часов.
 
       Если для правила задано значение 0, кеширование объектов групповой политики отключено. В этом случае нагрузка на сервер возрастает, так как объекты групповой политики приходится заново скачивать при каждом получении правила, даже если они не меняются.</translation>
+<translation id="1111470455889178048">Отправлять загруженные и скачанные файлы на проверку</translation>
 <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> будет игнорировать любые прокси-серверы для хостов, перечисленных в этом списке.
 
           Это правило действует, только если не задано <ph name="PROXY_SETTINGS_POLICY_NAME" />, а в разделе "Выбрать способ настройки прокси-сервера" указан ручной режим.
@@ -394,6 +395,7 @@
       блокирован. Подстановочные знаки запрещены.</translation>
 <translation id="1634989431648355062">Разрешить запуск плагина <ph name="FLASH_PLUGIN_NAME" /> на этих сайтах</translation>
 <translation id="1645793986494086629">Набор атрибутов:</translation>
+<translation id="1648816843164517573">Имена хостов, для которых не нужно проверять использование механизма HSTS</translation>
 <translation id="1653229475925941921">Если правило настроено, оно определяет тип используемой лупы. Если установить значение None, лупа будет отключена.
 
           Если правило настроено, пользователи не могут изменить или перезаписать его.
@@ -879,6 +881,7 @@
 <translation id="254653220329944566">Разрешить отправку отчетов <ph name="PRODUCT_NAME" /> в облако</translation>
 <translation id="2548572254685798999">Передавать информацию Безопасного просмотра</translation>
 <translation id="2550593661567988768">Только односторонняя печать</translation>
+<translation id="2551520365302988324">Отправлять загруженные файлы на проверку</translation>
 <translation id="2552966063069741410">Часовой пояс</translation>
 <translation id="2562339630163277285">Позволяет задать URL поисковой системы для Живого поиска. URL-адрес должен содержать строку <ph name="SEARCH_TERM_MARKER" />, которая будет заменяться текстом, введенным пользователем.
 
@@ -953,6 +956,7 @@
 <translation id="2665422249821137126">Включить большой курсор на экране входа</translation>
 <translation id="2672012807430078509">Определяет, можно ли использовать NTLM в качестве протокола аутентификации для подключений SMB</translation>
 <translation id="267596348720209223">Задает кодировку текста, поддерживаемую поисковой системой. Кодировки – это названия кодовых страниц, например UTF-8, GB2312 или ISO-8859-1. Они применяются в том порядке, в котором перечислены. Это правило необязательно: если оно не настроено, по умолчанию используется кодировка UTF-8. Оно действует, только если активно правило DefaultSearchProviderEnabled.</translation>
+<translation id="2679827548357140943">Список доменов, для которых нужно проверять загружаемый контент на наличие вредоносного ПО</translation>
 <translation id="268577405881275241">Использовать прокси-сервер для сжатия данных</translation>
 <translation id="2693108589792503178">Настроить URL страницы смены пароля</translation>
 <translation id="2694143893026486692">Закрепленная лупа включена</translation>
@@ -1323,6 +1327,10 @@
 <translation id="332771718998993005">Определяет название ресивера <ph name="PRODUCT_NAME" />.
 
           Значение, указанное в правиле, служит названием ресивера <ph name="PRODUCT_NAME" />. Если оно не задано или правило не настроено, название ресивера соответствует названию устройства. Менять его может владелец (или пользователь домена, в котором управляют устройством). Максимальная длина названия – 24 символа.</translation>
+<translation id="3331950121151548952">Список доменов, для которых необходимо проверять загружаемый контент на наличие вредоносного ПО.  Это правило используется только в том случае, если в соответствии с правилом <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" /> загружаемый контент может или должен проверяться на наличие вредоносного ПО.
+
+      Если правило не настроено или список доменов пуст, загружаемый контент не проверяется на наличие вредоносного ПО.
+      </translation>
 <translation id="3335468714959531450">Правило позволяет задать список шаблонов URL для сайтов, которым разрешено сохранять файлы cookie.
 
           Если это правило не настроено, для всех сайтов используется глобальное значение по умолчанию на основе правила DefaultCookiesSetting (если оно настроено, в противном случае – на основе пользовательской конфигурации).
@@ -1392,6 +1400,15 @@
           Если выбрано значение FALSE, время для параметров электропитания и длительность сеанса начнут отсчитываться сразу после начала сеанса.</translation>
 <translation id="3478024346823118645">Стирать пользовательские данные при выходе</translation>
 <translation id="3480961938508521469">Полная зарядка батареи на обычной скорости</translation>
+<translation id="3483729306380590354">Позволяет установить значение заряда в процентах, при котором батарея начнет заряжаться.
+
+          Батарея начнет заряжаться, когда уровень заряда опустится до установленного значения.
+
+          Значение для правила <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> должно быть как минимум на пять процентных пунктов меньше значения, указанного для правила <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Это правило можно использовать, только если в правиле <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> установлен пользовательский режим зарядки (<ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />).
+
+          Если правило не настроено или значение для него не задано, применяется стандартный режим зарядки (<ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" />).</translation>
 <translation id="348495353354674884">Включить виртуальную клавиатуру</translation>
 <translation id="3487623755010328395">
         Если это правило используется, <ph name="PRODUCT_NAME" /> попытается зарегистрироваться и применить ко всем профилям соответствующую политику облачных сервисов.
@@ -1822,6 +1839,15 @@
           Если вы настроите это правило, пользователи не смогут его изменить или переопределить.
 
           Если не настроить это правило, изначально автоматическое нажатие будет отключено, но пользователь сможет включить его в любой момент.</translation>
+<translation id="4215197846797661927">Устанавливает время ежедневного включения и отключения расширенного режима зарядки.
+
+          Используется, только если для правила <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> задано значение True.
+
+          Если правило не настроено или значение для него не задано, расширенный режим зарядки будет всегда отключен.
+
+          Обратите внимание, что время начала (<ph name="CHARGE_START_TIME_FIELD_NAME" />) должно предшествовать времени окончания (<ph name="CHARGE_END_TIME_FIELD_NAME" />).
+
+          Примечание. Допустимые значения в поле <ph name="MINUTE_FIELD_NAME" /> для параметров <ph name="CHARGE_START_TIME_FIELD_NAME" /> и <ph name="CHARGE_END_TIME_FIELD_NAME" />: 0, 15, 30 и 45.</translation>
 <translation id="4224610387358583899">Период неактивности для блокировки экрана</translation>
 <translation id="423797045246308574">Позволяет задать список шаблонов URL для сайтов, которым запрещено создавать ключи. При этом, если указанный шаблон подпадает под действие правила KeygenAllowedForUrls, сайту будет разрешено создавать ключи. Если правило KeygenBlockedForUrls не настроено, для всех сайтов используется значение по умолчанию на основе правила DefaultKeygenSetting (если оно настроено, в противном случае – на основе пользовательской конфигурации).</translation>
 <translation id="4238997902172035160">Определяет каталог, который <ph name="PRODUCT_NAME" /> использует для хранения перемещаемых копий профиля.
@@ -1886,6 +1912,17 @@
           Значение указывается в миллисекундах и не должно превышать время задержки при переходе в режим бездействия.
 
           Предупреждение будет появляться только в том случае, если в режиме бездействия происходит выход из аккаунта или отключение устройства.</translation>
+<translation id="4342827592971649626">Это правило управляет глубокой проверкой скачанных файлов, которая выполняется с помощью Безопасного просмотра. Если правило не настроено или для него задано значение по умолчанию ("Не проверять файлы"), проверка скачанных файлов с помощью Безопасного просмотра выполняться не будет.
+
+      Если выбрано значение "Запретить проверку файлов", пользователям будет запрещено проверять скачанные файлы. Этот вариант отличается от значения по умолчанию, так как некоторые пользователи (например, те, кто включил Дополнительную защиту) могут отправлять скачанные файлы на проверку. Данное правило не позволит им делать это.
+
+      Если установлено значение "Отправлять скачанные файлы на проверку", скачанные пользователями файлы будут отправляться по сети для проверки с помощью Безопасного просмотра на наличие вредоносного ПО.
+
+      Если установлено значение "Отправлять загруженные файлы на проверку", загруженные пользователями файлы будут отправляться по сети для проверки с помощью Безопасного просмотра на наличие вредоносного ПО.
+
+      Если задано значение "Отправлять загруженные и скачанные файлы на проверку", используются те же процедуры, что при значениях "Отправлять загруженные файлы на проверку" и "Отправлять скачанные файлы на проверку".
+
+      Подробнее о том, как результаты проверки показываются для пользователя и администратора, рассказано в описании правил <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> и <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" />.</translation>
 <translation id="4344356660952451291">Список доменов, для которых необходимо проверять скачиваемый контент на соответствие требованиям</translation>
 <translation id="4346674324214534449">Эта настройка позволяет заблокировать навязчивую рекламу на сайтах.
       Если для правила выбрано значение 2, навязчивая реклама будет заблокирована.
@@ -2449,6 +2486,16 @@
       Если правило настроено, пользователи не могут изменить или переопределить его.
 
       Если правило не настроено, пользователям разрешается самостоятельно выбирать обои для рабочего стола и экрана входа.</translation>
+<translation id="5437214086679373363">Определяет, разрешено ли пользователям загружать и скачивать файлы, защищенные паролем, если для них необходима проверка.  Данное ограничение действует только в отношении файлов, которые требуют проверки в соответствии с правилами <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> и правилами, определяющими список доменов, для которых включены проверки.
+
+      Если для правила задано значение None, <ph name="PRODUCT_NAME" /> запрещает пользователям загружать и скачивать файлы, защищенные паролем.
+
+      Если выбрано значение "Разрешить скачивание файлов, защищенных паролем", <ph name="PRODUCT_NAME" /> позволяет пользователям скачивать файлы, защищенные паролем.
+
+      Если указано значение "Разрешить загрузку файлов, защищенных паролем", <ph name="PRODUCT_NAME" /> позволяет пользователям загружать файлы, защищенные паролем.
+
+      Если правило не настроено или для него задано значение "Разрешить загрузку и скачивание файлов, защищенных паролем", <ph name="PRODUCT_NAME" /> действует так же, как при значениях "Разрешить скачивание файлов, защищенных паролем" и "Разрешить загрузку файлов, защищенных паролем".
+      </translation>
 <translation id="5437733496511628148">Если параметр включен, элементам веб-страниц из других доменов (то есть любых доменов, кроме указанного в адресной строке) нельзя сохранять файлы cookie.
 
       Если параметр отключен, пользователям запрещается менять эту настройку, а элементам веб-страниц из других доменов (то есть любых доменов, кроме указанного в адресной строке) разрешается сохранять файлы cookie.
@@ -3348,13 +3395,32 @@
 
       Более подробную информацию о правиле <ph name="IEEM_SITELIST_POLICY" /> для Internet Explorer можно найти на странице https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode.</translation>
 <translation id="7132877481099023201">URL, которым доступ к видеозаписывающим устройствам предоставляется без запроса</translation>
+<translation id="713712866686796666">Позволяет указать ежедневное время включения и выключения режима пиковой нагрузки.
+
+          Используется, только если для правила <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> задано значение True.
+
+          Если не настроить это правило или не задать для него значение, режим пиковой нагрузки всегда будет отключен.
+
+          Примечание. Допустимые значения в поле <ph name="MINUTE_FIELD_NAME" /> для параметров <ph name="START_TIME_FIELD_NAME" />, <ph name="END_TIME_FIELD_NAME" /> и <ph name="CHARGE_START_TIME_FIELD_NAME" />: 0, 15, 30 и 45.</translation>
 <translation id="7138678301420049075">Другое</translation>
+<translation id="7139809614375682935">Позволяет установить значение заряда в процентах, при котором батарея перестанет заряжаться.
+
+          Батарея перестанет заряжаться, когда уровень заряда достигнет установленного значения.
+
+          Значение для правила <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> должно быть как минимум на пять процентных пунктов меньше значения, указанного для правила <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Это правило можно использовать, только если в правиле <ph name="DEVICE_BATTERY_CHARGE_MODE_NAME" /> установлен пользовательский режим зарядки (<ph name="DEVICE_BATTERY_CHARGE_CUSTOM_MODE_NAME" />).
+
+          Если правило не настроено или значение для него не задано, применяется стандартный режим зарядки (<ph name="DEVICE_BATTERY_CHARGE_STANDARD_MODE_NAME" />).</translation>
 <translation id="7140629953254369759">Настраивает конфигурацию планировщика задач для <ph name="PRODUCT_OS_NAME" />.
 
       Для правила можно установить значение conservative или performance. В первом случае будет использоваться конфигурация, нацеленная на стабильную работу, а во втором – на максимальную производительность.
 
       Если правило не настроено, пользователь может сделать выбор самостоятельно.</translation>
 <translation id="7145335384492396213">Печать с вводом PIN-кода по умолчанию</translation>
+<translation id="7149042336307555519"> Типы подключений, которые разрешается использовать для скачивания обновлений ОС. Из-за большого размера файлов скачивание этих обновлений может перегружать соединение и приводить к дополнительным расходам. Поэтому передача через сети с высокой стоимостью трафика по умолчанию отключена. В настоящее время к ним относится только сеть сотовой связи (cellular).
+
+      Поддерживаются типы подключений со следующими идентификаторами: <ph name="CONNECTION_TYPE_ETHERNET_NAME" />, <ph name="CONNECTION_TYPE_WIFI_NAME" /> и <ph name="CONNECTION_TYPE_CELLULAR_NAME" />.</translation>
 <translation id="7152605873936173525">Определяет режим преобразователя DNS поверх HTTPS. Обратите внимание, что это правило только устанавливает режим, который будет использоваться по умолчанию для каждого запроса. Этот режим может быть переопределен для особых типов запросов, таких как запросы на преобразование имени хоста для сервера типа "DNS поверх HTTPS".
 
       Если выбрать режим "<ph name="SECURE_DNS_MODE_OFF" />", протокол "DNS поверх HTTPS" будет отключен.
@@ -3387,6 +3453,17 @@
           Если задано значение False, запросы на запрет блокировки экрана будут восприниматься как запросы на запрет блокировки системы.</translation>
 <translation id="7177857088692019405">Быстрая разблокировка</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
+<translation id="7187447094921703950">Включает режим пиковой нагрузки.
+
+          Режим пиковой нагрузки позволяет экономить энергию, ежедневно минимизируя использование переменного тока в период высокой нагрузки на электрическую сеть. Для каждого буднего дня можно указать время, в которое режим пиковой нагрузки будет включаться и отключаться. Пока этот режим активен, система будет использовать энергию аккумулятора, даже если устройство подключено к сети переменного тока, пока заряд батареи остается выше заданного порогового значения. Когда действие режима закончится, система будет использовать энергию переменного тока, если устройство подключено к электрической сети, но батарея при этом заряжаться не будет. Система вернется к штатному режиму работы (использование сети переменного тока одновременно с зарядом батареи) в указанное время начала зарядки (Charge Start).
+
+          Если задано значение True, а правила <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_NAME" /> и <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_NAME" /> настроены, режим пиковой нагрузки всегда будет включен, если устройство его поддерживает.
+
+          Если задано значение False, режим пиковой нагрузки всегда будет отключен.
+
+          Если вы настроите это правило, пользователи не смогут его изменить или переопределить.
+
+          Если не настроить это правило, изначально режим пиковой нагрузки будет отключен и пользователи не смогут его включить.</translation>
 <translation id="718956142899066210">Разрешенные типы подключений для загрузки обновлений</translation>
 <translation id="7190286937411178540">Включить выделение объектов, выбранных с помощью клавиатуры (специальная возможность)</translation>
 <translation id="7194407337890404814">Название поисковой системы по умолчанию</translation>
@@ -4011,6 +4088,17 @@
 
           Если правило не настроено, использование серверов ретрансляции будет разрешено.</translation>
 <translation id="8382184662529825177">Включает удаленную проверку защиты контента для устройства</translation>
+<translation id="8382693763260501307">Включает расширенный режим зарядки батареи.
+
+          Расширенный режим зарядки позволяет максимально использовать ресурс батареи. В этом режиме система применяет стандартный алгоритм зарядки и другие технологии, чтобы сохранить заряд батареи в нерабочие часы. В рабочие часы используется быстрая зарядка. Для каждого дня недели указывается начало и продолжительность периода, в течение которого система будет использоваться больше всего.
+
+          Если установлено значение True и настроено правило <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_NAME" />, расширенный режим зарядки будет всегда включен при условии, что он поддерживается на устройстве.
+
+          Если задано значение False, расширенный режим зарядки будет всегда отключен.
+
+          Если вы настроите это правило, пользователи не смогут его изменить или переопределить.
+
+          Если не настроить это правило, расширенный режим зарядки будет отключен и пользователи не смогут его включить.</translation>
 <translation id="838870586332499308">Включить роуминг данных</translation>
 <translation id="8390049129576938611">Отключить встроенное средство просмотра PDF-файлов в <ph name="PRODUCT_NAME" /> и разрешить пользователю открывать их в приложении, установленном по умолчанию.
 
@@ -4213,9 +4301,15 @@
       Если правило настроено, то набор приложений зафиксирован и пользователь не может изменить его.
 
       Если правило не настроено, пользователь может изменить список приложений, закрепленных на панели запуска.</translation>
+<translation id="8779504970846195767">Позволяет указать пороговое значение заряда батареи в процентах при использовании режима пиковой нагрузки.
+
+          Используется, только если для правила <ph name="DEVICE_POWER_PEAK_SHIFT_ENABLED_NAME" /> задано значение True.
+
+          Если не настроить это правило или не задать для него значение, режим пиковой нагрузки всегда будет отключен.</translation>
 <translation id="8798099450830957504">По умолчанию</translation>
 <translation id="8800453707696044281">Установить уровень заряда в процентах, при котором будет прекращаться зарядка</translation>
 <translation id="8801680448782904838">Уведомлять пользователя о том, что рекомендуется или требуется перезапустить браузер или устройство</translation>
+<translation id="8802816494059596691">Для имен хостов, указанных в списке этого правила, не будет проверяться использование механизма HSTS (он позволяет изменить протокол, по которому осуществляются запросы, с HTTP на HTTPS). В списке правила могут быть только одноуровневые имена. Имена хостов необходимо нормализовать: доменные имена, содержащие символы национальных алфавитов, должны быть преобразованы в формат A-Label, а буквы из таблицы ASCII должны быть строчными. Это правило действует только для определенных имен хостов, указанных в списке. На субдомены оно не распространяется.</translation>
 <translation id="8818173863808665831">Отправка сведений о географическом местоположении устройства.
 
       Если это правило не настроено или настроено неверно, данные о местоположении не отправляются.</translation>
@@ -4374,6 +4468,17 @@
       Если в значении правила есть токен, указывающий на сборку Quick Fix Build, она будет установлена на устройстве (если это не запрещено другим правилом).
 
       Если правило не настроено или в его значении нет токена, указывающего на сборку Quick Fix Build, сборка установлена не будет. Если на устройстве уже есть сборка Quick Fix Build, а правило не настроено или его значение не указывает на Quick Fix Build, будет установлена стандартная сборка (если это не запрещено другим правилом).</translation>
+<translation id="9053158112041032237">Определяет, какое правило используется для управления режимом зарядки батареи.
+
+          С помощью этого правила можно контролировать процесс зарядки, чтобы увеличить время работы от батареи и свести к минимуму ее износ.
+
+          Если выбран пользовательский режим зарядки батареи, необходимо указать значения для правил <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_START_CHARGING_NAME" /> и <ph name="DEVICE_BATTERY_CHARGE_CUSTOM_STOP_CHARGING_NAME" />.
+
+          Когда это правило настроено, применяется выбранный режим зарядки батареи при условии, что он поддерживается на устройстве.
+
+          Если правило не настроено и устройство поддерживает эту возможность, применяется стандартный режим зарядки батареи, и пользователи не могут его изменить.
+
+          Примечание. Если настроено правило <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" />, его значение будет иметь приоритет над этим правилом.</translation>
 <translation id="9054012305936267950">Это правило определяет, должен ли выполняться вход в браузере. Оно позволяет указать, может ли пользователь входить в <ph name="PRODUCT_NAME" /> с помощью учетных данных своего аккаунта, и настроить доступность связанных с аккаунтом функций (например, синхронизации Chrome).
 
       Если для правила выбрано значение Disable browser sign-in (Отключить вход в браузере), пользователь не сможет выполнить вход в браузере и работать с сервисами, связанными с аккаунтом. В этом случае некоторые функции браузера, например синхронизация Chrome, будут недоступны. Если это значение выбрано уже после того, как пользователь выполнил вход, то при следующем запуске Chrome произойдет автоматический выход из аккаунта. При этом данные профиля (пароли, закладки и т. д.) будут сохранены. Пользователь по-прежнему сможет входить в веб-сервисы Google, например Gmail.
diff --git a/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java b/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java
index f23c48a..c9c4e262 100644
--- a/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java
+++ b/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java
@@ -37,26 +37,21 @@
     }
 
     private long mNativeIdentityManager;
-    private IdentityMutator mIdentityMutator;
 
     private final ObserverList<Observer> mObservers = new ObserverList<>();
 
     /**
      * Called by native to create an instance of IdentityManager.
-     * @param identityMutator can be null if native's IdentityManager received a null
-     * IdentityMutator, this happens in tests.
      */
     @CalledByNative
-    static private IdentityManager create(
-            long nativeIdentityManager, @Nullable IdentityMutator identityMutator) {
+    private static IdentityManager create(long nativeIdentityManager) {
         assert nativeIdentityManager != 0;
-        return new IdentityManager(nativeIdentityManager, identityMutator);
+        return new IdentityManager(nativeIdentityManager);
     }
 
     @VisibleForTesting
-    public IdentityManager(long nativeIdentityManager, IdentityMutator identityMutator) {
+    public IdentityManager(long nativeIdentityManager) {
         mNativeIdentityManager = nativeIdentityManager;
-        mIdentityMutator = identityMutator;
     }
 
     /**
@@ -120,14 +115,6 @@
                         mNativeIdentityManager, email);
     }
 
-    /*
-     * Returns pointer to the object used to change the signed-in state of the
-     * primary account.
-     */
-    public IdentityMutator getIdentityMutator() {
-        return mIdentityMutator;
-    }
-
     @NativeMethods
     interface Natives {
         public boolean hasPrimaryAccount(long nativeIdentityManager);
diff --git a/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java b/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java
index 112d363..172f5f3 100644
--- a/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java
+++ b/components/signin/public/identity_manager/android/java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java
@@ -16,8 +16,10 @@
 public class IdentityMutator {
     private static final String TAG = "IdentityMutator";
 
-    private final long mNativePrimaryAccountMutator;
-    private final long mNativeIdentityManager;
+    // Pointer to native PrimaryAccountMutator, not final because of destroy().
+    private long mNativePrimaryAccountMutator;
+    // Pointer to native IdentityManager, not final because of destroy().
+    private long mNativeIdentityManager;
 
     @CalledByNative
     private IdentityMutator(long nativePrimaryAccountMutator, long nativeIdentityManager) {
@@ -28,6 +30,15 @@
     }
 
     /**
+     * Called by native IdentityManager upon KeyedService's shutdown
+     */
+    @CalledByNative
+    private void destroy() {
+        mNativeIdentityManager = 0;
+        mNativePrimaryAccountMutator = 0;
+    }
+
+    /**
      * Marks the account with |account_id| as the primary account, and returns whether the operation
      * succeeded or not. To succeed, this requires that:
      *   - the account is known by the IdentityManager.
diff --git a/components/signin/public/identity_manager/identity_manager.cc b/components/signin/public/identity_manager/identity_manager.cc
index acb0fde..2b7719d 100644
--- a/components/signin/public/identity_manager/identity_manager.cc
+++ b/components/signin/public/identity_manager/identity_manager.cc
@@ -100,7 +100,7 @@
     UpdateUnconsentedPrimaryAccount();
 
 #if defined(OS_ANDROID)
-  base::android::ScopedJavaLocalRef<jobject> java_identity_mutator =
+  java_identity_mutator_ =
       primary_account_mutator_
           ? Java_IdentityMutator_Constructor(
                 base::android::AttachCurrentThread(),
@@ -109,8 +109,7 @@
           : nullptr;
 
   java_identity_manager_ = Java_IdentityManager_create(
-      base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this),
-      java_identity_mutator);
+      base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this));
 #endif
 }
 
@@ -127,6 +126,9 @@
   if (java_identity_manager_)
     Java_IdentityManager_destroy(base::android::AttachCurrentThread(),
                                  java_identity_manager_);
+  if (java_identity_mutator_)
+    Java_IdentityMutator_destroy(base::android::AttachCurrentThread(),
+                                 java_identity_mutator_);
 #endif
 }
 
@@ -427,6 +429,12 @@
   return base::android::ScopedJavaLocalRef<jobject>(java_identity_manager_);
 }
 
+base::android::ScopedJavaLocalRef<jobject>
+IdentityManager::GetIdentityMutatorJavaObject() {
+  DCHECK(java_identity_manager_);
+  return base::android::ScopedJavaLocalRef<jobject>(java_identity_mutator_);
+}
+
 void IdentityManager::ForceRefreshOfExtendedAccountInfo(
     const CoreAccountId& account_id) {
   DCHECK(HasAccountWithRefreshToken(account_id));
diff --git a/components/signin/public/identity_manager/identity_manager.h b/components/signin/public/identity_manager/identity_manager.h
index 0e97401..e15acf7 100644
--- a/components/signin/public/identity_manager/identity_manager.h
+++ b/components/signin/public/identity_manager/identity_manager.h
@@ -451,6 +451,9 @@
   // Get the reference on the java IdentityManager.
   base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
 
+  // Provide the reference on the java IdentityMutator.
+  base::android::ScopedJavaLocalRef<jobject> GetIdentityMutatorJavaObject();
+
   // This method has the contractual assumption that the account is a known
   // account and has as its semantics that it fetches the account info for the
   // account, triggering an OnExtendedAccountInfoUpdated() callback if the info
@@ -686,6 +689,8 @@
 #if defined(OS_ANDROID)
   // Java-side IdentityManager object.
   base::android::ScopedJavaGlobalRef<jobject> java_identity_manager_;
+  // Java-side IdentityMutator object.
+  base::android::ScopedJavaGlobalRef<jobject> java_identity_mutator_;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(IdentityManager);
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index ea2cdc3..0488093a 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -168,6 +168,7 @@
 <translation id="1734878702283171397">የሥርዓት አስተዳዳሪውን ለማነጋገር ይሞክሩ።</translation>
 <translation id="1740951997222943430">ትክክለኛ የአገልግሎት ማብቂያ ወር ያስገቡ</translation>
 <translation id="1743520634839655729">በሚቀጥለው ጊዜ በበለጠ ፍጥነት ለመክፈል ካርድዎን እና የማስከፈያ አድራሻዎን በGoogle መለያዎ እና በዚህ መሣሪያ ላይ ያስቀምጡ።</translation>
+<translation id="1743570585616704562">አልታወቀም</translation>
 <translation id="1745880797583122200">የእርስዎ አሳሽ ይተዳደራል</translation>
 <translation id="17513872634828108">ትሮችን ክፈት</translation>
 <translation id="1753706481035618306">የገጽ ቁጥር</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 55b4696..3406bdb 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">‏"هناك برامج على جهاز الكمبيوتر تمنع اتصال Chrome بالويب بأمان" (أجهزة الكمبيوتر المزوّدة بنظام التشغيل Windows فقط)</translation>
 <translation id="1294154142200295408">صيغ سطر الأوامر</translation>
 <translation id="129553762522093515">المغلقة حديثًا</translation>
+<translation id="1298536327547837046">فحص البرامج الضارة</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />جرّب محو ملفات تعريف الارتباط<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">الميزات المتوقفة</translation>
 <translation id="1320233736580025032">‏Prc1 (مغلف)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">جرّب الاتصال بمشرف النظام.</translation>
 <translation id="1740951997222943430">أدخِل شهر انتهاء صلاحية صحيح</translation>
 <translation id="1743520634839655729">‏للدفع بشكلٍ أسرع في المرة القادمة، يمكنك حفظ البطاقة والاسم وعنوان إرسال الفواتير في حسابك على Google وفي هذا الجهاز.</translation>
+<translation id="1743570585616704562">لم يتم التعرف عليها</translation>
 <translation id="1745880797583122200">إدارة متصفِّحك</translation>
 <translation id="17513872634828108">علامات التبويب المفتوحة</translation>
 <translation id="1753706481035618306">رقم الصفحة</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">إلغاء الدفع</translation>
 <translation id="3207960819495026254">تمت إضافتها إلى الإشارات المرجعية.</translation>
 <translation id="3209034400446768650">إمكانية تحصيل الصفحة للرسوم</translation>
+<translation id="3215092763954878852">‏تعذّر استخدام WebAuthn</translation>
 <translation id="3225919329040284222">قدم الخادم شهادة لا تتطابق مع التوقعات المضمّنة. تم تضمين هذه التوقعات للحصول على مواقع ويب موثوقة وآمنة جدًا لتوفير الحماية لك.</translation>
 <translation id="3226128629678568754">اضغط على زر إعادة التحميل لإعادة إرسال البيانات المطلوبة لتحميل الصفحة.</translation>
 <translation id="3227137524299004712">الميكروفون</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{بدون}=1{من موقع واحد }two{من موقعين (#) }few{من # مواقع }many{من # موقعًا }other{من # موقع }}</translation>
 <translation id="397105322502079400">جارٍ الحساب...</translation>
 <translation id="3973234410852337861">تم حظر <ph name="HOST_NAME" /></translation>
+<translation id="3981540111851280311">‏فعَّل <ph name="ENROLLMENT_DOMAIN" /> "الحماية من التهديدات من خلال Chrome Enterprise" على متصفحك. تتضمن ميزة "الحماية من التهديدات من خلال Chrome Enterprise" إذن الوصول إلى بعض بياناتك.</translation>
 <translation id="3987940399970879459">أقل من ميغابايت واحد</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{صفحة ويب واحدة مجاورة}zero{# صفحات ويب مجاورة}two{صفحتا ويب (#) مجاورتان}few{# صفحات ويب مجاورة}many{# صفحة ويب مجاورة}other{# صفحة ويب مجاورة}}</translation>
 <translation id="4030383055268325496">تراجع عن الإ&amp;ضافة</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">إعادة تعيين كلمة المرور</translation>
 <translation id="4279811152705618813">يدير <ph name="ENROLLMENT_DOMAIN" /> الجهاز <ph name="DEVICE_TYPE" />.</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{‏تم حفظ هذه البطاقة في حسابك على Google}zero{‏تم حفظ هذه البطاقات في حسابك على Google}two{‏تم حفظ هاتين البطاقتين في حسابك على Google}few{‏تم حفظ هذه البطاقات في حسابك على Google}many{‏تم حفظ هذه البطاقات في حسابك على Google}other{‏تم حفظ هذه البطاقات في حسابك على Google}}</translation>
+<translation id="428847186335018806">‏عليك فحص الملفات التي تم تنزيلها أو تحميلها في Chrome.</translation>
 <translation id="42981349822642051">توسيع</translation>
 <translation id="4302965934281694568">‏Chou3 (مغلف)</translation>
 <translation id="4305817255990598646">تبديل</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">خطأ في عملية التحقق: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4506599922270137252">الاتصال بمشرف النظام</translation>
 <translation id="450710068430902550">المشاركة مع المشرف</translation>
+<translation id="4508814173490746936">تعذُّر استخدام رقم التعريف باللمس</translation>
 <translation id="4510487217173779431">‏Chou4 (مغلف)</translation>
 <translation id="4515275063822566619">‏يتم أخذ البطاقات والعناوين من Chrome وحسابك على Google (<ph name="ACCOUNT_EMAIL" />)، ويمكنك إدارتها في <ph name="BEGIN_LINK" />الإعدادات<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">‏Comm-10 (مغلف)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">كلمة مرور غير صحيحة</translation>
 <translation id="5056549851600133418">مقالات لك</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(ملف تعريف ارتباط واحد قيد الاستخدام)}zero{(لا تتوفر أيُّ ملفات تعريف ارتباط (#) قيد الاستخدام)}two{(ملفا تعريف ارتباط (#) قيد الاستخدام)}few{(# ملفات تعريف ارتباط قيد الاستخدام)}many{(# ملف تعريف ارتباط قيد الاستخدام)}other{(# ملف تعريف ارتباط قيد الاستخدام)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />التحقق من عنوان الخادم الوكيل<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">شهادة الخادم ليست صالحة حاليًا.</translation>
 <translation id="5087580092889165836">إضافة بطاقة</translation>
@@ -993,6 +1000,7 @@
 <translation id="6302269476990306341">‏جارٍ إيقاف "مساعد Google" على Chrome</translation>
 <translation id="6305205051461490394">يتعذر الوصول إلى <ph name="URL" />.</translation>
 <translation id="6321917430147971392">التحقق من إعدادات نظام أسماء النطاقات</translation>
+<translation id="6322182122604171028">‏تعذُّر استخدام Windows Hello</translation>
 <translation id="6328639280570009161">تجربة إيقاف التنبؤ بإجراءات الشبكة</translation>
 <translation id="6328784461820205019">‏"لا يتمتَّع اتصالك بالخصوصية" أو "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" أو "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" أو "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" أو "خطأ في شهادة طبقة المقابس الآمنة (SSL)"</translation>
 <translation id="6328786501058569169">هذا الموقع مخادع</translation>
@@ -1016,6 +1024,7 @@
 <translation id="6433490469411711332">تعديل معلومات الاتصال</translation>
 <translation id="6433595998831338502">رفض <ph name="HOST_NAME" /> الاتصال.</translation>
 <translation id="6434309073475700221">إلغاء</translation>
+<translation id="6435221585574090192">‏يمكنك مشاركة البيانات حول الأحداث الأمنية التي تم وضع علامة عليها من خلال "الحماية من التهديدات باستخدام Chrome Enterprise" مع المشرف. يمكن أن تتضمن هذه البيانات عناوين URL للصفحة واسم الملف والبيانات الوصفية للملف واسم المستخدم لجهازك واسم مستخدم Chrome.</translation>
 <translation id="6440503408713884761">تم تجاهله</translation>
 <translation id="6446163441502663861">‏Kahu (مغلف)</translation>
 <translation id="6446608382365791566">إضافة مزيد من المعلومات</translation>
@@ -1060,6 +1069,7 @@
 <translation id="6671697161687535275">‏هل تريد إزالة اقتراح النموذج من Chromium؟</translation>
 <translation id="6685834062052613830">الخروج وإكمال الإعداد</translation>
 <translation id="6689271823431384964">‏يتيح لك Chrome حفظ بطاقاتك في حسابك على Google لأنك سجَّلت الدخول. يمكنك تغيير هذا السلوك في الإعدادات. ويتم الحصول على اسم حامل البطاقة من حسابك.</translation>
+<translation id="6707256370811247129">‏عليك فحص محتوى ذاكرة التخزين المؤقت والملفات التي تم تنزيلها أو تحميلها في Chrome.</translation>
 <translation id="6710213216561001401">السابق</translation>
 <translation id="6710594484020273272">&lt;إدخال عبارة البحث&gt;</translation>
 <translation id="671076103358959139">الرمز المميّز للتسجيل:</translation>
@@ -1078,6 +1088,7 @@
 <translation id="681021252041861472">الحقل مطلوب</translation>
 <translation id="6810899417690483278">رقم تعريف التخصيص</translation>
 <translation id="6825578344716086703">‏لقد حاولت الوصول إلى <ph name="DOMAIN" />، ولكن قدَّم الخادم شهادة موقّعة باستخدام خوارزمية توقيع ضعيفة (مثل SHA-1)، مما يعني أن بيانات اعتماد الأمان التي قدمها الخادم من المحتمل أنه تم تزييفها، وأن الخادم قد لا يكون هو الخادم الذي تتوقعه (قد تكون على اتصال بأحد المهاجمين).</translation>
+<translation id="6826370046007623921">منع فقدان البيانات</translation>
 <translation id="6831043979455480757">ترجمة</translation>
 <translation id="6839929833149231406">المنطقة</translation>
 <translation id="6852204201400771460">هل تريد إعادة تحميل التطبيق؟</translation>
@@ -1224,6 +1235,7 @@
 <translation id="7542995811387359312">تم إيقاف الملء التلقائي لبطاقة الائتمان لأن هذا النموذج لا يستخدم اتصالاً آمنًا.</translation>
 <translation id="7548892272833184391">إصلاح أخطاء الاتصال</translation>
 <translation id="7549584377607005141">تتطلب صفحة الويب هذه البيانات التي أدخلتها في وقت سابق لعرضها بشكل صحيح. يمكنك إرسال هذه المعلومات مرة أخرى ولكن بذلك ستكرر أي إجراء اتخذته هذه الصفحة في وقت سابق.</translation>
+<translation id="7550637293666041147">‏اسم مستخدم الجهاز واسم مستخدم Chrome</translation>
 <translation id="7552846755917812628">جرّب النصائح التالية:</translation>
 <translation id="7554791636758816595">علامة تبويب جديدة</translation>
 <translation id="7564049878696755256">‏قد تفقد إمكانية الوصول إلى حسابك على <ph name="ORG_NAME" /> أو تتعرض لسرقة هويتك. لذا يوصي Chrome بتغيير كلمة مرورك الآن.</translation>
@@ -1238,6 +1250,7 @@
 <translation id="7610193165460212391">القيمة خارج النطاق <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">تاريخ انتهاء الصلاحية: <ph name="EXPIRATION_MONTH" /> / <ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">‏لديك فعلاً بيانات تم تشفيرها باستخدام نسخة أخرى من كلمة مرور حسابك في Google. يُرجى إدخالها أدناه.</translation>
+<translation id="7625784245512586808">‏الحماية من التهديدات من خلال Chrome Enterprise</translation>
 <translation id="7633909222644580952">تقارير الأعطال وبيانات الأداء</translation>
 <translation id="7637571805876720304">‏هل تريد إزالة بطاقة الائتمان من Chromium؟</translation>
 <translation id="7638605456503525968">المنافذ التسلسلية</translation>
@@ -1348,6 +1361,7 @@
 <translation id="8211406090763984747">الاتصال بموقع الويب هذا آمن</translation>
 <translation id="8218327578424803826">الموقع الذي تم تعيينه:</translation>
 <translation id="8220146938470311105">‏C7/C6 (مغلف)</translation>
+<translation id="8220639454292072926">إعداد التقارير للمؤسسة</translation>
 <translation id="8225771182978767009">اختار الشخص الذي أعد جهاز الكمبيوتر حظر موقع الويب هذا.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />، <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">يمكنك فتح الصفحة في علامة تبويب جديدة للتصفح المتخفي</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">‏تعذر العثور على &lt;/abbr&gt;عنوان نظام أسماء النطاقات (DNS)‏&lt;abbr id="dnsDefinition"&gt; لـ <ph name="HOST_NAME" />. جارٍ تشخيص المشكلة.</translation>
 <translation id="874846938927089722">بطاقات الائتمان وبطاقات الدفع المسبق المقبولة</translation>
 <translation id="874918643257405732">وضع إشارة مرجعية لعلامة التبويب هذه</translation>
+<translation id="8751426954251315517">يُرجى إعادة المحاولة في المرة القادمة</translation>
 <translation id="8759274551635299824">هذه البطاقة منتهية الصلاحية</translation>
 <translation id="8761567432415473239">‏عثر ‏‫التصفح الآمن من Google‬ مؤخرًا <ph name="BEGIN_LINK" />على برامج ضارة<ph name="END_LINK" /> في <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">‏جهاز USB</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">ملخص الطلبات</translation>
 <translation id="9089260154716455634">سياسة "التوقف عن العمل":</translation>
 <translation id="9095388113577226029">مزيد من اللغات...</translation>
+<translation id="9098981495403789647">‏فعَّل مشرفك ميزة "الحماية من التهديدات من خلال Chrome Enterprise" على متصفحك. تتضمن ميزة "الحماية من التهديدات من خلال Chrome Enterprise" إذن الوصول إلى بعض بياناتك.</translation>
 <translation id="9103872766612412690">‏يستخدم <ph name="SITE" /> التشفير عادة لحماية معلوماتك. عندما حاول Chromium الاتصال بموقع <ph name="SITE" /> هذه المرة، أرجَع موقع الويب بيانات اعتماد غير عادية وغير صحيحة. وقد يحدث هذا عندما يحاول أحد المهاجمين التظاهر بأنه موقع <ph name="SITE" />، أو إذا قاطعت شاشة تسجيل دخول Wi-Fi الاتصال. ولكن لا تزال معلوماتك آمنة نظرًا لأن Chromium أوقَفَ الاتصال قبل تبادل أي بيانات.</translation>
 <translation id="9106062320799175032">إضافة عنوان إرسال الفواتير</translation>
 <translation id="9114524666733003316">جارٍ التحقق من البطاقة...</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 310d5f26..be91d40 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">„Софтуер на компютъра ви пречи на Chrome да се свърже безопасно с мрежата“ (само на компютри под Windows)</translation>
 <translation id="1294154142200295408">Варианти във формат за командния ред</translation>
 <translation id="129553762522093515">Наскоро затворени</translation>
+<translation id="1298536327547837046">Сканиране за злонамерен софтуер</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Опитайте да изчистите „бисквитките“ си<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Оттеглени функции</translation>
 <translation id="1320233736580025032">Prc1 (плик)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Свържете се със системния администратор.</translation>
 <translation id="1740951997222943430">Въведете валиден месец на изтичане</translation>
 <translation id="1743520634839655729">За да платите по-бързо следващия път, запазете картата, името и адреса си за фактуриране в профила си в Google и на това устройство.</translation>
+<translation id="1743570585616704562">Не е разпознато</translation>
 <translation id="1745880797583122200">Браузърът ви е управляван</translation>
 <translation id="17513872634828108">Отворени раздели</translation>
 <translation id="1753706481035618306">Номер на страницата</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Анулиране на плащането</translation>
 <translation id="3207960819495026254">С отметка</translation>
 <translation id="3209034400446768650">Страницата може да ви таксува</translation>
+<translation id="3215092763954878852">WebAuthn не можа да се използва</translation>
 <translation id="3225919329040284222">Сървърът предостави сертификат, който не съответства на вградените очаквания. Те са включени за определени уебсайтове с голяма степен на сигурност, за да ви предпазим.</translation>
 <translation id="3226128629678568754">Натиснете бутона за презареждане, за да изпратите отново данните, необходими за отварянето на страницата.</translation>
 <translation id="3227137524299004712">Микрофон</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Няма}=1{От 1 сайт }other{От # сайта }}</translation>
 <translation id="397105322502079400">Изчислява се...</translation>
 <translation id="3973234410852337861">Хостът <ph name="HOST_NAME" /> е блокиран</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> активира защитата срещу заплахи на Chrome Enterprise в браузъра ви. Функцията има достъп до някои от данните ви.</translation>
 <translation id="3987940399970879459">По-малко от 1 МБ</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 уеб страница в близост}other{# уеб страници в близост}}</translation>
 <translation id="4030383055268325496">&amp;Отмяна на добавянето</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">Повторно задаване на паролата</translation>
 <translation id="4279811152705618813">Вашият <ph name="DEVICE_TYPE" /> се управлява от <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Тази карта е запазена в профила ви в Google}other{Тези карти са запазени в профила ви в Google}}</translation>
+<translation id="428847186335018806">Сканиране на файловете, които изтегляте или качвате в Chrome.</translation>
 <translation id="42981349822642051">Разгъване</translation>
 <translation id="4302965934281694568">Chou3 (плик)</translation>
 <translation id="4305817255990598646">Превключване</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">Грешка при потвърждаването: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Свържете се със системния администратор.</translation>
 <translation id="450710068430902550">Споделяне с администратор</translation>
+<translation id="4508814173490746936">Touch ID не можа да се използва</translation>
 <translation id="4510487217173779431">Chou4 (плик)</translation>
 <translation id="4515275063822566619">Картите и адресите са от Chrome и профила ви в Google (<ph name="ACCOUNT_EMAIL" />). Можете да ги управлявате от <ph name="BEGIN_LINK" />настройките<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (плик)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">Грешна парола</translation>
 <translation id="5056549851600133418">Статии за вас</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(използва се 1)}other{(използват се #)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Проверете адреса на прокси сървъра<ph name="END_LINK" />.</translation>
 <translation id="5087286274860437796">Понастоящем сертификатът на сървъра не е валиден.</translation>
 <translation id="5087580092889165836">Добавяне на карта</translation>
@@ -991,6 +998,7 @@
 <translation id="6302269476990306341">Google Асистент в Chrome се спира</translation>
 <translation id="6305205051461490394">Няма достъп до <ph name="URL" />.</translation>
 <translation id="6321917430147971392">Проверете настройките си за DNS</translation>
+<translation id="6322182122604171028">Windows Hello не можа да се използва</translation>
 <translation id="6328639280570009161">Опитайте да деактивирате предвижданията за мрежата</translation>
 <translation id="6328784461820205019">„Връзката ви не е частна“, „&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;“, „&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;“, „&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;“, „&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;“ или „Грешка при SSL сертификатите“</translation>
 <translation id="6328786501058569169">Този сайт е измамен</translation>
@@ -1014,6 +1022,7 @@
 <translation id="6433490469411711332">Редактиране на информацията за връзка</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> отказа да установи връзка.</translation>
 <translation id="6434309073475700221">Отхвърляне</translation>
+<translation id="6435221585574090192">Споделяне с администратора ви на данни за събития, свързани със сигурността, за които е сигнализирано от функцията на Chrome Enterprise за защита срещу заплахи. Данните може да включват URL адреси на страници, имена и метаданни на файлове, както и потребителското име на устройството ви и в Chrome.</translation>
 <translation id="6440503408713884761">Пренебрегнато</translation>
 <translation id="6446163441502663861">Kahu (плик)</translation>
 <translation id="6446608382365791566">Добавяне на още информация</translation>
@@ -1058,6 +1067,7 @@
 <translation id="6671697161687535275">Предложението за формуляри да се премахне ли от Chromium?</translation>
 <translation id="6685834062052613830">Излизане от профила и завършване на настройването</translation>
 <translation id="6689271823431384964">Chrome предлага да запази картите ви в профила ви в Google, защото сте влезли в него. Можете да промените това поведение от настройките. Името на картодържателя е от профила ви.</translation>
+<translation id="6707256370811247129">Сканиране на съдържанието на кеша и файловете, които изтегляте или качвате в Chrome.</translation>
 <translation id="6710213216561001401">Предишна</translation>
 <translation id="6710594484020273272">&lt;Въведете дума за търсене&gt;</translation>
 <translation id="671076103358959139">Означение за регистриране:</translation>
@@ -1076,6 +1086,7 @@
 <translation id="681021252041861472">Задължително поле</translation>
 <translation id="6810899417690483278">Идент. № на персонализирането</translation>
 <translation id="6825578344716086703">Опитахте да отворите <ph name="DOMAIN" />, но сървърът предостави сертификат, подписан със слаб алгоритъм (например SHA-1). Това означава, че идентификационните данни за сигурност от сървъра може да са фалшифицирани и той да не е този, който очаквате (възможно е да сте се свързали с извършител на атака).</translation>
+<translation id="6826370046007623921">Защита от загуба на данни</translation>
 <translation id="6831043979455480757">Превод</translation>
 <translation id="6839929833149231406">Район</translation>
 <translation id="6852204201400771460">Искате ли да презаредите приложението?</translation>
@@ -1222,6 +1233,7 @@
 <translation id="7542995811387359312">Автоматичното попълване на кредитната карта е деактивирано, защото този формуляр не използва защитена връзка.</translation>
 <translation id="7548892272833184391">Отстраняване на грешки във връзката</translation>
 <translation id="7549584377607005141">За да се покаже правилно тази уеб страница, са необходими по-рано въведените от вас данни. Можете да ги изпратите отново, но така ще повторите всяко изпълнено от нея действие.</translation>
+<translation id="7550637293666041147">Потребителското име на устройството ви и в Chrome</translation>
 <translation id="7552846755917812628">Изпробвайте следните съвети:</translation>
 <translation id="7554791636758816595">Нов раздел</translation>
 <translation id="7564049878696755256">Възможно е да загубите достъп до профила си в/ъв <ph name="ORG_NAME" /> или самоличността ви да бъде открадната. Chrome препоръчва да промените паролата си сега.</translation>
@@ -1236,6 +1248,7 @@
 <translation id="7610193165460212391">Стойността е извън обхват <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Валидна до: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Вече имате данни, които са шифровани посредством друга версия на паролата за профила ви в Google. Моля, въведете я по-долу.</translation>
+<translation id="7625784245512586808">Защита срещу заплахи на Chrome Enterprise</translation>
 <translation id="7633909222644580952">Данни за ефективността и сигнали за сривове</translation>
 <translation id="7637571805876720304">Кредитната карта да се премахне ли от Chromium?</translation>
 <translation id="7638605456503525968">Серийни портове</translation>
@@ -1346,6 +1359,7 @@
 <translation id="8211406090763984747">Връзката е защитена</translation>
 <translation id="8218327578424803826">Зададено местоположение:</translation>
 <translation id="8220146938470311105">C7/C6 (плик)</translation>
+<translation id="8220639454292072926">Корпоративно отчитане</translation>
 <translation id="8225771182978767009">Човекът, който е настроил компютъра, е блокирал този сайт.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" /> и <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Отворете страницата в нов раздел в режим „инкогнито“.</translation>
@@ -1428,6 +1442,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;DNS адресът&lt;/abbr&gt; на <ph name="HOST_NAME" /> не можа да бъде намерен. Проблемът се диагностицира.</translation>
 <translation id="874846938927089722">Приемани кредитни и предплатени карти</translation>
 <translation id="874918643257405732">Запазване на отметка към този раздел</translation>
+<translation id="8751426954251315517">Моля, опитайте отново следващия път</translation>
 <translation id="8759274551635299824">Тази карта е изтекла</translation>
 <translation id="8761567432415473239">Google Безопасно сърфиране наскоро <ph name="BEGIN_LINK" />откри опасни програми<ph name="END_LINK" /> на <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB устройство</translation>
@@ -1492,6 +1507,7 @@
 <translation id="9080712759204168376">Обобщена информация за поръчката</translation>
 <translation id="9089260154716455634">Пренебрегване на правилата:</translation>
 <translation id="9095388113577226029">Още езици...</translation>
+<translation id="9098981495403789647">Администраторът ви е активирал защитата срещу заплахи на Chrome Enterprise в браузъра ви. Функцията има достъп до някои от данните ви.</translation>
 <translation id="9103872766612412690">Обикновено <ph name="SITE" /> използва шифроване за защита на информацията ви. Когато Chromium опита да установи връзка с/ъс <ph name="SITE" /> този път, уебсайтът върна необичайни и неправилни идентификационни данни. Това може да се случи, когато извършител на атака пробва да се представи за <ph name="SITE" /> или връзката е прекъсната от екран за вход в Wi-Fi. Информацията ви продължава да е защитена, тъй като Chromium спря връзката, преди да бъдат обменени данни.</translation>
 <translation id="9106062320799175032">Добавяне на адрес за фактуриране</translation>
 <translation id="9114524666733003316">Картата се потвърждава...</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 2c26f764..75cdf03 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">সিস্টেম প্রশাসকের সাথে যোগাযোগ করে দেখুন।</translation>
 <translation id="1740951997222943430">মেয়াদ শেষ হওয়ার মাসের সঠিক মান লিখুন</translation>
 <translation id="1743520634839655729">পরেরবার আরও দ্রুত পেমেন্ট করা জন্য আপনার কার্ড, নাম এবং বিলিং ঠিকানাটি Google অ্যাকাউন্টে এবং এই ডিভাইসে সেভ করে রাখুন।</translation>
+<translation id="1743570585616704562">শনাক্ত করা যায়নি</translation>
 <translation id="1745880797583122200">আপনার ব্রাউজারটি ম্যানেজ করা হচ্ছে</translation>
 <translation id="17513872634828108">খোলা ট্যাব</translation>
 <translation id="1753706481035618306">পৃষ্ঠা সংখ্যা</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 148b118..6952ffd7 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"L'ordinador conté programari que impedeix que Chrome es connecti de manera segura al web" (només en ordinadors Windows)</translation>
 <translation id="1294154142200295408">Variacions de la línia d'ordres</translation>
 <translation id="129553762522093515">Tancades recentment</translation>
+<translation id="1298536327547837046">Escaneig per detectar programari maliciós</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Esborreu les galetes<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funcions obsoletes</translation>
 <translation id="1320233736580025032">Prc1 (sobre)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Proveu de contactar amb l'administrador del sistema.</translation>
 <translation id="1740951997222943430">Introdueix un mes de caducitat vàlid</translation>
 <translation id="1743520634839655729">Perquè la propera vegada puguis pagar més ràpidament, desa la targeta, el nom i l'adreça de facturació al Compte de Google i en aquest dispositiu.</translation>
+<translation id="1743570585616704562">No s'ha reconegut</translation>
 <translation id="1745880797583122200">El navegador està gestionat</translation>
 <translation id="17513872634828108">Pestanyes obertes</translation>
 <translation id="1753706481035618306">Número de pàgina</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Cancel·la el pagament</translation>
 <translation id="3207960819495026254">S'ha afegit a les adreces d'interès.</translation>
 <translation id="3209034400446768650">És possible que la pàgina faci un càrrec de diners</translation>
+<translation id="3215092763954878852">No s'ha pogut utilitzar WebAuthn</translation>
 <translation id="3225919329040284222">El servidor ha presentat un certificat que no coincideix amb les expectatives integrades. Les expectatives s'inclouen perquè determinats llocs web d'alta seguretat us protegeixin.</translation>
 <translation id="3226128629678568754">Premeu el botó de tornar a carregar per tornar a enviar les dades necessàries per carregar la pàgina.</translation>
 <translation id="3227137524299004712">Micròfon</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Cap}=1{D'1 lloc }other{De # llocs }}</translation>
 <translation id="397105322502079400">S’està calculant...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> està bloquejat</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ha activat la protecció contra amenaces de Chrome Enterprise al navegador. La protecció contra amenaces de Chrome Enterprise té accés a algunes de les teves dades.</translation>
 <translation id="3987940399970879459">Menys d'1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{Hi ha 1 pàgina web a prop}other{Hi ha # pàgines web a prop}}</translation>
 <translation id="4030383055268325496">&amp;Desfés l'addició</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">Restableix la contrasenya</translation>
 <translation id="4279811152705618813"><ph name="ENROLLMENT_DOMAIN" /> gestiona el dispositiu <ph name="DEVICE_TYPE" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Aquesta targeta s'ha desat al Compte de Google}other{Aquestes targetes s'han desat al Compte de Google}}</translation>
+<translation id="428847186335018806">Escaneja els fitxers que baixes o penges a Chrome.</translation>
 <translation id="42981349822642051">Desplega</translation>
 <translation id="4302965934281694568">Chou3 (sobre)</translation>
 <translation id="4305817255990598646">Canvia</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">Error de validació: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Contacteu amb l'administrador del sistema</translation>
 <translation id="450710068430902550">Comparteix informació amb l'administrador</translation>
+<translation id="4508814173490746936">No s'ha pogut fer servir Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (sobre)</translation>
 <translation id="4515275063822566619">Les targetes i les adreces s'obtenen de Chrome i del teu Compte de Google (<ph name="ACCOUNT_EMAIL" />). Pots gestionar-les des de <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (sobre)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">Contrasenya incorrecta</translation>
 <translation id="5056549851600133418">Articles que et poden interessar</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 en ús)}other{(# en ús)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Comproveu l'adreça del servidor intermediari<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">En aquest moment el certificat del servidor no és vàlid.</translation>
 <translation id="5087580092889165836">Afegeix una targeta</translation>
@@ -991,6 +998,7 @@
 <translation id="6302269476990306341">S'està aturant l'Assistent de Google a Chrome</translation>
 <translation id="6305205051461490394">No es pot accedir a <ph name="URL" />.</translation>
 <translation id="6321917430147971392">Reviseu la configuració de DNS</translation>
+<translation id="6322182122604171028">No s'ha pogut fer servir Windows Hello</translation>
 <translation id="6328639280570009161">Proveu de desactivar la predicció de xarxa</translation>
 <translation id="6328784461820205019">"La connexió no és privada", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" o "Error de certificat SSL"</translation>
 <translation id="6328786501058569169">Aquest lloc web és enganyós</translation>
@@ -1014,6 +1022,7 @@
 <translation id="6433490469411711332">Edita la informació de contacte</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> no ens ha permès establir la connexió.</translation>
 <translation id="6434309073475700221">Descarta</translation>
+<translation id="6435221585574090192">Comparteix amb el teu administrador les dades sobre esdeveniments de seguretat que marqui la protecció contra amenaces de Chrome Enterprise. Per exemple, URL de pàgines, noms i metadades de fitxers, el nom d'usuari del dispositiu i el nom d'usuari de Chrome.</translation>
 <translation id="6440503408713884761">Ignorada</translation>
 <translation id="6446163441502663861">Kahu (sobre)</translation>
 <translation id="6446608382365791566">Afegeix més informació</translation>
@@ -1058,6 +1067,7 @@
 <translation id="6671697161687535275">Voleu suprimir el suggeriment de formulari de Chromium?</translation>
 <translation id="6685834062052613830">Tanqueu la sessió i completeu la configuració</translation>
 <translation id="6689271823431384964">Chrome t'està oferint desar les targetes al Compte de Google perquè tens la sessió iniciada. Pots canviar aquest comportament a la configuració. El nom del titular de la targeta s'obté del teu compte.</translation>
+<translation id="6707256370811247129">Escaneja el contingut de la memòria cau i dels fitxers que baixis o pengis a Chrome.</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Escriviu el terme de cerca&gt;</translation>
 <translation id="671076103358959139">Testimoni d'inscripció:</translation>
@@ -1076,6 +1086,7 @@
 <translation id="681021252041861472">Camp obligatori</translation>
 <translation id="6810899417690483278">Identificador de personalització</translation>
 <translation id="6825578344716086703">Has provat d'accedir a <ph name="DOMAIN" />, però el servidor ha presentat un certificat signat mitjançant un algoritme de signatura dèbil (com ara SHA-1). Això indica que les credencials de seguretat que ha presentat el servidor podrien haver estat falsificades i que pot ser que el servidor no sigui el que esperaves (és possible que t'estiguis comunicant amb un atacant).</translation>
+<translation id="6826370046007623921">Prevenció de pèrdua de dades</translation>
 <translation id="6831043979455480757">Tradueix</translation>
 <translation id="6839929833149231406">Àrea</translation>
 <translation id="6852204201400771460">Vols tornar a carregar l'aplicació?</translation>
@@ -1222,6 +1233,7 @@
 <translation id="7542995811387359312">L'emplenament automàtic de targetes de crèdit està desactivat perquè el formulari no utilitza una connexió segura.</translation>
 <translation id="7548892272833184391">Solucionar errors de connexió</translation>
 <translation id="7549584377607005141">Aquesta pàgina web necessita dades que heu introduït anteiorment per poder mostrar-la correctament. Podeu tornar a enviar les dades, però es tornarà a repetir qualsevol acció que la pàgina hagi dut a terme prèviament.</translation>
+<translation id="7550637293666041147">El nom d'usuari del dispositiu i el nom d'usuari de Chrome</translation>
 <translation id="7552846755917812628">Prova els consells següents:</translation>
 <translation id="7554791636758816595">Pestanya nova</translation>
 <translation id="7564049878696755256">Podries perdre l'accés al compte de <ph name="ORG_NAME" /> o tenir problemes de suplantació d'identitat. Chrome et recomana que canviïs la contrasenya ara.</translation>
@@ -1236,6 +1248,7 @@
 <translation id="7610193165460212391">El valor es troba fora de l'interval <ph name="VALUE" /> .</translation>
 <translation id="7613889955535752492">Data de caducitat: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Ja teniu dades encriptades amb una versió diferent de la contrasenya del vostre compte de Google. Introduïu-la a continuació.</translation>
+<translation id="7625784245512586808">Protecció contra amenaces de Chrome Enterprise</translation>
 <translation id="7633909222644580952">Dades de rendiment i informes d'errors</translation>
 <translation id="7637571805876720304">Voleu suprimir la targeta de crèdit de Chromium?</translation>
 <translation id="7638605456503525968">Ports en sèrie</translation>
@@ -1346,6 +1359,7 @@
 <translation id="8211406090763984747">La connexió és segura</translation>
 <translation id="8218327578424803826">Ubicació assignada:</translation>
 <translation id="8220146938470311105">C7/C6 (sobre)</translation>
+<translation id="8220639454292072926">Informes d'empresa</translation>
 <translation id="8225771182978767009">La persona que ha configurat l'ordinador ha bloquejat aquest lloc.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Obre la pàgina en una pestanya d'incògnit nova</translation>
@@ -1428,6 +1442,7 @@
 <translation id="8740359287975076522">No s'ha trobat l'&lt;abbr id="dnsDefinition"&gt;adreça DNS&lt;/abbr&gt; de <ph name="HOST_NAME" />. S'està diagnosticant el problema.</translation>
 <translation id="874846938927089722">Targetes de crèdit i de prepagament acceptades</translation>
 <translation id="874918643257405732">Afegeix aquesta pestanya a les adreces d'interès</translation>
+<translation id="8751426954251315517">Torna-ho a provar la propera vegada</translation>
 <translation id="8759274551635299824">Aquesta targeta ha caducat</translation>
 <translation id="8761567432415473239">Recentment, amb Navegació segura de Google s'han <ph name="BEGIN_LINK" />detectat programes perjudicials<ph name="END_LINK" /> al lloc <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Dispositiu USB</translation>
@@ -1492,6 +1507,7 @@
 <translation id="9080712759204168376">Resum de la comanda</translation>
 <translation id="9089260154716455634">Política fora de l'horari:</translation>
 <translation id="9095388113577226029">Més idiomes...</translation>
+<translation id="9098981495403789647">L'administrador ha activat la protecció contra amenaces de Chrome Enterprise al navegador. La protecció contra amenaces de Chrome Enterprise té accés a algunes de les teves dades.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> utilitza normalment l'encriptació per protegir la vostra informació. En aquesta ocasió, quan Chromium ha provat de connectar-se a <ph name="SITE" />, el lloc web ha enviat credencials poc comunes i incorrectes. Pot ser que un atacant estigui provant de fer-se passar per <ph name="SITE" /> o que una pantalla d'inici de sessió a la xarxa Wi-Fi hagi interromput la connexió. En qualsevol cas, la vostra informació continua estant segura, perquè Chromium ha aturat la connexió abans no s'intercanviés cap dada.</translation>
 <translation id="9106062320799175032">Afegeix una adreça de facturació</translation>
 <translation id="9114524666733003316">S'està confirmant la targeta...</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 4f3b33e05..e8f0a70 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">Software na počítači Chromu brání v bezpečném připojení k webu (pouze počítače se systémem Windows)</translation>
 <translation id="1294154142200295408">Varianty pro příkazový řádek</translation>
 <translation id="129553762522093515">Nedávno zavřené</translation>
+<translation id="1298536327547837046">Vyhledávání malwaru</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Zkuste vymazat soubory cookie<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funkce, které již nejsou podporovány</translation>
 <translation id="1320233736580025032">Prc1 (obálka)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Zkuste kontaktovat administrátora systému.</translation>
 <translation id="1740951997222943430">Zadejte platný měsíc vypršení platnosti</translation>
 <translation id="1743520634839655729">Abyste příště mohli zaplatit rychleji, uložte si kartu, jméno a fakturační adresu do účtu Google a do tohoto zařízení.</translation>
+<translation id="1743570585616704562">Nerozpoznáno</translation>
 <translation id="1745880797583122200">Váš prohlížeč je spravován</translation>
 <translation id="17513872634828108">Otevřené karty</translation>
 <translation id="1753706481035618306">Číslo stránky</translation>
@@ -423,6 +425,7 @@
 <translation id="320323717674993345">Zrušit platbu</translation>
 <translation id="3207960819495026254">Přidáno do záložek</translation>
 <translation id="3209034400446768650">Stránka může účtovat poplatky</translation>
+<translation id="3215092763954878852">Ověření WebAuthn nebylo možné použít</translation>
 <translation id="3225919329040284222">Server se prokázal certifikátem, který neodpovídá integrovaným očekáváním. Tato očekávaní jsou zahrnuta u určitých webových stránek s vysokou úrovní zabezpečení kvůli vaší ochraně.</translation>
 <translation id="3226128629678568754">Klikněte na tlačítko Načíst znovu. Tím znovu odešlete údaje potřebné k načtení stránky.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -558,6 +561,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Žádné}=1{Z 1 webu }few{Z # webů }many{Z # webu }other{Z # webů }}</translation>
 <translation id="397105322502079400">Probíhá výpočet…</translation>
 <translation id="3973234410852337861">Web <ph name="HOST_NAME" /> je blokován</translation>
+<translation id="3981540111851280311">Organizace <ph name="ENROLLMENT_DOMAIN" /> ve vašem prohlížeči zapnula ochranu Chrome Enterprise před hrozbami. Ochrana Chrome Enterprise před hrozbami má přístup k některým vašim datům.</translation>
 <translation id="3987940399970879459">Méně než 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 webová stránka v okolí}few{# webové stránky v okolí}many{# webové stránky v okolí}other{# webových stránek v okolí}}</translation>
 <translation id="4030383055268325496">&amp;Vrátit přidání zpět</translation>
@@ -626,6 +630,7 @@
 <translation id="4277028893293644418">Resetovat heslo</translation>
 <translation id="4279811152705618813">Váš <ph name="DEVICE_TYPE" /> spravuje doména <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Tato karta byla uložena do vašeho učtu Google}few{Tyto karty byly uloženy do vašeho účtu Google.}many{Tyto karty byly uloženy do vašeho účtu Google.}other{Tyto karty byly uloženy do vašeho účtu Google.}}</translation>
+<translation id="428847186335018806">Prohledávat soubory, které v Chromu stahujete nebo nahráváte.</translation>
 <translation id="42981349822642051">Rozbalit</translation>
 <translation id="4302965934281694568">Chou3 (obálka)</translation>
 <translation id="4305817255990598646">Přepínač</translation>
@@ -664,6 +669,7 @@
 <translation id="4506176782989081258">Chyba ověřování: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4506599922270137252">Kontaktovat administrátora systému</translation>
 <translation id="450710068430902550">Sdílení s administrátorem</translation>
+<translation id="4508814173490746936">Touch ID nebylo možné použít</translation>
 <translation id="4510487217173779431">Chou4 (obálka)</translation>
 <translation id="4515275063822566619">Karty a adresy pocházejí z Chromu a z vašeho účtu Google (<ph name="ACCOUNT_EMAIL" />). Můžete je spravovat v <ph name="BEGIN_LINK" />Nastavení<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (obálka)</translation>
@@ -759,6 +765,7 @@
 <translation id="5045550434625856497">Nesprávné heslo</translation>
 <translation id="5056549851600133418">Články pro vás</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(používá se 1)}few{(používají se #)}many{(používá se #)}other{(používá se #)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Zkontrolovat adresu proxy serveru<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Certifikát serveru v tuto chvíli není platný.</translation>
 <translation id="5087580092889165836">Přidat kartu</translation>
@@ -986,6 +993,7 @@
 <translation id="6302269476990306341">Zastavování Asistenta Google v Chromu</translation>
 <translation id="6305205051461490394">Web <ph name="URL" /> není dostupný.</translation>
 <translation id="6321917430147971392">Zkontrolujte nastavení DNS</translation>
+<translation id="6322182122604171028">Windows Hello nebylo možné použít</translation>
 <translation id="6328639280570009161">Zkuste deaktivovat předvídání akcí sítě</translation>
 <translation id="6328784461820205019">Vaše připojení není soukromé, &lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;, &lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;, &lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;, &lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt; nebo Chyba certifikátu SSL</translation>
 <translation id="6328786501058569169">Tento web je klamavý</translation>
@@ -1009,6 +1017,7 @@
 <translation id="6433490469411711332">Upravit kontaktní údaje</translation>
 <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> odmítl připojení.</translation>
 <translation id="6434309073475700221">Zahodit</translation>
+<translation id="6435221585574090192">Sdílet s administrátorem údaje o událostech zabezpečení nahlášené ochranou Chrome Enterprise před hrozbami. Sdílené údaje mohou zahrnovat adresy URL stránek, názvy souborů, metadata souborů, uživatelské jméno použité v zařízení a uživatelské jméno použité v Chromu.</translation>
 <translation id="6440503408713884761">Ignorováno</translation>
 <translation id="6446163441502663861">Kahu (obálka)</translation>
 <translation id="6446608382365791566">Přidání dalších informací</translation>
@@ -1053,6 +1062,7 @@
 <translation id="6671697161687535275">Odstranit návrh položky formuláře z prohlížeče Chromium?</translation>
 <translation id="6685834062052613830">Odhlaste se a dokončete nastavení</translation>
 <translation id="6689271823431384964">Chrome vám nabízí uložení karet do účtu Google, protože jste přihlášeni. Toto chování můžete změnit v Nastavení. Jméno držitele karty pochází z vašeho účtu.</translation>
+<translation id="6707256370811247129">Prohledávat obsah mezipaměti a soubory, které v Chromu stahujete nebo nahráváte.</translation>
 <translation id="6710213216561001401">Předchozí</translation>
 <translation id="6710594484020273272">&lt;Zadejte vyhledávací dotaz&gt;</translation>
 <translation id="671076103358959139">Registrační token:</translation>
@@ -1071,6 +1081,7 @@
 <translation id="681021252041861472">Povinné pole</translation>
 <translation id="6810899417690483278">ID přizpůsobení</translation>
 <translation id="6825578344716086703">Pokusili jste se přejít na web <ph name="DOMAIN" />, server však předložil certifikát podepsaný slabým algoritmem (například SHA-1). To znamená, že bezpečnostní pověření předložená serverem mohou být falešná a může se jednat o úplně jiný server, než předpokládáte (můžete komunikovat s útočníkem).</translation>
+<translation id="6826370046007623921">Ochrana před únikem informací</translation>
 <translation id="6831043979455480757">Přeložit</translation>
 <translation id="6839929833149231406">Oblast</translation>
 <translation id="6852204201400771460">Načíst aplikaci znovu?</translation>
@@ -1216,6 +1227,7 @@
 <translation id="7542995811387359312">Automatické vyplňování údajů platební karty je deaktivováno, protože tento formulář nepoužívá zabezpečené připojení.</translation>
 <translation id="7548892272833184391">Oprava chyb připojení</translation>
 <translation id="7549584377607005141">Tato stránka potřebuje ke správnému zobrazení data, která jste zadali dříve. Tyto údaje můžete odeslat znovu, ale zopakujete tím všechny akce, které tato stránka již předtím provedla.</translation>
+<translation id="7550637293666041147">Vaše uživatelské jméno na zařízení a v Chromu</translation>
 <translation id="7552846755917812628">Vyzkoušejte následující tipy:</translation>
 <translation id="7554791636758816595">Nová karta</translation>
 <translation id="7564049878696755256">Mohli byste ztratit přístup k účtu <ph name="ORG_NAME" /> nebo by mohlo dojít k odcizení vaší identity. Doporučujeme vám okamžitě změnit heslo.</translation>
@@ -1230,6 +1242,7 @@
 <translation id="7610193165460212391">Hodnota <ph name="VALUE" /> je mimo rozsah.</translation>
 <translation id="7613889955535752492">Vypršení platnosti: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Již máte údaje, které jsou šifrovány pomocí jiné verze vašeho hesla k účtu Google. Zadejte toto heslo prosím níže.</translation>
+<translation id="7625784245512586808">Ochrana Chrome Enterprise před hrozbami</translation>
 <translation id="7633909222644580952">Údaje o výkonu a přehledy selhání</translation>
 <translation id="7637571805876720304">Odstranit platební kartu z prohlížeče Chromium?</translation>
 <translation id="7638605456503525968">Sériové porty</translation>
@@ -1340,6 +1353,7 @@
 <translation id="8211406090763984747">Připojení je zabezpečené</translation>
 <translation id="8218327578424803826">Přiřazené místo:</translation>
 <translation id="8220146938470311105">C7/C6 (obálka)</translation>
+<translation id="8220639454292072926">Přehledy pro podniky</translation>
 <translation id="8225771182978767009">Uživatel, který tento počítač nastavoval, se rozhodl tento web blokovat.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Otevřete stránku na nové anonymní kartě</translation>
@@ -1423,6 +1437,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;Adresu DNS&lt;/abbr&gt; webu <ph name="HOST_NAME" /> nelze najít. Diagnostikování problému…</translation>
 <translation id="874846938927089722">Přijímané kreditní a předplacené karty</translation>
 <translation id="874918643257405732">Přidat tuto kartu do záložek</translation>
+<translation id="8751426954251315517">Zkuste to znovu později</translation>
 <translation id="8759274551635299824">Platnost této karty vypršela</translation>
 <translation id="8761567432415473239">Bezpečné prohlížení Google na webu <ph name="SITE" /> nedávno <ph name="BEGIN_LINK" />nalezlo škodlivé programy<ph name="END_LINK" />.</translation>
 <translation id="8763927697961133303">Zařízení USB</translation>
@@ -1487,6 +1502,7 @@
 <translation id="9080712759204168376">Přehled objednávky</translation>
 <translation id="9089260154716455634">Zásada Off-Hours:</translation>
 <translation id="9095388113577226029">Další jazyky...</translation>
+<translation id="9098981495403789647">Administrátor ve vašem prohlížeči zapnul ochranu Chrome Enterprise před hrozbami. Ochrana Chrome Enterprise před hrozbami má přístup k některým vašim datům.</translation>
 <translation id="9103872766612412690">Web <ph name="SITE" /> vaše informace běžně chrání šifrováním. Když se prohlížeč Chromium k webu <ph name="SITE" /> pokusil připojit tentokrát, web vrátil neobvyklé a nesprávné identifikační údaje. K tomuto problému může dojít, pokud se za web <ph name="SITE" /> pokouší vydávat nějaký útočník nebo pokud bylo připojení přerušeno přihlašovací obrazovkou sítě Wi-Fi. Vaše informace jsou i nadále v bezpečí, protože prohlížeč Chromium připojení přerušil dříve, než došlo k odeslání jakýchkoliv dat.</translation>
 <translation id="9106062320799175032">Přidání fakturační adresy</translation>
 <translation id="9114524666733003316">Ověřování karty...</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index c9ae7d05..5d523219 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Der er software på computeren, som forhindrer, at Chrome kan oprette en sikker forbindelse til nettet" (kun Windows-computere)</translation>
 <translation id="1294154142200295408">Variationer i kommandolinjer</translation>
 <translation id="129553762522093515">Senest lukkede</translation>
+<translation id="1298536327547837046">Malwarescanning</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Prøv at rydde dine cookies<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Udfasede funktioner</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Prøv at kontakte systemadministratoren.</translation>
 <translation id="1740951997222943430">Angiv en gyldig udløbsmåned</translation>
 <translation id="1743520634839655729">Gem dit kort, dit navn og din faktureringsadresse på din Google-konto og denne enhed for at betale hurtigere næste gang.</translation>
+<translation id="1743570585616704562">Ikke genkendt</translation>
 <translation id="1745880797583122200">Din browser administreres</translation>
 <translation id="17513872634828108">Åbne faner</translation>
 <translation id="1753706481035618306">Sidetal</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Annuller betaling</translation>
 <translation id="3207960819495026254">Gemt som bogmærke</translation>
 <translation id="3209034400446768650">Siden kan opkræve betaling</translation>
+<translation id="3215092763954878852">WebAuthn kunne ikke anvendes</translation>
 <translation id="3225919329040284222">Serveren præsenterede et certifikat, der ikke svarer til de indbyggede forventninger. Disse forventninger medtages for bestemte websites med høj sikkerhed for at beskytte dig.</translation>
 <translation id="3226128629678568754">Tryk på genindlæsningsknappen for at genindsende de data, der er nødvendige for at indlæse siden.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Ingen}=1{1 website }one{# website }other{# websites }}</translation>
 <translation id="397105322502079400">Beregner...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> er blokeret</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> har aktiveret Chrome Enterprise Threat Protection i din browser. Chrome Enterprise Threat Protection har adgang til nogle af dine data.</translation>
 <translation id="3987940399970879459">Mindre end 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 webside tæt på}one{# webside tæt på}other{# websider tæt på}}</translation>
 <translation id="4030383055268325496">&amp;Fortryd tilføjelse</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">Nulstil adgangskoden</translation>
 <translation id="4279811152705618813">Din <ph name="DEVICE_TYPE" /> administreres af <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Kortet er gemt på din Google-konto}one{Kortet er gemt på din Google-konto}other{Kortene er gemt på din Google-konto}}</translation>
+<translation id="428847186335018806">Scan filer, du downloader eller uploader i Chrome.</translation>
 <translation id="42981349822642051">Udvid</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">Skift</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">Valideringsfejl: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Kontakte systemadministratoren</translation>
 <translation id="450710068430902550">Deling med administrator</translation>
+<translation id="4508814173490746936">Touch ID kunne ikke anvendes</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">Kort og adresser stammer fra Chrome og din Google-konto (<ph name="ACCOUNT_EMAIL" />). Du kan administrere dem i <ph name="BEGIN_LINK" />Indstillinger<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">Ugyldig adgangskode</translation>
 <translation id="5056549851600133418">Artikler til dig</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 i brug)}one{(# i brug)}other{(# i brug)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Tjekke proxy-adressen<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Serverens certifikatet er ikke gyldigt i øjeblikket.</translation>
 <translation id="5087580092889165836">Tilføj kort</translation>
@@ -994,6 +1001,7 @@
 <translation id="6302269476990306341">Google Assistent i Chrome stopper</translation>
 <translation id="6305205051461490394"><ph name="URL" /> kan ikke nås.</translation>
 <translation id="6321917430147971392">Kontrollér dine DNS-indstillinger</translation>
+<translation id="6322182122604171028">Windows Hello kunne ikke anvendes</translation>
 <translation id="6328639280570009161">Prøv at deaktivere netværksforslag</translation>
 <translation id="6328784461820205019">"Din forbindelse er ikke privat" eller "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" eller "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" eller "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" eller "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" eller "SSL-certifikatfejl"</translation>
 <translation id="6328786501058569169">Dette website er vildledende</translation>
@@ -1017,6 +1025,7 @@
 <translation id="6433490469411711332">Rediger kontaktoplysninger</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> nægtede at oprette forbindelse.</translation>
 <translation id="6434309073475700221">Kasser</translation>
+<translation id="6435221585574090192">Del data om sikkerhedshændelser, som rapporteres af Chrome Enterprise Threat Protection, med din administrator. Disse data kan indeholde webadresser, filnavne og -metadata, brugernavnet for din enhed samt dit Chrome-brugernavn.</translation>
 <translation id="6440503408713884761">Ignoreret</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">Tilføj flere oplysninger</translation>
@@ -1061,6 +1070,7 @@
 <translation id="6671697161687535275">Vil du fjerne formularforslag fra Chromium?</translation>
 <translation id="6685834062052613830">Log ud, og fuldfør konfigurationen</translation>
 <translation id="6689271823431384964">Chrome tilbyder at gemme dine kort på din Google-konto, fordi du er logget ind. Du kan ændre dette i indstillingerne. Kortindehaverens navn hentes fra din konto.</translation>
+<translation id="6707256370811247129">Scan indholdet af cachen og de filer, som du downloader eller uploader i Chrome.</translation>
 <translation id="6710213216561001401">Forrige</translation>
 <translation id="6710594484020273272">&lt;Indtast søgeterm&gt;</translation>
 <translation id="671076103358959139">Tilmeldingstoken:</translation>
@@ -1079,6 +1089,7 @@
 <translation id="681021252041861472">Skal udfyldes</translation>
 <translation id="6810899417690483278">Tilpasnings-id</translation>
 <translation id="6825578344716086703">Du forsøgte at få fat i <ph name="DOMAIN" />, men serveren præsenterede et certifikat, der er signeret med en svag signaturalgoritme (f.eks. SHA-1). Det betyder, at sikkerhedsoplysningerne fra serveren kan være forfalskede, og at serveren muligvis ikke er den server, som du forventede (du kommunikerer muligvis med en person med ondsindede hensigter).</translation>
+<translation id="6826370046007623921">Forebyggelse af datatab</translation>
 <translation id="6831043979455480757">Oversæt</translation>
 <translation id="6839929833149231406">Område</translation>
 <translation id="6852204201400771460">Vil du genindlæse appen?</translation>
@@ -1225,6 +1236,7 @@
 <translation id="7542995811387359312">Automatisk udfyldning af kreditkort er deaktiveret, fordi formularen ikke bruger en sikker forbindelse.</translation>
 <translation id="7548892272833184391">Ret forbindelsesfejl</translation>
 <translation id="7549584377607005141">Denne webside kræver data, du tidligere har indtastet, før den kan vises korrekt. Du kan sende disse data igen, men hvis du gør dette, gentager du enhver handling, som denne side tidligere har foretaget.</translation>
+<translation id="7550637293666041147">Brugernavnet for din enhed og dit Chrome-brugernavn</translation>
 <translation id="7552846755917812628">Prøv de følgende tips:</translation>
 <translation id="7554791636758816595">Ny fane</translation>
 <translation id="7564049878696755256">Du kan miste adgangen til din <ph name="ORG_NAME" />-konto eller udsættes for identitetstyveri. Chrome anbefaler, at du skifter din adgangskode nu.</translation>
@@ -1239,6 +1251,7 @@
 <translation id="7610193165460212391">Værdien er uden for intervallet <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Udløbsdato: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Du har allerede data, der er krypteret med en anden version af adgangskoden til din Google-konto. Angiv adgangskoden i feltet nedenfor.</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">Effektivitetsdata og nedbrudsrapporter</translation>
 <translation id="7637571805876720304">Vil du fjerne kreditkortet fra Chromium?</translation>
 <translation id="7638605456503525968">Serieporte</translation>
@@ -1349,6 +1362,7 @@
 <translation id="8211406090763984747">Forbindelsen er sikker</translation>
 <translation id="8218327578424803826">Tildelt placering:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)</translation>
+<translation id="8220639454292072926">Rapportering til arbejdsbrug</translation>
 <translation id="8225771182978767009">Den person, der har konfigureret denne computer, har valgt at blokere dette website.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Åbn siden på en ny inkognitofane</translation>
@@ -1432,6 +1446,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;DNS-adressen&lt;/abbr&gt; for <ph name="HOST_NAME" /> blev ikke fundet. Diagnosticerer problemet.</translation>
 <translation id="874846938927089722">Accepterede kreditkort og forudbetalte kort</translation>
 <translation id="874918643257405732">Tilføj denne fane som bogmærke</translation>
+<translation id="8751426954251315517">Prøv igen næste gang</translation>
 <translation id="8759274551635299824">Kortet er udløbet</translation>
 <translation id="8761567432415473239">Beskyttet browsing i Google har for nylig <ph name="BEGIN_LINK" />fundet skadelige programmer<ph name="END_LINK" /> på <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB-enhed</translation>
@@ -1496,6 +1511,7 @@
 <translation id="9080712759204168376">Bestillingsoversigt</translation>
 <translation id="9089260154716455634">Politik uden for åbningstiden:</translation>
 <translation id="9095388113577226029">Flere sprog...</translation>
+<translation id="9098981495403789647">Din administrator har aktiveret Chrome Enterprise Threat Protection i din browser. Chrome Enterprise Threat Protection har adgang til nogle af dine data.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> bruger normalt kryptering til at beskytte dine oplysninger. Da Chromium forsøgte at oprette forbindelse til <ph name="SITE" /> denne gang, returnerede websitet usædvanlige og forkerte loginoplysninger. Dette kan skyldes, at en hacker forsøger at udgive sig for at være <ph name="SITE" />, eller at en Wi-Fi-loginskærm har forstyrret forbindelsen. Dine oplysninger er stadig sikre, idet Chromium afbrød forbindelsen, inden der blev udvekslet data.</translation>
 <translation id="9106062320799175032">Tilføj faktureringsadresse</translation>
 <translation id="9114524666733003316">Bekræfter kort...</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 574d17d..16a4b63 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Software auf Ihrem Computer verhindert, dass Chrome eine sichere Internetverbindung herstellt" (nur Windows-Computer)</translation>
 <translation id="1294154142200295408">Befehlszeilen-Varianten</translation>
 <translation id="129553762522093515">Kürzlich geschlossen</translation>
+<translation id="1298536327547837046">Malware-Scan</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Löschen Sie Ihre Cookies<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Eingestellte Funktionen</translation>
 <translation id="1320233736580025032">Prc1 (Umschlag)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Setzen Sie sich mit dem Systemadministrator in Verbindung.</translation>
 <translation id="1740951997222943430">Geben Sie einen gültigen Ablaufmonat ein</translation>
 <translation id="1743520634839655729">Damit Zahlungen zukünftig schneller abgewickelt werden können, speichern Sie Ihre Kreditkartendaten, Ihren Namen und Ihre Rechnungsadresse in Ihrem Google-Konto und auf diesem Gerät.</translation>
+<translation id="1743570585616704562">Nicht erkannt</translation>
 <translation id="1745880797583122200">Ihr Browser wird verwaltet</translation>
 <translation id="17513872634828108">Geöffnete Tabs</translation>
 <translation id="1753706481035618306">Seitennummer</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Zahlung abbrechen</translation>
 <translation id="3207960819495026254">Mit einem Lesezeichen versehen</translation>
 <translation id="3209034400446768650">Auf der Seite wird möglicherweise Geld verlangt</translation>
+<translation id="3215092763954878852">WebAuthn konnte nicht verwendet werden</translation>
 <translation id="3225919329040284222">Der Server hat ein Zertifikat übermittelt, das nicht mit den integrierten Erwartungen übereinstimmt. Diese Erwartungen sind zu Ihrem Schutz in bestimmten Websites mit hohen Sicherheitsstandards enthalten.</translation>
 <translation id="3226128629678568754">Klicken Sie auf die Schaltfläche zum erneuten Laden, um die für das Laden der Seite erforderlichen Daten noch einmal zu senden.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -560,6 +563,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Keine}=1{Von 1 Website }other{Von # Websites }}</translation>
 <translation id="397105322502079400">Wird berechnet...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> ist gesperrt</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> hat das Chrome Enterprise-Sicherheitssystem für Ihren Browser aktiviert. Das Chrome Enterprise-Sicherheitssystem kann auf manche Ihrer Daten zugreifen.</translation>
 <translation id="3987940399970879459">Weniger als 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 Webseite in der Nähe}other{# Webseiten in der Nähe}}</translation>
 <translation id="4030383055268325496">&amp;Hinzufügen rückgängig machen</translation>
@@ -628,6 +632,7 @@
 <translation id="4277028893293644418">Passwort zurücksetzen</translation>
 <translation id="4279811152705618813">Ihr <ph name="DEVICE_TYPE" /> wird von <ph name="ENROLLMENT_DOMAIN" /> verwaltet</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Diese Karte wurde in Ihrem Google-Konto gespeichert}other{Diese Karten wurden in Ihrem Google-Konto gespeichert}}</translation>
+<translation id="428847186335018806">Dateien scannen, die Sie in Chrome herunter- oder hochladen.</translation>
 <translation id="42981349822642051">Maximieren</translation>
 <translation id="4302965934281694568">Chou3 (Umschlag)</translation>
 <translation id="4305817255990598646">Wechseln</translation>
@@ -666,6 +671,7 @@
 <translation id="4506176782989081258">Fehler bei der Überprüfung: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Kontakt mit dem Systemadministrator aufnehmen</translation>
 <translation id="450710068430902550">Datenfreigabe an Administrator</translation>
+<translation id="4508814173490746936">Touch ID konnte nicht verwendet werden</translation>
 <translation id="4510487217173779431">Chou4 (Umschlag)</translation>
 <translation id="4515275063822566619">Karten und Adressen stammen aus Chrome und aus Ihrem Google-Konto (<ph name="ACCOUNT_EMAIL" />). Sie können sie in den <ph name="BEGIN_LINK" />Einstellungen<ph name="END_LINK" /> verwalten.</translation>
 <translation id="4517607026994743406">Comm-10 (Umschlag)</translation>
@@ -761,6 +767,7 @@
 <translation id="5045550434625856497">Falsches Passwort</translation>
 <translation id="5056549851600133418">Artikel für mich</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 wird verwendet)}other{(# werden verwendet)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Proxyadresse prüfen<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Das Serverzertifikat ist zurzeit ungültig.</translation>
 <translation id="5087580092889165836">Karte hinzufügen</translation>
@@ -989,6 +996,7 @@
 <translation id="6302269476990306341">Google Assistant für Chrome wird beendet</translation>
 <translation id="6305205051461490394"><ph name="URL" /> ist nicht erreichbar.</translation>
 <translation id="6321917430147971392">Überprüfen Sie die DNS-Einstellungen.</translation>
+<translation id="6322182122604171028">Windows Hello konnte nicht verwendet werden</translation>
 <translation id="6328639280570009161">Deaktivieren Sie die Netzwerkvorhersage.</translation>
 <translation id="6328784461820205019">"Dies ist keine sichere Verbindung" oder "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" oder "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" oder "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" oder "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" oder "SSL-Zertifikatfehler"</translation>
 <translation id="6328786501058569169">Sie befinden sich auf einer betrügerischen Website</translation>
@@ -1012,6 +1020,7 @@
 <translation id="6433490469411711332">Kontaktdaten bearbeiten</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> hat die Verbindung abgelehnt.</translation>
 <translation id="6434309073475700221">Verwerfen</translation>
+<translation id="6435221585574090192">Teilen Sie Sicherheitshinweise, die vom Chrome Enterprise-Sicherheitssystem gemeldet wurden, mit Ihrem Administrator. Sie können Seiten-URLs, Dateinamen, Dateimetadaten, den Nutzernamen für Ihr Gerät und Ihren Chrome-Nutzernamen enthalten.</translation>
 <translation id="6440503408713884761">Ignoriert</translation>
 <translation id="6446163441502663861">Kahu (Umschlag)</translation>
 <translation id="6446608382365791566">Weitere Informationen hinzufügen</translation>
@@ -1056,6 +1065,7 @@
 <translation id="6671697161687535275">Vorschlag für das Formular aus Chromium entfernen?</translation>
 <translation id="6685834062052613830">Abmelden und Einrichtung abschließen</translation>
 <translation id="6689271823431384964">Chrome bietet Ihnen die Möglichkeit, die Karten in Ihrem Google-Konto zu speichern, weil Sie angemeldet sind. Sie können dies in den Einstellungen ändern. Der Name des Karteninhabers stammt aus Ihrem Konto.</translation>
+<translation id="6707256370811247129">Cache-Inhalte und Dateien scannen, die Sie in Chrome herunter- oder hochladen.</translation>
 <translation id="6710213216561001401">Zurück</translation>
 <translation id="6710594484020273272">&lt;Suchbegriff eingeben&gt;</translation>
 <translation id="671076103358959139">Registrierungstoken:</translation>
@@ -1074,6 +1084,7 @@
 <translation id="681021252041861472">Pflichtfeld</translation>
 <translation id="6810899417690483278">Personalisierungs-ID</translation>
 <translation id="6825578344716086703">Sie haben versucht, auf <ph name="DOMAIN" /> zuzugreifen, der Server hat jedoch ein Zertifikat übermittelt, das einen schwachen Signaturalgorithmus verwendet, zum Beispiel SHA-1. Das bedeutet, dass die vom Server übermittelten Sicherheitsinformationen gefälscht sein könnten und es sich möglicherweise gar nicht um den erwarteten Server handelt, sondern Sie mit einem Hacker kommunizieren.</translation>
+<translation id="6826370046007623921">Schutz vor Datenverlust</translation>
 <translation id="6831043979455480757">Übersetzen</translation>
 <translation id="6839929833149231406">Region</translation>
 <translation id="6852204201400771460">App neu laden?</translation>
@@ -1220,6 +1231,7 @@
 <translation id="7542995811387359312">Die Funktion zur automatischen Ausfüllung der Kreditkartendaten ist deaktiviert, da dieses Formular keine sichere Verbindung nutzt.</translation>
 <translation id="7548892272833184391">Verbindungsfehler beheben</translation>
 <translation id="7549584377607005141">Damit diese Webseite richtig angezeigt wird, werden die Daten benötigt, die Sie vorher eingegeben haben. Sie können diese Daten noch einmal senden, dabei werden jedoch sämtliche Aktionen wiederholt, die vorher durch diese Seite ausgeführt wurden.</translation>
+<translation id="7550637293666041147">Der Nutzername für Ihr Gerät und Ihr Chrome-Nutzername</translation>
 <translation id="7552846755917812628">Probieren Sie folgende Tipps aus:</translation>
 <translation id="7554791636758816595">Neuer Tab</translation>
 <translation id="7564049878696755256">Sie könnten den Zugriff auf Ihr <ph name="ORG_NAME" />-Konto verlieren oder zum Opfer von Identitätsdiebstahl werden. Chrome empfiehlt Ihnen, Ihr Passwort jetzt zu ändern.</translation>
@@ -1234,6 +1246,7 @@
 <translation id="7610193165460212391">Wert liegt außerhalb des zulässigen Bereichs (<ph name="VALUE" />).</translation>
 <translation id="7613889955535752492">Gültig bis: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Sie verfügen bereits über Daten, die mit einem vorherigen Passwort für Ihr Google-Konto verschlüsselt wurden. Bitte geben Sie dieses Passwort unten ein.</translation>
+<translation id="7625784245512586808">Chrome Enterprise-Sicherheitssystem</translation>
 <translation id="7633909222644580952">Leistungsdaten und Absturzberichte</translation>
 <translation id="7637571805876720304">Kreditkarte aus Chromium entfernen?</translation>
 <translation id="7638605456503525968">Serielle Schnittstellen</translation>
@@ -1344,6 +1357,7 @@
 <translation id="8211406090763984747">Verbindung ist sicher</translation>
 <translation id="8218327578424803826">Zugewiesener Standort: </translation>
 <translation id="8220146938470311105">C7/C6 (Umschlag)</translation>
+<translation id="8220639454292072926">Unternehmensberichte</translation>
 <translation id="8225771182978767009">Die Person, die diesen Computer eingerichtet hat, hat diese Website gesperrt.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Seite in einem neuen Inkognito-Tab öffnen</translation>
@@ -1427,6 +1441,7 @@
 <translation id="8740359287975076522">Die &lt;abbr id="dnsDefinition"&gt;DNS-Adresse&lt;/abbr&gt; von <ph name="HOST_NAME" /> wurde nicht gefunden. Eine Problemdiagnose wird durchgeführt.</translation>
 <translation id="874846938927089722">Akzeptierte Kredit- und Prepaidkarten</translation>
 <translation id="874918643257405732">Lesezeichen für diesen Tab erstellen</translation>
+<translation id="8751426954251315517">Bitte versuchen Sie es später noch einmal</translation>
 <translation id="8759274551635299824">Diese Karte ist abgelaufen</translation>
 <translation id="8761567432415473239">Google Safe Browsing hat vor Kurzem <ph name="BEGIN_LINK" />schädliche Programme<ph name="END_LINK" /> auf <ph name="SITE" /> gefunden.</translation>
 <translation id="8763927697961133303">USB-Gerät</translation>
@@ -1492,6 +1507,7 @@
 <translation id="9080712759204168376">Bestellübersicht</translation>
 <translation id="9089260154716455634">Richtlinie für Abwesenheitszeiten:</translation>
 <translation id="9095388113577226029">Weitere Sprachen...</translation>
+<translation id="9098981495403789647">Ihr Administrator hat das Chrome Enterprise-Sicherheitssystem für Ihren Browser aktiviert. Das Chrome Enterprise-Sicherheitssystem kann auf manche Ihrer Daten zugreifen.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> schützt Ihre Daten in der Regel durch Verschlüsselung. Als Chromium dieses Mal versuchte, eine Verbindung zu <ph name="SITE" /> herzustellen, gab die Website ungewöhnliche und falsche Anmeldedaten zurück. Entweder versucht ein Angreifer, sich als <ph name="SITE" /> auszugeben, oder die Verbindung wurde durch eine WLAN-Anmeldeseite unterbrochen. Da Chromium die Verbindung vor dem Austausch von Daten unterbrochen hat, sind Ihre Informationen weiterhin sicher.</translation>
 <translation id="9106062320799175032">Rechnungsadresse hinzufügen</translation>
 <translation id="9114524666733003316">Karte wird bestätigt…</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index a1ed1c13..b1f8ab3 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Κάποιο λογισμικό στον υπολογιστή σας παρεμποδίζει την ασφαλή σύνδεση του Chrome στον ιστό" (μόνο για υπολογιστές με Windows)</translation>
 <translation id="1294154142200295408">Παραλλαγές γραμμής εντολών</translation>
 <translation id="129553762522093515">Έκλεισαν πρόσφατα</translation>
+<translation id="1298536327547837046">Σάρωση για κακόβουλο λογισμικό</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Δοκιμάστε να διαγράψετε τα cookie σας<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Λειτουργίες που καταργήθηκαν</translation>
 <translation id="1320233736580025032">Prc1 (Φάκελος)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Προσπαθήστε να επικοινωνήσετε με το διαχειριστή συστήματος.</translation>
 <translation id="1740951997222943430">Εισαγάγετε έναν έγκυρο μήνα λήξης</translation>
 <translation id="1743520634839655729">Για πιο γρήγορες πληρωμές στο μέλλον, αποθηκεύστε τα στοιχεία της κάρτας σας, το όνομα και τη διεύθυνση χρέωσης στον Λογαριασμό σας Google και σε αυτήν τη συσκευή.</translation>
+<translation id="1743570585616704562">Δεν αναγνωρίστηκε</translation>
 <translation id="1745880797583122200">Το πρόγραμμα περιήγησής σας είναι διαχειριζόμενο</translation>
 <translation id="17513872634828108">Ανοικτές καρτέλες</translation>
 <translation id="1753706481035618306">Αριθμός σελίδας</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Ακύρωση πληρωμής</translation>
 <translation id="3207960819495026254">Προστέθηκε στους σελιδοδείκτες</translation>
 <translation id="3209034400446768650">Η σελίδα ενδέχεται να σας χρεώσει</translation>
+<translation id="3215092763954878852">Δεν ήταν δυνατή η χρήση του WebAuthn</translation>
 <translation id="3225919329040284222">Ο διακομιστής παρουσίασε ένα πιστοποιητικό που δεν αντιστοιχεί στις ενσωματωμένες προϋποθέσεις. Αυτές οι προϋποθέσεις συμπεριλαμβάνονται σε συγκεκριμένους ιστότοπους υψηλής ασφάλειας για την προστασία σας.</translation>
 <translation id="3226128629678568754">Πατήστε το κουμπί της επανάληψης φόρτωσης για να υποβάλετε ξανά τα δεδομένα που απαιτούνται για τη φόρτωση της σελίδας.</translation>
 <translation id="3227137524299004712">Μικρόφωνο</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Κανένα}=1{Από 1 ιστότοπο }other{Από # ιστοτόπους }}</translation>
 <translation id="397105322502079400">Υπολογισμός…</translation>
 <translation id="3973234410852337861">Ο κεντρικός υπολογιστής <ph name="HOST_NAME" /> είναι αποκλεισμένος</translation>
+<translation id="3981540111851280311">Ο τομέας <ph name="ENROLLMENT_DOMAIN" /> έχει ενεργοποιήσει την Προστασία από απειλές του Chrome για Επιχειρήσεις στο πρόγραμμά περιήγησής σας. Η Προστασία από απειλές του Chrome για Επιχειρήσεις έχει πρόσβαση σε ορισμένα από τα δεδομένα σας.</translation>
 <translation id="3987940399970879459">Λιγότερα από 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 ιστοσελίδα σε κοντινή απόσταση}other{# ιστοσελίδες σε κοντινή απόσταση}}</translation>
 <translation id="4030383055268325496">&amp;Αναίρεση προσθήκης</translation>
@@ -633,6 +637,7 @@
 <translation id="4277028893293644418">Επαναφορά κωδικού πρόσβασης</translation>
 <translation id="4279811152705618813">Η συσκευή <ph name="DEVICE_TYPE" /> είναι διαχειριζόμενη από τον οργανισμό <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Αυτή η κάρτα αποθηκεύτηκε στον Λογαριασμό σας Google}other{Αυτές οι κάρτες αποθηκεύτηκαν στον Λογαριασμό σας Google}}</translation>
+<translation id="428847186335018806">Σάρωση των αρχείων που κατεβάζετε ή ανεβάζετε στο Chrome.</translation>
 <translation id="42981349822642051">Επέκταση</translation>
 <translation id="4302965934281694568">Chou3 (Φάκελος)</translation>
 <translation id="4305817255990598646">Εναλλαγή</translation>
@@ -671,6 +676,7 @@
 <translation id="4506176782989081258">Σφάλμα επικύρωσης: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Επικοινωνήστε με το διαχειριστή συστήματος</translation>
 <translation id="450710068430902550">Κοινοποίηση στο διαχειριστή</translation>
+<translation id="4508814173490746936">Δεν ήταν δυνατή η χρήση του Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Φάκελος)</translation>
 <translation id="4515275063822566619">Οι κάρτες και οι διευθύνσεις προέρχονται από το Chrome και τον Λογαριασμό σας Google (<ph name="ACCOUNT_EMAIL" />). Μπορείτε να τις διαχειριστείτε στις <ph name="BEGIN_LINK" />Ρυθμίσεις<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Φάκελος)</translation>
@@ -766,6 +772,7 @@
 <translation id="5045550434625856497">Λανθασμένος κωδικός πρόσβασης</translation>
 <translation id="5056549851600133418">Άρθρα για εσάς</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 σε χρήση)}other{(# σε χρήση)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Ελέγξτε τη διεύθυνση του διακομιστή μεσολάβησης<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Το πιστοποιητικό του διακομιστή δεν είναι έγκυρο αυτήν τη στιγμή.</translation>
 <translation id="5087580092889165836">Προσθήκη κάρτας</translation>
@@ -995,6 +1002,7 @@
 <translation id="6302269476990306341">Διακοπή Βοηθού Google στο Chrome</translation>
 <translation id="6305205051461490394">Δεν είναι δυνατή η πρόσβαση στο <ph name="URL" />.</translation>
 <translation id="6321917430147971392">Ελέγξτε τις ρυθμίσεις DNS</translation>
+<translation id="6322182122604171028">Δεν ήταν δυνατή η χρήση του Windows Hello</translation>
 <translation id="6328639280570009161">Δοκιμάστε να απενεργοποιήσετε την πρόβλεψη δικτύου</translation>
 <translation id="6328784461820205019">"Η σύνδεσή σας δεν είναι ιδιωτική" ή "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" ή "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" ή "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" ή "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" ή "Σφάλμα πιστοποιητικού SSL"</translation>
 <translation id="6328786501058569169">Αυτός ο ιστότοπος είναι παραπλανητικός</translation>
@@ -1018,6 +1026,7 @@
 <translation id="6433490469411711332">Επεξεργασία στοιχείων επαφής</translation>
 <translation id="6433595998831338502">Ο κεντρικός υπολογιστής <ph name="HOST_NAME" /> απέρριψε τη σύνδεση.</translation>
 <translation id="6434309073475700221">Απόρριψη</translation>
+<translation id="6435221585574090192">Κοινοποίηση δεδομένων σχετικά με συμβάντα ασφαλείας που έχουν επισημανθεί από την Προστασία από απειλές του Chrome για Επιχειρήσεις στον Διαχειριστή σας. Αυτά μπορεί να περιλαμβάνουν URL σελίδων, το όνομα αρχείου και τα μεταδεδομένα αρχείου, το όνομα χρήστη της συσκευής σας και το όνομα χρήστη Chrome.</translation>
 <translation id="6440503408713884761">Αγνοείται</translation>
 <translation id="6446163441502663861">Kahu (Φάκελος)</translation>
 <translation id="6446608382365791566">Προσθήκη περισσότερων πληροφοριών</translation>
@@ -1062,6 +1071,7 @@
 <translation id="6671697161687535275">Να καταργηθεί η πρόταση φόρμας από το Chromium;</translation>
 <translation id="6685834062052613830">Αποσυνδεθείτε και ολοκληρώστε την εγκατάσταση</translation>
 <translation id="6689271823431384964">Το Chrome προσφέρεται να αποθηκεύσει τις κάρτες σας στον Λογαριασμό σας Google, επειδή έχετε συνδεθεί. Μπορείτε να αλλάξετε αυτήν τη συμπεριφορά στις ρυθμίσεις. Το όνομα του κατόχου κάρτας προέρχεται από τον λογαριασμό σας.</translation>
+<translation id="6707256370811247129">Σάρωση των περιεχομένων της κρυφής μνήμης και των αρχείων που κατεβάζετε ή ανεβάζετε στο Chrome.</translation>
 <translation id="6710213216561001401">Προηγούμενο</translation>
 <translation id="6710594484020273272">&lt;Πληκτρολογήστε όρο αναζήτησης&gt;</translation>
 <translation id="671076103358959139">Διακριτικό εγγραφής:</translation>
@@ -1080,6 +1090,7 @@
 <translation id="681021252041861472">Υποχρεωτικό πεδίο</translation>
 <translation id="6810899417690483278">Αναγνωριστικό προσαρμογής</translation>
 <translation id="6825578344716086703">Προσπαθήσατε να μεταβείτε στον τομέα <ph name="DOMAIN" />, αλλά ο διακομιστής παρουσίασε ένα πιστοποιητικό το οποίο ήταν υπογεγραμμένο με έναν αδύναμο αλγόριθμο υπογραφής (όπως SHA-1). Αυτό σημαίνει ότι μπορεί να έχουν πλαστογραφηθεί τα διαπιστευτήρια ασφαλείας που επέδειξε ο διακομιστής και ότι αυτός ο διακομιστής ενδέχεται να μην είναι αυτό που αναμένετε (ενδέχεται να επικοινωνείτε με έναν εισβολέα).</translation>
+<translation id="6826370046007623921">Πρόληψη απώλειας δεδομένων (DLP)</translation>
 <translation id="6831043979455480757">Μετάφραση</translation>
 <translation id="6839929833149231406">Περιοχή</translation>
 <translation id="6852204201400771460">Επανάληψη φόρτωσης εφαρμογής;</translation>
@@ -1226,6 +1237,7 @@
 <translation id="7542995811387359312">Η αυτόματη συμπλήρωση πιστωτικής κάρτας έχει απενεργοποιηθεί, επειδή αυτή η φόρμα δεν χρησιμοποιεί ασφαλή σύνδεση.</translation>
 <translation id="7548892272833184391">Διόρθωση σφαλμάτων σύνδεσης</translation>
 <translation id="7549584377607005141">Για τη σωστή εμφάνιση αυτής της ιστοσελίδας, απαιτούνται δεδομένα που καταχωρίσατε νωρίτερα. Μπορείτε να αποστείλετε ξανά αυτά τα δεδομένα, ωστόσο, έτσι θα επαναλάβετε κάθε ενέργεια που εκτέλεσε νωρίτερα αυτή η σελίδα.</translation>
+<translation id="7550637293666041147">Το όνομα χρήστη της συσκευής σας και το όνομα χρήστη Chrome</translation>
 <translation id="7552846755917812628">Δοκιμάστε τις παρακάτω συμβουλές:</translation>
 <translation id="7554791636758816595">Νέα καρτέλα</translation>
 <translation id="7564049878696755256">Μπορεί να χάσετε την πρόσβαση στον λογαριασμό σας <ph name="ORG_NAME" /> ή να πέσετε θύμα κλοπής στοιχείων ταυτότητας. Το Chrome συνιστά να αλλάξετε τον κωδικό πρόσβασής σας τώρα.</translation>
@@ -1240,6 +1252,7 @@
 <translation id="7610193165460212391">Η τιμή είναι εκτός του εύρους τιμών <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Λήξη: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Έχετε ήδη δεδομένα που είναι κρυπτογραφημένα με χρήση διαφορετικής έκδοσης του κωδικού πρόσβασης για τον Λογαριασμό σας Google. Εισαγάγετέ τον παρακάτω.</translation>
+<translation id="7625784245512586808">Προστασία από απειλές του Chrome για Επιχειρήσεις</translation>
 <translation id="7633909222644580952">Δεδομένα απόδοσης και αναφορές σφαλμάτων</translation>
 <translation id="7637571805876720304">Να καταργηθεί η πιστωτική κάρτα από το Chromium;</translation>
 <translation id="7638605456503525968">Σειριακές θύρες</translation>
@@ -1350,6 +1363,7 @@
 <translation id="8211406090763984747">Η σύνδεση είναι ασφαλής</translation>
 <translation id="8218327578424803826">Εκχωρημένη τοποθεσία:</translation>
 <translation id="8220146938470311105">C7/C6 (Φάκελος)</translation>
+<translation id="8220639454292072926">Αναφορές επιχειρήσεων</translation>
 <translation id="8225771182978767009">Το άτομο που ρύθμισε αυτόν τον υπολογιστή επέλεξε να αποκλείσει αυτόν τον ιστότοπο.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Ανοίξτε τη σελίδα σε μια νέα καρτέλα ανώνυμης περιήγησης</translation>
@@ -1433,6 +1447,7 @@
 <translation id="8740359287975076522">Δεν ήταν δυνατός ο εντοπισμός της &lt;abbr id="dnsDefinition"&gt;διεύθυνσης DNS&lt;/abbr&gt; του κεντρικού υπολογιστή <ph name="HOST_NAME" />. Γίνεται διάγνωση του προβλήματος.</translation>
 <translation id="874846938927089722">Αποδεκτές πιστωτικές και προπληρωμένες κάρτες</translation>
 <translation id="874918643257405732">Προσθήκη αυτής της καρτέλας στους σελιδοδείκτες</translation>
+<translation id="8751426954251315517">Δοκιμάστε ξανά την επόμενη φορά</translation>
 <translation id="8759274551635299824">Αυτή η κάρτα έχει λήξει</translation>
 <translation id="8761567432415473239">Η ασφαλής περιήγηση Google <ph name="BEGIN_LINK" />εντόπισε επιβλαβή προγράμματα<ph name="END_LINK" /> πρόσφατα στο <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Συσκευή USB</translation>
@@ -1497,6 +1512,7 @@
 <translation id="9080712759204168376">Σύνοψη παραγγελίας</translation>
 <translation id="9089260154716455634">Πολιτική ελεύθερου χρόνου:</translation>
 <translation id="9095388113577226029">Περισσότερες γλώσσες…</translation>
+<translation id="9098981495403789647">Ο διαχειριστής σας έχει ενεργοποιήσει την Προστασία από απειλές του Chrome για Επιχειρήσεις στο πρόγραμμά περιήγησής σας. Η Προστασία από απειλές του Chrome για Επιχειρήσεις έχει πρόσβαση σε ορισμένα από τα δεδομένα σας.</translation>
 <translation id="9103872766612412690">Κανονικά, ο ιστότοπος <ph name="SITE" /> χρησιμοποιεί κρυπτογράφηση για να προστατεύει τα στοιχεία σας. Όταν το Chromium επιχείρησε πρόσφατα να συνδεθεί στο <ph name="SITE" />, ο ιστότοπος ανταποκρίθηκε δημιουργώντας ασυνήθιστα και εσφαλμένα διαπιστευτήρια. Αυτό μπορεί να συμβεί όταν κάποιος εισβολέας προσπαθεί να υποκριθεί ότι είναι ο ιστότοπος <ph name="SITE" /> ή όταν κάποια οθόνη σύνδεσης Wi-Fi έχει διακόψει τη σύνδεσή σας. Τα στοιχεία σας εξακολουθούν να είναι ασφαλή επειδή το Chromium διέκοψε τη σύνδεση πριν από την ανταλλαγή δεδομένων.</translation>
 <translation id="9106062320799175032">Προσθήκη διεύθυνσης χρέωσης</translation>
 <translation id="9114524666733003316">Επιβεβαίωση κάρτας…</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 155f532dc..789e135 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -168,6 +168,7 @@
 <translation id="1734878702283171397">Try contacting the system admin.</translation>
 <translation id="1740951997222943430">Enter a valid expiry month</translation>
 <translation id="1743520634839655729">To pay faster next time, save your card, name and billing address to your Google Account and to this device.</translation>
+<translation id="1743570585616704562">Not recognised</translation>
 <translation id="1745880797583122200">Your browser is managed</translation>
 <translation id="17513872634828108">Open tabs</translation>
 <translation id="1753706481035618306">Page number</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index e8c6845..86e2d4d 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Un software en tu computadora evita que Chrome se conecte de forma segura a la Web" (solo en computadoras con Windows)</translation>
 <translation id="1294154142200295408">Variaciones en la línea de comandos</translation>
 <translation id="129553762522093515">Cerrado recientemente</translation>
+<translation id="1298536327547837046">Búsqueda de software malicioso</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Intenta borrar tus cookies<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funciones obsoletas</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Intenta comunicarte con el administrador del sistema.</translation>
 <translation id="1740951997222943430">Ingresa una fecha de vencimiento válida</translation>
 <translation id="1743520634839655729">Para realizar pagos de forma más rápida la próxima vez, guarda tu tarjeta, nombre y dirección de facturación en tu cuenta de Google y en este dispositivo.</translation>
+<translation id="1743570585616704562">No se reconoció</translation>
 <translation id="1745880797583122200">Tu navegador está administrado</translation>
 <translation id="17513872634828108">Pestañas abiertas</translation>
 <translation id="1753706481035618306">Número de página</translation>
@@ -427,6 +429,7 @@
 <translation id="320323717674993345">Cancelar pago</translation>
 <translation id="3207960819495026254">Agregada a favoritos</translation>
 <translation id="3209034400446768650">La página puede cobrar cargos</translation>
+<translation id="3215092763954878852">No se pudo usar WebAuthn</translation>
 <translation id="3225919329040284222">El servidor mostró un certificado que no coincide con lo esperado. Estas expectativas se incluyen en determinados sitios web con un alto nivel de seguridad para garantizar tu protección.</translation>
 <translation id="3226128629678568754">Presiona el botón para volver a cargar y, de ese modo, enviar nuevamente los datos necesarios para cargar la página.</translation>
 <translation id="3227137524299004712">Micrófono</translation>
@@ -563,6 +566,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Ninguno}=1{De 1 sitio }other{De # sitios }}</translation>
 <translation id="397105322502079400">Calculando...</translation>
 <translation id="3973234410852337861">Se bloqueó <ph name="HOST_NAME" /></translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> habilitó la Protección contra amenazas de Chrome Enterprise en el navegador. La Protección contra amenazas de Chrome Enterprise tiene acceso a algunos de tus datos.</translation>
 <translation id="3987940399970879459">Menos de 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 página web cercana}other{# páginas web cercanas}}</translation>
 <translation id="4030383055268325496">&amp;Deshacer Agregar</translation>
@@ -631,6 +635,7 @@
 <translation id="4277028893293644418">Restablecer contraseña</translation>
 <translation id="4279811152705618813"><ph name="ENROLLMENT_DOMAIN" /> administra tu dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Se guardó esta tarjeta en tu Cuenta de Google}other{Se guardaron estas tarjetas en tu Cuenta de Google}}</translation>
+<translation id="428847186335018806">Analiza los archivos que descargas y subes mediante Chrome.</translation>
 <translation id="42981349822642051">Expandir</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">Cambiar</translation>
@@ -669,6 +674,7 @@
 <translation id="4506176782989081258">Error de validación: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Comunicarse con el administrador del sistema.</translation>
 <translation id="450710068430902550">Compartir con el administrador</translation>
+<translation id="4508814173490746936">No se pudo usar Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">Las tarjetas y direcciones provienen de Chrome y de tu cuenta de Google (<ph name="ACCOUNT_EMAIL" />). Puedes administrar esta información en <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)</translation>
@@ -764,6 +770,7 @@
 <translation id="5045550434625856497">Contraseña incorrecta</translation>
 <translation id="5056549851600133418">Artículos para ti</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 en uso)}other{(# en uso)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Comprobar la dirección de proxy<ph name="END_LINK" />.</translation>
 <translation id="5087286274860437796">El certificado del servidor no es válido en este momento.</translation>
 <translation id="5087580092889165836">Agregar tarjeta</translation>
@@ -992,6 +999,7 @@
 <translation id="6302269476990306341">Se está deteniendo el Asistente de Google en Chrome</translation>
 <translation id="6305205051461490394">No se puede acceder a <ph name="URL" />.</translation>
 <translation id="6321917430147971392">Revisa la configuración de DNS.</translation>
+<translation id="6322182122604171028">No se puedo usar Windows Hello</translation>
 <translation id="6328639280570009161">Intenta inhabilitar la predicción de red.</translation>
 <translation id="6328784461820205019">"La conexión no es privada", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" o "Error del certificado SSL"</translation>
 <translation id="6328786501058569169">Este sitio es engañoso</translation>
@@ -1015,6 +1023,7 @@
 <translation id="6433490469411711332">Editar la información de contacto</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> rechazó la conexión.</translation>
 <translation id="6434309073475700221">Rechazar</translation>
+<translation id="6435221585574090192">Comparte con tu administrador información sobre eventos de seguridad que se hayan marcado en la función de Protección contra amenazas de Chrome Enterprise. Esos eventos pueden incluir URL de páginas, nombres y metadatos de archivos y tu nombre de usuario de Chrome y el de tu dispositivo.</translation>
 <translation id="6440503408713884761">Ignorada</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">Agregar más información</translation>
@@ -1059,6 +1068,7 @@
 <translation id="6671697161687535275">¿Confirmas que quieres quitar la sugerencia de formulario de Chromium?</translation>
 <translation id="6685834062052613830">Salir y completar la configuración</translation>
 <translation id="6689271823431384964">Como accediste a tu Cuenta de Google, Chrome te ofrece guardar tus tarjetas allí. Puedes modificar este comportamiento en la configuración. El nombre del titular de la tarjeta se obtiene de tu cuenta.</translation>
+<translation id="6707256370811247129">Analiza el contenido de la caché y los archivos que descargas o subes mediante Chrome.</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Escribe el término de búsqueda&gt;</translation>
 <translation id="671076103358959139">Token de inscripción:</translation>
@@ -1077,6 +1087,7 @@
 <translation id="681021252041861472">Campo obligatorio</translation>
 <translation id="6810899417690483278">ID de personalización</translation>
 <translation id="6825578344716086703">Intentaste acceder a <ph name="DOMAIN" />, pero el servidor presentó un certificado firmado con un algoritmo de firma no seguro (como SHA-1). Esto significa que podrían haberse falsificado las credenciales de seguridad presentadas por el servidor y que este no sea el servidor esperado (es posible que hayas establecido comunicación con un atacante).</translation>
+<translation id="6826370046007623921">Prevención de pérdida de datos</translation>
 <translation id="6831043979455480757">Traducir</translation>
 <translation id="6839929833149231406">Área</translation>
 <translation id="6852204201400771460">¿Deseas volver a cargar la app?</translation>
@@ -1223,6 +1234,7 @@
 <translation id="7542995811387359312">El rellenado automático de la tarjeta de crédito se inhabilitó porque este formulario no usa una conexión segura.</translation>
 <translation id="7548892272833184391">Cómo corregir errores de conexión</translation>
 <translation id="7549584377607005141">Esta página web necesita los datos ingresados anteriormente para mostrarse correctamente. Puedes volver a enviar los datos, pero ten en cuenta que se repetirán las acciones que la página haya realizado anteriormente.</translation>
+<translation id="7550637293666041147">Tu nombre de usuario de Chrome y el de tu dispositivo</translation>
 <translation id="7552846755917812628">Intenta las siguientes sugerencias:</translation>
 <translation id="7554791636758816595">Nueva pestaña</translation>
 <translation id="7564049878696755256">Es posible que hayas perdido el acceso a tu cuenta de <ph name="ORG_NAME" /> o sufrido un robo de identidad. Chrome te recomienda que cambies la contraseña ahora.</translation>
@@ -1237,6 +1249,7 @@
 <translation id="7610193165460212391">El valor <ph name="VALUE" /> está fuera del rango.</translation>
 <translation id="7613889955535752492">Vencimiento: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Ya has utilizado otra versión de la contraseña de tu cuenta de Google para encriptar contenido. Ingrésala a continuación.</translation>
+<translation id="7625784245512586808">Protección contra amenazas de Chrome Enterprise</translation>
 <translation id="7633909222644580952">Informes sobre fallos y datos de rendimiento</translation>
 <translation id="7637571805876720304">¿Confirmas que quieres quitar la tarjeta de crédito de Chromium?</translation>
 <translation id="7638605456503525968">Puertos en serie</translation>
@@ -1347,6 +1360,7 @@
 <translation id="8211406090763984747">La conexión es segura</translation>
 <translation id="8218327578424803826">Ubicación asignada:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)</translation>
+<translation id="8220639454292072926">Informes empresariales</translation>
 <translation id="8225771182978767009">La persona que configuró esta computadora decidió bloquear este sitio.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Abre la página en una nueva pestaña de incógnito.</translation>
@@ -1430,6 +1444,7 @@
 <translation id="8740359287975076522">No se encontró <ph name="HOST_NAME" />’s &lt;abbr id="dnsDefinition"&gt;DNS address&lt;/abbr&gt;. Se está diagnosticando el problema.</translation>
 <translation id="874846938927089722">Tarjetas de crédito y prepago aceptadas</translation>
 <translation id="874918643257405732">Agregar esta pestaña a favoritos</translation>
+<translation id="8751426954251315517">Vuelve a intentarlo más tarde</translation>
 <translation id="8759274551635299824">La tarjeta está vencida</translation>
 <translation id="8761567432415473239">La navegación segura de Google <ph name="BEGIN_LINK" />encontró programas peligrosos<ph name="END_LINK" /> recientemente en <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Dispositivo USB</translation>
@@ -1494,6 +1509,7 @@
 <translation id="9080712759204168376">Resumen del pedido</translation>
 <translation id="9089260154716455634">Política fuera de horario:</translation>
 <translation id="9095388113577226029">Más idiomas…</translation>
+<translation id="9098981495403789647">Tu administrador habilitó la Protección contra amenazas de Chrome Enterprise en el navegador. La Protección contra amenazas de Chrome Enterprise tiene acceso a algunos de tus datos.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> suele utilizar la encriptación para proteger la información. Cuando Chromium intentó conectarse a <ph name="SITE" />, el sitio web devolvió credenciales incorrectas y poco comunes. Es posible que un atacante quiera suplantar a <ph name="SITE" /> o que una pantalla de acceso Wi-Fi haya interrumpido la conexión. Tu información permanece segura porque Chromium detuvo la conexión para evitar el intercambio de datos.</translation>
 <translation id="9106062320799175032">Agregar dirección de facturación</translation>
 <translation id="9114524666733003316">Confirmando tarjeta…</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index fdcbf59..eb85c9a4 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Hay software en tu ordenador que impide que Chrome se conecte a la Web de forma segura" (solo para ordenadores Windows)</translation>
 <translation id="1294154142200295408">Variaciones de la línea de comandos</translation>
 <translation id="129553762522093515">Cerrado recientemente</translation>
+<translation id="1298536327547837046">Análisis de software malicioso</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Borrar las cookies<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funciones obsoletas</translation>
 <translation id="1320233736580025032">Prc1 (sobre)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Intenta ponerte en contacto con el administrador del sistema.</translation>
 <translation id="1740951997222943430">Introduce un mes de vencimiento válido</translation>
 <translation id="1743520634839655729">Para pagar más rápido la próxima vez, guarda tu tarjeta, tu nombre y tu dirección de facturación en tu cuenta de Google y en este dispositivo.</translation>
+<translation id="1743570585616704562">No se ha reconocido</translation>
 <translation id="1745880797583122200">Tu navegador está administrado</translation>
 <translation id="17513872634828108">Pestañas abiertas</translation>
 <translation id="1753706481035618306">Número de página</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Cancelar pago</translation>
 <translation id="3207960819495026254">Añadido a marcadores</translation>
 <translation id="3209034400446768650">La página puede cobrarte dinero</translation>
+<translation id="3215092763954878852">No se ha podido usar WebAuthn</translation>
 <translation id="3225919329040284222">El servidor ha mostrado un certificado que no coincide con lo que se esperaba. Algunos sitios web tienen un alto nivel de seguridad para garantizar tu protección y esperan ciertas características de los certificados.</translation>
 <translation id="3226128629678568754">Pulsa el botón de actualización de página para que se vuelvan a enviar los datos necesarios para cargar la página.</translation>
 <translation id="3227137524299004712">Micrófono</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Ninguno}=1{De 1 sitio web }other{De # sitios web }}</translation>
 <translation id="397105322502079400">Calculando...</translation>
 <translation id="3973234410852337861">La página <ph name="HOST_NAME" /> está bloqueada</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ha habilitado la protección contra amenazas de Chrome Enterprise en tu navegador. La protección contra amenazas de Chrome Enterprise tiene acceso a algunos de tus datos.</translation>
 <translation id="3987940399970879459">Menos de 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{ 1 página web cercana}other{ # páginas web cercanas}}</translation>
 <translation id="4030383055268325496">&amp;Deshacer acción de añadir</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">Cambiar contraseña</translation>
 <translation id="4279811152705618813">Tu <ph name="DEVICE_TYPE" /> lo gestiona <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Se ha guardado esta tarjeta en tu cuenta de Google}other{Se han guardado estas tarjetas en tu cuenta de Google}}</translation>
+<translation id="428847186335018806">Analiza los archivos que descargues o subas en Chrome.</translation>
 <translation id="42981349822642051">Mostrar</translation>
 <translation id="4302965934281694568">Chou3 (sobre)</translation>
 <translation id="4305817255990598646">Cambiar</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">Error de validación: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Ponerte en contacto con el administrador del sistema</translation>
 <translation id="450710068430902550">Compartir con el administrador</translation>
+<translation id="4508814173490746936">No se ha podido usar Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (sobre)</translation>
 <translation id="4515275063822566619">Las tarjetas y las direcciones proceden de Chrome y tu cuenta de Google (<ph name="ACCOUNT_EMAIL" />). Puedes gestionarlas en <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (sobre)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">Contraseña incorrecta</translation>
 <translation id="5056549851600133418">Artículos recomendados para ti</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 en uso)}other{(# en uso)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Comprobar la dirección del proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">El certificado del servidor no es válido en este momento.</translation>
 <translation id="5087580092889165836">Añadir tarjeta</translation>
@@ -994,6 +1001,7 @@
 <translation id="6302269476990306341">Se está parando el Asistente de Google en Chrome</translation>
 <translation id="6305205051461490394">No se puede acceder a <ph name="URL" />.</translation>
 <translation id="6321917430147971392">Comprueba tu configuración de DNS</translation>
+<translation id="6322182122604171028">No se ha podido usar Windows Hello</translation>
 <translation id="6328639280570009161">Prueba a inhabilitar la predicción de red</translation>
 <translation id="6328784461820205019">"La conexión no es privada" o "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" o "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" o "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" o "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" o "Error de certificado SSL"</translation>
 <translation id="6328786501058569169">Este sitio web es engañoso</translation>
@@ -1017,6 +1025,7 @@
 <translation id="6433490469411711332">Editar información de contacto</translation>
 <translation id="6433595998831338502">La página <ph name="HOST_NAME" /> ha rechazado la conexión.</translation>
 <translation id="6434309073475700221">Rechazar</translation>
+<translation id="6435221585574090192">Comparte con tu administrador los datos de actividades relacionadas con la seguridad que marque la protección contra amenazas de Chrome Enterprise. Estos datos pueden incluir las URL de páginas, los nombres y metadatos de archivos, y tu nombre de usuario en el dispositivo y en Chrome.</translation>
 <translation id="6440503408713884761">Ignorada</translation>
 <translation id="6446163441502663861">Kahu (sobre)</translation>
 <translation id="6446608382365791566">Añadir más información</translation>
@@ -1061,6 +1070,7 @@
 <translation id="6671697161687535275">¿Quitar sugerencia de formulario de Chromium?</translation>
 <translation id="6685834062052613830">Cierra sesión y completa la configuración</translation>
 <translation id="6689271823431384964">Chrome te ofrece guardar las tarjetas en tu cuenta de Google porque has iniciado sesión. Puedes cambiar esta opción en los ajustes. El nombre del titular procede de tu cuenta.</translation>
+<translation id="6707256370811247129">Comprueba el contenido de caché y los archivos que has descargado o subido en Chrome.</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Introducir término de búsqueda&gt;</translation>
 <translation id="671076103358959139">Token de registro:</translation>
@@ -1079,6 +1089,7 @@
 <translation id="681021252041861472">Campo obligatorio</translation>
 <translation id="6810899417690483278">ID de personalización</translation>
 <translation id="6825578344716086703">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor ha presentado un certificado firmado con un algoritmo de firma no seguro (por ejemplo, SHA-1). Una posible causa de este problema es que se hayan falsificado las credenciales de seguridad presentadas por el servidor y que hayas accedido a la página de un atacante en lugar de establecer conexión con el servidor en cuestión.</translation>
+<translation id="6826370046007623921">Prevención de la pérdida de datos</translation>
 <translation id="6831043979455480757">Traducir</translation>
 <translation id="6839929833149231406">Área</translation>
 <translation id="6852204201400771460">¿Quieres volver a cargar la aplicación?</translation>
@@ -1225,6 +1236,7 @@
 <translation id="7542995811387359312">La opción de autocompletado de la tarjeta de crédito está inhabilitada porque este formulario no utiliza una conexión segura.</translation>
 <translation id="7548892272833184391">Solucionar errores de conexión</translation>
 <translation id="7549584377607005141">Esta página web necesita los datos introducidos anteriormente para mostrarse correctamente. Puedes volver a enviar los datos, pero se repetirán las acciones que haya realizado la página.</translation>
+<translation id="7550637293666041147">Tu nombre de usuario en el dispositivo y en Chrome</translation>
 <translation id="7552846755917812628">Prueba los siguientes consejos:</translation>
 <translation id="7554791636758816595">Nueva pestaña</translation>
 <translation id="7564049878696755256">Podrías perder el acceso a tu cuenta de <ph name="ORG_NAME" /> o tener problemas de suplantación de identidad. Chrome te recomienda que cambies tu contraseña ahora.</translation>
@@ -1239,6 +1251,7 @@
 <translation id="7610193165460212391">El valor <ph name="VALUE" /> se encuentra fuera del intervalo.</translation>
 <translation id="7613889955535752492">Caducidad: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Has usado anteriormente otra versión de la contraseña de tu cuenta de Google para el cifrado de datos. Introdúcela a continuación.</translation>
+<translation id="7625784245512586808">Protección contra amenazas de Chrome Enterprise</translation>
 <translation id="7633909222644580952">Datos de rendimiento e informes sobre fallos</translation>
 <translation id="7637571805876720304">¿Quitar tarjeta de crédito de Chromium?</translation>
 <translation id="7638605456503525968">Puertos serie</translation>
@@ -1349,6 +1362,7 @@
 <translation id="8211406090763984747">La conexión es segura</translation>
 <translation id="8218327578424803826">Ubicación asignada:</translation>
 <translation id="8220146938470311105">C7/C6 (sobre)</translation>
+<translation id="8220639454292072926">Informes de empresa</translation>
 <translation id="8225771182978767009">La persona que ha configurado este ordenador ha elegido bloquear este sitio web.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" /> o <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Abre una página en una nueva pestaña de incógnito</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">No se ha podido encontrar la &lt;abbr id="dnsDefinition"&gt;dirección DNS&lt;/abbr&gt; de la página <ph name="HOST_NAME" />. Se está diagnosticando el problema.</translation>
 <translation id="874846938927089722">Tarjetas prepago y de crédito aceptadas</translation>
 <translation id="874918643257405732">Añadir esta pestaña a marcadores</translation>
+<translation id="8751426954251315517">Vuelve a intentarlo más adelante</translation>
 <translation id="8759274551635299824">La tarjeta ha caducado</translation>
 <translation id="8761567432415473239">La función de Navegación Segura de Google <ph name="BEGIN_LINK" />encontró programas dañinos<ph name="END_LINK" /> recientemente en el sitio <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Dispositivo USB</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">Resumen del pedido</translation>
 <translation id="9089260154716455634">Política fuera del horario:</translation>
 <translation id="9095388113577226029">Más idiomas...</translation>
+<translation id="9098981495403789647">Tu administrador ha habilitado la protección contra amenazas de Chrome Enterprise en tu navegador. La protección contra amenazas de Chrome Enterprise tiene acceso a algunos de tus datos.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> utiliza normalmente el cifrado para proteger tu información. Cuando Chromium intentó establecer conexión con <ph name="SITE" />, el sitio web devolvió unas credenciales inusuales e incorrectas. Esto puede ocurrir si un atacante intenta suplantar la identidad de <ph name="SITE" /> o si una pantalla de inicio de sesión Wi-Fi interrumpe la conexión. Tu información sigue estando protegida, ya que Chromium detuvo la conexión antes de que se intercambiaran datos.</translation>
 <translation id="9106062320799175032">Añade una dirección de facturación</translation>
 <translation id="9114524666733003316">Confirmando tarjeta...</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 0cd0f90..d507af28 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">„Teie arvutis olev tarkvara ei luba Chrome'il veebiga turvaliselt ühendust luua” (ainult Windowsi arvutid)</translation>
 <translation id="1294154142200295408">Käsurea variatsioonid</translation>
 <translation id="129553762522093515">Viimati suletud</translation>
+<translation id="1298536327547837046">Pahavara skannimine</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Kustutage küpsisefailid<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Katkestatud toega funktsioonid</translation>
 <translation id="1320233736580025032">Prc1 (ümbrik)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Proovige ühendust võtta süsteemiadministraatoriga.</translation>
 <translation id="1740951997222943430">Sisestage kehtiv aegumiskuu</translation>
 <translation id="1743520634839655729">Kui soovite järgmisel korral kiiremini maksta, salvestage kaart, nimi ja arveldusaadress oma Google'i kontole ja sellesse seadmesse.</translation>
+<translation id="1743570585616704562">Ei tuvastatud</translation>
 <translation id="1745880797583122200">Teie brauserit hallatakse</translation>
 <translation id="17513872634828108">Avatud vahelehed</translation>
 <translation id="1753706481035618306">Lk</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Tühista makse</translation>
 <translation id="3207960819495026254">Järjehoidjatesse lisatud</translation>
 <translation id="3209034400446768650">Leht võib võtta tasu</translation>
+<translation id="3215092763954878852">Üksust WebAuthn ei saanud kasutada</translation>
 <translation id="3225919329040284222">Serveri esitatud sertifikaat ei vasta sisseehitatud ootustele. Ootused on teie kaitsmiseks kaasatud kindlate kõrge turvalisusega veebisaitide jaoks.</translation>
 <translation id="3226128629678568754">Lehe laadimiseks vajalike andmete uuesti esitamiseks vajutage uuesti laadimise nuppu.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Ükski}=1{1 saidilt }other{# saidilt }}</translation>
 <translation id="397105322502079400">Arvutamine ...</translation>
 <translation id="3973234410852337861">Host <ph name="HOST_NAME" /> on blokeeritud</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> lubas teie brauseris funktsiooni Chrome Enterprise Threat Protection. Funktsioonil Chrome Enterprise Threat Protection on juurdepääs osadele teie andmetele.</translation>
 <translation id="3987940399970879459">Alla 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{Läheduses on 1 veebileht}other{Läheduses on # veebilehte}}</translation>
 <translation id="4030383055268325496">&amp;Võta lisamine tagasi</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">Lähtesta parool</translation>
 <translation id="4279811152705618813">Teie seadet <ph name="DEVICE_TYPE" /> haldab <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{See kaart salvestati teie Google'i kontole}other{Need kaardid salvestati teie Google'i kontole}}</translation>
+<translation id="428847186335018806">Skannitakse faile, mille Chrome'is alla või üles laadite.</translation>
 <translation id="42981349822642051">Laienda</translation>
 <translation id="4302965934281694568">Chou3 (ümbrik)</translation>
 <translation id="4305817255990598646">Lüliti</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">Valideerimisviga: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Võtke ühendust süsteemiadministraatoriga</translation>
 <translation id="450710068430902550">Administraatoriga jagamine</translation>
+<translation id="4508814173490746936">Touch ID-d ei saanud kasutada</translation>
 <translation id="4510487217173779431">Chou4 (ümbrik)</translation>
 <translation id="4515275063822566619">Kaardid ja aadressid pärinevad Chrome'ist ning teie Google'i kontolt (<ph name="ACCOUNT_EMAIL" />). Neid saate hallata menüüs <ph name="BEGIN_LINK" />Seaded<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (ümbrik)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">Vale salasõna</translation>
 <translation id="5056549851600133418">Teile soovitatud artiklid</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 on kasutusel)}other{(# on kasutusel)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Kontrollige puhverserveri aadressi<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Serveri sertifikaat pole praegu kehtiv.</translation>
 <translation id="5087580092889165836">Lisa kaart</translation>
@@ -994,6 +1001,7 @@
 <translation id="6302269476990306341">Chrome'ile mõeldud Google'i assistenti peatatakse</translation>
 <translation id="6305205051461490394">URL-iga <ph name="URL" /> ei saa ühendust.</translation>
 <translation id="6321917430147971392">Kontrollige DNS-i seadeid</translation>
+<translation id="6322182122604171028">Ei saa funktsiooni Windows Hello kasutada</translation>
 <translation id="6328639280570009161">Proovige keelata võrguprognoos</translation>
 <translation id="6328784461820205019">„Teie ühendus ei ole privaatne” või „&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;” või „&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;” või „&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;” või „&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;” või „SSL-i sertifikaadi viga”</translation>
 <translation id="6328786501058569169">See sait on petturlik</translation>
@@ -1017,6 +1025,7 @@
 <translation id="6433490469411711332">Kontaktandmete muutmine</translation>
 <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> keeldus ühendamast.</translation>
 <translation id="6434309073475700221">Tühista</translation>
+<translation id="6435221585574090192">Administraatoriga jagatakse andmeid turvasündmuste kohta, mille Chrome Enterprise Threat Protection on esile tõstnud. See võib hõlmata lehtede URL-e, failide nimesid ja metaandmeid, teie seadme kasutajanime ning Chrome'i kasutajanime.</translation>
 <translation id="6440503408713884761">Eiras</translation>
 <translation id="6446163441502663861">Kahu (ümbrik)</translation>
 <translation id="6446608382365791566">Lisateabe lisamine</translation>
@@ -1061,6 +1070,7 @@
 <translation id="6671697161687535275">Kas eemaldada Chromiumist vormi soovitus?</translation>
 <translation id="6685834062052613830">Logige välja ja viige seadistus lõpule</translation>
 <translation id="6689271823431384964">Chrome pakub kaartide salvestamist teie Google'i kontole, kuna olete sisse logitud. Seda käitumist saab seadetes muuta. Kaardiomaniku nimi pärineb teie kontolt.</translation>
+<translation id="6707256370811247129">Skannitakse vahemälu ja faile, mille Chrome'is alla või üles laadite.</translation>
 <translation id="6710213216561001401">Eelmine</translation>
 <translation id="6710594484020273272">&lt;Sisestage otsingutermin&gt;</translation>
 <translation id="671076103358959139">Registreerimismärk:</translation>
@@ -1079,6 +1089,7 @@
 <translation id="681021252041861472">Kohustuslik väli</translation>
 <translation id="6810899417690483278">Kohandamise ID</translation>
 <translation id="6825578344716086703">Püüdsite jõuda domeenile <ph name="DOMAIN" />, kuid server esitas sertifikaadi, mis on allkirjastatud nõrga allkirjaalgoritmiga (nt SHA-1). See tähendab, et serveri esitatud turvamandaadid võivad olla võltsitud ja server ei pruugi olla see, mida eeldate (võimalik, et suhtlete ründajaga).</translation>
+<translation id="6826370046007623921">Andmekao vältimine</translation>
 <translation id="6831043979455480757">Tõlgi</translation>
 <translation id="6839929833149231406">Ala</translation>
 <translation id="6852204201400771460">Kas soovite rakenduse uuesti laadida?</translation>
@@ -1225,6 +1236,7 @@
 <translation id="7542995811387359312">Automaatne krediitkaardi täide on keelatud, sest see vorm ei kasuta turvalist ühendust.</translation>
 <translation id="7548892272833184391">Ühendusvigade parandamine</translation>
 <translation id="7549584377607005141">See veebileht vajab korralikult kuvamiseks varem sisestatud andmeid. Võite need andmed uuesti saata, kuid seda tehes kordate lehe iga eelnevat toimingut.</translation>
+<translation id="7550637293666041147">Teie seadme kasutajanimi ja Chrome'i kasutajanimi</translation>
 <translation id="7552846755917812628">Proovige järgmiseid nõuandeid.</translation>
 <translation id="7554791636758816595">Uus vaheleht</translation>
 <translation id="7564049878696755256">Võite kaotada juurdepääsu oma teenuse <ph name="ORG_NAME" /> kontole või teie identiteet võidakse varastada. Chrome soovitab teil kohe oma parooli muuta.</translation>
@@ -1239,6 +1251,7 @@
 <translation id="7610193165460212391">Väärtus on vahemikust (<ph name="VALUE" />) väljaspool.</translation>
 <translation id="7613889955535752492">Aegub: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Teil on juba andmed, mis on krüpteeritud Google'i konto parooli teise versiooniga. Sisestage see allpool.</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">Toimivusandmed ja krahhiaruanded</translation>
 <translation id="7637571805876720304">Kas eemaldada Chromiumist krediitkaart?</translation>
 <translation id="7638605456503525968">Jadapordid</translation>
@@ -1349,6 +1362,7 @@
 <translation id="8211406090763984747">Ühendus on turvaline</translation>
 <translation id="8218327578424803826">Määratud asukoht:</translation>
 <translation id="8220146938470311105">C7/C6 (ümbrik)</translation>
+<translation id="8220639454292072926">Ettevõtte aruandlus</translation>
 <translation id="8225771182978767009">Arvuti seadistanud inimene blokeeris selle saidi.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Avage leht uuel inkognito vahekaardil</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">Hosti <ph name="HOST_NAME" /> &lt;abbr id="dnsDefinition"&gt;DNS-aadressi&lt;/abbr&gt; ei leitud. Probleemi diagnoositakse.</translation>
 <translation id="874846938927089722">Aktsepteeritavad ettemakstud ja krediitkaardid</translation>
 <translation id="874918643257405732">Lisa vaheleht järjehoidjatesse</translation>
+<translation id="8751426954251315517">Proovige järgmisel korral uuesti</translation>
 <translation id="8759274551635299824">See kaart on aegunud</translation>
 <translation id="8761567432415473239">Google'i ohutu sirvimine <ph name="BEGIN_LINK" />tuvastas hiljuti kahjulikud programmid<ph name="END_LINK" /> saidil <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB-seade</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">Tellimuse kokkuvõte</translation>
 <translation id="9089260154716455634">Eemalolekuaegade eeskirjad:</translation>
 <translation id="9095388113577226029">Rohkem keeli …</translation>
+<translation id="9098981495403789647">Administraator lubas teie brauseris funktsiooni Chrome Enterprise Threat Protection. Funktsioonil Chrome Enterprise Threat Protection on juurdepääs osadele teie andmetele.</translation>
 <translation id="9103872766612412690">Sait <ph name="SITE" /> kasutab teie teabe kaitsmiseks tavaliselt krüpteerimist. Kui Chromium püüdis seekord saidiga <ph name="SITE" /> ühendust luua, tagastas veebisait ebatavalised ja valed mandaadid. See võib juhtuda siis, kui ründaja proovib teeselda, et on sait <ph name="SITE" />, või WiFi sisselogimisekraan on ühenduse katkestanud. Teie teave on endiselt kaitstud, sest Chromium peatas ühenduse enne andmevahetust.</translation>
 <translation id="9106062320799175032">Arveldusaadressi lisamine</translation>
 <translation id="9114524666733003316">Kaardi kinnitamine …</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index a74e70a..d093610 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">‏«نرم‌افزاری در رایانه شما مانع از اتصال ایمن Chrome به وب می‌شود» (فقط رایانه‌های Windows)</translation>
 <translation id="1294154142200295408">انواع مختلف خط فرمان</translation>
 <translation id="129553762522093515">اخیراً بسته‌شده</translation>
+<translation id="1298536327547837046">اسکن بدافزار</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />کوکی‌ها را پاک کنید<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">ویژگی‌های منسوخ‌شده</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">با سرپرست سیستم تماس بگیرید.</translation>
 <translation id="1740951997222943430">ماه انقضای معتبری وارد کنید</translation>
 <translation id="1743520634839655729">‏برای اینکه دفعه بعد پرداخت سریع‌تری داشته باشید، اطلاعات کارت، نام و نشانی صورت‌حسابتان را در حساب Google خود و این دستگاه ذخیره کنید.</translation>
+<translation id="1743570585616704562">شناسایی نشد</translation>
 <translation id="1745880797583122200">مرورگرتان تحت مدیریت است</translation>
 <translation id="17513872634828108">بازکردن برگه‌ها</translation>
 <translation id="1753706481035618306">شماره صفحه</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">لغو پرداخت</translation>
 <translation id="3207960819495026254">نشانک‌گذاری شده</translation>
 <translation id="3209034400446768650">ممکن است این صفحه از شما هزینه کسر کند</translation>
+<translation id="3215092763954878852">‏استفاده از WebAuthn ممکن نشد</translation>
 <translation id="3225919329040284222">سرور گواهی را نشان می‌دهد که با موارد پیش‌بینی‌شده داخلی مطابقت ندارد. این پیش‌بینی‌ها به‌طور حتم وب‌سایتهای دارای امنیت بالا را جهت محافظت از شما در بر می‌گیرند.</translation>
 <translation id="3226128629678568754">دکمه تازه‌سازی را فشار دهید تا داده‌های مورد نیاز برای بارگیری صفحه مجدداً ارسال شود.</translation>
 <translation id="3227137524299004712">میکروفن</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{هیچ‌کدام}=1{از ۱ سایت }one{از # سایت }other{از # سایت }}</translation>
 <translation id="397105322502079400">در حال محاسبه…</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> مسدود است</translation>
+<translation id="3981540111851280311">‏<ph name="ENROLLMENT_DOMAIN" /> «محافظت از خطرات تهدیدکننده Chrome Enterprise» را در مرورگرتان فعال کرده است. «محافظت از خطرات تهدیدکننده Chrome Enterprise» به برخی داده‌هایتان دسترسی دارد.</translation>
 <translation id="3987940399970879459">کمتر از ۱ مگابایت</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{ ۱ صفحه وب در این نزدیکی است}one{ # صفحه وب در این نزدیکی است}other{ # صفحه وب در این نزدیکی است}}</translation>
 <translation id="4030383055268325496">&amp;واگرد افزودن</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">بازنشانی گذرواژه</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" /> شما توسط <ph name="ENROLLMENT_DOMAIN" /> مدیریت می‌شود.</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{‏این کارت در حساب Google ذخیره شده است}one{‏این کارت‌ها در حساب Google ذخیره شده‌اند}other{‏این کارت‌ها در حساب Google ذخیره شده‌اند}}</translation>
+<translation id="428847186335018806">‏اسکن فایل‌هایی که در Chrome بارگیری یا بارگذاری کرده‌اید</translation>
 <translation id="42981349822642051">بزرگ کردن</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">جابه‌جایی</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">خطای ارزیابی: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">تماس با سرپرست سیستم</translation>
 <translation id="450710068430902550">اشتراک‌گذاری با سرپرست سیستم</translation>
+<translation id="4508814173490746936">استفاده از «شناسه لمسی» ممکن نشد</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">‏کارت‌ها و نشانی‌ها از Chrome و حساب Google شما (<ph name="ACCOUNT_EMAIL" />) هستند. می‌توانید آن‌ها را در <ph name="BEGIN_LINK" />تنظیمات<ph name="END_LINK" /> مدیریت کنید.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">گذرواژه نادرست</translation>
 <translation id="5056549851600133418">مقالاتی برای شما</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(۱ کوکی درحال استفاده)}one{(# کوکی درحال استفاده)}other{(# کوکی درحال استفاده)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />بررسی آدرس پروکسی<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">در حال حاضر گواهی سرور معتبر نیست.</translation>
 <translation id="5087580092889165836">افزودن کارت</translation>
@@ -992,6 +999,7 @@
 <translation id="6302269476990306341">‏توقف «دستیار Google» در Chrome</translation>
 <translation id="6305205051461490394">دسترسی به <ph name="URL" /> امکان‌پذیر نیست.</translation>
 <translation id="6321917430147971392">‏تنظیمات DNS خودتان را بررسی کنید</translation>
+<translation id="6322182122604171028">‏استفاده از Windows Hello ممکن نشد</translation>
 <translation id="6328639280570009161">غیرفعال کردن پیش‌بینی شبکه را امتحان کنید</translation>
 <translation id="6328784461820205019">‏«اتصالتان خصوصی نیست» یا «&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;» یا «&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;» یا «&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;» یا «خطای گواهینامه SSL»</translation>
 <translation id="6328786501058569169">این سایت گول‌زننده است</translation>
@@ -1015,6 +1023,7 @@
 <translation id="6433490469411711332">ویرایش اطلاعات تماس</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> از اتصال خودداری کرد.</translation>
 <translation id="6434309073475700221">رد کردن</translation>
+<translation id="6435221585574090192">‏داده‌های مربوط به رویدادهای امنیتی‌ای را که «محافظت از خطرات تهدیدکننده Chrome Enterprise» پرچم‌گذاری کرده‌ است، با «سرپرست» به اشتراک بگذارید. این کار ممکن است شامل نشانی وب صفحه‌ها، نام فایل و فراداده فایل، نام کاربری دستگاه، و نام کاربری Chrome باشد.</translation>
 <translation id="6440503408713884761">نادیده گرفته شد</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">افزودن اطلاعات بیشتر</translation>
@@ -1059,6 +1068,7 @@
 <translation id="6671697161687535275">‏پیشنهاد فرم از Chromium پاک شود؟</translation>
 <translation id="6685834062052613830">خروج از سیستم و تکمیل راه‌اندازی</translation>
 <translation id="6689271823431384964">‏چون به سیستم وارد شده‌اید، Chrome پیشنهاد می‌کند کارت‌ها را در حساب Google ذخیره کنید. در تنظیمات می‌توانید این رفتار را تغییر دهید. نام دارنده کارت از حساب شما گرفته شده است.</translation>
+<translation id="6707256370811247129">‏اسکن محتواهای حافظه پنهان و فایل‌هایی که در Chrome بارگیری یا بارگذاری کرده‌اید.</translation>
 <translation id="6710213216561001401">قبلی</translation>
 <translation id="6710594484020273272">&lt;عبارت جستجو را تایپ کنید&gt;</translation>
 <translation id="671076103358959139">کد ثبت‌نام:</translation>
@@ -1077,6 +1087,7 @@
 <translation id="681021252041861472">فیلد ضروری</translation>
 <translation id="6810899417690483278">شناسه سفارشی‌سازی</translation>
 <translation id="6825578344716086703">‏تلاش کردید به <ph name="DOMAIN" /> دسترسی داشته باشید، اما گواهینامه ارائه‌شده از سوی سرور با استفاده از یک الگوریتم امضای ضعیف (مانند SHA-1) امضا شده است. یعنی ممکن است اعتبارنامه امنیتی ارائه‌شده از سوی سرور جعلی باشد و ممکن است سرور، سرور موردانتظار شما نباشد (ممکن است با یک مهاجم در ارتباط باشید).</translation>
+<translation id="6826370046007623921">جلوگیری از از بین رفتن داده‌ها</translation>
 <translation id="6831043979455480757">ترجمه</translation>
 <translation id="6839929833149231406">ناحیه</translation>
 <translation id="6852204201400771460">برنامه تازه‌سازی شود؟</translation>
@@ -1223,6 +1234,7 @@
 <translation id="7542995811387359312">تکمیل خودکار کارت اعتباری غیر فعال است زیرا این فرم از یک اتصال امن استفاده نمی‌کند.</translation>
 <translation id="7548892272833184391">رفع خطاهای اتصال</translation>
 <translation id="7549584377607005141">این صفحه وب برای نمایش صحیح به داده‌هایی نیاز دارد که قبلاً وارد کرده‌اید. می‌توانید این داده‌ها را دوباره ارسال کنید، اما با انجام این کار، هر اقدامی که این صفحه قبلاً انجام داده است تکرار می‌شود.</translation>
+<translation id="7550637293666041147">‏نام کاربری شما در دستگاه و Chrome</translation>
 <translation id="7552846755917812628">نکته‌های زیر را امتحان کنید:</translation>
 <translation id="7554791636758816595">برگهٔ جدید</translation>
 <translation id="7564049878696755256">‏ممکن است دسترسی به حساب <ph name="ORG_NAME" /> را از دست بدهید یا به سرقت هویت دچار شوید. Chrome توصیه می‌کند هم‌اکنون گذرواژه‌تان را تغییر دهید.</translation>
@@ -1237,6 +1249,7 @@
 <translation id="7610193165460212391">مقدار خارج از محدوده <ph name="VALUE" /> است.</translation>
 <translation id="7613889955535752492">انقضا: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">‏شما در حال حاضر داده‌هایی دارید که با استفاده از نسخه دیگری از گذرواژه حساب Google شما رمزگذاری شده‌اند. لطفاً آن را در زیر وارد کنید.</translation>
+<translation id="7625784245512586808">‏محافظت از خطرات تهدیدکننده Chrome Enterprise</translation>
 <translation id="7633909222644580952">داده‌های عملکرد و گزارش‌های خرابی</translation>
 <translation id="7637571805876720304">‏کارت اعتباری از Chromium پاک شود؟</translation>
 <translation id="7638605456503525968">درگاه‌های سریال</translation>
@@ -1347,6 +1360,7 @@
 <translation id="8211406090763984747">اتصال امن است</translation>
 <translation id="8218327578424803826">مکان اختصاص یافته:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)</translation>
+<translation id="8220639454292072926">‏گزارش Enterprise</translation>
 <translation id="8225771182978767009">شخصی که این رایانه را راه‌اندازی کرده این سایت را مسدود کرده است.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />،‏ <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">صفحه را در برگه «ناشناس» جدیدی باز کنید</translation>
@@ -1429,6 +1443,7 @@
 <translation id="8740359287975076522">‏<ph name="HOST_NAME" />’s &lt;abbr id="dnsDefinition"&gt;آدرس DNS&lt;/abbr&gt; پیدا نشد. درحال بررسی برای تشخیص مشکل.</translation>
 <translation id="874846938927089722">کارت‌های اعتباری و پیش‌پرداخت قابل‌قبول</translation>
 <translation id="874918643257405732">نشانک گذاشتن این برگه</translation>
+<translation id="8751426954251315517">لطفاً بعداً دوباره امتحان کنید</translation>
 <translation id="8759274551635299824">کارت منقضی شده است</translation>
 <translation id="8761567432415473239">‏مرور ایمن Google اخیراً <ph name="BEGIN_LINK" />برنامه‌های خطرناک<ph name="END_LINK" /> را در <ph name="SITE" /> پیدا کرده است.</translation>
 <translation id="8763927697961133303">‏دستگاه USB</translation>
@@ -1493,6 +1508,7 @@
 <translation id="9080712759204168376">خلاصه سفارش</translation>
 <translation id="9089260154716455634">خط‌مشی ساعت‌های خاموشی:</translation>
 <translation id="9095388113577226029">زبان‌های بیشتر...</translation>
+<translation id="9098981495403789647">‏سرپرست «محافظت از خطرات تهدیدکننده Chrome Enterprise» در مرورگرتان فعال شده است. «محافظت از خطرات تهدیدکننده Chrome Enterprise» به برخی داده‌هایتان دسترسی دارد.</translation>
 <translation id="9103872766612412690">‏<ph name="SITE" /> معمولاً برای محافظت از اطلاعات شما از رمزگذاری استفاده می‌کند. اما این بار که Chromium تلاش کرد به <ph name="SITE" /> متصل شود، وب‌سایت اعتبارنامه‌ای نامعمول و نادرست را برگرداند. ممکن است مهاجمی در تلاش باشد خود را به‌جای <ph name="SITE" /> معرفی کند یا یک صفحه ورود به سیستم Wi-Fi در ارتباط اختلال ایجاد کرده باشد. اطلاعات شما همچنان ایمن است، زیرا Chromium قبل از هرگونه تبادل داده، اتصال را متوقف کرد.</translation>
 <translation id="9106062320799175032">افزودن نشانی صورت‌حساب</translation>
 <translation id="9114524666733003316">درحال تأیید کردن کارت…</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 86569fb..8b1be9fe 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">Tietokoneelle asennettu ohjelmisto estää Chromea muodostamasta turvallista yhteyttä verkkoon (vain Windows-tietokoneilla)</translation>
 <translation id="1294154142200295408">Komentorivin muunnelmat</translation>
 <translation id="129553762522093515">Hiljattain suljetut välilehdet</translation>
+<translation id="1298536327547837046">Haittaohjelmien tarkistus</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Tyhjennä evästeet.<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Käytöstä poistetut ominaisuudet</translation>
 <translation id="1320233736580025032">Prc1 (kirjekuori)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Ota yhteyttä järjestelmänvalvojaan.</translation>
 <translation id="1740951997222943430">Anna kelvollinen viimeinen voimassaolokuukausi.</translation>
 <translation id="1743520634839655729">Jos haluat maksaa nopeammin ensi kerralla, tallenna kortti, nimi ja laskutusosoite Google-tilillesi ja tälle laitteelle.</translation>
+<translation id="1743570585616704562">Ei tunnistettu</translation>
 <translation id="1745880797583122200">Tämä on ylläpidetty selain</translation>
 <translation id="17513872634828108">Avoimet välilehdet</translation>
 <translation id="1753706481035618306">Sivunumero</translation>
@@ -429,6 +431,7 @@
 <translation id="320323717674993345">Peruuta maksu</translation>
 <translation id="3207960819495026254">Kirjanmerkeissä</translation>
 <translation id="3209034400446768650">Sivu voi veloittaa</translation>
+<translation id="3215092763954878852">WebAuthn:n käyttö ei onnistunut</translation>
 <translation id="3225919329040284222">Palvelin esitti varmenteen, joka ei vastaa sisäänrakennettuja odotuksia. Tietyillä tehokkaasti suojatuilla sivustoilla on odotuksia, joilla suojataan käyttäjiä.</translation>
 <translation id="3226128629678568754">Paina päivityspainiketta, niin sivun lataukseen tarvittavat tiedot lähetetään uudelleen.</translation>
 <translation id="3227137524299004712">Mikrofoni</translation>
@@ -565,6 +568,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Ei mitään}=1{1 sivustolta }other{# sivustolta }}</translation>
 <translation id="397105322502079400">Lasketaan...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> on estetty</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> on ottanut Chrome Enterprisen uhkientorjunnan käyttöön selaimellesi. Chrome Enterprisen uhkientorjunnalla on pääsy osaan datastasi.</translation>
 <translation id="3987940399970879459">Alle 1 Mt</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 verkkosivu lähistöllä}other{# verkkosivua lähistöllä}}</translation>
 <translation id="4030383055268325496">K&amp;umoa lisäys</translation>
@@ -633,6 +637,7 @@
 <translation id="4277028893293644418">Pyydä uusi salasana</translation>
 <translation id="4279811152705618813"><ph name="ENROLLMENT_DOMAIN" /> ylläpitää laitetta (<ph name="DEVICE_TYPE" />)</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Tämä kortti on tallennettu Google-tilillesi}other{Nämä kortit on tallennettu Google-tilillesi}}</translation>
+<translation id="428847186335018806">Tarkista Chromessa lataamasi tai lähettämäsi tiedostot.</translation>
 <translation id="42981349822642051">Laajenna</translation>
 <translation id="4302965934281694568">Chou3 (kirjekuori)</translation>
 <translation id="4305817255990598646">Vaihda</translation>
@@ -671,6 +676,7 @@
 <translation id="4506176782989081258">Todennusvirhe: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Ota yhteyttä järjestelmänvalvojaan.</translation>
 <translation id="450710068430902550">Jakaminen järjestelmänvalvojan kanssa</translation>
+<translation id="4508814173490746936">Touch ID:n käyttö ei onnistunut</translation>
 <translation id="4510487217173779431">Chou4 (kirjekuori)</translation>
 <translation id="4515275063822566619">Kortit ja osoitteet ovat peräisin Chromesta ja Google-tililtäsi (<ph name="ACCOUNT_EMAIL" />). Voit hallinnoida niitä <ph name="BEGIN_LINK" />asetuksissa<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (kirjekuori)</translation>
@@ -766,6 +772,7 @@
 <translation id="5045550434625856497">Väärä salasana</translation>
 <translation id="5056549851600133418">Sinulle valitut artikkelit</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 käytössä)}other{(# käytössä)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Tarkista välityspalvelimen osoite.<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Palvelimen varmenne ei ole tällä hetkellä kelvollinen.</translation>
 <translation id="5087580092889165836">Lisää kortti</translation>
@@ -995,6 +1002,7 @@
 <translation id="6302269476990306341">Chromen Google Assistant suljetaan</translation>
 <translation id="6305205051461490394">Sivustoon <ph name="URL" /> ei saada yhteyttä.</translation>
 <translation id="6321917430147971392">Tarkista DNS-asetukset</translation>
+<translation id="6322182122604171028">Windows Hellon käyttö ei onnistunut</translation>
 <translation id="6328639280570009161">Kokeile verkon ennakoinnin poistamista käytöstä.</translation>
 <translation id="6328784461820205019">"Yhteytesi ei ole salattu", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" tai "SSL-varmennevirhe"</translation>
 <translation id="6328786501058569169">Tämä sivusto on petollinen</translation>
@@ -1018,6 +1026,7 @@
 <translation id="6433490469411711332">Muokkaa yhteystietoja</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> kieltäytyi muodostamasta yhteyttä.</translation>
 <translation id="6434309073475700221">Hylkää</translation>
+<translation id="6435221585574090192">Jaa järjestelmänvalvojalle dataa Chrome Enterprisen uhkientorjunnan merkitsemistä tietoturvatapahtumista. Dataan voi sisältyä sivujen URL-osoitteita, tiedostojen nimiä ja sisällönkuvaustietoja, laitteesi käyttäjänimi ja Chromen käyttäjänimi.</translation>
 <translation id="6440503408713884761">Ohitettu</translation>
 <translation id="6446163441502663861">Kahu (kirjekuori)</translation>
 <translation id="6446608382365791566">Lisää tietoja</translation>
@@ -1062,6 +1071,7 @@
 <translation id="6671697161687535275">Poistetaanko lomake-ehdotus Chromiumista?</translation>
 <translation id="6685834062052613830">Kirjaudu ulos ja suorita määritys loppuun.</translation>
 <translation id="6689271823431384964">Chrome tarjoaa korttien tallentamista Google-tilillesi, koska olet kirjautuneena sisään. Voit muuttaa tätä koska tahansa asetuksista. Kortinhaltijan nimi on peräisin tililtäsi.</translation>
+<translation id="6707256370811247129">Tarkista välimuistin ja Chromessa lataamiesi tai lähettämiesi tiedostojen sisältö.</translation>
 <translation id="6710213216561001401">Edellinen</translation>
 <translation id="6710594484020273272">&lt;Anna hakukysely&gt;</translation>
 <translation id="671076103358959139">Käyttöönottotunnus:</translation>
@@ -1080,6 +1090,7 @@
 <translation id="681021252041861472">Pakollinen kenttä</translation>
 <translation id="6810899417690483278">Muokkaustunnus</translation>
 <translation id="6825578344716086703"><ph name="DOMAIN" />-palvelin, johon yritit muodostaa yhteyden, esitti heikkoa allekirjoitusalgoritmia käyttävän varmenteen (esim. SHA-1). Tästä syystä palvelimen esittämät tunnistetiedot saattavat olla väärennettyjä. Palvelin ei siis välttämättä ole tavoittelemasi palvelin, vaan saatat viestiä hakkerin kanssa.</translation>
+<translation id="6826370046007623921">Tietojen menetyksen esto</translation>
 <translation id="6831043979455480757">Käännä</translation>
 <translation id="6839929833149231406">Alue</translation>
 <translation id="6852204201400771460">Ladataanko sovellus uudelleen?</translation>
@@ -1226,6 +1237,7 @@
 <translation id="7542995811387359312">Automaattinen luottokortin tietojen täyttäminen on poistettu käytöstä, koska tämä lomake ei käytä suojattua yhteyttä.</translation>
 <translation id="7548892272833184391">Yhteysvirheiden korjaaminen</translation>
 <translation id="7549584377607005141">Tämän sivun näyttäminen oikein edellyttää aiemmin lähetettyjä tietoja. Voit lähettää tiedot uudelleen, mutta tällöin sivulla mahdollisesti suoritettu toiminto toistetaan.</translation>
+<translation id="7550637293666041147">Käyttäjänimi laitteella ja käyttäjänimi Chromessa</translation>
 <translation id="7552846755917812628">Kokeile seuraavia keinoja:</translation>
 <translation id="7554791636758816595">Uusi välilehti</translation>
 <translation id="7564049878696755256">Saatat menettää <ph name="ORG_NAME" />-tilisi käyttöoikeuden tai joutua identiteettivarkauden uhriksi. Chrome suosittelee salasanan vaihtamista välittömästi.</translation>
@@ -1240,6 +1252,7 @@
 <translation id="7610193165460212391">Arvo on alueen ulkopuolella (<ph name="VALUE" />).</translation>
 <translation id="7613889955535752492">Vanhenee: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Tietojasi on jo salattu Google-tilisi salasanan muulla versiolla. Syötä salasana alla.</translation>
+<translation id="7625784245512586808">Chrome Enterprisen uhkientorjunta</translation>
 <translation id="7633909222644580952">Tehokkuusdata ja virheraportit</translation>
 <translation id="7637571805876720304">Poistetaanko luottokortti Chromiumista?</translation>
 <translation id="7638605456503525968">Sarjaportit</translation>
@@ -1350,6 +1363,7 @@
 <translation id="8211406090763984747">Yhteys on turvallinen</translation>
 <translation id="8218327578424803826">Määrätty sijainti:</translation>
 <translation id="8220146938470311105">C7/C6 (kirjekuori)</translation>
+<translation id="8220639454292072926">Yrityksen raportointi</translation>
 <translation id="8225771182978767009">Tämän tietokoneen määrittänyt henkilö on estänyt tämän sivuston.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Avaa sivu uudessa incognito-välilehdessä.</translation>
@@ -1433,6 +1447,7 @@
 <translation id="8740359287975076522">Sivuston <ph name="HOST_NAME" /> &lt;abbr id="dnsDefinition"&gt;DNS-osoitetta&lt;/abbr&gt; ei löydy. Ongelmaa diagnosoidaan.</translation>
 <translation id="874846938927089722">Hyväksytyt luotto- ja prepaid-kortit</translation>
 <translation id="874918643257405732">Aseta tämä välilehti kirjanmerkiksi</translation>
+<translation id="8751426954251315517">Yritä seuraavalla kerralla uudelleen</translation>
 <translation id="8759274551635299824">Tämä kortti on vanhentunut.</translation>
 <translation id="8761567432415473239">Google-selaussuoja <ph name="BEGIN_LINK" />löysi hiljattain haitallisia ohjelmia<ph name="END_LINK" /> sivustolta <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB-laite</translation>
@@ -1497,6 +1512,7 @@
 <translation id="9080712759204168376">Tilauksen yhteenveto</translation>
 <translation id="9089260154716455634">Ei-aktiivisen ajan käytäntö:</translation>
 <translation id="9095388113577226029">Lisää kieliä…</translation>
+<translation id="9098981495403789647">Järjestelmänvalvoja on ottanut Chrome Enterprisen uhkientorjunnan käyttöön selaimellesi. Chrome Enterprisen uhkientorjunnalla on pääsy osaan datastasi.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> suojaa tietosi normaalisti salauksen avulla. Kun Chromium yritti tällä kertaa yhdistää sivustoon <ph name="SITE" />, sivusto palautti epätavalliset ja virheelliset kirjautumistiedot. Hyökkääjä saattaa yrittää esiintyä sivustona <ph name="SITE" />, tai Wi-Fi-kirjautumisruutu on keskeyttänyt yhteyden. Tietosi ovat edelleen turvassa, sillä Chromium katkaisi yhteyden, ennen kuin mitään tietoja vaihdettiin.</translation>
 <translation id="9106062320799175032">Lisää laskutusosoite</translation>
 <translation id="9114524666733003316">Vahvistetaan korttia…</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index 03c3c912..3977684 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">Subukang makipag-ugnayan sa admin ng system.</translation>
 <translation id="1740951997222943430">Maglagay ng wastong buwan ng pag-expire</translation>
 <translation id="1743520634839655729">Para mas mabilis na makapagbayad sa susunod, i-save ang iyong card, pangalan, at billing address sa Google Account mo at sa device na ito.</translation>
+<translation id="1743570585616704562">Hindi nakilala</translation>
 <translation id="1745880797583122200">Pinapamahalaan ang iyong browser</translation>
 <translation id="17513872634828108">Mga bukas na tab</translation>
 <translation id="1753706481035618306">Numero ng page</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 14badd2..388401b9 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">Un logiciel installé sur votre ordinateur empêche Chrome de se connecter au Web de manière sécurisée (sous Windows uniquement)</translation>
 <translation id="1294154142200295408">Variations de ligne de commande</translation>
 <translation id="129553762522093515">Récemment fermés</translation>
+<translation id="1298536327547837046">Analyse à la recherche de logiciels malveillants</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Essayez de supprimer les cookies.<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Fonctionnalités obsolètes</translation>
 <translation id="1320233736580025032">Prc1 (enveloppe)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Essayez de contacter l'administrateur système.</translation>
 <translation id="1740951997222943430">Saisissez un mois d'expiration valide</translation>
 <translation id="1743520634839655729">Pour régler plus rapidement vos achats la prochaine fois, enregistrez votre carte, votre nom et votre adresse de facturation dans votre compte Google et sur cet appareil.</translation>
+<translation id="1743570585616704562">Non reconnu</translation>
 <translation id="1745880797583122200">Votre navigateur est géré</translation>
 <translation id="17513872634828108">Onglets ouverts</translation>
 <translation id="1753706481035618306">Numéro de page</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Annuler le paiement</translation>
 <translation id="3207960819495026254">Favori</translation>
 <translation id="3209034400446768650">Cette page peut vous facturer de l'argent</translation>
+<translation id="3215092763954878852">Impossible d'utiliser WebAuthn</translation>
 <translation id="3225919329040284222">Le serveur dispose d'un certificat qui ne répond pas aux exigences intégrées. Celles-ci sont incluses dans certains sites Web très sécurisés afin de vous protéger.</translation>
 <translation id="3226128629678568754">Veuillez appuyer sur le bouton d'actualisation pour renvoyer les données nécessaires au chargement de la page.</translation>
 <translation id="3227137524299004712">Micro</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Aucun}=1{De 1 site }one{De # site }other{De # sites }}</translation>
 <translation id="397105322502079400">Calcul en cours…</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> est bloqué</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> a activé la fonctionnalité de protection Chrome Enterprise contre les menaces dans votre navigateur. Cette fonctionnalité a accès à certaines de vos données.</translation>
 <translation id="3987940399970879459">Moins de 1 Mo</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 page Web à proximité}one{# page Web à proximité}other{# pages Web à proximité}}</translation>
 <translation id="4030383055268325496">&amp;Annuler l'ajout</translation>
@@ -578,7 +582,7 @@
 <translation id="4103249731201008433">Le numéro de série de l'appareil n'est pas valide.</translation>
 <translation id="410351446219883937">Lecture automatique</translation>
 <translation id="4103763322291513355">Accédez à &lt;strong&gt;chrome://policy&lt;/strong&gt; pour consulter une liste des URL ajoutées à la liste noire et des autres règles définies par votre administrateur système.</translation>
-<translation id="4108231218301530806">Utiliser votre empreinte pour valider la carte la prochaine fois.</translation>
+<translation id="4108231218301530806">Utiliser votre empreinte digitale pour valider cette carte la prochaine fois.</translation>
 <translation id="4110652170750985508">Vérifier votre paiement</translation>
 <translation id="4112140312785995938">Retour rapide</translation>
 <translation id="4116663294526079822">Toujours autoriser sur ce site</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">Réinitialiser le mot de passe</translation>
 <translation id="4279811152705618813">Votre <ph name="DEVICE_TYPE" /> est géré par <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Cette carte a été enregistrée dans votre compte Google}one{Cette carte a été enregistrée dans votre compte Google}other{Ces cartes ont été enregistrées dans votre compte Google}}</translation>
+<translation id="428847186335018806">Analysez les fichiers que vous téléchargez ou importez dans Chrome.</translation>
 <translation id="42981349822642051">Développer</translation>
 <translation id="4302965934281694568">Chou3 (enveloppe)</translation>
 <translation id="4305817255990598646">Changer</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">Erreur de validation : <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4506599922270137252">Contacter l'administrateur système</translation>
 <translation id="450710068430902550">Partage avec l'administrateur</translation>
+<translation id="4508814173490746936">Impossible d'utiliser Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (enveloppe)</translation>
 <translation id="4515275063822566619">Les cartes et les adresses proviennent de Chrome et de votre compte Google (<ph name="ACCOUNT_EMAIL" />). Vous pouvez les gérer dans les <ph name="BEGIN_LINK" />paramètres<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (enveloppe)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">Mot de passe incorrect</translation>
 <translation id="5056549851600133418">Articles pour vous</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 en cours d'utilisation)}one{(# en cours d'utilisation)}other{(# en cours d'utilisation)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Vérifier l'adresse du proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Le certificat actuel du serveur n'est pas valide.</translation>
 <translation id="5087580092889165836">Ajouter une carte</translation>
@@ -991,6 +998,7 @@
 <translation id="6302269476990306341">Arrêt de l'Assistant Google dans Chrome</translation>
 <translation id="6305205051461490394"><ph name="URL" /> est inaccessible.</translation>
 <translation id="6321917430147971392">Vérifiez vos paramètres DNS</translation>
+<translation id="6322182122604171028">Impossible d'utiliser Windows Hello</translation>
 <translation id="6328639280570009161">Essayez de désactiver la prédiction réseau</translation>
 <translation id="6328784461820205019">"Votre connexion n'est pas privée", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" ou "Erreur de certificat SSL"</translation>
 <translation id="6328786501058569169">Ce site est trompeur</translation>
@@ -1014,6 +1022,7 @@
 <translation id="6433490469411711332">Modifier les coordonnées</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> n'autorise pas la connexion.</translation>
 <translation id="6434309073475700221">Annuler</translation>
+<translation id="6435221585574090192">Transmettez à votre administrateur les données sur les événements liés à la sécurité qui ont été signalés par la fonctionnalité de protection contre les menaces disponible dans Chrome Enterprise. Il peut s'agir d'URL de pages, de noms et de métadonnées de fichiers, de votre nom d'utilisateur Chrome et de celui lié à votre appareil.</translation>
 <translation id="6440503408713884761">Ignoré</translation>
 <translation id="6446163441502663861">Kahu (enveloppe)</translation>
 <translation id="6446608382365791566">Ajouter d'autres informations</translation>
@@ -1058,6 +1067,7 @@
 <translation id="6671697161687535275">Supprimer la suggestion de saisie de formulaire de Chromium ?</translation>
 <translation id="6685834062052613830">Déconnectez-vous et complétez la configuration.</translation>
 <translation id="6689271823431384964">Chrome propose d'enregistrer vos cartes dans votre compte Google, car vous êtes connecté. Vous pouvez modifier ce comportement dans les paramètres. Le nom du titulaire de la carte provient de votre compte.</translation>
+<translation id="6707256370811247129">Analysez le contenu du cache et des fichiers que vous téléchargez ou importez dans Chrome.</translation>
 <translation id="6710213216561001401">Précédent</translation>
 <translation id="6710594484020273272">&lt;Saisissez le terme de recherche&gt;</translation>
 <translation id="671076103358959139">Jeton d'inscription :</translation>
@@ -1076,6 +1086,7 @@
 <translation id="681021252041861472">Champ obligatoire</translation>
 <translation id="6810899417690483278">ID de la personnalisation</translation>
 <translation id="6825578344716086703">Vous avez tenté d'accéder à <ph name="DOMAIN" />, mais le serveur a présenté un certificat signé à l'aide d'un algorithme de signature faible (par exemple, SHA-1). Il est possible que le certificat fourni par le serveur ait été falsifié. Il se peut donc que le serveur ne soit pas celui auquel vous souhaitez accéder, et qu'il s'agisse d'une tentative de piratage.</translation>
+<translation id="6826370046007623921">Protection contre la perte de données</translation>
 <translation id="6831043979455480757">Traduire</translation>
 <translation id="6839929833149231406">Zone</translation>
 <translation id="6852204201400771460">Actualiser l'application ?</translation>
@@ -1222,6 +1233,7 @@
 <translation id="7542995811387359312">La saisie automatique des numéros de carte de paiement est désactivée, car la connexion utilisée par ce formulaire n'est pas sécurisée.</translation>
 <translation id="7548892272833184391">Corriger les erreurs de connexion</translation>
 <translation id="7549584377607005141">Pour s'afficher correctement, cette page Web a besoin des données que vous avez saisies précédemment. Vous pouvez envoyer de nouveau ces données. Cependant, en procédant ainsi, vous répéterez toute action déjà effectuée sur cette page.</translation>
+<translation id="7550637293666041147">Votre nom d'utilisateur Chrome et celui lié à votre appareil</translation>
 <translation id="7552846755917812628">Essayez les astuces suivantes :</translation>
 <translation id="7554791636758816595">Nouvel onglet</translation>
 <translation id="7564049878696755256">Vous risquez de perdre l'accès à votre compte <ph name="ORG_NAME" /> ou d'être victime d'usurpation d'identité. L'équipe Chrome vous recommande de modifier votre mot de passe maintenant.</translation>
@@ -1236,6 +1248,7 @@
 <translation id="7610193165460212391">La valeur <ph name="VALUE" /> est hors limites.</translation>
 <translation id="7613889955535752492">Date d'expiration : <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Vous disposez déjà de données chiffrées à l'aide d'une autre version de votre mot de passe de compte Google. Veuillez saisir celui-ci ci-dessous.</translation>
+<translation id="7625784245512586808">Protection Chrome Enterprise contre les menaces</translation>
 <translation id="7633909222644580952">Données relatives aux performances et rapports d'erreur</translation>
 <translation id="7637571805876720304">Supprimer les données de carte de paiement de Chromium ?</translation>
 <translation id="7638605456503525968">Ports série</translation>
@@ -1346,6 +1359,7 @@
 <translation id="8211406090763984747">La connexion est sécurisée</translation>
 <translation id="8218327578424803826">Position attribuée : </translation>
 <translation id="8220146938470311105">C7/C6 (enveloppe)</translation>
+<translation id="8220639454292072926">Rapports d'entreprise</translation>
 <translation id="8225771182978767009">La personne qui a configuré cet ordinateur a choisi de bloquer ce site.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Ouvrir la page dans un nouvel onglet de navigation privée</translation>
@@ -1428,6 +1442,7 @@
 <translation id="8740359287975076522">L'&lt;abbr id="dnsDefinition"&gt;adresse DNS&lt;/abbr&gt; de <ph name="HOST_NAME" /> est introuvable. Identification du problème…</translation>
 <translation id="874846938927089722">Cartes de crédit et cartes prépayées acceptées</translation>
 <translation id="874918643257405732">Ajouter cet onglet aux favoris</translation>
+<translation id="8751426954251315517">Veuillez réessayer plus tard</translation>
 <translation id="8759274551635299824">Carte arrivée à expiration</translation>
 <translation id="8761567432415473239">La fonctionnalité de navigation sécurisée a récemment permis de <ph name="BEGIN_LINK" />détecter des programmes dangereux<ph name="END_LINK" /> sur le site <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Périphérique USB</translation>
@@ -1492,6 +1507,7 @@
 <translation id="9080712759204168376">Récapitulatif de la commande</translation>
 <translation id="9089260154716455634">Règle en heures creuses :</translation>
 <translation id="9095388113577226029">Plus de langues…</translation>
+<translation id="9098981495403789647">Votre administrateur a activé la fonctionnalité de protection Chrome Enterprise contre les menaces dans votre navigateur. Cette fonctionnalité a accès à certaines de vos données.</translation>
 <translation id="9103872766612412690">Un chiffrement est normalement utilisé sur le site <ph name="SITE" /> pour protéger vos informations. Lors de la dernière tentative de connexion de Chromium au site <ph name="SITE" />, des identifiants inhabituels et incorrects ont été retournés. Il est possible qu'un individu malveillant tente de se faire passer pour <ph name="SITE" /> ou qu'un écran de connexion Wi-Fi ait interrompu la connexion. Vos informations restent sécurisées, car nous avons arrêté la connexion avant l'échange des données.</translation>
 <translation id="9106062320799175032">Ajouter une adresse de facturation</translation>
 <translation id="9114524666733003316">Validation de la carte…</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 8b81997..d67763cb 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">સિસ્ટમ વ્યવસ્થાપકનો સંપર્ક કરવાનો પ્રયાસ કરો.</translation>
 <translation id="1740951997222943430">એક માન્ય સમાપ્તિ મહિનો દાખલ કરો</translation>
 <translation id="1743520634839655729">આગલી વખતે વધુ ઝડપથી ચુકવણી કરવા માટે, તમારા કાર્ડ, નામ અને બિલિંગ સરનામાને તમારા Google એકાઉન્ટ અને આ ઉપકરણ પર સાચવો.</translation>
+<translation id="1743570585616704562">ઓળખાયેલ નથી</translation>
 <translation id="1745880797583122200">તમારું બ્રાઉઝર મેનેજ કરવામાં આવે છે</translation>
 <translation id="17513872634828108">ટેબ્સ ખોલો</translation>
 <translation id="1753706481035618306">પૃષ્ઠ નંબર</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index f41b45c12..e6eb61f1 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">सिस्टम व्यवस्थापक से संपर्क करने का प्रयास करें.</translation>
 <translation id="1740951997222943430">खत्म होने का मान्य महीना डालें</translation>
 <translation id="1743520634839655729">अगली बार तेज़ी से भुगतान करने के लिए, अपने कार्ड, नाम और बिलिंग पते को अपने 'Google खाते' में और इस डिवाइस में सेव करें.</translation>
+<translation id="1743570585616704562">उंगली की पहचान नहीं हो सकी</translation>
 <translation id="1745880797583122200">आपका ब्राउज़र प्रबंधित है</translation>
 <translation id="17513872634828108">टैब खोलें</translation>
 <translation id="1753706481035618306">पृष्‍ठ संख्‍या</translation>
@@ -577,6 +578,7 @@
 <translation id="4103249731201008433">डिवाइस की क्रम संख्या गलत है</translation>
 <translation id="410351446219883937">अपने आप चलाएं</translation>
 <translation id="4103763322291513355">प्रतिबंधित किए गए यूआरएल और आपके सिस्टम ए़़डमिन ने जिन अन्य नीतियों को लागू किया है, उन्हें देखने के लिए &lt;strong&gt;chrome://policy&lt;/strong&gt; पर जाएं.</translation>
+<translation id="4108231218301530806">अगली बार इस कार्ड की पुष्टि के लिए फ़िंगरप्रिंट का इस्तेमाल करें.</translation>
 <translation id="4110652170750985508">अपना भुगतान देखें</translation>
 <translation id="4112140312785995938">पीछे जाएं</translation>
 <translation id="4116663294526079822">इस साइट पर हमेशा अनुमति दें</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index 2533ecb..0811d24 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Softver na vašem računalu sprječava sigurno povezivanje Chromea s webom" (samo na Windows računalima)</translation>
 <translation id="1294154142200295408">Varijacije naredbenog retka</translation>
 <translation id="129553762522093515">Nedavno zatvoreno</translation>
+<translation id="1298536327547837046">Skeniranje zlonamjernog softvera</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Izbrišite kolačiće<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Ukinute značajke</translation>
 <translation id="1320233736580025032">Prc1 (omotnica)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Pokušajte kontaktirati administratora sustava.</translation>
 <translation id="1740951997222943430">Unesite važeći mjesec isteka</translation>
 <translation id="1743520634839655729">Da biste sljedeći put platili brže, spremite karticu, ime i adresu za naplatu na svoj Google račun i ovaj uređaj.</translation>
+<translation id="1743570585616704562">Nije prepoznat</translation>
 <translation id="1745880797583122200">Preglednikom se upravlja</translation>
 <translation id="17513872634828108">Otvorene kartice</translation>
 <translation id="1753706481035618306">Broj stranice</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Otkaži plaćanje</translation>
 <translation id="3207960819495026254">Označeno</translation>
 <translation id="3209034400446768650">Stranica se možda naplaćuje</translation>
+<translation id="3215092763954878852">WebAuthn se nije mogao koristiti</translation>
 <translation id="3225919329040284222">Poslužitelj je pokazao certifikat koji ne odgovara ugrađenim očekivanjima. Ta su očekivanja uključena za određene web-lokacije s visokim stupnjem sigurnosti radi vaše zaštite.</translation>
 <translation id="3226128629678568754">Pritisnite gumb za ponovno učitavanje da biste ponovo poslali podatke koji su potrebni za učitavanje stranice.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -563,6 +566,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Nijedna}=1{S 1 web-lokacije }one{S/sa # web-lokacije }few{S/sa # web-lokacije }other{S/sa # web-lokacija }}</translation>
 <translation id="397105322502079400">Izračun u tijeku…</translation>
 <translation id="3973234410852337861">Host <ph name="HOST_NAME" /> je blokiran</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> je u pregledniku omogućio funkciju Zaštite od prijetnji u Chromeu za poduzeća. Zaštita od prijetnji u Chromeu za poduzeća ima pristup nekim vašim podacima.</translation>
 <translation id="3987940399970879459">Manje od 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 web-stranica u blizini}one{# web-stranica u blizini}few{# web-stranice u blizini}other{# web-stranica u blizini}}</translation>
 <translation id="4030383055268325496">&amp;Poništi dodavanje</translation>
@@ -631,6 +635,7 @@
 <translation id="4277028893293644418">Poništi zaporku</translation>
 <translation id="4279811152705618813">Vašim uređajem <ph name="DEVICE_TYPE" /> upravlja <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ova je kartica spremljena na vašem Google računu}one{Ove su kartice spremljene na vašem Google računu}few{Ove su kartice spremljene na vašem Google računu}other{Ove su kartice spremljene na vašem Google računu}}</translation>
+<translation id="428847186335018806">Pregledajte datoteke koje preuzimate iz Chromea ili prenosite u Chrome.</translation>
 <translation id="42981349822642051">Proširi</translation>
 <translation id="4302965934281694568">Chou3 (omotnica)</translation>
 <translation id="4305817255990598646">Prebaci</translation>
@@ -669,6 +674,7 @@
 <translation id="4506176782989081258">Pogreška pri provjeri valjanosti: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4506599922270137252">kontaktirajte administratora sustava</translation>
 <translation id="450710068430902550">Dijeljenje s administratorom</translation>
+<translation id="4508814173490746936">Upotreba Touch ID-ja nije uspjela</translation>
 <translation id="4510487217173779431">Chou4 (omotnica)</translation>
 <translation id="4515275063822566619">Kartice i adrese dolaze iz Cromea i vašeg Google računa (<ph name="ACCOUNT_EMAIL" />). Njima možete upravljati u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (omotnica)</translation>
@@ -764,6 +770,7 @@
 <translation id="5045550434625856497">Pogrešna zaporka</translation>
 <translation id="5056549851600133418">Preporučeni članci</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(jedan u upotrebi)}one{(# u upotrebi)}few{(# u upotrebi)}other{(# u upotrebi)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />provjerite proxy adresu<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Certifikat poslužitelja trenutačno nije važeći.</translation>
 <translation id="5087580092889165836">Dodaj karticu</translation>
@@ -993,6 +1000,7 @@
 <translation id="6302269476990306341">Zaustavljanje Google asistenta u Chromeu</translation>
 <translation id="6305205051461490394">Web-lokacija <ph name="URL" /> nije dostupna.</translation>
 <translation id="6321917430147971392">Provjerite postavke DNS-a</translation>
+<translation id="6322182122604171028">Upotreba funkcije Windows Hello nije uspjela</translation>
 <translation id="6328639280570009161">Pokušajte onemogućiti predviđanja mreže</translation>
 <translation id="6328784461820205019">"Vaša veza nije privatna" ili "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" ili "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" ili "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" ili "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" ili "Pogreška SSL certifikata"</translation>
 <translation id="6328786501058569169">Ova je web-lokacija obmanjujuća</translation>
@@ -1016,6 +1024,7 @@
 <translation id="6433490469411711332">Uređivanje podataka za kontakt</translation>
 <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> odbio je povezivanje.</translation>
 <translation id="6434309073475700221">Odbaci</translation>
+<translation id="6435221585574090192">Podijelite s administratorom podatke o sigurnosnim događajima koji su označeni pomoću funkcije zaštite od prijetnji u Chromeu za poduzeća. Oni mogu obuhvaćati URL-ove stranica, naziv datoteke i metapodatke datoteke, korisničko ime uređaja i korisničko ime za Chrome.</translation>
 <translation id="6440503408713884761">Zanemareno</translation>
 <translation id="6446163441502663861">Kahu (omotnica)</translation>
 <translation id="6446608382365791566">Dodajte još podataka</translation>
@@ -1060,6 +1069,7 @@
 <translation id="6671697161687535275">Želite li ukloniti prijedlog iz Chromiuma?</translation>
 <translation id="6685834062052613830">Odjavite se i dovršite postavljanje</translation>
 <translation id="6689271823431384964">Chrome vam nudi spremanje vaših kartica na vaš Google račun jer ste prijavljeni. To ponašanje možete promijeniti u postavkama. Ime nositelja kartice preuzeto je s vašeg računa.</translation>
+<translation id="6707256370811247129">Pregledajte sadržaj predmemorije i datoteka koje preuzimate iz Chromea ili prenosite u Chrome.</translation>
 <translation id="6710213216561001401">Prethodno</translation>
 <translation id="6710594484020273272">&lt;Upišite pojam za pretraživanje&gt;</translation>
 <translation id="671076103358959139">Oznaka za prijavu:</translation>
@@ -1078,6 +1088,7 @@
 <translation id="681021252041861472">Obavezno polje</translation>
 <translation id="6810899417690483278">ID prilagođavanja</translation>
 <translation id="6825578344716086703">Pokušali ste doseći domenu <ph name="DOMAIN" />, ali poslužitelj je predstavio certifikat potpisan slabim algoritmom potpisa (kao što je SHA-1). Znači da su sigurnosne vjerodajnice koje je poslužitelj predstavio možda krivotvorene, a poslužitelj možda nije poslužitelj koji očekujete (možda ste u komunikaciji s napadačem).</translation>
+<translation id="6826370046007623921">Sprječavanje gubitka podataka</translation>
 <translation id="6831043979455480757">Prevedi</translation>
 <translation id="6839929833149231406">Područje</translation>
 <translation id="6852204201400771460">Ponovo učitati aplikaciju?</translation>
@@ -1224,6 +1235,7 @@
 <translation id="7542995811387359312">Automatsko popunjavanje kreditne kartice onemogućeno je jer se ovaj obrazac ne služi sigurnom vezom.</translation>
 <translation id="7548892272833184391">Ispravljanje pogrešaka veze</translation>
 <translation id="7549584377607005141">Ova web-stranica zahtijeva podatke koje ste ranije unijeli da bi se pravilno prikazala. Te podatke možete poslati ponovo, ali time ćete ponoviti sve radnje koje je ta stranica prethodno izvela.</translation>
+<translation id="7550637293666041147">Korisničko ime uređaja i korisničko ime za Chrome</translation>
 <translation id="7552846755917812628">Pokušajte učiniti sljedeće:</translation>
 <translation id="7554791636758816595">Nova kartica</translation>
 <translation id="7564049878696755256">Mogli biste izgubiti pristup svojem <ph name="ORG_NAME" /> računu ili bi netko mogao ukrasti vaš identitet. Chrome preporučuje da odmah promijenite zaporku.</translation>
@@ -1238,6 +1250,7 @@
 <translation id="7610193165460212391">Vrijednost je izvan raspona <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Istječe: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Već imate podatke koji su kriptirani pomoću druge verzije zaporke vašeg Google računa. Unesite je u nastavku.</translation>
+<translation id="7625784245512586808">Zaštita od prijetnji u Chromeu za poduzeća</translation>
 <translation id="7633909222644580952">Podaci o uspješnosti i izvješća o padu programa</translation>
 <translation id="7637571805876720304">Želite li ukloniti kreditnu karticu iz Chromiuma?</translation>
 <translation id="7638605456503525968">Serijski priključci</translation>
@@ -1348,6 +1361,7 @@
 <translation id="8211406090763984747">Veza je sigurna</translation>
 <translation id="8218327578424803826">Dodijeljena lokacija:</translation>
 <translation id="8220146938470311105">C7/C6 (omotnica)</translation>
+<translation id="8220639454292072926">Izvještavanje za poduzeća</translation>
 <translation id="8225771182978767009">Osoba koja je postavila računalo blokirala je tu web-lokaciju.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Otvorite stranicu u novoj anonimnoj kartici</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;DNS adresa&lt;/abbr&gt; hosta <ph name="HOST_NAME" /> nije pronađena. U tijeku je dijagnosticiranje problema.</translation>
 <translation id="874846938927089722">Prihvaćene kreditne i pretplatne kartice</translation>
 <translation id="874918643257405732">Označi ovu karticu</translation>
+<translation id="8751426954251315517">Pokušajte ponovo drugi put</translation>
 <translation id="8759274551635299824">Ta je kartica istekla</translation>
 <translation id="8761567432415473239">Googleovo Sigurno pregledavanje nedavno je <ph name="BEGIN_LINK" />pronašlo štetne programe<ph name="END_LINK" /> na web-lokaciji <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB uređaj</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">Sažetak narudžbe</translation>
 <translation id="9089260154716455634">Pravilo za prekid rada:</translation>
 <translation id="9095388113577226029">Više jezika...</translation>
+<translation id="9098981495403789647">Administrator je u pregledniku omogućio funkciju zaštite od prijetnji u Chromeu za poduzeća. Zaštita od prijetnji u Chromeu za poduzeća ima pristup nekim vašim podacima.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> obično upotrebljava enkripciju radi zaštite vaših podataka. Prilikom ovog pokušaja povezivanja Chromiuma s web-lokacijom <ph name="SITE" /> ta je web-lokacija vratila neuobičajene
 i netočne vjerodajnice. To može značiti da se neki napadač pokušava predstaviti kao <ph name="SITE" /> ili je zaslon za prijavu na Wi-Fi prekinuo vezu. Vaši su podaci još uvijek sigurni jer je Chromium zaustavio povezivanje prije razmjene podataka.</translation>
 <translation id="9106062320799175032">Dodajte adresu za naplatu</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 47efed4..8936831 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">„A számítógépen található valamelyik szoftver megakadályozza a Chrome-ot abban, hogy biztonságosan csatlakozzon az internetre” (csak Windows rendszerű számítógépeken)</translation>
 <translation id="1294154142200295408">Parancssorváltozatok</translation>
 <translation id="129553762522093515">Mostanában bezárt</translation>
+<translation id="1298536327547837046">Rosszindulatú program keresése</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Próbálkozzon a cookie-k törlésével<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Elavult funkciók</translation>
 <translation id="1320233736580025032">Prc1 (boríték)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Próbálja felvenni a kapcsolatot a rendszergazdával.</translation>
 <translation id="1740951997222943430">Érvényes lejárati hónapot kell megadnia</translation>
 <translation id="1743520634839655729">A következő alkalommal gyorsabban fizethet, ha kártyáját, nevét és számlázási címét elmenti Google-fiókjába és az eszközre.</translation>
+<translation id="1743570585616704562">Nem sikerült felismerni</translation>
 <translation id="1745880797583122200">A böngésző felügyelet alatt áll</translation>
 <translation id="17513872634828108">Megnyitott lapok</translation>
 <translation id="1753706481035618306">Oldalszám</translation>
@@ -424,6 +426,7 @@
 <translation id="320323717674993345">Fizetés visszavonása</translation>
 <translation id="3207960819495026254">Könyvjelző rögzítve</translation>
 <translation id="3209034400446768650">Az oldal díjat számíthat fel</translation>
+<translation id="3215092763954878852">Hiba történt a WebAuthn használata során</translation>
 <translation id="3225919329040284222">A szerver tanúsítványa nem felel meg a beépített elvárásoknak. Ezek a beépített elvárások bizonyos nagy biztonságú webhelyekre vonatkoznak az Ön védelme érdekében.</translation>
 <translation id="3226128629678568754">Nyomja meg a frissítés gombot az oldal betöltéséhez szükséges adatok újraküldéséhez.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -560,6 +563,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Nincs}=1{ 1 webhelytől }other{# webhelytől }}</translation>
 <translation id="397105322502079400">Számítás…</translation>
 <translation id="3973234410852337861">A(z) <ph name="HOST_NAME" /> le van tiltva</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> engedélyezte a Chrome Enterprise fenyegetések elleni védelme szolgáltatást a böngészőben. A Chrome Enterprise fenyegetések elleni védelme hozzáfér az Ön bizonyos adataihoz.</translation>
 <translation id="3987940399970879459">Kevesebb mint 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 közeli weboldal}other{# közeli weboldal}}</translation>
 <translation id="4030383055268325496">&amp;Hozzáadás visszavonása</translation>
@@ -628,6 +632,7 @@
 <translation id="4277028893293644418">Jelszó visszaállítása</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" /> eszközét a(z) <ph name="ENROLLMENT_DOMAIN" /> kezeli</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{A kártyát mentettük a Google-fiókjába.}other{Ezeket a kártyákat mentettük a Google-fiókjába.}}</translation>
+<translation id="428847186335018806">A Chrome használatával letöltött és feltöltött fájlok ellenőrzése.</translation>
 <translation id="42981349822642051">Kibontás</translation>
 <translation id="4302965934281694568">Chou3 (boríték)</translation>
 <translation id="4305817255990598646">Váltás</translation>
@@ -666,6 +671,7 @@
 <translation id="4506176782989081258">Érvényesítési hiba: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Kapcsolatfelvétel a rendszergazdával</translation>
 <translation id="450710068430902550">Megosztás a rendszergazdával</translation>
+<translation id="4508814173490746936">Hiba történt a Touch ID használata során</translation>
 <translation id="4510487217173779431">Chou4 (boríték)</translation>
 <translation id="4515275063822566619">A kártyák és a címek a Chrome-ból és az Ön Google-fiókjából (<ph name="ACCOUNT_EMAIL" />) származnak. A <ph name="BEGIN_LINK" />Beállításokban<ph name="END_LINK" /> kezelheti őket.</translation>
 <translation id="4517607026994743406">Comm-10 (boríték)</translation>
@@ -761,6 +767,7 @@
 <translation id="5045550434625856497">Helytelen jelszó</translation>
 <translation id="5056549851600133418">Cikkek Önnek</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 van használatban)}other{(# van használatban)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />A proxy címének ellenőrzése<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">A szerver tanúsítványa jelenleg nem érvényes.</translation>
 <translation id="5087580092889165836">Kártya hozzáadása</translation>
@@ -989,6 +996,7 @@
 <translation id="6302269476990306341">A Google Segéd a Chrome-ban szolgáltatás leáll</translation>
 <translation id="6305205051461490394">A(z) <ph name="URL" /> nem érhető el.</translation>
 <translation id="6321917430147971392">Ellenőrizze a DNS-beállításokat</translation>
+<translation id="6322182122604171028">Hiba történt a Windows Hello használata során</translation>
 <translation id="6328639280570009161">Próbálkozzon a hálózati előrejelzések kikapcsolásával</translation>
 <translation id="6328784461820205019">„Az Ön kapcsolata nem privát”, „&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;”, „&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;”, „&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;”, „&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;” vagy „SSL-tanúsítványhiba”</translation>
 <translation id="6328786501058569169">A webhely megtévesztő</translation>
@@ -1012,6 +1020,7 @@
 <translation id="6433490469411711332">Kapcsolattartási adatok szerkesztése</translation>
 <translation id="6433595998831338502">A(z) <ph name="HOST_NAME" /> visszautasította a csatlakozást.</translation>
 <translation id="6434309073475700221">Elvetés</translation>
+<translation id="6435221585574090192">A Chrome Enterprise fenyegetések elleni védelme által megjelölt biztonsági események adatait megoszthatja az adminisztrátorral. Az adatok tartalmazhatják az oldalak URL-jeit, a fájlok nevét és metaadatait, valamint az eszközhöz és a Chrome-hoz tartozó felhasználónevét.</translation>
 <translation id="6440503408713884761">Figyelmen kívül hagyva</translation>
 <translation id="6446163441502663861">Kahu (boríték)</translation>
 <translation id="6446608382365791566">További adatok hozzáadása</translation>
@@ -1056,6 +1065,7 @@
 <translation id="6671697161687535275">Eltávolítja az űrlapjavaslatot a Chromiumból?</translation>
 <translation id="6685834062052613830">Kijelentkezés és a beállítás befejezése</translation>
 <translation id="6689271823431384964">A Chrome felajánlja a kártyák mentését az Ön Google-fiókjába, mert be van jelentkezve. A beállítások között ezt bármikor módosíthatja. A kártyatulajdonos nevének forrása az Ön fiókja.</translation>
+<translation id="6707256370811247129">A gyorsítótár és a Chrome használatával letöltött és feltöltött fájlok tartalmának ellenőrzése.</translation>
 <translation id="6710213216561001401">Előző</translation>
 <translation id="6710594484020273272">&lt;Írja be a keresési kifejezést&gt;</translation>
 <translation id="671076103358959139">Regisztrációs token</translation>
@@ -1074,6 +1084,7 @@
 <translation id="681021252041861472">Kötelező mező</translation>
 <translation id="6810899417690483278">Testreszabás-azonosító</translation>
 <translation id="6825578344716086703">Megpróbálta elérni a(z) <ph name="DOMAIN" /> webhelyet, de a szerver gyenge aláírási algoritmust használó tanúsítványt mutatott be. Ez alapján elképzelhető, hogy a szerver által megadott biztonsági tanúsítványt meghamisították, és a szerver nem az, amelyikre számított (lehet, hogy éppen valamilyen támadóval kommunikál).</translation>
+<translation id="6826370046007623921">Adatszivárgás elleni védelem</translation>
 <translation id="6831043979455480757">Fordítás</translation>
 <translation id="6839929833149231406">Terület</translation>
 <translation id="6852204201400771460">Újratölti az alkalmazást?</translation>
@@ -1220,6 +1231,7 @@
 <translation id="7542995811387359312">Az automatikus bankkártya-kitöltés le van tiltva, mivel ez az űrlap nem biztonságos kapcsolatot használ.</translation>
 <translation id="7548892272833184391">A kapcsolódási hibák elhárítása</translation>
 <translation id="7549584377607005141">Ez a weboldal korábban megadott adatokat kér ahhoz, hogy megfelelően jelenjen meg. Az adatokat újra elküldheti, de ezzel meg fog ismételni minden olyan műveletet, amelyet ez az oldal korábban végrehajtott.</translation>
+<translation id="7550637293666041147">Az Ön, eszközhöz és a Chrome-hoz tartozó felhasználóneve</translation>
 <translation id="7552846755917812628">Próbálja ki az alábbi tippeket:</translation>
 <translation id="7554791636758816595">Új lap</translation>
 <translation id="7564049878696755256">Elveszítheti hozzáférést <ph name="ORG_NAME" />-fiókjához, vagy visszaélhetnek személyes adataival. A Chrome azt javasolja, hogy azonnal módosítsa jelszavát.</translation>
@@ -1234,6 +1246,7 @@
 <translation id="7610193165460212391">Az érték kívül esik a következő tartományon: <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Lejárat: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Már rendelkezik olyan adattal, amely Google-fiókja jelszavának egy másik verziójával van titkosítva. Kérjük, lentebb adja azt meg.</translation>
+<translation id="7625784245512586808">Chrome Enterprise fenyegetések elleni védelme</translation>
 <translation id="7633909222644580952">Teljesítményre vonatkozó adatok és hibajelentések</translation>
 <translation id="7637571805876720304">Eltávolítja a hitelkártyát a Chromiumból?</translation>
 <translation id="7638605456503525968">Soros portok</translation>
@@ -1344,6 +1357,7 @@
 <translation id="8211406090763984747">A kapcsolat biztonságos</translation>
 <translation id="8218327578424803826">Hozzárendelt helyszín:</translation>
 <translation id="8220146938470311105">C7/C6 (boríték)</translation>
+<translation id="8220639454292072926">Vállalati jelentéskészítés</translation>
 <translation id="8225771182978767009">A számítógépet beállító személy a webhely letiltása mellett döntött.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" /> és <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Oldal megnyitása új inkognitóablakban</translation>
@@ -1427,6 +1441,7 @@
 <translation id="8740359287975076522">A(z) <ph name="HOST_NAME" /> &lt;abbr id="dnsDefinition"&gt;DNS-címe&lt;/abbr&gt; nem található. A probléma diagnosztizálása folyamatban van.</translation>
 <translation id="874846938927089722">Elfogadott hitel- és feltöltőkártyák</translation>
 <translation id="874918643257405732">Lap hozzáadása a könyvjelzőkhöz</translation>
+<translation id="8751426954251315517">Próbálja újra később</translation>
 <translation id="8759274551635299824">A kártya lejárt</translation>
 <translation id="8761567432415473239">A Google Biztonságos Böngészés nemrég <ph name="BEGIN_LINK" />ártalmas programokat talált<ph name="END_LINK" /> a következő webhelyen: <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB-eszköz</translation>
@@ -1491,6 +1506,7 @@
 <translation id="9080712759204168376">Megrendelés összegzése</translation>
 <translation id="9089260154716455634">Házirend figyelmen kívül hagyása:</translation>
 <translation id="9095388113577226029">További nyelvek…</translation>
+<translation id="9098981495403789647">Az adminisztrátor engedélyezte a Chrome Enterprise fenyegetések elleni védelme szolgáltatást a böngészőben. A Chrome Enterprise fenyegetések elleni védelme hozzáfér az Ön bizonyos adataihoz.</translation>
 <translation id="9103872766612412690">A(z) <ph name="SITE" /> webhely rendes esetben titkosítást alkalmaz az Ön adatainak védelme érdekében. Amikor a Chromium most csatlakozni próbált, a(z) <ph name="SITE" /> webhely szokatlan és helytelen hitelesítési adatokat küldött vissza.Ez olyankor fordulhat elő, amikor egy támadó megpróbálja magát kiadni a(z) <ph name="SITE" /> webhelynek, vagy valamilyen Wi-Fi-bejelentkezési képernyő megszakította a kapcsolatot. Adatai továbbra is biztonságban vannak, mivel a Chromium még azt megelőzően megszakította a kapcsolatot, hogy bármiféle adatcserére sor kerülhetett volna.</translation>
 <translation id="9106062320799175032">Számlázási cím hozzáadása</translation>
 <translation id="9114524666733003316">Kártya ellenőrzése…</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index 080e5cd..0c4e33d 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">Coba hubungi admin sistem.</translation>
 <translation id="1740951997222943430">Masukkan bulan habis masa berlaku yang valid</translation>
 <translation id="1743520634839655729">Untuk membayar lebih cepat di pembelian berikutnya, simpan kartu, nama, dan alamat penagihan ke Akun Google Anda dan ke perangkat ini.</translation>
+<translation id="1743570585616704562">Tidak dikenali</translation>
 <translation id="1745880797583122200">Browser Anda dikelola</translation>
 <translation id="17513872634828108">Buka tab</translation>
 <translation id="1753706481035618306">Nomor halaman</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 898ceab..e03249f 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Il software installato sul computer sta impedendo a Chrome di connettersi in sicurezza a Internet" (solo su computer Windows)</translation>
 <translation id="1294154142200295408">Variazioni nella riga di comando</translation>
 <translation id="129553762522093515">Chiuse di recente</translation>
+<translation id="1298536327547837046">Analisi della presenza di malware</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Prova a cancellare i cookie<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funzionalità obsolete</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Prova a contattare l'amministratore di sistema.</translation>
 <translation id="1740951997222943430">Inserisci un mese di scadenza valido</translation>
 <translation id="1743520634839655729">Per pagare più velocemente la prossima volta, salva la carta e l'indirizzo di fatturazione sul tuo Account Google e su questo dispositivo.</translation>
+<translation id="1743570585616704562">Non riconosciuta</translation>
 <translation id="1745880797583122200">Il browser in uso è gestito</translation>
 <translation id="17513872634828108">Schede aperte</translation>
 <translation id="1753706481035618306">Numero di pagina</translation>
@@ -425,6 +427,7 @@
 <translation id="320323717674993345">Annulla pagamento</translation>
 <translation id="3207960819495026254">Aggiunto ai preferiti</translation>
 <translation id="3209034400446768650">La pagina potrebbe addebitare denaro</translation>
+<translation id="3215092763954878852">Impossibile usare WebAuthn</translation>
 <translation id="3225919329040284222">Il server ha presentato un certificato che non corrisponde alle previsioni integrate. Queste previsioni sono incluse per determinati siti web con protezione elevata allo scopo di proteggerti.</translation>
 <translation id="3226128629678568754">Premi il pulsante Ricarica per inviare di nuovo i dati necessari per caricare la pagina.</translation>
 <translation id="3227137524299004712">Microfono</translation>
@@ -561,6 +564,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Nessuno}=1{Di 1 sito }other{Di # siti }}</translation>
 <translation id="397105322502079400">Calcolo in corso...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> è bloccato</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ha attivato Chrome Enterprise Threat Protection sul tuo browser. Chrome Enterprise Threat Protection ha accesso ad alcuni tuoi dati.</translation>
 <translation id="3987940399970879459">Meno di 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{Una pagina web nelle vicinanze}other{# pagine web nelle vicinanze}}</translation>
 <translation id="4030383055268325496">&amp;Annulla aggiunta</translation>
@@ -629,6 +633,7 @@
 <translation id="4277028893293644418">Reimposta password</translation>
 <translation id="4279811152705618813">Il tuo dispositivo <ph name="DEVICE_TYPE" /> è gestito dal dominio <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Questa carta è stata salvata nel tuo Account Google}other{Queste carte sono state salvate nel tuo Account Google}}</translation>
+<translation id="428847186335018806">Consente di analizzare i file scaricati e caricati in Chrome.</translation>
 <translation id="42981349822642051">Espandi</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">Cambia</translation>
@@ -667,6 +672,7 @@
 <translation id="4506176782989081258">Errore di convalida. <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Contattare l'amministratore di sistema</translation>
 <translation id="450710068430902550">Condivisione con l'amministratore</translation>
+<translation id="4508814173490746936">Impossibile usare Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">Carte di credito e indirizzi provengono da Chrome e dall'Account Google (<ph name="ACCOUNT_EMAIL" />). Puoi gestirli in <ph name="BEGIN_LINK" />Impostazioni<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)</translation>
@@ -762,6 +768,7 @@
 <translation id="5045550434625856497">Password non corretta</translation>
 <translation id="5056549851600133418">Articoli per te</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 in uso)}other{(# in uso)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Controllare l'indirizzo proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Il certificato del server non è valido in questa fase.</translation>
 <translation id="5087580092889165836">Aggiungi carta</translation>
@@ -990,6 +997,7 @@
 <translation id="6302269476990306341">Interruzione dell'Assistente Google in Chrome</translation>
 <translation id="6305205051461490394"><ph name="URL" /> non è raggiungibile.</translation>
 <translation id="6321917430147971392">Controlla le impostazioni DNS</translation>
+<translation id="6322182122604171028">Impossibile usare Windows Hello</translation>
 <translation id="6328639280570009161">Prova a disattivare la previsione della rete</translation>
 <translation id="6328784461820205019">"La connessione non è privata", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" o "Errore certificato SSL"</translation>
 <translation id="6328786501058569169">Questo sito è ingannevole</translation>
@@ -1013,6 +1021,7 @@
 <translation id="6433490469411711332">Modifica informazioni di contatto</translation>
 <translation id="6433595998831338502">Connessione negata da <ph name="HOST_NAME" />.</translation>
 <translation id="6434309073475700221">Annulla</translation>
+<translation id="6435221585574090192">Consente di condividere con l'amministratore i dati relativi agli eventi di sicurezza segnalati da Chrome Enterprise Threat Protection. Tali dati potrebbero includere URL di pagine, metadati di file e nomi file, il nome utente del dispositivo e di Chrome.</translation>
 <translation id="6440503408713884761">Ignorata</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">Aggiungi altre informazioni</translation>
@@ -1057,6 +1066,7 @@
 <translation id="6671697161687535275">Rimuovere il suggerimento per i moduli da Chromium?</translation>
 <translation id="6685834062052613830">Esci e completa la configurazione</translation>
 <translation id="6689271823431384964">Chrome chiede se vuoi salvare le tue carte nel tuo Account Google perché hai eseguito l'accesso. Puoi modificare questo comportamento nelle impostazioni. Il nome del titolare della carta proviene dal tuo account.</translation>
+<translation id="6707256370811247129">Consente di analizzare i contenuti della cache e i file scaricati o caricati in Chrome.</translation>
 <translation id="6710213216561001401">Indietro</translation>
 <translation id="6710594484020273272">&lt;Digita un termine di ricerca&gt;</translation>
 <translation id="671076103358959139">Token di registrazione:</translation>
@@ -1075,6 +1085,7 @@
 <translation id="681021252041861472">Campo obbligatorio</translation>
 <translation id="6810899417690483278">ID personalizzazione</translation>
 <translation id="6825578344716086703">Hai tentato di accedere al sito <ph name="DOMAIN" />, ma il server ha presentato un certificato firmato utilizzando un algoritmo di firma debole (ad esempio SHA-1). Ciò significa che le credenziali di sicurezza presentate dal server potrebbero essere state falsificate e il server potrebbe non essere quello previsto (è possibile che tu stia comunicando con un malintenzionato).</translation>
+<translation id="6826370046007623921">Prevenzione della perdita dei dati</translation>
 <translation id="6831043979455480757">Traduci</translation>
 <translation id="6839929833149231406">Area</translation>
 <translation id="6852204201400771460">Ricaricare l'app?</translation>
@@ -1221,6 +1232,7 @@
 <translation id="7542995811387359312">La compilazione automatica della carta di credito è disattivata perché questo modulo non utilizza una connessione sicura.</translation>
 <translation id="7548892272833184391">Correggere gli errori di connessione</translation>
 <translation id="7549584377607005141">Questa pagina web richiede dati che hai inserito in precedenza per poter essere visualizzata correttamente. Puoi inviare di nuovo i dati, ma in questo caso ripeterai l'azione precedentemente eseguita nella pagina.</translation>
+<translation id="7550637293666041147">Nome utente del dispositivo e nome utente di Chrome</translation>
 <translation id="7552846755917812628">Prova i seguenti suggerimenti:</translation>
 <translation id="7554791636758816595">Nuova scheda</translation>
 <translation id="7564049878696755256">Potresti non riuscire più ad accedere al tuo account <ph name="ORG_NAME" /> o subire un furto d'identità. Chrome ti consiglia di cambiare subito la password.</translation>
@@ -1235,6 +1247,7 @@
 <translation id="7610193165460212391">Il valore non è compreso nell'intervallo (<ph name="VALUE" />).</translation>
 <translation id="7613889955535752492">Scadenza: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Hai già dati criptati con una versione diversa della password del tuo Account Google. Inseriscila qui di seguito.</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">Dati sulle prestazioni e rapporti sugli arresti anomali</translation>
 <translation id="7637571805876720304">Rimuovere la carta di credito da Chromium?</translation>
 <translation id="7638605456503525968">Porte seriali</translation>
@@ -1345,6 +1358,7 @@
 <translation id="8211406090763984747">La connessione è protetta</translation>
 <translation id="8218327578424803826">Posizione assegnata:</translation>
 <translation id="8220146938470311105">C7/C6 (Busta)</translation>
+<translation id="8220639454292072926">Rapporti Enterprise</translation>
 <translation id="8225771182978767009">La persona che ha configurato il computer ha deciso di bloccare questo sito.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Apri la pagina in una nuova scheda di navigazione in incognito</translation>
@@ -1427,6 +1441,7 @@
 <translation id="8740359287975076522">Impossibile trovare l'&lt;abbr id="dnsDefinition"&gt;indirizzo DNS&lt;/abbr&gt; di <ph name="HOST_NAME" />. Stiamo analizzando il problema.</translation>
 <translation id="874846938927089722">Carte di credito e prepagate accettate</translation>
 <translation id="874918643257405732">Aggiungi questa scheda ai preferiti</translation>
+<translation id="8751426954251315517">Riprova la prossima volta</translation>
 <translation id="8759274551635299824">La carta è scaduta</translation>
 <translation id="8761567432415473239">La funzione Navigazione sicura di Google <ph name="BEGIN_LINK" />ha trovato di recente programmi dannosi<ph name="END_LINK" /> su <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Dispositivo USB</translation>
@@ -1491,6 +1506,7 @@
 <translation id="9080712759204168376">Riepilogo dell'ordine</translation>
 <translation id="9089260154716455634">Criterio Orari di disattivazione:</translation>
 <translation id="9095388113577226029">Altre lingue</translation>
+<translation id="9098981495403789647">L'amministratore ha attivato Chrome Enterprise Threat Protection sul tuo browser. Chrome Enterprise Threat Protection ha accesso ad alcuni tuoi dati.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> in genere utilizza la crittografia per proteggere le tue informazioni. Questa volta, quando Chromium ha provato a connettersi a <ph name="SITE" />, il sito web ha restituito credenziali insolite e sbagliate. È possibile che un malintenzionato stia cercando di spacciarsi per il sito <ph name="SITE" /> oppure che una schermata di accesso alla rete Wi-Fi abbia interrotto la connessione. Le tue informazioni sono ancora al sicuro perché Chromium ha interrotto la connessione prima che avvenissero scambi di dati.</translation>
 <translation id="9106062320799175032">Aggiungi indirizzo di fatturazione</translation>
 <translation id="9114524666733003316">Conferma della carta...</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 94fd311..3192051 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">‏"יש תוכנה במחשב שלך שמונעת מ-Chrome להתחבר באופן מאובטח אל האינטרנט" (מחשבי Windows בלבד)</translation>
 <translation id="1294154142200295408">וריאציות של שורת פקודה</translation>
 <translation id="129553762522093515">נסגרו לאחרונה</translation>
+<translation id="1298536327547837046">סריקה לאיתור תוכנות זדוניות</translation>
 <translation id="129863573139666797">‏<ph name="BEGIN_LINK" />נסה לנקות את קובצי ה-Cookie<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">תכונות שהוצאו משימוש</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)‎</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">נסה לפנות אל מנהל המערכת.</translation>
 <translation id="1740951997222943430">עליך להזין חודש תפוגה חוקי</translation>
 <translation id="1743520634839655729">‏כדי לשלם מהר יותר בפעם הבאה, אפשר לשמור בחשבון Google ובמכשיר הזה את פרטי הכרטיס, השם והכתובת לחיוב.</translation>
+<translation id="1743570585616704562">לא מזוהה</translation>
 <translation id="1745880797583122200">הדפדפן שלך מנוהל</translation>
 <translation id="17513872634828108">כרטיסיות פתוחות</translation>
 <translation id="1753706481035618306">מספר דף</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">בטל תשלום</translation>
 <translation id="3207960819495026254">מסומן בסימניה</translation>
 <translation id="3209034400446768650">כניסה לדף עשויה להיות כרוכה בתשלום</translation>
+<translation id="3215092763954878852">‏לא ניתן להשתמש ב-WebAuthn</translation>
 <translation id="3225919329040284222">השרת הציג אישור שאינו תואם את הציפיות המובנות. ציפיות אלה נכללות עבור אתרי אינטרנט מסוימים בעלי אבטחה גבוהה כדי להגן עליך.</translation>
 <translation id="3226128629678568754">לחץ על לחצן הטעינה מחדש כדי לשלוח מחדש את הנתונים הדרושים לטעינת הדף.</translation>
 <translation id="3227137524299004712">מיקרופון</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{ללא}=1{מאתר אחד }two{משני אתרים }many{מ-# אתרים }other{מ-# אתרים }}</translation>
 <translation id="397105322502079400">מחשב...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> חסום</translation>
+<translation id="3981540111851280311">‏ההגנה מפני איומים של Chrome Enterprise הופעלה על ידי <ph name="ENROLLMENT_DOMAIN" /> בדפדפן שלך. להגנה מפני איומים של Chrome Enterprise יש גישה לחלק מהנתונים שלך.</translation>
 <translation id="3987940399970879459">‏פחות מ-‎1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{דף אינטרנט קרוב אחד}two{# דפי אינטרנט קרובים}many{# דפי אינטרנט קרובים}other{# דפי אינטרנט קרובים}}</translation>
 <translation id="4030383055268325496">&amp;ביטול הוספה</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">איפוס סיסמה</translation>
 <translation id="4279811152705618813">ה-<ph name="DEVICE_TYPE" /> מנוהל על-ידי <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{‏הכרטיס הזה נשמר בחשבון Google שלך}two{‏הכרטיסים האלה נשמרו בחשבון Google שלך}many{‏הכרטיסים האלה נשמרו בחשבון Google שלך}other{‏הכרטיסים האלה נשמרו בחשבון Google שלך}}</translation>
+<translation id="428847186335018806">‏סריקת קבצים שהורדת או העלית ב-Chrome.</translation>
 <translation id="42981349822642051">הרחבה</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)‎</translation>
 <translation id="4305817255990598646">מעבר</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">שגיאת אימות: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">לפנות אל מנהל המערכת</translation>
 <translation id="450710068430902550">שיתוף עם מנהל מערכת</translation>
+<translation id="4508814173490746936">‏לא ניתן להשתמש ב-Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)‎</translation>
 <translation id="4515275063822566619">‏הכרטיסים והכתובות לקוחים מ-Chrome ומחשבון Google שלך (<ph name="ACCOUNT_EMAIL" />). אפשר לנהל אותם ב<ph name="BEGIN_LINK" />הגדרות<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)‎</translation>
@@ -769,6 +775,7 @@
 <translation id="5045550434625856497">סיסמה שגויה</translation>
 <translation id="5056549851600133418">מאמרים שעשויים לעניין אותך</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(אחד נמצא בשימוש)}two{(# in use)}many{(# in use)}other{(# נמצאים בשימוש)}}</translation>
 <translation id="5070335125961472645">‏<ph name="BEGIN_LINK" />לבדוק את כתובת שרת ה-Proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">האישור של השרת אינו תקף כעת.</translation>
 <translation id="5087580092889165836">הוסף כרטיס</translation>
@@ -999,6 +1006,7 @@
 <translation id="6302269476990306341">‏Google Assistant ב-Chrome מופסק</translation>
 <translation id="6305205051461490394">לא ניתן לגשת אל <ph name="URL" />.</translation>
 <translation id="6321917430147971392">‏בדוק את הגדרות ה-DNS</translation>
+<translation id="6322182122604171028">‏לא ניתן להשתמש ב-Windows Hello</translation>
 <translation id="6328639280570009161">נסה להשבית את חיזוי הרשת</translation>
 <translation id="6328784461820205019">‏"החיבור שלך אינו פרטי" או "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" או "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" או "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" או "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" או "שגיאת אישור SSL"</translation>
 <translation id="6328786501058569169">האתר הזה מטעה</translation>
@@ -1022,6 +1030,7 @@
 <translation id="6433490469411711332">עריכת הפרטים ליצירת קשר</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> סירב להתחבר.</translation>
 <translation id="6434309073475700221">התעלם</translation>
+<translation id="6435221585574090192">‏הנתונים של אירועי האבטחה שסומנו על-ידי ההגנה מפני איומים של Chrome Enterprise עוברים שיתוף עם מנהל המערכת. הנתונים האלה עשויים לכלול כתובות URL של דפים, שם קובץ ומטא-נתונים של קובץ, שם המשתמש במכשיר ושם המשתמש ב-Chrome.</translation>
 <translation id="6440503408713884761">המערכת מתעלמת מהפריט</translation>
 <translation id="6446163441502663861">Kahu (Envelope)‎</translation>
 <translation id="6446608382365791566">הוסף מידע</translation>
@@ -1066,6 +1075,7 @@
 <translation id="6671697161687535275">‏האם להסיר מ-Chromium הצעות לטפסים?</translation>
 <translation id="6685834062052613830">צא והשלם את ההגדרה</translation>
 <translation id="6689271823431384964">‏מאחר שנכנסת לחשבון, Chrome מציע לשמור את הכרטיסים שלך בחשבון Google. אפשר לשנות את ההתנהגות הזאת בהגדרות. שם בעל הכרטיס מגיע מהחשבון שלך.</translation>
+<translation id="6707256370811247129">‏סריקת התוכן של המטמון והקבצים שמעלים או מורידים ב-Chrome.</translation>
 <translation id="6710213216561001401">הקודם</translation>
 <translation id="6710594484020273272">&lt;הקלד מונח חיפוש&gt;</translation>
 <translation id="671076103358959139">אסימון הרשמה:</translation>
@@ -1084,6 +1094,7 @@
 <translation id="681021252041861472">שדה חובה</translation>
 <translation id="6810899417690483278">מזהה של התאמה אישית</translation>
 <translation id="6825578344716086703">‏ניסית להגיע אל <ph name="DOMAIN" />, אבל השרת הציג אישור שנחתם באמצעות אלגוריתם חתימה חלש (כמו SHA-1). המשמעות היא שפרטי האבטחה שהוצגו על-ידי השרת עלולים להיות מזויפים, וייתכן שהשרת הוא לא השרת שציפית לו (ייתכן שנוצר קשר בינך לבין התוקף).</translation>
+<translation id="6826370046007623921">מניעת אובדן נתונים</translation>
 <translation id="6831043979455480757">תרגום</translation>
 <translation id="6839929833149231406">אזור</translation>
 <translation id="6852204201400771460">לטעון מחדש את האפליקציה?</translation>
@@ -1230,6 +1241,7 @@
 <translation id="7542995811387359312">מילוי אוטומטי של פרטי כרטיס אשראי מושבת כיוון שטופס זה אינו משתמש בחיבור מאובטח.</translation>
 <translation id="7548892272833184391">פתרון שגיאות חיבור</translation>
 <translation id="7549584377607005141">דף אינטרנט זה זקוק לנתונים שהזנת קודם לכן כדי שהוא יוצג כראוי. ניתן שוב את הנתונים, אך פעולה זו תגרום לחזרה על כל פעולה שדף זה ביצע בעבר.</translation>
+<translation id="7550637293666041147">‏שם המשתמש במכשיר ושם המשתמש ב-Chrome</translation>
 <translation id="7552846755917812628">אולי הטיפים האלו יעזרו לך:</translation>
 <translation id="7554791636758816595">כרטיסייה חדשה</translation>
 <translation id="7564049878696755256">‏הגישה שלך לחשבון <ph name="ORG_NAME" /> עשויה להישלל והזהות שלך עשויה להיגנב. ההמלצה של Chrome היא לשנות את הסיסמה עכשיו.</translation>
@@ -1244,6 +1256,7 @@
 <translation id="7610193165460212391">הערך מחוץ לטווח <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">תפוגה: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">‏יש לך כבר נתונים שהוצפנו באמצעות גירסה אחרת של סיסמת חשבון Google שלך. הזן אותה למטה.</translation>
+<translation id="7625784245512586808">‏ההגנה מפני איומים של Chrome Enterprise</translation>
 <translation id="7633909222644580952">נתוני ביצועים ודוחות קריסה</translation>
 <translation id="7637571805876720304">‏האם להסיר מ-Chromium את כרטיס האשראי?</translation>
 <translation id="7638605456503525968">יציאות טוריות</translation>
@@ -1354,6 +1367,7 @@
 <translation id="8211406090763984747">החיבור מאובטח</translation>
 <translation id="8218327578424803826">מיקום מוקצה:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)‎</translation>
+<translation id="8220639454292072926">דיווח ארגוני</translation>
 <translation id="8225771182978767009">המשתמש שהגדיר את המחשב הזה בחר לחסום את האתר הזה.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">פתיחת הדף בכרטיסייה חדשה של גלישה בסתר</translation>
@@ -1437,6 +1451,7 @@
 <translation id="8740359287975076522">‏לא ניתן היה למצוא את &lt;abbr id="dnsDefinition"&gt;כתובת ה-DNS&lt;/abbr&gt; של <ph name="HOST_NAME" />. מאבחן את הבעיה.</translation>
 <translation id="874846938927089722">כרטיסי אשראי וכרטיסים משולמים מראש שהסוחר מקבל</translation>
 <translation id="874918643257405732">הוספת הכרטיסייה לסימניות</translation>
+<translation id="8751426954251315517">אפשר לנסות שוב מאוחר יותר.</translation>
 <translation id="8759274551635299824">פג תוקפו של הכרטיס</translation>
 <translation id="8761567432415473239">‏גלישה בטוחה של Google <ph name="BEGIN_LINK" />איתרה לאחרונה תוכניות מזיקות<ph name="END_LINK" /> באתר <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">‏התקן USB</translation>
@@ -1501,6 +1516,7 @@
 <translation id="9080712759204168376">סיכום הזמנה</translation>
 <translation id="9089260154716455634">מדיניות לשעות ללא פעילות:</translation>
 <translation id="9095388113577226029">שפות נוספות...</translation>
+<translation id="9098981495403789647">‏ההגנה מפני איומים של Chrome Enterprise הופעלה על ידי מנהל המערכת בדפדפן שלך. להגנה מפני איומים של Chrome Enterprise יש גישה לחלק מהנתונים שלך.</translation>
 <translation id="9103872766612412690">‏האתר <ph name="SITE" /> משתמש בדרך כלל בהצפנה כדי להגן על המידע שלך. כאשר Chromium ניסה הפעם להתחבר ל-<ph name="SITE" />, האתר שלח חזרה אישורים חריגים ושגויים. ייתכן שתוקף מנסה להתחזות לאתר <ph name="SITE" />, או שמסך כניסה ל-Wi-Fi הפריע לחיבור. המידע שלך עדיין מאובטח מכיוון ש-Chromium הפסיק את החיבור לפני חילופי הנתונים.</translation>
 <translation id="9106062320799175032">הוספה של כתובת לחיוב</translation>
 <translation id="9114524666733003316">אישור הכרטיס מתבצע...</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 764e20df..0dfb9e0f12 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">「パソコンにインストールされているソフトウェアが原因で、Chrome からインターネットに安全に接続することができません」(Windows パソコンのみ)</translation>
 <translation id="1294154142200295408">コマンドラインのバリエーション</translation>
 <translation id="129553762522093515">最近閉じたタブ</translation>
+<translation id="1298536327547837046">マルウェア スキャン</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Cookie を消去してみてください<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">サポート終了の機能</translation>
 <translation id="1320233736580025032">Prc1(封筒)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">システム管理者にお問い合わせください。</translation>
 <translation id="1740951997222943430">有効期限(月)を正しい形式で入力してください</translation>
 <translation id="1743520634839655729">カード、お名前、請求先住所を Google アカウントとこのデバイスに保存すると、次回のお支払いが簡単になります。</translation>
+<translation id="1743570585616704562">認識されませんでした</translation>
 <translation id="1745880797583122200">ご使用のブラウザは管理されています</translation>
 <translation id="17513872634828108">開いているタブ</translation>
 <translation id="1753706481035618306">ページ番号</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">支払いをキャンセル</translation>
 <translation id="3207960819495026254">ブックマークしました</translation>
 <translation id="3209034400446768650">このページでは料金が請求される可能性があります</translation>
+<translation id="3215092763954878852">WebAuthn を使用できませんでした</translation>
 <translation id="3225919329040284222">サーバーの提示した証明書が、組み込まれている想定の証明書と一致しません。これらの想定の証明書は、ユーザー保護のため、特定の安全性の高いウェブサイトについて用意されています。</translation>
 <translation id="3226128629678568754">ページの読み込みに必要なデータを再送信するには、再読み込みボタンを押してください。</translation>
 <translation id="3227137524299004712">マイク</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{なし}=1{1 件のサイトから}other{# 件のサイトから}}</translation>
 <translation id="397105322502079400">計算しています...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> はブロックされています</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> がブラウザで Chrome Enterprise Threat Protection を有効にしています。Chrome Enterprise Threat Protection がユーザーのデータの一部にアクセスできます。</translation>
 <translation id="3987940399970879459">1 MB 未満</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 件の近くのウェブページ}other{# 件の近くのウェブページ}}</translation>
 <translation id="4030383055268325496">追加の取り消し(&amp;U)</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">パスワードを再設定</translation>
 <translation id="4279811152705618813">この <ph name="DEVICE_TYPE" /> は <ph name="ENROLLMENT_DOMAIN" /> によって管理されています</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{このカードを Google アカウントに保存しました}other{これらのカードを Google アカウントに保存しました}}</translation>
+<translation id="428847186335018806">Chrome でダウンロードまたはアップロードしたファイルをスキャンします。</translation>
 <translation id="42981349822642051">展開</translation>
 <translation id="4302965934281694568">長3(封筒)</translation>
 <translation id="4305817255990598646">切り替え</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">検証エラー: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">システム管理者に問い合わせる</translation>
 <translation id="450710068430902550">管理者との共有</translation>
+<translation id="4508814173490746936">Touch ID を使用できませんでした</translation>
 <translation id="4510487217173779431">長4(封筒)</translation>
 <translation id="4515275063822566619">Chrome と Google アカウント(<ph name="ACCOUNT_EMAIL" />)に保存されているクレジット カードと住所です。[<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />] で管理できます。</translation>
 <translation id="4517607026994743406">Comm-10(封筒)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">パスワードが正しくありません</translation>
 <translation id="5056549851600133418">おすすめの記事</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 個が使用中)}other{(# 個が使用中)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />プロキシ アドレスを確認する<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">サーバーの証明書が現在有効ではありません。</translation>
 <translation id="5087580092889165836">カードを追加</translation>
@@ -991,6 +998,7 @@
 <translation id="6302269476990306341">Chrome の Google アシスタントを停止しています</translation>
 <translation id="6305205051461490394"><ph name="URL" /> にアクセスできません。</translation>
 <translation id="6321917430147971392">DNS 設定を確認してください</translation>
+<translation id="6322182122604171028">Windows Hello を使用できませんでした</translation>
 <translation id="6328639280570009161">ネットワーク予測を無効にしてみてください</translation>
 <translation id="6328784461820205019">「この接続ではプライバシーが保護されません」、「&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;」、「&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;」、「&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;」、「&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;」、「SSL 証明書エラー」</translation>
 <translation id="6328786501058569169">これは偽のサイトです</translation>
@@ -1014,6 +1022,7 @@
 <translation id="6433490469411711332">連絡先情報の編集</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> で接続が拒否されました。</translation>
 <translation id="6434309073475700221">破棄</translation>
+<translation id="6435221585574090192">Chrome Enterprise Threat Protection によってフラグ付けされたセキュリティ イベントに関するデータを、管理者と共有できます。データの例としては、ページ URL、ファイル名、ファイル メタデータ、デバイスのユーザー名、Chrome のユーザー名などがあります。</translation>
 <translation id="6440503408713884761">除外されました</translation>
 <translation id="6446163441502663861">Kahu(封筒)</translation>
 <translation id="6446608382365791566">他の情報を追加</translation>
@@ -1058,6 +1067,7 @@
 <translation id="6671697161687535275">Chromium から候補を削除してもよろしいですか?</translation>
 <translation id="6685834062052613830">ログアウトして設定を完了してください</translation>
 <translation id="6689271823431384964">ログインしている場合は、その Google アカウントにカードを保存できます。この動作は設定で変更できます。カード名義人はアカウントから取得されます。</translation>
+<translation id="6707256370811247129">Chrome でダウンロードまたはアップロードしたキャッシュとファイルのコンテンツをスキャンします。</translation>
 <translation id="6710213216561001401">前へ</translation>
 <translation id="6710594484020273272">&lt;検索キーワードを入力&gt;</translation>
 <translation id="671076103358959139">登録トークン:</translation>
@@ -1076,6 +1086,7 @@
 <translation id="681021252041861472">必須項目</translation>
 <translation id="6810899417690483278">カスタム ID</translation>
 <translation id="6825578344716086703"><ph name="DOMAIN" /> にアクセスしようとしましたが、脆弱な署名アルゴリズム(SHA-1 など)を使用して署名された証明書がサーバーから提示されました。このセキュリティ認証情報は偽装されたものである可能性があり、アクセスしようとしたサーバーとは別のサーバーが応答している可能性があります(悪意のあるユーザーと通信している可能性があります)。</translation>
+<translation id="6826370046007623921">データ損失の防止</translation>
 <translation id="6831043979455480757">翻訳</translation>
 <translation id="6839929833149231406">地区</translation>
 <translation id="6852204201400771460">アプリを再読み込みしますか?</translation>
@@ -1222,6 +1233,7 @@
 <translation id="7542995811387359312">このフォームは安全な接続を使用していないため、クレジットカードの自動入力が無効になっています。</translation>
 <translation id="7548892272833184391">接続エラーを解決する</translation>
 <translation id="7549584377607005141">このウェブページを正しく表示するには、先ほど入力したデータが必要です。データは再送信できますが、このページで先ほど行った操作を繰り返すことになります。</translation>
+<translation id="7550637293666041147">お客様のデバイスのユーザー名と Chrome のユーザー名</translation>
 <translation id="7552846755917812628">次のことをお試しください。</translation>
 <translation id="7554791636758816595">新しいタブ</translation>
 <translation id="7564049878696755256"><ph name="ORG_NAME" /> アカウントにアクセスできなくなったり、個人情報が盗まれたりする可能性があります。今すぐパスワードを変更することをおすすめします。</translation>
@@ -1236,6 +1248,7 @@
 <translation id="7610193165460212391">値(<ph name="VALUE" />)が範囲外です。</translation>
 <translation id="7613889955535752492">有効期限: <ph name="EXPIRATION_MONTH" /> / <ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">別の Google アカウント パスワードを使って暗号化したデータが既にあります。パスワードを以下に入力してください。</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">パフォーマンス データと障害レポート</translation>
 <translation id="7637571805876720304">Chromium からクレジット カードを削除してもよろしいですか?</translation>
 <translation id="7638605456503525968">シリアルポート</translation>
@@ -1346,6 +1359,7 @@
 <translation id="8211406090763984747">この接続は保護されています</translation>
 <translation id="8218327578424803826">割り当てられた場所:</translation>
 <translation id="8220146938470311105">C7 / C6(封筒)</translation>
+<translation id="8220639454292072926">企業レポート</translation>
 <translation id="8225771182978767009">このサイトは、このパソコンを設定したユーザーによってブロックされています。</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />、<ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">ページを新しいシークレット タブで開く</translation>
@@ -1429,6 +1443,7 @@
 <translation id="8740359287975076522"><ph name="HOST_NAME" /> の &lt;abbr id="dnsDefinition"&gt;DNS アドレス&lt;/abbr&gt;が見つかりませんでした。問題を診断しています。</translation>
 <translation id="874846938927089722">利用可能なクレジット カードとプリペイド カード</translation>
 <translation id="874918643257405732">このタブをブックマークに追加します</translation>
+<translation id="8751426954251315517">後でもう一度お試しください。</translation>
 <translation id="8759274551635299824">このカードは有効期限が切れています</translation>
 <translation id="8761567432415473239"><ph name="SITE" /> では最近、Google セーフ ブラウジングにより<ph name="BEGIN_LINK" />有害なプログラムが検出<ph name="END_LINK" />されました。</translation>
 <translation id="8763927697961133303">USB デバイス</translation>
@@ -1493,6 +1508,7 @@
 <translation id="9080712759204168376">ご注文の概要</translation>
 <translation id="9089260154716455634">管理時間外のポリシー:</translation>
 <translation id="9095388113577226029">その他の言語...</translation>
+<translation id="9098981495403789647">管理者がブラウザで Chrome Enterprise Threat Protection を有効にしています。Chrome Enterprise Threat Protection がユーザーのデータの一部にアクセスできます。</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> では通常、暗号化して情報を保護しています。今回、Chromium から <ph name="SITE" /> への接続試行時に、このウェブサイトからいつもとは異なる誤った認証情報が返されました。悪意のあるユーザーが <ph name="SITE" /> になりすまそうとしているか、Wi-Fi ログイン画面で接続が中断された可能性があります。データのやり取りが行われる前に Chromium によって接続が停止されたため、情報は引き続き保護されています。</translation>
 <translation id="9106062320799175032">請求先住所の追加</translation>
 <translation id="9114524666733003316">カードを確認しています…</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index e6574a2b..840d219 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"ಸುರಕ್ಷಿತವಾಗಿ ವೆಬ್‌ಗೆ ಸಂಪರ್ಕಿಸುವ Chrome ನ ಕಾರ್ಯವನ್ನು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿರುವ ಸಾಫ್ಟ್‌ವೇರ್‌ ಸ್ಥಗಿತಗೊಳಿಸಿದೆ" (Windows ಕಂಪ್ಯೂಟರ್‌ಗಳಿಗೆ ಮಾತ್ರ)</translation>
 <translation id="1294154142200295408">ಕಮಾಂಡ್-ಲೈನ್ ವ್ಯತ್ಯಾಸಗಳು</translation>
 <translation id="129553762522093515">ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಲಾಗಿರುವುದು</translation>
+<translation id="1298536327547837046">ಮಾಲ್‌ವೇರ್‌ ಸ್ಕ್ಯಾನಿಂಗ್</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />ನಿಮ್ಮ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">ತೆಗೆದುಹಾಕಲಾದ ವೈಶಿಷ್ಟ್ಯಗಳು</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -166,6 +167,7 @@
 <translation id="1734878702283171397">ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1740951997222943430">ಮಾನ್ಯವಾದ ಅವಧಿ-ಮುಕ್ತಾಯ ತಿಂಗಳನ್ನು ನಮೂದಿಸಿ</translation>
 <translation id="1743520634839655729">ಮುಂದಿನ ಬಾರಿ ವೇಗವಾಗಿ ಪಾವತಿಸಲು, ನಿಮ್ಮ ಕಾರ್ಡ್‌, ಹೆಸರು ಮತ್ತು ನಿಮ್ಮ ಬಿಲ್ಲಿಂಗ್ ವಿಳಾಸವನ್ನು Google ಖಾತೆಯಲ್ಲಿ ಮತ್ತು ಈ ಸಾಧನದಲ್ಲಿ ಉಳಿಸಿ.</translation>
+<translation id="1743570585616704562">ಗುರುತಿಸಲಾಗಿಲ್ಲ</translation>
 <translation id="1745880797583122200">ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation>
 <translation id="17513872634828108">ತೆರೆದ ಟ್ಯಾಬ್‌ಗಳು</translation>
 <translation id="1753706481035618306">ಪುಟ ಸಂಖ್ಯೆ</translation>
@@ -423,6 +425,7 @@
 <translation id="320323717674993345">ಪಾವತಿಯನ್ನು ರದ್ದುಮಾಡಿ</translation>
 <translation id="3207960819495026254">ಬುಕ್‌ಮಾರ್ಕ್‌ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="3209034400446768650">ಈ ಪುಟವು, ಶುಲ್ಕ ವಿಧಿಸಬಹುದು</translation>
+<translation id="3215092763954878852">WebAuthn ಅನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="3225919329040284222">ಆಂತರಿಕ ಮಾನದಂಡಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸರ್ವರ್ ಹಾಜರಿಪಡಿಸಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷತೆಯ ಸಲುವಾಗಿ ಕೆಲವು ಹೆಚ್ಚು ಸುರಕ್ಷಿತ ವೆಬ್ ಸೈಟ್‌ಗಳಲ್ಲಿ ಈ ಮಾನದಂಡಗಳನ್ನು ಸೇರ್ಪಡೆಗೊಳಿಸಲಾಗಿದೆ.</translation>
 <translation id="3226128629678568754">ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡುವುದಕ್ಕೆ ಅಗತ್ಯವಿರುವ ಡೇಟಾವನ್ನು ಮರುಸಲ್ಲಿಸಲು ಮರುಲೋಡ್ ಬಟನ್ ಒತ್ತಿರಿ.</translation>
 <translation id="3227137524299004712">ಮೈಕ್ರೋಫೋನ್</translation>
@@ -558,6 +561,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ಸೈಟ್‌ನಿಂದ }one{# ಸೈಟ್‌ಗಳಿಂದ }other{# ಸೈಟ್‌ಗಳಿಂದ }}</translation>
 <translation id="397105322502079400">ಎಣಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
+<translation id="3981540111851280311">ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ Chrome ಎಂಟರ್‌ಪ್ರೈಸ್ ಬೆದರಿಕೆ ರಕ್ಷಣೆಯನ್ನು <ph name="ENROLLMENT_DOMAIN" /> ಸಕ್ರಿಯಗೊಳಿಸಿದೆ. Chrome ಎಂಟರ್‌ಪ್ರೈಸ್ ಬೆದರಿಕೆ ರಕ್ಷಣೆಯು ನಿಮ್ಮ ಕೆಲವು ಡೇಟಾಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿದೆ.</translation>
 <translation id="3987940399970879459">1 MB ಗಿಂತ ಕಡಿಮೆ</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{ಹತ್ತಿರದ 1 ವೆಬ್ ಪುಟ}one{ಹತ್ತಿರದ # ವೆಬ್ ಪುಟಗಳು}other{ಹತ್ತಿರದ # ವೆಬ್ ಪುಟಗಳು}}</translation>
 <translation id="4030383055268325496">&amp;ಸೇರಿಸುವುದನ್ನು ರದ್ದುಗೊಳಿಸಿ</translation>
@@ -574,6 +578,7 @@
 <translation id="4103249731201008433">ಸಾಧನದ ಸರಣಿಯ ಸಂಖ್ಯೆ ಅಮಾನ್ಯವಾಗಿದೆ</translation>
 <translation id="410351446219883937">ಆಟೋಪ್ಲೇ</translation>
 <translation id="4103763322291513355">ನಿಮ್ಮ ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರು ವಿಧಿಸಿರುವ ಕಪ್ಪುಪಟ್ಟಿಯ URLಗಳು ಮತ್ತು ಇತರ ನೀತಿಗಳನ್ನು ವೀಕ್ಷಿಸಲು &lt;strong&gt;chrome://policy&lt;/strong&gt; ಗೆ ಭೇಟಿ ನೀಡಿ.</translation>
+<translation id="4108231218301530806">ಮುಂದಿನ ಬಾರಿ ಈ ಕಾರ್ಡ್ ಪರಿಶೀಲಿಸಲು ಫಿಂಗರ್‌ ಪ್ರಿಂಟ್ ಬಳಸಿ.</translation>
 <translation id="4110652170750985508">ನಿಮ್ಮ ಪಾವತಿಯನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="4112140312785995938">ಹಿಂದಕ್ಕೆ ಸೀಕ್ ಮಾಡಿ</translation>
 <translation id="4116663294526079822">ಈ ಸೈಟ್‌ನಲ್ಲಿ ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ</translation>
@@ -625,6 +630,7 @@
 <translation id="4277028893293644418">ಪಾಸ್‌ವರ್ಡ್ ಮರುಹೊಂದಿಸಿ</translation>
 <translation id="4279811152705618813">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು <ph name="ENROLLMENT_DOMAIN" /> ಡೊಮೇನ್ ನಿರ್ವಹಿಸುತ್ತಿದೆ</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{ಈ ಕಾರ್ಡ್ ಅನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ}one{ಈ ಕಾರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ}other{ಈ ಕಾರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ}}</translation>
+<translation id="428847186335018806">ನೀವು Chrome ನಲ್ಲಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡುವ ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡುವ ಫೈಲ್‌ಗಳನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ.</translation>
 <translation id="42981349822642051">ವಿಸ್ತರಿಸಿ</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">ಬದಲಿಸಿ</translation>
@@ -663,6 +669,7 @@
 <translation id="4506176782989081258">ಮೌಲ್ಯೀಕರಿಸುವಿಕೆಯ ದೋಷ: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="450710068430902550">ನಿರ್ವಾಹಕರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳುವುದು</translation>
+<translation id="4508814173490746936">ಸ್ಪರ್ಶ ID ಅನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">ಕಾರ್ಡ್‌ಗಳು ಮತ್ತು ವಿಳಾಸಗಳನ್ನು ನಿಮ್ಮ Chrome ಮತ್ತು ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ (<ph name="ACCOUNT_EMAIL" />) ಪಡೆಯಲಾಗಿದೆ. ನೀವು ಅವುಗಳನ್ನು <ph name="BEGIN_LINK" />ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK" /> ನಿರ್ವಹಿಸಬಹುದು.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)</translation>
@@ -758,6 +765,7 @@
 <translation id="5045550434625856497">ತಪ್ಪು ಪಾಸ್‌ವರ್ಡ್</translation>
 <translation id="5056549851600133418">ನಿಮಗಾಗಿ ಲೇಖನಗಳು</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 ಬಳಕೆಯಲ್ಲಿದೆ)}one{(# ಬಳಕೆಯಲ್ಲಿದೆ)}other{(# ಬಳಕೆಯಲ್ಲಿದೆ)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />ಪ್ರಾಕ್ಸಿ ವಿಳಾಸವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">ಈ ಸಮಯದಲ್ಲಿ ಸರ್ವರ್‌ನ ಪ್ರಮಾಣಪತ್ರ ಮಾನ್ಯವಾಗಿಲ್ಲ.</translation>
 <translation id="5087580092889165836">ಕಾರ್ಡ್ ಸೇರಿಸಿ</translation>
@@ -986,6 +994,7 @@
 <translation id="6302269476990306341">Chrome ನಲ್ಲಿನ Google ಅಸಿಸ್ಟೆಂಟ್ ನಿಲ್ಲುತ್ತಿದೆ</translation>
 <translation id="6305205051461490394"><ph name="URL" /> ತಲುಪಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="6321917430147971392">ನಿಮ್ಮ DNS ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
+<translation id="6322182122604171028">Windows Hello ಅನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="6328639280570009161">ನೆಟ್‌ವರ್ಕ್ ಮುನ್ಸೂಚನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="6328784461820205019">"ನಿಮ್ಮ ಸಂಪರ್ಕ ಖಾಸಗಿಯಾಗಿಲ್ಲ" ಅಥವಾ "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" ಅಥವಾ "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" ಅಥವಾ "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" ಅಥವಾ "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" ಅಥವಾ "SSL ಪ್ರಮಾಣಪತ್ರ ದೋಷ"</translation>
 <translation id="6328786501058569169">ಈ ಸೈಟ್ ಮೋಸಗೊಳಿಸುವುದಾಗಿದೆ</translation>
@@ -1009,6 +1018,7 @@
 <translation id="6433490469411711332">ಸಂಪರ್ಕ ಮಾಹಿತಿ ಎಡಿಟ್ ಮಾಡಿ</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> ಸಂಪರ್ಕಗೊಳ್ಳಲು ನಿರಾಕರಿಸಿದೆ.</translation>
 <translation id="6434309073475700221">ತಿರಸ್ಕರಿಸಿ</translation>
+<translation id="6435221585574090192">ನಿಮ್ಮ ನಿರ್ವಾಹಕರೊಂದಿಗೆ Chrome ಎಂಟರ್‌ಪ್ರೈಸ್ ಬೆದರಿಕೆ ರಕ್ಷಣೆಯಿಂದ ಫ್ಲ್ಯಾಗ್ ಮಾಡಲಾದ ಭದ್ರತಾ ಈವೆಂಟ್‌ಗಳ ಕುರಿತು ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಿ. ಪುಟ URL ಗಳು, ಫೈಲ್ ಹೆಸರು ಮತ್ತು ಫೈಲ್ ಮೆಟಾಡೇಟಾ, ನಿಮ್ಮ ಸಾಧನದ ಬಳಕೆದಾರರ ಹೆಸರು ಮತ್ತು Chrome ಬಳಕೆದಾರರ ಹೆಸರುಗಳನ್ನು ಇವು ಒಳಗೊಂಡಿರಬಹುದು.</translation>
 <translation id="6440503408713884761">ನಿರ್ಲಕ್ಷಿಸಲಾಗಿದೆ</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">ಇನ್ನಷ್ಟು ಮಾಹಿತಿಯನ್ನು ಸೇರಿಸಿ</translation>
@@ -1053,6 +1063,7 @@
 <translation id="6671697161687535275">Chromium ನಿಂದ ಫಾರ್ಮ್ ಸಲಹೆಯನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?</translation>
 <translation id="6685834062052613830">ಸೈನ್‌ ಔಟ್‌ ಮಾಡಿ ಹಾಗೂ ಸೆಟಪ್ ಪೂರ್ಣಗೊಳಿಸಿ</translation>
 <translation id="6689271823431384964">ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿರುವ ಕಾರಣದಿಂದಾಗಿ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ನಿಮ್ಮ ಕಾರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಲು Chrome ಅವಕಾಶ ನೀಡುತ್ತಿದೆ. ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನೀವು ಈ ವರ್ತನೆಯನ್ನು ಬದಲಿಸಬಹುದು. ಕಾರ್ಡ್ ಹೋಲ್ಡರ್ ಹೆಸರು ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಬರುತ್ತದೆ.</translation>
+<translation id="6707256370811247129">ನೀವು Chrome ನಲ್ಲಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡುವ ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡುವ ಫೈಲ್‌ಗಳು ಮತ್ತು ಕ್ಯಾಷ್‌ನ ವಿಷಯಗಳನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ.</translation>
 <translation id="6710213216561001401">ಹಿಂದೆ</translation>
 <translation id="6710594484020273272">&lt;ಹುಡುಕಾಟದ ಪದ ಟೈಪ್ ಮಾಡಿ&gt;</translation>
 <translation id="671076103358959139">ನೋಂದಣಿಯ ಟೋಕನ್:</translation>
@@ -1071,6 +1082,7 @@
 <translation id="681021252041861472">ಅಗತ್ಯವಿರುವ ಕ್ಷೇತ್ರ</translation>
 <translation id="6810899417690483278">ಕಸ್ಟಮೈಸೇಶನ್ ಐಡಿ</translation>
 <translation id="6825578344716086703">ನೀವು <ph name="DOMAIN" /> ಅನ್ನು ತಲುಪಲು ಪ್ರಯತ್ನಿಸಿದಿರಿ, ಆದರೆ ದುರ್ಬಲ ಸಹಿ ಅಲ್ಗಾರಿದಮ್ (SHA-1 ಅದರಂತೆ) ಬಳಸಿಕೊಂಡು ಸಹಿ ಮಾಡಿದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸರ್ವರ್ ಒದಗಿಸಿದೆ. ಇದರರ್ಥ ಸರ್ವರ್ ಒದಗಿಸಿದ ಸುರಕ್ಷತೆ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಖೋಟಾ ತಯಾರಿಸಿರಬಹುದು, ಮತ್ತು ನೀವು ನಿರೀಕ್ಷಿಸಿದ ಸರ್ವರ್ ಅದಾಗಿರದೇ ಇರಬಹುದು (ನೀವು ದಾಳಿಕೋರರೊಂದಿಗೆ ಸಂವಹನ ಮಾಡುತ್ತಿರಬಹುದು).</translation>
+<translation id="6826370046007623921">ಡೇಟಾ ನಷ್ಟದ ತಡೆ</translation>
 <translation id="6831043979455480757">ಅನುವಾದಿಸು</translation>
 <translation id="6839929833149231406">ಪ್ರದೇಶ</translation>
 <translation id="6852204201400771460">ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪುನಃ ಆರಂಭಿಸಬೇಕೆ?</translation>
@@ -1216,6 +1228,7 @@
 <translation id="7542995811387359312">ಈ ಫಾರ್ಮ್ ಸುರಕ್ಷಿತವಾದ ಸಂಪರ್ಕವನ್ನು ಬಳಸುತ್ತಿಲ್ಲವಾದ ಕಾರಣ ಸ್ವಯಂಚಾಲಿತ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಭರ್ತಿ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.</translation>
 <translation id="7548892272833184391">ಸಂಪರ್ಕ ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಿ</translation>
 <translation id="7549584377607005141">ಈ ವೆಬ್‌ಪುಟವು ಸರಿಯಾಗಿ ಪ್ರದರ್ಶನಗೊಳ್ಳಲು ಈ ಮೊದಲು ನೀವು ನಮೂದಿಸಿದ ಡೇಟಾದ ಅಗತ್ಯವಿದೆ. ನೀವು ಈ ಡೇಟಾವನ್ನು ಮತ್ತೆ ಕಳುಹಿಸಬಹುದು, ಆದರೆ ಹಾಗೆ ಮಾಡುವುದರಿಂದ ಈ ಪುಟವು ಈ ಮೊದಲು ಪೂರೈಸಿದ ಯಾವುದೇ ಕ್ರಿಯೆಯನ್ನು ನೀವು ಪುನರಾವರ್ತಿಸುತ್ತೀರಿ.</translation>
+<translation id="7550637293666041147">ನಿಮ್ಮ ಸಾಧನದ ಬಳಕೆದಾರರ ಹೆಸರು ಮತ್ತು Chrome ಬಳಕೆದಾರರ ಹೆಸರು</translation>
 <translation id="7552846755917812628">ಕೆಳಗಿನ ಸಲಹೆಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ:</translation>
 <translation id="7554791636758816595">ಹೊಸ ಟ್ಯಾಬ್</translation>
 <translation id="7564049878696755256">ನಿಮ್ಮ <ph name="ORG_NAME" /> ಖಾತೆಗೆ ನೀವು ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಳ್ಳಬಹುದು ಅಥವಾ ಗುರುತು ಕಳ್ಳತನಕ್ಕೆ ಒಳಗಾಗಬಹುದು. ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಇದೀಗ ಬದಲಾಯಿಸುವಂತೆ Chrome ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
@@ -1230,6 +1243,7 @@
 <translation id="7610193165460212391">ಮೌಲ್ಯವು ವ್ಯಾಪ್ತಿಯಿಂದ <ph name="VALUE" /> ಹೊರಗಿದೆ.</translation>
 <translation id="7613889955535752492">ಅವಧಿ ಮೀರುವ ಸಮಯ: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">ನಿಮ್ಮ Google ಖಾತೆಯ ಪಾಸ್‌ವರ್ಡ್‌ನ ಬೇರೆ ಆವೃತ್ತಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ನೀವು ಈಗಾಗಲೇ ಹೊಂದಿರುವಿರಿ. ದಯವಿಟ್ಟು  ಕೆಳಗೆ ಇದನ್ನು ನಮೂದಿಸಿ.</translation>
+<translation id="7625784245512586808">Chrome ಎಂಟರ್‌ಪ್ರೈಸ್ ಬೆದರಿಕೆ ರಕ್ಷಣೆ</translation>
 <translation id="7633909222644580952">ಕಾರ್ಯಕ್ಷಮತೆಯ ಡೇಟಾ ಮತ್ತು ಕ್ರ್ಯಾಶ್ ವರದಿಗಳು</translation>
 <translation id="7637571805876720304">Chromium ನಿಂದ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ತೆಗೆದುಹಾಕುವುದೇ?</translation>
 <translation id="7638605456503525968">ಸೀರಿಯಲ್ ಪೋರ್ಟ್‌ಗಳು</translation>
@@ -1340,6 +1354,7 @@
 <translation id="8211406090763984747">ಸಂಪರ್ಕ ಸುರಕ್ಷಿತವಾಗಿದೆ</translation>
 <translation id="8218327578424803826">ನಿಯೋಜಿಸಲಾದ ಸ್ಥಳ:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)</translation>
+<translation id="8220639454292072926">ಎಂಟರ್‌ಪ್ರೈಸ್ ವರದಿಮಾಡುವಿಕೆ</translation>
 <translation id="8225771182978767009">ಈ ಕಂಪ್ಯೂಟರ್ ಹೊಂದಿಸಿರುವ ವ್ಯಕ್ತಿಯು ಈ ಸೈಟ್ ನಿರ್ಬಂಧಿಸಲು ಆಯ್ಕೆಮಾಡಿದ್ದಾರೆ.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">ಪುಟವನ್ನು ಹೊಸ ಅದೃಶ್ಯ ಟ್ಯಾಬ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
@@ -1423,6 +1438,7 @@
 <translation id="8740359287975076522"><ph name="HOST_NAME" /> ನ &lt;abbr id="dnsDefinition"&gt;DNS ವಿಳಾಸ&lt;/abbr&gt; ಕಂಡುಬರಲಿಲ್ಲ. ಸಮಸ್ಯೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗುತ್ತಿದೆ.</translation>
 <translation id="874846938927089722">ಸ್ವೀಕೃತ ಕ್ರೆಡಿಟ್ ಮತ್ತು ಪ್ರೀಪೇಯ್ಡ್ ಕಾರ್ಡ್‌ಗಳು</translation>
 <translation id="874918643257405732">ಈ ಟ್ಯಾಬ್ ಅನ್ನು ಬುಕ್‌ಮಾರ್ಕ್ ಮಾಡಿ</translation>
+<translation id="8751426954251315517">ಮುಂದಿನ ಬಾರಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="8759274551635299824">ಈ ಕಾರ್ಡ್‌ನ ಅವಧಿ ಮುಕ್ತಾಯವಾಗಿದೆ</translation>
 <translation id="8761567432415473239">Google ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್‌ ಇತ್ತೀಚಿಗೆ <ph name="SITE" /> ನಲ್ಲಿ <ph name="BEGIN_LINK" />ಹಾನಿಕಾರಕ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಕಂಡುಹಿಡಿದಿದೆ<ph name="END_LINK" />.</translation>
 <translation id="8763927697961133303">USB ಸಾಧನ</translation>
@@ -1487,6 +1503,7 @@
 <translation id="9080712759204168376">ಆರ್ಡರ್ ಸಾರಾಂಶ</translation>
 <translation id="9089260154716455634">ಬಿಡುವಿನ ಅವಧಿಯ ಕಾರ್ಯನೀತಿ:</translation>
 <translation id="9095388113577226029">ಇನ್ನಷ್ಟು ಭಾಷೆಗಳು...</translation>
+<translation id="9098981495403789647">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ Chrome ಎಂಟರ್‌ಪ್ರೈಸ್ ಬೆದರಿಕೆ ರಕ್ಷಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ. Chrome ಎಂಟರ್‌ಪ್ರೈಸ್ ಬೆದರಿಕೆ ರಕ್ಷಣೆಯು ನಿಮ್ಮ ಕೆಲವು ಡೇಟಾಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿದೆ.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> ಸಾಮಾನ್ಯವಾಗಿ ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಸಂರಕ್ಷಿಸಲು ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಪ್ರಯೋಜನವನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ Chromium <ph name="SITE" /> ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ, ಆ ವೆಬ್‌ಸೈಟ್‌‌ ಅಸಹಜ ಮತ್ತು ತಪ್ಪು ರುಜುವಾತುಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿದೆ. ದಾಳಿಕೋರರು <ph name="SITE" /> ರೂಪದಲ್ಲಿ ಸೋಗು ಹಾಕಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವಾಗ ಅಥವಾ ವೈ-ಫೈ ಸೈನ್-ಇನ್ ಪರದೆಯು ಸಂಪರ್ಕಕ್ಕೆ ಅಡ್ಡಿಯುಂಟು ಮಾಡಿದಾಗ ಇದು ಕಂಡುಬರಬಹುದು. ಯಾವುದೇ ಡೇಟಾವನ್ನು ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳುವ ಮೊದಲೇ Chromium ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿರುವ ಕಾರಣ, ನಿಮ್ಮ ಮಾಹಿತಿ ಈಗಲೂ ಸುರಕ್ಷಿತವಾಗಿದೆ.</translation>
 <translation id="9106062320799175032">ಬಿಲ್ಲಿಂಗ್ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="9114524666733003316">ಕಾರ್ಡ್‌ ದೃಢೀಕರಿಸಲಾಗುತ್ತಿದೆ...</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index cb8947cb..45fcee6 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">시스템 관리자에게 문의하세요.</translation>
 <translation id="1740951997222943430">올바른 만료 월을 입력하세요.</translation>
 <translation id="1743520634839655729">다음번에 더 빠르게 결제할 수 있도록 Google 계정과 기기에 카드, 이름, 청구서 수신 주소를 저장하세요.</translation>
+<translation id="1743570585616704562">인식할 수 없음</translation>
 <translation id="1745880797583122200">관리 대상 브라우저입니다</translation>
 <translation id="17513872634828108">열린 탭</translation>
 <translation id="1753706481035618306">페이지 번호</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 7dc5a396..950760a 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -168,6 +168,7 @@
 <translation id="1734878702283171397">Pabandykite susisiekti su sistemos administratoriumi.</translation>
 <translation id="1740951997222943430">Įveskite tinkamą galiojimo laiko pabaigos mėnesį</translation>
 <translation id="1743520634839655729">Kad kitą kartą galėtumėte greičiau atlikti mokėjimą, išsaugokite kortelę, vardą bei pavardę ir atsiskaitymo adresą „Google“ paskyroje ir šiame įrenginyje.</translation>
+<translation id="1743570585616704562">Neatpažinta</translation>
 <translation id="1745880797583122200">Jūsų naršyklė tvarkoma</translation>
 <translation id="17513872634828108">Atidaryti skirtukai</translation>
 <translation id="1753706481035618306">Puslapio numeris</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index cdcf0d9..81763b6a 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">“Programmatūra jūsu datorā, kuras dēļ pārlūkā Chrome nevar izveidot drošu tīmekļa savienojumu” (tikai Windows datoros)</translation>
 <translation id="1294154142200295408">Komandrindu varianti</translation>
 <translation id="129553762522093515">Nesen aizvērtas</translation>
+<translation id="1298536327547837046">Ļaunprātīgas programmatūras meklēšana</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Dzēsiet sīkfailus<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funkcijas, kuru darbība ir pārtraukta</translation>
 <translation id="1320233736580025032">Prc1 (aploksne)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Sazinieties ar sistēmas administratoru.</translation>
 <translation id="1740951997222943430">Ievadiet derīgu mēnesi</translation>
 <translation id="1743520634839655729">Lai nākamreiz veiktu maksājumu ātrāk, saglabājiet kartes datus, vārdu un norēķinu adresi savā Google kontā un šajā ierīcē.</translation>
+<translation id="1743570585616704562">Nav atpazīts</translation>
 <translation id="1745880797583122200">Jūsu pārlūks tiek pārvaldīts</translation>
 <translation id="17513872634828108">Atvērt cilnes</translation>
 <translation id="1753706481035618306">Lapas numurs</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Atcelt maksājumu</translation>
 <translation id="3207960819495026254">Atzīmēts kā grāmatzīme</translation>
 <translation id="3209034400446768650">Lapā var tikt iekasēta nauda</translation>
+<translation id="3215092763954878852">Neizdevās izmantot WebAuthn</translation>
 <translation id="3225919329040284222">Serveris uzrādīja sertifikātu, kas neatbilst iebūvētajām cerībām. Šīs cerības ir ietvertas konkrētām, augstas drošības vietnēm, lai aizsargātu jūs.</translation>
 <translation id="3226128629678568754">Nospiediet atkārtotas ielādes pogu, lai atkārtoti iesniegtu datus, kas nepieciešami lapas ielādei.</translation>
 <translation id="3227137524299004712">Mikrofons</translation>
@@ -561,6 +564,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Nav}=1{No 1 vietnes }zero{No # vietnēm }one{No # vietnes }other{No # vietnēm }}</translation>
 <translation id="397105322502079400">Aprēķina...</translation>
 <translation id="3973234410852337861">Vietne <ph name="HOST_NAME" /> ir bloķēta</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ir iespējojis pārlūkā funkciju Chrome Enterprise Threat Protection. Chrome Enterprise Threat Protection var piekļūt daļai jūsu datu.</translation>
 <translation id="3987940399970879459">Mazāk nekā 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{Tuvumā ir 1 tīmekļa lapa}zero{Tuvumā ir # tīmekļa lapas}one{Tuvumā ir # tīmekļa lapa}other{Tuvumā ir # tīmekļa lapas}}</translation>
 <translation id="4030383055268325496">&amp;Atsaukt pievienošanu</translation>
@@ -629,6 +633,7 @@
 <translation id="4277028893293644418">Atiestatīt paroli</translation>
 <translation id="4279811152705618813">Jūsu ierīci (veids: <ph name="DEVICE_TYPE" />) pārvalda <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Šī karte tika saglabāta jūsu Google kontā}zero{Šīs kartes tika saglabātas jūsu Google kontā}one{Šīs kartes tika saglabātas jūsu Google kontā}other{Šīs kartes tika saglabātas jūsu Google kontā}}</translation>
+<translation id="428847186335018806">Pārmeklēt failus, ko augšupielādējat vai lejupielādējat pārlūkā Chrome.</translation>
 <translation id="42981349822642051">Izvērst</translation>
 <translation id="4302965934281694568">Chou3 (aploksne)</translation>
 <translation id="4305817255990598646">Pāriet</translation>
@@ -667,6 +672,7 @@
 <translation id="4506176782989081258">Validācijas kļūda: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Sazinieties ar sistēmas administratoru.</translation>
 <translation id="450710068430902550">Kopīgošana ar administratoru</translation>
+<translation id="4508814173490746936">Neizdevās izmantot Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (aploksne)</translation>
 <translation id="4515275063822566619">Kartes un adreses tiek iegūtas no Chrome un jūsu Google konta (<ph name="ACCOUNT_EMAIL" />). Varat tās pārvaldīt <ph name="BEGIN_LINK" />iestatījumos<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (aploksne)</translation>
@@ -762,6 +768,7 @@
 <translation id="5045550434625856497">Nepareiza parole</translation>
 <translation id="5056549851600133418">Jums piemeklēti raksti</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(viens tiek lietots)}zero{(# tiek lietoti)}one{(# tiek lietots)}other{(# tiek lietoti)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Pārbaudiet starpniekservera adresi<ph name="END_LINK" />.</translation>
 <translation id="5087286274860437796">Servera sertifikāts šobrīd nav derīgs.</translation>
 <translation id="5087580092889165836">Pievienot karti</translation>
@@ -990,6 +997,7 @@
 <translation id="6302269476990306341">Tiek pārtraukta Google asistenta darbība pārlūkprogrammā Chrome.</translation>
 <translation id="6305205051461490394">Vietne <ph name="URL" /> nav sasniedzama.</translation>
 <translation id="6321917430147971392">Sistēmas DNS iestatījumu pārbaude</translation>
+<translation id="6322182122604171028">Neizdevās izmantot Windows Hello</translation>
 <translation id="6328639280570009161">Tīkla prognožu atspējošana</translation>
 <translation id="6328784461820205019">“Savienojums nav privāts”, “&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;”, “&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;”, “&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;”, “&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;” vai “SSL sertifikāta kļūda”</translation>
 <translation id="6328786501058569169">Šī vietne ir krāpnieciska</translation>
@@ -1013,6 +1021,7 @@
 <translation id="6433490469411711332">Kontaktinformācijas rediģēšana</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> noraidīja savienojuma izveidi.</translation>
 <translation id="6434309073475700221">Atmest</translation>
+<translation id="6435221585574090192">Kopīgot ar jūsu administratoru datus par notikumiem, kuri ir saistīti ar drošību un ir atzīmēti funkcijā Chrome Enterprise Threat Protection. Šādos datos var būt ietverti lapu vietrāži URL, faila nosaukums un faila metadati, kā arī lietotājvārdi, ko izmantojat ierīcē un pārlūkā Chrome.</translation>
 <translation id="6440503408713884761">Ignorēts</translation>
 <translation id="6446163441502663861">Kahu (aploksne)</translation>
 <translation id="6446608382365791566">Papildu informācijas pievienošana</translation>
@@ -1057,6 +1066,7 @@
 <translation id="6671697161687535275">Vai noņemt veidlapas ieteikumu no pārlūka Chromium?</translation>
 <translation id="6685834062052613830">Izrakstieties un pabeidziet iestatīšanu</translation>
 <translation id="6689271823431384964">Pārlūkprogrammā Chrome tiek piedāvāts saglabāt jūsu kartes Google kontā, jo esat pierakstījies. Varat mainīt šo darbību iestatījumos. Kartes īpašnieka vārds tiek iegūts no jūsu konta.</translation>
+<translation id="6707256370811247129">Meklēt datus kešatmiņas saturā un failos, ko augšupielādējat vai lejupielādējat pārlūkā Chrome.</translation>
 <translation id="6710213216561001401">Iepriekšējais</translation>
 <translation id="6710594484020273272">&lt;Ierakstiet meklēšanas vienumu&gt;</translation>
 <translation id="671076103358959139">Reģistrācijas pilnvara:</translation>
@@ -1075,6 +1085,7 @@
 <translation id="681021252041861472">Obligātais lauks</translation>
 <translation id="6810899417690483278">Pielāgošanas ID</translation>
 <translation id="6825578344716086703">Jūs mēģinājāt sasniegt domēnu <ph name="DOMAIN" />, bet serveris uzrādīja sertifikātu, kas ir parakstīts, izmantojot vāju paraksta algoritmu (piemēram, SHA-1). Tas nozīmē, ka servera norādītie drošības akreditācijas dati var būt viltoti un šis serveris var nebūt tas serveris, kuru mēģināt sasniegt (iespējams, jūs sazināties ar uzbrucēju).</translation>
+<translation id="6826370046007623921">Datu zuduma novēršana</translation>
 <translation id="6831043979455480757">Tulkot</translation>
 <translation id="6839929833149231406">Apgabals</translation>
 <translation id="6852204201400771460">Vai atkārtoti ielādēt lietotni?</translation>
@@ -1221,6 +1232,7 @@
 <translation id="7542995811387359312">Automātiska kredītkartes numura ievadīšana ir atspējota, jo šai veidlapai netiek izmantots drošs savienojums.</translation>
 <translation id="7548892272833184391">Savienojuma kļūdu novēršana</translation>
 <translation id="7549584377607005141">Lai tīmekļa lapu varētu attēlot pareizi, tai nepieciešami jūsu iepriekš ievadītie dati. Varat atkārtoti nosūtīt šos datus, taču tādā gadījumā tiks atkārtota ikviena darbība, ko pirms tam veica lapa.</translation>
+<translation id="7550637293666041147">Jūsu lietotājvārds ierīcē un pārlūkā Chrome</translation>
 <translation id="7552846755917812628">Izmantojiet tālāk sniegtos padomus.</translation>
 <translation id="7554791636758816595">Jauna cilne</translation>
 <translation id="7564049878696755256">Varat zaudēt piekļuvi savam <ph name="ORG_NAME" /> kontam, vai jūsu identitāte var tikt nozagta. Chrome iesaka nekavējoties nomainīt paroli.</translation>
@@ -1235,6 +1247,7 @@
 <translation id="7610193165460212391">Vērtība pārsniedz diapazonu: <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Derīguma termiņš: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Jums jau ir dati, kas šifrēti, izmantojot citu Google konta paroles versiju. Ievadiet to šeit.</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">Veiktspējas dati un avāriju pārskati</translation>
 <translation id="7637571805876720304">Vai noņemt kredītkarti no pārlūka Chromium?</translation>
 <translation id="7638605456503525968">Seriālie porti</translation>
@@ -1345,6 +1358,7 @@
 <translation id="8211406090763984747">Savienojums ir drošs</translation>
 <translation id="8218327578424803826">Piešķirtā atrašanās vieta:</translation>
 <translation id="8220146938470311105">C7/C6 (aploksne)</translation>
+<translation id="8220639454292072926">Enterprise pārskati</translation>
 <translation id="8225771182978767009">Persona, kura iestatīja šo datoru, izvēlējās bloķēt šo vietni.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Atvērt lapu jaunā inkognito režīma cilnē</translation>
@@ -1428,6 +1442,7 @@
 <translation id="8740359287975076522">Nevarēja atrast <ph name="HOST_NAME" /> &lt;abbr id="dnsDefinition"&gt;DNS adresi&lt;/abbr&gt;. Notiek problēmas diagnosticēšana.</translation>
 <translation id="874846938927089722">Atbalstītās kredītkartes un priekšapmaksas kartes</translation>
 <translation id="874918643257405732">Saglabāt šo cilni kā grāmatzīmi</translation>
+<translation id="8751426954251315517">Mēģiniet vēlreiz nākamajā reizē</translation>
 <translation id="8759274551635299824">Kartes derīguma termiņš ir beidzies</translation>
 <translation id="8761567432415473239">Google drošās pārlūkošanas tehnoloģija nesen vietnē <ph name="SITE" /> <ph name="BEGIN_LINK" />atklāja kaitīgas programmas<ph name="END_LINK" />.</translation>
 <translation id="8763927697961133303">USB ierīce</translation>
@@ -1492,6 +1507,7 @@
 <translation id="9080712759204168376">Pasūtījuma kopsavilkums</translation>
 <translation id="9089260154716455634">Izslēgšanas stundu politika:</translation>
 <translation id="9095388113577226029">Citas valodas…</translation>
+<translation id="9098981495403789647">Jūsu administrators pārlūkā ir iespējojis Chrome Enterprise Threat Protection. Chrome Enterprise Threat Protection var piekļūt daļai jūsu datu.</translation>
 <translation id="9103872766612412690">Vietnē <ph name="SITE" /> informācijas aizsargāšanai parasti tiek izmantota šifrēšana. Kad pārlūkā Chromium tika mēģināts izveidot savienojumu ar vietni <ph name="SITE" />, šoreiz tā nosūtīja neparastus un nepareizus akreditācijas datus. Iespējams, tas notika, jo uzbrucējs mēģināja uzdoties par vietni <ph name="SITE" />, vai arī Wi-Fi pierakstīšanās ekrāns pārtrauca savienojumu. Jūsu informācija joprojām ir drošībā, jo pārlūks Chromium pārtrauca savienojumu, pirms tika veikta jebkādu datu apmaiņa.</translation>
 <translation id="9106062320799175032">Norēķinu adreses pievienošana</translation>
 <translation id="9114524666733003316">Notiek kartes apstiprināšana...</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index d13a8d4..001074a 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">സിസ്റ്റം അഡ്‌മിനെ ബന്ധപ്പെടാൻ ശ്രമിക്കുക.</translation>
 <translation id="1740951997222943430">കാലഹരണപ്പെടുന്ന ശരിയായ മാസം നല്‍കുക</translation>
 <translation id="1743520634839655729">അടുത്ത പ്രാവശ്യം കൂടുതൽ വേഗത്തിൽ പണമടയ്ക്കാൻ, നിങ്ങളുടെ Google അക്കൗണ്ടിലും ഈ ഉപകരണത്തിലും ഈ കാർഡ്, പേര്, ബില്ലിംഗ് വിലാസം എന്നിവ സംരക്ഷിക്കുക.</translation>
+<translation id="1743570585616704562">തിരിച്ചറിഞ്ഞില്ല</translation>
 <translation id="1745880797583122200">നിങ്ങളുടെ ബ്രൗസർ മാനേജ് ചെയ്യപ്പെട്ടിരിക്കുന്നു</translation>
 <translation id="17513872634828108">ഓപ്പൺ ടാബുകൾ</translation>
 <translation id="1753706481035618306">പേജ് നമ്പർ</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index a932491..ca7775b 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">सिस्टम प्रशासकाशी संपर्क साधण्याचा प्रयत्न करा.</translation>
 <translation id="1740951997222943430">वैध समाप्ती महिना एंटर करा</translation>
 <translation id="1743520634839655729">पुढील वेळेस जलद पेमेंट करण्यासाठी, तुमच्या Google खात्यावर आणि या डिव्हाइसवर तुमचे कार्ड आणि बिलिंग पत्ता सेव्ह करा.</translation>
+<translation id="1743570585616704562">ओळखले नाही</translation>
 <translation id="1745880797583122200">तुमचा ब्राउझर व्यवस्थापित केला आहे</translation>
 <translation id="17513872634828108">खुले टॅब</translation>
 <translation id="1753706481035618306">पृष्ठ क्रमांक</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 1944523..972691c5 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Perisian pada komputer anda menghalang Chrome daripada menyambung ke web dengan selamat" (komputer Windows sahaja)</translation>
 <translation id="1294154142200295408">Variasi baris perintah</translation>
 <translation id="129553762522093515">Ditutup baru-baru ini</translation>
+<translation id="1298536327547837046">Pengimbasan Perisian Hasad</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Cuba kosongkan kuki anda<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Ciri yang Ditamatkan</translation>
 <translation id="1320233736580025032">Prc1 (Sampul Surat)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Cuba hubungi pentadbir sistem.</translation>
 <translation id="1740951997222943430">Masukkan bulan tamat tempoh yang sah</translation>
 <translation id="1743520634839655729">Untuk membayar dengan lebih cepat selepas ini, simpan kad, nama dan alamat pengebilan anda ke Akaun Google dan ke peranti ini.</translation>
+<translation id="1743570585616704562">Tidak dikenali</translation>
 <translation id="1745880797583122200">Penyemak imbas anda diurus</translation>
 <translation id="17513872634828108">Buka tab</translation>
 <translation id="1753706481035618306">Nombor halaman</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Batal Pembayaran</translation>
 <translation id="3207960819495026254">Ditandai halaman</translation>
 <translation id="3209034400446768650">Halaman mungkin mengenakan bayaran berbentuk wang</translation>
+<translation id="3215092763954878852">Tidak dapat menggunakan WebAuthn</translation>
 <translation id="3225919329040284222">Pelayan memberikan sijil yang tidak sepadan dengan jangkaan terbina dalam. Jangkaan ini disertakan untuk tapak web dengan keselamatan tinggi tertentu untuk melindungi anda.</translation>
 <translation id="3226128629678568754">Tekan butang muat semula untuk menyerahkan kembali data yang diperlukan untuk memuatkan halaman.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -565,6 +568,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Tiada}=1{Daripada 1 tapak }other{Daripada # tapak }}</translation>
 <translation id="397105322502079400">Mengira...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> disekat</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> telah mendayakan Perlindungan Ancaman Chrome Enterprise pada penyemak imbas anda. Perlindungan Ancaman Chrome Enterprise mempunyai akses kepada sesetengah data anda.</translation>
 <translation id="3987940399970879459">Kurang daripada 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 halaman web berdekatan}other{# halaman web berdekatan}}</translation>
 <translation id="4030383055268325496">&amp;Buat asal tambahkan</translation>
@@ -633,6 +637,7 @@
 <translation id="4277028893293644418">Tetapkan semula kata laluan</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" /> anda diurus oleh <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Kad ini telah disimpan ke Akaun Google anda}other{Kad ini telah disimpan ke Akaun Google anda}}</translation>
+<translation id="428847186335018806">Imbas fail yang anda muat turun atau muat naik dalam Chrome.</translation>
 <translation id="42981349822642051">Kembangkan</translation>
 <translation id="4302965934281694568">Chou3 (Sampul Surat)</translation>
 <translation id="4305817255990598646">Tukar</translation>
@@ -671,6 +676,7 @@
 <translation id="4506176782989081258">Ralat pengesahan: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Menghubungi pentadbir sistem</translation>
 <translation id="450710068430902550">Berkongsi dengan Pentadbir</translation>
+<translation id="4508814173490746936">Tidak dapat menggunakan Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Sampul Surat)</translation>
 <translation id="4515275063822566619">Kad dan alamat adalah daripada Chrome dan Akaun Google anda (<ph name="ACCOUNT_EMAIL" />). Anda boleh mengurus kad dan alamat ini dalam <ph name="BEGIN_LINK" />Tetapan<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Sampul Surat)</translation>
@@ -766,6 +772,7 @@
 <translation id="5045550434625856497">Kata laluan tidak sah</translation>
 <translation id="5056549851600133418">Artikel untuk anda</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 sedang digunakan)}other{(# sedang digunakan)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Menyemak alamat proksi<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Sijil pelayan tidak sah pada masa ini.</translation>
 <translation id="5087580092889165836">Tambah kad</translation>
@@ -995,6 +1002,7 @@
 <translation id="6302269476990306341">Google Assistant dalam Chrome berhenti</translation>
 <translation id="6305205051461490394"><ph name="URL" /> tidak dapat dicapai.</translation>
 <translation id="6321917430147971392">Semak tetapan DNS anda</translation>
+<translation id="6322182122604171028">Tidak dapat menggunakan Windows Hello</translation>
 <translation id="6328639280570009161">Cuba lumpuhkan ramalan rangkaian</translation>
 <translation id="6328784461820205019">"Sambungan anda tidak peribadi" atau "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" atau "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" atau "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" atau "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" atau "Ralat sijil SSL"</translation>
 <translation id="6328786501058569169">Tapak ini mengelirukan</translation>
@@ -1018,6 +1026,7 @@
 <translation id="6433490469411711332">Edit maklumat hubungan</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> enggan menyambung.</translation>
 <translation id="6434309073475700221">Buang</translation>
+<translation id="6435221585574090192">Kongsi data tentang acara keselamatan yang telah dibenderakan oleh Perlindungan Ancaman Chrome Enterprise dengan Pentadbir anda. Data ini mungkin termasuk url halaman, nama fail dan metadata fail, nama pengguna peranti anda dan nama pengguna Chrome.</translation>
 <translation id="6440503408713884761">Diabaikan</translation>
 <translation id="6446163441502663861">Kahu (Sampul Surat)</translation>
 <translation id="6446608382365791566">Tambahkan maklumat lanjut</translation>
@@ -1062,6 +1071,7 @@
 <translation id="6671697161687535275">Alih keluar cadangan borang daripada Chromium?</translation>
 <translation id="6685834062052613830">Log keluar dan selesaikan persediaan</translation>
 <translation id="6689271823431384964">Chrome menawarkan penyimpanan kad dalam Akaun Google anda kerana anda telah log masuk. Anda boleh menukar gelagat ini dalam tetapan. Nama pemegang kad diambil daripada akaun anda.</translation>
+<translation id="6707256370811247129">Imbas kandungan cache dan fail yang anda muat turun atau muat naik dalam Chrome.</translation>
 <translation id="6710213216561001401">Sebelumnya</translation>
 <translation id="6710594484020273272">&lt;Taip istilah carian&gt;</translation>
 <translation id="671076103358959139">Token Pendaftaran:</translation>
@@ -1080,6 +1090,7 @@
 <translation id="681021252041861472">Medan Diperlukan</translation>
 <translation id="6810899417690483278">ID Penyesuaian</translation>
 <translation id="6825578344716086703">Anda cuba untuk mencapai <ph name="DOMAIN" />, tetapi pelayan memberikan sijil yang ditandatangani menggunakan algoritma tandatangan yang lemah (seperti SHA-1). Ini bermakna bahawa bukti kelayakan keselamatan yang diberi pelayan mungkin dipalsukan dan pelayan tersebut bukan seperti yang anda jangkakan (anda mungkin berkomunikasi dengan penyerang).</translation>
+<translation id="6826370046007623921">Pencegahan Kehilangan Data</translation>
 <translation id="6831043979455480757">Terjemah</translation>
 <translation id="6839929833149231406">Kawasan</translation>
 <translation id="6852204201400771460">Muat semula apl?</translation>
@@ -1226,6 +1237,7 @@
 <translation id="7542995811387359312">Pengisian kad kredit automatik dilumpuhkan kerana borang ini tidak menggunakan sambungan selamat.</translation>
 <translation id="7548892272833184391">Betulkan ralat sambungan</translation>
 <translation id="7549584377607005141">Halaman web ini memerlukan data yang anda masukkan sebelum ini agar dapat dipaparkan dengan betul. Anda boleh menghantar data ini semula, tetapi dengan berbuat demikian anda akan mengulangi sebarang tindakan terdahulu yang telah dilakukan oleh halaman ini.</translation>
+<translation id="7550637293666041147">Nama pengguna peranti dan nama pengguna Chrome anda</translation>
 <translation id="7552846755917812628">Cuba petua berikut:</translation>
 <translation id="7554791636758816595">Tab Baharu</translation>
 <translation id="7564049878696755256">Anda boleh kehilangan akses kepada akaun <ph name="ORG_NAME" /> anda atau mengalami kecurian identiti. Chrome mengesyorkan supaya kata laluan anda ditukar sekarang.</translation>
@@ -1240,6 +1252,7 @@
 <translation id="7610193165460212391">Nilai berada di luar julat <ph name="VALUE" /></translation>
 <translation id="7613889955535752492">Tamat: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Anda sudah mempunyai data yang disulitkan menggunakan versi kata laluan Akaun Google anda yang berbeza. Sila masukkannya di bawah.</translation>
+<translation id="7625784245512586808">Perlindungan Ancaman Chrome Enterprise</translation>
 <translation id="7633909222644580952">Data prestasi dan laporan ranap sistem</translation>
 <translation id="7637571805876720304">Alih keluar kad kredit daripada Chromium?</translation>
 <translation id="7638605456503525968">Port siri</translation>
@@ -1350,6 +1363,7 @@
 <translation id="8211406090763984747">Sambungan selamat</translation>
 <translation id="8218327578424803826">Lokasi yang Ditentukan:</translation>
 <translation id="8220146938470311105">C7/C6 (Sampul Surat)</translation>
+<translation id="8220639454292072926">Pelaporan Perusahaan</translation>
 <translation id="8225771182978767009">Orang yang menyediakan komputer ini telah memilih untuk menyekat tapak ini.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Buka halaman dalam tab Inkognito baharu</translation>
@@ -1433,6 +1447,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;Alamat DNS&lt;/abbr&gt; <ph name="HOST_NAME" /> tidak ditemui. Masalah sedang didiagnosis.</translation>
 <translation id="874846938927089722">Kad Kredit dan Prabayar yang Diterima</translation>
 <translation id="874918643257405732">Tanda tab ini</translation>
+<translation id="8751426954251315517">Sila cuba lagi nanti</translation>
 <translation id="8759274551635299824">Kad ini telah tamat tempoh</translation>
 <translation id="8761567432415473239">Penyemakan Imbas Selamat Google baru-baru ini <ph name="BEGIN_LINK" />menemui atur cara berbahaya<ph name="END_LINK" /> pada <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Peranti USB</translation>
@@ -1497,6 +1512,7 @@
 <translation id="9080712759204168376">Ringkasan Pesanan</translation>
 <translation id="9089260154716455634">Dasar Luar Waktu:</translation>
 <translation id="9095388113577226029">Lagi bahasa...</translation>
+<translation id="9098981495403789647">Pentadbir telah mendayakan Perlindungan Ancaman Chrome Enterprise pada penyemak imbas anda. Perlindungan Ancaman Chrome Enterprise mempunyai akses kepada sesetengah data anda.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> biasanya menggunakan penyulitan untuk melindungi maklumat anda. Apabila Chromium cuba menyambung ke <ph name="SITE" /> pada kali ini, tapak web tersebut mengembalikan bukti kelayakan yang luar biasa dan salah. Hal ini boleh berlaku apabila penyerang sedang cuba menyamar sebagai <ph name="SITE" /> atau skrin log masuk Wi-Fi telah memutuskan sambungan. Maklumat anda masih selamat kerana Chromium menghentikan sambungan sebelum sebarang pertukaran data berlaku.</translation>
 <translation id="9106062320799175032">Tambahkan Alamat Pengebilan</translation>
 <translation id="9114524666733003316">Mengesahkan kad...</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 507c2ae8..9a0e53ab 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">'Software op je computer voorkomt dat Chrome veilig verbinding kan maken met internet' (alleen Windows-computers)</translation>
 <translation id="1294154142200295408">Opdrachtregelvarianten</translation>
 <translation id="129553762522093515">Recent gesloten</translation>
+<translation id="1298536327547837046">Scannen op malware</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Probeer je cookies te wissen<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Verouderde functies</translation>
 <translation id="1320233736580025032">Prc1 (envelop)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Probeer contact op te nemen met de systeembeheerder.</translation>
 <translation id="1740951997222943430">Geef een geldige vervalmaand op</translation>
 <translation id="1743520634839655729">Sla je pas, naam en factuuradres op in je Google-account en op dit apparaat zodat je de volgende keer sneller kunt betalen.</translation>
+<translation id="1743570585616704562">Niet herkend</translation>
 <translation id="1745880797583122200">Je browser wordt beheerd</translation>
 <translation id="17513872634828108">Geopende tabbladen</translation>
 <translation id="1753706481035618306">Paginanummer</translation>
@@ -423,6 +425,7 @@
 <translation id="320323717674993345">Betaling annuleren</translation>
 <translation id="3207960819495026254">Toegevoegd aan 'Bladwijzers'</translation>
 <translation id="3209034400446768650">Pagina kan geld in rekening brengen</translation>
+<translation id="3215092763954878852">Kan WebAuthn niet gebruiken</translation>
 <translation id="3225919329040284222">De server heeft een certificaat gepresenteerd dat niet overeenkomt met de ingebouwde verwachtingen. Deze verwachtingen zijn opgenomen voor bepaalde websites om je te beschermen.</translation>
 <translation id="3226128629678568754">Klik op de knop 'Opnieuw laden' om de gegevens opnieuw te verzenden die nodig zijn om de pagina te laden.</translation>
 <translation id="3227137524299004712">Microfoon</translation>
@@ -557,6 +560,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Geen}=1{Van één site }other{Van # sites }}</translation>
 <translation id="397105322502079400">Berekenen...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> wordt geblokkeerd</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> heeft Chrome Enterprise Threat Protection ingeschakeld in je browser. Chrome Enterprise Threat Protection heeft toegang tot sommige van je gegevens.</translation>
 <translation id="3987940399970879459">Minder dan 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 webpagina in de buurt}other{# webpagina's in de buurt}}</translation>
 <translation id="4030383055268325496">&amp;Toevoegen ongedaan maken</translation>
@@ -573,7 +577,7 @@
 <translation id="4103249731201008433">Serienummer van apparaat is ongeldig</translation>
 <translation id="410351446219883937">Automatisch afspelen</translation>
 <translation id="4103763322291513355">Ga naar &lt;strong&gt;chrome://policy&lt;/strong&gt; om de lijst met URL's op de zwarte lijst en andere beleidsregels te bekijken die worden afgedwongen door je systeembeheerder.</translation>
-<translation id="4108231218301530806">Gebruik je vingerafdruk om deze kaart de volgende keer te verifiëren.</translation>
+<translation id="4108231218301530806">Gebruik de volgende keer je vingerafdruk om deze kaart te verifiëren.</translation>
 <translation id="4110652170750985508">Je betaling controleren</translation>
 <translation id="4112140312785995938">Achteruit zoeken</translation>
 <translation id="4116663294526079822">Altijd toestaan op deze site</translation>
@@ -625,6 +629,7 @@
 <translation id="4277028893293644418">Wachtwoord opnieuw instellen</translation>
 <translation id="4279811152705618813">Je <ph name="DEVICE_TYPE" /> wordt beheerd door <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Deze pas is opgeslagen in je Google-account}other{Deze passen zijn opgeslagen in je Google-account}}</translation>
+<translation id="428847186335018806">Bestanden scannen die je downloadt of uploadt in Chrome.</translation>
 <translation id="42981349822642051">Uitvouwen</translation>
 <translation id="4302965934281694568">Chou3 (envelop)</translation>
 <translation id="4305817255990598646">Overschakelen</translation>
@@ -663,6 +668,7 @@
 <translation id="4506176782989081258">Validatiefout: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Neem contact op met de systeembeheerder</translation>
 <translation id="450710068430902550">Delen met beheerder</translation>
+<translation id="4508814173490746936">Kan Touch ID niet gebruiken</translation>
 <translation id="4510487217173779431">Chou4 (envelop)</translation>
 <translation id="4515275063822566619">Passen en adressen zijn afkomstig uit Chrome en je Google-account (<ph name="ACCOUNT_EMAIL" />). Je kunt ze beheren in <ph name="BEGIN_LINK" />Instellingen<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (envelop)</translation>
@@ -758,6 +764,7 @@
 <translation id="5045550434625856497">Onjuist wachtwoord</translation>
 <translation id="5056549851600133418">Artikelen voor jou</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 in gebruik)}other{(# in gebruik)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Het proxy-adres controleren<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Het servercertificaat is momenteel niet geldig.</translation>
 <translation id="5087580092889165836">Pas toevoegen</translation>
@@ -985,6 +992,7 @@
 <translation id="6302269476990306341">De Google Assistent in Chrome wordt gestopt</translation>
 <translation id="6305205051461490394"><ph name="URL" /> is niet bereikbaar.</translation>
 <translation id="6321917430147971392">Controleer je DNS-instellingen</translation>
+<translation id="6322182122604171028">Kan Windows Hello niet gebruiken</translation>
 <translation id="6328639280570009161">Probeer netwerkvoorspelling uit te schakelen</translation>
 <translation id="6328784461820205019">'Je verbinding is niet privé' of '&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;' of '&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;' of '&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;' of '&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;' of 'SSL certificaatfout'</translation>
 <translation id="6328786501058569169">Deze site is misleidend</translation>
@@ -1008,6 +1016,7 @@
 <translation id="6433490469411711332">Contactgegevens bewerken</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> heeft de verbinding geweigerd.</translation>
 <translation id="6434309073475700221">Annuleren</translation>
+<translation id="6435221585574090192">Gegevens over beveiligingsgebeurtenissen die zijn gemarkeerd door Chrome Enterprise Threat Protection, delen met je beheerder. Dit kunnen pagina-URL's, bestandsnamen, bestandsmetadata, de gebruikersnaam van je apparaat en je Chrome-gebruikersnaam zijn.</translation>
 <translation id="6440503408713884761">Genegeerd</translation>
 <translation id="6446163441502663861">Kahu (envelop)</translation>
 <translation id="6446608382365791566">Meer informatie toevoegen</translation>
@@ -1052,6 +1061,7 @@
 <translation id="6671697161687535275">Formuliersuggestie verwijderen uit Chromium?</translation>
 <translation id="6685834062052613830">Uitloggen en configuratie voltooien</translation>
 <translation id="6689271823431384964">Chrome biedt aan je kaarten in je Google-account op te slaan omdat je bent ingelogd. Je kunt dit wijzigen in de instellingen. De naam van de kaarthouder is afkomstig uit je account.</translation>
+<translation id="6707256370811247129">De content van het cachegeheugen en de bestanden die je downloadt of uploadt in Chrome scannen.</translation>
 <translation id="6710213216561001401">Vorige</translation>
 <translation id="6710594484020273272">&lt;Typ een zoekterm&gt;</translation>
 <translation id="671076103358959139">Inschrijftoken:</translation>
@@ -1070,6 +1080,7 @@
 <translation id="681021252041861472">Verplicht veld</translation>
 <translation id="6810899417690483278">Aanpassings-ID</translation>
 <translation id="6825578344716086703">Je probeert <ph name="DOMAIN" /> te bereiken. De server heeft echter een certificaat geretourneerd dat een zwak ondertekeningsalgoritme (zoals SHA-1) gebruikt. Dit houdt in dat de betrouwbaarheidsverklaring van de server kan zijn vervalst. Het is mogelijk dat de server zelf een imitatie is (wellicht een server die je schade probeert te berokkenen).</translation>
+<translation id="6826370046007623921">Gegevensverlies voorkomen</translation>
 <translation id="6831043979455480757">Vertalen</translation>
 <translation id="6839929833149231406">Gebied</translation>
 <translation id="6852204201400771460">App opnieuw laden?</translation>
@@ -1216,6 +1227,7 @@
 <translation id="7542995811387359312">Het automatisch invullen van creditcardnummers is uitgeschakeld, omdat dit formulier geen beveiligde verbinding gebruikt.</translation>
 <translation id="7548892272833184391">Verbindingsfouten oplossen</translation>
 <translation id="7549584377607005141">Deze webpagina kan alleen correct worden weergegeven op basis van gegevens die je eerder hebt opgegeven. Je kunt deze gegevens opnieuw verzenden, maar hierdoor worden de acties herhaald die eerder op deze pagina zijn uitgevoerd.</translation>
+<translation id="7550637293666041147">De gebruikersnaam van je apparaat en je Chrome-gebruikersnaam</translation>
 <translation id="7552846755917812628">Probeer de volgende tips:</translation>
 <translation id="7554791636758816595">Nieuw tabblad</translation>
 <translation id="7564049878696755256">Je kunt de toegang tot je account van <ph name="ORG_NAME" /> kwijtraken of slachtoffer worden van identiteitsdiefstal. Chrome raadt je aan je wachtwoord nu te wijzigen.</translation>
@@ -1230,6 +1242,7 @@
 <translation id="7610193165460212391">Waarde <ph name="VALUE" /> is buiten bereik.</translation>
 <translation id="7613889955535752492">Vervaldatum: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Je hebt al gegevens die zijn gecodeerd met een andere versie van het wachtwoord voor je Google-account. Geef dit wachtwoord hieronder op.</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">Prestatiegegevens en crashrapporten</translation>
 <translation id="7637571805876720304">Creditcard verwijderen uit Chromium?</translation>
 <translation id="7638605456503525968">Seriële poorten</translation>
@@ -1340,6 +1353,7 @@
 <translation id="8211406090763984747">Verbinding is beveiligd</translation>
 <translation id="8218327578424803826">Toegewezen locatie:</translation>
 <translation id="8220146938470311105">C7/C6 (envelop)</translation>
+<translation id="8220639454292072926">Bedrijfsrapportage</translation>
 <translation id="8225771182978767009">De persoon die deze computer heeft geconfigureerd, heeft deze site geblokkeerd.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Pagina openen op een nieuw incognitotabblad</translation>
@@ -1422,6 +1436,7 @@
 <translation id="8740359287975076522">Het &lt;abbr id="dnsDefinition"&gt;DNS-adres&lt;/abbr&gt; van <ph name="HOST_NAME" /> kan niet worden gevonden. Er wordt een diagnose van het probleem uitgevoerd.</translation>
 <translation id="874846938927089722">Geaccepteerde creditcards en prepaidkaarten</translation>
 <translation id="874918643257405732">Bladwijzer toevoegen voor dit tabblad</translation>
+<translation id="8751426954251315517">Probeer het de volgende keer opnieuw</translation>
 <translation id="8759274551635299824">Deze pas is verlopen</translation>
 <translation id="8761567432415473239">Google Safe Browsing heeft onlangs <ph name="BEGIN_LINK" />schadelijke programma's gevonden<ph name="END_LINK" /> op <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB-apparaat</translation>
@@ -1486,6 +1501,7 @@
 <translation id="9080712759204168376">Besteloverzicht</translation>
 <translation id="9089260154716455634">Beleid buiten gebruikstijd:</translation>
 <translation id="9095388113577226029">Meer talen...</translation>
+<translation id="9098981495403789647">Je beheerder heeft Chrome Enterprise Threat Protection ingeschakeld in je browser. Chrome Enterprise Threat Protection heeft toegang tot sommige van je gegevens.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> gebruikt gewoonlijk versleuteling om je gegevens te beschermen. Toen Chromium deze keer probeerde verbinding te maken met <ph name="SITE" />, retourneerde de website ongewone en onjuiste inloggegevens. Dit gebeurt wanneer een aanvaller probeert zich als <ph name="SITE" /> voor te doen of wanneer een wifi-inlogscherm de verbinding heeft verbroken. Je gegevens zijn nog steeds beveiligd omdat Chromium de verbinding heeft beëindigd voordat er gegevens konden worden uitgewisseld.</translation>
 <translation id="9106062320799175032">Factuuradres toevoegen</translation>
 <translation id="9114524666733003316">Creditcard bevestigen...</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 2e6ddd7..e1bcc29 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">Prøv å kontakte systemadministratoren.</translation>
 <translation id="1740951997222943430">Angi en gyldig utløpsmåned</translation>
 <translation id="1743520634839655729">For å betale raskere neste gang, lagre kortet og faktureringsadressen i Google-kontoen din og på denne enheten.</translation>
+<translation id="1743570585616704562">Ikke gjenkjent</translation>
 <translation id="1745880797583122200">Nettleseren din administreres</translation>
 <translation id="17513872634828108">Åpne faner</translation>
 <translation id="1753706481035618306">Sidenummer</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index e94323adf..9b4c8422 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">„Oprogramowanie na Twoim komputerze uniemożliwia Chrome bezpieczne połączenie się z internetem” (tylko na komputerach z systemem Windows)</translation>
 <translation id="1294154142200295408">Odmiany w wierszu poleceń</translation>
 <translation id="129553762522093515">Ostatnio zamknięte</translation>
+<translation id="1298536327547837046">Skanowanie w poszukiwaniu złośliwego oprogramowania</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Usuń pliki cookie<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funkcje wycofane</translation>
 <translation id="1320233736580025032">Prc1 (koperta)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Skontaktuj się z administratorem systemu.</translation>
 <translation id="1740951997222943430">Wpisz miesiąc w prawidłowym formacie</translation>
 <translation id="1743520634839655729">Aby następnym razem zapłacić szybciej, zapisz kartę oraz imię, nazwisko i adres rozliczeniowy na swoim koncie Google i na tym urządzeniu.</translation>
+<translation id="1743570585616704562">Nie rozpoznano</translation>
 <translation id="1745880797583122200">Twoja przeglądarka jest zarządzana</translation>
 <translation id="17513872634828108">Otwarte karty</translation>
 <translation id="1753706481035618306">Numer strony</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Anuluj płatność</translation>
 <translation id="3207960819495026254">Dodano do zakładek</translation>
 <translation id="3209034400446768650">Strona może powodować naliczanie opłat</translation>
+<translation id="3215092763954878852">Nie udało się użyć WebAuthn</translation>
 <translation id="3225919329040284222">Serwer przedstawił certyfikat, który nie pasuje do zaprogramowanych oczekiwań. Oczekiwania mają chronić Cię w określonych witrynach o wysokim poziomie zabezpieczeń.</translation>
 <translation id="3226128629678568754">Naciśnij przycisk ponownego załadowania, by przesłać dane wymagane do wczytania strony.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Brak}=1{Z 1 witryny }few{Z # witryn }many{Z # witryn }other{Z # witryny }}</translation>
 <translation id="397105322502079400">Obliczanie...</translation>
 <translation id="3973234410852337861">Strona <ph name="HOST_NAME" /> jest zablokowana</translation>
+<translation id="3981540111851280311">Domena <ph name="ENROLLMENT_DOMAIN" /> włączyła w Twojej przeglądarce usługę ochrony Chrome Enterprise. Ma ona dostęp do niektórych Twoich danych.</translation>
 <translation id="3987940399970879459">Mniej niż 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 strona w pobliżu}few{# strony w pobliżu}many{# stron w pobliżu}other{# strony w pobliżu}}</translation>
 <translation id="4030383055268325496">&amp;Cofnij dodanie</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">Resetuj hasło</translation>
 <translation id="4279811152705618813">Twoim urządzeniem (<ph name="DEVICE_TYPE" />) zarządza domena <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ta karta została zapisana na Twoim koncie Google}few{Te karty zostały zapisane na Twoim koncie Google}many{Te karty zostały zapisane na Twoim koncie Google}other{Te karty zostały zapisane na Twoim koncie Google}}</translation>
+<translation id="428847186335018806">Skanuj pliki pobrane z Chrome i przesłane do Chrome.</translation>
 <translation id="42981349822642051">Rozwiń</translation>
 <translation id="4302965934281694568">Chou3 (koperta)</translation>
 <translation id="4305817255990598646">Przełącz</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">Błąd sprawdzania poprawności: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Skontaktuj się z administratorem systemu</translation>
 <translation id="450710068430902550">Udostępnianie administratorowi</translation>
+<translation id="4508814173490746936">Nie udało się użyć Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (koperta)</translation>
 <translation id="4515275063822566619">Karty i adresy pochodzą z Chrome i Twojego konta Google (<ph name="ACCOUNT_EMAIL" />). Możesz nimi zarządzać w <ph name="BEGIN_LINK" />Ustawieniach<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (koperta)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">Nieprawidłowe hasło</translation>
 <translation id="5056549851600133418">Artykuły dla Ciebie</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(w użyciu: 1)}few{(w użyciu: #)}many{(w użyciu: #)}other{(w użyciu: #)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Sprawdź adres serwera proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Certyfikat serwera nie jest obecnie ważny.</translation>
 <translation id="5087580092889165836">Dodaj kartę</translation>
@@ -994,6 +1001,7 @@
 <translation id="6302269476990306341">Wyłączam Asystenta Google w Chrome</translation>
 <translation id="6305205051461490394">Strona <ph name="URL" /> jest nieosiągalna.</translation>
 <translation id="6321917430147971392">Sprawdź ustawienia DNS</translation>
+<translation id="6322182122604171028">Nie udało się użyć Windows Hello</translation>
 <translation id="6328639280570009161">Wyłącz przewidywanie działań sieciowych</translation>
 <translation id="6328784461820205019">„Połączenie nie jest prywatne” lub „&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;” lub „&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;” lub „&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;” lub „&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;” lub „Błąd certyfikatu SSL”</translation>
 <translation id="6328786501058569169">Ta strona wprowadza w błąd</translation>
@@ -1017,6 +1025,7 @@
 <translation id="6433490469411711332">Edytuj dane kontaktowe</translation>
 <translation id="6433595998831338502">Serwer <ph name="HOST_NAME" /> odrzucił połączenie.</translation>
 <translation id="6434309073475700221">Przerwij</translation>
+<translation id="6435221585574090192">Udostępniaj administratorowi dane na temat zdarzeń związanych z bezpieczeństwem zgłoszonych przez usługę ochrony Chrome Enterprise. Dane te mogą obejmować adresy URL stron, nazwę i metadane pliku oraz nazwę użytkownika urządzenia i Chrome.</translation>
 <translation id="6440503408713884761">Ignorowany</translation>
 <translation id="6446163441502663861">Kahu (koperta)</translation>
 <translation id="6446608382365791566">Dodaj więcej informacji</translation>
@@ -1061,6 +1070,7 @@
 <translation id="6671697161687535275">Usunąć tę podpowiedź do formularza z Chromium?</translation>
 <translation id="6685834062052613830">Wyloguj się i dokończ konfigurację</translation>
 <translation id="6689271823431384964">Chrome proponuje zalogowanym użytkownikom zapisywanie kart na koncie Google. Możesz to zmienić w ustawieniach. Imię i nazwisko posiadacza karty pochodzi z Twojego konta.</translation>
+<translation id="6707256370811247129">Skanowanie zawartości pamięci podręcznej oraz plików pobranych z Chrome i przesłanych do Chrome.</translation>
 <translation id="6710213216561001401">Wstecz</translation>
 <translation id="6710594484020273272">&lt;Wpisz wyszukiwane słowa&gt;</translation>
 <translation id="671076103358959139">Token rejestracji:</translation>
@@ -1079,6 +1089,7 @@
 <translation id="681021252041861472">Pole wymagane</translation>
 <translation id="6810899417690483278">Identyfikator dostosowania</translation>
 <translation id="6825578344716086703">Próbujesz wejść na <ph name="DOMAIN" />, ale serwer przedstawił certyfikat podpisany słabym algorytmem (takim jak SHA-1). Oznacza to, że dane uwierzytelniające podane przez serwer mogły zostać sfałszowane, a serwer może nie być tym, którego oczekujesz (możliwe, że komunikujesz się z intruzem).</translation>
+<translation id="6826370046007623921">Zapobieganie utracie danych</translation>
 <translation id="6831043979455480757">Tłumacz</translation>
 <translation id="6839929833149231406">Obszar</translation>
 <translation id="6852204201400771460">Załadować ponownie aplikację?</translation>
@@ -1225,6 +1236,7 @@
 <translation id="7542995811387359312">Automatyczne wypełnianie danych karty kredytowej jest wyłączone, ponieważ ten formularz nie korzysta z bezpiecznego połączenia.</translation>
 <translation id="7548892272833184391">Naprawianie błędów połączenia</translation>
 <translation id="7549584377607005141">Do poprawnego wyświetlenia tej strony internetowej wymagane są dane wpisane przez Ciebie wcześniej. Możesz wysłać je ponownie, ale spowoduje to powtórzenie wszystkich działań wykonanych poprzednio przez stronę.</translation>
+<translation id="7550637293666041147">Twoja nazwa użytkownika na urządzeniu i w Chrome</translation>
 <translation id="7552846755917812628">Skorzystaj z tych wskazówek:</translation>
 <translation id="7554791636758816595">Nowa karta</translation>
 <translation id="7564049878696755256">Możesz stracić dostęp do swojego konta <ph name="ORG_NAME" /> lub paść ofiarą kradzieży tożsamości. Chrome zaleca natychmiastową zmianę hasła.</translation>
@@ -1239,6 +1251,7 @@
 <translation id="7610193165460212391">Wartość spoza zakresu (<ph name="VALUE" />)</translation>
 <translation id="7613889955535752492">Wygasa: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Masz już dane zaszyfrowane przy użyciu innej wersji hasła konta Google. Wpisz je poniżej.</translation>
+<translation id="7625784245512586808">Usługa ochrony Chrome Enterprise</translation>
 <translation id="7633909222644580952">Dane o wydajności i raporty o awariach</translation>
 <translation id="7637571805876720304">Usunąć tę kartę kredytową z Chromium?</translation>
 <translation id="7638605456503525968">Porty szeregowe</translation>
@@ -1349,6 +1362,7 @@
 <translation id="8211406090763984747">Połączenie jest bezpieczne</translation>
 <translation id="8218327578424803826">Przypisana lokalizacja:</translation>
 <translation id="8220146938470311105">C7/C6 (koperta)</translation>
+<translation id="8220639454292072926">Raportowanie w firmie</translation>
 <translation id="8225771182978767009">Administrator tego komputera zablokował tę witrynę.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Otwórz stronę w nowej karcie incognito</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">Nie znaleziono &lt;abbr id="dnsDefinition"&gt;adresu DNS&lt;/abbr&gt; serwera <ph name="HOST_NAME" />. Diagnozujemy problem.</translation>
 <translation id="874846938927089722">Akceptowane karty kredytowe i przedpłacone</translation>
 <translation id="874918643257405732">Dodaj tę kartę do zakładek</translation>
+<translation id="8751426954251315517">Spróbuj ponownie później</translation>
 <translation id="8759274551635299824">Ta karta straciła ważność</translation>
 <translation id="8761567432415473239">Funkcja Bezpieczne przeglądanie Google ostatnio <ph name="BEGIN_LINK" />znalazła szkodliwe<ph name="END_LINK" /> programy na <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Urządzenie USB</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">Podsumowanie zamówienia</translation>
 <translation id="9089260154716455634">Zasada „po godzinach”:</translation>
 <translation id="9095388113577226029">Więcej języków…</translation>
+<translation id="9098981495403789647">Twój administrator włączył w przeglądarce usługę ochrony Chrome Enterprise. Ma ona dostęp do niektórych Twoich danych.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> zazwyczaj używa szyfrowania do ochrony Twoich informacji. Gdy tym razem przeglądarka Chromium próbowała połączyć się ze stroną <ph name="SITE" />, odesłała ona nietypowe i nieprawidłowe dane logowania. Może się tak zdarzyć, gdy pod stronę <ph name="SITE" /> podszywa się osoba atakująca albo gdy ekran logowania do sieci Wi-Fi przerwie połączenie. Twoje informacje są nadal bezpieczne, bo połączenie w Chromium zakończyło się przed wymianą jakichkolwiek danych.</translation>
 <translation id="9106062320799175032">Dodaj adres rozliczeniowy</translation>
 <translation id="9114524666733003316">Sprawdzam kartę…</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 7008e42..85d74105 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Algum software no seu computador está impedindo o Google Chrome de se conectar com segurança à Web" (somente computadores Windows)</translation>
 <translation id="1294154142200295408">Variações de linha de comando</translation>
 <translation id="129553762522093515">Recentemente fechadas</translation>
+<translation id="1298536327547837046">Verificação de malware</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Tente limpar os cookies<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Recursos obsoletos</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Tente entrar em contato com o administrador do sistema.</translation>
 <translation id="1740951997222943430">Informe um mês de validade válido</translation>
 <translation id="1743520634839655729">Para agilizar o pagamento na próxima vez, salve o cartão, seu nome e o endereço de faturamento na sua Conta do Google e neste dispositivo.</translation>
+<translation id="1743570585616704562">Não reconhecida</translation>
 <translation id="1745880797583122200">Seu navegador é gerenciado</translation>
 <translation id="17513872634828108">Guias abertas</translation>
 <translation id="1753706481035618306">Numero da página</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Cancelar pagamento</translation>
 <translation id="3207960819495026254">Adicionado aos favoritos</translation>
 <translation id="3209034400446768650">Esta página pode emitir cobranças em dinheiro</translation>
+<translation id="3215092763954878852">Não foi possível usar WebAuthn</translation>
 <translation id="3225919329040284222">O servidor apresentou um certificado que não coincide com as expectativas incorporadas. Estas expectativas são incluídas para determinados websites de alta segurança com a finalidade de oferecer proteção a você.</translation>
 <translation id="3226128629678568754">Pressione o botão "Atualizar" para reenviar os dados necessários para carregar a página.</translation>
 <translation id="3227137524299004712">Microfone</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Nenhum}=1{1 site }one{# site }other{# sites }}</translation>
 <translation id="397105322502079400">Calculando...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> está bloqueado</translation>
+<translation id="3981540111851280311">O domínio <ph name="ENROLLMENT_DOMAIN" /> ativou o serviço de proteção contra ameaças do Chrome Enterprise no seu navegador. Esse serviço tem acesso a parte dos seus dados.</translation>
 <translation id="3987940399970879459">Menos de 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 página da Web por perto}one{# página da Web por perto}other{# páginas da Web por perto}}</translation>
 <translation id="4030383055268325496">&amp;Desfazer adicionar</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">Redefinir senha</translation>
 <translation id="4279811152705618813">Seu <ph name="DEVICE_TYPE" /> é gerenciado por <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Esse cartão foi adicionado à sua Conta do Google}one{Esse cartão foi adicionado à sua Conta do Google}other{Esses cartões foram adicionados à sua Conta do Google}}</translation>
+<translation id="428847186335018806">Verificar os arquivos dos quais você faz o download ou upload no Chrome.</translation>
 <translation id="42981349822642051">Expandir</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">Alternar</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">Erro de validação: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Entrar em contato com o administrador do sistema</translation>
 <translation id="450710068430902550">Compartilhar com o administrador</translation>
+<translation id="4508814173490746936">Não foi possível usar o Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">Os cartões e os endereços vieram do Chrome e da sua Conta do Google (<ph name="ACCOUNT_EMAIL" />). É possível gerenciar essas opções em <ph name="BEGIN_LINK" />Configurações<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm 10 (Envelope)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">Senha incorreta</translation>
 <translation id="5056549851600133418">Artigos para você</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 em uso)}one{(# em uso)}other{(# em uso)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Verificar o endereço do proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">O certificado do servidor não é válido no momento.</translation>
 <translation id="5087580092889165836">Adicionar cartão</translation>
@@ -991,6 +998,7 @@
 <translation id="6302269476990306341">Parando o Google Assistente no Chrome</translation>
 <translation id="6305205051461490394">Não é possível acessar <ph name="URL" />.</translation>
 <translation id="6321917430147971392">Verifique suas configurações do DNS</translation>
+<translation id="6322182122604171028">Não foi possível usar o Windows Hello</translation>
 <translation id="6328639280570009161">Tente desativar a previsão de rede</translation>
 <translation id="6328784461820205019">"Sua conexão não é particular" ou "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" ou "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" ou "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" ou "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" ou "Erro de certificado SSL"</translation>
 <translation id="6328786501058569169">Este site é enganoso</translation>
@@ -1014,6 +1022,7 @@
 <translation id="6433490469411711332">Editar informações de contato</translation>
 <translation id="6433595998831338502">A conexão com <ph name="HOST_NAME" /> foi recusada.</translation>
 <translation id="6434309073475700221">Descartar</translation>
+<translation id="6435221585574090192">Compartilhe os dados sobre ocorrências de segurança que foram marcadas pelo serviço de proteção contra ameaças do Chrome Enterprise com seu administrador. Isso pode incluir URLs de páginas, nomes e metadados de arquivos, o nome de usuário do dispositivo e seu nome de usuário do Chrome.</translation>
 <translation id="6440503408713884761">Ignorada</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">Adicionar mais informações</translation>
@@ -1058,6 +1067,7 @@
 <translation id="6671697161687535275">Remover sugestão de formulário do Chromium?</translation>
 <translation id="6685834062052613830">Saia e conclua a configuração</translation>
 <translation id="6689271823431384964">A opção de salvar seus cartões na Conta do Google está disponível no Chrome porque você fez login. É possível alterar esse comportamento nas configurações. O nome do titular do cartão vem da sua conta.</translation>
+<translation id="6707256370811247129">Verifique o conteúdo de cache e arquivos dos quais você faz o download ou upload no Chrome.</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Digitar termo de pesquisa&gt;</translation>
 <translation id="671076103358959139">Token de inscrição:</translation>
@@ -1076,6 +1086,7 @@
 <translation id="681021252041861472">Campo obrigatório</translation>
 <translation id="6810899417690483278">Código de personalização</translation>
 <translation id="6825578344716086703">Você tentou acessar <ph name="DOMAIN" />, mas o servidor apresentou um certificado assinado com um algoritmo de assinatura fraco (como SHA-1). Isso significa que as credenciais de segurança apresentadas pelo servidor podem ter sido forjadas, e talvez o servidor não seja o esperado (talvez você esteja se comunicando com um invasor).</translation>
+<translation id="6826370046007623921">Prevenção contra perda de dados</translation>
 <translation id="6831043979455480757">Traduzir</translation>
 <translation id="6839929833149231406">Área</translation>
 <translation id="6852204201400771460">Recarregar app?</translation>
@@ -1222,6 +1233,7 @@
 <translation id="7542995811387359312">O preenchimento automático do cartão de crédito está desativado porque este formulário não usa uma conexão segura.</translation>
 <translation id="7548892272833184391">Corrigir erros de conexão</translation>
 <translation id="7549584377607005141">Esta página da Web requer os dados inseridos anteriormente para ser exibida de modo correto. É possível enviá-los novamente mas, ao fazer isso, você repete qualquer ação realizada anteriormente na página.</translation>
+<translation id="7550637293666041147">O nome de usuário no dispositivo e seu nome de usuário do Chrome</translation>
 <translation id="7552846755917812628">Tente seguir estas dicas:</translation>
 <translation id="7554791636758816595">Nova guia</translation>
 <translation id="7564049878696755256">Você pode perder o acesso à sua conta de <ph name="ORG_NAME" /> ou ter sua identidade roubada. O Chrome recomenda que sua senha seja alterada agora.</translation>
@@ -1236,6 +1248,7 @@
 <translation id="7610193165460212391">O valor não corresponde ao período <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Data de expiração: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Você já possui dados criptografados utilizando uma versão diferente de sua senha para a Conta do Google. Digite-a abaixo.</translation>
+<translation id="7625784245512586808">Serviço de proteção contra ameaças do Chrome Enterprise</translation>
 <translation id="7633909222644580952">Dados de desempenho e relatórios de erros</translation>
 <translation id="7637571805876720304">Remover cartão de crédito do Chromium?</translation>
 <translation id="7638605456503525968">Portas seriais</translation>
@@ -1346,6 +1359,7 @@
 <translation id="8211406090763984747">A conexão é segura</translation>
 <translation id="8218327578424803826">Local designado:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)</translation>
+<translation id="8220639454292072926">Relatório para empresas</translation>
 <translation id="8225771182978767009">A pessoa que configurou este computador optou por bloquear esse site.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Abrir página em uma nova guia anônima</translation>
@@ -1429,6 +1443,7 @@
 <translation id="8740359287975076522">Não foi possível encontrar o &lt;abbr id="dnsDefinition"&gt;endereço DNS&lt;/abbr&gt; de <ph name="HOST_NAME" />. Diagnosticando o problema.</translation>
 <translation id="874846938927089722">Cartões de crédito e pré-pagos aceitos</translation>
 <translation id="874918643257405732">Adicionar esta guia aos favoritos</translation>
+<translation id="8751426954251315517">Tente novamente mais tarde</translation>
 <translation id="8759274551635299824">Este cartão expirou</translation>
 <translation id="8761567432415473239">Recentemente, a Navegação Segura do Google <ph name="BEGIN_LINK" />encontrou programas nocivos<ph name="END_LINK" /> no site <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Dispositivo USB</translation>
@@ -1493,6 +1508,7 @@
 <translation id="9080712759204168376">Resumo do pedido</translation>
 <translation id="9089260154716455634">Política de horas de inatividade:</translation>
 <translation id="9095388113577226029">Mais idiomas…</translation>
+<translation id="9098981495403789647">Seu administrador ativou o serviço de proteção contra ameaças do Chrome Enterprise no seu navegador. Esse serviço tem acesso a parte dos seus dados.</translation>
 <translation id="9103872766612412690">O site <ph name="SITE" /> geralmente usa criptografia para proteger suas informações. Quando o Chromium tentou se conectar a <ph name="SITE" /> dessa vez, o website retornou credenciais
 incomuns e incorretas. Isso pode acontecer quando um invasor está fingindo ser <ph name="SITE" /> ou quando uma tela de login por Wi-Fi interrompeu a conexão. Suas informações ainda estão protegidas, porque o Chromium interrompeu a conexão antes que os dados fossem trocados.</translation>
 <translation id="9106062320799175032">Adicione um Endereço de Faturamento</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 93a7cc34..8cd26da7 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Existe software no computador que está a impedir que o Chrome se ligue à Web em segurança" (apenas para computadores com Windows)</translation>
 <translation id="1294154142200295408">Variações da linha de comandos</translation>
 <translation id="129553762522093515">Fechados recentemente</translation>
+<translation id="1298536327547837046">Análise de software malicioso</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Experimente limpar os cookies<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funcionalidades descontinuadas</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Experimente contactar o gestor do sistema.</translation>
 <translation id="1740951997222943430">Introduza um mês de expiração válido</translation>
 <translation id="1743520634839655729">Para pagar mais rapidamente da próxima vez, guarde o cartão, o nome e o endereço de faturação na sua Conta Google e neste dispositivo.</translation>
+<translation id="1743570585616704562">Não reconhecida</translation>
 <translation id="1745880797583122200">O seu navegador é gerido</translation>
 <translation id="17513872634828108">Separadores abertos</translation>
 <translation id="1753706481035618306">Número de página</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Cancelar pagamento</translation>
 <translation id="3207960819495026254">Adicionado aos marcadores</translation>
 <translation id="3209034400446768650">A página pode efetuar cobranças</translation>
+<translation id="3215092763954878852">Não foi possível utilizar o WebAuthn</translation>
 <translation id="3225919329040284222">O servidor apresentou um certificado que não corresponde às expectativas existentes. Estas expectativas são incluídas para determinados Web sites de alta segurança para sua proteção.</translation>
 <translation id="3226128629678568754">Prima o botão de atualização para enviar novamente os dados necessários para carregar a página.</translation>
 <translation id="3227137524299004712">Microfone</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Nenhum}=1{De 1 site }other{De # sites }}</translation>
 <translation id="397105322502079400">A calcular...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> está bloqueado</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ativou o Chrome Enterprise Threat Protection no seu navegador. O Chrome Enterprise Threat Protection tem acesso a alguns dos seus dados.</translation>
 <translation id="3987940399970879459">Menos de 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 página Web próxima}other{# páginas Web próximas}}</translation>
 <translation id="4030383055268325496">&amp;Anular adição</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">Repor palavra-passe</translation>
 <translation id="4279811152705618813">O seu <ph name="DEVICE_TYPE" /> é gerido por <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Este cartão foi guardado na sua Conta Google.}other{Estes cartões foram guardados na sua Conta Google.}}</translation>
+<translation id="428847186335018806">Analisar os ficheiros que transfere ou carrega no Chrome.</translation>
 <translation id="42981349822642051">Expandir</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">Mudar</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">Erro de validação: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Contactar o gestor do sistema</translation>
 <translation id="450710068430902550">Partilha com o gestor</translation>
+<translation id="4508814173490746936">Não foi possível utilizar o Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">Os cartões e os endereços são provenientes do Chrome e da sua Conta Google (<ph name="ACCOUNT_EMAIL" />). Pode geri-los nas <ph name="BEGIN_LINK" />Definições<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">Palavra-passe incorrecta</translation>
 <translation id="5056549851600133418">Artigos para si</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 em utilização)}other{(# em utilização)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Verificar o endereço proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">De momento, o certificado do servidor não é válido.</translation>
 <translation id="5087580092889165836">Adicionar cartão</translation>
@@ -994,6 +1001,7 @@
 <translation id="6302269476990306341">Paragem do Assistente Google no Chrome</translation>
 <translation id="6305205051461490394"><ph name="URL" /> está inacessível.</translation>
 <translation id="6321917430147971392">Verificar as definições do DNS</translation>
+<translation id="6322182122604171028">Não foi possível utilizar o Windows Hello</translation>
 <translation id="6328639280570009161">Tente desativar a previsão de rede</translation>
 <translation id="6328784461820205019">"A sua ligação não é privada", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" ou "Erro de certificado SSL"</translation>
 <translation id="6328786501058569169">Este site é fraudulento</translation>
@@ -1017,6 +1025,7 @@
 <translation id="6433490469411711332">Editar informações de contacto</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> recusou estabelecer ligação.</translation>
 <translation id="6434309073475700221">Rejeitar</translation>
+<translation id="6435221585574090192">Partilhe dados sobre eventos de segurança sinalizados pelo Chrome Enterprise Threat Protection com o seu administrador. Estes podem incluir URLs de páginas, nomes e metadados de ficheiros, o nome de utilizador do dispositivo e o nome de utilizador do Chrome.</translation>
 <translation id="6440503408713884761">Ignorado</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">Adicionar mais informações</translation>
@@ -1061,6 +1070,7 @@
 <translation id="6671697161687535275">Pretende remover a sugestão do formulário do Chromium?</translation>
 <translation id="6685834062052613830">Termine sessão e conclua a configuração</translation>
 <translation id="6689271823431384964">O Chrome está a disponibilizar a opção de guardar os seus cartões na sua Conta Google porque tem sessão iniciada. Pode alterar este comportamento nas definições. O nome do titular do cartão vem da sua conta.</translation>
+<translation id="6707256370811247129">Analisar os conteúdos da cache e os ficheiros que transfere ou carrega no Chrome.</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Introduzir termo de pesquisa&gt;</translation>
 <translation id="671076103358959139">Símbolo de inscrição:</translation>
@@ -1079,6 +1089,7 @@
 <translation id="681021252041861472">Campo obrigatório</translation>
 <translation id="6810899417690483278">ID de personalização</translation>
 <translation id="6825578344716086703">Tentou aceder a <ph name="DOMAIN" />, mas o servidor apresentou um certificado assinado utilizando um algoritmo de assinatura fraco (como SHA-1). Isto significa que as credenciais de segurança apresentadas pelo servidor podem ter sido falsificadas e que o servidor pode não ser aquele que pretende (pode estar a comunicar com um utilizador mal intencionado).</translation>
+<translation id="6826370046007623921">Prevenção contra a perda de dados</translation>
 <translation id="6831043979455480757">Traduzir</translation>
 <translation id="6839929833149231406">Área</translation>
 <translation id="6852204201400771460">Pretende atualizar a aplicação?</translation>
@@ -1224,6 +1235,7 @@
 <translation id="7542995811387359312">O preenchimento automático de cartões de crédito está desativado, porque este formulário não utiliza uma ligação segura.</translation>
 <translation id="7548892272833184391">Corrigir erros de ligação</translation>
 <translation id="7549584377607005141">Esta página Web requer os dados introduzidos anteriormente para ser corretamente apresentada. Pode enviar novamente esses dados, mas ao fazê-lo, irá repetir as ações que esta página executou anteriormente.</translation>
+<translation id="7550637293666041147">O nome de utilizador do dispositivo e o nome de utilizador do Chrome</translation>
 <translation id="7552846755917812628">Experimente as sugestões seguintes:</translation>
 <translation id="7554791636758816595">Novo separador</translation>
 <translation id="7564049878696755256">Pode perder o acesso à sua conta do serviço <ph name="ORG_NAME" /> ou ser vítima de roubo de identidade. O Chrome recomenda a alteração da palavra-passe agora.</translation>
@@ -1238,6 +1250,7 @@
 <translation id="7610193165460212391">O valor está fora do intervalo <ph name="VALUE" /> .</translation>
 <translation id="7613889955535752492">Exp.: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Já tem dados encriptados usando uma versão diferente da palavra-passe da sua Conta Google. Introduza-a abaixo.</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">Dados de desempenho e relatórios de falhas</translation>
 <translation id="7637571805876720304">Pretende remover o cartão de crédito do Chromium?</translation>
 <translation id="7638605456503525968">Portas de série</translation>
@@ -1348,6 +1361,7 @@
 <translation id="8211406090763984747">A ligação é segura</translation>
 <translation id="8218327578424803826">Localização atribuída:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)</translation>
+<translation id="8220639454292072926">Relatórios empresariais</translation>
 <translation id="8225771182978767009">A pessoa que configurou este computador optou por bloquear este site.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Abrir página num novo separador anónimo</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">Não foi possível encontrar o &lt;abbr id="dnsDefinition"&gt;endereço DNS&lt;/abbr&gt; de <ph name="HOST_NAME" />. Estamos a diagnosticar o problema.</translation>
 <translation id="874846938927089722">Cartões de crédito e pré-pagos aceites</translation>
 <translation id="874918643257405732">Adicione este separador aos marcadores</translation>
+<translation id="8751426954251315517">Tente novamente na próxima oportunidade.</translation>
 <translation id="8759274551635299824">Este cartão expirou</translation>
 <translation id="8761567432415473239">A Navegação Segura do Google <ph name="BEGIN_LINK" />encontrou programas prejudiciais<ph name="END_LINK" /> recentemente em <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Dispositivo USB</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">Resumo da encomenda</translation>
 <translation id="9089260154716455634">Política para fora do horário de funcionamento:</translation>
 <translation id="9095388113577226029">Mais idiomas…</translation>
+<translation id="9098981495403789647">O seu administrador ativou o Chrome Enterprise Threat Protection no navegador. O Chrome Enterprise Threat Protection tem acesso a alguns dos seus dados.</translation>
 <translation id="9103872766612412690">Normalmente, o site <ph name="SITE" /> utiliza a encriptação para proteger as suas informações. Quando o Chromium tentou estabelecer ligação a <ph name="SITE" /> desta vez, o Website devolveu credenciais invulgares e incorretas. Isto pode acontecer quando um utilizador mal intencionado tenta simular ser <ph name="SITE" /> ou quando um ecrã de início de sessão Wi-Fi interrompe a ligação. As suas informações continuam seguras porque o Chromium interrompeu a ligação antes de qualquer troca de dados.</translation>
 <translation id="9106062320799175032">Adicionar endereço de faturação</translation>
 <translation id="9114524666733003316">A confirmar o cartão…</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 2fea2a04..3dff7fb 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">„Pe computer există software care împiedică browserul Chrome să se conecteze în siguranță la internet” (doar pentru computerele Windows)</translation>
 <translation id="1294154142200295408">Variații ale liniilor de comandă</translation>
 <translation id="129553762522093515">Închise recent</translation>
+<translation id="1298536327547837046">Scanarea pentru programe malware</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Șterge cookie-urile<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funcții învechite</translation>
 <translation id="1320233736580025032">Prc1 (Plic)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Încearcă să contactezi administratorul sistemului.</translation>
 <translation id="1740951997222943430">Introdu o lună de expirare validă</translation>
 <translation id="1743520634839655729">Pentru a plăti mai rapid data viitoare, salvează cardul, numele și adresa de facturare în Contul Google și pe acest dispozitiv.</translation>
+<translation id="1743570585616704562">Nu este recunoscută</translation>
 <translation id="1745880797583122200">Browserul tău este gestionat</translation>
 <translation id="17513872634828108">File deschise</translation>
 <translation id="1753706481035618306">Numărul paginii</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Anulează plata</translation>
 <translation id="3207960819495026254">Marcată</translation>
 <translation id="3209034400446768650">Pagina poate percepe o taxă</translation>
+<translation id="3215092763954878852">Nu s-a putut folosi WebAuthn</translation>
 <translation id="3225919329040284222">Serverul a prezentat un certificat care nu se potrivește cu așteptările încorporate. Aceste așteptări sunt incluse pentru anumite site-uri web, cu un grad sporit de securitate, pentru a vă proteja.</translation>
 <translation id="3226128629678568754">Apăsați butonul de reîncărcare pentru a retrimite datele necesare pentru încărcarea paginii.</translation>
 <translation id="3227137524299004712">Microfon</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Niciunul}=1{De la 1 site }few{De la # site-uri }other{De la # de site-uri }}</translation>
 <translation id="397105322502079400">Se calculează...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> este blocat</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> a activat Protecția împotriva amenințărilor Chrome Enterprise în browser. Protecția împotriva amenințărilor Chrome Enterprise are acces la o parte din datele tale.</translation>
 <translation id="3987940399970879459">Mai puțin de 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 pagină web în apropiere}few{# pagini web în apropiere}other{# de pagini web în apropiere}}</translation>
 <translation id="4030383055268325496">&amp;Anulați adăugarea</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">Resetează parola</translation>
 <translation id="4279811152705618813">Dispozitivul <ph name="DEVICE_TYPE" /> este gestionat de <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Acest card a fost salvat în Contul tău Google}few{Aceste carduri au fost salvate în Contul tău Google}other{Aceste carduri au fost salvate în Contul tău Google}}</translation>
+<translation id="428847186335018806">Scanează fișierele pe care le descarci sau le încarci în Chrome.</translation>
 <translation id="42981349822642051">Extinde</translation>
 <translation id="4302965934281694568">Chou3 (Plic)</translation>
 <translation id="4305817255990598646">Comută</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">Eroare de validare: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">să contactezi administratorul sistemului;</translation>
 <translation id="450710068430902550">Permiterea accesului pentru administrator</translation>
+<translation id="4508814173490746936">Nu s-a putut folosi Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Plic)</translation>
 <translation id="4515275063822566619">Cardurile și adresele sunt din Chrome și din Contul Google (<ph name="ACCOUNT_EMAIL" />). Poți să le gestionezi în <ph name="BEGIN_LINK" />Setări<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Plic)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">Parolă incorectă</translation>
 <translation id="5056549851600133418">Articole pentru tine</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(unul în uz)}few{(# în uz)}other{(# în uz)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />să verifici adresa proxy-ului;<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Momentan, certificatul serverului este nevalid.</translation>
 <translation id="5087580092889165836">Adaugă un card</translation>
@@ -991,6 +998,7 @@
 <translation id="6302269476990306341">Asistentul Google în Chrome se oprește</translation>
 <translation id="6305205051461490394">Adresa URL <ph name="URL" /> nu poate fi accesată.</translation>
 <translation id="6321917430147971392">Verificați setările DNS</translation>
+<translation id="6322182122604171028">Nu am putut folosi Windows Hello</translation>
 <translation id="6328639280570009161">Încercați să dezactivați anticiparea rețelei</translation>
 <translation id="6328784461820205019">„Conexiunea nu este privată” sau „&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;” sau „&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;” sau „&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;” sau „&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;” sau „Eroare privind certificatul SSL”</translation>
 <translation id="6328786501058569169">Acest site este înșelător</translation>
@@ -1014,6 +1022,7 @@
 <translation id="6433490469411711332">Editează informațiile de contact</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> a refuzat conexiunea.</translation>
 <translation id="6434309073475700221">Renunță</translation>
+<translation id="6435221585574090192">Permite accesul la datele despre evenimentele de securitate semnalate de Protecția împotriva amenințărilor Chrome Enterprise cu Administratorul. Între acestea se pot număra adresele URL ale paginilor, numele și metadatele fișierelor, numele de utilizator al dispozitivului și numele de utilizator Chrome.</translation>
 <translation id="6440503408713884761">Ignorat</translation>
 <translation id="6446163441502663861">Kahu (Plic)</translation>
 <translation id="6446608382365791566">Adaugă mai multe informații</translation>
@@ -1058,6 +1067,7 @@
 <translation id="6671697161687535275">Elimini sugestia pentru formular din Chromium?</translation>
 <translation id="6685834062052613830">Deconectează-te și finalizează configurarea</translation>
 <translation id="6689271823431384964">Chrome oferă salvarea cardurilor în Contul Google pentru că te-ai conectat. Poți schimba acest comportament în setări. Numele titularului de card vine din contul tău.</translation>
+<translation id="6707256370811247129">Scanează conținutul memoriei cache și fișierele pe care le descarci sau le încarci în Chrome.</translation>
 <translation id="6710213216561001401">Înapoi</translation>
 <translation id="6710594484020273272">&lt;Introdu termenul de căutare&gt;</translation>
 <translation id="671076103358959139">Indicativ de înregistrare:</translation>
@@ -1076,6 +1086,7 @@
 <translation id="681021252041861472">Câmp obligatoriu</translation>
 <translation id="6810899417690483278">ID-ul de personalizare</translation>
 <translation id="6825578344716086703">Ai încercat să accesezi <ph name="DOMAIN" />, dar serverul a prezentat un certificat semnat folosind un algoritm de semnare slab (cum ar fi SHA-1). Acest lucru înseamnă că este posibil ca datele de conectare de securitate prezentate de server să fie falsificate sau ca serverul să nu fie cel așteptat (este posibil să comunici cu un atacator).</translation>
+<translation id="6826370046007623921">Prevenirea pierderii datelor</translation>
 <translation id="6831043979455480757">Tradu</translation>
 <translation id="6839929833149231406">Zonă</translation>
 <translation id="6852204201400771460">Reîncarci aplicația?</translation>
@@ -1222,6 +1233,7 @@
 <translation id="7542995811387359312">Completarea automată a cardului de credit este dezactivată, deoarece acest formular nu utilizează o conexiune sigură.</translation>
 <translation id="7548892272833184391">Remediază erorile de conexiune</translation>
 <translation id="7549584377607005141">Pentru a fi afișată corespunzător, această pagină web necesită date pe care le-ați introdus anterior. Puteți trimite aceste date din nou, dar astfel veți repeta orice acțiuni realizate anterior de această pagină.</translation>
+<translation id="7550637293666041147">Numele de utilizator al dispozitviului și numele de utilizator Chrome</translation>
 <translation id="7552846755917812628">Încearcă următoarele sfaturi:</translation>
 <translation id="7554791636758816595">Filă nouă</translation>
 <translation id="7564049878696755256">Este posibil să pierzi accesul la contul <ph name="ORG_NAME" /> sau să fii victima unui furt de identitate. Chrome îți recomandă să îți schimbi acum parola.</translation>
@@ -1236,6 +1248,7 @@
 <translation id="7610193165460212391">Valoarea este în afara intervalului <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Expiră pe: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Aveți deja date criptate utilizând o versiune diferită a parolei pentru Contul dvs. Google. Introduceți-o mai jos.</translation>
+<translation id="7625784245512586808">Protecția împotriva amenințărilor Chrome Enterprise</translation>
 <translation id="7633909222644580952">Date privind performanța și rapoarte de blocare</translation>
 <translation id="7637571805876720304">Elimini cardul de credit din Chromium?</translation>
 <translation id="7638605456503525968">Porturi seriale</translation>
@@ -1346,6 +1359,7 @@
 <translation id="8211406090763984747">Conexiunea este securizată</translation>
 <translation id="8218327578424803826">Locație atribuită:</translation>
 <translation id="8220146938470311105">C7/C6 (Plic)</translation>
+<translation id="8220639454292072926">Raportare la nivel de întreprindere</translation>
 <translation id="8225771182978767009">Persoana care a configurat computerul a ales să blocheze acest site.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Deschide pagina într-o filă incognito nouă</translation>
@@ -1429,6 +1443,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;Adresa DNS&lt;/abbr&gt; pentru <ph name="HOST_NAME" /> nu a putut fi găsită. Se diagnostichează problema.</translation>
 <translation id="874846938927089722">Carduri de credit și preplătite acceptate</translation>
 <translation id="874918643257405732">Marchează această filă</translation>
+<translation id="8751426954251315517">Încearcă mai târziu</translation>
 <translation id="8759274551635299824">Acest card este expirat</translation>
 <translation id="8761567432415473239">Recent, Navigarea sigură Google a <ph name="BEGIN_LINK" />descoperit programe dăunătoare<ph name="END_LINK" /> pe <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Dispozitiv USB</translation>
@@ -1493,6 +1508,7 @@
 <translation id="9080712759204168376">Rezumatul comenzii</translation>
 <translation id="9089260154716455634">Politica privind intervalele de inactivitate:</translation>
 <translation id="9095388113577226029">Mai multe limbi...</translation>
+<translation id="9098981495403789647">Administratorul a activat Protecția împotriva amenințărilor Chrome Enterprise în browser. Protecția împotriva amenințărilor Chrome Enterprise are acces la o parte din datele tale.</translation>
 <translation id="9103872766612412690">Site-ul <ph name="SITE" /> folosește în mod obișnuit criptarea pentru a-ți proteja informațiile. Când Chromium a încercat să se conecteze la <ph name="SITE" /> de această dată, site-ul a returnat date de conectare neobișnuite și incorecte. Acest lucru s-a întâmplat fie pentru că un atacator încearcă să falsifice site-ul <ph name="SITE" />, fie pentru că un ecran de conectare Wi-Fi a întrerupt conexiunea. Securitatea informațiilor tale nu a fost afectată, deoarece Chromium a oprit conexiunea înainte ca datele să fie transferate.</translation>
 <translation id="9106062320799175032">Adaugă o adresă de facturare</translation>
 <translation id="9114524666733003316">Se confirmă cardul…</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index ba1d736..743c890 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"ПО, установленное на компьютере, не позволяет Chrome безопасно подключиться к Интернету" (только для Windows)</translation>
 <translation id="1294154142200295408">Модификации для командной строки</translation>
 <translation id="129553762522093515">Недавно закрытые</translation>
+<translation id="1298536327547837046">Сканирование на вредоносное ПО</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Удалите файлы cookie<ph name="END_LINK" />.</translation>
 <translation id="1307966114820526988">Устаревшие функции</translation>
 <translation id="1320233736580025032">Prc1 (конверт)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Обратитесь за помощью к системному администратору.</translation>
 <translation id="1740951997222943430">Недопустимый формат месяца.</translation>
 <translation id="1743520634839655729">Чтобы ускорить процесс оплаты в будущем, сохраните карту, свое имя, а также платежный адрес в аккаунте Google и на этом устройстве.</translation>
+<translation id="1743570585616704562">Не распознано</translation>
 <translation id="1745880797583122200">Этот браузер управляется администратором</translation>
 <translation id="17513872634828108">Открытые вкладки</translation>
 <translation id="1753706481035618306">Номер страницы</translation>
@@ -425,6 +427,7 @@
 <translation id="320323717674993345">Отменить оплату</translation>
 <translation id="3207960819495026254">Добавлено в закладки.</translation>
 <translation id="3209034400446768650">На этой странице может взиматься плата</translation>
+<translation id="3215092763954878852">Не удалось использовать WebAuthn</translation>
 <translation id="3225919329040284222">Сертификат не соответствует встроенным параметрам определенных сайтов с высоким уровнем безопасности.</translation>
 <translation id="3226128629678568754">Чтобы повторно ввести данные, необходимые для загрузки страницы, нажмите "Обновить".</translation>
 <translation id="3227137524299004712">Микрофон</translation>
@@ -561,6 +564,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Нет}=1{С 1 сайта }one{С # сайта }few{С # сайтов }many{С # сайтов }other{С # сайта }}</translation>
 <translation id="397105322502079400">Вычисление…</translation>
 <translation id="3973234410852337861">Сайт <ph name="HOST_NAME" /> заблокирован</translation>
+<translation id="3981540111851280311">Администратор домена <ph name="ENROLLMENT_DOMAIN" /> включил в вашем браузере систему защиты Chrome Enterprise, у которой есть доступ к некоторым вашим данным.</translation>
 <translation id="3987940399970879459">Менее 1 МБ</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 веб-страница поблизости}one{# веб-страница поблизости}few{# веб-страницы поблизости}many{# веб-страниц поблизости}other{# веб-страницы поблизости}}</translation>
 <translation id="4030383055268325496">&amp;Отменить добавление</translation>
@@ -629,6 +633,7 @@
 <translation id="4277028893293644418">Сбросить пароль</translation>
 <translation id="4279811152705618813">Ваше устройство <ph name="DEVICE_TYPE" /> находится под управлением домена <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Карта сохранена в аккаунте Google.}one{Карты сохранены в аккаунте Google.}few{Карты сохранены в аккаунте Google.}many{Карты сохранены в аккаунте Google.}other{Карты сохранены в аккаунте Google.}}</translation>
+<translation id="428847186335018806">Сканировать файлы, которые вы скачиваете и загружаете через браузер Chrome.</translation>
 <translation id="42981349822642051">Развернуть</translation>
 <translation id="4302965934281694568">Chou3 (конверт)</translation>
 <translation id="4305817255990598646">Переключиться</translation>
@@ -667,6 +672,7 @@
 <translation id="4506176782989081258">Ошибка проверки: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Обратитесь за помощью к системному администратору.</translation>
 <translation id="450710068430902550">Доступ администратора</translation>
+<translation id="4508814173490746936">Не удалось использовать Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (конверт)</translation>
 <translation id="4515275063822566619">Это карты и адреса, указанные в Chrome и вашем аккаунте Google (<ph name="ACCOUNT_EMAIL" />). Вы можете изменить их на странице <ph name="BEGIN_LINK" />Настройки<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (конверт)</translation>
@@ -762,6 +768,7 @@
 <translation id="5045550434625856497">Неправильный пароль</translation>
 <translation id="5056549851600133418">Статьи для вас</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(используется 1 файл cookie)}one{(используется # файл cookie)}few{(используется # файла cookie)}many{(используется # файлов cookie)}other{(используется # файла cookie)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Проверьте адрес прокси-сервера<ph name="END_LINK" />.</translation>
 <translation id="5087286274860437796">Сертификат сервера не действителен в настоящее время.</translation>
 <translation id="5087580092889165836">Добавить карту</translation>
@@ -990,6 +997,7 @@
 <translation id="6302269476990306341">Google Ассистент в Chrome отключится</translation>
 <translation id="6305205051461490394">Сайт <ph name="URL" /> недоступен.</translation>
 <translation id="6321917430147971392">Проверьте настройки DNS</translation>
+<translation id="6322182122604171028">Не удалось использовать Windows Hello</translation>
 <translation id="6328639280570009161">Отключите предсказание сетевых действий</translation>
 <translation id="6328784461820205019">"Подключение не защищено", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" или "Ошибка сертификата SSL"</translation>
 <translation id="6328786501058569169">Это поддельный сайт</translation>
@@ -1013,6 +1021,7 @@
 <translation id="6433490469411711332">Изменить контактную информацию</translation>
 <translation id="6433595998831338502">Сайт <ph name="HOST_NAME" /> не позволяет установить соединение.</translation>
 <translation id="6434309073475700221">Отменить передачу</translation>
+<translation id="6435221585574090192">Отправьте администратору данные о событиях безопасности, определенных системой защиты Chrome Enterprise как потенциально опасные. К ним относятся URL страниц, названия файлов, метаданные файлов, название вашего устройства и имя пользователя Chrome.</translation>
 <translation id="6440503408713884761">Пропускается</translation>
 <translation id="6446163441502663861">Kahu (конверт)</translation>
 <translation id="6446608382365791566">Укажите дополнительную информацию</translation>
@@ -1057,6 +1066,7 @@
 <translation id="6671697161687535275">Удалить подсказку из Chromium?</translation>
 <translation id="6685834062052613830">Выйдите из аккаунта и завершите настройку</translation>
 <translation id="6689271823431384964">Chrome предлагает вам сохранить карты в аккаунте Google, поскольку вы вошли в систему. Этот параметр можно изменить в разделе настроек. Имя владельца карты взято из вашего аккаунта.</translation>
+<translation id="6707256370811247129">Сканировать содержимое кеша и файлов, которые вы скачиваете и загружаете через браузер Chrome.</translation>
 <translation id="6710213216561001401">Назад</translation>
 <translation id="6710594484020273272">&lt;Введите поисковый запрос&gt;</translation>
 <translation id="671076103358959139">Токен регистрации:</translation>
@@ -1075,6 +1085,7 @@
 <translation id="681021252041861472">Обязательное поле</translation>
 <translation id="6810899417690483278">Идентификатор персонализации</translation>
 <translation id="6825578344716086703">Вы пытаетесь обратиться к серверу в домене <ph name="DOMAIN" />, но его сертификат подписан с помощью ненадежного алгоритма (например, SHA-1). Это означает, что учетные данные безопасности и сам сервер могут оказаться поддельными. Возможно, вы имеете дело со злоумышленниками.</translation>
+<translation id="6826370046007623921">Предотвращение потери данных</translation>
 <translation id="6831043979455480757">Перевести</translation>
 <translation id="6839929833149231406">Район</translation>
 <translation id="6852204201400771460">Перезапустить приложение?</translation>
@@ -1221,6 +1232,7 @@
 <translation id="7542995811387359312">Автозаполнение отключено – незащищенное подключение.</translation>
 <translation id="7548892272833184391">Как устранить ошибки при подключении к Интернету</translation>
 <translation id="7549584377607005141">Для корректного отображения веб-страницы требуются введенные ранее данные. Их можно отправить повторно, но в этом случае все действия на странице будут выполнены снова.</translation>
+<translation id="7550637293666041147">Имя пользователя устройства и браузера Chrome</translation>
 <translation id="7552846755917812628">Попробуйте сделать следующее:</translation>
 <translation id="7554791636758816595">Новая вкладка</translation>
 <translation id="7564049878696755256">Кто-то посторонний мог получить доступ к вашим личным данным или аккаунту в домене <ph name="ORG_NAME" />. Рекомендуем немедленно сменить пароль.</translation>
@@ -1235,6 +1247,7 @@
 <translation id="7610193165460212391">Значение <ph name="VALUE" /> лежит за пределами разрешенного диапазона.</translation>
 <translation id="7613889955535752492">Срок действия: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">У вас уже есть данные, зашифрованные с другой версией пароля к аккаунту Google. Введите этот пароль ниже.</translation>
+<translation id="7625784245512586808">Система защиты Chrome Enterprise</translation>
 <translation id="7633909222644580952">Данные о производительности и отчеты о сбоях</translation>
 <translation id="7637571805876720304">Удалить кредитную карту из Chromium?</translation>
 <translation id="7638605456503525968">Последовательные порты</translation>
@@ -1345,6 +1358,7 @@
 <translation id="8211406090763984747">Безопасное подключение</translation>
 <translation id="8218327578424803826">Назначенное местоположение:</translation>
 <translation id="8220146938470311105">C7/C6 (конверт)</translation>
+<translation id="8220639454292072926">Отчеты Enterprise</translation>
 <translation id="8225771182978767009">Тот, кто настраивал компьютер, заблокировал этот сайт.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" /> и <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Открыть страницу в новой вкладке инкогнито</translation>
@@ -1427,6 +1441,7 @@
 <translation id="8740359287975076522">Не удается найти &lt;abbr id="dnsDefinition"&gt;DNS-адрес&lt;/abbr&gt; сайта <ph name="HOST_NAME" />. Выполняется диагностика.</translation>
 <translation id="874846938927089722">Кредитные карты и карты предоплаты, которые принимаются к оплате</translation>
 <translation id="874918643257405732">Добавить страницу в закладки</translation>
+<translation id="8751426954251315517">Повторите попытку позже</translation>
 <translation id="8759274551635299824">Срок действия карты истек.</translation>
 <translation id="8761567432415473239">Система Google по проверке безопасности сайтов недавно обнаружила на <ph name="SITE" /> <ph name="BEGIN_LINK" />вредоносное ПО<ph name="END_LINK" />.</translation>
 <translation id="8763927697961133303">USB-устройство</translation>
@@ -1491,6 +1506,7 @@
 <translation id="9080712759204168376">Информация о заказе</translation>
 <translation id="9089260154716455634">Время, когда правила не действуют:</translation>
 <translation id="9095388113577226029">Другие языки</translation>
+<translation id="9098981495403789647">Администратор включил в браузере систему защиты Chrome Enterprise. У системы защиты Chrome Enterprise есть доступ к некоторым вашим данным.</translation>
 <translation id="9103872766612412690">На сайте <ph name="SITE" /> для защиты ваших данных обычно используется шифрование. Однако учетные данные, которые мы получили от сайта <ph name="SITE" /> сейчас, отличаются от тех, которые он отправляет обычно. Вероятно, вредоносный сайт пытается выдать себя за <ph name="SITE" />, либо страница подключения к сети Wi-Fi прервала соединение. Ваша информация по-прежнему в безопасности, так как браузер Chromium разорвал соединение до того, как произошел обмен данными.</translation>
 <translation id="9106062320799175032">Добавьте платежный адрес</translation>
 <translation id="9114524666733003316">Подтверждение карты...</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 4aa1e47..c97e214 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">„Softvér vo vašom počítači bráni Chromu bezpečne sa pripojiť k internetu“ (iba počítače so systémom Windows)</translation>
 <translation id="1294154142200295408">Variácie v príkazovom riadku</translation>
 <translation id="129553762522093515">Nedávno zatvorené</translation>
+<translation id="1298536327547837046">Kontrola malvéru</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Skúste vymazať súbory cookie<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Funkcie s ukončenou podporou</translation>
 <translation id="1320233736580025032">Prc1 (obálka)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Skúste kontaktovať správcu systému.</translation>
 <translation id="1740951997222943430">Zadajte platný mesiac vypršania platnosti</translation>
 <translation id="1743520634839655729">Ak chcete nabudúce zaplatiť rýchlejšie, uložte si kartu, meno a fakturačnú adresu do účtu Google a tohto zariadenia.</translation>
+<translation id="1743570585616704562">Nerozpoznané</translation>
 <translation id="1745880797583122200">Váš prehliadač je spravovaný</translation>
 <translation id="17513872634828108">Otvorené karty</translation>
 <translation id="1753706481035618306">Číslo stránky</translation>
@@ -423,6 +425,7 @@
 <translation id="320323717674993345">Zrušiť platbu</translation>
 <translation id="3207960819495026254">Pridané medzi záložky</translation>
 <translation id="3209034400446768650">Stránka môže účtovať peniaze</translation>
+<translation id="3215092763954878852">WebAuthn sa nepodarilo použiť</translation>
 <translation id="3225919329040284222">Server sa preukázal certifikátom, ktorý nezodpovedá integrovaným očakávaniam. Tieto očakávania sú kvôli vašej ochrane zahrnuté pri určitých webových stránkach s vysokou úrovňou zabezpečenia.</translation>
 <translation id="3226128629678568754">Stlačením tlačidla opakovaného spustenia znova odošlete údaje potrebné na načítanie stránky.</translation>
 <translation id="3227137524299004712">Mikrofón</translation>
@@ -558,6 +561,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Žiadne}=1{Z 1 webu }few{Z # webov }many{Z # webu }other{Z # webov }}</translation>
 <translation id="397105322502079400">Prebieha výpočet...</translation>
 <translation id="3973234410852337861">Web <ph name="HOST_NAME" /> je zablokovaný</translation>
+<translation id="3981540111851280311">Doména <ph name="ENROLLMENT_DOMAIN" /> povolila vo vašom prehliadači ochranu Chrome Enterprise pred hrozbami. Ochrana Chrome Enterprise pred hrozbami má prístup k niektorým vašim údajom.</translation>
 <translation id="3987940399970879459">Menej ako 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 webová stránka v okolí}few{# webové stránky v okolí}many{# webovej stránky v okolí}other{# webových stránok v okolí}}</translation>
 <translation id="4030383055268325496">&amp;Vrátiť späť pridanie</translation>
@@ -626,6 +630,7 @@
 <translation id="4277028893293644418">Obnoviť heslo</translation>
 <translation id="4279811152705618813">Vaše zariadenie <ph name="DEVICE_TYPE" /> spravuje doména <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Táto karta sa uložila do vášho účtu Google}few{Tieto karty sa uložili do vášho účtu Google}many{Tieto karty sa uložili do vášho účtu Google}other{Tieto karty sa uložili do vášho účtu Google}}</translation>
+<translation id="428847186335018806">Naskenujte súbory, ktoré sťahujete alebo nahrávate v Chrome.</translation>
 <translation id="42981349822642051">Rozbaliť</translation>
 <translation id="4302965934281694568">Chou3 (obálka)</translation>
 <translation id="4305817255990598646">Prepnúť</translation>
@@ -664,6 +669,7 @@
 <translation id="4506176782989081258">Chyba overenia: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">Kontaktovať správcu systému</translation>
 <translation id="450710068430902550">Zdieľanie so správcom</translation>
+<translation id="4508814173490746936">Touch ID sa nepodarilo použiť</translation>
 <translation id="4510487217173779431">Chou4 (obálka)</translation>
 <translation id="4515275063822566619">Karty a adresy pochádzajú z Chromu a účtu Google (<ph name="ACCOUNT_EMAIL" />). Môžete ich spravovať v <ph name="BEGIN_LINK" />Nastaveniach<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (obálka)</translation>
@@ -759,6 +765,7 @@
 <translation id="5045550434625856497">Nesprávne heslo</translation>
 <translation id="5056549851600133418">Články pre vás</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(Používa sa 1)}few{(Používajú sa #)}many{(# in use)}other{(Používa sa #)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Skontrolovať adresu proxy servera<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Certifikát servera je momentálne neplatný</translation>
 <translation id="5087580092889165836">Pridať kartu</translation>
@@ -986,6 +993,7 @@
 <translation id="6302269476990306341">Zastavuje sa Asistent Google v Chrome</translation>
 <translation id="6305205051461490394">Web <ph name="URL" /> je nedostupný.</translation>
 <translation id="6321917430147971392">Skontrolujte nastavenia DNS</translation>
+<translation id="6322182122604171028">Windows Hello sa nepodarilo použiť</translation>
 <translation id="6328639280570009161">Skúste zakázať predpovede siete</translation>
 <translation id="6328784461820205019">„Vaše pripojenie nie je súkromné“, „&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;“, „&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;“, „&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;“ alebo „&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;“ alebo „Chyba certifikátu SSL“.</translation>
 <translation id="6328786501058569169">Tento web je klamlivý</translation>
@@ -1009,6 +1017,7 @@
 <translation id="6433490469411711332">Úprava kontaktných informácií</translation>
 <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> zamietol pripojenie.</translation>
 <translation id="6434309073475700221">Odstrániť</translation>
+<translation id="6435221585574090192">Zdieľajte so svojím správcom údaje o bezpečnostných udalostiach nahlásených ochranou Chrome Enterprise pred hrozbami. Môžu zahŕňať webové adresy stránok, názvy a metadáta súborov a vaše používateľské meno v zariadení aj Chrome.</translation>
 <translation id="6440503408713884761">Ignorované</translation>
 <translation id="6446163441502663861">Kahu (obálka)</translation>
 <translation id="6446608382365791566">Pridanie ďalších informácií</translation>
@@ -1053,6 +1062,7 @@
 <translation id="6671697161687535275">Chcete návrh položky formulára odstrániť z prehliadača Chromium?</translation>
 <translation id="6685834062052613830">Odhláste sa a dokončite nastavenie</translation>
 <translation id="6689271823431384964">Chrome poskytuje možnosť uložiť karty v účte Google, pretože ste sa prihlásili. Toto správanie môžete zmeniť v nastaveniach. Toto meno majiteľa karty pochádza z vášho účtu.</translation>
+<translation id="6707256370811247129">Naskenujte obsah vyrovnávacej pamäte a súbory, ktoré sťahujete alebo nahrávate v Chrome.</translation>
 <translation id="6710213216561001401">Dozadu</translation>
 <translation id="6710594484020273272">&lt;Zadajte hľadaný výraz&gt;</translation>
 <translation id="671076103358959139">Registračný token:</translation>
@@ -1071,6 +1081,7 @@
 <translation id="681021252041861472">Povinné pole</translation>
 <translation id="6810899417690483278">Identifikátor prispôsobenia</translation>
 <translation id="6825578344716086703">Pokúsili ste sa o prístup do domény <ph name="DOMAIN" />, server však predložil certifikát podpísaný slabým algoritmom podpisu. Znamená to, že predložené poverenia zabezpečenia mohli byť sfalšované a môže ísť o úplne iný server, než ste očakávali (možno komunikujete s útočníkom).</translation>
+<translation id="6826370046007623921">Ochrana pred únikom údajov</translation>
 <translation id="6831043979455480757">Preložiť</translation>
 <translation id="6839929833149231406">Oblasť</translation>
 <translation id="6852204201400771460">Načítať znova aplikáciu?</translation>
@@ -1217,6 +1228,7 @@
 <translation id="7542995811387359312">Automatické dopĺňanie údajov o kreditnej karte je zakázané, pretože tento formulár nepoužíva zabezpečené pripojenie.</translation>
 <translation id="7548892272833184391">Oprava chýb pripojenia</translation>
 <translation id="7549584377607005141">Správne zobrazenie tejto webovej stránky si vyžaduje údaje, ktoré ste zadali v minulosti. Tieto údaje môžete poslať znova, ale v tom prípade zopakujete všetky akcie, ktoré sa na tejto stránke vykonali v minulosti.</translation>
+<translation id="7550637293666041147">Vaše používateľské meno v zariadení a Chrome</translation>
 <translation id="7552846755917812628">Vyskúšajte nasledujúce tipy:</translation>
 <translation id="7554791636758816595">Nová karta</translation>
 <translation id="7564049878696755256">Môžete stratiť prístup do účtu <ph name="ORG_NAME" /> alebo vám niekto môže ukradnúť identitu. Chrome odporúča, aby ste si ihneď zmenili heslo.</translation>
@@ -1231,6 +1243,7 @@
 <translation id="7610193165460212391">Hodnota (<ph name="VALUE" />) presahuje povolený rozsah.</translation>
 <translation id="7613889955535752492">Dátum vypršania platnosti: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Už máte údaje, ktoré sú šifrované pomocou inej verzie vášho hesla účtu Google. Zadajte ho nižšie.</translation>
+<translation id="7625784245512586808">Ochrana Chrome Enterprise pred hrozbami</translation>
 <translation id="7633909222644580952">Údaje o výkonnosti a správy o zlyhaní</translation>
 <translation id="7637571805876720304">Chcete kreditnú kartu odstrániť z prehliadača Chromium?</translation>
 <translation id="7638605456503525968">Sériové porty</translation>
@@ -1341,6 +1354,7 @@
 <translation id="8211406090763984747">Spojenie je zabezpečené</translation>
 <translation id="8218327578424803826">Pridelená poloha:</translation>
 <translation id="8220146938470311105">C7/C6 (obálka)</translation>
+<translation id="8220639454292072926">Prehľady podniku</translation>
 <translation id="8225771182978767009">Osoba, ktorá nastavila tento počítač, sa rozhodla daný web blokovať.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Otvorte stránku na novej karte inkognito</translation>
@@ -1424,6 +1438,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;Adresa DNS&lt;/abbr&gt; webu <ph name="HOST_NAME" /> sa nenašla. Problém sa diagnostikuje.</translation>
 <translation id="874846938927089722">Akceptované kreditné a predplatené karty</translation>
 <translation id="874918643257405732">Pridať kartu medzi záložky</translation>
+<translation id="8751426954251315517">Skúste to znova neskôr</translation>
 <translation id="8759274551635299824">Platnosť tejto karty vypršala</translation>
 <translation id="8761567432415473239">Bezpečné prehliadanie Google nedávno <ph name="BEGIN_LINK" />zistilo škodlivé programy<ph name="END_LINK" /> na webe <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Zariadenie USB</translation>
@@ -1488,6 +1503,7 @@
 <translation id="9080712759204168376">Súhrn objednávky</translation>
 <translation id="9089260154716455634">Pravidlo intervalov nečinnosti:</translation>
 <translation id="9095388113577226029">Ďalšie jazyky…</translation>
+<translation id="9098981495403789647">Správca povolil vo vašom počítači ochranu Chrome Enterprise pred hrozbami. Ochrana Chrome Enterprise pred hrozbami má prístup k niektorým vašim údajom.</translation>
 <translation id="9103872766612412690">Web <ph name="SITE" /> zvyčajne chráni vaše informácie pomocou šifrovania. Keď sa prehliadač Chromium tentokrát pokúsil pripojiť k webu <ph name="SITE" />, odoslal späť nezvyčajné a nesprávne poverenia. Môže sa to stať vtedy, keď sa za web <ph name="SITE" /> snaží vydávať útočník alebo keď pripojenie preruší prihlasovacia obrazovka siete Wi‑Fi. Vaše informácie sú stále zabezpečené, pretože prehliadač Chromium zastavil pripojenie ešte pred výmenou dát.</translation>
 <translation id="9106062320799175032">Pridanie fakturačnej adresy</translation>
 <translation id="9114524666733003316">Overuje sa karta…</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index 34e7b4f..aa91b58 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">»Programska oprema v računalniku Chromu preprečuje vzpostavitev varne povezave s spletom« (samo računalniki s sistemom Windows)</translation>
 <translation id="1294154142200295408">Različice ukazne vrstice</translation>
 <translation id="129553762522093515">Nedavno zaprto</translation>
+<translation id="1298536327547837046">Pregledovanje glede zlonamerne programske opreme</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Poskusite izbrisati piškotke<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Zastarele funkcije</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Poskusite se obrniti na skrbnika sistema.</translation>
 <translation id="1740951997222943430">Vnesite veljaven mesec poteka veljavnosti</translation>
 <translation id="1743520634839655729">Če želite naslednjič hitreje plačati, shranite kartico, ime in naslov za izstavitev računa v Google Računu in v tej napravi.</translation>
+<translation id="1743570585616704562">Ni prepoznano</translation>
 <translation id="1745880797583122200">Vaš brskalnik je upravljan</translation>
 <translation id="17513872634828108">Odprti zavihki</translation>
 <translation id="1753706481035618306">Številka strani</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Prekliči plačilo</translation>
 <translation id="3207960819495026254">Dodano med zaznamke</translation>
 <translation id="3209034400446768650">Stran morda zaračunava</translation>
+<translation id="3215092763954878852">Ni bilo mogoče uporabiti WebAuthn</translation>
 <translation id="3225919329040284222">Strežnik je poslal potrdilo, ki se ne ujema z vgrajenimi pričakovanji. Ta pričakovanja so zaradi vaše varnosti vključena za nekatera strogo zavarovana spletna mesta.</translation>
 <translation id="3226128629678568754">Pritisnite gumb za vnovično nalaganje, da znova pošljete podatke za nalaganje strani.</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Brez}=1{1 spletno mesto }one{# spletno mesto }two{# spletni mesti }few{# spletna mesta }other{# spletnih mest }}</translation>
 <translation id="397105322502079400">Izračunavanje …</translation>
 <translation id="3973234410852337861">Spletno mesto <ph name="HOST_NAME" /> je blokirano</translation>
+<translation id="3981540111851280311">Domena <ph name="ENROLLMENT_DOMAIN" /> je v brskalniku omogočila Chromovo funkcijo zaščite pred grožnjami za podjetja. Chromova funkcija zaščite pred grožnjami za podjetja ima dostop do nekaterih vaših podatkov.</translation>
 <translation id="3987940399970879459">Manj kot 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 spletna stran v bližini}one{# spletna stran v bližini}two{# spletni strani v bližini}few{# spletne strani v bližini}other{# spletnih strani v bližini}}</translation>
 <translation id="4030383055268325496">&amp;Razveljavi dodajanje</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">Ponastavi geslo</translation>
 <translation id="4279811152705618813">Vašo napravo <ph name="DEVICE_TYPE" /> upravlja domena <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ta kartica je shranjena v Google Računu}one{Te kartice so shranjene v Google Računu}two{Te kartice so shranjene v Google Računu}few{Te kartice so shranjene v Google Računu}other{Te kartice so shranjene v Google Računu}}</translation>
+<translation id="428847186335018806">Pregledovanje datotek, ki jih prenesete iz Chroma ali naložite vanj.</translation>
 <translation id="42981349822642051">Razširi</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
 <translation id="4305817255990598646">Preklopi</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">Napaka pri preverjanju veljavnosti: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">se obrniti na skrbnika sistema</translation>
 <translation id="450710068430902550">Deljenje s skrbnikom</translation>
+<translation id="4508814173490746936">Ni bilo mogoče uporabiti funkcije Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">Kartice in naslovi so iz Chroma in Google Računa (<ph name="ACCOUNT_EMAIL" />). Upravljate jih lahko v <ph name="BEGIN_LINK" />nastavitvah<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (Envelope)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">Nepravilno geslo</translation>
 <translation id="5056549851600133418">Članki za vas</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 v uporabi)}one{(# v uporabi)}two{(# v uporabi)}few{(# v uporabi)}other{(# v uporabi)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />preveriti naslov strežnika proxy<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Potrdilo strežnika trenutno ni veljavno.</translation>
 <translation id="5087580092889165836">Dodaj kartico</translation>
@@ -994,6 +1001,7 @@
 <translation id="6302269476990306341">Pomočnik Google v Chromu se ustavlja</translation>
 <translation id="6305205051461490394">Naslov <ph name="URL" /> je nedosegljiv.</translation>
 <translation id="6321917430147971392">Preverite nastavitve za DNS</translation>
+<translation id="6322182122604171028">Funkcije Windows Hello ni bilo mogoče uporabiti</translation>
 <translation id="6328639280570009161">Poskusite onemogočiti omrežno predvidevanje</translation>
 <translation id="6328784461820205019">»Vaša povezava ni zasebna« ali »&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;« ali »&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;« ali »&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;« ali »&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;« ali »Napaka v potrdilu SSL«</translation>
 <translation id="6328786501058569169">To spletno mesto je zavajajoče</translation>
@@ -1017,6 +1025,7 @@
 <translation id="6433490469411711332">Uredi informacije o stiku</translation>
 <translation id="6433595998831338502">Spletno mesto <ph name="HOST_NAME" /> ni dovolilo povezave.</translation>
 <translation id="6434309073475700221">Zavrzi</translation>
+<translation id="6435221585574090192">Skrbniku posredujte podatke o varnostnih dogodkih, ki jih je označila Chromova funkcija zaščite pred grožnjami za podjetja. Ti lahko vključujejo URL-je strani, ime datoteke in metapodatke o datoteki, uporabniško ime v napravi in uporabniško ime v Chromu.</translation>
 <translation id="6440503408713884761">Prezrto</translation>
 <translation id="6446163441502663861">Kahu (Envelope)</translation>
 <translation id="6446608382365791566">Dodajanje več podatkov</translation>
@@ -1061,6 +1070,7 @@
 <translation id="6671697161687535275">Želite predlog obrazca odstraniti iz Chromiuma?</translation>
 <translation id="6685834062052613830">Odjavite se in dokončajte nastavitev</translation>
 <translation id="6689271823431384964">Chrome ponuja shranjevanje kartic v račun za Google, ker ste prijavljeni. To lahko spremenite v nastavitvah. Ime imetnika računa je iz vašega računa.</translation>
+<translation id="6707256370811247129">Pregled vsebine predpomnilnika in datotek, ki jih prenesete iz Chroma ali naložite vanj.</translation>
 <translation id="6710213216561001401">Nazaj</translation>
 <translation id="6710594484020273272">&lt;Vnesite iskalno poizvedbo&gt;</translation>
 <translation id="671076103358959139">Žeton za včlanitev:</translation>
@@ -1079,6 +1089,7 @@
 <translation id="681021252041861472">Obvezno polje</translation>
 <translation id="6810899417690483278">ID za prilagajanje</translation>
 <translation id="6825578344716086703">Poskusili ste dostopati do domene <ph name="DOMAIN" />, vendar ima strežnik potrdilo, podpisano s šibkim podpisnim algoritmom (kot je SHA-1). To pomeni, da so varnostne poverilnice, ki jih je poslal strežnik, morda ponarejene in strežnik morda ni tisti, ki ga pričakujete (morda komunicirate z napadalcem).</translation>
+<translation id="6826370046007623921">Preprečevanje izgube podatkov</translation>
 <translation id="6831043979455480757">Prevedi</translation>
 <translation id="6839929833149231406">Območje</translation>
 <translation id="6852204201400771460">Želite znova naložiti aplikacijo?</translation>
@@ -1225,6 +1236,7 @@
 <translation id="7542995811387359312">Samodejno izpolnjevanje podatkov o kreditni kartici je onemogočeno, ker ta obrazec ne uporablja varne povezave.</translation>
 <translation id="7548892272833184391">Odpravljanje napak s povezavo</translation>
 <translation id="7549584377607005141">Za pravilen prikaz te strani so potrebni podatki, ki ste jih vnesli prej. Podatke lahko pošljete še enkrat, vendar se bodo s tem ponovila vsa prejšnja dejanja strani.</translation>
+<translation id="7550637293666041147">Uporabniško ime v napravi in uporabniško ime v Chromu</translation>
 <translation id="7552846755917812628">Poskusite te nasvete:</translation>
 <translation id="7554791636758816595">Nov zavihek</translation>
 <translation id="7564049878696755256">Izgubite lahko dostop do računa za <ph name="ORG_NAME" /> ali postanete žrtev kraje identitete. Chrome priporoča, da spremenite geslo.</translation>
@@ -1239,6 +1251,7 @@
 <translation id="7610193165460212391">Vrednost je zunaj obsega <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Veljavnost do: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Podatke, ki so šifrirani z drugo različico gesla za Google Račun, že imate. Geslo vnesite spodaj.</translation>
+<translation id="7625784245512586808">Chromova funkcija zaščite pred grožnjami za podjetja</translation>
 <translation id="7633909222644580952">Podatki o delovanju in poročila o zrušitvah</translation>
 <translation id="7637571805876720304">Želite kreditno kartico odstraniti iz Chromiuma?</translation>
 <translation id="7638605456503525968">Serijska vrata</translation>
@@ -1349,6 +1362,7 @@
 <translation id="8211406090763984747">Povezava je varna</translation>
 <translation id="8218327578424803826">Dodeljena lokacija:</translation>
 <translation id="8220146938470311105">C7/C6 (Envelope)</translation>
+<translation id="8220639454292072926">Poročanje za podjetja</translation>
 <translation id="8225771182978767009">Oseba, ki je nastavila ta računalnik, je blokirala to spletno mesto.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Odpiranje strani v novem zavihku brez beleženja zgodovine.</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;Naslova DNS&lt;/abbr&gt; spletnega mesta <ph name="HOST_NAME" /> ni bilo mogoče najti. Poteka diagnosticiranje težave.</translation>
 <translation id="874846938927089722">Sprejete kreditne in predplačniške kartice</translation>
 <translation id="874918643257405732">Dodajanje tega zavihka med zaznamke</translation>
+<translation id="8751426954251315517">Poskusite znova pozneje</translation>
 <translation id="8759274551635299824">Ta kartica je potekla</translation>
 <translation id="8761567432415473239">Googlova funkcija varnega brskanja je nedavno <ph name="BEGIN_LINK" />odkrila škodljive programe<ph name="END_LINK" /> na spletnem mestu <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Naprava USB</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">Povzetek naročila</translation>
 <translation id="9089260154716455634">Pravilnik za nedejavnost:</translation>
 <translation id="9095388113577226029">Več jezikov …</translation>
+<translation id="9098981495403789647">Skrbnik je v brskalniku omogočil Chromovo funkcijo zaščite pred grožnjami za podjetja. Chromova funkcija zaščite pred grožnjami za podjetja ima dostop do nekaterih vaših podatkov.</translation>
 <translation id="9103872766612412690">Spletno mesto <ph name="SITE" /> za zaščito vaših podatkov običajno uporablja šifriranje. Ko se je Chromium tokrat poskusil povezati s spletnim mestom <ph name="SITE" />, je to vrnilo nenavadne in nepravilne poverilnice. Do tega lahko pride, če se napadalec lažno predstavlja za spletno mesto <ph name="SITE" /> ali če je povezavo prekinil zaslon za prijavo v omrežje Wi-Fi. Vaši podatki so še vedno varni, saj je Chromium pred izmenjavo podatkov prekinil povezavo.</translation>
 <translation id="9106062320799175032">Dodajanje naslova za izstavitev računa</translation>
 <translation id="9114524666733003316">Potrjevanje kartice …</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index f911976..d8431bf 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">„Софтвер на вашем рачунару онемогућава Chrome-у да се безбедно повеже на веб“ (само на Windows рачунарима)</translation>
 <translation id="1294154142200295408">Варијације командне линије</translation>
 <translation id="129553762522093515">Недавно затворено</translation>
+<translation id="1298536327547837046">Скенирање малвера</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Покушајте да обришете колачиће<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Застареле функције</translation>
 <translation id="1320233736580025032">Prc1 (коверат)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Покушајте да контактирате администратора система.</translation>
 <translation id="1740951997222943430">Унесите важећи месец истека</translation>
 <translation id="1743520634839655729">Да бисте следећи пут платили брже, сачувајте картицу, име и адресу за обрачун на Google налогу и овом уређају.</translation>
+<translation id="1743570585616704562">Није препознат</translation>
 <translation id="1745880797583122200">Прегледачем се управља</translation>
 <translation id="17513872634828108">Отворене картице</translation>
 <translation id="1753706481035618306">Број странице</translation>
@@ -428,6 +430,7 @@
 <translation id="320323717674993345">Откажи плаћање</translation>
 <translation id="3207960819495026254">Обележено</translation>
 <translation id="3209034400446768650">Страница може да наплаћује</translation>
+<translation id="3215092763954878852">Коришћење веб-стандарда WebAuthn није успело</translation>
 <translation id="3225919329040284222">Сервер је приказао сертификат који се не подудара са уграђеним очекивањима. Та очекивања су обухваћена за одређене веб-сајтове са јаким безбедносним мерама како би вас заштитила.</translation>
 <translation id="3226128629678568754">Притисните дугме Поново учитај да бисте поново послали податке потребне за учитавање странице.</translation>
 <translation id="3227137524299004712">Микрофон</translation>
@@ -564,6 +567,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{None}=1{Са 1 сајта }one{Са # сајта }few{Са # сајта }other{Са # сајтова }}</translation>
 <translation id="397105322502079400">Израчунавање...</translation>
 <translation id="3973234410852337861">Хост <ph name="HOST_NAME" /> је блокиран</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> је у прегледачу омогућио Chrome Enterprise заштиту од претњи. Chrome Enterprise заштита од претњи има приступ неким вашим подацима.</translation>
 <translation id="3987940399970879459">Мање од 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 веб-страница у околини}one{# веб-страница у околини}few{# веб-странице у околини}other{# веб-страница у околини}}</translation>
 <translation id="4030383055268325496">&amp;Опозови додавање</translation>
@@ -632,6 +636,7 @@
 <translation id="4277028893293644418">Ресетујте лозинку</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" />-ом управља <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ова картица је сачувана на Google налогу}one{Ове картице су сачуване на Google налогу}few{Ове картице су сачуване на Google налогу}other{Ове картице су сачуване на Google налогу}}</translation>
+<translation id="428847186335018806">Скенирајте датотеке које преузимате или отпремате у Chrome-у.</translation>
 <translation id="42981349822642051">Проширите</translation>
 <translation id="4302965934281694568">Chou3 (коверат)</translation>
 <translation id="4305817255990598646">Пређи</translation>
@@ -670,6 +675,7 @@
 <translation id="4506176782989081258">Грешка при потврди ваљаности: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">да контактирате администратора система</translation>
 <translation id="450710068430902550">Дељење са администратором</translation>
+<translation id="4508814173490746936">Коришћење Touch ID-а није успело</translation>
 <translation id="4510487217173779431">Chou4 (коверат)</translation>
 <translation id="4515275063822566619">Картице и адресе су из Chrome-а и са вашег Google налога (<ph name="ACCOUNT_EMAIL" />). Њима можете да управљате у <ph name="BEGIN_LINK" />подешавњима<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (коверат)</translation>
@@ -765,6 +771,7 @@
 <translation id="5045550434625856497">Неисправна лозинка</translation>
 <translation id="5056549851600133418">Чланци за вас</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(користи се 1)}one{(користи се #)}few{(користе се #)}other{(користи се #)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />да проверите адресу проксија<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Сертификат сервера тренутно није важећи.</translation>
 <translation id="5087580092889165836">Додај картицу</translation>
@@ -993,6 +1000,7 @@
 <translation id="6302269476990306341">Google помоћник у Chrome-у се зауставља</translation>
 <translation id="6305205051461490394">URL <ph name="URL" /> није доступан.</translation>
 <translation id="6321917430147971392">Проверите DNS подешавања</translation>
+<translation id="6322182122604171028">Коришћење функције Windows Hello није успело</translation>
 <translation id="6328639280570009161">Покушајте да онемогућите предвиђање мреже</translation>
 <translation id="6328784461820205019">„Веза није приватна“ или „&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;“ или „&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;“ или „&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;“ или „&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;“ или „Грешка у вези са SSL сертификатом“</translation>
 <translation id="6328786501058569169">Овај сајт је обмањујућ</translation>
@@ -1016,6 +1024,7 @@
 <translation id="6433490469411711332">Измените контакт информације</translation>
 <translation id="6433595998831338502">Хост <ph name="HOST_NAME" /> је одбио повезивање.</translation>
 <translation id="6434309073475700221">Одбаци</translation>
+<translation id="6435221585574090192">Делите са администатором податке о безбедносним догађајима које је означила Chrome Enterprise заштита од претњи. Они могу да обухватају URL-ове страница, називе датотека и метаподатке датотека, корисничко име уређаја и корисничко име за Chrome.</translation>
 <translation id="6440503408713884761">Занемарено</translation>
 <translation id="6446163441502663861">Kahu (коверат)</translation>
 <translation id="6446608382365791566">Додајте још информација</translation>
@@ -1060,6 +1069,7 @@
 <translation id="6671697161687535275">Желите ли да уклоните предлог из Chromium-а?</translation>
 <translation id="6685834062052613830">Одјавите се и довршите подешавање</translation>
 <translation id="6689271823431384964">Chrome вам нуди чување картица на Google налогу зато што сте пријављени. То можете да промените у подешавањима. Име власника картице смо узели са налога.</translation>
+<translation id="6707256370811247129">Скенирајте садржај кеша и датотеке које преузимате или отпремате у Chrome-у.</translation>
 <translation id="6710213216561001401">Претходно</translation>
 <translation id="6710594484020273272">&lt;Унесите термин за претрагу&gt;</translation>
 <translation id="671076103358959139">Токен за регистрацију:</translation>
@@ -1078,6 +1088,7 @@
 <translation id="681021252041861472">Обавезно поље</translation>
 <translation id="6810899417690483278">ИД за прилагођавање</translation>
 <translation id="6825578344716086703">Покушали сте да посетите <ph name="DOMAIN" />, али је сервер послао сертификат потписан слабим алгоритмом (као што је SHA-1). То значи да су безбедносни акредитиви које је сервер послао можда кривотворени и сервер можда није онај који мислите да јесте (можда комуницирате са нападачем).</translation>
+<translation id="6826370046007623921">Спречавање губитка података</translation>
 <translation id="6831043979455480757">Преведи</translation>
 <translation id="6839929833149231406">Област</translation>
 <translation id="6852204201400771460">Желите ли да поново учитате апликацију?</translation>
@@ -1224,6 +1235,7 @@
 <translation id="7542995811387359312">Онемогућено је аутоматско попуњавање кредитне картице зато што овај образац не користи безбедну везу.</translation>
 <translation id="7548892272833184391">Отклоните грешке при повезивању</translation>
 <translation id="7549584377607005141">Ова веб-страница захтева податке које сте унели раније да би се правилно приказала. Можете поново да пошаљете те податке, али ако то урадите, поновићете било коју радњу коју је ова страница претходно обавила.</translation>
+<translation id="7550637293666041147">Корисничко име уређаја и корисничко име за Chrome</translation>
 <translation id="7552846755917812628">Испробајте следеће савете:</translation>
 <translation id="7554791636758816595">Нова картица</translation>
 <translation id="7564049878696755256">Можете да изгубите приступ налогу за <ph name="ORG_NAME" /> или би могло да дође до крађе идентитета. Chrome вам препоручује да одмах промените лозинку.</translation>
@@ -1238,6 +1250,7 @@
 <translation id="7610193165460212391">Вредност је изван опсега <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Истиче: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Већ имате податке који су шифровани помоћу друге верзије лозинке за Google налог. Унесите је у наставку.</translation>
+<translation id="7625784245512586808">Chrome Enterprise заштита од претњи</translation>
 <translation id="7633909222644580952">Подаци о учинку и извештаји о отказивању</translation>
 <translation id="7637571805876720304">Желите ли да уклоните кредитну картицу из Chromium-а?</translation>
 <translation id="7638605456503525968">Серијски портови</translation>
@@ -1348,6 +1361,7 @@
 <translation id="8211406090763984747">Веза је безбедна</translation>
 <translation id="8218327578424803826">Додељена локација:</translation>
 <translation id="8220146938470311105">C7/C6 (коверат)</translation>
+<translation id="8220639454292072926">Извештавање за предузећа</translation>
 <translation id="8225771182978767009">Особа која је подесила овај рачунар је одлучила да блокира овај сајт.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Отворите страницу на новој картици без архивирања</translation>
@@ -1431,6 +1445,7 @@
 <translation id="8740359287975076522">Нисмо успели да пронађемо &lt;abbr id="dnsDefinition"&gt;DNS адресу&lt;/abbr&gt; хоста <ph name="HOST_NAME" />. Покушавамо да утврдимо у чему је проблем.</translation>
 <translation id="874846938927089722">Кредитне и припејд картице које се прихватају</translation>
 <translation id="874918643257405732">Обележите ову картицу</translation>
+<translation id="8751426954251315517">Пробајте поново следећи пут</translation>
 <translation id="8759274551635299824">Ова картица је истекла</translation>
 <translation id="8761567432415473239">Google безбедно прегледање је недавно <ph name="BEGIN_LINK" />открило штетне програме<ph name="END_LINK" /> на <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">USB уређај</translation>
@@ -1495,6 +1510,7 @@
 <translation id="9080712759204168376">Резиме поруџбине</translation>
 <translation id="9089260154716455634">Смернице са временским распоредом:</translation>
 <translation id="9095388113577226029">Још језика...</translation>
+<translation id="9098981495403789647">Администратор је у прегледачу омогућио Chrome Enterprise заштиту од претњи. Chrome Enterprise заштита од претњи има приступ неким вашим подацима.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> обично користи шифровање да би заштитио информације. Када је Chromium овог пута покушао да се повеже са <ph name="SITE" />, веб-сајт је вратио необичне и нетачне акредитиве. Или нападач покушава да се представи као <ph name="SITE" /> или је екран за Wi-Fi пријављивање прекинуо везу. Информације су и даље безбедне зато што је Chromium прекинуо везу пре него што су размењени било какви подаци.</translation>
 <translation id="9106062320799175032">Додајте адресу за обрачун</translation>
 <translation id="9114524666733003316">Картица се потврђује...</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index 57c9bed..7958b79 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">Kontakta systemadministratören.</translation>
 <translation id="1740951997222943430">Ange en giltig utgångsmånad</translation>
 <translation id="1743520634839655729">Spara kortet, faktureringsadressen och namnet i Google-kontot och på enheten så går det snabbare att betala nästa gång.</translation>
+<translation id="1743570585616704562">Identifierades inte</translation>
 <translation id="1745880797583122200">Din webbläsare hanteras</translation>
 <translation id="17513872634828108">Öppna flikar</translation>
 <translation id="1753706481035618306">Sidnummer</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index 3c8065f2..fea5746 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">Kuwasiliana na msimamizi wa mfumo.</translation>
 <translation id="1740951997222943430">Andika mwezi sahihi wa kuisha kwa muda wa matumizi</translation>
 <translation id="1743520634839655729">Ili ulipe kwa haraka wakati ujao, hifadhi anwani ya kutuma bili, jina na maelezo ya kadi yako kwenye Akaunti yako ya Google na kwenye kifaa hiki.</translation>
+<translation id="1743570585616704562">Haikutambua alama ya kidole</translation>
 <translation id="1745880797583122200">Kivinjari chako kinadhibitiwa</translation>
 <translation id="17513872634828108">Vichupo vilivyo wazi</translation>
 <translation id="1753706481035618306">Nambari ya ukurasa</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 4c95aa3..a9a4d16 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"உங்கள் கம்ப்யூட்டரில் உள்ள மென்பொருள் இணையத்துடன் பாதுகாப்பாக இணைவதிலிருந்து Chromeமைத் தடுக்கிறது" (Windows கம்ப்யூட்டர்கள் மட்டும்)</translation>
 <translation id="1294154142200295408">கட்டளை வரி மாற்று வடிவங்கள்</translation>
 <translation id="129553762522093515">சமீபத்தில் மூடியவை</translation>
+<translation id="1298536327547837046">மால்வேரை ஸ்கேன் செய்கிறது</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />குக்கீகளை அழிக்கவும்<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">தடுக்கப்பட்ட அம்சங்கள்</translation>
 <translation id="1320233736580025032">Prc1 (என்வலப்)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">கணினி நிர்வாகியைத் தொடர்புகொள்ளவும்</translation>
 <translation id="1740951997222943430">சரியான காலாவதி மாதத்தை உள்ளிடவும்</translation>
 <translation id="1743520634839655729">அடுத்த முறை விரைவாகப் பணம் செலுத்த, உங்கள் கார்டின் பெயரையும் பில்லிங் முகவரியையும் உங்கள் Google கணக்கிலும் இந்தச் சாதனத்திலும் சேமிக்கவும்.</translation>
+<translation id="1743570585616704562">அடையாளங்காண முடியவில்லை</translation>
 <translation id="1745880797583122200">உங்கள் உலாவி நிர்வகிக்கப்படுகிறது</translation>
 <translation id="17513872634828108">தாவல்களைத் திற</translation>
 <translation id="1753706481035618306">பக்க எண்</translation>
@@ -423,6 +425,7 @@
 <translation id="320323717674993345">கட்டணம் செலுத்துவதை ரத்துசெய்</translation>
 <translation id="3207960819495026254">புக்மார்க் செய்யப்பட்டது</translation>
 <translation id="3209034400446768650">இந்தப் பக்கத்திற்குச் சென்றால் கட்டணம் விதிக்கக்கூடும்</translation>
+<translation id="3215092763954878852">WebAuthnனைப் பயன்படுத்த முடியவில்லை</translation>
 <translation id="3225919329040284222">உள்ளமைந்த எதிர்பார்ப்புகளுடன் பொருந்தாத சான்றிதழை சேவையகம் வழங்கியது. சில உயர்-பாதுகாப்பு வலைத்தளங்களில் உங்களைப் பாதுகாக்கவே இந்த எதிர்பார்ப்புகள் சேர்க்கப்படுகின்றன.</translation>
 <translation id="3226128629678568754">பக்கத்தை ஏற்ற தேவைப்படும் தரவை மறுமுறைச் சமர்ப்பிப்பதற்கு மீண்டும் ஏற்று என்ற பொத்தானை அழுத்துக.</translation>
 <translation id="3227137524299004712">மைக்ரோஃபோன்</translation>
@@ -558,6 +561,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{ஏதுமில்லை}=1{1 தளத்திலிருந்து }other{# தளங்களிலிருந்து }}</translation>
 <translation id="397105322502079400">கணக்கிடுகிறது...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> தடுக்கப்பட்டுள்ளது</translation>
+<translation id="3981540111851280311">உங்கள் உலாவியில் Chrome Enterprise Threat Protectionனை <ph name="ENROLLMENT_DOMAIN" /> இயக்கியுள்ளது. உங்களின் சில தரவை Chrome Enterprise Threat Protectionனால் அணுக முடியும்.</translation>
 <translation id="3987940399970879459">1 மெ.பை. அளவை விடக் குறைவாக உள்ளது</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{அருகில் ஒரு இணையப் பக்கம் உள்ளது}other{அருகில் # இணையப் பக்கங்கள் உள்ளன}}</translation>
 <translation id="4030383055268325496">&amp;சேர்த்தலைச் செயல்தவிர்</translation>
@@ -626,6 +630,7 @@
 <translation id="4277028893293644418">கடவுச்சொல்லை மீட்டமை</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" />ஐ நிர்வகிப்பது: <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{இந்தக் கார்டு உங்கள் Google கணக்கில் சேமிக்கப்பட்டது}other{இந்தக் கார்டுகள் உங்கள் Google கணக்கில் சேமிக்கப்பட்டன}}</translation>
+<translation id="428847186335018806">Chromeமில் நீங்கள் பதிவேற்றும் அல்லது பதிவிறக்கும் கோப்புகளை ஸ்கேன் செய்யும்.</translation>
 <translation id="42981349822642051">விரி</translation>
 <translation id="4302965934281694568">Chou3 (என்வலப்)</translation>
 <translation id="4305817255990598646">மாறு</translation>
@@ -664,6 +669,7 @@
 <translation id="4506176782989081258">சரிபார்ப்புப் பிழை: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">கணினி நிர்வாகியைத் தொடர்புகொள்ளுதல்</translation>
 <translation id="450710068430902550">நிர்வாகியுடன் பகிர்பவை</translation>
+<translation id="4508814173490746936">Touch IDயைப் பயன்படுத்த இயலவில்லை</translation>
 <translation id="4510487217173779431">Chou4 (என்வலப்)</translation>
 <translation id="4515275063822566619">கார்டுகளும் முகவரிகளும் Chromeமிலிருந்தும் <ph name="ACCOUNT_EMAIL" /> எனும் உங்கள் Google கணக்கிலிருந்தும் பெறப்பட்டவையாகும். <ph name="BEGIN_LINK" />அமைப்புகளில்<ph name="END_LINK" /> அவற்றை நிர்வகிக்கலாம்.</translation>
 <translation id="4517607026994743406">Comm-10 (என்வலப்)</translation>
@@ -759,6 +765,7 @@
 <translation id="5045550434625856497">தவறான கடவுச்சொல்</translation>
 <translation id="5056549851600133418">உங்களுக்கான செய்திக் கட்டுரைகள்</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(ஒன்று பயன்பாட்டில் உள்ளது)}other{(# பயன்பாட்டில் உள்ளன)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />ப்ராக்ஸி முகவரியைச் சரிபார்த்தல்<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">தற்போது சேவையகத்தின் சான்றிதழ் செல்லுபடியாகாது.</translation>
 <translation id="5087580092889165836">கார்டைச் சேர்</translation>
@@ -986,6 +993,7 @@
 <translation id="6302269476990306341">’Chromeமில் Google அசிஸ்டண்ட்’ நிறுத்தப்படுகிறது</translation>
 <translation id="6305205051461490394"><ph name="URL" />ஐ அடையமுடியவில்லை.</translation>
 <translation id="6321917430147971392">உங்கள் DNS அமைப்புகளைச் சரிபார்க்கவும்</translation>
+<translation id="6322182122604171028">Windows Helloவைப் பயன்படுத்த இயலவில்லை</translation>
 <translation id="6328639280570009161">நெட்வொர்க் யூகத்தை முடக்க முயலவும்</translation>
 <translation id="6328784461820205019">"உங்கள் இணைப்பு தனிப்பட்டது அல்ல" அல்லது "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" அல்லது "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" அல்லது "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" அல்லது "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" அல்லது "SSL சான்றிதழ் பிழை"</translation>
 <translation id="6328786501058569169">இது ஏமாற்றக்கூடிய தளம்</translation>
@@ -1009,6 +1017,7 @@
 <translation id="6433490469411711332">தொடர்புத் தகவலை மாற்று</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> இணைக்க மறுத்தது.</translation>
 <translation id="6434309073475700221">நிராகரி</translation>
+<translation id="6435221585574090192">உங்கள் நிர்வாகியுடன் Chrome Enterprise Threat Protection கொடியிட்டுள்ள பாதுகாப்பு தொடர்பான செயல்பாடுகளின் தரவைப் பகிரும். இவற்றில் பக்க URLகள், கோப்பின் பெயரும் தரவுத்தகவலும், உங்கள் சாதன மற்றும் Chrome பயனர்பெயர் ஆகியவை அடங்கும்.</translation>
 <translation id="6440503408713884761">புறக்கணிக்கப்பட்டது</translation>
 <translation id="6446163441502663861">Kahu (என்வலப்)</translation>
 <translation id="6446608382365791566">மேலும் தகவலைச் சேர்க்கவும்</translation>
@@ -1053,6 +1062,7 @@
 <translation id="6671697161687535275">Chromium இலிருந்து படிவப் பரிந்துரையை அகற்றவா?</translation>
 <translation id="6685834062052613830">வெளியேறி, அமைப்பை முடிக்கவும்</translation>
 <translation id="6689271823431384964">நீங்கள் உள்நுழைந்துள்ளதால் Google கணக்கில் உங்கள் கார்டு விவரங்களைச் சேமிக்கும் விருப்பத்தை Chrome வழங்குகிறது. இதை நீங்கள் அமைப்புகளில் மாற்றலாம். கார்டு உரிமையாளரின் பெயர் உங்கள் கணக்கிலிருந்து பெறப்படுகிறது.</translation>
+<translation id="6707256370811247129">Chromeமில் நீங்கள் பதிவேற்றும் அல்லது பதிவிறக்கும் கோப்புகளையும் தற்காலிக சேமிப்பின் உள்ளடக்கங்களையும் ஸ்கேன் செய்யும்.</translation>
 <translation id="6710213216561001401">முந்தையது</translation>
 <translation id="6710594484020273272">&lt;தேடல் வார்த்தையை உள்ளிடுக&gt;</translation>
 <translation id="671076103358959139">பதிவு டோக்கன்:</translation>
@@ -1071,6 +1081,7 @@
 <translation id="681021252041861472">அவசியமானவை</translation>
 <translation id="6810899417690483278">தனிப்பயனாக்கல் ஐடி</translation>
 <translation id="6825578344716086703"><ph name="DOMAIN" />க்குச் செல்ல முயற்சி செய்தீர்கள். ஆனால் சேவையகமானது வலிமையற்ற கையொப்ப அல்காரிதமை (SHA-1 போன்றது) பயன்படுத்தி, கையொப்பமிடப்பட்ட சான்றிதழை வழங்கியது. அதாவது, சேவையகம் வழங்கிய பாதுகாப்பு அனுமதிச் சான்றுகள் போலியானதாக்கப்பட்டிருக்கலாம், மேலும் அந்தச் சேவையகம் நீங்கள் எதிர்பார்த்த (ஹேக்கருடன் தகவல் பரிமாற்றம் செய்திருக்கக்கூடும்) சேவையகமாக இல்லாமலிருக்கலாம்.</translation>
+<translation id="6826370046007623921">தரவு இழப்புத் தடுப்பு</translation>
 <translation id="6831043979455480757">மொழிபெயர்</translation>
 <translation id="6839929833149231406">பரப்பு</translation>
 <translation id="6852204201400771460">ஆப்ஸை ரெஃப்ரெஷ் செய்யவா?</translation>
@@ -1217,6 +1228,7 @@
 <translation id="7542995811387359312">இந்தப் படிவம் பாதுகாப்பான இணைப்பைப் பயன்படுத்தாத காரணத்தால், தானியங்கு கடன் அட்டை நிரப்புதல் முடக்கப்பட்டிருக்கிறது.</translation>
 <translation id="7548892272833184391">இணைப்புப் பிழைகளைச் சரிசெய்யவும்</translation>
 <translation id="7549584377607005141">சரியாக காண்பிக்கப்படுவதற்கு நீங்கள் ஏற்கனவே உள்ளிட்ட தரவு இந்த இணையப்பக்கத்திற்கு தேவைப்படுகிறது. இந்த தரவை நீங்கள் மீண்டும் அனுப்பலாம், ஆனால் அவ்வாறு செய்வதனால் இந்தப் பக்கம் ஏற்கனவே செயற்படுத்திய எல்லாச் செயலையும் மீண்டும் செய்வீர்கள்.</translation>
+<translation id="7550637293666041147">உங்கள் சாதன மற்றும் Chrome பயனர்பெயர்</translation>
 <translation id="7552846755917812628">பின்வரும் உதவிக் குறிப்புகளைச் செய்து பார்க்கவும்:</translation>
 <translation id="7554791636758816595">புதிய தாவல்</translation>
 <translation id="7564049878696755256"><ph name="ORG_NAME" /> கணக்கிற்கான அணுகலை நீங்கள் இழக்கக்கூடும் அல்லது அடையாளத் திருட்டை எதிர்கொள்ளக்கூடும். இப்போதே உங்கள் கடவுச்சொல்லை மாற்றும்படி Chrome பரிந்துரைக்கிறது.</translation>
@@ -1231,6 +1243,7 @@
 <translation id="7610193165460212391"><ph name="VALUE" /> என்ற மதிப்பு வரம்பை மீறியுள்ளது.</translation>
 <translation id="7613889955535752492">காலாவதியாவது: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">உங்கள் Google கணக்கு கடவுச்சொல்லின் மற்றொரு பதிப்பைப் பயன்படுத்தி குறியாக்கப்பட்ட தரவு உங்களிடம் ஏற்கனவே உள்ளது. கீழே அதை உள்ளிடுக.</translation>
+<translation id="7625784245512586808">Chrome Enterprise Threat Protection</translation>
 <translation id="7633909222644580952">செயல்திறன் தரவுகள் &amp; சிதைவு அறிக்கைகள்</translation>
 <translation id="7637571805876720304">Chromium இலிருந்து கிரெடிட் கார்டை அகற்றவா?</translation>
 <translation id="7638605456503525968">சீரியல் போர்ட்டுகள்</translation>
@@ -1341,6 +1354,7 @@
 <translation id="8211406090763984747">இணைப்பு பாதுகாப்பானது</translation>
 <translation id="8218327578424803826">ஒதுக்கிய இருப்பிடம்:</translation>
 <translation id="8220146938470311105">C7/C6 (என்வலப்)</translation>
+<translation id="8220639454292072926">நிறுவன அறிக்கையளித்தல்</translation>
 <translation id="8225771182978767009">இந்தக் கம்ப்யூட்டரை அமைத்த நபர் இந்தத் தளத்தைத் தடுக்கும்படி தேர்வுசெய்துள்ளார்.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">புதிய மறைநிலைத் தாவலில் பக்கத்தைத் திறக்கவும்</translation>
@@ -1423,6 +1437,7 @@
 <translation id="8740359287975076522"><ph name="HOST_NAME" />’s &lt;abbr id="dnsDefinition"&gt;DNS முகவரியைக்&lt;/abbr&gt; கண்டறிய முடியவில்லை. சிக்கலை ஆய்வு செய்கிறது.</translation>
 <translation id="874846938927089722">ஏற்கப்படும் கிரெடிட் மற்றும் ப்ரீபெய்டு கார்டுகள்</translation>
 <translation id="874918643257405732">இந்தத் தாவலைப் புக்மார்க் செய்யும்</translation>
+<translation id="8751426954251315517">பிறகு மீண்டும் முயலவும்</translation>
 <translation id="8759274551635299824">கார்டு காலாவதியாகிவிட்டது</translation>
 <translation id="8761567432415473239">Google பாதுகாப்பான தேடல், <ph name="SITE" /> இல் சமீபத்தில் <ph name="BEGIN_LINK" />தீங்கான நிரல்களைக் கண்டறிந்தது<ph name="END_LINK" />.</translation>
 <translation id="8763927697961133303">USB சாதனம்</translation>
@@ -1487,6 +1502,7 @@
 <translation id="9080712759204168376">ஆர்டர் பற்றிய சுருக்கவிவரம்</translation>
 <translation id="9089260154716455634">Off-Hours கொள்கை:</translation>
 <translation id="9095388113577226029">மேலும் மொழிகள்...</translation>
+<translation id="9098981495403789647">உலாவியில் Chrome Enterprise Threat Protectionனை உங்கள் நிர்வாகி இயக்கியுள்ளார். உங்களின் சில தரவை Chrome Enterprise Threat Protectionனால் அணுக முடியும்.</translation>
 <translation id="9103872766612412690">வழக்கமாக, <ph name="SITE" /> உங்கள் தகவலைப் பாதுகாப்பதற்காக என்க்ரிப்ஷனைப் பயன்படுத்துகிறது.
 இந்த முறை <ph name="SITE" /> உடன் இணைவதற்கு Chromium முயற்சித்தபோது வழக்கத்திற்கு மாறான, தவறான நற்சான்றிதழ்களை இணையதளம் வழங்கியது. தாக்குபவர் தன்னை <ph name="SITE" /> ஆகக் காட்ட முயற்சிக்கும் போது அல்லது இணைப்பை வைஃபை உள்நுழைவுத் திரை குறுக்கிடும் போது இது ஏற்படலாம். இருப்பினும், தரவு எதுவும் பரிமாற்றப்படுவதற்கு முன் Chromium இணைப்பை நிறுத்தியதால் உங்கள் தகவல் பாதுகாப்பாகவே இருக்கிறது.</translation>
 <translation id="9106062320799175032">பில்லிங் முகவரியைச் சேர்க்கவும்</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 7a6f858b..d9d7659 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -169,6 +169,7 @@
 <translation id="1734878702283171397">సిస్టమ్ నిర్వాహకుడిని సంప్రదించి ప్రయత్నించండి.</translation>
 <translation id="1740951997222943430">చెల్లుబాటు అయ్యే గడువు ముగింపు నెలను నమోదు చేయండి</translation>
 <translation id="1743520634839655729">తర్వాతిసారి మరింత వేగంగా చెల్లించడానికి, మీ కార్డ్, పేరు మరియు బిల్లింగ్ చిరునామాను మీ Google ఖాతాకు మరియు ఈ పరికరానికి సేవ్ చేయండి.</translation>
+<translation id="1743570585616704562">గుర్తించలేదు</translation>
 <translation id="1745880797583122200">మీ బ్రౌజర్ నిర్వహించబడుతోంది</translation>
 <translation id="17513872634828108">తెరిచిన ట్యాబ్‍లు</translation>
 <translation id="1753706481035618306">పేజీ సంఖ్య</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 71d157bf..3a2cd861 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"ซอฟต์แวร์ในคอมพิวเตอร์ของคุณทำให้ Chrome เชื่อมต่อกับเว็บอย่างปลอดภัยไม่ได้" (คอมพิวเตอร์ที่ใช้ระบบปฏิบัติการ Windows เท่านั้น)</translation>
 <translation id="1294154142200295408">บรรทัดคำสั่งรูปแบบต่างๆ</translation>
 <translation id="129553762522093515">เพิ่งปิด</translation>
+<translation id="1298536327547837046">การสแกนหามัลแวร์</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />ลองล้างคุกกี้<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">ฟีเจอร์ที่เลิกใช้งานแล้ว</translation>
 <translation id="1320233736580025032">Prc1 (ซองจดหมาย)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">ลองติดต่อผู้ดูแลระบบ</translation>
 <translation id="1740951997222943430">ป้อนเดือนที่หมดอายุที่ถูกต้อง</translation>
 <translation id="1743520634839655729">เพื่อความรวดเร็วในการชำระเงินครั้งถัดไป โปรดบันทึกบัตร ชื่อ และที่อยู่สำหรับการเรียกเก็บเงินไว้ในบัญชี Google และในอุปกรณ์นี้</translation>
+<translation id="1743570585616704562">ไม่รู้จัก</translation>
 <translation id="1745880797583122200">เบราว์เซอร์ของคุณมีการจัดการ</translation>
 <translation id="17513872634828108">แท็บที่เปิดอยู่</translation>
 <translation id="1753706481035618306">เลขหน้า</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">ยกเลิกการชำระเงิน</translation>
 <translation id="3207960819495026254">บุ๊กมาร์กแล้ว</translation>
 <translation id="3209034400446768650">อาจมีการเรียกเก็บเงินในหน้านี้</translation>
+<translation id="3215092763954878852">ใช้ WebAuthn ไม่ได้</translation>
 <translation id="3225919329040284222">เซิร์ฟเวอร์แสดงใบรับรองที่ไม่ตรงกับการคาดการณ์ที่มีอยู่ การคาดการณ์เหล่านี้มีอยู่ในบางเว็บไซต์ที่มีการรักษาความปลอดภัยสูงเพื่อปกป้องคุณ</translation>
 <translation id="3226128629678568754">กดปุ่มโหลดซ้ำเพื่อส่งซ้ำข้อมูลที่จำเป็นในการโหลดหน้าเว็บ</translation>
 <translation id="3227137524299004712">ไมโครโฟน</translation>
@@ -561,6 +564,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{ไม่มี}=1{จากเว็บไซต์ 1 แห่ง }other{จากเว็บไซต์ #  แห่ง }}</translation>
 <translation id="397105322502079400">กำลังคำนวณ...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> ถูกบล็อก</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ได้เปิดใช้ฟีเจอร์ป้องกันภัยคุกคามของ Chrome Enterprise ในเบราว์เซอร์ ฟีเจอร์ป้องกันภัยคุกคามของ Chrome Enterprise มีสิทธิ์เข้าถึงข้อมูลบางส่วนของคุณ</translation>
 <translation id="3987940399970879459">ไม่ถึง 1 MB</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{มีหน้าเว็บ 1 หน้าใกล้ๆ}other{มีหน้าเว็บ # หน้าใกล้ๆ}}</translation>
 <translation id="4030383055268325496">&amp;เลิกทำการเพิ่ม</translation>
@@ -629,6 +633,7 @@
 <translation id="4277028893293644418">รีเซ็ตรหัสผ่าน</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" /> ของคุณจัดการโดย <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{บันทึกบัตรนี้ลงในบัญชี Google ของคุณแล้ว}other{บันทึกบัตรเหล่านี้ลงในบัญชี Google ของคุณแล้ว}}</translation>
+<translation id="428847186335018806">สแกนไฟล์ที่คุณดาวน์โหลดหรืออัปโหลดใน Chrome</translation>
 <translation id="42981349822642051">ขยาย</translation>
 <translation id="4302965934281694568">Chou3 (ซองจดหมาย)</translation>
 <translation id="4305817255990598646">สลับ</translation>
@@ -667,6 +672,7 @@
 <translation id="4506176782989081258">ข้อผิดพลาดในการตรวจสอบ: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">ติดต่อผู้ดูแลระบบ</translation>
 <translation id="450710068430902550">การแชร์กับผู้ดูแลระบบ</translation>
+<translation id="4508814173490746936">ใช้ Touch ID ไม่ได้</translation>
 <translation id="4510487217173779431">Chou4 (ซองจดหมาย)</translation>
 <translation id="4515275063822566619">ข้อมูลบัตรและที่อยู่มาจาก Chrome และบัญชี Google (<ph name="ACCOUNT_EMAIL" />) คุณสามารถจัดการข้อมูลเหล่านี้ใน<ph name="BEGIN_LINK" />การตั้งค่า<ph name="END_LINK" /></translation>
 <translation id="4517607026994743406">Comm-10 (ซองจดหมาย)</translation>
@@ -762,6 +768,7 @@
 <translation id="5045550434625856497">รหัสผ่านไม่ถูกต้อง</translation>
 <translation id="5056549851600133418">บทความสำหรับคุณ</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(ใช้งานอยู่ 1 รายการ)}other{(ใช้งานอยู่ # รายการ)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />ตรวจสอบที่อยู่พร็อกซี<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">ใบรับรองของเซิร์ฟเวอร์ไม่สามารถใช้ได้ในขณะนี้</translation>
 <translation id="5087580092889165836">เพิ่มบัตร</translation>
@@ -990,6 +997,7 @@
 <translation id="6302269476990306341">Google Assistant ใน Chrome หยุดทำงาน</translation>
 <translation id="6305205051461490394">ไม่สามารถเข้าถึง <ph name="URL" /></translation>
 <translation id="6321917430147971392">ตรวจสอบการตั้งค่า DNS</translation>
+<translation id="6322182122604171028">ใช้ Windows Hello ไม่ได้</translation>
 <translation id="6328639280570009161">ลองปิดการคาดคะเนเครือข่าย</translation>
 <translation id="6328784461820205019">"การเชื่อมต่อของคุณไม่เป็นส่วนตัว" หรือ "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" หรือ "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" หรือ "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" หรือ "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" หรือ "ข้อผิดพลาดของใบรับรอง SSL"</translation>
 <translation id="6328786501058569169">เว็บไซต์นี้มีการหลอกลวง</translation>
@@ -1013,6 +1021,7 @@
 <translation id="6433490469411711332">แก้ไขข้อมูลติดต่อ</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> ปฏิเสธการเชื่อมต่อ</translation>
 <translation id="6434309073475700221">ทิ้ง</translation>
+<translation id="6435221585574090192">แชร์ข้อมูลให้ผู้ดูแลระบบทราบเกี่ยวกับการดำเนินการด้านความปลอดภัยที่ฟีเจอร์ป้องกันภัยคุกคามของ Chrome Enterprise แจ้งว่าไม่เหมาะสม ข้อมูลดังกล่าวอาจรวมถึง URL หน้าเว็บ ชื่อไฟล์และข้อมูลเมตาของไฟล์ ชื่อผู้ใช้ในอุปกรณ์ และชื่อผู้ใช้ใน Chrome</translation>
 <translation id="6440503408713884761">ละเว้น</translation>
 <translation id="6446163441502663861">Kahu (ซองจดหมาย)</translation>
 <translation id="6446608382365791566">เพิ่มข้อมูลเพิ่มเติม</translation>
@@ -1057,6 +1066,7 @@
 <translation id="6671697161687535275">ต้องการนำคำแนะนำสำหรับแบบฟอร์มออกจาก Chromium ใช่ไหม</translation>
 <translation id="6685834062052613830">ออกจากระบบและตั้งค่าให้เสร็จสมบูรณ์</translation>
 <translation id="6689271823431384964">Chrome เสนอที่จะบันทึกบัตรลงในบัญชี Google ของคุณเพราะคุณลงชื่อเข้าใช้อยู่ คุณปรับเปลี่ยนลักษณะการทำงานนี้ได้ในการตั้งค่า ชื่อผู้ถือบัตรมาจากบัญชีของคุณ</translation>
+<translation id="6707256370811247129">สแกนเนื้อหาของแคชและไฟล์ที่คุณดาวน์โหลดหรืออัปโหลดใน Chrome</translation>
 <translation id="6710213216561001401">ก่อนหน้า</translation>
 <translation id="6710594484020273272">&lt;พิมพ์ข้อความค้นหา&gt;</translation>
 <translation id="671076103358959139">โทเค็นการลงทะเบียน:</translation>
@@ -1075,6 +1085,7 @@
 <translation id="681021252041861472">ช่องที่ต้องกรอก</translation>
 <translation id="6810899417690483278">รหัสการปรับแต่ง</translation>
 <translation id="6825578344716086703">คุณพยายามเข้าถึง <ph name="DOMAIN" /> แต่เซิร์ฟเวอร์แสดงใบรับรองที่ลงนามด้วยอัลกอริทึมลายเซ็นที่ไม่รัดกุม (เช่น SHA-1) ซึ่งหมายความว่าข้อมูลรับรองด้านความปลอดภัยที่เซิร์ฟเวอร์แสดงอาจถูกปลอมแปลงขึ้น และเซิร์ฟเวอร์ดังกล่าวอาจไม่ใช่เซิร์ฟเวอร์ที่คุณคิด (คุณอาจกำลังติดต่อกับผู้โจมตี)</translation>
+<translation id="6826370046007623921">ป้องกันข้อมูลรั่วไหล</translation>
 <translation id="6831043979455480757">แปลภาษา</translation>
 <translation id="6839929833149231406">พื้นที่</translation>
 <translation id="6852204201400771460">โหลดแอปซ้ำไหม</translation>
@@ -1221,6 +1232,7 @@
 <translation id="7542995811387359312">การป้อนหมายเลขบัตรเครดิตอัตโนมัติถูกปิดใช้งานเนื่องจากฟอร์มนี้ไม่ได้ใช้การเชื่อมต่อที่ปลอดภัย</translation>
 <translation id="7548892272833184391">แก้ไขข้อผิดพลาดในการเชื่อมต่อ</translation>
 <translation id="7549584377607005141">หน้าเว็บนี้ต้องใช้ข้อมูลที่คุณป้อนก่อนหน้านี้เพื่อให้แสดงได้อย่างถูกต้อง คุณสามารถส่งข้อมูลนี้ได้อีกครั้ง แต่การทำเช่นนั้นจะเป็นการทำสิ่งที่หน้าเว็บนี้เคยดำเนินการซ้ำอีกครั้ง</translation>
+<translation id="7550637293666041147">ชื่อผู้ใช้ของคุณในอุปกรณ์และใน Chrome</translation>
 <translation id="7552846755917812628">ลองทำตามเคล็ดลับต่อไปนี้:</translation>
 <translation id="7554791636758816595">แท็บใหม่</translation>
 <translation id="7564049878696755256">คุณอาจเข้าถึงบัญชี <ph name="ORG_NAME" /> ไม่ได้หรือถูกโจรกรรมข้อมูลประจำตัว Chrome ขอแนะนำให้เปลี่ยนรหัสผ่านตอนนี้เลย</translation>
@@ -1235,6 +1247,7 @@
 <translation id="7610193165460212391">ค่าอยู่นอกช่วง <ph name="VALUE" /></translation>
 <translation id="7613889955535752492">หมดอายุ: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">คุณมีข้อมูลที่ถูกเข้ารหัสโดยใช้รหัสผ่านบัญชี Google รูปแบบอื่นอยู่แล้ว โปรดป้อนรหัสผ่านด้านล่าง</translation>
+<translation id="7625784245512586808">การป้องกันภัยคุกคามของ Chrome Enterprise</translation>
 <translation id="7633909222644580952">ข้อมูลประสิทธิภาพและรายงานข้อขัดข้อง</translation>
 <translation id="7637571805876720304">ต้องการนำบัตรเครดิตออกจาก Chromium ใช่ไหม</translation>
 <translation id="7638605456503525968">พอร์ตอนุกรม</translation>
@@ -1345,6 +1358,7 @@
 <translation id="8211406090763984747">การเชื่อมต่อปลอดภัย</translation>
 <translation id="8218327578424803826">ตำแหน่งที่มอบหมาย:</translation>
 <translation id="8220146938470311105">C7/C6 (ซองจดหมาย)</translation>
+<translation id="8220639454292072926">การรายงานระดับองค์กร</translation>
 <translation id="8225771182978767009">ผู้ที่ตั้งค่าคอมพิวเตอร์เครื่องนี้เลือกบล็อกเว็บไซต์นี้</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">เปิดหน้าเว็บในแท็บไม่ระบุตัวตนใหม่</translation>
@@ -1428,6 +1442,7 @@
 <translation id="8740359287975076522">ไม่พบ&lt;abbr id="dnsDefinition"&gt;ที่อยู่ DNS&lt;/abbr&gt; ของ <ph name="HOST_NAME" /> กำลังวินิจฉัยปัญหา</translation>
 <translation id="874846938927089722">บัตรเครดิตและบัตรเติมเงินที่ยอมรับ</translation>
 <translation id="874918643257405732">บุ๊กมาร์กแท็บนี้</translation>
+<translation id="8751426954251315517">โปรดลองอีกครั้งในคราวหน้า</translation>
 <translation id="8759274551635299824">บัตรนี้หมดอายุแล้ว</translation>
 <translation id="8761567432415473239">Google Safe Browsing <ph name="BEGIN_LINK" />พบโปรแกรมที่เป็นอันตราย<ph name="END_LINK" />บน <ph name="SITE" /> เมื่อเร็วๆ นี้</translation>
 <translation id="8763927697961133303">อุปกรณ์ USB</translation>
@@ -1492,6 +1507,7 @@
 <translation id="9080712759204168376">สรุปการสั่งซื้อ</translation>
 <translation id="9089260154716455634">นโยบายสำหรับช่วงที่ไม่ค่อยมีการใช้งาน:</translation>
 <translation id="9095388113577226029">ภาษาเพิ่มเติม...</translation>
+<translation id="9098981495403789647">ผู้ดูแลระบบได้เปิดใช้ฟีเจอร์ป้องกันภัยคุกคามของ Chrome Enterprise ในเบราว์เซอร์ ฟีเจอร์ป้องกันภัยคุกคามของ Chrome Enterprise มีสิทธิ์เข้าถึงข้อมูลบางส่วนของคุณ</translation>
 <translation id="9103872766612412690">โดยทั่วไป <ph name="SITE" /> จะใช้การเข้ารหัสเพื่อปกป้องข้อมูลของคุณ เมื่อ Chromium พยายามเชื่อมต่อกับ <ph name="SITE" /> ในครั้งนี้ เว็บไซต์ดังกล่าวส่งข้อมูลรับรองที่ผิดปกติและไม่ถูกต้องกลับมา เหตุการณ์นี้อาจเกิดขึ้นเมื่อผู้บุกรุกพยายามปลอมเป็น <ph name="SITE" /> หรือหน้าจอการลงชื่อเข้าใช้ Wi-Fi รบกวนการเชื่อมต่อ ข้อมูลของคุณยังปลอดภัยอยู่เนื่องจาก Chromium หยุดการเชื่อมต่อก่อนมีการแลกเปลี่ยนข้อมูล</translation>
 <translation id="9106062320799175032">เพิ่มที่อยู่สำหรับการเรียกเก็บเงิน</translation>
 <translation id="9114524666733003316">กำลังยืนยันบัตร…</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 48408096..bc550255 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">Sistem yöneticisiyle iletişime geçmeyi deneyin.</translation>
 <translation id="1740951997222943430">Geçerli bir son kullanma ayı girin</translation>
 <translation id="1743520634839655729">Gelecek sefer daha hızlı ödeme yapabilmek için kartınızı, adınızı ve fatura adresinizi Google hesabınıza kaydedin.</translation>
+<translation id="1743570585616704562">Tanınmadı</translation>
 <translation id="1745880797583122200">Tarayıcınız yönetilmektedir</translation>
 <translation id="17513872634828108">Açık sekmeler</translation>
 <translation id="1753706481035618306">Sayfa numarası</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 56051a9..65c7f1f 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -71,6 +71,7 @@
 <translation id="1292701964462482250">"Програмне забезпечення на вашому комп’ютері перешкоджає веб-переглядачеві Chrome безпечно під’єднуватися до Інтернету" (лише для комп’ютерів з ОС Windows)</translation>
 <translation id="1294154142200295408">Варіанти командного рядка</translation>
 <translation id="129553762522093515">Нещодавно закриті</translation>
+<translation id="1298536327547837046">Пошук зловмисного програмного забезпечення</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Спробуйте видалити файли cookie<ph name="END_LINK" /></translation>
 <translation id="1307966114820526988">Функції не підтримуються</translation>
 <translation id="1320233736580025032">Prc1 (конверт)</translation>
@@ -167,6 +168,7 @@
 <translation id="1734878702283171397">Зв’яжіться із системним адміністратором.</translation>
 <translation id="1740951997222943430">Введіть дійсний місяць закінчення терміну дії</translation>
 <translation id="1743520634839655729">Щоб наступного разу платити швидше, збережіть дані картки, ім’я та платіжну адресу в обліковому записі Google і на цьому пристрої.</translation>
+<translation id="1743570585616704562">Не розпізнано</translation>
 <translation id="1745880797583122200">Вашим веб-переглядачем керує адміністратор</translation>
 <translation id="17513872634828108">Відкриті вкладки</translation>
 <translation id="1753706481035618306">Номер сторінки</translation>
@@ -426,6 +428,7 @@
 <translation id="320323717674993345">Скасувати оплату</translation>
 <translation id="3207960819495026254">Створено закладку</translation>
 <translation id="3209034400446768650">На сторінці може стягуватися плата</translation>
+<translation id="3215092763954878852">Не вдалося скористатися веб-автентифікацією</translation>
 <translation id="3225919329040284222">Сервер надав сертифікат, який не відповідає очікуваним вбудованим параметрам. Ці очікувані параметри встановлено для певних веб-сайтів із високим рівнем безпеки, щоб захистити вас.</translation>
 <translation id="3226128629678568754">Натисніть кнопку перезавантаження, щоб повторно надіслати дані, потрібні для завантаження сторінки.</translation>
 <translation id="3227137524299004712">Мікрофон</translation>
@@ -562,6 +565,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{Немає}=1{З 1 сайту }one{З # сайту }few{З # сайтів }many{З # сайтів }other{З # сайту }}</translation>
 <translation id="397105322502079400">Обчислення...</translation>
 <translation id="3973234410852337861">Хост <ph name="HOST_NAME" /> заблокований</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> вмикає Захист від загроз Chrome Enterprise у вашому веб-переглядачі. Захист від загроз має доступ до деяких ваших даних.</translation>
 <translation id="3987940399970879459">Менше 1 МБ</translation>
 <translation id="40103911065039147">{URL_count,plural, =1{1 веб-сторінка поруч}one{# веб-сторінка поруч}few{# веб-сторінки поруч}many{# веб-сторінок поруч}other{# веб-сторінки поруч}}</translation>
 <translation id="4030383055268325496">&amp;Відмінити додавання</translation>
@@ -630,6 +634,7 @@
 <translation id="4277028893293644418">Скинути пароль</translation>
 <translation id="4279811152705618813">Вашим пристроєм <ph name="DEVICE_TYPE" /> керує домен <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Цю картку збережено у вашому обліковому записі Google}one{Ці картки збережено у вашому обліковому записі Google}few{Ці картки збережено у вашому обліковому записі Google}many{Ці картки збережено у вашому обліковому записі Google}other{Ці картки збережено у вашому обліковому записі Google}}</translation>
+<translation id="428847186335018806">Перевіряти файли, які ви завантажуєте або додаєте в Chrome.</translation>
 <translation id="42981349822642051">Розгорнути</translation>
 <translation id="4302965934281694568">Chou3 (конверт)</translation>
 <translation id="4305817255990598646">Перейти</translation>
@@ -668,6 +673,7 @@
 <translation id="4506176782989081258">Помилка перевірки: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">зв’язатися із системним адміністратором</translation>
 <translation id="450710068430902550">Надання інформації адміністратору</translation>
+<translation id="4508814173490746936">Не вдалося скористатися Touch ID</translation>
 <translation id="4510487217173779431">Chou4 (конверт)</translation>
 <translation id="4515275063822566619">Дані картки та список адрес містяться в Chrome і вашому обліковому записі Google (<ph name="ACCOUNT_EMAIL" />). Ними можна керувати в <ph name="BEGIN_LINK" />Налаштуваннях<ph name="END_LINK" />.</translation>
 <translation id="4517607026994743406">Comm-10 (конверт)</translation>
@@ -763,6 +769,7 @@
 <translation id="5045550434625856497">Неправильний пароль</translation>
 <translation id="5056549851600133418">Статті для вас</translation>
 <translation id="5068524481479508725">A10</translation>
+<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(використовується 1 файл)}one{(використовується # файл)}few{(використовуються # файли)}many{(використовуються # файлів)}other{(використовуються # файлу)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />перевірити адресу проксі-сервера<ph name="END_LINK" /></translation>
 <translation id="5087286274860437796">Сертифікат сервера зараз недійсний.</translation>
 <translation id="5087580092889165836">Додати картку</translation>
@@ -991,6 +998,7 @@
 <translation id="6302269476990306341">Припинення роботи Google Асистента в Chrome</translation>
 <translation id="6305205051461490394">Сторінка <ph name="URL" /> недоступна.</translation>
 <translation id="6321917430147971392">Перевірте налаштування DNS</translation>
+<translation id="6322182122604171028">Не вдалося скористатися Windows Hello</translation>
 <translation id="6328639280570009161">Спробуйте вимкнути прогнозування мережі.</translation>
 <translation id="6328784461820205019">"З’єднання не конфіденційне", "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;", "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;", "&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;" або "Помилка сертифіката SSL"</translation>
 <translation id="6328786501058569169">Це оманливий сайт</translation>
@@ -1014,6 +1022,7 @@
 <translation id="6433490469411711332">Змінити контактні дані</translation>
 <translation id="6433595998831338502">Хост <ph name="HOST_NAME" /> відхилив запит на з’єднання.</translation>
 <translation id="6434309073475700221">Скасувати</translation>
+<translation id="6435221585574090192">Діліться з адміністратором даними про події системи безпеки, про які повідомляє Захист від загроз Chrome Enterprise. Це можуть бути URL-адреси сторінок, назви й метадані файлів, імена користувачів пристрою та Chrome.</translation>
 <translation id="6440503408713884761">Ігнорується</translation>
 <translation id="6446163441502663861">Kahu (конверт)</translation>
 <translation id="6446608382365791566">Додати більше інформації</translation>
@@ -1058,6 +1067,7 @@
 <translation id="6671697161687535275">Видалити пропозицію автозаповнення форм із Chromium?</translation>
 <translation id="6685834062052613830">Вийдіть з облікового запису та завершіть процедуру налаштування</translation>
 <translation id="6689271823431384964">Chrome пропонує вам зберегти картки в обліковому записі Google, оскільки ви ввійшли в нього. Це можна змінити в налаштуваннях. Ім'я власника картки взято з вашого облікового запису.</translation>
+<translation id="6707256370811247129">Перевіряти вміст кешу та файлів, які ви завантажуєте або додаєте в Chrome.</translation>
 <translation id="6710213216561001401">Попереднє</translation>
 <translation id="6710594484020273272">&lt;Введіть пошуковий термін&gt;</translation>
 <translation id="671076103358959139">Маркер реєстрації:</translation>
@@ -1076,6 +1086,7 @@
 <translation id="681021252041861472">Обов’язкове поле</translation>
 <translation id="6810899417690483278">Ідентифікатор налаштування</translation>
 <translation id="6825578344716086703">Ви спробували зв’язатися з доменом <ph name="DOMAIN" />, проте сервер надав сертифікат, підписаний із використанням слабкого алгоритму підпису (як-от SHA-1). Це означає, що облікові дані безпеки, надані сервером, можуть бути сфальсифікованими, а сервер – не тим, який вам потрібен (ви можете передавати свої дані зловмиснику).</translation>
+<translation id="6826370046007623921">Запобігання витокам даних</translation>
 <translation id="6831043979455480757">Перекласти</translation>
 <translation id="6839929833149231406">Область</translation>
 <translation id="6852204201400771460">Перезапустити додаток?</translation>
@@ -1222,6 +1233,7 @@
 <translation id="7542995811387359312">Автоматичне заповнення кредитної картки вимкнено, оскільки ця форма не використовує безпечне з'єднання.</translation>
 <translation id="7548892272833184391">Як виправити помилки з’єднання</translation>
 <translation id="7549584377607005141">Для належного відображення цій веб-сторінці потрібні введені вами раніше дані. Можна ще раз надіслати дані, однак зробивши це, ви повторите всі дії, які ця сторінка виконувала раніше.</translation>
+<translation id="7550637293666041147">Імена користувачів для пристрою та Chrome</translation>
 <translation id="7552846755917812628">Виконайте вказівки нижче.</translation>
 <translation id="7554791636758816595">Нова вкладка</translation>
 <translation id="7564049878696755256">Ви можете втратити доступ до облікового запису, який вам надає <ph name="ORG_NAME" />, або хтось може викрасти вашу особисту інформацію. Chrome радить змінити пароль.</translation>
@@ -1236,6 +1248,7 @@
 <translation id="7610193165460212391">Значення за межами діапазону <ph name="VALUE" />.</translation>
 <translation id="7613889955535752492">Діє до: <ph name="EXPIRATION_MONTH" />.<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="7615602087246926389">Ви вже зашифрували дані, використовуючи іншу версію пароля облікового запису Google. Введіть його нижче.</translation>
+<translation id="7625784245512586808">Захист від загроз Chrome Enterprise</translation>
 <translation id="7633909222644580952">Дані про ефективність і звіти про збої</translation>
 <translation id="7637571805876720304">Видалити дані кредитної картки з Chromium?</translation>
 <translation id="7638605456503525968">Послідовні порти</translation>
@@ -1346,6 +1359,7 @@
 <translation id="8211406090763984747">З’єднання безпечне</translation>
 <translation id="8218327578424803826">Указане місцезнаходження:</translation>
 <translation id="8220146938470311105">C7/C6 (конверт)</translation>
+<translation id="8220639454292072926">Звіти для підприємств</translation>
 <translation id="8225771182978767009">Користувач, який налаштував комп’ютер, заблокував цей сайт.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8238581221633243064">Відкрити сторінку в новій анонімній вкладці</translation>
@@ -1429,6 +1443,7 @@
 <translation id="8740359287975076522">&lt;abbr id="dnsDefinition"&gt;Адресу DNS&lt;/abbr&gt; хосту <ph name="HOST_NAME" /> не знайдено. Діагностика проблеми.</translation>
 <translation id="874846938927089722">Кредитні та передплачені картки, які приймаються до оплати</translation>
 <translation id="874918643257405732">Зробити закладку для цієї вкладки</translation>
+<translation id="8751426954251315517">Повторіть спробу пізніше</translation>
 <translation id="8759274551635299824">Термін дії цієї картки минув</translation>
 <translation id="8761567432415473239">Функція безпечного перегляду від Google нещодавно <ph name="BEGIN_LINK" />виявила шкідливі програми<ph name="END_LINK" /> на сайті <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Пристрій USB</translation>
@@ -1493,6 +1508,7 @@
 <translation id="9080712759204168376">Підсумок замовлення</translation>
 <translation id="9089260154716455634">Правило неробочого часу:</translation>
 <translation id="9095388113577226029">Інші мови…</translation>
+<translation id="9098981495403789647">Ваш адміністратор увімкнув Захист від загроз Chrome Enterprise у веб-переглядачі. Захист від загроз має доступ до деяких ваших даних.</translation>
 <translation id="9103872766612412690">Веб-сайт <ph name="SITE" /> зазвичай використовує шифрування для захисту вашої інформації. Під час цієї спроби Chromium під’єднатися до сторінки <ph name="SITE" /> з неї отримано незвичні й неправильні облікові дані. Це може статися, коли зловмисник намагається видавати себе за веб-сайт <ph name="SITE" /> або з’єднання перервано екраном входу Wi-Fi. Ваша інформація залишається захищеною, оскільки Chromium припинив з’єднання до того, як почався обмін будь-якими даними.</translation>
 <translation id="9106062320799175032">Додайте платіжну адресу</translation>
 <translation id="9114524666733003316">Підтверджуються дані картки…</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 53f5c4eb..6f77453 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">Thử liên hệ với quản trị viên hệ thống.</translation>
 <translation id="1740951997222943430">Nhập tháng hết hạn hợp lệ</translation>
 <translation id="1743520634839655729">Để thanh toán nhanh hơn vào lần tới, hãy lưu địa chỉ thanh toán, tên và thẻ vào thiết bị này và Tài khoản Google của bạn.</translation>
+<translation id="1743570585616704562">Không nhận dạng được</translation>
 <translation id="1745880797583122200">Trình duyệt của bạn được quản lý</translation>
 <translation id="17513872634828108">Tab đang mở</translation>
 <translation id="1753706481035618306">Số trang</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 1412536..a329fbf 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">请尝试联系系统管理员。</translation>
 <translation id="1740951997222943430">请输入有效的失效月份</translation>
 <translation id="1743520634839655729">若想在下次购物时更快捷地付款,请将您的付款卡信息、姓名和帐单邮寄地址保存到您的 Google 帐号名下以及这台设备中。</translation>
+<translation id="1743570585616704562">无法识别</translation>
 <translation id="1745880797583122200">您的浏览器受管理</translation>
 <translation id="17513872634828108">目前打开的标签页</translation>
 <translation id="1753706481035618306">页码</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 86fc32b..fd05ccf 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -167,6 +167,7 @@
 <translation id="1734878702283171397">建議您與系統管理員聯絡。</translation>
 <translation id="1740951997222943430">請輸入有效的到期月份</translation>
 <translation id="1743520634839655729">只要將你的卡片資訊、姓名與帳單地址儲存到你的 Google 帳戶中和這部裝置上,下次即可更快完成付款程序。</translation>
+<translation id="1743570585616704562">無法識別</translation>
 <translation id="1745880797583122200">你的瀏覽器受到管理</translation>
 <translation id="17513872634828108">開啟的分頁</translation>
 <translation id="1753706481035618306">頁碼</translation>
diff --git a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc
index 597d0ebf..a927f5a 100644
--- a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc
+++ b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc
@@ -15,6 +15,7 @@
 #include "components/subresource_filter/content/browser/subresource_filter_observer_manager.h"
 #include "components/subresource_filter/core/browser/subresource_filter_constants.h"
 #include "components/subresource_filter/core/common/time_measurements.h"
+#include "content/public/browser/global_routing_id.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
@@ -186,21 +187,16 @@
   if (!observer_manager)
     return;
 
-  // TODO(crbug.com/843646): Use an API that NavigationHandle supports rather
-  // than trying to infer what the NavigationHandle is doing.
-  content::RenderFrameHost* starting_rfh =
-      navigation_handle()->GetWebContents()->UnsafeFindFrameByFrameTreeNodeId(
-          navigation_handle()->GetFrameTreeNodeId());
-  if (!starting_rfh) {
-    // TODO(arthursonzogni): Remove this block, this must not happen.
-    // See https://crbug.com/904248.
-    observer_manager->NotifySubframeNavigationEvaluated(
-        navigation_handle(), load_policy_, false /* is_ad_subframe */);
-    return;
-  }
+  content::GlobalFrameRoutingId starting_rfh_id =
+      navigation_handle()->GetPreviousRenderFrameHostId();
+  content::RenderFrameHost* starting_rfh = content::RenderFrameHost::FromID(
+      starting_rfh_id.child_id, starting_rfh_id.frame_routing_id);
 
-  bool is_ad_subframe =
-      delegate_->CalculateIsAdSubframe(starting_rfh, load_policy_);
+  // |starting_rfh| can be null if the navigation started from a non live
+  // RenderFrameHost. For instance when a renderer process crashed.
+  // See https://crbug.com/904248
+  bool is_ad_subframe = starting_rfh && delegate_->CalculateIsAdSubframe(
+                                            starting_rfh, load_policy_);
 
   observer_manager->NotifySubframeNavigationEvaluated(
       navigation_handle(), load_policy_, is_ad_subframe);
diff --git a/content/app/strings/translations/content_strings_ar.xtb b/content/app/strings/translations/content_strings_ar.xtb
index 77d54b7..7005047 100644
--- a/content/app/strings/translations/content_strings_ar.xtb
+++ b/content/app/strings/translations/content_strings_ar.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">يُرجى مطابقة التنسيق المطلوب.</translation>
 <translation id="7118469954320184356">لا يتوفر أي وصف.</translation>
 <translation id="7139483182332611405">تمهيد</translation>
+<translation id="7214187073215825913">معلومات المحتوى</translation>
 <translation id="7263440858009898357">يُرجى تحديد عنصر من القائمة.</translation>
 <translation id="727747134524199931">عنوان العمود</translation>
 <translation id="7320576522385648310">التخزين مؤقتًا</translation>
diff --git a/content/app/strings/translations/content_strings_bg.xtb b/content/app/strings/translations/content_strings_bg.xtb
index d7533f98..35a649ad 100644
--- a/content/app/strings/translations/content_strings_bg.xtb
+++ b/content/app/strings/translations/content_strings_bg.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Моля, спазвайте изисквания формат.</translation>
 <translation id="7118469954320184356">Няма описание.</translation>
 <translation id="7139483182332611405">предисловие</translation>
+<translation id="7214187073215825913">информация за съдържанието</translation>
 <translation id="7263440858009898357">Моля, изберете елемент в списъка.</translation>
 <translation id="727747134524199931">заглавка на колона</translation>
 <translation id="7320576522385648310">буферира се</translation>
diff --git a/content/app/strings/translations/content_strings_ca.xtb b/content/app/strings/translations/content_strings_ca.xtb
index ef4756db..e3716e60 100644
--- a/content/app/strings/translations/content_strings_ca.xtb
+++ b/content/app/strings/translations/content_strings_ca.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Feu servir el format sol·licitat.</translation>
 <translation id="7118469954320184356">No hi ha cap descripció disponible.</translation>
 <translation id="7139483182332611405">prefaci</translation>
+<translation id="7214187073215825913">informació sobre el contingut</translation>
 <translation id="7263440858009898357">Seleccioneu un element de la llista.</translation>
 <translation id="727747134524199931">capçalera de columna</translation>
 <translation id="7320576522385648310">s'estan emmagatzemant dades a la memòria intermèdia</translation>
diff --git a/content/app/strings/translations/content_strings_cs.xtb b/content/app/strings/translations/content_strings_cs.xtb
index 0b5826c..9d952e7 100644
--- a/content/app/strings/translations/content_strings_cs.xtb
+++ b/content/app/strings/translations/content_strings_cs.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Zadejte hodnotu, která odpovídá požadovanému formátu.</translation>
 <translation id="7118469954320184356">Popis není k dispozici.</translation>
 <translation id="7139483182332611405">předmluva</translation>
+<translation id="7214187073215825913">informace o obsahu</translation>
 <translation id="7263440858009898357">Vyberte prosím v seznamu některou položku.</translation>
 <translation id="727747134524199931">záhlaví sloupce</translation>
 <translation id="7320576522385648310">načítání do vyrovnávací paměti</translation>
diff --git a/content/app/strings/translations/content_strings_da.xtb b/content/app/strings/translations/content_strings_da.xtb
index b3991721..07d989b 100644
--- a/content/app/strings/translations/content_strings_da.xtb
+++ b/content/app/strings/translations/content_strings_da.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Find et match til det anmodede format.</translation>
 <translation id="7118469954320184356">Der er ingen beskrivelse.</translation>
 <translation id="7139483182332611405">forord</translation>
+<translation id="7214187073215825913">oplysninger om indholdet</translation>
 <translation id="7263440858009898357">Vælg et punkt på listen.</translation>
 <translation id="727747134524199931">kolonneoverskrift</translation>
 <translation id="7320576522385648310">gemmer i buffer</translation>
diff --git a/content/app/strings/translations/content_strings_de.xtb b/content/app/strings/translations/content_strings_de.xtb
index eab91de..bca5269 100644
--- a/content/app/strings/translations/content_strings_de.xtb
+++ b/content/app/strings/translations/content_strings_de.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Ihre Eingabe muss mit dem geforderten Format übereinstimmen.</translation>
 <translation id="7118469954320184356">Keine Beschreibung verfügbar.</translation>
 <translation id="7139483182332611405">Vorbemerkung</translation>
+<translation id="7214187073215825913">Informationen zu Inhalten</translation>
 <translation id="7263440858009898357">Wählen Sie ein Element in der Liste aus.</translation>
 <translation id="727747134524199931">Spaltenüberschrift</translation>
 <translation id="7320576522385648310">Wird zwischengespeichert</translation>
diff --git a/content/app/strings/translations/content_strings_el.xtb b/content/app/strings/translations/content_strings_el.xtb
index a8fd8db1..2b88ed2ab 100644
--- a/content/app/strings/translations/content_strings_el.xtb
+++ b/content/app/strings/translations/content_strings_el.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Αντιστοιχίστε τη ζητούμενη μορφή.</translation>
 <translation id="7118469954320184356">Δεν υπάρχει διαθέσιμη περιγραφή.</translation>
 <translation id="7139483182332611405">πρόλογος</translation>
+<translation id="7214187073215825913">πληροφορίες για το περιεχόμενο</translation>
 <translation id="7263440858009898357">Επιλέξτε ένα στοιχείο από τη λίστα.</translation>
 <translation id="727747134524199931">κεφαλίδα στήλης</translation>
 <translation id="7320576522385648310">αποθήκευση στην προσωρινή μνήμη</translation>
diff --git a/content/app/strings/translations/content_strings_es-419.xtb b/content/app/strings/translations/content_strings_es-419.xtb
index 6800e77..1d17840 100644
--- a/content/app/strings/translations/content_strings_es-419.xtb
+++ b/content/app/strings/translations/content_strings_es-419.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Haz coincidir el formato solicitado.</translation>
 <translation id="7118469954320184356">No hay una descripción disponible.</translation>
 <translation id="7139483182332611405">prefacio</translation>
+<translation id="7214187073215825913">información de contenido</translation>
 <translation id="7263440858009898357">Selecciona un elemento de la lista</translation>
 <translation id="727747134524199931">encabezado de columna</translation>
 <translation id="7320576522385648310">almacenando en búfer</translation>
diff --git a/content/app/strings/translations/content_strings_es.xtb b/content/app/strings/translations/content_strings_es.xtb
index 4437656f..eb12570 100644
--- a/content/app/strings/translations/content_strings_es.xtb
+++ b/content/app/strings/translations/content_strings_es.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Utiliza un formato que coincida con el solicitado</translation>
 <translation id="7118469954320184356">No hay ninguna descripción disponible.</translation>
 <translation id="7139483182332611405">prefacio</translation>
+<translation id="7214187073215825913">información sobre el contenido</translation>
 <translation id="7263440858009898357">Selecciona un elemento de la lista</translation>
 <translation id="727747134524199931">encabezado de columna</translation>
 <translation id="7320576522385648310">almacenando en búfer</translation>
diff --git a/content/app/strings/translations/content_strings_et.xtb b/content/app/strings/translations/content_strings_et.xtb
index 2a2f0d1..c6bc1ac8 100644
--- a/content/app/strings/translations/content_strings_et.xtb
+++ b/content/app/strings/translations/content_strings_et.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Vastendage nõutav vorming.</translation>
 <translation id="7118469954320184356">Kirjeldust pole.</translation>
 <translation id="7139483182332611405">eessõna</translation>
+<translation id="7214187073215825913">sisu teave</translation>
 <translation id="7263440858009898357">Valige loendist element.</translation>
 <translation id="727747134524199931">veeru päis</translation>
 <translation id="7320576522385648310">puhverdamine</translation>
diff --git a/content/app/strings/translations/content_strings_fa.xtb b/content/app/strings/translations/content_strings_fa.xtb
index 3d5ab451..443dab7 100644
--- a/content/app/strings/translations/content_strings_fa.xtb
+++ b/content/app/strings/translations/content_strings_fa.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">لطفاً با قالب درخواستی مطابقت دهید.</translation>
 <translation id="7118469954320184356">توضیحی دردسترس نیست.</translation>
 <translation id="7139483182332611405">پیش‌گفتار</translation>
+<translation id="7214187073215825913">اطلاعات محتوا</translation>
 <translation id="7263440858009898357">لطفاً یک مورد را در فهرست انتخاب کنید.</translation>
 <translation id="727747134524199931">عنوان ستون</translation>
 <translation id="7320576522385648310">درحال بافر کردن</translation>
diff --git a/content/app/strings/translations/content_strings_fi.xtb b/content/app/strings/translations/content_strings_fi.xtb
index bd3d57e05..10151323 100644
--- a/content/app/strings/translations/content_strings_fi.xtb
+++ b/content/app/strings/translations/content_strings_fi.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Käytä pyydettyä muotoilua.</translation>
 <translation id="7118469954320184356">Ei kuvausta saatavilla</translation>
 <translation id="7139483182332611405">johdanto</translation>
+<translation id="7214187073215825913">sisältötiedot</translation>
 <translation id="7263440858009898357">Valitse kohde luettelosta.</translation>
 <translation id="727747134524199931">sarakkeen otsikko</translation>
 <translation id="7320576522385648310">puskuroidaan</translation>
diff --git a/content/app/strings/translations/content_strings_fr.xtb b/content/app/strings/translations/content_strings_fr.xtb
index d746982..6539540 100644
--- a/content/app/strings/translations/content_strings_fr.xtb
+++ b/content/app/strings/translations/content_strings_fr.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Veuillez respecter le format requis.</translation>
 <translation id="7118469954320184356">Aucune description disponible.</translation>
 <translation id="7139483182332611405">préface</translation>
+<translation id="7214187073215825913">informations sur le contenu</translation>
 <translation id="7263440858009898357">Sélectionnez un élément dans la liste.</translation>
 <translation id="727747134524199931">en-tête de colonne</translation>
 <translation id="7320576522385648310">mise en mémoire tampon</translation>
diff --git a/content/app/strings/translations/content_strings_hr.xtb b/content/app/strings/translations/content_strings_hr.xtb
index f6d5ca8..f5ec499 100644
--- a/content/app/strings/translations/content_strings_hr.xtb
+++ b/content/app/strings/translations/content_strings_hr.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Udovoljite zadanom formatu.</translation>
 <translation id="7118469954320184356">Opis nije dostupan.</translation>
 <translation id="7139483182332611405">predgovor</translation>
+<translation id="7214187073215825913">informacije o sadržaju</translation>
 <translation id="7263440858009898357">Odaberite stavku s popisa.</translation>
 <translation id="727747134524199931">zaglavlje stupca</translation>
 <translation id="7320576522385648310">pohranjivanje u međuspremnik</translation>
diff --git a/content/app/strings/translations/content_strings_hu.xtb b/content/app/strings/translations/content_strings_hu.xtb
index 6003b2a..f7b1ea71 100644
--- a/content/app/strings/translations/content_strings_hu.xtb
+++ b/content/app/strings/translations/content_strings_hu.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Kérjük, tartsa magát a kívánt formátumhoz.</translation>
 <translation id="7118469954320184356">Nincs leírás.</translation>
 <translation id="7139483182332611405">bevezető</translation>
+<translation id="7214187073215825913">tartalom adatai</translation>
 <translation id="7263440858009898357">Kérjük, válasszon egyet a lista elemei közül.</translation>
 <translation id="727747134524199931">oszlopfejléc</translation>
 <translation id="7320576522385648310">pufferelés</translation>
diff --git a/content/app/strings/translations/content_strings_it.xtb b/content/app/strings/translations/content_strings_it.xtb
index 0b432b7..c75d6e47 100644
--- a/content/app/strings/translations/content_strings_it.xtb
+++ b/content/app/strings/translations/content_strings_it.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Rispetta il formato richiesto.</translation>
 <translation id="7118469954320184356">Descrizione non disponibile.</translation>
 <translation id="7139483182332611405">prefazione</translation>
+<translation id="7214187073215825913">informazioni sui contenuti</translation>
 <translation id="7263440858009898357">Seleziona un elemento nell'elenco.</translation>
 <translation id="727747134524199931">intestazione di colonna</translation>
 <translation id="7320576522385648310">Buffering</translation>
diff --git a/content/app/strings/translations/content_strings_iw.xtb b/content/app/strings/translations/content_strings_iw.xtb
index f942fac..69d4b30 100644
--- a/content/app/strings/translations/content_strings_iw.xtb
+++ b/content/app/strings/translations/content_strings_iw.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">התאם את הפורמט המבוקש.</translation>
 <translation id="7118469954320184356">אין תיאור זמין.</translation>
 <translation id="7139483182332611405">הקדמה</translation>
+<translation id="7214187073215825913">פרטי תוכן</translation>
 <translation id="7263440858009898357">בחר פריט מהרשימה.</translation>
 <translation id="727747134524199931">כותרת עמודה</translation>
 <translation id="7320576522385648310">אגירה</translation>
diff --git a/content/app/strings/translations/content_strings_ja.xtb b/content/app/strings/translations/content_strings_ja.xtb
index 14a5d32..209ade6 100644
--- a/content/app/strings/translations/content_strings_ja.xtb
+++ b/content/app/strings/translations/content_strings_ja.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">指定されている形式で入力してください。</translation>
 <translation id="7118469954320184356">説明はありません。</translation>
 <translation id="7139483182332611405">序文</translation>
+<translation id="7214187073215825913">コンテンツの情報</translation>
 <translation id="7263440858009898357">リスト内の項目を選択してください。</translation>
 <translation id="727747134524199931">列見出し</translation>
 <translation id="7320576522385648310">バッファリング</translation>
diff --git a/content/app/strings/translations/content_strings_kn.xtb b/content/app/strings/translations/content_strings_kn.xtb
index f61aa5f..d6289d9 100644
--- a/content/app/strings/translations/content_strings_kn.xtb
+++ b/content/app/strings/translations/content_strings_kn.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">ದಯವಿಟ್ಟು ವಿನಂತಿಸಿದ ಸ್ವರೂಪವನ್ನು ಹೊಂದಿಸಿ.</translation>
 <translation id="7118469954320184356">ಯಾವುದೇ ವಿವರಣೆ ಲಭ್ಯವಿಲ್ಲ.</translation>
 <translation id="7139483182332611405">ಮುನ್ನುಡಿ</translation>
+<translation id="7214187073215825913">ವಿಷಯದ ಮಾಹಿತಿ</translation>
 <translation id="7263440858009898357">ಪಟ್ಟಿಯಲ್ಲಿನ ಐಟಂ ಅನ್ನು ದಯವಿಟ್ಟು ಆಯ್ಕೆ ಮಾಡಿ.</translation>
 <translation id="727747134524199931">ಕಾಲಮ್ ಶಿರೋನಾಮೆ</translation>
 <translation id="7320576522385648310">ಬಫರ್ ಆಗುತ್ತಿದೆ</translation>
diff --git a/content/app/strings/translations/content_strings_lv.xtb b/content/app/strings/translations/content_strings_lv.xtb
index b788d75..b42b02c 100644
--- a/content/app/strings/translations/content_strings_lv.xtb
+++ b/content/app/strings/translations/content_strings_lv.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Pieskaņojiet vērtību prasītajam formātam.</translation>
 <translation id="7118469954320184356">Nav apraksta.</translation>
 <translation id="7139483182332611405">ievadraksts</translation>
+<translation id="7214187073215825913">informācija par saturu</translation>
 <translation id="7263440858009898357">Atlasiet vienumu sarakstā.</translation>
 <translation id="727747134524199931">slejas virsraksts</translation>
 <translation id="7320576522385648310">notiek ievietošana buferī</translation>
diff --git a/content/app/strings/translations/content_strings_ms.xtb b/content/app/strings/translations/content_strings_ms.xtb
index 8bbee989..644e5cd1 100644
--- a/content/app/strings/translations/content_strings_ms.xtb
+++ b/content/app/strings/translations/content_strings_ms.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Sila padankan dengan format yang diminta.</translation>
 <translation id="7118469954320184356">Perihalan tidak tersedia.</translation>
 <translation id="7139483182332611405">kata penghantar</translation>
+<translation id="7214187073215825913">maklumat kandungan</translation>
 <translation id="7263440858009898357">Sila pilih item dalam senarai.</translation>
 <translation id="727747134524199931">pengepala lajur</translation>
 <translation id="7320576522385648310">menimbal</translation>
diff --git a/content/app/strings/translations/content_strings_nl.xtb b/content/app/strings/translations/content_strings_nl.xtb
index d2efff1..63ef10d 100644
--- a/content/app/strings/translations/content_strings_nl.xtb
+++ b/content/app/strings/translations/content_strings_nl.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Zorg dat de indeling voldoet aan de gevraagde indeling.</translation>
 <translation id="7118469954320184356">Geen beschrijving beschikbaar.</translation>
 <translation id="7139483182332611405">voorwoord</translation>
+<translation id="7214187073215825913">Gegevens over de content</translation>
 <translation id="7263440858009898357">Selecteer een item in de lijst.</translation>
 <translation id="727747134524199931">kolomkop</translation>
 <translation id="7320576522385648310">bufferen</translation>
diff --git a/content/app/strings/translations/content_strings_pl.xtb b/content/app/strings/translations/content_strings_pl.xtb
index a896f71..3307ca2 100644
--- a/content/app/strings/translations/content_strings_pl.xtb
+++ b/content/app/strings/translations/content_strings_pl.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Podaj wartość w wymaganym formacie.</translation>
 <translation id="7118469954320184356">Brak opisu.</translation>
 <translation id="7139483182332611405">wstęp</translation>
+<translation id="7214187073215825913">informacje o treści</translation>
 <translation id="7263440858009898357">Wybierz element z listy.</translation>
 <translation id="727747134524199931">nagłówek kolumny</translation>
 <translation id="7320576522385648310">buforowanie</translation>
diff --git a/content/app/strings/translations/content_strings_pt-BR.xtb b/content/app/strings/translations/content_strings_pt-BR.xtb
index 4f73fa1..3206148 100644
--- a/content/app/strings/translations/content_strings_pt-BR.xtb
+++ b/content/app/strings/translations/content_strings_pt-BR.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">É preciso que o formato corresponda ao exigido.</translation>
 <translation id="7118469954320184356">Nenhuma descrição disponível.</translation>
 <translation id="7139483182332611405">prefácio</translation>
+<translation id="7214187073215825913">informações do conteúdo</translation>
 <translation id="7263440858009898357">Selecione um item da lista.</translation>
 <translation id="727747134524199931">cabeçalho da coluna</translation>
 <translation id="7320576522385648310">armazenando em buffer</translation>
diff --git a/content/app/strings/translations/content_strings_pt-PT.xtb b/content/app/strings/translations/content_strings_pt-PT.xtb
index 49dca17..96e5a72f 100644
--- a/content/app/strings/translations/content_strings_pt-PT.xtb
+++ b/content/app/strings/translations/content_strings_pt-PT.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Faça corresponder o formato pedido.</translation>
 <translation id="7118469954320184356">Nenhuma descrição disponível.</translation>
 <translation id="7139483182332611405">prefácio</translation>
+<translation id="7214187073215825913">informações sobre o conteúdo</translation>
 <translation id="7263440858009898357">Selecione um item na lista.</translation>
 <translation id="727747134524199931">cabeçalho da coluna</translation>
 <translation id="7320576522385648310">colocação no buffer</translation>
diff --git a/content/app/strings/translations/content_strings_ro.xtb b/content/app/strings/translations/content_strings_ro.xtb
index 6677abe..4ab20c8 100644
--- a/content/app/strings/translations/content_strings_ro.xtb
+++ b/content/app/strings/translations/content_strings_ro.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Respectă formatul solicitat.</translation>
 <translation id="7118469954320184356">Nu există nicio descriere disponibilă.</translation>
 <translation id="7139483182332611405">prefață</translation>
+<translation id="7214187073215825913">informații despre conținut</translation>
 <translation id="7263440858009898357">Selectează un articol din listă.</translation>
 <translation id="727747134524199931">antet coloană</translation>
 <translation id="7320576522385648310">Se încarcă în memoria temporară</translation>
diff --git a/content/app/strings/translations/content_strings_ru.xtb b/content/app/strings/translations/content_strings_ru.xtb
index c7e614ea..f5cd263 100644
--- a/content/app/strings/translations/content_strings_ru.xtb
+++ b/content/app/strings/translations/content_strings_ru.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Введите данные в указанном формате.</translation>
 <translation id="7118469954320184356">Нет описания.</translation>
 <translation id="7139483182332611405">вступление</translation>
+<translation id="7214187073215825913">информация о содержании</translation>
 <translation id="7263440858009898357">Выберите один из пунктов списка.</translation>
 <translation id="727747134524199931">заголовок столбца</translation>
 <translation id="7320576522385648310">Буферизация…</translation>
diff --git a/content/app/strings/translations/content_strings_sk.xtb b/content/app/strings/translations/content_strings_sk.xtb
index fc959b4d..4b1bb417 100644
--- a/content/app/strings/translations/content_strings_sk.xtb
+++ b/content/app/strings/translations/content_strings_sk.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Zadajte hodnotu zodpovedajúcu požadovanému formátu.</translation>
 <translation id="7118469954320184356">Nie je k dispozícii žiadny popis.</translation>
 <translation id="7139483182332611405">predslov</translation>
+<translation id="7214187073215825913">informácie o obsahu</translation>
 <translation id="7263440858009898357">Vyberte položku zo zoznamu.</translation>
 <translation id="727747134524199931">hlavička stĺpca</translation>
 <translation id="7320576522385648310">ukladá sa do vyrovnávacej pamäte</translation>
diff --git a/content/app/strings/translations/content_strings_sl.xtb b/content/app/strings/translations/content_strings_sl.xtb
index 9469e112..8f94229 100644
--- a/content/app/strings/translations/content_strings_sl.xtb
+++ b/content/app/strings/translations/content_strings_sl.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Poskrbite za ujemanje z zahtevano obliko.</translation>
 <translation id="7118469954320184356">Ni opisa.</translation>
 <translation id="7139483182332611405">predgovor</translation>
+<translation id="7214187073215825913">podatki o vsebini</translation>
 <translation id="7263440858009898357">Izberite element s seznama.</translation>
 <translation id="727747134524199931">glava stolpca</translation>
 <translation id="7320576522385648310">medpomnjenje</translation>
diff --git a/content/app/strings/translations/content_strings_sr.xtb b/content/app/strings/translations/content_strings_sr.xtb
index 1b31cb5..fa848aec 100644
--- a/content/app/strings/translations/content_strings_sr.xtb
+++ b/content/app/strings/translations/content_strings_sr.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Изаберите захтевани формат.</translation>
 <translation id="7118469954320184356">Опис није доступан.</translation>
 <translation id="7139483182332611405">предговор</translation>
+<translation id="7214187073215825913">информације о садржају</translation>
 <translation id="7263440858009898357">Изаберите ставку са листе.</translation>
 <translation id="727747134524199931">заглавље колоне</translation>
 <translation id="7320576522385648310">баферовање</translation>
diff --git a/content/app/strings/translations/content_strings_ta.xtb b/content/app/strings/translations/content_strings_ta.xtb
index 4a4b19ab..4a11a82 100644
--- a/content/app/strings/translations/content_strings_ta.xtb
+++ b/content/app/strings/translations/content_strings_ta.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">கோரிய வடிவமைப்பில் தருக.</translation>
 <translation id="7118469954320184356">விவரம் எதுவுமில்லை.</translation>
 <translation id="7139483182332611405">முன்னுரை</translation>
+<translation id="7214187073215825913">உள்ளடக்கத் தகவல்</translation>
 <translation id="7263440858009898357">பட்டியலிலிருந்து ஒரு உருப்படியைத் தேர்ந்தெடுங்கள்.</translation>
 <translation id="727747134524199931">நெடுவரிசை மேற்தலைப்பு</translation>
 <translation id="7320576522385648310">ஏற்றுகிறது</translation>
diff --git a/content/app/strings/translations/content_strings_th.xtb b/content/app/strings/translations/content_strings_th.xtb
index 74cc269c..3dcb3fbc 100644
--- a/content/app/strings/translations/content_strings_th.xtb
+++ b/content/app/strings/translations/content_strings_th.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">โปรดจับคู่รูปแบบที่ร้องขอ</translation>
 <translation id="7118469954320184356">ไม่มีคำอธิบาย</translation>
 <translation id="7139483182332611405">ส่วนนำ</translation>
+<translation id="7214187073215825913">ข้อมูลเกี่ยวกับเนื้อหา</translation>
 <translation id="7263440858009898357">โปรดเลือกรายการจากหน้ารายการ</translation>
 <translation id="727747134524199931">ส่วนหัวคอลัมน์</translation>
 <translation id="7320576522385648310">กำลังบัฟเฟอร์</translation>
diff --git a/content/app/strings/translations/content_strings_uk.xtb b/content/app/strings/translations/content_strings_uk.xtb
index c4d5ccd..b94f8cc 100644
--- a/content/app/strings/translations/content_strings_uk.xtb
+++ b/content/app/strings/translations/content_strings_uk.xtb
@@ -186,6 +186,7 @@
 <translation id="709897737746224366">Виберіть потрібний формат.</translation>
 <translation id="7118469954320184356">Немає опису.</translation>
 <translation id="7139483182332611405">передмова</translation>
+<translation id="7214187073215825913">інформація про контент</translation>
 <translation id="7263440858009898357">Виберіть елемент зі списку.</translation>
 <translation id="727747134524199931">заголовок стовпця</translation>
 <translation id="7320576522385648310">буферизація</translation>
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 9c6d103..62f17dc 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -2714,10 +2714,10 @@
 
     BrowserAccessibilityPositionInstance startLinePosition =
         endPosition->CreatePreviousLineStartPosition(
-            ui::AXBoundaryBehavior::CrossBoundary);
+            ui::AXBoundaryBehavior::StopAtLastAnchorBoundary);
     BrowserAccessibilityPositionInstance endLinePosition =
         endPosition->CreatePreviousLineEndPosition(
-            ui::AXBoundaryBehavior::CrossBoundary);
+            ui::AXBoundaryBehavior::StopAtLastAnchorBoundary);
     BrowserAccessibilityPositionInstance startPosition =
         *startLinePosition <= *endLinePosition ? std::move(endLinePosition)
                                                : std::move(startLinePosition);
@@ -2735,10 +2735,10 @@
 
     BrowserAccessibilityPositionInstance startLinePosition =
         startPosition->CreateNextLineStartPosition(
-            ui::AXBoundaryBehavior::CrossBoundary);
+            ui::AXBoundaryBehavior::StopAtLastAnchorBoundary);
     BrowserAccessibilityPositionInstance endLinePosition =
         startPosition->CreateNextLineEndPosition(
-            ui::AXBoundaryBehavior::CrossBoundary);
+            ui::AXBoundaryBehavior::StopAtLastAnchorBoundary);
     BrowserAccessibilityPositionInstance endPosition =
         *startLinePosition <= *endLinePosition ? std::move(startLinePosition)
                                                : std::move(endLinePosition);
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc
index 394d2428..52874f7 100644
--- a/content/browser/frame_host/navigation_handle_impl.cc
+++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -89,11 +89,6 @@
   return navigation_request_->IsPost();
 }
 
-const scoped_refptr<network::ResourceRequestBody>&
-NavigationHandleImpl::GetResourceRequestBody() {
-  return navigation_request_->common_params().post_data;
-}
-
 const blink::mojom::Referrer& NavigationHandleImpl::GetReferrer() {
   return navigation_request_->GetReferrer();
 }
@@ -282,4 +277,8 @@
   return navigation_request_->GetProxyServer();
 }
 
+GlobalFrameRoutingId NavigationHandleImpl::GetPreviousRenderFrameHostId() {
+  return navigation_request_->GetPreviousRenderFrameHostId();
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h
index ec34c712..d3c8ab17 100644
--- a/content/browser/frame_host/navigation_handle_impl.h
+++ b/content/browser/frame_host/navigation_handle_impl.h
@@ -33,6 +33,7 @@
 
 namespace content {
 
+struct GlobalFrameRoutingId;
 class NavigationUIData;
 class SiteInstanceImpl;
 
@@ -60,8 +61,6 @@
   base::TimeTicks NavigationStart() override;
   base::TimeTicks NavigationInputStart() override;
   bool IsPost() override;
-  const scoped_refptr<network::ResourceRequestBody>& GetResourceRequestBody()
-      override;
   const blink::mojom::Referrer& GetReferrer() override;
   bool HasUserGesture() override;
   ui::PageTransition GetPageTransition() override;
@@ -69,6 +68,7 @@
   bool IsExternalProtocol() override;
   net::Error GetNetErrorCode() override;
   RenderFrameHostImpl* GetRenderFrameHost() override;
+  GlobalFrameRoutingId GetPreviousRenderFrameHostId() override;
   bool IsSameDocument() override;
   bool HasCommitted() override;
   bool IsErrorPage() override;
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index 8c6aa8c..bc1e047 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -851,6 +851,11 @@
     bindings_ = entry->bindings();
   }
 
+  // Store the old RenderFrameHost id at request creation to be used later.
+  previous_render_frame_host_id_ = GlobalFrameRoutingId(
+      frame_tree_node->current_frame_host()->GetProcess()->GetID(),
+      frame_tree_node->current_frame_host()->GetRoutingID());
+
   // Update the load flags with cache information.
   UpdateLoadFlagsWithCacheFlags(&begin_params_->load_flags,
                                 common_params_->navigation_type,
@@ -3603,4 +3608,8 @@
   return proxy_server_;
 }
 
+GlobalFrameRoutingId NavigationRequest::GetPreviousRenderFrameHostId() {
+  return previous_render_frame_host_id_;
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index db0ad7bf..6809d0dc 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -26,6 +26,7 @@
 #include "content/common/content_export.h"
 #include "content/common/navigation_params.h"
 #include "content/common/navigation_params.mojom.h"
+#include "content/public/browser/global_routing_id.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/navigation_throttle.h"
 #include "content/public/browser/navigation_type.h"
@@ -243,6 +244,7 @@
   bool FromDownloadCrossOriginRedirect();
   void RegisterSubresourceOverride(
       mojom::TransferrableURLLoaderPtr transferrable_loader);
+  GlobalFrameRoutingId GetPreviousRenderFrameHostId();
 
   // Called on the UI thread by the Navigator to start the navigation.
   // The NavigationRequest can be deleted while BeginNavigation() is called.
@@ -1044,6 +1046,9 @@
   int64_t frame_entry_item_sequence_number_ = -1;
   int64_t frame_entry_document_sequence_number_ = -1;
 
+  // This is used to store the current_frame_host id at request creation time.
+  GlobalFrameRoutingId previous_render_frame_host_id_;
+
   base::WeakPtrFactory<NavigationRequest> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(NavigationRequest);
diff --git a/content/browser/media/audio_input_stream_broker.cc b/content/browser/media/audio_input_stream_broker.cc
index 0189a68..54124a13 100644
--- a/content/browser/media/audio_input_stream_broker.cc
+++ b/content/browser/media/audio_input_stream_broker.cc
@@ -23,7 +23,6 @@
 #include "media/audio/audio_logging.h"
 #include "media/base/media_switches.h"
 #include "media/base/user_input_monitor.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
 #if defined(OS_CHROMEOS)
@@ -70,7 +69,8 @@
     bool enable_agc,
     audio::mojom::AudioProcessingConfigPtr processing_config,
     AudioStreamBroker::DeleterCallback deleter,
-    mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client)
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        renderer_factory_client)
     : AudioStreamBroker(render_process_id, render_frame_id),
       device_id_(device_id),
       params_(params),
@@ -79,7 +79,7 @@
       enable_agc_(enable_agc),
       deleter_(std::move(deleter)),
       processing_config_(std::move(processing_config)),
-      renderer_factory_client_(renderer_factory_client.PassInterface()) {
+      renderer_factory_client_(std::move(renderer_factory_client)) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(renderer_factory_client_);
   DCHECK(deleter_);
diff --git a/content/browser/media/audio_input_stream_broker.h b/content/browser/media/audio_input_stream_broker.h
index 7ff1631d..7cdfb9a 100644
--- a/content/browser/media/audio_input_stream_broker.h
+++ b/content/browser/media/audio_input_stream_broker.h
@@ -16,6 +16,7 @@
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
@@ -43,7 +44,8 @@
       bool enable_agc,
       audio::mojom::AudioProcessingConfigPtr processing_config,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client);
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+          renderer_factory_client);
 
   ~AudioInputStreamBroker() final;
 
diff --git a/content/browser/media/audio_input_stream_broker_unittest.cc b/content/browser/media/audio_input_stream_broker_unittest.cc
index 7bda816c..b85bb27 100644
--- a/content/browser/media/audio_input_stream_broker_unittest.cc
+++ b/content/browser/media/audio_input_stream_broker_unittest.cc
@@ -11,7 +11,7 @@
 #include "base/test/mock_callback.h"
 #include "content/public/test/browser_task_environment.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
@@ -47,10 +47,9 @@
   MockRendererAudioInputStreamFactoryClient() = default;
   ~MockRendererAudioInputStreamFactoryClient() override = default;
 
-  mojom::RendererAudioInputStreamFactoryClientPtr MakePtr() {
-    mojom::RendererAudioInputStreamFactoryClientPtr ret;
-    binding_.Bind(mojo::MakeRequest(&ret));
-    return ret;
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+  MakeRemote() {
+    return receiver_.BindNewPipeAndPassRemote();
   }
 
   MOCK_METHOD0(OnStreamCreated, void());
@@ -67,10 +66,10 @@
     OnStreamCreated();
   }
 
-  void CloseBinding() { binding_.Close(); }
+  void CloseReceiver() { receiver_.reset(); }
 
  private:
-  mojo::Binding<mojom::RendererAudioInputStreamFactoryClient> binding_{this};
+  mojo::Receiver<mojom::RendererAudioInputStreamFactoryClient> receiver_{this};
   media::mojom::AudioInputStreamPtr input_stream_;
   media::mojom::AudioInputStreamClientRequest client_request_;
   DISALLOW_COPY_AND_ASSIGN(MockRendererAudioInputStreamFactoryClient);
@@ -151,7 +150,7 @@
             kEnableAgc,
             nullptr,
             deleter.Get(),
-            renderer_factory_client.MakePtr())) {}
+            renderer_factory_client.MakeRemote())) {}
 
   void RunUntilIdle() { task_environment.RunUntilIdle(); }
 
@@ -174,7 +173,7 @@
   AudioInputStreamBroker broker(
       kRenderProcessId, kRenderFrameId, kDeviceId, TestParams(), kShMemCount,
       nullptr /*user_input_monitor*/, kEnableAgc, nullptr, deleter.Get(),
-      renderer_factory_client.MakePtr());
+      renderer_factory_client.MakeRemote());
 
   EXPECT_EQ(kRenderProcessId, broker.render_process_id());
   EXPECT_EQ(kRenderFrameId, broker.render_frame_id());
@@ -242,7 +241,7 @@
 
   EXPECT_CALL(env.deleter, Run(env.broker.release()))
       .WillOnce(testing::DeleteArg<0>());
-  env.renderer_factory_client.CloseBinding();
+  env.renderer_factory_client.CloseReceiver();
   env.RunUntilIdle();
   Mock::VerifyAndClear(&env.deleter);
 
diff --git a/content/browser/media/audio_loopback_stream_broker.cc b/content/browser/media/audio_loopback_stream_broker.cc
index fe58169..72a0838 100644
--- a/content/browser/media/audio_loopback_stream_broker.cc
+++ b/content/browser/media/audio_loopback_stream_broker.cc
@@ -25,7 +25,8 @@
     uint32_t shared_memory_count,
     bool mute_source,
     AudioStreamBroker::DeleterCallback deleter,
-    mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client)
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        renderer_factory_client)
     : AudioStreamBroker(render_process_id, render_frame_id),
       source_(source),
       params_(params),
@@ -43,7 +44,7 @@
   }
 
   // Unretained is safe because |this| owns |renderer_factory_client_|.
-  renderer_factory_client_.set_connection_error_handler(base::BindOnce(
+  renderer_factory_client_.set_disconnect_handler(base::BindOnce(
       &AudioLoopbackStreamBroker::Cleanup, base::Unretained(this)));
 
   // Notify the source that we are capturing from it.
diff --git a/content/browser/media/audio_loopback_stream_broker.h b/content/browser/media/audio_loopback_stream_broker.h
index 88b8885..e6da91661 100644
--- a/content/browser/media/audio_loopback_stream_broker.h
+++ b/content/browser/media/audio_loopback_stream_broker.h
@@ -18,6 +18,8 @@
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace audio {
 namespace mojom {
@@ -42,7 +44,8 @@
       uint32_t shared_memory_count,
       bool mute_source,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client);
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+          renderer_factory_client);
 
   ~AudioLoopbackStreamBroker() final;
 
@@ -72,7 +75,8 @@
   // loopback stream is running.
   base::Optional<AudioMutingSession> muter_;
 
-  mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client_;
+  mojo::Remote<mojom::RendererAudioInputStreamFactoryClient>
+      renderer_factory_client_;
   mojo::Binding<AudioInputStreamObserver> observer_binding_;
   media::mojom::AudioInputStreamClientRequest client_request_;
 
diff --git a/content/browser/media/audio_loopback_stream_broker_unittest.cc b/content/browser/media/audio_loopback_stream_broker_unittest.cc
index 51fb645c..05fe53d 100644
--- a/content/browser/media/audio_loopback_stream_broker_unittest.cc
+++ b/content/browser/media/audio_loopback_stream_broker_unittest.cc
@@ -12,6 +12,7 @@
 #include "content/public/test/browser_task_environment.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
@@ -58,13 +59,12 @@
 class MockRendererAudioInputStreamFactoryClient
     : public mojom::RendererAudioInputStreamFactoryClient {
  public:
-  MockRendererAudioInputStreamFactoryClient() : binding_(this) {}
+  MockRendererAudioInputStreamFactoryClient() = default;
   ~MockRendererAudioInputStreamFactoryClient() override {}
 
-  mojom::RendererAudioInputStreamFactoryClientPtr MakePtr() {
-    mojom::RendererAudioInputStreamFactoryClientPtr ret;
-    binding_.Bind(mojo::MakeRequest(&ret));
-    return ret;
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+  MakeRemote() {
+    return receiver_.BindNewPipeAndPassRemote();
   }
 
   MOCK_METHOD0(OnStreamCreated, void());
@@ -82,10 +82,10 @@
     OnStreamCreated();
   }
 
-  void CloseBinding() { binding_.Close(); }
+  void CloseReceiver() { receiver_.reset(); }
 
  private:
-  mojo::Binding<mojom::RendererAudioInputStreamFactoryClient> binding_;
+  mojo::Receiver<mojom::RendererAudioInputStreamFactoryClient> receiver_{this};
   media::mojom::AudioInputStreamPtr input_stream_;
   media::mojom::AudioInputStreamClientRequest client_request_;
 };
@@ -163,7 +163,7 @@
     EXPECT_CALL(source, AddLoopbackSink(_));
     broker = std::make_unique<AudioLoopbackStreamBroker>(
         kRenderProcessId, kRenderFrameId, &source, TestParams(), kShMemCount,
-        mute_source, deleter.Get(), renderer_factory_client.MakePtr());
+        mute_source, deleter.Get(), renderer_factory_client.MakeRemote());
   }
 
   void RunUntilIdle() { task_environment.RunUntilIdle(); }
@@ -191,7 +191,7 @@
 
   AudioLoopbackStreamBroker broker(
       kRenderProcessId, kRenderFrameId, &source, TestParams(), kShMemCount,
-      !kMuteSource, deleter.Get(), renderer_factory_client.MakePtr());
+      !kMuteSource, deleter.Get(), renderer_factory_client.MakeRemote());
 
   EXPECT_EQ(kRenderProcessId, broker.render_process_id());
   EXPECT_EQ(kRenderFrameId, broker.render_frame_id());
@@ -332,7 +332,7 @@
 
   EXPECT_CALL(env.deleter, Run(env.broker.release()))
       .WillOnce(testing::DeleteArg<0>());
-  env.renderer_factory_client.CloseBinding();
+  env.renderer_factory_client.CloseReceiver();
   env.RunUntilIdle();
   Mock::VerifyAndClear(&env.deleter);
 
diff --git a/content/browser/media/audio_stream_broker.cc b/content/browser/media/audio_stream_broker.cc
index ed153e4..03d1746 100644
--- a/content/browser/media/audio_stream_broker.cc
+++ b/content/browser/media/audio_stream_broker.cc
@@ -35,8 +35,8 @@
       bool enable_agc,
       audio::mojom::AudioProcessingConfigPtr processing_config,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client)
-      final {
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+          renderer_factory_client) final {
     return std::make_unique<AudioInputStreamBroker>(
         render_process_id, render_frame_id, device_id, params,
         shared_memory_count, user_input_monitor, enable_agc,
@@ -52,8 +52,8 @@
       uint32_t shared_memory_count,
       bool mute_source,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client)
-      final {
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+          renderer_factory_client) final {
     return std::make_unique<AudioLoopbackStreamBroker>(
         render_process_id, render_frame_id, source, params, shared_memory_count,
         mute_source, std::move(deleter), std::move(renderer_factory_client));
diff --git a/content/browser/media/audio_stream_broker.h b/content/browser/media/audio_stream_broker.h
index 90fdfdc..8321ade14 100644
--- a/content/browser/media/audio_stream_broker.h
+++ b/content/browser/media/audio_stream_broker.h
@@ -16,6 +16,7 @@
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "media/mojo/mojom/audio_output_stream.mojom.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 
 namespace audio {
@@ -107,7 +108,7 @@
       bool enable_agc,
       audio::mojom::AudioProcessingConfigPtr processing_config,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
           renderer_factory_client) = 0;
 
   virtual std::unique_ptr<AudioStreamBroker> CreateAudioLoopbackStreamBroker(
@@ -118,7 +119,7 @@
       uint32_t shared_memory_count,
       bool mute_source,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
           renderer_factory_client) = 0;
 
   virtual std::unique_ptr<AudioStreamBroker> CreateAudioOutputStreamBroker(
diff --git a/content/browser/media/forwarding_audio_stream_factory.cc b/content/browser/media/forwarding_audio_stream_factory.cc
index 8dd3387..eea5d948 100644
--- a/content/browser/media/forwarding_audio_stream_factory.cc
+++ b/content/browser/media/forwarding_audio_stream_factory.cc
@@ -61,7 +61,8 @@
     uint32_t shared_memory_count,
     bool enable_agc,
     audio::mojom::AudioProcessingConfigPtr processing_config,
-    mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client) {
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        renderer_factory_client) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   // |this| owns |inputs_|, so Unretained is safe.
@@ -117,7 +118,8 @@
     const media::AudioParameters& params,
     uint32_t shared_memory_count,
     bool mute_source,
-    mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client) {
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        renderer_factory_client) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(loopback_source);
 
diff --git a/content/browser/media/forwarding_audio_stream_factory.h b/content/browser/media/forwarding_audio_stream_factory.h
index 98193c2f..6cadbca6 100644
--- a/content/browser/media/forwarding_audio_stream_factory.h
+++ b/content/browser/media/forwarding_audio_stream_factory.h
@@ -21,6 +21,7 @@
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "media/mojo/mojom/audio_output_stream.mojom.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 #include "services/audio/public/mojom/stream_factory.mojom.h"
@@ -84,7 +85,7 @@
         uint32_t shared_memory_count,
         bool enable_agc,
         audio::mojom::AudioProcessingConfigPtr processing_config,
-        mojom::RendererAudioInputStreamFactoryClientPtr
+        mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
             renderer_factory_client);
 
     void AssociateInputAndOutputForAec(
@@ -106,7 +107,7 @@
         const media::AudioParameters& params,
         uint32_t shared_memory_count,
         bool mute_source,
-        mojom::RendererAudioInputStreamFactoryClientPtr
+        mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
             renderer_factory_client);
 
     // Sets the muting state for all output streams created through this
diff --git a/content/browser/media/forwarding_audio_stream_factory_unittest.cc b/content/browser/media/forwarding_audio_stream_factory_unittest.cc
index 0e1e6546..53c17a3 100644
--- a/content/browser/media/forwarding_audio_stream_factory_unittest.cc
+++ b/content/browser/media/forwarding_audio_stream_factory_unittest.cc
@@ -20,6 +20,7 @@
 #include "media/base/audio_parameters.h"
 #include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
 #include "services/audio/public/mojom/constants.mojom.h"
 #include "services/audio/public/mojom/stream_factory.mojom.h"
@@ -111,8 +112,8 @@
       bool enable_agc,
       audio::mojom::AudioProcessingConfigPtr processing_config,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client)
-      final {
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+          renderer_factory_client) final {
     std::unique_ptr<MockBroker> prepared_broker =
         std::move(prepared_input_stream_brokers_.front());
     prepared_input_stream_brokers_.pop();
@@ -151,8 +152,8 @@
       uint32_t shared_memory_count,
       bool mute_source,
       AudioStreamBroker::DeleterCallback deleter,
-      mojom::RendererAudioInputStreamFactoryClientPtr renderer_factory_client)
-      final {
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+          renderer_factory_client) final {
     std::unique_ptr<MockBroker> prepared_broker =
         std::move(prepared_loopback_stream_brokers_.front());
     prepared_loopback_stream_brokers_.pop();
@@ -262,7 +263,7 @@
 }  // namespace
 
 TEST_F(ForwardingAudioStreamFactoryTest, CreateInputStream_CreatesInputStream) {
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
   base::WeakPtr<MockBroker> broker = ExpectInputBrokerConstruction(main_rfh());
 
   ForwardingAudioStreamFactory factory(
@@ -270,7 +271,7 @@
       std::move(broker_factory_));
 
   EXPECT_CALL(*broker, CreateStream(NotNull()));
-  mojo::MakeRequest(&client);
+  ignore_result(client.InitWithNewPipeAndPassReceiver());
   factory.core()->CreateInputStream(main_rfh()->GetProcess()->GetID(),
                                     main_rfh()->GetRoutingID(), kInputDeviceId,
                                     kParams, kSharedMemoryCount, kEnableAgc,
@@ -280,7 +281,7 @@
 TEST_F(ForwardingAudioStreamFactoryTest,
        CreateLoopbackStream_CreatesLoopbackStream) {
   std::unique_ptr<WebContents> source_contents = CreateTestWebContents();
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
   base::WeakPtr<MockBroker> broker =
       ExpectLoopbackBrokerConstruction(main_rfh());
 
@@ -296,7 +297,7 @@
       std::move(other_connector), std::make_unique<MockBrokerFactory>());
 
   EXPECT_CALL(*broker, CreateStream(NotNull()));
-  mojo::MakeRequest(&client);
+  ignore_result(client.InitWithNewPipeAndPassReceiver());
   factory.core()->CreateLoopbackStream(
       main_rfh()->GetProcess()->GetID(), main_rfh()->GetRoutingID(),
       source_factory.core(), kParams, kSharedMemoryCount, kMuteSource,
@@ -321,7 +322,6 @@
 
 TEST_F(ForwardingAudioStreamFactoryTest,
        InputBrokerDeleterCalled_DestroysInputStream) {
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
   base::WeakPtr<MockBroker> main_rfh_broker =
       ExpectInputBrokerConstruction(main_rfh());
   base::WeakPtr<MockBroker> other_rfh_broker =
@@ -333,7 +333,8 @@
 
   {
     EXPECT_CALL(*main_rfh_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+    ignore_result(client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateInputStream(
         main_rfh()->GetProcess()->GetID(), main_rfh()->GetRoutingID(),
         kInputDeviceId, kParams, kSharedMemoryCount, kEnableAgc, nullptr,
@@ -342,7 +343,8 @@
   }
   {
     EXPECT_CALL(*other_rfh_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+    ignore_result(client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateInputStream(
         other_rfh()->GetProcess()->GetID(), other_rfh()->GetRoutingID(),
         kInputDeviceId, kParams, kSharedMemoryCount, kEnableAgc, nullptr,
@@ -359,7 +361,6 @@
 TEST_F(ForwardingAudioStreamFactoryTest,
        LoopbackBrokerDeleterCalled_DestroysInputStream) {
   std::unique_ptr<WebContents> source_contents = CreateTestWebContents();
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
   base::WeakPtr<MockBroker> main_rfh_broker =
       ExpectLoopbackBrokerConstruction(main_rfh());
   base::WeakPtr<MockBroker> other_rfh_broker =
@@ -378,7 +379,8 @@
 
   {
     EXPECT_CALL(*main_rfh_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+    ignore_result(client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateLoopbackStream(
         main_rfh()->GetProcess()->GetID(), main_rfh()->GetRoutingID(),
         source_factory.core(), kParams, kSharedMemoryCount, kMuteSource,
@@ -387,7 +389,8 @@
   }
   {
     EXPECT_CALL(*other_rfh_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+    ignore_result(client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateLoopbackStream(
         other_rfh()->GetProcess()->GetID(), other_rfh()->GetRoutingID(),
         source_factory.core(), kParams, kSharedMemoryCount, kMuteSource,
@@ -439,7 +442,6 @@
 TEST_F(ForwardingAudioStreamFactoryTest, DestroyFrame_DestroysRelatedStreams) {
   std::unique_ptr<WebContents> source_contents = CreateTestWebContents();
 
-  mojom::RendererAudioInputStreamFactoryClientPtr input_client;
   base::WeakPtr<MockBroker> main_rfh_input_broker =
       ExpectInputBrokerConstruction(main_rfh());
   base::WeakPtr<MockBroker> other_rfh_input_broker =
@@ -469,7 +471,9 @@
 
   {
     EXPECT_CALL(*main_rfh_input_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&input_client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        input_client;
+    ignore_result(input_client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateInputStream(
         main_rfh()->GetProcess()->GetID(), main_rfh()->GetRoutingID(),
         kInputDeviceId, kParams, kSharedMemoryCount, kEnableAgc, nullptr,
@@ -478,7 +482,9 @@
   }
   {
     EXPECT_CALL(*other_rfh_input_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&input_client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        input_client;
+    ignore_result(input_client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateInputStream(
         other_rfh()->GetProcess()->GetID(), other_rfh()->GetRoutingID(),
         kInputDeviceId, kParams, kSharedMemoryCount, kEnableAgc, nullptr,
@@ -488,7 +494,9 @@
 
   {
     EXPECT_CALL(*main_rfh_loopback_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&input_client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        input_client;
+    ignore_result(input_client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateLoopbackStream(
         main_rfh()->GetProcess()->GetID(), main_rfh()->GetRoutingID(),
         source_factory.core(), kParams, kSharedMemoryCount, kMuteSource,
@@ -497,7 +505,9 @@
   }
   {
     EXPECT_CALL(*other_rfh_loopback_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&input_client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        input_client;
+    ignore_result(input_client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateLoopbackStream(
         other_rfh()->GetProcess()->GetID(), other_rfh()->GetRoutingID(),
         source_factory.core(), kParams, kSharedMemoryCount, kMuteSource,
@@ -537,7 +547,8 @@
 }
 
 TEST_F(ForwardingAudioStreamFactoryTest, DestroyWebContents_DestroysStreams) {
-  mojom::RendererAudioInputStreamFactoryClientPtr input_client;
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+      input_client;
   base::WeakPtr<MockBroker> input_broker =
       ExpectInputBrokerConstruction(main_rfh());
 
@@ -550,7 +561,7 @@
       std::move(broker_factory_));
 
   EXPECT_CALL(*input_broker, CreateStream(NotNull()));
-  mojo::MakeRequest(&input_client);
+  ignore_result(input_client.InitWithNewPipeAndPassReceiver());
   factory.core()->CreateInputStream(main_rfh()->GetProcess()->GetID(),
                                     main_rfh()->GetRoutingID(), kInputDeviceId,
                                     kParams, kSharedMemoryCount, kEnableAgc,
@@ -572,7 +583,6 @@
 }
 
 TEST_F(ForwardingAudioStreamFactoryTest, LastStreamDeleted_ClearsFactoryPtr) {
-  mojom::RendererAudioInputStreamFactoryClientPtr input_client;
   base::WeakPtr<MockBroker> main_rfh_input_broker =
       ExpectInputBrokerConstruction(main_rfh());
   base::WeakPtr<MockBroker> other_rfh_input_broker =
@@ -590,7 +600,9 @@
 
   {
     EXPECT_CALL(*main_rfh_input_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&input_client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        input_client;
+    ignore_result(input_client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateInputStream(
         main_rfh()->GetProcess()->GetID(), main_rfh()->GetRoutingID(),
         kInputDeviceId, kParams, kSharedMemoryCount, kEnableAgc, nullptr,
@@ -599,7 +611,9 @@
   }
   {
     EXPECT_CALL(*other_rfh_input_broker, CreateStream(NotNull()));
-    mojo::MakeRequest(&input_client);
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        input_client;
+    ignore_result(input_client.InitWithNewPipeAndPassReceiver());
     factory.core()->CreateInputStream(
         other_rfh()->GetProcess()->GetID(), other_rfh()->GetRoutingID(),
         kInputDeviceId, kParams, kSharedMemoryCount, kEnableAgc, nullptr,
diff --git a/content/browser/media/in_process_audio_loopback_stream_creator.cc b/content/browser/media/in_process_audio_loopback_stream_creator.cc
index eaf99f8..86d2149 100644
--- a/content/browser/media/in_process_audio_loopback_stream_creator.cc
+++ b/content/browser/media/in_process_audio_loopback_stream_creator.cc
@@ -20,7 +20,8 @@
 #include "content/public/browser/system_connector.h"
 #include "media/audio/audio_device_description.h"
 #include "media/base/user_input_monitor.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "services/service_manager/public/cpp/connector.h"
 
 namespace content {
@@ -64,32 +65,28 @@
     AudioStreamBroker::LoopbackSource* loopback_source,
     const media::AudioParameters& params,
     uint32_t total_segments,
-    mojom::RendererAudioInputStreamFactoryClientPtrInfo client_ptr_info) {
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        client_remote) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   const bool mute_source = true;
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
-  client.Bind(std::move(client_ptr_info));
-
   factory->CreateLoopbackStream(-1, -1, loopback_source, params, total_segments,
-                                mute_source, std::move(client));
+                                mute_source, std::move(client_remote));
 }
 
 void CreateSystemWideLoopbackStreamHelper(
     ForwardingAudioStreamFactory::Core* factory,
     const media::AudioParameters& params,
     uint32_t total_segments,
-    mojom::RendererAudioInputStreamFactoryClientPtrInfo client_ptr_info) {
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        client_remote) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   const bool enable_agc = false;
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
-  client.Bind(std::move(client_ptr_info));
-
   factory->CreateInputStream(
       -1, -1, media::AudioDeviceDescription::kLoopbackWithMuteDeviceId, params,
       total_segments, enable_agc, nullptr /* processing_config */,
-      std::move(client));
+      std::move(client_remote));
 }
 
 }  // namespace
@@ -115,10 +112,10 @@
     uint32_t total_segments,
     const StreamCreatedCallback& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  mojom::RendererAudioInputStreamFactoryClientPtrInfo client;
-  mojo::MakeStrongBinding(
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+  mojo::MakeSelfOwnedReceiver(
       std::make_unique<StreamCreatedCallbackAdapter>(callback),
-      mojo::MakeRequest(&client));
+      client.InitWithNewPipeAndPassReceiver());
   // Deletion of factory_.core() is posted to the IO thread when |factory_| is
   // destroyed, so Unretained is safe below.
   if (loopback_source) {
diff --git a/content/browser/renderer_host/media/audio_input_stream_handle.cc b/content/browser/renderer_host/media/audio_input_stream_handle.cc
index 2ad6372..b0bb233 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle.cc
+++ b/content/browser/renderer_host/media/audio_input_stream_handle.cc
@@ -24,13 +24,14 @@
 }  // namespace
 
 AudioInputStreamHandle::AudioInputStreamHandle(
-    mojom::RendererAudioInputStreamFactoryClientPtr client,
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+        client_pending_remote,
     media::MojoAudioInputStream::CreateDelegateCallback
         create_delegate_callback,
     DeleterCallback deleter_callback)
     : stream_id_(base::UnguessableToken::Create()),
       deleter_callback_(std::move(deleter_callback)),
-      client_(std::move(client)),
+      client_remote_(std::move(client_pending_remote)),
       stream_ptr_(),
       stream_client_request_(),
       stream_(mojo::MakeRequest(&stream_ptr_),
@@ -40,10 +41,10 @@
                              base::Unretained(this)),
               base::BindOnce(&AudioInputStreamHandle::CallDeleter,
                              base::Unretained(this))) {
-  // Unretained is safe since |this| owns |stream_| and |client_|.
-  DCHECK(client_);
+  // Unretained is safe since |this| owns |stream_| and |client_remote_|.
+  DCHECK(client_remote_);
   DCHECK(deleter_callback_);
-  client_.set_connection_error_handler(base::BindOnce(
+  client_remote_.set_disconnect_handler(base::BindOnce(
       &AudioInputStreamHandle::CallDeleter, base::Unretained(this)));
 }
 
@@ -61,12 +62,12 @@
     media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
     bool initially_muted) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(client_);
+  DCHECK(client_remote_);
   DCHECK(deleter_callback_)
       << "|deleter_callback_| was called, but |this| hasn't been destructed!";
-  client_->StreamCreated(std::move(stream_ptr_),
-                         std::move(stream_client_request_),
-                         std::move(data_pipe), initially_muted, stream_id_);
+  client_remote_->StreamCreated(
+      std::move(stream_ptr_), std::move(stream_client_request_),
+      std::move(data_pipe), initially_muted, stream_id_);
 }
 
 void AudioInputStreamHandle::CallDeleter() {
diff --git a/content/browser/renderer_host/media/audio_input_stream_handle.h b/content/browser/renderer_host/media/audio_input_stream_handle.h
index 1147dd3..728113b 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle.h
+++ b/content/browser/renderer_host/media/audio_input_stream_handle.h
@@ -13,6 +13,8 @@
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "media/mojo/services/mojo_audio_input_stream.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "mojo/public/cpp/system/handle.h"
 
@@ -26,10 +28,12 @@
 
   // |deleter_callback| will be called when encountering an error, in which
   // case |this| should be synchronously destructed by its owner.
-  AudioInputStreamHandle(mojom::RendererAudioInputStreamFactoryClientPtr client,
-                         media::MojoAudioInputStream::CreateDelegateCallback
-                             create_delegate_callback,
-                         DeleterCallback deleter_callback);
+  AudioInputStreamHandle(
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+          client_pending_remote,
+      media::MojoAudioInputStream::CreateDelegateCallback
+          create_delegate_callback,
+      DeleterCallback deleter_callback);
 
   ~AudioInputStreamHandle();
 
@@ -44,7 +48,7 @@
   SEQUENCE_CHECKER(sequence_checker_);
   const base::UnguessableToken stream_id_;
   DeleterCallback deleter_callback_;
-  mojom::RendererAudioInputStreamFactoryClientPtr client_;
+  mojo::Remote<mojom::RendererAudioInputStreamFactoryClient> client_remote_;
   media::mojom::AudioInputStreamPtr stream_ptr_;
   media::mojom::AudioInputStreamClientRequest stream_client_request_;
   media::MojoAudioInputStream stream_;
diff --git a/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc b/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc
index ffeeea0..a83a0fd 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc
+++ b/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc
@@ -14,7 +14,8 @@
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
 #include "media/audio/audio_input_delegate.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -80,9 +81,11 @@
 class AudioInputStreamHandleTest : public Test {
  public:
   AudioInputStreamHandleTest()
-      : client_binding_(&client_, mojo::MakeRequest(&client_ptr_)),
+      : client_receiver_(
+            &client_,
+            client_pending_remote_.InitWithNewPipeAndPassReceiver()),
         handle_(std::make_unique<AudioInputStreamHandle>(
-            std::move(client_ptr_),
+            std::move(client_pending_remote_),
             base::BindOnce(&CreateFakeDelegate, &event_handler_),
             deleter_.Get())),
         local_(std::make_unique<base::CancelableSyncSocket>()),
@@ -109,7 +112,7 @@
 
   MockRendererAudioInputStreamFactoryClient* client() { return &client_; }
 
-  void UnbindClientBinding() { client_binding_.Unbind(); }
+  void ResetClientReceiver() { client_receiver_.reset(); }
 
   void ExpectHandleWillCallDeleter() {
     EXPECT_CALL(deleter_, Run(handle_.release()))
@@ -124,8 +127,9 @@
  private:
   base::test::SingleThreadTaskEnvironment task_environment_;
   StrictMock<MockRendererAudioInputStreamFactoryClient> client_;
-  mojom::RendererAudioInputStreamFactoryClientPtr client_ptr_;
-  mojo::Binding<mojom::RendererAudioInputStreamFactoryClient> client_binding_;
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+      client_pending_remote_;
+  mojo::Receiver<mojom::RendererAudioInputStreamFactoryClient> client_receiver_;
   StrictMock<MockDeleter> deleter_;
   media::AudioInputDelegate::EventHandler* event_handler_ = nullptr;
   std::unique_ptr<AudioInputStreamHandle> handle_;
@@ -148,7 +152,7 @@
        DestructClientBeforeCreationFinishes_CancelsStreamCreation) {
   ExpectHandleWillCallDeleter();
 
-  UnbindClientBinding();
+  ResetClientReceiver();
   base::RunLoop().RunUntilIdle();
 
   VerifyDeleterWasCalled();
@@ -165,7 +169,7 @@
 
   ExpectHandleWillCallDeleter();
 
-  UnbindClientBinding();
+  ResetClientReceiver();
   base::RunLoop().RunUntilIdle();
 
   VerifyDeleterWasCalled();
diff --git a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.cc b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.cc
index d60c179..60da403 100644
--- a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.cc
+++ b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.cc
@@ -124,7 +124,7 @@
 }
 
 void OldRenderFrameAudioInputStreamFactory::CreateStream(
-    mojom::RendererAudioInputStreamFactoryClientPtr client,
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
     const base::UnguessableToken& session_id,
     const media::AudioParameters& audio_params,
     bool automatic_gain_control,
@@ -151,7 +151,7 @@
 }
 
 void OldRenderFrameAudioInputStreamFactory::DoCreateStream(
-    mojom::RendererAudioInputStreamFactoryClientPtr client,
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
     const base::UnguessableToken& session_id,
     const media::AudioParameters& audio_params,
     bool automatic_gain_control,
diff --git a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h
index 1c660b6..b325804 100644
--- a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h
+++ b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h
@@ -25,6 +25,7 @@
 #include "media/audio/audio_input_delegate.h"
 #include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 
@@ -72,20 +73,21 @@
 
   // mojom::RendererAudioInputStreamFactory implementation.
   void CreateStream(
-      mojom::RendererAudioInputStreamFactoryClientPtr client,
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
       const base::UnguessableToken& session_id,
       const media::AudioParameters& audio_params,
       bool automatic_gain_control,
       uint32_t shared_memory_count,
       audio::mojom::AudioProcessingConfigPtr processing_config) override;
 
-  void DoCreateStream(mojom::RendererAudioInputStreamFactoryClientPtr client,
-                      const base::UnguessableToken& session_id,
-                      const media::AudioParameters& audio_params,
-                      bool automatic_gain_control,
-                      uint32_t shared_memory_count,
-                      AudioInputDeviceManager::KeyboardMicRegistration
-                          keyboard_mic_registration);
+  void DoCreateStream(
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
+      const base::UnguessableToken& session_id,
+      const media::AudioParameters& audio_params,
+      bool automatic_gain_control,
+      uint32_t shared_memory_count,
+      AudioInputDeviceManager::KeyboardMicRegistration
+          keyboard_mic_registration);
 
   void AssociateInputAndOutputForAec(
       const base::UnguessableToken& input_stream_id,
diff --git a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
index 87fc29f..d1a122e1c 100644
--- a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
@@ -24,6 +24,8 @@
 #include "media/base/audio_parameters.h"
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
@@ -114,7 +116,9 @@
         audio_manager_(std::make_unique<media::TestAudioThread>()),
         audio_system_(&audio_manager_),
         media_stream_manager_(&audio_system_, audio_manager_.GetTaskRunner()),
-        client_binding_(&client_, mojo::MakeRequest(&client_ptr_)),
+        client_receiver_(
+            &client_,
+            client_pending_remote_.InitWithNewPipeAndPassReceiver()),
         factory_handle_(RenderFrameAudioInputStreamFactoryHandle::CreateFactory(
             base::BindRepeating(&CreateFakeDelegate, &event_handler_),
             &media_stream_manager_,
@@ -148,15 +152,16 @@
   mojo::Remote<mojom::RendererAudioInputStreamFactory> factory_remote_;
   media::mojom::AudioInputStreamPtr stream_ptr_;
   MockRendererAudioInputStreamFactoryClient client_;
-  mojom::RendererAudioInputStreamFactoryClientPtr client_ptr_;
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+      client_pending_remote_;
   media::AudioInputDelegate::EventHandler* event_handler_ = nullptr;
-  mojo::Binding<mojom::RendererAudioInputStreamFactoryClient> client_binding_;
+  mojo::Receiver<mojom::RendererAudioInputStreamFactoryClient> client_receiver_;
   UniqueAudioInputStreamFactoryPtr factory_handle_;
 };
 
 TEST_F(OldOldRenderFrameAudioInputStreamFactoryTest, CreateStream) {
   const base::UnguessableToken kSessionId = base::UnguessableToken::Create();
-  factory_remote_->CreateStream(std::move(client_ptr_), kSessionId,
+  factory_remote_->CreateStream(std::move(client_pending_remote_), kSessionId,
                                 GetTestAudioParameters(), kAGC,
                                 kSharedMemoryCount, nullptr);
 
diff --git a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
index 2e7ab18..5f620454 100644
--- a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
@@ -32,6 +32,7 @@
 #include "content/public/browser/web_contents_media_capture_id.h"
 #include "media/audio/audio_device_description.h"
 #include "media/base/audio_parameters.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 #include "third_party/blink/public/common/mediastream/media_stream_request.h"
@@ -112,7 +113,7 @@
 
   // mojom::RendererAudioInputStreamFactory implementation.
   void CreateStream(
-      mojom::RendererAudioInputStreamFactoryClientPtr client,
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
       const base::UnguessableToken& session_id,
       const media::AudioParameters& audio_params,
       bool automatic_gain_control,
@@ -124,7 +125,7 @@
       const std::string& output_device_id) final;
 
   void CreateLoopbackStream(
-      mojom::RendererAudioInputStreamFactoryClientPtr client,
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
       const media::AudioParameters& audio_params,
       uint32_t shared_memory_count,
       bool disable_local_echo,
@@ -215,7 +216,7 @@
 }
 
 void RenderFrameAudioInputStreamFactory::Core::CreateStream(
-    mojom::RendererAudioInputStreamFactoryClientPtr client,
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
     const base::UnguessableToken& session_id,
     const media::AudioParameters& audio_params,
     bool automatic_gain_control,
@@ -277,7 +278,7 @@
 }
 
 void RenderFrameAudioInputStreamFactory::Core::CreateLoopbackStream(
-    mojom::RendererAudioInputStreamFactoryClientPtr client,
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
     const media::AudioParameters& audio_params,
     uint32_t shared_memory_count,
     bool disable_local_echo,
diff --git a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
index 8ce565c9..a3f65d6a 100644
--- a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
@@ -220,8 +220,8 @@
           kDeviceName));
   base::RunLoop().RunUntilIdle();
 
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
-  mojo::MakeRequest(&client);
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+  ignore_result(client.InitWithNewPipeAndPassReceiver());
   factory_remote->CreateStream(std::move(client), session_id, kParams, kAGC,
                                kSharedMemoryCount, nullptr);
 
@@ -247,8 +247,8 @@
           capture_id.ToString(), kDeviceName));
   base::RunLoop().RunUntilIdle();
 
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
-  mojo::MakeRequest(&client);
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+  ignore_result(client.InitWithNewPipeAndPassReceiver());
   factory_remote->CreateStream(std::move(client), session_id, kParams, kAGC,
                                kSharedMemoryCount, nullptr);
 
@@ -275,8 +275,8 @@
   base::RunLoop().RunUntilIdle();
 
   source_contents.reset();
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
-  mojo::MakeRequest(&client);
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+  ignore_result(client.InitWithNewPipeAndPassReceiver());
   factory_remote->CreateStream(std::move(client), session_id, kParams, kAGC,
                                kSharedMemoryCount, nullptr);
 
@@ -293,9 +293,8 @@
       main_rfh());
 
   base::UnguessableToken session_id = base::UnguessableToken::Create();
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
-  mojo::MakeRequest(&client);
-
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+  ignore_result(client.InitWithNewPipeAndPassReceiver());
   factory_remote->CreateStream(std::move(client), session_id, kParams, kAGC,
                                kSharedMemoryCount, nullptr);
 
diff --git a/content/browser/resources/media/webrtc_internals.js b/content/browser/resources/media/webrtc_internals.js
index be9a430..ff00742 100644
--- a/content/browser/resources/media/webrtc_internals.js
+++ b/content/browser/resources/media/webrtc_internals.js
@@ -124,6 +124,7 @@
   const p = document.createElement('p');
 
   const selectElement = document.createElement('select');
+  selectElement.setAttribute('id', 'statsSelectElement');
   selectElement.onchange = () => {
     currentGetStatsMethod = selectElement.value;
     Object.keys(peerConnectionDataStore).forEach(id => {
@@ -176,6 +177,18 @@
   }
 }
 
+/*
+ * Change to use the legacy getStats() API instead. This is used for a
+ * work-around for https://crbug.com/999136.
+ * TODO(https://crbug.com/1004239): Delete this method.
+ */
+function changeToLegacyGetStats() {
+  currentGetStatsMethod = OPTION_GETSTATS_LEGACY;
+  const selectElement = $('statsSelectElement');
+  selectElement.value = currentGetStatsMethod;
+  requestStats();
+}
+
 /**
  * A helper function for getting a peer connection element id.
  *
diff --git a/content/common/media/renderer_audio_input_stream_factory.mojom b/content/common/media/renderer_audio_input_stream_factory.mojom
index 5d43f4f7..a6120da 100644
--- a/content/common/media/renderer_audio_input_stream_factory.mojom
+++ b/content/common/media/renderer_audio_input_stream_factory.mojom
@@ -17,7 +17,7 @@
 // by the lifetime of the client.
 interface RendererAudioInputStreamFactory {
   CreateStream(
-      RendererAudioInputStreamFactoryClient client,
+      pending_remote<RendererAudioInputStreamFactoryClient> client,
       mojo_base.mojom.UnguessableToken session_id,
       media.mojom.AudioParameters params,
       bool automatic_gain_control,
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h
index c55df1c..34e7d66a 100644
--- a/content/public/browser/navigation_handle.h
+++ b/content/public/browser/navigation_handle.h
@@ -30,6 +30,7 @@
 }  // namespace net
 
 namespace content {
+struct GlobalFrameRoutingId;
 struct GlobalRequestID;
 class NavigationThrottle;
 class NavigationUIData;
@@ -144,12 +145,6 @@
   // |bool IsPost()| as opposed to |const std::string& GetMethod()| method.
   virtual bool IsPost() = 0;
 
-  // Returns the POST body associated with this navigation. This will be null
-  // for GET and/or other non-POST requests (or if a response to a POST request
-  // was a redirect that changed the method to GET - for example 302).
-  virtual const scoped_refptr<network::ResourceRequestBody>&
-  GetResourceRequestBody() = 0;
-
   // Returns a sanitized version of the referrer for this request.
   virtual const blink::mojom::Referrer& GetReferrer() = 0;
 
@@ -182,6 +177,14 @@
   // with an error page.
   virtual RenderFrameHost* GetRenderFrameHost() = 0;
 
+  // Returns the id of the RenderFrameHost this navigation is committing from.
+  // In case a navigation happens within the same RenderFrameHost,
+  // GetRenderFrameHost() and GetPreviousRenderFrameHostId() will refer to the
+  // same RenderFrameHost.
+  // Note: This is not guaranteed to refer to a RenderFrameHost that still
+  // exists.
+  virtual GlobalFrameRoutingId GetPreviousRenderFrameHostId() = 0;
+
   // Whether the navigation happened without changing document. Examples of
   // same document navigations are:
   // * reference fragment navigations
diff --git a/content/public/test/mock_navigation_handle.h b/content/public/test/mock_navigation_handle.h
index e62ab17..1ab6c05b 100644
--- a/content/public/test/mock_navigation_handle.h
+++ b/content/public/test/mock_navigation_handle.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "content/public/browser/global_request_id.h"
+#include "content/public/browser/global_routing_id.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
 #include "net/base/ip_endpoint.h"
@@ -35,6 +36,7 @@
   MOCK_METHOD0(IsParentMainFrame, bool());
   bool IsRendererInitiated() override { return true; }
   MOCK_METHOD0(GetFrameTreeNodeId, int());
+  MOCK_METHOD0(GetPreviousRenderFrameHostId, GlobalFrameRoutingId());
   RenderFrameHost* GetParentFrame() override {
     return render_frame_host_ ? render_frame_host_->GetParent() : nullptr;
   }
@@ -48,8 +50,6 @@
   RestoreType GetRestoreType() override { return RestoreType::NONE; }
   const GURL& GetBaseURLForDataURL() override { return base_url_for_data_url_; }
   MOCK_METHOD0(IsPost, bool());
-  MOCK_METHOD0(GetResourceRequestBody,
-               const scoped_refptr<network::ResourceRequestBody>&());
   const blink::mojom::Referrer& GetReferrer() override { return referrer_; }
   MOCK_METHOD0(HasUserGesture, bool());
   ui::PageTransition GetPageTransition() override { return page_transition_; }
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index 22ef479b..fe8fb0c3 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -507,6 +507,7 @@
           EXPECT_EQ(0u, result->number_of_live_resources);
           EXPECT_EQ(0u,
                     result->number_of_live_context_lifecycle_state_observers);
+          EXPECT_EQ(0u, result->number_of_live_script_promises);
           EXPECT_EQ(0u, result->number_of_live_frames);
           EXPECT_EQ(0u, result->number_of_live_v8_per_context_data);
           EXPECT_EQ(0u, result->number_of_worker_global_scopes);
diff --git a/content/renderer/input/frame_input_handler_impl.cc b/content/renderer/input/frame_input_handler_impl.cc
index d9d42986..7a9098cf 100644
--- a/content/renderer/input/frame_input_handler_impl.cc
+++ b/content/renderer/input/frame_input_handler_impl.cc
@@ -9,12 +9,15 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "content/common/input/ime_text_span_conversions.h"
+#include "content/common/input/input_handler.mojom.h"
 #include "content/renderer/compositor/layer_tree_view.h"
 #include "content/renderer/ime_event_guard.h"
 #include "content/renderer/input/widget_input_handler_manager.h"
 #include "content/renderer/render_thread_impl.h"
 #include "content/renderer/render_view_impl.h"
 #include "content/renderer/render_widget.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/web/web_input_method_controller.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 
@@ -22,9 +25,8 @@
 
 FrameInputHandlerImpl::FrameInputHandlerImpl(
     base::WeakPtr<RenderFrameImpl> render_frame,
-    mojom::FrameInputHandlerRequest request)
-    : binding_(this),
-      render_frame_(render_frame),
+    mojo::PendingReceiver<mojom::FrameInputHandler> receiver)
+    : render_frame_(render_frame),
       input_event_queue_(
           render_frame->GetLocalRootRenderWidget()->GetInputEventQueue()),
       main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
@@ -37,10 +39,10 @@
     // Mojo channel bound on compositor thread.
     RenderThreadImpl::current()->compositor_task_runner()->PostTask(
         FROM_HERE, base::BindOnce(&FrameInputHandlerImpl::BindNow,
-                                  base::Unretained(this), std::move(request)));
+                                  base::Unretained(this), std::move(receiver)));
   } else {
     // Mojo channel bound on main thread.
-    BindNow(std::move(request));
+    BindNow(std::move(receiver));
   }
 }
 
@@ -49,11 +51,11 @@
 // static
 void FrameInputHandlerImpl::CreateMojoService(
     base::WeakPtr<RenderFrameImpl> render_frame,
-    mojom::FrameInputHandlerRequest request) {
+    mojo::PendingReceiver<mojom::FrameInputHandler> receiver) {
   DCHECK(render_frame);
 
   // Owns itself. Will be deleted when message pipe is destroyed.
-  new FrameInputHandlerImpl(render_frame, std::move(request));
+  new FrameInputHandlerImpl(render_frame, std::move(receiver));
 }
 
 void FrameInputHandlerImpl::RunOnMainThread(base::OnceClosure closure) {
@@ -450,9 +452,9 @@
 
 void FrameInputHandlerImpl::Release() {
   if (!main_thread_task_runner_->BelongsToCurrentThread()) {
-    // Close the binding on the compositor thread first before telling the main
+    // Close the receiver on the compositor thread first before telling the main
     // thread to delete this object.
-    binding_.Close();
+    receiver_.reset();
     main_thread_task_runner_->PostTask(
         FROM_HERE, base::BindOnce(&FrameInputHandlerImpl::Release, weak_this_));
     return;
@@ -460,9 +462,10 @@
   delete this;
 }
 
-void FrameInputHandlerImpl::BindNow(mojom::FrameInputHandlerRequest request) {
-  binding_.Bind(std::move(request));
-  binding_.set_connection_error_handler(
+void FrameInputHandlerImpl::BindNow(
+    mojo::PendingReceiver<mojom::FrameInputHandler> receiver) {
+  receiver_.Bind(std::move(receiver));
+  receiver_.set_disconnect_handler(
       base::BindOnce(&FrameInputHandlerImpl::Release, base::Unretained(this)));
 }
 
diff --git a/content/renderer/input/frame_input_handler_impl.h b/content/renderer/input/frame_input_handler_impl.h
index 29e4a17..7780f07a 100644
--- a/content/renderer/input/frame_input_handler_impl.h
+++ b/content/renderer/input/frame_input_handler_impl.h
@@ -10,7 +10,8 @@
 #include "content/common/content_export.h"
 #include "content/common/input/input_handler.mojom.h"
 #include "content/renderer/render_frame_impl.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 
 namespace content {
 class MainThreadEventQueue;
@@ -41,7 +42,7 @@
  public:
   static void CreateMojoService(
       base::WeakPtr<RenderFrameImpl> render_frame,
-      mojom::FrameInputHandlerRequest request);
+      mojo::PendingReceiver<mojom::FrameInputHandler> receiver);
 
   void SetCompositionFromExistingText(
       int32_t start,
@@ -97,16 +98,17 @@
     bool original_pasting_value_;
   };
 
-  FrameInputHandlerImpl(base::WeakPtr<RenderFrameImpl> render_frame,
-                        mojom::FrameInputHandlerRequest request);
+  FrameInputHandlerImpl(
+      base::WeakPtr<RenderFrameImpl> render_frame,
+      mojo::PendingReceiver<mojom::FrameInputHandler> receiver);
 
   void RunOnMainThread(base::OnceClosure closure);
-  void BindNow(mojom::FrameInputHandlerRequest request);
+  void BindNow(mojo::PendingReceiver<mojom::FrameInputHandler> receiver);
   void ExecuteCommandOnMainThread(const std::string& command,
                                   UpdateState state);
   void Release();
 
-  mojo::Binding<mojom::FrameInputHandler> binding_;
+  mojo::Receiver<mojom::FrameInputHandler> receiver_{this};
 
   // |render_frame_| should only be accessed on the main thread. Use
   // GetRenderFrame so that it will DCHECK this for you.
diff --git a/content/renderer/loader/web_url_loader_impl.cc b/content/renderer/loader/web_url_loader_impl.cc
index 0533ac6..651c7c3e 100644
--- a/content/renderer/loader/web_url_loader_impl.cc
+++ b/content/renderer/loader/web_url_loader_impl.cc
@@ -16,7 +16,6 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/command_line.h"
-#include "base/debug/dump_without_crashing.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
@@ -57,7 +56,6 @@
 #include "net/ssl/ssl_connection_status_flags.h"
 #include "net/ssl/ssl_info.h"
 #include "net/url_request/url_request_data_job.h"
-#include "net/url_request/url_request_job.h"
 #include "services/network/loader_util.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
@@ -662,29 +660,10 @@
   }
   if (!request.IsolatedWorldOrigin().IsNull())
     resource_request->isolated_world_origin = request.IsolatedWorldOrigin();
-
   resource_request->referrer = referrer_url;
+
   resource_request->referrer_policy =
       Referrer::ReferrerPolicyForUrlRequest(request.GetReferrerPolicy());
-
-  // Record information to help debug issues like http://crbug.com/422871. We
-  // perform this check here, before the request is passed to the network
-  // service, because the stack trace here has more information regarding the
-  // request's origins.
-  if (resource_request->referrer !=
-      net::URLRequestJob::ComputeReferrerForPolicy(
-          resource_request->referrer_policy, resource_request->referrer,
-          resource_request->request_initiator.value_or(url::Origin()),
-          resource_request->url)) {
-    if (resource_request->url.SchemeIsHTTPOrHTTPS()) {
-      auto referrer_policy = resource_request->referrer_policy;
-      base::debug::Alias(&referrer_policy);
-      DEBUG_ALIAS_FOR_GURL(target_buf, resource_request->url);
-      DEBUG_ALIAS_FOR_GURL(referrer_buf, resource_request->referrer);
-      base::debug::DumpWithoutCrashing();
-    }
-  }
-
   resource_request->resource_type =
       static_cast<int>(WebURLRequestToResourceType(request));
 
diff --git a/content/renderer/media/audio/audio_input_ipc_factory.cc b/content/renderer/media/audio/audio_input_ipc_factory.cc
index fc89fb0..4b49ebe 100644
--- a/content/renderer/media/audio/audio_input_ipc_factory.cc
+++ b/content/renderer/media/audio/audio_input_ipc_factory.cc
@@ -15,6 +15,7 @@
 #include "content/renderer/media/audio/mojo_audio_input_ipc.h"
 #include "content/renderer/render_frame_impl.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 
@@ -25,7 +26,7 @@
 void CreateMojoAudioInputStreamOnMainThread(
     int frame_id,
     const media::AudioSourceParameters& source_params,
-    mojom::RendererAudioInputStreamFactoryClientPtr client,
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
     mojo::PendingReceiver<audio::mojom::AudioProcessorControls>
         controls_receiver,
     const media::AudioParameters& params,
@@ -49,7 +50,7 @@
     scoped_refptr<base::SequencedTaskRunner> main_task_runner,
     int frame_id,
     const media::AudioSourceParameters& source_params,
-    mojom::RendererAudioInputStreamFactoryClientPtr client,
+    mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
     mojo::PendingReceiver<audio::mojom::AudioProcessorControls>
         controls_receiver,
     const media::AudioParameters& params,
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc.cc b/content/renderer/media/audio/mojo_audio_input_ipc.cc
index dc60474..22398430 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc.cc
+++ b/content/renderer/media/audio/mojo_audio_input_ipc.cc
@@ -22,8 +22,7 @@
     : source_params_(source_params),
       stream_creator_(std::move(stream_creator)),
       stream_associator_(std::move(stream_associator)),
-      stream_client_binding_(this),
-      factory_client_binding_(this) {
+      stream_client_binding_(this) {
   DETACH_FROM_SEQUENCE(sequence_checker_);
   DCHECK(stream_creator_);
   DCHECK(stream_associator_);
@@ -41,9 +40,9 @@
 
   delegate_ = delegate;
 
-  mojom::RendererAudioInputStreamFactoryClientPtr client;
-  factory_client_binding_.Bind(mojo::MakeRequest(&client));
-  factory_client_binding_.set_connection_error_handler(base::BindOnce(
+  mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client;
+  factory_client_receiver_.Bind(client.InitWithNewPipeAndPassReceiver());
+  factory_client_receiver_.set_disconnect_handler(base::BindOnce(
       &media::AudioInputIPCDelegate::OnError, base::Unretained(delegate_)));
 
   stream_creation_start_time_ = base::TimeTicks::Now();
@@ -83,8 +82,8 @@
 void MojoAudioInputIPC::CloseStream() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   delegate_ = nullptr;
-  if (factory_client_binding_.is_bound())
-    factory_client_binding_.Unbind();
+  if (factory_client_receiver_.is_bound())
+    factory_client_receiver_.reset();
   if (stream_client_binding_.is_bound())
     stream_client_binding_.Unbind();
   stream_.reset();
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc.h b/content/renderer/media/audio/mojo_audio_input_ipc.h
index 169257f..e72643b1 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc.h
+++ b/content/renderer/media/audio/mojo_audio_input_ipc.h
@@ -20,6 +20,8 @@
 #include "media/webrtc/audio_processor_controls.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 
@@ -39,7 +41,7 @@
   // called or |client| is destructed.
   using StreamCreatorCB = base::RepeatingCallback<void(
       const media::AudioSourceParameters& source_params,
-      mojom::RendererAudioInputStreamFactoryClientPtr client,
+      mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient> client,
       mojo::PendingReceiver<audio::mojom::AudioProcessorControls>
           controls_receiver,
       const media::AudioParameters& params,
@@ -94,7 +96,8 @@
   // Initialized on StreamCreated.
   base::Optional<base::UnguessableToken> stream_id_;
   mojo::Binding<AudioInputStreamClient> stream_client_binding_;
-  mojo::Binding<RendererAudioInputStreamFactoryClient> factory_client_binding_;
+  mojo::Receiver<RendererAudioInputStreamFactoryClient>
+      factory_client_receiver_{this};
   media::AudioInputIPCDelegate* delegate_ = nullptr;
 
   base::TimeTicks stream_creation_start_time_;
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc b/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
index 2bff832..ae3a58d 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
+++ b/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
@@ -19,6 +19,8 @@
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -80,7 +82,8 @@
       : stream_(stream), binding_(stream_), initially_muted_(initially_muted) {}
 
   void Create(const media::AudioSourceParameters& source_params,
-              mojom::RendererAudioInputStreamFactoryClientPtr factory_client,
+              mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+                  factory_client,
               mojo::PendingReceiver<audio::mojom::AudioProcessorControls>
                   controls_receiver,
               const media::AudioParameters& params,
@@ -89,7 +92,8 @@
     EXPECT_FALSE(binding_.is_bound());
     EXPECT_NE(stream_, nullptr);
     EXPECT_EQ(source_params.session_id, SourceParams().session_id);
-    std::swap(factory_client_, factory_client);
+    factory_client_.reset();
+    factory_client_.Bind(std::move(factory_client));
     media::mojom::AudioInputStreamPtr stream_ptr;
     binding_.Bind(mojo::MakeRequest(&stream_ptr));
     base::CancelableSyncSocket foreign_socket;
@@ -122,7 +126,7 @@
  private:
   media::mojom::AudioInputStream* stream_;
   media::mojom::AudioInputStreamClientPtr stream_client_;
-  mojom::RendererAudioInputStreamFactoryClientPtr factory_client_;
+  mojo::Remote<mojom::RendererAudioInputStreamFactoryClient> factory_client_;
   mojo::Binding<media::mojom::AudioInputStream> binding_;
   bool initially_muted_;
   base::CancelableSyncSocket socket_;
@@ -162,17 +166,18 @@
       base::test::SingleThreadTaskEnvironment::MainThreadType::IO);
   StrictMock<MockDelegate> delegate;
 
-  const std::unique_ptr<media::AudioInputIPC> ipc =
-      std::make_unique<MojoAudioInputIPC>(
-          SourceParams(),
-          base::BindRepeating(
-              [](const media::AudioSourceParameters&,
-                 mojom::RendererAudioInputStreamFactoryClientPtr factory_client,
-                 mojo::PendingReceiver<audio::mojom::AudioProcessorControls>
-                     controls_receiver,
-                 const media::AudioParameters& params,
-                 bool automatic_gain_control, uint32_t total_segments) {}),
-          base::BindRepeating(&AssociateOutputForAec));
+  const std::unique_ptr<media::AudioInputIPC> ipc = std::make_unique<
+      MojoAudioInputIPC>(
+      SourceParams(),
+      base::BindRepeating(
+          [](const media::AudioSourceParameters&,
+             mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
+                 factory_client,
+             mojo::PendingReceiver<audio::mojom::AudioProcessorControls>
+                 controls_receiver,
+             const media::AudioParameters& params, bool automatic_gain_control,
+             uint32_t total_segments) {}),
+      base::BindRepeating(&AssociateOutputForAec));
 
   EXPECT_CALL(delegate, OnError());
 
diff --git a/content/shell/browser/web_test/leak_detector.cc b/content/shell/browser/web_test/leak_detector.cc
index d13429e3..085f931 100644
--- a/content/shell/browser/web_test/leak_detector.cc
+++ b/content/shell/browser/web_test/leak_detector.cc
@@ -28,6 +28,7 @@
 const int kInitialNumberOfLiveNodes = 4;
 const int kInitialNumberOfLiveLayoutObjects = 3;
 const int kInitialNumberOfLiveResources = 0;
+const int kInitialNumberOfScriptPromises = 0;
 const int kInitialNumberOfLiveFrames = 1;
 const int kInitialNumberOfWorkerGlobalScopes = 0;
 const int kInitialNumberOfLiveResourceFetchers = 1;
@@ -49,6 +50,8 @@
   previous_result_->number_of_live_resources = kInitialNumberOfLiveResources;
   previous_result_->number_of_live_context_lifecycle_state_observers =
       kInitialNumberOfLiveContextLifecycleStateObservers;
+  previous_result_->number_of_live_script_promises =
+      kInitialNumberOfScriptPromises;
   previous_result_->number_of_live_frames = kInitialNumberOfLiveFrames;
   previous_result_->number_of_live_v8_per_context_data =
       kInitialNumberOfV8PerContextData;
@@ -124,6 +127,13 @@
           result->number_of_live_context_lifecycle_state_observers);
       detail.Set("numberOfLiveContextLifecycleStateObservers", std::move(list));
     }
+    if (previous_result_->number_of_live_script_promises <
+        result->number_of_live_script_promises) {
+      auto list = std::make_unique<base::ListValue>();
+      list->AppendInteger(previous_result_->number_of_live_script_promises);
+      list->AppendInteger(result->number_of_live_script_promises);
+      detail.Set("numberOfLiveScriptPromises", std::move(list));
+    }
     if (previous_result_->number_of_live_frames <
         result->number_of_live_frames) {
       auto list = std::make_unique<base::ListValue>();
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index ba05a1a..e7fbc41e 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -20,7 +20,9 @@
 #include "content/renderer/input/frame_input_handler_impl.h"
 #include "content/renderer/loader/web_url_loader_impl.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/data_url.h"
 #include "services/network/public/cpp/resource_response.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
@@ -461,10 +463,11 @@
 
 mojom::FrameInputHandler* TestRenderFrame::GetFrameInputHandler() {
   if (!frame_input_handler_) {
-    mojom::FrameInputHandlerRequest frame_input_handler_request =
-        mojo::MakeRequest(&frame_input_handler_);
+    mojo::PendingReceiver<mojom::FrameInputHandler>
+        frame_input_handler_receiver =
+            frame_input_handler_.BindNewPipeAndPassReceiver();
     FrameInputHandlerImpl::CreateMojoService(
-        weak_factory_.GetWeakPtr(), std::move(frame_input_handler_request));
+        weak_factory_.GetWeakPtr(), std::move(frame_input_handler_receiver));
   }
   return frame_input_handler_.get();
 }
diff --git a/content/test/test_render_frame.h b/content/test/test_render_frame.h
index 40f54da..5941a4f 100644
--- a/content/test/test_render_frame.h
+++ b/content/test/test_render_frame.h
@@ -15,6 +15,7 @@
 #include "content/renderer/render_frame_impl.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h"
 
 namespace blink {
@@ -92,7 +93,7 @@
 
   std::unique_ptr<MockFrameHost> mock_frame_host_;
   base::Optional<std::string> next_navigation_html_override_;
-  mojom::FrameInputHandlerPtr frame_input_handler_;
+  mojo::Remote<mojom::FrameInputHandler> frame_input_handler_;
 
   mojo::AssociatedRemote<mojom::NavigationClient> mock_navigation_client_;
 
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
index 62f4e94..d4d0d95 100644
--- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
+++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
@@ -91,10 +91,6 @@
       &WebRequestProxyingURLLoaderFactory::InProgressRequest::OnRequestError,
       weak_factory_.GetWeakPtr(),
       network::URLLoaderCompletionStatus(net::ERR_ABORTED)));
-  proxied_loader_binding_.set_connection_error_handler(base::BindOnce(
-      &WebRequestProxyingURLLoaderFactory::InProgressRequest::OnRequestError,
-      weak_factory_.GetWeakPtr(),
-      network::URLLoaderCompletionStatus(net::ERR_ABORTED)));
 }
 
 WebRequestProxyingURLLoaderFactory::InProgressRequest::~InProgressRequest() {
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 0564f1a..3f82640 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -2082,9 +2082,9 @@
       to dismiss a presented view with pending changes.">
         Discard Changes
       </message>
-      <message name="IDS_IOS_VIEW_CONTROLLER_DISMISS_CANCEL_CHANGES" desc="Text displayed on an alert button for Canceling the alert whenever trying
+      <message name="IDS_IOS_VIEW_CONTROLLER_DISMISS_CANCEL_CHANGES" desc="Text displayed on an alert button to prevent dismissal of the view whenever trying
       to dismiss a presented view with pending changes.">
-        Cancel
+        Keep Editing
       </message>
       <message name="IDS_IOS_ADD_CREDIT_CARD_VIEW_CONTROLLER_DISMISS_ALERT_TITLE" desc="Text displayed on an alert as a title whenever trying to dismiss a presented 'add new credit card view' with pending changes.">
         Are you sure you want to discard this new card?
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index 864b98f..cb415a7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">إخفاء كلمة المرور</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> من العناصر</translation>
 <translation id="1491277525950327607">انقر مرّتين لتبديل الإعداد</translation>
+<translation id="1509486075633541495">تسجيل الدخول إلى موقع إلكتروني</translation>
 <translation id="152234381334907219">المواقع التي لن تحفظ كلمات المرور أبدًا</translation>
 <translation id="1540800554400757039">العنوان 1</translation>
 <translation id="1545749641540134597">فحص رمز الاستجابة السريعة</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index 912f0eb3..bf0e342 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Скриване на паролата</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> елемента</translation>
 <translation id="1491277525950327607">Докоснете двукратно за превключване на настройката</translation>
+<translation id="1509486075633541495">Вход в уебсайта</translation>
 <translation id="152234381334907219">Незапазвани никога</translation>
 <translation id="1540800554400757039">Адрес 1</translation>
 <translation id="1545749641540134597">Сканирайте код за бърза реакция</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 2a47a8c..b906e3a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Amaga la contrasenya</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> elements</translation>
 <translation id="1491277525950327607">Fes doble toc per canviar la configuració</translation>
+<translation id="1509486075633541495">Inicia la sessió al lloc web</translation>
 <translation id="152234381334907219">Contrasenyes que no es desen mai</translation>
 <translation id="1540800554400757039">Adreça 1</translation>
 <translation id="1545749641540134597">Escaneja el codi QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 3767d0c..06d677b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Skrýt heslo</translation>
 <translation id="145015347812617860">Počet položek: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Nastavení můžete přepnout dvojitým klepnutím</translation>
+<translation id="1509486075633541495">Přihlásit se k webu</translation>
 <translation id="152234381334907219">Neuloženo</translation>
 <translation id="1540800554400757039">První řádek adresy</translation>
 <translation id="1545749641540134597">Naskenovat QR kód</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index 1fc296c8..71617a1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Skjul adgangskode</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> elementer</translation>
 <translation id="1491277525950327607">Tryk to gange for at skifte indstilling</translation>
+<translation id="1509486075633541495">Log ind på website</translation>
 <translation id="152234381334907219">Gemmes aldrig</translation>
 <translation id="1540800554400757039">Adresse 1</translation>
 <translation id="1545749641540134597">Scan QR-kode</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 218771a..258dfaa 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Passwort ausblenden</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> Elemente</translation>
 <translation id="1491277525950327607">Zum Aktivieren bzw. Deaktivieren doppeltippen</translation>
+<translation id="1509486075633541495">Auf der Website anmelden</translation>
 <translation id="152234381334907219">Nie speichern für...</translation>
 <translation id="1540800554400757039">Adresse 1</translation>
 <translation id="1545749641540134597">QR-Code scannen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index f861e46..025e11a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Απόκρυψη κωδικού πρόσβασης</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> στοιχεία</translation>
 <translation id="1491277525950327607">Πατήστε δύο φορές για εναλλαγή της ρύθμισης</translation>
+<translation id="1509486075633541495">Σύνδεση στον ιστότοπο</translation>
 <translation id="152234381334907219">Δεν έγινε ποτέ αποθήκευση</translation>
 <translation id="1540800554400757039">Διεύθυνση 1</translation>
 <translation id="1545749641540134597">Σάρωση κωδικού QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index d4a7ed2..4c358028 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Ocultar contraseña</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> elementos</translation>
 <translation id="1491277525950327607">Presiona dos veces para activar o desactivar la configuración</translation>
+<translation id="1509486075633541495">Acceder al sitio web</translation>
 <translation id="152234381334907219">Nunca guardado</translation>
 <translation id="1540800554400757039">Dirección 1</translation>
 <translation id="1545749641540134597">Escanear código QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index c8bf189..ad61f53 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Ocultar contraseña</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> elementos</translation>
 <translation id="1491277525950327607">Toca dos veces para activar o desactivar esta opción</translation>
+<translation id="1509486075633541495">Inicia sesión en el sitio web</translation>
 <translation id="152234381334907219">Contraseñas que nunca se guardan</translation>
 <translation id="1540800554400757039">Dirección 1</translation>
 <translation id="1545749641540134597">Escanea el código QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index b926b24..75e3a665 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Peida parool</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> üksust</translation>
 <translation id="1491277525950327607">Seade vahetamiseks topeltpuudutage</translation>
+<translation id="1509486075633541495">Logi veebisaidile sisse</translation>
 <translation id="152234381334907219">Ei ole kunagi salvestatud</translation>
 <translation id="1540800554400757039">Aadress 1</translation>
 <translation id="1545749641540134597">QR-koodi skannimine</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 6f00dc71..5373252 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">پنهان کردن گذرواژه</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> مورد</translation>
 <translation id="1491277525950327607">برای جابه‌جایی بین تنظیمات، دو ضربه سریع بزنید</translation>
+<translation id="1509486075633541495">ورود به سیستم وب‌سایت</translation>
 <translation id="152234381334907219">هرگز ذخیره نمی‌شود</translation>
 <translation id="1540800554400757039">آدرس ۱</translation>
 <translation id="1545749641540134597">‏اسکن کد QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 92366aef..6572d1c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Piilota salasana</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> kohdetta</translation>
 <translation id="1491277525950327607">Muuta asetusta kaksoisnapauttamalla.</translation>
+<translation id="1509486075633541495">Kirjaudu sisään verkkosivustolle</translation>
 <translation id="152234381334907219">Tallentamaton</translation>
 <translation id="1540800554400757039">Osoite 1</translation>
 <translation id="1545749641540134597">Skannaa QR-koodi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index 0230f099..f7e6caf 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Masquer le mot de passe</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> éléments</translation>
 <translation id="1491277525950327607">Appuyer deux fois pour activer/désactiver le paramètre</translation>
+<translation id="1509486075633541495">Connectez-vous au site Web</translation>
 <translation id="152234381334907219">Jamais enregistrés</translation>
 <translation id="1540800554400757039">Adresse 1</translation>
 <translation id="1545749641540134597">Scanner le code QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index 6f14e9b..5ac792e2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -315,6 +315,7 @@
 Handoff को Settings के General अनुभाग में भी सक्षम किया जाना चाहिए और आपके डिवाइसों को समान iCloud खाते का उपयोग करना चाहिए.</translation>
 <translation id="5551897871312988470">अनुवाद करें</translation>
 <translation id="5556459405103347317">फिर लोड करें</translation>
+<translation id="5592679540098330836"><ph name="NAME" /> के लिए सिंक चालू करें</translation>
 <translation id="5614553682702429503">पासवर्ड सेव करें?</translation>
 <translation id="5626245204502895507">इस समय फ़ाइल डाउनलोड नहीं की जा सकती.</translation>
 <translation id="5631164295104953411">भुगतान विधि जोड़ें</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 398eaca..bfeef0c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Sakrijte zaporku</translation>
 <translation id="145015347812617860">Broj stavki: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Dodirnite dvaput da biste promijenili postavku</translation>
+<translation id="1509486075633541495">Prijavite se na web-lokaciju</translation>
 <translation id="152234381334907219">Nikad spremljeno</translation>
 <translation id="1540800554400757039">1. adresni redak</translation>
 <translation id="1545749641540134597">Skeniranje QR koda</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 85751fa..5e587146 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Jelszó elrejtése</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> elem</translation>
 <translation id="1491277525950327607">A beállítás módosításához koppintson duplán</translation>
+<translation id="1509486075633541495">Bejelentkezés a webhelyre</translation>
 <translation id="152234381334907219">Soha nem került mentésre</translation>
 <translation id="1540800554400757039">Cím 1. sora</translation>
 <translation id="1545749641540134597">QR-kód beolvasása</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index a7e47175..a320bf7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Nascondi password</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> elementi</translation>
 <translation id="1491277525950327607">Tocca due volte per attivare/disattivare l'impostazione</translation>
+<translation id="1509486075633541495">Accedi al sito web</translation>
 <translation id="152234381334907219">Mai salvate</translation>
 <translation id="1540800554400757039">Indirizzo 1</translation>
 <translation id="1545749641540134597">Scansiona codice QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index 56deeb3..79a5ae1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">הסתר סיסמה</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> פריטים</translation>
 <translation id="1491277525950327607">הקש פעמיים כדי להחליף את מצב ההגדרה</translation>
+<translation id="1509486075633541495">כניסה לאתר</translation>
 <translation id="152234381334907219">פריטים שאף פעם לא נשמרו</translation>
 <translation id="1540800554400757039">כתובת, שורה 1</translation>
 <translation id="1545749641540134597">‏סריקת קוד QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index f68ebd8..159230b1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">パスワードを非表示にします</translation>
 <translation id="145015347812617860"><ph name="COUNT" />個のアイテム</translation>
 <translation id="1491277525950327607">設定を切り替えるにはダブルタップします</translation>
+<translation id="1509486075633541495">ウェブサイトにログイン</translation>
 <translation id="152234381334907219">常に保存しない</translation>
 <translation id="1540800554400757039">住所1行目</translation>
 <translation id="1545749641540134597">QR コードをスキャンします</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index cc3ae45..b5335d5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">ಪಾಸ್‌ವರ್ಡ್ ಮರೆಮಾಡಿ</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> ಐಟಂಗಳು</translation>
 <translation id="1491277525950327607">ಸೆಟ್ಟಿಂಗ್‌ ಟಾಗಲ್‌ ಮಾಡಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
+<translation id="1509486075633541495">ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="152234381334907219">ಎಂದಿಗೂ ಉಳಿಸಿಲ್ಲ</translation>
 <translation id="1540800554400757039">ವಿಳಾಸ 1</translation>
 <translation id="1545749641540134597">QR ಕೋಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</translation>
@@ -315,6 +316,7 @@
 ಹ್ಯಾಂಡ್ಆಫ್ ಆನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿನ ಸಾಮಾನ್ಯ ವಿಭಾಗದಲ್ಲಿ ಸಹ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕಾದ ಅಗತ್ಯವಿದೆ, ಹಾಗೂ ನಿಮ್ಮ ಸಾಧನಗಳು ಒಂದೇ iCloud ಖಾತೆಯನ್ನು ಬಳಸಬೇಕು.</translation>
 <translation id="5551897871312988470">ಅನುವಾದಿಸಲು ಅವಕಾಶ ನೀಡಿ</translation>
 <translation id="5556459405103347317">ಮರುಲೋಡ್‌</translation>
+<translation id="5592679540098330836"><ph name="NAME" /> ರವರಿಗಾಗಿ ಸಿಂಕ್ ಆನ್ ಮಾಡು</translation>
 <translation id="5614553682702429503">ಪಾಸ್‌ವರ್ಡ್ ಉಳಿಸುವುದೇ?</translation>
 <translation id="5626245204502895507">ಈ ಸಮಯದಲ್ಲಿ ಫೈಲ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="5631164295104953411">ಪಾವತಿ ವಿಧಾನವನ್ನು ಸೇರಿಸಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index cd6809e..15a4795e3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Slēpt paroli</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> vienumi</translation>
 <translation id="1491277525950327607">Veiciet dubultskārienu, lai pārslēgtu iestatījumu.</translation>
+<translation id="1509486075633541495">Pierakstieties tīmekļa vietnē</translation>
 <translation id="152234381334907219">Jaunākie saglabātie</translation>
 <translation id="1540800554400757039">1. adrese</translation>
 <translation id="1545749641540134597">Skenējiet QR kodu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index e438e24c..595b270 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Sembunyikan Kata Laluan</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> item</translation>
 <translation id="1491277525950327607">Dwiketik untuk togol tetapan</translation>
+<translation id="1509486075633541495">Log masuk ke tapak web</translation>
 <translation id="152234381334907219">Tidak Pernah Disimpan</translation>
 <translation id="1540800554400757039">Alamat 1</translation>
 <translation id="1545749641540134597">Imbas Kod QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index d40b0e9..223911c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Wachtwoord verbergen</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> items</translation>
 <translation id="1491277525950327607">Dubbeltik om de instelling in of uit te schakelen</translation>
+<translation id="1509486075633541495">Inloggen op website</translation>
 <translation id="152234381334907219">Nooit opgeslagen</translation>
 <translation id="1540800554400757039">Adres 1</translation>
 <translation id="1545749641540134597">QR-code scannen</translation>
@@ -315,7 +316,7 @@
 Handoff moet ook zijn ingeschakeld in het gedeelte 'Algemeen' van 'Instellingen' en je apparaten moeten hetzelfde iCloud-account gebruiken.</translation>
 <translation id="5551897871312988470">Aanbieden om te vertalen</translation>
 <translation id="5556459405103347317">Opnieuw laden</translation>
-<translation id="5592679540098330836">Schakel synchronisatie voor <ph name="NAME" /> in</translation>
+<translation id="5592679540098330836">Schakel synchronisatie in voor <ph name="NAME" /></translation>
 <translation id="5614553682702429503">Wachtwoord opslaan?</translation>
 <translation id="5626245204502895507">Het bestand kan momenteel niet worden gedownload.</translation>
 <translation id="5631164295104953411">Betaalmethode toevoegen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 560ab66..e8f573613 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Ukryj hasło</translation>
 <translation id="145015347812617860">Elementy: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Kliknij dwukrotnie, by zmienić ustawienie</translation>
+<translation id="1509486075633541495">Zaloguj się w witrynie</translation>
 <translation id="152234381334907219">Nigdy nie zapisane</translation>
 <translation id="1540800554400757039">Adres 1</translation>
 <translation id="1545749641540134597">Zeskanuj kod QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index f3d7e5e7..308268a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Ocultar senha</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> itens</translation>
 <translation id="1491277525950327607">Toque duas vezes para alternar a configuração</translation>
+<translation id="1509486075633541495">Fazer login no site</translation>
 <translation id="152234381334907219">Nunca salvas</translation>
 <translation id="1540800554400757039">Endereço 1</translation>
 <translation id="1545749641540134597">Ler código QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index 3421e7c..29d2ade1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Ocultar a palavra-passe</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> itens</translation>
 <translation id="1491277525950327607">Toque duas vezes para ativar ou desativar a definição</translation>
+<translation id="1509486075633541495">Inicie sessão no Website</translation>
 <translation id="152234381334907219">Nunca guardado</translation>
 <translation id="1540800554400757039">Morada 1</translation>
 <translation id="1545749641540134597">Ler código QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 8a06e74..92d06ddf 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Ascunde parola</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> elemente</translation>
 <translation id="1491277525950327607">Atinge de două ori ca să comuți setarea</translation>
+<translation id="1509486075633541495">Conectează-te la site</translation>
 <translation id="152234381334907219">Nu se salvează niciodată</translation>
 <translation id="1540800554400757039">Adresă 1</translation>
 <translation id="1545749641540134597">Scanează codul QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index 4048b9c..a249ceaf2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Скрыть пароль</translation>
 <translation id="145015347812617860">Закладок: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Для переключения нажмите дважды</translation>
+<translation id="1509486075633541495">Войдите в аккаунт</translation>
 <translation id="152234381334907219">Сайты, пароли для которых не сохраняются</translation>
 <translation id="1540800554400757039">Адрес, строка 1</translation>
 <translation id="1545749641540134597">Сканирование QR-кода</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 5e80143..d0937c6d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Skryť heslo</translation>
 <translation id="145015347812617860">Počet položiek: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Nastavenie môžete prepnúť dvojitým klepnutím</translation>
+<translation id="1509486075633541495">Prihláste sa na webe</translation>
 <translation id="152234381334907219">Nikdy neukladať</translation>
 <translation id="1540800554400757039">Adresa 1</translation>
 <translation id="1545749641540134597">Naskenovať kód QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index 72f6246..f237fdf 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Skrivanje gesla</translation>
 <translation id="145015347812617860">Št. elementov: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Dvakrat se dotaknite, da preklopite nastavitev</translation>
+<translation id="1509486075633541495">Prijavite se na spletnem mestu</translation>
 <translation id="152234381334907219">Nikoli shranjeno</translation>
 <translation id="1540800554400757039">Naslov 1</translation>
 <translation id="1545749641540134597">Scan QR Code</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index f11aac0..415479a3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Сакријте лозинку</translation>
 <translation id="145015347812617860">Ставки: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Двапут додирните да бисте укључили/искључили подешавање</translation>
+<translation id="1509486075633541495">Пријавите се на веб-сајт</translation>
 <translation id="152234381334907219">Никада се не чува</translation>
 <translation id="1540800554400757039">1. ред за адресу</translation>
 <translation id="1545749641540134597">Скенирајте QR кôд</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index e44e801..18ec803 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">கடவுச்சொல்லை மறைக்கும்</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> உருப்படிகள்</translation>
 <translation id="1491277525950327607">அமைப்பை நிலைமாற்ற, இருமுறை தட்டவும்</translation>
+<translation id="1509486075633541495">இணையதளத்தில் உள்நுழையவும்</translation>
 <translation id="152234381334907219">எப்போதும் சேமிக்காதவை</translation>
 <translation id="1540800554400757039">முகவரி 1</translation>
 <translation id="1545749641540134597">QR குறியீட்டை ஸ்கேன் செய்க</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 2236a9e..2216e190 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">ซ่อนรหัสผ่าน</translation>
 <translation id="145015347812617860"><ph name="COUNT" /> รายการ</translation>
 <translation id="1491277525950327607">แตะ 2 ครั้งเพื่อสลับการตั้งค่า</translation>
+<translation id="1509486075633541495">ลงชื่อเข้าใช้เว็บไซต์</translation>
 <translation id="152234381334907219">ไม่เคยบันทึก</translation>
 <translation id="1540800554400757039">ที่อยู่ 1</translation>
 <translation id="1545749641540134597">สแกนโค้ด QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
index 25668ba..fe84efb6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -44,6 +44,7 @@
 <translation id="1449835205994625556">Сховати пароль</translation>
 <translation id="145015347812617860">Закладок: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Двічі торкніться, щоб змінити налаштування</translation>
+<translation id="1509486075633541495">Увійдіть в обліковий запис на веб-сайті</translation>
 <translation id="152234381334907219">Ніколи не зберігалося</translation>
 <translation id="1540800554400757039">Адреса 1</translation>
 <translation id="1545749641540134597">Сканувати QR-код</translation>
diff --git a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm
index e51a365e..b8f5c7a 100644
--- a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm
@@ -362,7 +362,8 @@
       IDS_IOS_ACCOUNT_CONSISTENCY_CONFIRMATION_SCROLL_BUTTON);
   [_primaryButton setTitle:primaryButtonTitle forState:UIControlStateNormal];
   UIImage* primaryButtomImage =
-      [UIImage imageNamed:@"signin_confirmation_more"];
+      [[UIImage imageNamed:@"signin_confirmation_more"]
+          imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
   [_primaryButton setImage:primaryButtomImage forState:UIControlStateNormal];
   [self setSecondaryButtonStyling:_primaryButton];
 }
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h
index 8e8836e..a46ff7e 100644
--- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h
+++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h
@@ -9,6 +9,7 @@
 
 #import "ios/web/public/web_state/web_state_observer_bridge.h"
 
+@protocol BrowserCoordinatorCommands;
 @class ManualFillInjectionHandler;
 class WebStateList;
 
@@ -44,6 +45,7 @@
                   browserState:(ios::ChromeBrowserState*)browserState
                   webStateList:(WebStateList*)webStateList
               injectionHandler:(ManualFillInjectionHandler*)injectionHandler
+                    dispatcher:(id<BrowserCoordinatorCommands>)dispatcher
     NS_DESIGNATED_INITIALIZER;
 
 // Unavailable, use -initWithBaseViewController:browserState:webStateList:.
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm
index f571c3bb..8375d49 100644
--- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm
@@ -39,6 +39,9 @@
     ManualFillAccessoryViewControllerDelegate,
     PasswordCoordinatorDelegate>
 
+// The dispatcher used by this Coordinator.
+@property(nonatomic, weak) id<BrowserCoordinatorCommands> dispatcher;
+
 // The Mediator for the input accessory view controller.
 @property(nonatomic, strong)
     FormInputAccessoryMediator* formInputAccessoryMediator;
@@ -63,7 +66,8 @@
     initWithBaseViewController:(UIViewController*)viewController
                   browserState:(ios::ChromeBrowserState*)browserState
                   webStateList:(WebStateList*)webStateList
-              injectionHandler:(ManualFillInjectionHandler*)injectionHandler {
+              injectionHandler:(ManualFillInjectionHandler*)injectionHandler
+                    dispatcher:(id<BrowserCoordinatorCommands>)dispatcher {
   DCHECK(browserState);
   DCHECK(webStateList);
   self = [super initWithBaseViewController:viewController
@@ -92,6 +96,7 @@
                webStateList:webStateList
         personalDataManager:personalDataManager
               passwordStore:passwordStore];
+    _dispatcher = dispatcher;
   }
   return self;
 }
@@ -138,7 +143,8 @@
                     browserState:self.browserState
                                      ->GetOriginalChromeBrowserState()
                     webStateList:self.webStateList
-                injectionHandler:self.injectionHandler];
+                injectionHandler:self.injectionHandler
+                      dispatcher:self.dispatcher];
   cardCoordinator.delegate = self;
   if (IsIPadIdiom()) {
     [cardCoordinator presentFromButton:button];
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn b/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn
index 64d344e..2b1978f 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn
+++ b/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn
@@ -50,6 +50,7 @@
     "//ios/chrome/browser/favicon",
     "//ios/chrome/browser/passwords",
     "//ios/chrome/browser/ui/autofill/manual_fill:manual_fill_ui",
+    "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/list_model:list_model",
     "//ios/chrome/browser/ui/settings/autofill:feature_flags",
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h
index dd0502a..4c15273 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h
@@ -7,6 +7,7 @@
 
 #import "ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.h"
 
+@protocol BrowserCoordinatorCommands;
 class WebStateList;
 
 // Delegate for the coordinator actions.
@@ -30,10 +31,11 @@
 // Creates a coordinator that uses a |viewController|, |browserState|,
 // |webStateList| and |injectionHandler|.
 - (instancetype)
-initWithBaseViewController:(UIViewController*)viewController
-              browserState:(ios::ChromeBrowserState*)browserState
-              webStateList:(WebStateList*)webStateList
-          injectionHandler:(ManualFillInjectionHandler*)injectionHandler
+    initWithBaseViewController:(UIViewController*)viewController
+                  browserState:(ios::ChromeBrowserState*)browserState
+                  webStateList:(WebStateList*)webStateList
+              injectionHandler:(ManualFillInjectionHandler*)injectionHandler
+                    dispatcher:(id<BrowserCoordinatorCommands>)dispatcher
     NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm
index c68a08a..48c437b 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm
@@ -53,10 +53,11 @@
 @dynamic delegate;
 
 - (instancetype)
-initWithBaseViewController:(UIViewController*)viewController
-              browserState:(ios::ChromeBrowserState*)browserState
-              webStateList:(WebStateList*)webStateList
-          injectionHandler:(ManualFillInjectionHandler*)injectionHandler {
+    initWithBaseViewController:(UIViewController*)viewController
+                  browserState:(ios::ChromeBrowserState*)browserState
+                  webStateList:(WebStateList*)webStateList
+              injectionHandler:(ManualFillInjectionHandler*)injectionHandler
+                    dispatcher:(id<BrowserCoordinatorCommands>)dispatcher {
   self = [super initWithBaseViewController:viewController
                               browserState:browserState
                           injectionHandler:injectionHandler];
@@ -75,7 +76,8 @@
     std::vector<autofill::CreditCard*> cards =
         _personalDataManager->GetCreditCards();
 
-    _cardMediator = [[ManualFillCardMediator alloc] initWithCards:cards];
+    _cardMediator = [[ManualFillCardMediator alloc] initWithCards:cards
+                                                       dispatcher:dispatcher];
     _cardMediator.navigationDelegate = self;
     _cardMediator.contentInjector = self.injectionHandler;
     _cardMediator.consumer = _cardViewController;
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.h b/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.h
index 1da3a6a..6004705 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.h
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.h
@@ -10,6 +10,7 @@
 #include "base/memory/ref_counted.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h"
 
+@protocol BrowserCoordinatorCommands;
 namespace autofill {
 class CreditCard;
 }  // namespace autofill
@@ -39,6 +40,7 @@
 
 // The designated initializer. |cards| must not be nil.
 - (instancetype)initWithCards:(std::vector<autofill::CreditCard*>)cards
+                   dispatcher:(id<BrowserCoordinatorCommands>)dispatcher
     NS_DESIGNATED_INITIALIZER;
 
 // Unavailable. Use |initWithCards:|.
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm
index 323fba7..f4a1666 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_mediator.mm
@@ -19,6 +19,7 @@
 #import "ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_content_injector.h"
+#import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h"
 #import "ios/chrome/browser/ui/list_model/list_model.h"
 #import "ios/chrome/browser/ui/settings/autofill/features.h"
 #import "ios/chrome/browser/ui/table_view/table_view_model.h"
@@ -47,14 +48,19 @@
 // All available credit cards.
 @property(nonatomic, assign) std::vector<autofill::CreditCard*> cards;
 
+// The dispatcher used by this Mediator.
+@property(nonatomic, weak) id<BrowserCoordinatorCommands> dispatcher;
+
 @end
 
 @implementation ManualFillCardMediator
 
-- (instancetype)initWithCards:(std::vector<autofill::CreditCard*>)cards {
+- (instancetype)initWithCards:(std::vector<autofill::CreditCard*>)cards
+                   dispatcher:(id<BrowserCoordinatorCommands>)dispatcher {
   self = [super init];
   if (self) {
     _cards = cards;
+    _dispatcher = dispatcher;
   }
   return self;
 }
@@ -130,13 +136,13 @@
     NSString* addCreditCardsTitle =
         l10n_util::GetNSString(IDS_IOS_MANUAL_FALLBACK_ADD_PAYMENT_METHOD);
 
+    __weak __typeof(self) weakSelf = self;
     auto addCreditCardsItem = [[ManualFillActionItem alloc]
         initWithTitle:addCreditCardsTitle
                action:^{
                  base::RecordAction(base::UserMetricsAction(
                      "ManualFallback_CreditCard_OpenAddCreditCard"));
-                 // TODO(crbug.com/984561): Add action to navigate to the add
-                 // credit card details screen here.
+                 [weakSelf.dispatcher showAddCreditCard];
                }];
     [self.consumer
         presentActions:@[ addCreditCardsItem, manageCreditCardsItem ]];
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn
index 51e2e48..e097631 100644
--- a/ios/chrome/browser/ui/browser_view/BUILD.gn
+++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -129,6 +129,7 @@
     "//ios/chrome/browser/ui/sad_tab",
     "//ios/chrome/browser/ui/sad_tab:coordinator",
     "//ios/chrome/browser/ui/send_tab_to_self",
+    "//ios/chrome/browser/ui/settings/autofill",
     "//ios/chrome/browser/ui/settings/sync/utils",
     "//ios/chrome/browser/ui/side_swipe",
     "//ios/chrome/browser/ui/signin_interaction/public",
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
index e8659db..864cdfcd 100644
--- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -37,6 +37,7 @@
 #import "ios/chrome/browser/ui/qr_scanner/qr_scanner_legacy_coordinator.h"
 #import "ios/chrome/browser/ui/reading_list/reading_list_coordinator.h"
 #import "ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h"
+#import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_coordinator.h"
 #import "ios/chrome/browser/ui/snackbar/snackbar_coordinator.h"
 #import "ios/chrome/browser/ui/translate/translate_infobar_coordinator.h"
 #import "ios/chrome/browser/url_loading/url_loading_params.h"
@@ -56,6 +57,7 @@
 #endif
 
 @interface BrowserCoordinator () <AutofillSecurityAlertPresenter,
+                                  BrowserCoordinatorCommands,
                                   FormInputAccessoryCoordinatorNavigator,
                                   RepostFormTabHelperDelegate,
                                   URLLoadingServiceDelegate,
@@ -84,6 +86,10 @@
 // Presents a QLPreviewController in order to display USDZ format 3D models.
 @property(nonatomic, strong) ARQuickLookCoordinator* ARQuickLookCoordinator;
 
+// Coordinator to add new credit card.
+@property(nonatomic, strong)
+    AutofillAddCreditCardCoordinator* addCreditCardCoordinator;
+
 // Coordinator in charge of the presenting autofill options above the
 // keyboard.
 @property(nonatomic, strong)
@@ -267,7 +273,9 @@
       initWithBaseViewController:self.viewController
                     browserState:self.browserState
                     webStateList:self.tabModel.webStateList
-                injectionHandler:self.injectionHandler];
+                injectionHandler:self.injectionHandler
+                      dispatcher:static_cast<id<BrowserCoordinatorCommands>>(
+                                     self.dispatcher)];
   self.formInputAccessoryCoordinator.navigator = self;
   [self.formInputAccessoryCoordinator start];
 
@@ -310,6 +318,10 @@
 
   self.storeKitCoordinator = [[StoreKitCoordinator alloc]
       initWithBaseViewController:self.viewController];
+
+  self.addCreditCardCoordinator = [[AutofillAddCreditCardCoordinator alloc]
+      initWithBaseViewController:self.viewController
+                    browserState:self.browserState];
 }
 
 // Stops child coordinators.
@@ -356,6 +368,9 @@
 
   [self.translateInfobarCoordinator stop];
   self.translateInfobarCoordinator = nil;
+
+  [self.addCreditCardCoordinator stop];
+  self.addCreditCardCoordinator = nil;
 }
 
 #pragma mark - AutofillSecurityAlertPresenter
@@ -423,6 +438,10 @@
   [self.recentTabsCoordinator start];
 }
 
+- (void)showAddCreditCard {
+  [self.addCreditCardCoordinator start];
+}
+
 #pragma mark - FormInputAccessoryCoordinatorNavigator
 
 - (void)openPasswordSettings {
diff --git a/ios/chrome/browser/ui/commands/browser_coordinator_commands.h b/ios/chrome/browser/ui/commands/browser_coordinator_commands.h
index 946d3b8f..8aeaa92 100644
--- a/ios/chrome/browser/ui/commands/browser_coordinator_commands.h
+++ b/ios/chrome/browser/ui/commands/browser_coordinator_commands.h
@@ -21,6 +21,9 @@
 // Shows recent tabs.
 - (void)showRecentTabs;
 
+// Shows the AddCreditCard UI.
+- (void)showAddCreditCard;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_COMMANDS_BROWSER_COORDINATOR_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_egtest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_egtest.mm
index b6a1f94..83c0396 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_egtest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_egtest.mm
@@ -77,6 +77,12 @@
       IDS_IOS_ADD_CREDIT_CARD_INVALID_CARD_NUMBER_ALERT);
 }
 
+// Matcher for the Invalid Card Expiry Date Alert.
+id<GREYMatcher> InvalidCardExpiryDateAlert() {
+  return StaticTextWithAccessibilityLabelId(
+      IDS_IOS_ADD_CREDIT_CARD_INVALID_EXPIRATION_DATE_ALERT);
+}
+
 }  // namespace
 
 // Tests for Settings Autofill add credit cards section.
@@ -164,6 +170,19 @@
                                    grey_not(grey_enabled()), nil)];
 }
 
+// Tests that the 'Cancel' button dismisses the screen.
+- (void)testCancelButtonDismissesScreen {
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::AddCreditCardView()]
+      assertWithMatcher:grey_notNil()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::AddCreditCardCancelButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::AddCreditCardView()]
+      assertWithMatcher:grey_nil()];
+}
+
+#pragma mark - Test adding Valid/Inavlid card details
+
 // Tests when a user tries to add an invalid card number, an alert is shown. On
 // clicking 'OK' the alert is dismissed.
 - (void)testAddButtonAlertOnInvalidNumber {
@@ -183,6 +202,28 @@
       assertWithMatcher:grey_nil()];
 }
 
+// Tests when a user tries to add an invalid card number, an alert is shown. On
+// clicking 'OK' the alert is dismissed.
+- (void)testAddButtonAlertOnInvalidExpiryDate {
+  [[EarlGrey selectElementWithMatcher:CardNumberTextField()]
+      performAction:grey_typeText(@"4111111111111111")];
+  [[EarlGrey selectElementWithMatcher:MonthOfExpiryTextField()]
+      performAction:grey_typeText(@"00")];
+  [[EarlGrey selectElementWithMatcher:YearOfExpiryTextField()]
+      performAction:grey_typeText(@"0000")];
+
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::AddCreditCardButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:InvalidCardExpiryDateAlert()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::OKButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:InvalidCardExpiryDateAlert()]
+      assertWithMatcher:grey_nil()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::OKButton()]
+      assertWithMatcher:grey_nil()];
+}
+
 // Tests when a user tries to add a valid card number, the screen is dismissed
 // and the new card number appears on the Autofill Credit Card 'Payment Methods'
 // screen.
@@ -209,16 +250,7 @@
       assertWithMatcher:grey_sufficientlyVisible()];
 }
 
-// Tests that the 'Cancel' button dismisses the screen.
-- (void)testCancelButtonDismissesScreen {
-  [[EarlGrey selectElementWithMatcher:chrome_test_util::AddCreditCardView()]
-      assertWithMatcher:grey_notNil()];
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::AddCreditCardCancelButton()]
-      performAction:grey_tap()];
-  [[EarlGrey selectElementWithMatcher:chrome_test_util::AddCreditCardView()]
-      assertWithMatcher:grey_nil()];
-}
+#pragma mark - Test Use Camera button
 
 // Tests that the 'Use Camera' button opens the credit card scanner.
 - (void)testUseCameraButtonOpensCreditCardScanner {
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator.mm b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator.mm
index c1a591d..10778f7cf 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator.h"
 
+#include "base/metrics/user_metrics.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
@@ -90,6 +91,8 @@
 
     self.personalDataManager->UpdateCreditCard(savedCreditCardCopy);
   } else {
+    base::RecordAction(
+        base::UserMetricsAction("MobileAddCreditCard.CardSaved"));
     self.personalDataManager->AddCreditCard(creditCard);
   }
 
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm
index 017612c..d4b91dd 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm
@@ -430,6 +430,8 @@
 // credit card details.
 - (void)handleAddPayment:(id)sender {
   DCHECK(base::FeatureList::IsEnabled(kSettingsAddPaymentMethod));
+  base::RecordAction(
+      base::UserMetricsAction("MobileAddCreditCard.AddPaymentMethodButton"));
 
   self.addCreditCardCoordinator = [[AutofillAddCreditCardCoordinator alloc]
       initWithBaseViewController:self
diff --git a/ios/chrome/browser/ui/settings/credit_card_scanner/BUILD.gn b/ios/chrome/browser/ui/settings/credit_card_scanner/BUILD.gn
index 4c4c2da..b143203 100644
--- a/ios/chrome/browser/ui/settings/credit_card_scanner/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/credit_card_scanner/BUILD.gn
@@ -25,6 +25,7 @@
     "credit_card_scanner_view_controller.mm",
   ]
   deps = [
+    "//components/autofill/core/browser",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/qr_scanner",
diff --git a/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util.mm b/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util.mm
index bebcd9a6..a41724b 100644
--- a/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util.mm
+++ b/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util.mm
@@ -4,6 +4,9 @@
 
 #import "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util.h"
 
+#include "base/strings/sys_string_conversions.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
@@ -52,16 +55,15 @@
   }
 
   NSString* stringMatchingPattern = [text substringWithRange:match.range];
-
   NSString* creditCardNumber =
       SubstituteSimilarCharactersInRecognizedText(stringMatchingPattern);
-  NSCharacterSet* allowedCharacterSet =
-      [NSCharacterSet decimalDigitCharacterSet];
-  NSCharacterSet* creditCardNumberSet =
-      [NSCharacterSet characterSetWithCharactersInString:creditCardNumber];
-  if ([allowedCharacterSet isSupersetOfSet:creditCardNumberSet]) {
+
+  autofill::CreditCard creditCard = autofill::CreditCard();
+  creditCard.SetNumber(base::SysNSStringToUTF16(creditCardNumber));
+  if (creditCard.HasValidCardNumber()) {
     return creditCardNumber;
   }
+
   return nil;
 }
 
diff --git a/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util_unittest.mm b/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util_unittest.mm
index bdce3a26..69ce770 100644
--- a/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util_unittest.mm
+++ b/ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_string_util_unittest.mm
@@ -61,9 +61,17 @@
 // Tests extracting card number from valid card number text (14 digits).
 TEST_F(CreditCardScannerStringUtilUnitTest,
        TestExtractCardNumberFromValidCreditCardNumber14Digits) {
+  NSString* cardNumber = ios::ExtractCreditCardNumber(@"36904001001529");
+
+  EXPECT_NSEQ(cardNumber, @"36904001001529");
+}
+
+// Tests extracting card number from invalid card number text (14 digits).
+TEST_F(CreditCardScannerStringUtilUnitTest,
+       TestExtractCardNumberFromInvalidCreditCardNumber14Digits) {
   NSString* cardNumber = ios::ExtractCreditCardNumber(@"4111111111111");
 
-  EXPECT_NSEQ(cardNumber, @"4111111111111");
+  EXPECT_FALSE(cardNumber);
 }
 
 // Tests extracting card number from valid card number text contains wrong
@@ -79,9 +87,9 @@
 // illegal characters.
 TEST_F(CreditCardScannerStringUtilUnitTest,
        TestExtractCardNumberFromValidCreditCardNumberAfterConversion) {
-  NSString* cardNumber = ios::ExtractCreditCardNumber(@"41b1C1g1D1i1L1z1");
+  NSString* cardNumber = ios::ExtractCreditCardNumber(@"4U24u0TLzu6636B5");
 
-  EXPECT_NSEQ(cardNumber, @"4181019101111171");
+  EXPECT_NSEQ(cardNumber, @"4024007170663685");
 }
 
 // Tests extracting card number from invalid card number text (10 digits).
diff --git a/ios/web/web_state/web_state_unittest.mm b/ios/web/web_state/web_state_unittest.mm
index 767d9de..12cbdeb 100644
--- a/ios/web/web_state/web_state_unittest.mm
+++ b/ios/web/web_state/web_state_unittest.mm
@@ -53,10 +53,10 @@
 const char kTestSessionStoragePageText[] = "pony";
 
 // A text string that is included in |kTestPageHTML|.
-const char kTextInTestPageHTML[] = "test";
+const char kTextInTestPageHTML[] = "this_is_a_test_string";
 
 // A test page HTML containing |kTextInTestPageHTML|.
-const char kTestPageHTML[] = "<html><body>test</body><html>";
+const char kTestPageHTML[] = "<html><body>this_is_a_test_string</body><html>";
 
 // Returns a session storage with a single committed entry of a test HTML page.
 CRWSessionStorage* GetTestSessionStorage() {
@@ -669,16 +669,7 @@
 }
 
 // Tests that reloading after loading HTML page will load the online page.
-// TODO(crbug.com/994468): This test sometimes shows an error page instead of
-// the online page when SlimNavigationManager is enabled.
-#if !TARGET_IPHONE_SIMULATOR
-#define MAYBE_LoadChromeThenWaitThenHTMLThenReload \
-  LoadChromeThenWaitThenHTMLThenReload
-#else
-#define MAYBE_LoadChromeThenWaitThenHTMLThenReload \
-  FLAKY_LoadChromeThenWaitThenHTMLThenReload
-#endif
-TEST_P(WebStateTest, MAYBE_LoadChromeThenWaitThenHTMLThenReload) {
+TEST_P(WebStateTest, LoadChromeThenWaitThenHTMLThenReload) {
   net::EmbeddedTestServer server;
   net::test_server::RegisterDefaultHandlers(&server);
   ASSERT_TRUE(server.Start());
diff --git a/remoting/resources/remoting_strings_ar.xtb b/remoting/resources/remoting_strings_ar.xtb
index c0f7ca9..ce388e6 100644
--- a/remoting/resources/remoting_strings_ar.xtb
+++ b/remoting/resources/remoting_strings_ar.xtb
@@ -58,7 +58,7 @@
 <translation id="2509394361235492552">متصل بـ <ph name="HOSTNAME" /></translation>
 <translation id="2512228156274966424">‏ملاحظة: للتأكد من توفر كل اختصارات لوحة المفاتيح، يمكنك تهيئة ميزة سطح المكتب البعيد من Chrome على "فتح كنافذة".</translation>
 <translation id="2540992418118313681">هل ترغب في مشاركة هذا الكمبيوتر مع مستخدم آخر للمشاهدة والتحكم؟</translation>
-<translation id="254771646005658629">‏السماح للمستخدمين بالتحكُّم في نظام التشغيل Mac هذا عن بُعد</translation>
+<translation id="254771646005658629">‏السماح للمستخدمين بالتحكّم في نظام التشغيل Mac هذا عن بُعد</translation>
 <translation id="2579271889603567289">تعطّل المضيف أو تعذّر بدء تشغيله.</translation>
 <translation id="2599300881200251572">‏تمكن هذه الخدمة الاتصالات الواردة من عملاء سطح المكتب البعيد من Chrome.</translation>
 <translation id="2647232381348739934">‏خدمة التوافق مع نظام التشغيل Chrome</translation>
@@ -188,7 +188,7 @@
 
 اختَر '<ph name="BUTTON_NAME" />' أدناه. في إعدادات "الأمان والخصوصية" المفضَّلة، ضع علامة في المربع بجانب '<ph name="SERVICE_SCRIPT_NAME" />'.
 
-في حال تم وضع علامة في المربع بجانب '<ph name="SERVICE_SCRIPT_NAME" />' من قبل، عليك إزالة العلامة ثم وضعها مرة أخرى.</translation>
+في حال سبق وتم وضع علامة في المربع بجانب '<ph name="SERVICE_SCRIPT_NAME" />' من قبل، عليك إزالة العلامة ثم وضعها مرة أخرى.</translation>
 <translation id="5510035215749041527">إلغاء الربط الآن</translation>
 <translation id="5593560073513909978">الخدمة غير متاحة مؤقتًا. يُرجى إعادة المحاولة لاحقًا.</translation>
 <translation id="5601503069213153581">رقم التعريف الشخصي</translation>
@@ -305,7 +305,7 @@
 <translation id="837021510621780684">من هذا الكمبيوتر</translation>
 <translation id="8383794970363966105">‏لاستخدام التوافق مع نظام التشغيل Chrome، يجب إضافة حساب في Google إلى جهازك.</translation>
 <translation id="8386846956409881180">‏تمت تهيئة المضيف بواسطة بيانات اعتماد OAuth غير صالحة.</translation>
-<translation id="8406498562923498210">‏عليك اختيار جلسة لإطلاقها ضمن بيئة سطح المكتب البعيد من Chrome. تجدر الإشارة إلى أنه يمكن ألا تدعم بعض أنواع الجلسات التشغيل ضمن سطح المكتب البعيد من Chrome وعلى وحدة التحكُّم المحلية في آنٍ واحد.)</translation>
+<translation id="8406498562923498210">‏عليك اختيار جلسة لإطلاقها ضمن بيئة "سطح المكتب البعيد من Chrome". (تجدر الإشارة إلى أنه يمكن ألا تدعم بعض أنواع الجلسات التشغيل ضمن "سطح المكتب البعيد من Chrome" وعلى وحدة التحكّم المحلية في آنٍ واحد.)</translation>
 <translation id="8428213095426709021">الإعدادات</translation>
 <translation id="8445362773033888690">‏عرض في متجر Google Play</translation>
 <translation id="8509907436388546015">عملية دمج سطح المكتب</translation>
diff --git a/remoting/resources/remoting_strings_ca.xtb b/remoting/resources/remoting_strings_ca.xtb
index 75b6b95..cfbb64e 100644
--- a/remoting/resources/remoting_strings_ca.xtb
+++ b/remoting/resources/remoting_strings_ca.xtb
@@ -304,7 +304,7 @@
 <translation id="837021510621780684">Des d'aquest ordinador</translation>
 <translation id="8383794970363966105">Per utilitzar Chromoting, haureu d'afegir un compte de Google al dispositiu.</translation>
 <translation id="8386846956409881180">L'amfitrió està configurat amb unes credencials d'OAuth no vàlides.</translation>
-<translation id="8406498562923498210">Selecciona una sessió per iniciar a l'entorn d'Escriptori remot de Chrome. Tingues en compte que pot ser que alguns tipus de sessió no es puguin executar a Escriptori remot de Chrome i a la consola local simultàniament.</translation>
+<translation id="8406498562923498210">Selecciona la sessió que vols iniciar a l'entorn d'Escriptori remot de Chrome. Tingues en compte que pot ser que alguns tipus de sessió no es puguin executar a Escriptori remot de Chrome i a la consola local simultàniament.</translation>
 <translation id="8428213095426709021">Configuració</translation>
 <translation id="8445362773033888690">Mostra a Google Play Store</translation>
 <translation id="8509907436388546015">Procés d'integració de l'escriptori</translation>
diff --git a/remoting/resources/remoting_strings_cs.xtb b/remoting/resources/remoting_strings_cs.xtb
index 2af182e..ce5c7e3 100644
--- a/remoting/resources/remoting_strings_cs.xtb
+++ b/remoting/resources/remoting_strings_cs.xtb
@@ -183,7 +183,7 @@
 <translation id="5419185025274123272">Resetování aplikace se nezdařilo. Stále můžete odeslat zprávu o chybě.</translation>
 <translation id="5419418238395129586">Naposledy online: <ph name="DATE" /></translation>
 <translation id="544077782045763683">Hostitel byl vypnut.</translation>
-<translation id="5463789431147491241">Chcete-li na tomto počítači Mac používat aplikaci <ph name="PRODUCT_NAME" />, postupujte takto:
+<translation id="5463789431147491241">Chcete-li na tomto Macu používat aplikaci <ph name="PRODUCT_NAME" />, postupujte takto:
 
 Níže vyberte tlačítko <ph name="BUTTON_NAME" />. V předvolbách Zabezpečení a soukromí zaškrtněte políčko vedle možnosti <ph name="SERVICE_SCRIPT_NAME" />.
 
diff --git a/remoting/resources/remoting_strings_es-419.xtb b/remoting/resources/remoting_strings_es-419.xtb
index 393fa9c..43f6e086 100644
--- a/remoting/resources/remoting_strings_es-419.xtb
+++ b/remoting/resources/remoting_strings_es-419.xtb
@@ -329,7 +329,7 @@
 <translation id="9126115402994542723">No volver a pedir un PIN al conectarse a este host desde este dispositivo</translation>
 <translation id="9149580767411232853">Mantiene todo el escritorio remoto visible</translation>
 <translation id="9149992051684092333">Para comenzar a compartir tu escritorio, proporciona el código de acceso que aparece a continuación a la persona que te asistirá.</translation>
-<translation id="916856682307586697">Iniciar la XSession predeterminada</translation>
+<translation id="916856682307586697">Iniciar la sesión X predeterminada</translation>
 <translation id="9188433529406846933">Autorizar</translation>
 <translation id="9213184081240281106">Configuración del host no válida</translation>
 <translation id="951991426597076286">Rechazar</translation>
diff --git a/remoting/resources/remoting_strings_fr.xtb b/remoting/resources/remoting_strings_fr.xtb
index ca3cd21c..1662a46 100644
--- a/remoting/resources/remoting_strings_fr.xtb
+++ b/remoting/resources/remoting_strings_fr.xtb
@@ -183,11 +183,11 @@
 <translation id="5419185025274123272">Impossible de réinitialiser l'application. Vous pouvez toujours envoyer un rapport de bug.</translation>
 <translation id="5419418238395129586">Dernière connexion : <ph name="DATE" /></translation>
 <translation id="544077782045763683">L'hôte a été arrêté.</translation>
-<translation id="5463789431147491241">Pour utiliser <ph name="PRODUCT_NAME" /> sur ce Mac, procédez comme suit :
+<translation id="5463789431147491241">Pour utiliser <ph name="PRODUCT_NAME" /> avec ce Mac, procédez comme suit :
 
 Sélectionnez "<ph name="BUTTON_NAME" />" ci-dessous. Dans le volet des préférences de sécurité et de confidentialité, cochez la case à côté de "<ph name="SERVICE_SCRIPT_NAME" />".
 
-Si le script "<ph name="SERVICE_SCRIPT_NAME" />" est déjà coché, décochez-le, puis cochez-le à nouveau.</translation>
+Si "<ph name="SERVICE_SCRIPT_NAME" />" est déjà coché, décochez-le, puis cochez-le à nouveau.</translation>
 <translation id="5510035215749041527">Se déconnecter maintenant</translation>
 <translation id="5593560073513909978">Le service est momentanément indisponible. Veuillez réessayer ultérieurement.</translation>
 <translation id="5601503069213153581">Code d'accès</translation>
@@ -311,7 +311,7 @@
 <translation id="8513093439376855948">Hôte de messagerie native pour la gestion d'hôte de Remoting</translation>
 <translation id="8525306231823319788">Plein écran</translation>
 <translation id="8548209692293300397">Vous vous êtes auparavant connecté avec le nom d'utilisateur "<ph name="USER_NAME" />" (<ph name="USER_EMAIL" />). Pour accéder à vos ordinateurs avec ce compte, <ph name="LINK_BEGIN" />connectez-vous à Google Chrome<ph name="LINK_END" /> avec ce compte, puis réinstallez le Bureau à distance Chrome.</translation>
-<translation id="858006550102277544">Commentaire</translation>
+<translation id="858006550102277544">Description</translation>
 <translation id="8642984861538780905">Correcte</translation>
 <translation id="8712909229180978490">Je ne vois pas mes fichiers enregistrés en ligne sur Google Drive.</translation>
 <translation id="8743328882720071828">Souhaitez-vous autoriser <ph name="CLIENT_USERNAME" /> à voir et contrôler votre ordinateur ?</translation>
diff --git a/remoting/resources/remoting_strings_hi.xtb b/remoting/resources/remoting_strings_hi.xtb
index 2707d745b..b55f5ae4 100644
--- a/remoting/resources/remoting_strings_hi.xtb
+++ b/remoting/resources/remoting_strings_hi.xtb
@@ -58,6 +58,7 @@
 <translation id="2509394361235492552"><ph name="HOSTNAME" /> से कनेक्‍ट है</translation>
 <translation id="2512228156274966424">ध्यान दें: सभी कीबोर्ड शॉर्टकट की उपलब्धता पक्का करने के लिए, आप Chrome रिमोट डेस्कटॉप को ‘विंडो के रूप में खोलें’ पर कॉन्फ़िगर कर सकते हैं.</translation>
 <translation id="2540992418118313681">क्या आप इस कंप्यूटर को किसी दूसरे उपयोगकर्ता से शेयर करना चाहते हैं ताकि वह इसे देख और नियंत्रित कर सके?</translation>
+<translation id="254771646005658629">कहीं और मौजूद उपयोगकर्ताओं को इस Mac का नियंत्रण दें</translation>
 <translation id="2579271889603567289">होस्ट बंद हो गया या चालू नहीं हो पाया.</translation>
 <translation id="2599300881200251572">यह सेवा Chrome दूरस्थ डेस्कटॉप क्लाइंट के इनकमिंग कनेक्शन सक्षम करती है.</translation>
 <translation id="2647232381348739934">Chromoting सेवा</translation>
@@ -182,6 +183,11 @@
 <translation id="5419185025274123272">ऐप्‍लिकेशन को रीसेट नहीं किया जा सका. फिर भी आप गड़बड़ी की रिपोर्ट भेज सकते हैं.</translation>
 <translation id="5419418238395129586">पिछली बार ऑनलाइन: <ph name="DATE" /></translation>
 <translation id="544077782045763683">होस्‍ट बंद हो गया है.</translation>
+<translation id="5463789431147491241">इस Mac पर <ph name="PRODUCT_NAME" /> का इस्तेमाल करने के लिए, इन चरणों का पालन करें:
+
+नीचे '<ph name="BUTTON_NAME" />' चुनें. अपनी 'सुरक्षा और निजता' की प्राथमिकताओं में '<ph name="SERVICE_SCRIPT_NAME" />' के आगे बने बॉक्स पर सही का निशान लगाएं.
+
+अगर '<ph name="SERVICE_SCRIPT_NAME" />' पर पहले से सही का निशान लगा है, तो निशान हटाकर दोबारा लगाएं.</translation>
 <translation id="5510035215749041527">अभी डिस्‍कनेक्‍ट करें</translation>
 <translation id="5593560073513909978">सेवा अस्थायी रूप से अनुपलब्ध है. कृपया बाद में फिर से प्रयास करें.</translation>
 <translation id="5601503069213153581">पिन</translation>
@@ -298,12 +304,14 @@
 <translation id="837021510621780684">इस कंप्यूटर से</translation>
 <translation id="8383794970363966105">Chromoting का उपयोग करने के लिए, आपको अपने डिवाइस में Google खाता जोड़ना होगा.</translation>
 <translation id="8386846956409881180">होस्‍ट को अमान्‍य OAuth क्रेडेंशियल से कॉन्‍फ़िगर किया गया है.</translation>
+<translation id="8406498562923498210">अपने Chrome की रिमोट डेस्कटॉप सुविधा के मौजूदा वर्शन में लॉन्च करने के लिए सत्र चुनें. (ध्यान दें, हो सकता है कि कुछ सत्र Chrome की रिमोट डेस्कटॉप की सुविधा और स्थानीय कंसोल में एक ही समय में चलाने पर काम न करें.)</translation>
 <translation id="8428213095426709021">सेटिंग</translation>
 <translation id="8445362773033888690">Google Play स्टोर में देखें</translation>
 <translation id="8509907436388546015">डेस्कटॉप एकीकरण प्रोसेस</translation>
 <translation id="8513093439376855948">होस्ट प्रबंधन को दूरस्थ बनाने के लिए स्थानीय संदेश सेवा होस्ट</translation>
 <translation id="8525306231823319788">फ़ुल स्‍क्रीन</translation>
 <translation id="8548209692293300397">आपने पहले <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) के रूप में साइन इन किया था.  उस खाते में अपने कंप्‍यूटर को एक्‍सेस करने के लिए, उस खाते से <ph name="LINK_BEGIN" />Google Chrome में साइन इन करें<ph name="LINK_END" /> और Chrome रिमोट (दूर के किसी) डेस्‍कटॉप को फिर से इंस्‍टॉल करें.</translation>
+<translation id="858006550102277544">टिप्पणी</translation>
 <translation id="8642984861538780905">ठीक</translation>
 <translation id="8712909229180978490">मैं Google डिस्क में अपनी सहेजी गई फ़ाइलों को ऑनलाइन नहीं देख सकता/सकती.</translation>
 <translation id="8743328882720071828">क्या आप <ph name="CLIENT_USERNAME" /> को अपना कंप्यूटर देखने और नियंत्रित करने देना चाहते हैं?</translation>
@@ -321,6 +329,7 @@
 <translation id="9126115402994542723">इस डिवाइस से इस होस्ट को कनेक्ट करते समय दोबारा पिन न मांगें.</translation>
 <translation id="9149580767411232853">पूरा दूरस्थ डेस्कटॉप दृश्यमान रखें</translation>
 <translation id="9149992051684092333">अपने डेस्कटॉप को शेयर करना शुरू करने के लिए, आपकी मदद करने वाले व्यक्ति को नीचे दिया गया एक्सेस कोड दें.</translation>
+<translation id="916856682307586697">डिफ़ॉल्ट XSession को लॉन्च करें</translation>
 <translation id="9188433529406846933">अधिकृत करें</translation>
 <translation id="9213184081240281106">अमान्‍य होस्‍ट कॉन्‍फ़िगरेशन.</translation>
 <translation id="951991426597076286">अस्वीकार करें</translation>
diff --git a/remoting/resources/remoting_strings_hr.xtb b/remoting/resources/remoting_strings_hr.xtb
index 867d5f5c..4f42b0ff 100644
--- a/remoting/resources/remoting_strings_hr.xtb
+++ b/remoting/resources/remoting_strings_hr.xtb
@@ -304,7 +304,7 @@
 <translation id="837021510621780684">S ovog računala</translation>
 <translation id="8383794970363966105">Da biste upotrebljavali Chromoting, uređaju morate dodati Google račun.</translation>
 <translation id="8386846956409881180">Host je konfiguriran s nevažećim vjerodajnicama za OAuth.</translation>
-<translation id="8406498562923498210">Odaberite sesiju koju ćete pokrenuti u okruženju Udaljene radne površine Chrome. (Imajte na umu da neke vrste sesija možda ne podržavaju istovremeni rad na Udaljenoj radnoj površini Chrome i na lokalnoj konzoli.)</translation>
+<translation id="8406498562923498210">Odaberite sesiju koju ćete pokrenuti u okruženju Udaljene radne površine Chrome. (Napominjemo da neke vrste sesija možda ne podržavaju istovremeni rad na Udaljenoj radnoj površini Chrome i na lokalnoj konzoli.)</translation>
 <translation id="8428213095426709021">Postavke</translation>
 <translation id="8445362773033888690">Prikaz u Trgovini Google Play</translation>
 <translation id="8509907436388546015">Postupak integracije radne površine</translation>
diff --git a/remoting/resources/remoting_strings_kn.xtb b/remoting/resources/remoting_strings_kn.xtb
index 8773f31..36e3852 100644
--- a/remoting/resources/remoting_strings_kn.xtb
+++ b/remoting/resources/remoting_strings_kn.xtb
@@ -58,6 +58,7 @@
 <translation id="2509394361235492552"><ph name="HOSTNAME" /> ಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ</translation>
 <translation id="2512228156274966424">ಗಮನಿಸಿ: ಎಲ್ಲ ಕೀಬೋರ್ಡ್ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳು ಲಭ್ಯವಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ‘ವಿಂಡೊ ರೂಪದಲ್ಲಿ ತೆರೆಯಲು’ Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಅನ್ನು ನೀವು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು.</translation>
 <translation id="2540992418118313681">ನಿಯಂತ್ರಣವನ್ನು ವೀಕ್ಷಿಸಲು ನೀವು ಮತ್ತೊಬ್ಬ ಬಳಕೆದಾರರಿಗೆ ಈ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಹಂಚಲು ಬಯಸುತ್ತೀರಾ?</translation>
+<translation id="254771646005658629">ಈ ಮ್ಯಾಕ್ ಅನ್ನು ನಿಯಂತ್ರಿಸಲು ದೂರಸ್ಥ ಬಳಕೆದಾರರಿಗೆ ಅನುಮತಿಸಿ</translation>
 <translation id="2579271889603567289">ಹೋಸ್ಟ್ ಕ್ರ್ಯಾಶ್ ಆಗಿದೆ ಅಥವಾ ಕಾರ್ಯಾರಂಭ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ.</translation>
 <translation id="2599300881200251572">ಈ ಸೇವೆಯು Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಕ್ಲೈಂಟ್‌ಗಳಿಂದ ಒಳಬರುವ ಸಂಪರ್ಕಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.</translation>
 <translation id="2647232381348739934">ಕ್ರೊಮೋಟಿಂಗ್ ಸೇವೆ</translation>
@@ -182,6 +183,11 @@
 <translation id="5419185025274123272">ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನೀವು ಈಗಲೂ ದೋಷ ವರದಿಯನ್ನು ಕಳುಹಿಸಬಹುದು.</translation>
 <translation id="5419418238395129586">ಕೊನೆಯದಾಗಿ ಆನ್‌ಲೈನ್: <ph name="DATE" /></translation>
 <translation id="544077782045763683">ಹೋಸ್ಟ್ ಆಫ್‌ಲೈನ್‌ ಆಗಿದ್ದಾರೆ</translation>
+<translation id="5463789431147491241">ಈ ಮ್ಯಾಕ್‌ನಲ್ಲಿ <ph name="PRODUCT_NAME" /> ಬಳಸಲು, ಈ ಹಂತಗಳನ್ನು ಅನುಸರಿಸಿ:
+
+ಕೆಳಗಿರುವ '<ph name="BUTTON_NAME" />' ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿ. ನಿಮ್ಮ ಸುರಕ್ಷತೆ ಮತ್ತು ಗೌಪ್ಯತೆ ಆದ್ಯತೆಗಳಲ್ಲಿ, '<ph name="SERVICE_SCRIPT_NAME" />' ಯ ಮುಂದೆ ಇರುವ ಬಾಕ್ಸ್‌ನಲ್ಲಿ ಗುರುತು ಮಾಡಿ.
+
+'<ph name="SERVICE_SCRIPT_NAME" />' ನಲ್ಲಿ ಈಗಾಗಲೇ ಗುರುತು ಮಾಡಿದ್ದರೆ, ಅದರಿಂದ ಗುರುತು ತೆಗೆದುಹಾಕಿ ಮತ್ತು ನಂತರ ಪುನಃ ಗುರುತು ಹಾಕಿ.</translation>
 <translation id="5510035215749041527">ಇದೀಗ ಸಂಪರ್ಕಕಡಿತಗೊಳಿಸು</translation>
 <translation id="5593560073513909978">ಈ ಸೇವೆಯು ತಾತ್ಕಾಲಿಕವಾಗಿ ಲಭ್ಯವಿಲ್ಲ. ನಂತರ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="5601503069213153581">PIN</translation>
@@ -298,12 +304,14 @@
 <translation id="837021510621780684">ಈ ಕಂಪ್ಯೂಟರ್‌ನಿಂದ</translation>
 <translation id="8383794970363966105">Chromoting ಬಳಸಲು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಒಂದು Google ಖಾತೆಯನ್ನು ನೀವು ಸೇರಿಸಬೇಕಾಗುತ್ತದೆ.</translation>
 <translation id="8386846956409881180">ಹೋಸ್ಟ್ ಅನ್ನು ಅಮಾನ್ಯ OAuth ರುಜುವಾತುಗಳೊಂದಿಗೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ.</translation>
+<translation id="8406498562923498210">ನಿಮ್ಮ Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಪರಿಸರದಲ್ಲಿ ಪ್ರಾರಂಭಿಸಲು ಸೆಶನ್ ಒಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ. (ಕೆಲವು ಸೆಷನ್ ಪ್ರಕಾರಗಳು ಏಕಕಾಲದಲ್ಲಿ Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್‌ಟಾಪ್‌ನಲ್ಲಿ ಮತ್ತು ಸ್ಥಳೀಯ ಕನ್ಸೋಲ್‌ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ಗಮನಿಸಿ.)</translation>
 <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8445362773033888690">Google Play Store ನಲ್ಲಿ ವೀಕ್ಷಿಸಿ</translation>
 <translation id="8509907436388546015">ಡೆಸ್ಕ್‌ಟಾಪ್ ಸಮಗ್ರೀಕರಣ ಪ್ರಕ್ರಿಯೆ</translation>
 <translation id="8513093439376855948">ರಿಮೋಟಿಂಗ್ ಹೋಸ್ಟ್ ನಿರ್ವಹಣೆಗಾಗಿ ಸ್ಥಳೀಯ ಸಂದೇಶ ಹೋಸ್ಟ್</translation>
 <translation id="8525306231823319788">ಪೂರ್ಣ ಪರದೆ</translation>
 <translation id="8548209692293300397">ನೀವು ಈ ಹಿಂದೆ <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) ನಂತೆ ಸೈನ್ ಇನ್ ಮಾಡಿರುವಿರಿ. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗಳ ಮೂಲಕ ಆ ಖಾತೆಯಲ್ಲಿ ಪ್ರವೇಶಿಸಲು, ಆ ಖಾತೆಯೊಂದಿಗೆ <ph name="LINK_BEGIN" />Google Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ<ph name="LINK_END" /> ಮತ್ತು Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಅನ್ನು ಮರುಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ.</translation>
+<translation id="858006550102277544">ಕಾಮೆಂಟ್</translation>
 <translation id="8642984861538780905">ಚೆನ್ನಾಗಿದೆ</translation>
 <translation id="8712909229180978490">ನನ್ನ ಉಳಿಸಲಾದ ಫೈಲ್‌ಗಳನ್ನು Google ಡ್ರೈವ್‌ನಲ್ಲಿ ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ವೀಕ್ಷಿಸಲು ನನಗೆ ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="8743328882720071828">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ವೀಕ್ಷಿಸಲು ಮತ್ತು ನಿಯಂತ್ರಿಸಲು <ph name="CLIENT_USERNAME" /> ಅವರನ್ನು ಅನುಮತಿಸಲು ನೀವು ಬಯಸುವಿರಾ?</translation>
@@ -321,6 +329,7 @@
 <translation id="9126115402994542723">ಈ ಸಾಧನದಿಂದ ಈ ಹೋಸ್ಟ್‌ಗೆ ಸಂಪರ್ಕಿಸುತ್ತಿರುವಾಗ ಪಿನ್‌ಗಾಗಿ ಮತ್ತೆ ಕೇಳಬೇಡ.</translation>
 <translation id="9149580767411232853">ಸಂಪೂರ್ಣ ರಿಮೋಟ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಕಾಣುವಂತೆ ಇರಿಸಿ</translation>
 <translation id="9149992051684092333">ನಿಮ್ಮ ಡೆಸ್ಕ್‌ಟಾಪ್ ಹಂಚುವಿಕೆಯನ್ನು ಪ್ರಾರಂಭಿಸಲು, ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತಿರುವ ವ್ಯಕ್ತಿಗೆ ಪ್ರವೇಶ ಕೋಡ್ ಅನ್ನು ಕೆಳಗೆ ನೀಡಿ.</translation>
+<translation id="916856682307586697">ಡೀಫಾಲ್ಟ್ XSession ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ</translation>
 <translation id="9188433529406846933">ದೃಢೀಕರಿಸಿ</translation>
 <translation id="9213184081240281106">ಅಮಾನ್ಯ ಹೋಸ್ಟ್ ಕಾನ್ಫಿಗರೇಶನ್.</translation>
 <translation id="951991426597076286">ನಿರಾಕರಿಸಿ</translation>
diff --git a/remoting/resources/remoting_strings_ms.xtb b/remoting/resources/remoting_strings_ms.xtb
index ceb6ee1b..0e9f24f 100644
--- a/remoting/resources/remoting_strings_ms.xtb
+++ b/remoting/resources/remoting_strings_ms.xtb
@@ -183,7 +183,7 @@
 <translation id="5419185025274123272">Tidak dapat menetapkan semula aplikasi. Anda masih boleh menghantar laporan pepijat.</translation>
 <translation id="5419418238395129586">Terakhir dalam talian: <ph name="DATE" /></translation>
 <translation id="544077782045763683">Hos telah ditutup.</translation>
-<translation id="5463789431147491241">Untuk menggunakan <ph name="PRODUCT_NAME" /> pada Mac ini, ikuti langkah berikut:
+<translation id="5463789431147491241">Untuk menggunakan <ph name="PRODUCT_NAME" /> pada Mac ini, ikut langkah berikut:
 
 Pilih '<ph name="BUTTON_NAME" />' di bawah. Dalam pilihan Keselamatan dan Privasi anda, tandai kotak di sebelah '<ph name="SERVICE_SCRIPT_NAME" />'.
 
diff --git a/remoting/resources/remoting_strings_nl.xtb b/remoting/resources/remoting_strings_nl.xtb
index a5041db..c09b01c 100644
--- a/remoting/resources/remoting_strings_nl.xtb
+++ b/remoting/resources/remoting_strings_nl.xtb
@@ -185,9 +185,9 @@
 <translation id="544077782045763683">Host is afgesloten.</translation>
 <translation id="5463789431147491241">Volg deze stappen om <ph name="PRODUCT_NAME" /> te gebruiken op deze Mac:
 
-Selecteer '<ph name="BUTTON_NAME" />' hieronder. Vink in je voorkeuren voor beveiliging en privacy het selectievakje naast '<ph name="SERVICE_SCRIPT_NAME" />' aan.
+Selecteer '<ph name="BUTTON_NAME" />' hieronder. Vink het selectievakje naast '<ph name="SERVICE_SCRIPT_NAME" />' aan in je voorkeuren voor beveiliging en privacy.
 
-Als '<ph name="SERVICE_SCRIPT_NAME" />' al is aangevinkt, vink je dit uit en opnieuw aan.</translation>
+Als '<ph name="SERVICE_SCRIPT_NAME" />' al is aangevinkt, vink je dit eerst uit en opnieuw aan.</translation>
 <translation id="5510035215749041527">Nu verbinding verbreken</translation>
 <translation id="5593560073513909978">De service is tijdelijk niet beschikbaar. Probeer het later opnieuw.</translation>
 <translation id="5601503069213153581">Pincode</translation>
@@ -304,7 +304,7 @@
 <translation id="837021510621780684">Vanaf deze computer</translation>
 <translation id="8383794970363966105">Als je Chromoting wilt gebruiken, moet je een Google-account aan je apparaat toevoegen</translation>
 <translation id="8386846956409881180">Host is geconfigureerd met ongeldige OAuth-inloggegevens.</translation>
-<translation id="8406498562923498210">Selecteer een sessie om te starten in je Chrome Remote Desktop-omgeving. (Houd er rekening mee dat bepaalde sessietypen niet tegelijkertijd kunnen worden uitgevoerd in Chrome Remote Desktop en op de lokale console.)</translation>
+<translation id="8406498562923498210">Selecteer een sessie om te starten in je Chrome Remote Desktop-omgeving. (Houd er rekening mee dat sommige sessies niet tegelijkertijd in Chrome Remote Desktop en op de lokale console kunnen worden uitgevoerd.)</translation>
 <translation id="8428213095426709021">Instellingen</translation>
 <translation id="8445362773033888690">Bekijken in de Google Play Store</translation>
 <translation id="8509907436388546015">Desktopintegratieproces</translation>
diff --git a/remoting/resources/remoting_strings_pl.xtb b/remoting/resources/remoting_strings_pl.xtb
index 2316ed88..0ee38c2 100644
--- a/remoting/resources/remoting_strings_pl.xtb
+++ b/remoting/resources/remoting_strings_pl.xtb
@@ -183,9 +183,9 @@
 <translation id="5419185025274123272">Nie można zresetować aplikacji. Wciąż możesz przesłać zgłoszenie błędu.</translation>
 <translation id="5419418238395129586">Ostatnio online: <ph name="DATE" /></translation>
 <translation id="544077782045763683">Host został wyłączony.</translation>
-<translation id="5463789431147491241">Aby używać <ph name="PRODUCT_NAME" /> na tym Maku:
+<translation id="5463789431147491241">Aby używać usługi <ph name="PRODUCT_NAME" /> na tym Maku:
 
-Kliknij „<ph name="BUTTON_NAME" />” poniżej. W ustawieniach Bezpieczeństwo i prywatność zaznacz „<ph name="SERVICE_SCRIPT_NAME" />”.
+Kliknij „<ph name="BUTTON_NAME" />” poniżej. W ustawieniach Prywatność i bezpieczeństwo zaznacz „<ph name="SERVICE_SCRIPT_NAME" />”.
 
 Jeśli pole „<ph name="SERVICE_SCRIPT_NAME" />” jest już zaznaczone, odznacz je i zaznacz ponownie.</translation>
 <translation id="5510035215749041527">Odłącz teraz</translation>
@@ -304,7 +304,7 @@
 <translation id="837021510621780684">Z tego komputera</translation>
 <translation id="8383794970363966105">Aby użyć funkcji Chromoting, musisz dodać do urządzenia konto Google.</translation>
 <translation id="8386846956409881180">Host został skonfigurowany z nieprawidłowymi danymi logowania protokołu OAuth.</translation>
-<translation id="8406498562923498210">Wybierz sesję, którą chcesz uruchomić w środowisku Pulpitu zdalnego Chrome. (Uwaga: niektóre typy sesji nie mogą działać jednocześnie w Pulpicie zdalnym Chrome i na konsoli lokalnej).</translation>
+<translation id="8406498562923498210">Wybierz sesję, którą chcesz uruchomić w środowisku Pulpitu zdalnego Chrome. Uwaga: niektóre typy sesji nie mogą działać jednocześnie w Pulpicie zdalnym Chrome i na konsoli lokalnej.</translation>
 <translation id="8428213095426709021">Ustawienia</translation>
 <translation id="8445362773033888690">Wyświetl w Sklepie Google Play</translation>
 <translation id="8509907436388546015">Proces integracji pulpitu</translation>
diff --git a/remoting/resources/remoting_strings_ru.xtb b/remoting/resources/remoting_strings_ru.xtb
index 938fee6..af2bf26 100644
--- a/remoting/resources/remoting_strings_ru.xtb
+++ b/remoting/resources/remoting_strings_ru.xtb
@@ -58,7 +58,7 @@
 <translation id="2509394361235492552">Подключено к устройству "<ph name="HOSTNAME" />"</translation>
 <translation id="2512228156274966424">ПРИМЕЧАНИЕ. Чтобы пользоваться всеми быстрыми клавишами, Удаленный рабочий стол Chrome можно открывать в отдельном окне, задав соответствующие настройки.</translation>
 <translation id="2540992418118313681">Предоставить доступ к этому компьютеру другому пользователю?</translation>
-<translation id="254771646005658629">Разрешите пользователям управлять этим Mac удаленно</translation>
+<translation id="254771646005658629">Разрешите пользователям управлять этим устройством удаленно</translation>
 <translation id="2579271889603567289">Сбой хоста или ошибка при его запуске.</translation>
 <translation id="2599300881200251572">Данная служба обеспечивает входящие соединения от клиентов Удаленного рабочего стола Chrome.</translation>
 <translation id="2647232381348739934">Служба Пульта Chrome</translation>
@@ -183,11 +183,11 @@
 <translation id="5419185025274123272">Не удалось сбросить настройки приложения. Вы можете отправить сообщение об ошибке.</translation>
 <translation id="5419418238395129586">Последний раз в сети: <ph name="DATE" /></translation>
 <translation id="544077782045763683">Хост отключен.</translation>
-<translation id="5463789431147491241">Чтобы использовать <ph name="PRODUCT_NAME" /> на этом Mac, выполните следующие шаги.
+<translation id="5463789431147491241">Чтобы использовать <ph name="PRODUCT_NAME" /> на этом устройстве, выполните следующие шаги.
 
-Нажмите кнопку "<ph name="BUTTON_NAME" />" ниже. В разделе "Защита и безопасность" установите флажок рядом с пунктом "<ph name="SERVICE_SCRIPT_NAME" />".
+Нажмите кнопку "<ph name="BUTTON_NAME" />" ниже. В разделе "Защита и безопасность" установите флажок рядом с пунктом <ph name="SERVICE_SCRIPT_NAME" />.
 
-Если пункт "<ph name="SERVICE_SCRIPT_NAME" />" уже отмечен флажком, снимите его и снова установите.</translation>
+Если пункт <ph name="SERVICE_SCRIPT_NAME" /> уже отмечен флажком, снимите его и снова установите.</translation>
 <translation id="5510035215749041527">Отключить</translation>
 <translation id="5593560073513909978">Служба временно недоступна. Повторите попытку позже.</translation>
 <translation id="5601503069213153581">PIN-код</translation>
diff --git a/testing/buildbot/filters/skia_renderer.browser_tests.filter b/testing/buildbot/filters/skia_renderer.browser_tests.filter
index 548264d..0930bc9 100644
--- a/testing/buildbot/filters/skia_renderer.browser_tests.filter
+++ b/testing/buildbot/filters/skia_renderer.browser_tests.filter
@@ -1,5 +1,10 @@
 # Some browser_tests are flaking and as the SkiaRenderer changes some timings
-# the rate of flakes could be affected. Currently all known cases of this are
-# fixed. See https://crbug.com/982933 for details.
+# the rate of flakes could be affected. Currently most cases of this are fixed.
+# See https://crbug.com/982933 for details.
 # Add vasilyt@chromium.org and jonross@chromium.org on bugs related to flakes.
 
+# New flake exposed by SkiaRenderer. https://crbug.com/1004299
+-DataSaverSiteBreakdownMetricsObserverBrowserTest.LazyLoadFrameDisabledInReload
+
+# Flaking generally. https://crbug.com/1000813
+-SaveCardBubbleViewsFullFormBrowserTestForStatusChip.ClickingOnCreditCardIconInStatusChipReshowsBubble
diff --git a/third_party/abseil-cpp/abseil_clients.gni b/third_party/abseil-cpp/abseil_clients.gni
new file mode 100644
index 0000000..6a2d1ff
--- /dev/null
+++ b/third_party/abseil-cpp/abseil_clients.gni
@@ -0,0 +1,30 @@
+# Copyright 2019 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.
+
+# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
+# adding projects to this list please reach out to cxx@chromium.org and CC:
+# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
+#
+# More information can be found at:
+# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
+declare_args() {
+  # Additional targets that can depend on absl.
+  # ** DISCLAIMER **
+  #
+  # Using "additional_absl_clients" is highly discouraged because it will break
+  # the component build since Abseil doesn't have export annotations and WebRTC
+  # is already depending on it. Any CL that use "additional_absl_clients" will
+  # have a really high probability of being reverted.
+  additional_absl_clients = []
+}
+assert(!is_component_build || additional_absl_clients == [])
+
+_chromium_absl_clients = [
+  "//libassistant/*",
+  "//third_party/webrtc/*",
+  "//third_party/abseil-cpp/*",
+  "//third_party/googletest:gtest",
+]
+
+absl_visibility = _chromium_absl_clients + additional_absl_clients
diff --git a/third_party/abseil-cpp/absl/algorithm/BUILD.gn b/third_party/abseil-cpp/absl/algorithm/BUILD.gn
index 665be4a..210c9e38 100644
--- a/third_party/abseil-cpp/absl/algorithm/BUILD.gn
+++ b/third_party/abseil-cpp/absl/algorithm/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/base/BUILD.gn b/third_party/abseil-cpp/absl/base/BUILD.gn
index 0c981b49b..beb08f2e 100644
--- a/third_party/abseil-cpp/absl/base/BUILD.gn
+++ b/third_party/abseil-cpp/absl/base/BUILD.gn
@@ -3,14 +3,16 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
+# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
+# adding projects to this list please reach out to cxx@chromium.org and CC:
+# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
+#
+# More information can be found at:
+# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/container/BUILD.gn b/third_party/abseil-cpp/absl/container/BUILD.gn
index 12ebdff..452f160 100644
--- a/third_party/abseil-cpp/absl/container/BUILD.gn
+++ b/third_party/abseil-cpp/absl/container/BUILD.gn
@@ -3,14 +3,16 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
+# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
+# adding projects to this list please reach out to cxx@chromium.org and CC:
+# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
+#
+# More information can be found at:
+# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/debugging/BUILD.gn b/third_party/abseil-cpp/absl/debugging/BUILD.gn
index a3c7cfe..35ebbfc3 100644
--- a/third_party/abseil-cpp/absl/debugging/BUILD.gn
+++ b/third_party/abseil-cpp/absl/debugging/BUILD.gn
@@ -4,6 +4,7 @@
 
 import("//build/config/sanitizers/sanitizers.gni")
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -12,12 +13,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/flags/BUILD.gn b/third_party/abseil-cpp/absl/flags/BUILD.gn
index 073c74ac..ee54fd4 100644
--- a/third_party/abseil-cpp/absl/flags/BUILD.gn
+++ b/third_party/abseil-cpp/absl/flags/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/hash/BUILD.gn b/third_party/abseil-cpp/absl/hash/BUILD.gn
index 21bf881a..f1e9391 100644
--- a/third_party/abseil-cpp/absl/hash/BUILD.gn
+++ b/third_party/abseil-cpp/absl/hash/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/memory/BUILD.gn b/third_party/abseil-cpp/absl/memory/BUILD.gn
index 06bc4c5..1709322 100644
--- a/third_party/abseil-cpp/absl/memory/BUILD.gn
+++ b/third_party/abseil-cpp/absl/memory/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/meta/BUILD.gn b/third_party/abseil-cpp/absl/meta/BUILD.gn
index f2e5be2..9fbfc9b 100644
--- a/third_party/abseil-cpp/absl/meta/BUILD.gn
+++ b/third_party/abseil-cpp/absl/meta/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/numeric/BUILD.gn b/third_party/abseil-cpp/absl/numeric/BUILD.gn
index 55b6d0b..b3e3955 100644
--- a/third_party/abseil-cpp/absl/numeric/BUILD.gn
+++ b/third_party/abseil-cpp/absl/numeric/BUILD.gn
@@ -3,14 +3,16 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
+# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
+# adding projects to this list please reach out to cxx@chromium.org and CC:
+# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
+#
+# More information can be found at:
+# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/random/BUILD.gn b/third_party/abseil-cpp/absl/random/BUILD.gn
index c0e094a..7b928c7 100644
--- a/third_party/abseil-cpp/absl/random/BUILD.gn
+++ b/third_party/abseil-cpp/absl/random/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,13 +12,8 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-    "//third_party/openscreen/*",
-  ]
+  visibility = absl_visibility
+  visibility += [ "//third_party/openscreen/*" ]
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/random/internal/BUILD.gn b/third_party/abseil-cpp/absl/random/internal/BUILD.gn
index 00480f4..8665208f 100644
--- a/third_party/abseil-cpp/absl/random/internal/BUILD.gn
+++ b/third_party/abseil-cpp/absl/random/internal/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,13 +12,8 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-    "//third_party/openscreen/*",
-  ]
+  visibility = absl_visibility
+  visibility += [ "//third_party/openscreen/*" ]
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/strings/BUILD.gn b/third_party/abseil-cpp/absl/strings/BUILD.gn
index fc1d9562..2fff590 100644
--- a/third_party/abseil-cpp/absl/strings/BUILD.gn
+++ b/third_party/abseil-cpp/absl/strings/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,13 +12,8 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-    "//third_party/openscreen/*",
-  ]
+  visibility = absl_visibility
+  visibility += [ "//third_party/openscreen/*" ]
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/synchronization/BUILD.gn b/third_party/abseil-cpp/absl/synchronization/BUILD.gn
index cd60181d4..8af38bc 100644
--- a/third_party/abseil-cpp/absl/synchronization/BUILD.gn
+++ b/third_party/abseil-cpp/absl/synchronization/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/time/BUILD.gn b/third_party/abseil-cpp/absl/time/BUILD.gn
index 0135cdd..36ae3d2 100644
--- a/third_party/abseil-cpp/absl/time/BUILD.gn
+++ b/third_party/abseil-cpp/absl/time/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.gn b/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.gn
index 44e01791..5daa2a3 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.gn
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,12 +12,7 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/types/BUILD.gn b/third_party/abseil-cpp/absl/types/BUILD.gn
index 31ceaf30..4e3eeb8b 100644
--- a/third_party/abseil-cpp/absl/types/BUILD.gn
+++ b/third_party/abseil-cpp/absl/types/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
 # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
 # adding projects to this list please reach out to cxx@chromium.org and CC:
@@ -11,13 +12,8 @@
 # More information can be found at:
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-    "//third_party/openscreen/*",
-  ]
+  visibility = absl_visibility
+  visibility += [ "//third_party/openscreen/*" ]
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/abseil-cpp/absl/utility/BUILD.gn b/third_party/abseil-cpp/absl/utility/BUILD.gn
index 49390b3f..cbfdd65e 100644
--- a/third_party/abseil-cpp/absl/utility/BUILD.gn
+++ b/third_party/abseil-cpp/absl/utility/BUILD.gn
@@ -3,14 +3,16 @@
 # found in the LICENSE file.
 
 import("//build_overrides/build.gni")
+import("//third_party/abseil-cpp/abseil_clients.gni")
 
+# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
+# adding projects to this list please reach out to cxx@chromium.org and CC:
+# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
+#
+# More information can be found at:
+# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 if (build_with_chromium) {
-  visibility = [
-    "//libassistant/*",
-    "//third_party/webrtc/*",
-    "//third_party/abseil-cpp/*",
-    "//third_party/googletest:gtest",
-  ]
+  visibility = absl_visibility
 } else {
   visibility = [ "*" ]
 }
diff --git a/third_party/axe-core/README.chromium b/third_party/axe-core/README.chromium
index 54f5507..7697284 100644
--- a/third_party/axe-core/README.chromium
+++ b/third_party/axe-core/README.chromium
@@ -1,9 +1,9 @@
 Name: AXE-CORE Accessibility Audit
 Short Name: axe-core
 URL: https://github.com/dequelabs/axe-core/
-Version: 3.3.2
-Date: Thur Aug 22 12:45:00 2019
-Revision: 281653df3794f429b71327fe3afa37ca0fadb1c7
+Version: 0
+Date: Mon Jul 24 12:17:05 2017
+Revision: d02dba3223fefe525438330e40b5da5de81eeeb5
 License: MPL 2.0
 License File: LICENSE
 Security Critical: no
diff --git a/third_party/axe-core/axe.d.ts b/third_party/axe-core/axe.d.ts
index b68b2c6..258cf3dc 100644
--- a/third_party/axe-core/axe.d.ts
+++ b/third_party/axe-core/axe.d.ts
@@ -1,224 +1,169 @@
-// Type definitions for axe-core
+// Type definitions for axe-core 2.3.1
 // Project: https://github.com/dequelabs/axe-core
 // Definitions by: Marcy Sutton <https://github.com/marcysutton>
 
-declare namespace axe {
-	type ImpactValue = 'minor' | 'moderate' | 'serious' | 'critical';
+declare module axe {
 
-	type TagValue = 'wcag2a' | 'wcag2aa' | 'section508' | 'best-practice';
+	type ImpactValue = "minor" | "moderate" | "serious" | "critical";
 
-	type ReporterVersion = 'v1' | 'v2' | 'raw' | 'raw-env' | 'no-passes';
+	type TagValue = "wcag2a" | "wcag2aa" | "section508" | "best-practice";
 
-	type RunOnlyType = 'rule' | 'rules' | 'tag' | 'tags';
+	type ReporterVersion = "v1" | "v2";
 
-	type resultGroups = 'inapplicable' | 'passes' | 'incomplete' | 'violations';
+	type RunOnlyType = "rule" | "rules" | "tag" | "tags";
 
-	type RunOnlyObject = {
-		include?: string[] | string[][];
-		exclude?: string[] | string[][];
-	};
-
-	type RunCallback = (error: Error, results: AxeResults) => void;
-
-	type ElementContext = Node | string | RunOnlyObject;
-
-	interface TestEngine {
-		name: string;
-		version: string;
-	}
-	interface TestRunner {
-		name: string;
-	}
-	interface TestEnvironment {
-		userAgent: string;
-		windowWidth: number;
-		windowHeight: number;
-		orientationAngle?: number;
-		orientationType?: string;
+	interface ElementContext {
+		node?: Object,
+		selector?: string,
+		include?: any[],
+		exclude?: any[]
 	}
 	interface RunOnly {
-		type: RunOnlyType;
-		values?: TagValue[] | string[] | RunOnlyObject;
-	}
-	interface RunOptions {
-		runOnly?: RunOnly;
-		rules?: Object;
-		iframes?: boolean;
-		elementRef?: boolean;
-		selectors?: boolean;
-		resultTypes?: resultGroups[];
-		reporter?: ReporterVersion;
-		xpath?: boolean;
-		absolutePaths?: boolean;
-		restoreScroll?: boolean;
-		frameWaitTime?: number;
-		preload?: boolean;
-		performanceTimer?: boolean;
+		type: RunOnlyType,
+		value?: {
+			include?: string[],
+			exclude?: string[]
+		}
+		values?: TagValue[]
 	}
 	interface AxeResults {
-		toolOptions: RunOptions;
-		testEngine: TestEngine;
-		testRunner: TestRunner;
-		testEnvironment: TestEnvironment;
-		url: string;
-		timestamp: string;
-		passes: Result[];
-		violations: Result[];
-		incomplete: Result[];
-		inapplicable: Result[];
+		url: string,
+		timestamp: string,
+		passes: Result[],
+		violations: Result[],
+		incomplete: Result[],
+		inapplicable: Result[]
 	}
 	interface Result {
-		description: string;
-		help: string;
-		helpUrl: string;
-		id: string;
-		impact?: ImpactValue;
-		tags: TagValue[];
-		nodes: NodeResult[];
+		description: string,
+		help: string,
+		helpUrl: string,
+		id: string,
+		impact: ImpactValue,
+		tags: TagValue[],
+		nodes: NodeResult[]
 	}
 	interface NodeResult {
-		html: string;
-		impact?: ImpactValue;
-		target: string[];
-		xpath?: string[];
-		any: CheckResult[];
-		all: CheckResult[];
-		none: CheckResult[];
-		failureSummary?: string;
+		html: string,
+		impact: ImpactValue,
+		target: string[],
+		any: CheckResult[],
+		all: CheckResult[],
+		none: CheckResult[],
+		failureSummary?: string
 	}
 	interface CheckResult {
-		id: string;
-		impact: string;
-		message: string;
-		data: any;
-		relatedNodes?: RelatedNode[];
+		id: string,
+		impact: string,
+		message: string,
+		data: any,
+		relatedNodes?: RelatedNode[]
 	}
 	interface RelatedNode {
-		target: string[];
-		html: string;
-	}
-	interface RuleLocale {
-		[key: string]: {
-			description: string;
-			help: string;
-		};
-	}
-	interface CheckLocale {
-		[key: string]: {
-			pass: string;
-			fail: string;
-			incomplete: string | { [key: string]: string };
-		};
-	}
-	interface Locale {
-		lang?: string;
-		rules?: RuleLocale;
-		checks?: CheckLocale;
+		target: string[],
+		html: string
 	}
 	interface Spec {
 		branding?: {
-			brand?: string;
-			application?: string;
-		};
-		reporter?: ReporterVersion;
-		checks?: Check[];
-		rules?: Rule[];
-		locale?: Locale;
+			brand: string,
+			application: string
+		},
+		reporter?: ReporterVersion,
+		checks?: Check[],
+		rules?: Rule[]
 	}
 	interface Check {
-		id: string;
-		evaluate: Function | string;
-		after?: Function | string;
-		options?: any;
-		matches?: string;
-		enabled?: boolean;
+		id: string,
+		evaluate: Function,
+		after?: Function,
+		options?: any,
+		matches?: string,
+		enabled?: boolean
 	}
 	interface Rule {
-		id: string;
-		selector?: string;
-		excludeHidden?: boolean;
-		enabled?: boolean;
-		pageLevel?: boolean;
-		any?: string[];
-		all?: string[];
-		none?: string[];
-		tags?: string[];
-		matches?: string;
+		id: string,
+		selector?: string,
+		excludeHidden?: boolean,
+		enabled?: boolean,
+		pageLevel?: boolean,
+		any?: string[],
+		all?: string[],
+		none?: string[],
+		tags?: string[],
+		matches?: string
 	}
 	interface AxePlugin {
-		id: string;
-		run(...args: any[]): any;
+		id: string,
+		run(...args:any[]): any,
 		commands: {
-			id: string;
-			callback(...args: any[]): void;
-		}[];
-		cleanup?(callback: Function): void;
+			id: string,
+			callback(...args:any[]): void
+		}[],
+		cleanup?(callback:Function): void
 	}
 
-	let plugins: any;
+	let plugins: any
 
 	/**
 	 * Source string to use as an injected script in Selenium
 	 */
-	let source: string;
+	let source: string
 
 	/**
-	 * Object for axe Results
+	 * Object for aXe Results
 	 */
-	var AxeResults: AxeResults;
+	var AxeResults: AxeResults
 
 	/**
 	 * Runs a number of rules against the provided HTML page and returns the resulting issue list
 	 *
-	 * @param   {ElementContext} context  Optional The `Context` specification object @see Context
-	 * @param   {RunOptions}     options  Optional Options passed into rules or checks, temporarily modifying them.
-	 * @param   {RunCallback}    callback Optional The function to invoke when analysis is complete.
-	 * @returns {Promise<AxeResults>|void} If the callback was not defined, axe will return a Promise.
+	 * @param  {Object}   context  Optional The `Context` specification object @see Context
+	 * @param  {Array}    options  Optional Options passed into rules or checks, temporarily modifying them.
+	 * @param  {Function} callback Optional The function to invoke when analysis is complete.
+	 * @returns {any}  	  results  If the callback was not defined, aXe will return a Promise instead.
 	 */
-	function run(context?: ElementContext): Promise<AxeResults>;
-	function run(options: RunOptions): Promise<AxeResults>;
-	function run(callback: (error: Error, results: AxeResults) => void): void;
-	function run(context: ElementContext, callback: RunCallback): void;
-	function run(options: RunOptions, callback: RunCallback): void;
-	function run(
-		context: ElementContext,
-		options: RunOptions
-	): Promise<AxeResults>;
-	function run(
-		context: ElementContext,
-		options: RunOptions,
-		callback: RunCallback
-	): void;
+	function run(context?: ElementContext, options?: {runOnly?: RunOnly, rules?: Object, iframes?: Boolean, elementRef?: Boolean, selectors?: Boolean}, callback?: (error: Error, results:AxeResults) => void): any
 
 	/**
-	 * Method for configuring the data format used by axe. Helpful for adding new
+	 * Starts analysis on the current document and its subframes
+	 *
+	 * @param  {Object}   context  The `Context` specification object @see Context
+	 * @param  {Array}    options  Options passed into rules or checks, temporarily modifyint them.
+	 * @param  {Function} callback The function to invoke when analysis is complete.
+	 * @returns {Object}  results  The aXe results object
+	 */
+	function a11yCheck(context: ElementContext, options: {runOnly?: RunOnly, rules?: Object, iframes?: Boolean, elementRef?: Boolean, selectors?: Boolean}, callback: (results:AxeResults) => void): AxeResults
+
+	/**
+	 * Method for configuring the data format used by aXe. Helpful for adding new
 	 * rules, which must be registered with the library to execute.
 	 * @param  {Spec}       Spec Object with valid `branding`, `reporter`, `checks` and `rules` data
 	 */
-	function configure(spec: Spec): void;
+	function configure(spec: Spec): void
 
 	/**
 	 * Searches and returns rules that contain a tag in the list of tags.
 	 * @param  {Array}  tags  Optional array of tags
 	 * @return {Array}  Array of rules
 	 */
-	function getRules(tags?: string[]): Object[];
+	function getRules(tags?: string[]): Object[]
 
 	/**
 	 * Restores the default axe configuration
 	 */
-	function reset(): void;
+	function reset(): void
 
 	/**
 	 * Function to register a plugin configuration in document and its subframes
 	 * @param  {Object}    plugin    A plugin configuration object
 	 */
-	function registerPlugin(plugin: AxePlugin): void;
+	function registerPlugin(plugin: AxePlugin): void
 
 	/**
 	 * Function to clean up plugin configuration in document and its subframes
 	 */
-	function cleanup(): void;
+	function cleanup(): void
+
 }
 
 export = axe;
diff --git a/third_party/axe-core/axe.js b/third_party/axe-core/axe.js
index 3b7cfe6..2e2c746b 100644
--- a/third_party/axe-core/axe.js
+++ b/third_party/axe-core/axe.js
@@ -1,5 +1,5 @@
-/*! axe v3.3.2
- * Copyright (c) 2019 Deque Systems, Inc.
+/*! aXe v3.0.0-alpha-1
+ * Copyright (c) 2017 Deque Systems, Inc.
  *
  * Your use of this Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -13,22 +13,15 @@
   var global = window;
   var document = window.document;
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   var axe = axe || {};
-  axe.version = '3.3.2';
+  axe.version = '3.0.0-alpha-1';
   if (typeof define === 'function' && define.amd) {
-    define('axe-core', [], function() {
+    define([], function() {
       'use strict';
       return axe;
     });
@@ -44,2496 +37,25 @@
   function SupportError(error) {
     this.name = 'SupportError';
     this.cause = error.cause;
-    this.message = '`'.concat(error.cause, '` - feature unsupported in your environment.');
+    this.message = '`' + error.cause + '` - feature unsupported in your environment.';
     if (error.ruleId) {
       this.ruleId = error.ruleId;
-      this.message += ' Skipping '.concat(this.ruleId, ' rule.');
+      this.message += ' Skipping ' + this.ruleId + ' rule.';
     }
     this.stack = new Error().stack;
   }
   SupportError.prototype = Object.create(Error.prototype);
   SupportError.prototype.constructor = SupportError;
-  (function() {
-    function r(e, n, t) {
-      function o(i, f) {
-        if (!n[i]) {
-          if (!e[i]) {
-            var c = 'function' == typeof require && require;
-            if (!f && c) {
-              return c(i, !0);
-            }
-            if (u) {
-              return u(i, !0);
-            }
-            var a = new Error('Cannot find module \'' + i + '\'');
-            throw a.code = 'MODULE_NOT_FOUND', a;
-          }
-          var p = n[i] = {
-            exports: {}
-          };
-          e[i][0].call(p.exports, function(r) {
-            var n = e[i][1][r];
-            return o(n || r);
-          }, p, p.exports, r, e, n, t);
-        }
-        return n[i].exports;
-      }
-      for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) {
-        o(t[i]);
-      }
-      return o;
-    }
-    return r;
-  })()({
-    1: [ function(_dereq_, module, exports) {
-      if (!('Promise' in window)) {
-        _dereq_('es6-promise').polyfill();
-      }
-      _dereq_('weakmap-polyfill');
-      axe.imports = {
-        axios: _dereq_('axios'),
-        CssSelectorParser: _dereq_('css-selector-parser').CssSelectorParser,
-        doT: _dereq_('@deque/dot'),
-        emojiRegexText: _dereq_('emoji-regex')
-      };
-    }, {
-      '@deque/dot': 2,
-      axios: 3,
-      'css-selector-parser': 29,
-      'emoji-regex': 31,
-      'es6-promise': 32,
-      'weakmap-polyfill': 34
-    } ],
-    2: [ function(_dereq_, module, exports) {
-      (function() {
-        'use strict';
-        var doT = {
-          name: 'doT',
-          version: '1.1.1',
-          templateSettings: {
-            evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g,
-            interpolate: /\{\{=([\s\S]+?)\}\}/g,
-            encode: /\{\{!([\s\S]+?)\}\}/g,
-            use: /\{\{#([\s\S]+?)\}\}/g,
-            useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,
-            define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
-            defineParams: /^\s*([\w$]+):([\s\S]+)/,
-            conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,
-            iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
-            varname: 'it',
-            strip: true,
-            append: true,
-            selfcontained: false,
-            doNotSkipEncoded: false
-          },
-          template: undefined,
-          compile: undefined,
-          log: true
-        };
-        (function() {
-          if (typeof globalThis === 'object') {
-            return;
-          }
-          Object.defineProperty(Object.prototype, '__magic__', {
-            get: function() {
-              return this;
-            },
-            configurable: true
-          });
-          __magic__.globalThis = __magic__;
-          delete Object.prototype.__magic__;
-        })();
-        doT.encodeHTMLSource = function(doNotSkipEncoded) {
-          var encodeHTMLRules = {
-            '&': '&#38;',
-            '<': '&#60;',
-            '>': '&#62;',
-            '"': '&#34;',
-            '\'': '&#39;',
-            '/': '&#47;'
-          }, matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g;
-          return function(code) {
-            return code ? code.toString().replace(matchHTML, function(m) {
-              return encodeHTMLRules[m] || m;
-            }) : '';
-          };
-        };
-        if (typeof module !== 'undefined' && module.exports) {
-          module.exports = doT;
-        } else if (typeof define === 'function' && define.amd) {
-          define(function() {
-            return doT;
-          });
-        } else {
-          globalThis.doT = doT;
-        }
-        var startend = {
-          append: {
-            start: '\'+(',
-            end: ')+\'',
-            startencode: '\'+encodeHTML('
-          },
-          split: {
-            start: '\';out+=(',
-            end: ');out+=\'',
-            startencode: '\';out+=encodeHTML('
-          }
-        }, skip = /$^/;
-        function resolveDefs(c, block, def) {
-          return (typeof block === 'string' ? block : block.toString()).replace(c.define || skip, function(m, code, assign, value) {
-            if (code.indexOf('def.') === 0) {
-              code = code.substring(4);
-            }
-            if (!(code in def)) {
-              if (assign === ':') {
-                if (c.defineParams) {
-                  value.replace(c.defineParams, function(m, param, v) {
-                    def[code] = {
-                      arg: param,
-                      text: v
-                    };
-                  });
-                }
-                if (!(code in def)) {
-                  def[code] = value;
-                }
-              } else {
-                new Function('def', 'def[\'' + code + '\']=' + value)(def);
-              }
-            }
-            return '';
-          }).replace(c.use || skip, function(m, code) {
-            if (c.useParams) {
-              code = code.replace(c.useParams, function(m, s, d, param) {
-                if (def[d] && def[d].arg && param) {
-                  var rw = (d + ':' + param).replace(/'|\\/g, '_');
-                  def.__exp = def.__exp || {};
-                  def.__exp[rw] = def[d].text.replace(new RegExp('(^|[^\\w$])' + def[d].arg + '([^\\w$])', 'g'), '$1' + param + '$2');
-                  return s + 'def.__exp[\'' + rw + '\']';
-                }
-              });
-            }
-            var v = new Function('def', 'return ' + code)(def);
-            return v ? resolveDefs(c, v, def) : v;
-          });
-        }
-        function unescape(code) {
-          return code.replace(/\\('|\\)/g, '$1').replace(/[\r\t\n]/g, ' ');
-        }
-        doT.template = function(tmpl, c, def) {
-          c = c || doT.templateSettings;
-          var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, str = c.use || c.define ? resolveDefs(c, tmpl, def || {}) : tmpl;
-          str = ('var out=\'' + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, ' ').replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, '') : str).replace(/'|\\/g, '\\$&').replace(c.interpolate || skip, function(m, code) {
-            return cse.start + unescape(code) + cse.end;
-          }).replace(c.encode || skip, function(m, code) {
-            needhtmlencode = true;
-            return cse.startencode + unescape(code) + cse.end;
-          }).replace(c.conditional || skip, function(m, elsecase, code) {
-            return elsecase ? code ? '\';}else if(' + unescape(code) + '){out+=\'' : '\';}else{out+=\'' : code ? '\';if(' + unescape(code) + '){out+=\'' : '\';}out+=\'';
-          }).replace(c.iterate || skip, function(m, iterate, vname, iname) {
-            if (!iterate) {
-              return '\';} } out+=\'';
-            }
-            sid += 1;
-            indv = iname || 'i' + sid;
-            iterate = unescape(iterate);
-            return '\';var arr' + sid + '=' + iterate + ';if(arr' + sid + '){var ' + vname + ',' + indv + '=-1,l' + sid + '=arr' + sid + '.length-1;while(' + indv + '<l' + sid + '){' + vname + '=arr' + sid + '[' + indv + '+=1];out+=\'';
-          }).replace(c.evaluate || skip, function(m, code) {
-            return '\';' + unescape(code) + 'out+=\'';
-          }) + '\';return out;').replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r').replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, '');
-          if (needhtmlencode) {
-            if (!c.selfcontained && globalThis && !globalThis._encodeHTML) {
-              globalThis._encodeHTML = doT.encodeHTMLSource(c.doNotSkipEncoded);
-            }
-            str = 'var encodeHTML = typeof _encodeHTML !== \'undefined\' ? _encodeHTML : (' + doT.encodeHTMLSource.toString() + '(' + (c.doNotSkipEncoded || '') + '));' + str;
-          }
-          try {
-            return new Function(c.varname, str);
-          } catch (e) {
-            if (typeof console !== 'undefined') {
-              console.log('Could not create a template function: ' + str);
-            }
-            throw e;
-          }
-        };
-        doT.compile = function(tmpl, def) {
-          return doT.template(tmpl, null, def);
-        };
-      })();
-    }, {} ],
-    3: [ function(_dereq_, module, exports) {
-      module.exports = _dereq_('./lib/axios');
-    }, {
-      './lib/axios': 5
-    } ],
-    4: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      var settle = _dereq_('./../core/settle');
-      var buildURL = _dereq_('./../helpers/buildURL');
-      var parseHeaders = _dereq_('./../helpers/parseHeaders');
-      var isURLSameOrigin = _dereq_('./../helpers/isURLSameOrigin');
-      var createError = _dereq_('../core/createError');
-      module.exports = function xhrAdapter(config) {
-        return new Promise(function dispatchXhrRequest(resolve, reject) {
-          var requestData = config.data;
-          var requestHeaders = config.headers;
-          if (utils.isFormData(requestData)) {
-            delete requestHeaders['Content-Type'];
-          }
-          var request = new XMLHttpRequest();
-          if (config.auth) {
-            var username = config.auth.username || '';
-            var password = config.auth.password || '';
-            requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
-          }
-          request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
-          request.timeout = config.timeout;
-          request.onreadystatechange = function handleLoad() {
-            if (!request || request.readyState !== 4) {
-              return;
-            }
-            if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
-              return;
-            }
-            var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
-            var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
-            var response = {
-              data: responseData,
-              status: request.status,
-              statusText: request.statusText,
-              headers: responseHeaders,
-              config: config,
-              request: request
-            };
-            settle(resolve, reject, response);
-            request = null;
-          };
-          request.onabort = function handleAbort() {
-            if (!request) {
-              return;
-            }
-            reject(createError('Request aborted', config, 'ECONNABORTED', request));
-            request = null;
-          };
-          request.onerror = function handleError() {
-            reject(createError('Network Error', config, null, request));
-            request = null;
-          };
-          request.ontimeout = function handleTimeout() {
-            reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request));
-            request = null;
-          };
-          if (utils.isStandardBrowserEnv()) {
-            var cookies = _dereq_('./../helpers/cookies');
-            var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;
-            if (xsrfValue) {
-              requestHeaders[config.xsrfHeaderName] = xsrfValue;
-            }
-          }
-          if ('setRequestHeader' in request) {
-            utils.forEach(requestHeaders, function setRequestHeader(val, key) {
-              if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
-                delete requestHeaders[key];
-              } else {
-                request.setRequestHeader(key, val);
-              }
-            });
-          }
-          if (config.withCredentials) {
-            request.withCredentials = true;
-          }
-          if (config.responseType) {
-            try {
-              request.responseType = config.responseType;
-            } catch (e) {
-              if (config.responseType !== 'json') {
-                throw e;
-              }
-            }
-          }
-          if (typeof config.onDownloadProgress === 'function') {
-            request.addEventListener('progress', config.onDownloadProgress);
-          }
-          if (typeof config.onUploadProgress === 'function' && request.upload) {
-            request.upload.addEventListener('progress', config.onUploadProgress);
-          }
-          if (config.cancelToken) {
-            config.cancelToken.promise.then(function onCanceled(cancel) {
-              if (!request) {
-                return;
-              }
-              request.abort();
-              reject(cancel);
-              request = null;
-            });
-          }
-          if (requestData === undefined) {
-            requestData = null;
-          }
-          request.send(requestData);
-        });
-      };
-    }, {
-      '../core/createError': 11,
-      './../core/settle': 15,
-      './../helpers/buildURL': 19,
-      './../helpers/cookies': 21,
-      './../helpers/isURLSameOrigin': 23,
-      './../helpers/parseHeaders': 25,
-      './../utils': 27
-    } ],
-    5: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./utils');
-      var bind = _dereq_('./helpers/bind');
-      var Axios = _dereq_('./core/Axios');
-      var mergeConfig = _dereq_('./core/mergeConfig');
-      var defaults = _dereq_('./defaults');
-      function createInstance(defaultConfig) {
-        var context = new Axios(defaultConfig);
-        var instance = bind(Axios.prototype.request, context);
-        utils.extend(instance, Axios.prototype, context);
-        utils.extend(instance, context);
-        return instance;
-      }
-      var axios = createInstance(defaults);
-      axios.Axios = Axios;
-      axios.create = function create(instanceConfig) {
-        return createInstance(mergeConfig(axios.defaults, instanceConfig));
-      };
-      axios.Cancel = _dereq_('./cancel/Cancel');
-      axios.CancelToken = _dereq_('./cancel/CancelToken');
-      axios.isCancel = _dereq_('./cancel/isCancel');
-      axios.all = function all(promises) {
-        return Promise.all(promises);
-      };
-      axios.spread = _dereq_('./helpers/spread');
-      module.exports = axios;
-      module.exports.default = axios;
-    }, {
-      './cancel/Cancel': 6,
-      './cancel/CancelToken': 7,
-      './cancel/isCancel': 8,
-      './core/Axios': 9,
-      './core/mergeConfig': 14,
-      './defaults': 17,
-      './helpers/bind': 18,
-      './helpers/spread': 26,
-      './utils': 27
-    } ],
-    6: [ function(_dereq_, module, exports) {
-      'use strict';
-      function Cancel(message) {
-        this.message = message;
-      }
-      Cancel.prototype.toString = function toString() {
-        return 'Cancel' + (this.message ? ': ' + this.message : '');
-      };
-      Cancel.prototype.__CANCEL__ = true;
-      module.exports = Cancel;
-    }, {} ],
-    7: [ function(_dereq_, module, exports) {
-      'use strict';
-      var Cancel = _dereq_('./Cancel');
-      function CancelToken(executor) {
-        if (typeof executor !== 'function') {
-          throw new TypeError('executor must be a function.');
-        }
-        var resolvePromise;
-        this.promise = new Promise(function promiseExecutor(resolve) {
-          resolvePromise = resolve;
-        });
-        var token = this;
-        executor(function cancel(message) {
-          if (token.reason) {
-            return;
-          }
-          token.reason = new Cancel(message);
-          resolvePromise(token.reason);
-        });
-      }
-      CancelToken.prototype.throwIfRequested = function throwIfRequested() {
-        if (this.reason) {
-          throw this.reason;
-        }
-      };
-      CancelToken.source = function source() {
-        var cancel;
-        var token = new CancelToken(function executor(c) {
-          cancel = c;
-        });
-        return {
-          token: token,
-          cancel: cancel
-        };
-      };
-      module.exports = CancelToken;
-    }, {
-      './Cancel': 6
-    } ],
-    8: [ function(_dereq_, module, exports) {
-      'use strict';
-      module.exports = function isCancel(value) {
-        return !!(value && value.__CANCEL__);
-      };
-    }, {} ],
-    9: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      var buildURL = _dereq_('../helpers/buildURL');
-      var InterceptorManager = _dereq_('./InterceptorManager');
-      var dispatchRequest = _dereq_('./dispatchRequest');
-      var mergeConfig = _dereq_('./mergeConfig');
-      function Axios(instanceConfig) {
-        this.defaults = instanceConfig;
-        this.interceptors = {
-          request: new InterceptorManager(),
-          response: new InterceptorManager()
-        };
-      }
-      Axios.prototype.request = function request(config) {
-        if (typeof config === 'string') {
-          config = arguments[1] || {};
-          config.url = arguments[0];
-        } else {
-          config = config || {};
-        }
-        config = mergeConfig(this.defaults, config);
-        config.method = config.method ? config.method.toLowerCase() : 'get';
-        var chain = [ dispatchRequest, undefined ];
-        var promise = Promise.resolve(config);
-        this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
-          chain.unshift(interceptor.fulfilled, interceptor.rejected);
-        });
-        this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
-          chain.push(interceptor.fulfilled, interceptor.rejected);
-        });
-        while (chain.length) {
-          promise = promise.then(chain.shift(), chain.shift());
-        }
-        return promise;
-      };
-      Axios.prototype.getUri = function getUri(config) {
-        config = mergeConfig(this.defaults, config);
-        return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
-      };
-      utils.forEach([ 'delete', 'get', 'head', 'options' ], function forEachMethodNoData(method) {
-        Axios.prototype[method] = function(url, config) {
-          return this.request(utils.merge(config || {}, {
-            method: method,
-            url: url
-          }));
-        };
-      });
-      utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) {
-        Axios.prototype[method] = function(url, data, config) {
-          return this.request(utils.merge(config || {}, {
-            method: method,
-            url: url,
-            data: data
-          }));
-        };
-      });
-      module.exports = Axios;
-    }, {
-      '../helpers/buildURL': 19,
-      './../utils': 27,
-      './InterceptorManager': 10,
-      './dispatchRequest': 12,
-      './mergeConfig': 14
-    } ],
-    10: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      function InterceptorManager() {
-        this.handlers = [];
-      }
-      InterceptorManager.prototype.use = function use(fulfilled, rejected) {
-        this.handlers.push({
-          fulfilled: fulfilled,
-          rejected: rejected
-        });
-        return this.handlers.length - 1;
-      };
-      InterceptorManager.prototype.eject = function eject(id) {
-        if (this.handlers[id]) {
-          this.handlers[id] = null;
-        }
-      };
-      InterceptorManager.prototype.forEach = function forEach(fn) {
-        utils.forEach(this.handlers, function forEachHandler(h) {
-          if (h !== null) {
-            fn(h);
-          }
-        });
-      };
-      module.exports = InterceptorManager;
-    }, {
-      './../utils': 27
-    } ],
-    11: [ function(_dereq_, module, exports) {
-      'use strict';
-      var enhanceError = _dereq_('./enhanceError');
-      module.exports = function createError(message, config, code, request, response) {
-        var error = new Error(message);
-        return enhanceError(error, config, code, request, response);
-      };
-    }, {
-      './enhanceError': 13
-    } ],
-    12: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      var transformData = _dereq_('./transformData');
-      var isCancel = _dereq_('../cancel/isCancel');
-      var defaults = _dereq_('../defaults');
-      var isAbsoluteURL = _dereq_('./../helpers/isAbsoluteURL');
-      var combineURLs = _dereq_('./../helpers/combineURLs');
-      function throwIfCancellationRequested(config) {
-        if (config.cancelToken) {
-          config.cancelToken.throwIfRequested();
-        }
-      }
-      module.exports = function dispatchRequest(config) {
-        throwIfCancellationRequested(config);
-        if (config.baseURL && !isAbsoluteURL(config.url)) {
-          config.url = combineURLs(config.baseURL, config.url);
-        }
-        config.headers = config.headers || {};
-        config.data = transformData(config.data, config.headers, config.transformRequest);
-        config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});
-        utils.forEach([ 'delete', 'get', 'head', 'post', 'put', 'patch', 'common' ], function cleanHeaderConfig(method) {
-          delete config.headers[method];
-        });
-        var adapter = config.adapter || defaults.adapter;
-        return adapter(config).then(function onAdapterResolution(response) {
-          throwIfCancellationRequested(config);
-          response.data = transformData(response.data, response.headers, config.transformResponse);
-          return response;
-        }, function onAdapterRejection(reason) {
-          if (!isCancel(reason)) {
-            throwIfCancellationRequested(config);
-            if (reason && reason.response) {
-              reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);
-            }
-          }
-          return Promise.reject(reason);
-        });
-      };
-    }, {
-      '../cancel/isCancel': 8,
-      '../defaults': 17,
-      './../helpers/combineURLs': 20,
-      './../helpers/isAbsoluteURL': 22,
-      './../utils': 27,
-      './transformData': 16
-    } ],
-    13: [ function(_dereq_, module, exports) {
-      'use strict';
-      module.exports = function enhanceError(error, config, code, request, response) {
-        error.config = config;
-        if (code) {
-          error.code = code;
-        }
-        error.request = request;
-        error.response = response;
-        error.isAxiosError = true;
-        error.toJSON = function() {
-          return {
-            message: this.message,
-            name: this.name,
-            description: this.description,
-            number: this.number,
-            fileName: this.fileName,
-            lineNumber: this.lineNumber,
-            columnNumber: this.columnNumber,
-            stack: this.stack,
-            config: this.config,
-            code: this.code
-          };
-        };
-        return error;
-      };
-    }, {} ],
-    14: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('../utils');
-      module.exports = function mergeConfig(config1, config2) {
-        config2 = config2 || {};
-        var config = {};
-        utils.forEach([ 'url', 'method', 'params', 'data' ], function valueFromConfig2(prop) {
-          if (typeof config2[prop] !== 'undefined') {
-            config[prop] = config2[prop];
-          }
-        });
-        utils.forEach([ 'headers', 'auth', 'proxy' ], function mergeDeepProperties(prop) {
-          if (utils.isObject(config2[prop])) {
-            config[prop] = utils.deepMerge(config1[prop], config2[prop]);
-          } else if (typeof config2[prop] !== 'undefined') {
-            config[prop] = config2[prop];
-          } else if (utils.isObject(config1[prop])) {
-            config[prop] = utils.deepMerge(config1[prop]);
-          } else if (typeof config1[prop] !== 'undefined') {
-            config[prop] = config1[prop];
-          }
-        });
-        utils.forEach([ 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath' ], function defaultToConfig2(prop) {
-          if (typeof config2[prop] !== 'undefined') {
-            config[prop] = config2[prop];
-          } else if (typeof config1[prop] !== 'undefined') {
-            config[prop] = config1[prop];
-          }
-        });
-        return config;
-      };
-    }, {
-      '../utils': 27
-    } ],
-    15: [ function(_dereq_, module, exports) {
-      'use strict';
-      var createError = _dereq_('./createError');
-      module.exports = function settle(resolve, reject, response) {
-        var validateStatus = response.config.validateStatus;
-        if (!validateStatus || validateStatus(response.status)) {
-          resolve(response);
-        } else {
-          reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));
-        }
-      };
-    }, {
-      './createError': 11
-    } ],
-    16: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      module.exports = function transformData(data, headers, fns) {
-        utils.forEach(fns, function transform(fn) {
-          data = fn(data, headers);
-        });
-        return data;
-      };
-    }, {
-      './../utils': 27
-    } ],
-    17: [ function(_dereq_, module, exports) {
-      (function(process) {
-        'use strict';
-        var utils = _dereq_('./utils');
-        var normalizeHeaderName = _dereq_('./helpers/normalizeHeaderName');
-        var DEFAULT_CONTENT_TYPE = {
-          'Content-Type': 'application/x-www-form-urlencoded'
-        };
-        function setContentTypeIfUnset(headers, value) {
-          if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
-            headers['Content-Type'] = value;
-          }
-        }
-        function getDefaultAdapter() {
-          var adapter;
-          if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
-            adapter = _dereq_('./adapters/http');
-          } else if (typeof XMLHttpRequest !== 'undefined') {
-            adapter = _dereq_('./adapters/xhr');
-          }
-          return adapter;
-        }
-        var defaults = {
-          adapter: getDefaultAdapter(),
-          transformRequest: [ function transformRequest(data, headers) {
-            normalizeHeaderName(headers, 'Accept');
-            normalizeHeaderName(headers, 'Content-Type');
-            if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {
-              return data;
-            }
-            if (utils.isArrayBufferView(data)) {
-              return data.buffer;
-            }
-            if (utils.isURLSearchParams(data)) {
-              setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
-              return data.toString();
-            }
-            if (utils.isObject(data)) {
-              setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
-              return JSON.stringify(data);
-            }
-            return data;
-          } ],
-          transformResponse: [ function transformResponse(data) {
-            if (typeof data === 'string') {
-              try {
-                data = JSON.parse(data);
-              } catch (e) {}
-            }
-            return data;
-          } ],
-          timeout: 0,
-          xsrfCookieName: 'XSRF-TOKEN',
-          xsrfHeaderName: 'X-XSRF-TOKEN',
-          maxContentLength: -1,
-          validateStatus: function validateStatus(status) {
-            return status >= 200 && status < 300;
-          }
-        };
-        defaults.headers = {
-          common: {
-            Accept: 'application/json, text/plain, */*'
-          }
-        };
-        utils.forEach([ 'delete', 'get', 'head' ], function forEachMethodNoData(method) {
-          defaults.headers[method] = {};
-        });
-        utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) {
-          defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
-        });
-        module.exports = defaults;
-      }).call(this, _dereq_('_process'));
-    }, {
-      './adapters/http': 4,
-      './adapters/xhr': 4,
-      './helpers/normalizeHeaderName': 24,
-      './utils': 27,
-      _process: 33
-    } ],
-    18: [ function(_dereq_, module, exports) {
-      'use strict';
-      module.exports = function bind(fn, thisArg) {
-        return function wrap() {
-          var args = new Array(arguments.length);
-          for (var i = 0; i < args.length; i++) {
-            args[i] = arguments[i];
-          }
-          return fn.apply(thisArg, args);
-        };
-      };
-    }, {} ],
-    19: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      function encode(val) {
-        return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');
-      }
-      module.exports = function buildURL(url, params, paramsSerializer) {
-        if (!params) {
-          return url;
-        }
-        var serializedParams;
-        if (paramsSerializer) {
-          serializedParams = paramsSerializer(params);
-        } else if (utils.isURLSearchParams(params)) {
-          serializedParams = params.toString();
-        } else {
-          var parts = [];
-          utils.forEach(params, function serialize(val, key) {
-            if (val === null || typeof val === 'undefined') {
-              return;
-            }
-            if (utils.isArray(val)) {
-              key = key + '[]';
-            } else {
-              val = [ val ];
-            }
-            utils.forEach(val, function parseValue(v) {
-              if (utils.isDate(v)) {
-                v = v.toISOString();
-              } else if (utils.isObject(v)) {
-                v = JSON.stringify(v);
-              }
-              parts.push(encode(key) + '=' + encode(v));
-            });
-          });
-          serializedParams = parts.join('&');
-        }
-        if (serializedParams) {
-          var hashmarkIndex = url.indexOf('#');
-          if (hashmarkIndex !== -1) {
-            url = url.slice(0, hashmarkIndex);
-          }
-          url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
-        }
-        return url;
-      };
-    }, {
-      './../utils': 27
-    } ],
-    20: [ function(_dereq_, module, exports) {
-      'use strict';
-      module.exports = function combineURLs(baseURL, relativeURL) {
-        return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL;
-      };
-    }, {} ],
-    21: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {
-        return {
-          write: function write(name, value, expires, path, domain, secure) {
-            var cookie = [];
-            cookie.push(name + '=' + encodeURIComponent(value));
-            if (utils.isNumber(expires)) {
-              cookie.push('expires=' + new Date(expires).toGMTString());
-            }
-            if (utils.isString(path)) {
-              cookie.push('path=' + path);
-            }
-            if (utils.isString(domain)) {
-              cookie.push('domain=' + domain);
-            }
-            if (secure === true) {
-              cookie.push('secure');
-            }
-            document.cookie = cookie.join('; ');
-          },
-          read: function read(name) {
-            var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
-            return match ? decodeURIComponent(match[3]) : null;
-          },
-          remove: function remove(name) {
-            this.write(name, '', Date.now() - 864e5);
-          }
-        };
-      }() : function nonStandardBrowserEnv() {
-        return {
-          write: function write() {},
-          read: function read() {
-            return null;
-          },
-          remove: function remove() {}
-        };
-      }();
-    }, {
-      './../utils': 27
-    } ],
-    22: [ function(_dereq_, module, exports) {
-      'use strict';
-      module.exports = function isAbsoluteURL(url) {
-        return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
-      };
-    }, {} ],
-    23: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {
-        var msie = /(msie|trident)/i.test(navigator.userAgent);
-        var urlParsingNode = document.createElement('a');
-        var originURL;
-        function resolveURL(url) {
-          var href = url;
-          if (msie) {
-            urlParsingNode.setAttribute('href', href);
-            href = urlParsingNode.href;
-          }
-          urlParsingNode.setAttribute('href', href);
-          return {
-            href: urlParsingNode.href,
-            protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
-            host: urlParsingNode.host,
-            search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
-            hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
-            hostname: urlParsingNode.hostname,
-            port: urlParsingNode.port,
-            pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname
-          };
-        }
-        originURL = resolveURL(window.location.href);
-        return function isURLSameOrigin(requestURL) {
-          var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;
-          return parsed.protocol === originURL.protocol && parsed.host === originURL.host;
-        };
-      }() : function nonStandardBrowserEnv() {
-        return function isURLSameOrigin() {
-          return true;
-        };
-      }();
-    }, {
-      './../utils': 27
-    } ],
-    24: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('../utils');
-      module.exports = function normalizeHeaderName(headers, normalizedName) {
-        utils.forEach(headers, function processHeader(value, name) {
-          if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
-            headers[normalizedName] = value;
-            delete headers[name];
-          }
-        });
-      };
-    }, {
-      '../utils': 27
-    } ],
-    25: [ function(_dereq_, module, exports) {
-      'use strict';
-      var utils = _dereq_('./../utils');
-      var ignoreDuplicateOf = [ 'age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent' ];
-      module.exports = function parseHeaders(headers) {
-        var parsed = {};
-        var key;
-        var val;
-        var i;
-        if (!headers) {
-          return parsed;
-        }
-        utils.forEach(headers.split('\n'), function parser(line) {
-          i = line.indexOf(':');
-          key = utils.trim(line.substr(0, i)).toLowerCase();
-          val = utils.trim(line.substr(i + 1));
-          if (key) {
-            if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
-              return;
-            }
-            if (key === 'set-cookie') {
-              parsed[key] = (parsed[key] ? parsed[key] : []).concat([ val ]);
-            } else {
-              parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
-            }
-          }
-        });
-        return parsed;
-      };
-    }, {
-      './../utils': 27
-    } ],
-    26: [ function(_dereq_, module, exports) {
-      'use strict';
-      module.exports = function spread(callback) {
-        return function wrap(arr) {
-          return callback.apply(null, arr);
-        };
-      };
-    }, {} ],
-    27: [ function(_dereq_, module, exports) {
-      'use strict';
-      var bind = _dereq_('./helpers/bind');
-      var isBuffer = _dereq_('is-buffer');
-      var toString = Object.prototype.toString;
-      function isArray(val) {
-        return toString.call(val) === '[object Array]';
-      }
-      function isArrayBuffer(val) {
-        return toString.call(val) === '[object ArrayBuffer]';
-      }
-      function isFormData(val) {
-        return typeof FormData !== 'undefined' && val instanceof FormData;
-      }
-      function isArrayBufferView(val) {
-        var result;
-        if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {
-          result = ArrayBuffer.isView(val);
-        } else {
-          result = val && val.buffer && val.buffer instanceof ArrayBuffer;
-        }
-        return result;
-      }
-      function isString(val) {
-        return typeof val === 'string';
-      }
-      function isNumber(val) {
-        return typeof val === 'number';
-      }
-      function isUndefined(val) {
-        return typeof val === 'undefined';
-      }
-      function isObject(val) {
-        return val !== null && typeof val === 'object';
-      }
-      function isDate(val) {
-        return toString.call(val) === '[object Date]';
-      }
-      function isFile(val) {
-        return toString.call(val) === '[object File]';
-      }
-      function isBlob(val) {
-        return toString.call(val) === '[object Blob]';
-      }
-      function isFunction(val) {
-        return toString.call(val) === '[object Function]';
-      }
-      function isStream(val) {
-        return isObject(val) && isFunction(val.pipe);
-      }
-      function isURLSearchParams(val) {
-        return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
-      }
-      function trim(str) {
-        return str.replace(/^\s*/, '').replace(/\s*$/, '');
-      }
-      function isStandardBrowserEnv() {
-        if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {
-          return false;
-        }
-        return typeof window !== 'undefined' && typeof document !== 'undefined';
-      }
-      function forEach(obj, fn) {
-        if (obj === null || typeof obj === 'undefined') {
-          return;
-        }
-        if (typeof obj !== 'object') {
-          obj = [ obj ];
-        }
-        if (isArray(obj)) {
-          for (var i = 0, l = obj.length; i < l; i++) {
-            fn.call(null, obj[i], i, obj);
-          }
-        } else {
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) {
-              fn.call(null, obj[key], key, obj);
-            }
-          }
-        }
-      }
-      function merge() {
-        var result = {};
-        function assignValue(val, key) {
-          if (typeof result[key] === 'object' && typeof val === 'object') {
-            result[key] = merge(result[key], val);
-          } else {
-            result[key] = val;
-          }
-        }
-        for (var i = 0, l = arguments.length; i < l; i++) {
-          forEach(arguments[i], assignValue);
-        }
-        return result;
-      }
-      function deepMerge() {
-        var result = {};
-        function assignValue(val, key) {
-          if (typeof result[key] === 'object' && typeof val === 'object') {
-            result[key] = deepMerge(result[key], val);
-          } else if (typeof val === 'object') {
-            result[key] = deepMerge({}, val);
-          } else {
-            result[key] = val;
-          }
-        }
-        for (var i = 0, l = arguments.length; i < l; i++) {
-          forEach(arguments[i], assignValue);
-        }
-        return result;
-      }
-      function extend(a, b, thisArg) {
-        forEach(b, function assignValue(val, key) {
-          if (thisArg && typeof val === 'function') {
-            a[key] = bind(val, thisArg);
-          } else {
-            a[key] = val;
-          }
-        });
-        return a;
-      }
-      module.exports = {
-        isArray: isArray,
-        isArrayBuffer: isArrayBuffer,
-        isBuffer: isBuffer,
-        isFormData: isFormData,
-        isArrayBufferView: isArrayBufferView,
-        isString: isString,
-        isNumber: isNumber,
-        isObject: isObject,
-        isUndefined: isUndefined,
-        isDate: isDate,
-        isFile: isFile,
-        isBlob: isBlob,
-        isFunction: isFunction,
-        isStream: isStream,
-        isURLSearchParams: isURLSearchParams,
-        isStandardBrowserEnv: isStandardBrowserEnv,
-        forEach: forEach,
-        merge: merge,
-        deepMerge: deepMerge,
-        extend: extend,
-        trim: trim
-      };
-    }, {
-      './helpers/bind': 18,
-      'is-buffer': 28
-    } ],
-    28: [ function(_dereq_, module, exports) {
-      module.exports = function isBuffer(obj) {
-        return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);
-      };
-    }, {} ],
-    29: [ function(_dereq_, module, exports) {
-      module.exports = {
-        CssSelectorParser: _dereq_('./lib/css-selector-parser.js').CssSelectorParser
-      };
-    }, {
-      './lib/css-selector-parser.js': 30
-    } ],
-    30: [ function(_dereq_, module, exports) {
-      function CssSelectorParser() {
-        this.pseudos = {};
-        this.attrEqualityMods = {};
-        this.ruleNestingOperators = {};
-        this.substitutesEnabled = false;
-      }
-      CssSelectorParser.prototype.registerSelectorPseudos = function(name) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          name = arguments[j];
-          this.pseudos[name] = 'selector';
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.unregisterSelectorPseudos = function(name) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          name = arguments[j];
-          delete this.pseudos[name];
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.registerNumericPseudos = function(name) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          name = arguments[j];
-          this.pseudos[name] = 'numeric';
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.unregisterNumericPseudos = function(name) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          name = arguments[j];
-          delete this.pseudos[name];
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.registerNestingOperators = function(operator) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          operator = arguments[j];
-          this.ruleNestingOperators[operator] = true;
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.unregisterNestingOperators = function(operator) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          operator = arguments[j];
-          delete this.ruleNestingOperators[operator];
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.registerAttrEqualityMods = function(mod) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          mod = arguments[j];
-          this.attrEqualityMods[mod] = true;
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.unregisterAttrEqualityMods = function(mod) {
-        for (var j = 0, len = arguments.length; j < len; j++) {
-          mod = arguments[j];
-          delete this.attrEqualityMods[mod];
-        }
-        return this;
-      };
-      CssSelectorParser.prototype.enableSubstitutes = function() {
-        this.substitutesEnabled = true;
-        return this;
-      };
-      CssSelectorParser.prototype.disableSubstitutes = function() {
-        this.substitutesEnabled = false;
-        return this;
-      };
-      function isIdentStart(c) {
-        return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c === '-' || c === '_';
-      }
-      function isIdent(c) {
-        return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c === '-' || c === '_';
-      }
-      function isHex(c) {
-        return c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= '0' && c <= '9';
-      }
-      function isDecimal(c) {
-        return c >= '0' && c <= '9';
-      }
-      function isAttrMatchOperator(chr) {
-        return chr === '=' || chr === '^' || chr === '$' || chr === '*' || chr === '~';
-      }
-      var identSpecialChars = {
-        '!': true,
-        '"': true,
-        '#': true,
-        $: true,
-        '%': true,
-        '&': true,
-        '\'': true,
-        '(': true,
-        ')': true,
-        '*': true,
-        '+': true,
-        ',': true,
-        '.': true,
-        '/': true,
-        ';': true,
-        '<': true,
-        '=': true,
-        '>': true,
-        '?': true,
-        '@': true,
-        '[': true,
-        '\\': true,
-        ']': true,
-        '^': true,
-        '`': true,
-        '{': true,
-        '|': true,
-        '}': true,
-        '~': true
-      };
-      var strReplacementsRev = {
-        '\n': '\\n',
-        '\r': '\\r',
-        '\t': '\\t',
-        '\f': '\\f',
-        '\v': '\\v'
-      };
-      var singleQuoteEscapeChars = {
-        n: '\n',
-        r: '\r',
-        t: '\t',
-        f: '\f',
-        '\\': '\\',
-        '\'': '\''
-      };
-      var doubleQuotesEscapeChars = {
-        n: '\n',
-        r: '\r',
-        t: '\t',
-        f: '\f',
-        '\\': '\\',
-        '"': '"'
-      };
-      function ParseContext(str, pos, pseudos, attrEqualityMods, ruleNestingOperators, substitutesEnabled) {
-        var chr, getIdent, getStr, l, skipWhitespace;
-        l = str.length;
-        chr = null;
-        getStr = function(quote, escapeTable) {
-          var esc, hex, result;
-          result = '';
-          pos++;
-          chr = str.charAt(pos);
-          while (pos < l) {
-            if (chr === quote) {
-              pos++;
-              return result;
-            } else if (chr === '\\') {
-              pos++;
-              chr = str.charAt(pos);
-              if (chr === quote) {
-                result += quote;
-              } else if (esc = escapeTable[chr]) {
-                result += esc;
-              } else if (isHex(chr)) {
-                hex = chr;
-                pos++;
-                chr = str.charAt(pos);
-                while (isHex(chr)) {
-                  hex += chr;
-                  pos++;
-                  chr = str.charAt(pos);
-                }
-                if (chr === ' ') {
-                  pos++;
-                  chr = str.charAt(pos);
-                }
-                result += String.fromCharCode(parseInt(hex, 16));
-                continue;
-              } else {
-                result += chr;
-              }
-            } else {
-              result += chr;
-            }
-            pos++;
-            chr = str.charAt(pos);
-          }
-          return result;
-        };
-        getIdent = function() {
-          var result = '';
-          chr = str.charAt(pos);
-          while (pos < l) {
-            if (isIdent(chr)) {
-              result += chr;
-            } else if (chr === '\\') {
-              pos++;
-              if (pos >= l) {
-                throw Error('Expected symbol but end of file reached.');
-              }
-              chr = str.charAt(pos);
-              if (identSpecialChars[chr]) {
-                result += chr;
-              } else if (isHex(chr)) {
-                var hex = chr;
-                pos++;
-                chr = str.charAt(pos);
-                while (isHex(chr)) {
-                  hex += chr;
-                  pos++;
-                  chr = str.charAt(pos);
-                }
-                if (chr === ' ') {
-                  pos++;
-                  chr = str.charAt(pos);
-                }
-                result += String.fromCharCode(parseInt(hex, 16));
-                continue;
-              } else {
-                result += chr;
-              }
-            } else {
-              return result;
-            }
-            pos++;
-            chr = str.charAt(pos);
-          }
-          return result;
-        };
-        skipWhitespace = function() {
-          chr = str.charAt(pos);
-          var result = false;
-          while (chr === ' ' || chr === '\t' || chr === '\n' || chr === '\r' || chr === '\f') {
-            result = true;
-            pos++;
-            chr = str.charAt(pos);
-          }
-          return result;
-        };
-        this.parse = function() {
-          var res = this.parseSelector();
-          if (pos < l) {
-            throw Error('Rule expected but "' + str.charAt(pos) + '" found.');
-          }
-          return res;
-        };
-        this.parseSelector = function() {
-          var res;
-          var selector = res = this.parseSingleSelector();
-          chr = str.charAt(pos);
-          while (chr === ',') {
-            pos++;
-            skipWhitespace();
-            if (res.type !== 'selectors') {
-              res = {
-                type: 'selectors',
-                selectors: [ selector ]
-              };
-            }
-            selector = this.parseSingleSelector();
-            if (!selector) {
-              throw Error('Rule expected after ",".');
-            }
-            res.selectors.push(selector);
-          }
-          return res;
-        };
-        this.parseSingleSelector = function() {
-          skipWhitespace();
-          var selector = {
-            type: 'ruleSet'
-          };
-          var rule = this.parseRule();
-          if (!rule) {
-            return null;
-          }
-          var currentRule = selector;
-          while (rule) {
-            rule.type = 'rule';
-            currentRule.rule = rule;
-            currentRule = rule;
-            skipWhitespace();
-            chr = str.charAt(pos);
-            if (pos >= l || chr === ',' || chr === ')') {
-              break;
-            }
-            if (ruleNestingOperators[chr]) {
-              var op = chr;
-              pos++;
-              skipWhitespace();
-              rule = this.parseRule();
-              if (!rule) {
-                throw Error('Rule expected after "' + op + '".');
-              }
-              rule.nestingOperator = op;
-            } else {
-              rule = this.parseRule();
-              if (rule) {
-                rule.nestingOperator = null;
-              }
-            }
-          }
-          return selector;
-        };
-        this.parseRule = function() {
-          var rule = null;
-          while (pos < l) {
-            chr = str.charAt(pos);
-            if (chr === '*') {
-              pos++;
-              (rule = rule || {}).tagName = '*';
-            } else if (isIdentStart(chr) || chr === '\\') {
-              (rule = rule || {}).tagName = getIdent();
-            } else if (chr === '.') {
-              pos++;
-              rule = rule || {};
-              (rule.classNames = rule.classNames || []).push(getIdent());
-            } else if (chr === '#') {
-              pos++;
-              (rule = rule || {}).id = getIdent();
-            } else if (chr === '[') {
-              pos++;
-              skipWhitespace();
-              var attr = {
-                name: getIdent()
-              };
-              skipWhitespace();
-              if (chr === ']') {
-                pos++;
-              } else {
-                var operator = '';
-                if (attrEqualityMods[chr]) {
-                  operator = chr;
-                  pos++;
-                  chr = str.charAt(pos);
-                }
-                if (pos >= l) {
-                  throw Error('Expected "=" but end of file reached.');
-                }
-                if (chr !== '=') {
-                  throw Error('Expected "=" but "' + chr + '" found.');
-                }
-                attr.operator = operator + '=';
-                pos++;
-                skipWhitespace();
-                var attrValue = '';
-                attr.valueType = 'string';
-                if (chr === '"') {
-                  attrValue = getStr('"', doubleQuotesEscapeChars);
-                } else if (chr === '\'') {
-                  attrValue = getStr('\'', singleQuoteEscapeChars);
-                } else if (substitutesEnabled && chr === '$') {
-                  pos++;
-                  attrValue = getIdent();
-                  attr.valueType = 'substitute';
-                } else {
-                  while (pos < l) {
-                    if (chr === ']') {
-                      break;
-                    }
-                    attrValue += chr;
-                    pos++;
-                    chr = str.charAt(pos);
-                  }
-                  attrValue = attrValue.trim();
-                }
-                skipWhitespace();
-                if (pos >= l) {
-                  throw Error('Expected "]" but end of file reached.');
-                }
-                if (chr !== ']') {
-                  throw Error('Expected "]" but "' + chr + '" found.');
-                }
-                pos++;
-                attr.value = attrValue;
-              }
-              rule = rule || {};
-              (rule.attrs = rule.attrs || []).push(attr);
-            } else if (chr === ':') {
-              pos++;
-              var pseudoName = getIdent();
-              var pseudo = {
-                name: pseudoName
-              };
-              if (chr === '(') {
-                pos++;
-                var value = '';
-                skipWhitespace();
-                if (pseudos[pseudoName] === 'selector') {
-                  pseudo.valueType = 'selector';
-                  value = this.parseSelector();
-                } else {
-                  pseudo.valueType = pseudos[pseudoName] || 'string';
-                  if (chr === '"') {
-                    value = getStr('"', doubleQuotesEscapeChars);
-                  } else if (chr === '\'') {
-                    value = getStr('\'', singleQuoteEscapeChars);
-                  } else if (substitutesEnabled && chr === '$') {
-                    pos++;
-                    value = getIdent();
-                    pseudo.valueType = 'substitute';
-                  } else {
-                    while (pos < l) {
-                      if (chr === ')') {
-                        break;
-                      }
-                      value += chr;
-                      pos++;
-                      chr = str.charAt(pos);
-                    }
-                    value = value.trim();
-                  }
-                  skipWhitespace();
-                }
-                if (pos >= l) {
-                  throw Error('Expected ")" but end of file reached.');
-                }
-                if (chr !== ')') {
-                  throw Error('Expected ")" but "' + chr + '" found.');
-                }
-                pos++;
-                pseudo.value = value;
-              }
-              rule = rule || {};
-              (rule.pseudos = rule.pseudos || []).push(pseudo);
-            } else {
-              break;
-            }
-          }
-          return rule;
-        };
-        return this;
-      }
-      CssSelectorParser.prototype.parse = function(str) {
-        var context = new ParseContext(str, 0, this.pseudos, this.attrEqualityMods, this.ruleNestingOperators, this.substitutesEnabled);
-        return context.parse();
-      };
-      CssSelectorParser.prototype.escapeIdentifier = function(s) {
-        var result = '';
-        var i = 0;
-        var len = s.length;
-        while (i < len) {
-          var chr = s.charAt(i);
-          if (identSpecialChars[chr]) {
-            result += '\\' + chr;
-          } else {
-            if (!(chr === '_' || chr === '-' || chr >= 'A' && chr <= 'Z' || chr >= 'a' && chr <= 'z' || i !== 0 && chr >= '0' && chr <= '9')) {
-              var charCode = chr.charCodeAt(0);
-              if ((charCode & 63488) === 55296) {
-                var extraCharCode = s.charCodeAt(i++);
-                if ((charCode & 64512) !== 55296 || (extraCharCode & 64512) !== 56320) {
-                  throw Error('UCS-2(decode): illegal sequence');
-                }
-                charCode = ((charCode & 1023) << 10) + (extraCharCode & 1023) + 65536;
-              }
-              result += '\\' + charCode.toString(16) + ' ';
-            } else {
-              result += chr;
-            }
-          }
-          i++;
-        }
-        return result;
-      };
-      CssSelectorParser.prototype.escapeStr = function(s) {
-        var result = '';
-        var i = 0;
-        var len = s.length;
-        var chr, replacement;
-        while (i < len) {
-          chr = s.charAt(i);
-          if (chr === '"') {
-            chr = '\\"';
-          } else if (chr === '\\') {
-            chr = '\\\\';
-          } else if (replacement = strReplacementsRev[chr]) {
-            chr = replacement;
-          }
-          result += chr;
-          i++;
-        }
-        return '"' + result + '"';
-      };
-      CssSelectorParser.prototype.render = function(path) {
-        return this._renderEntity(path).trim();
-      };
-      CssSelectorParser.prototype._renderEntity = function(entity) {
-        var currentEntity, parts, res;
-        res = '';
-        switch (entity.type) {
-         case 'ruleSet':
-          currentEntity = entity.rule;
-          parts = [];
-          while (currentEntity) {
-            if (currentEntity.nestingOperator) {
-              parts.push(currentEntity.nestingOperator);
-            }
-            parts.push(this._renderEntity(currentEntity));
-            currentEntity = currentEntity.rule;
-          }
-          res = parts.join(' ');
-          break;
-
-         case 'selectors':
-          res = entity.selectors.map(this._renderEntity, this).join(', ');
-          break;
-
-         case 'rule':
-          if (entity.tagName) {
-            if (entity.tagName === '*') {
-              res = '*';
-            } else {
-              res = this.escapeIdentifier(entity.tagName);
-            }
-          }
-          if (entity.id) {
-            res += '#' + this.escapeIdentifier(entity.id);
-          }
-          if (entity.classNames) {
-            res += entity.classNames.map(function(cn) {
-              return '.' + this.escapeIdentifier(cn);
-            }, this).join('');
-          }
-          if (entity.attrs) {
-            res += entity.attrs.map(function(attr) {
-              if (attr.operator) {
-                if (attr.valueType === 'substitute') {
-                  return '[' + this.escapeIdentifier(attr.name) + attr.operator + '$' + attr.value + ']';
-                } else {
-                  return '[' + this.escapeIdentifier(attr.name) + attr.operator + this.escapeStr(attr.value) + ']';
-                }
-              } else {
-                return '[' + this.escapeIdentifier(attr.name) + ']';
-              }
-            }, this).join('');
-          }
-          if (entity.pseudos) {
-            res += entity.pseudos.map(function(pseudo) {
-              if (pseudo.valueType) {
-                if (pseudo.valueType === 'selector') {
-                  return ':' + this.escapeIdentifier(pseudo.name) + '(' + this._renderEntity(pseudo.value) + ')';
-                } else if (pseudo.valueType === 'substitute') {
-                  return ':' + this.escapeIdentifier(pseudo.name) + '($' + pseudo.value + ')';
-                } else if (pseudo.valueType === 'numeric') {
-                  return ':' + this.escapeIdentifier(pseudo.name) + '(' + pseudo.value + ')';
-                } else {
-                  return ':' + this.escapeIdentifier(pseudo.name) + '(' + this.escapeIdentifier(pseudo.value) + ')';
-                }
-              } else {
-                return ':' + this.escapeIdentifier(pseudo.name);
-              }
-            }, this).join('');
-          }
-          break;
-
-         default:
-          throw Error('Unknown entity type: "' + entity.type(+'".'));
-        }
-        return res;
-      };
-      exports.CssSelectorParser = CssSelectorParser;
-    }, {} ],
-    31: [ function(_dereq_, module, exports) {
-      'use strict';
-      module.exports = function() {
-        return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
-      };
-    }, {} ],
-    32: [ function(_dereq_, module, exports) {
-      (function(process, global) {
-        (function(global, factory) {
-          typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.ES6Promise = factory();
-        })(this, function() {
-          'use strict';
-          function objectOrFunction(x) {
-            var type = typeof x;
-            return x !== null && (type === 'object' || type === 'function');
-          }
-          function isFunction(x) {
-            return typeof x === 'function';
-          }
-          var _isArray = void 0;
-          if (Array.isArray) {
-            _isArray = Array.isArray;
-          } else {
-            _isArray = function(x) {
-              return Object.prototype.toString.call(x) === '[object Array]';
-            };
-          }
-          var isArray = _isArray;
-          var len = 0;
-          var vertxNext = void 0;
-          var customSchedulerFn = void 0;
-          var asap = function asap(callback, arg) {
-            queue[len] = callback;
-            queue[len + 1] = arg;
-            len += 2;
-            if (len === 2) {
-              if (customSchedulerFn) {
-                customSchedulerFn(flush);
-              } else {
-                scheduleFlush();
-              }
-            }
-          };
-          function setScheduler(scheduleFn) {
-            customSchedulerFn = scheduleFn;
-          }
-          function setAsap(asapFn) {
-            asap = asapFn;
-          }
-          var browserWindow = typeof window !== 'undefined' ? window : undefined;
-          var browserGlobal = browserWindow || {};
-          var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
-          var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
-          var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
-          function useNextTick() {
-            return function() {
-              return process.nextTick(flush);
-            };
-          }
-          function useVertxTimer() {
-            if (typeof vertxNext !== 'undefined') {
-              return function() {
-                vertxNext(flush);
-              };
-            }
-            return useSetTimeout();
-          }
-          function useMutationObserver() {
-            var iterations = 0;
-            var observer = new BrowserMutationObserver(flush);
-            var node = document.createTextNode('');
-            observer.observe(node, {
-              characterData: true
-            });
-            return function() {
-              node.data = iterations = ++iterations % 2;
-            };
-          }
-          function useMessageChannel() {
-            var channel = new MessageChannel();
-            channel.port1.onmessage = flush;
-            return function() {
-              return channel.port2.postMessage(0);
-            };
-          }
-          function useSetTimeout() {
-            var globalSetTimeout = setTimeout;
-            return function() {
-              return globalSetTimeout(flush, 1);
-            };
-          }
-          var queue = new Array(1e3);
-          function flush() {
-            for (var i = 0; i < len; i += 2) {
-              var callback = queue[i];
-              var arg = queue[i + 1];
-              callback(arg);
-              queue[i] = undefined;
-              queue[i + 1] = undefined;
-            }
-            len = 0;
-          }
-          function attemptVertx() {
-            try {
-              var vertx = Function('return this')().require('vertx');
-              vertxNext = vertx.runOnLoop || vertx.runOnContext;
-              return useVertxTimer();
-            } catch (e) {
-              return useSetTimeout();
-            }
-          }
-          var scheduleFlush = void 0;
-          if (isNode) {
-            scheduleFlush = useNextTick();
-          } else if (BrowserMutationObserver) {
-            scheduleFlush = useMutationObserver();
-          } else if (isWorker) {
-            scheduleFlush = useMessageChannel();
-          } else if (browserWindow === undefined && typeof _dereq_ === 'function') {
-            scheduleFlush = attemptVertx();
-          } else {
-            scheduleFlush = useSetTimeout();
-          }
-          function then(onFulfillment, onRejection) {
-            var parent = this;
-            var child = new this.constructor(noop);
-            if (child[PROMISE_ID] === undefined) {
-              makePromise(child);
-            }
-            var _state = parent._state;
-            if (_state) {
-              var callback = arguments[_state - 1];
-              asap(function() {
-                return invokeCallback(_state, child, callback, parent._result);
-              });
-            } else {
-              subscribe(parent, child, onFulfillment, onRejection);
-            }
-            return child;
-          }
-          function resolve$1(object) {
-            var Constructor = this;
-            if (object && typeof object === 'object' && object.constructor === Constructor) {
-              return object;
-            }
-            var promise = new Constructor(noop);
-            resolve(promise, object);
-            return promise;
-          }
-          var PROMISE_ID = Math.random().toString(36).substring(2);
-          function noop() {}
-          var PENDING = void 0;
-          var FULFILLED = 1;
-          var REJECTED = 2;
-          function selfFulfillment() {
-            return new TypeError('You cannot resolve a promise with itself');
-          }
-          function cannotReturnOwn() {
-            return new TypeError('A promises callback cannot return that same promise.');
-          }
-          function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {
-            try {
-              then$$1.call(value, fulfillmentHandler, rejectionHandler);
-            } catch (e) {
-              return e;
-            }
-          }
-          function handleForeignThenable(promise, thenable, then$$1) {
-            asap(function(promise) {
-              var sealed = false;
-              var error = tryThen(then$$1, thenable, function(value) {
-                if (sealed) {
-                  return;
-                }
-                sealed = true;
-                if (thenable !== value) {
-                  resolve(promise, value);
-                } else {
-                  fulfill(promise, value);
-                }
-              }, function(reason) {
-                if (sealed) {
-                  return;
-                }
-                sealed = true;
-                reject(promise, reason);
-              }, 'Settle: ' + (promise._label || ' unknown promise'));
-              if (!sealed && error) {
-                sealed = true;
-                reject(promise, error);
-              }
-            }, promise);
-          }
-          function handleOwnThenable(promise, thenable) {
-            if (thenable._state === FULFILLED) {
-              fulfill(promise, thenable._result);
-            } else if (thenable._state === REJECTED) {
-              reject(promise, thenable._result);
-            } else {
-              subscribe(thenable, undefined, function(value) {
-                return resolve(promise, value);
-              }, function(reason) {
-                return reject(promise, reason);
-              });
-            }
-          }
-          function handleMaybeThenable(promise, maybeThenable, then$$1) {
-            if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {
-              handleOwnThenable(promise, maybeThenable);
-            } else {
-              if (then$$1 === undefined) {
-                fulfill(promise, maybeThenable);
-              } else if (isFunction(then$$1)) {
-                handleForeignThenable(promise, maybeThenable, then$$1);
-              } else {
-                fulfill(promise, maybeThenable);
-              }
-            }
-          }
-          function resolve(promise, value) {
-            if (promise === value) {
-              reject(promise, selfFulfillment());
-            } else if (objectOrFunction(value)) {
-              var then$$1 = void 0;
-              try {
-                then$$1 = value.then;
-              } catch (error) {
-                reject(promise, error);
-                return;
-              }
-              handleMaybeThenable(promise, value, then$$1);
-            } else {
-              fulfill(promise, value);
-            }
-          }
-          function publishRejection(promise) {
-            if (promise._onerror) {
-              promise._onerror(promise._result);
-            }
-            publish(promise);
-          }
-          function fulfill(promise, value) {
-            if (promise._state !== PENDING) {
-              return;
-            }
-            promise._result = value;
-            promise._state = FULFILLED;
-            if (promise._subscribers.length !== 0) {
-              asap(publish, promise);
-            }
-          }
-          function reject(promise, reason) {
-            if (promise._state !== PENDING) {
-              return;
-            }
-            promise._state = REJECTED;
-            promise._result = reason;
-            asap(publishRejection, promise);
-          }
-          function subscribe(parent, child, onFulfillment, onRejection) {
-            var _subscribers = parent._subscribers;
-            var length = _subscribers.length;
-            parent._onerror = null;
-            _subscribers[length] = child;
-            _subscribers[length + FULFILLED] = onFulfillment;
-            _subscribers[length + REJECTED] = onRejection;
-            if (length === 0 && parent._state) {
-              asap(publish, parent);
-            }
-          }
-          function publish(promise) {
-            var subscribers = promise._subscribers;
-            var settled = promise._state;
-            if (subscribers.length === 0) {
-              return;
-            }
-            var child = void 0, callback = void 0, detail = promise._result;
-            for (var i = 0; i < subscribers.length; i += 3) {
-              child = subscribers[i];
-              callback = subscribers[i + settled];
-              if (child) {
-                invokeCallback(settled, child, callback, detail);
-              } else {
-                callback(detail);
-              }
-            }
-            promise._subscribers.length = 0;
-          }
-          function invokeCallback(settled, promise, callback, detail) {
-            var hasCallback = isFunction(callback), value = void 0, error = void 0, succeeded = true;
-            if (hasCallback) {
-              try {
-                value = callback(detail);
-              } catch (e) {
-                succeeded = false;
-                error = e;
-              }
-              if (promise === value) {
-                reject(promise, cannotReturnOwn());
-                return;
-              }
-            } else {
-              value = detail;
-            }
-            if (promise._state !== PENDING) {} else if (hasCallback && succeeded) {
-              resolve(promise, value);
-            } else if (succeeded === false) {
-              reject(promise, error);
-            } else if (settled === FULFILLED) {
-              fulfill(promise, value);
-            } else if (settled === REJECTED) {
-              reject(promise, value);
-            }
-          }
-          function initializePromise(promise, resolver) {
-            try {
-              resolver(function resolvePromise(value) {
-                resolve(promise, value);
-              }, function rejectPromise(reason) {
-                reject(promise, reason);
-              });
-            } catch (e) {
-              reject(promise, e);
-            }
-          }
-          var id = 0;
-          function nextId() {
-            return id++;
-          }
-          function makePromise(promise) {
-            promise[PROMISE_ID] = id++;
-            promise._state = undefined;
-            promise._result = undefined;
-            promise._subscribers = [];
-          }
-          function validationError() {
-            return new Error('Array Methods must be provided an Array');
-          }
-          var Enumerator = function() {
-            function Enumerator(Constructor, input) {
-              this._instanceConstructor = Constructor;
-              this.promise = new Constructor(noop);
-              if (!this.promise[PROMISE_ID]) {
-                makePromise(this.promise);
-              }
-              if (isArray(input)) {
-                this.length = input.length;
-                this._remaining = input.length;
-                this._result = new Array(this.length);
-                if (this.length === 0) {
-                  fulfill(this.promise, this._result);
-                } else {
-                  this.length = this.length || 0;
-                  this._enumerate(input);
-                  if (this._remaining === 0) {
-                    fulfill(this.promise, this._result);
-                  }
-                }
-              } else {
-                reject(this.promise, validationError());
-              }
-            }
-            Enumerator.prototype._enumerate = function _enumerate(input) {
-              for (var i = 0; this._state === PENDING && i < input.length; i++) {
-                this._eachEntry(input[i], i);
-              }
-            };
-            Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {
-              var c = this._instanceConstructor;
-              var resolve$$1 = c.resolve;
-              if (resolve$$1 === resolve$1) {
-                var _then = void 0;
-                var error = void 0;
-                var didError = false;
-                try {
-                  _then = entry.then;
-                } catch (e) {
-                  didError = true;
-                  error = e;
-                }
-                if (_then === then && entry._state !== PENDING) {
-                  this._settledAt(entry._state, i, entry._result);
-                } else if (typeof _then !== 'function') {
-                  this._remaining--;
-                  this._result[i] = entry;
-                } else if (c === Promise$1) {
-                  var promise = new c(noop);
-                  if (didError) {
-                    reject(promise, error);
-                  } else {
-                    handleMaybeThenable(promise, entry, _then);
-                  }
-                  this._willSettleAt(promise, i);
-                } else {
-                  this._willSettleAt(new c(function(resolve$$1) {
-                    return resolve$$1(entry);
-                  }), i);
-                }
-              } else {
-                this._willSettleAt(resolve$$1(entry), i);
-              }
-            };
-            Enumerator.prototype._settledAt = function _settledAt(state, i, value) {
-              var promise = this.promise;
-              if (promise._state === PENDING) {
-                this._remaining--;
-                if (state === REJECTED) {
-                  reject(promise, value);
-                } else {
-                  this._result[i] = value;
-                }
-              }
-              if (this._remaining === 0) {
-                fulfill(promise, this._result);
-              }
-            };
-            Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {
-              var enumerator = this;
-              subscribe(promise, undefined, function(value) {
-                return enumerator._settledAt(FULFILLED, i, value);
-              }, function(reason) {
-                return enumerator._settledAt(REJECTED, i, reason);
-              });
-            };
-            return Enumerator;
-          }();
-          function all(entries) {
-            return new Enumerator(this, entries).promise;
-          }
-          function race(entries) {
-            var Constructor = this;
-            if (!isArray(entries)) {
-              return new Constructor(function(_, reject) {
-                return reject(new TypeError('You must pass an array to race.'));
-              });
-            } else {
-              return new Constructor(function(resolve, reject) {
-                var length = entries.length;
-                for (var i = 0; i < length; i++) {
-                  Constructor.resolve(entries[i]).then(resolve, reject);
-                }
-              });
-            }
-          }
-          function reject$1(reason) {
-            var Constructor = this;
-            var promise = new Constructor(noop);
-            reject(promise, reason);
-            return promise;
-          }
-          function needsResolver() {
-            throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
-          }
-          function needsNew() {
-            throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');
-          }
-          var Promise$1 = function() {
-            function Promise(resolver) {
-              this[PROMISE_ID] = nextId();
-              this._result = this._state = undefined;
-              this._subscribers = [];
-              if (noop !== resolver) {
-                typeof resolver !== 'function' && needsResolver();
-                this instanceof Promise ? initializePromise(this, resolver) : needsNew();
-              }
-            }
-            Promise.prototype.catch = function _catch(onRejection) {
-              return this.then(null, onRejection);
-            };
-            Promise.prototype.finally = function _finally(callback) {
-              var promise = this;
-              var constructor = promise.constructor;
-              if (isFunction(callback)) {
-                return promise.then(function(value) {
-                  return constructor.resolve(callback()).then(function() {
-                    return value;
-                  });
-                }, function(reason) {
-                  return constructor.resolve(callback()).then(function() {
-                    throw reason;
-                  });
-                });
-              }
-              return promise.then(callback, callback);
-            };
-            return Promise;
-          }();
-          Promise$1.prototype.then = then;
-          Promise$1.all = all;
-          Promise$1.race = race;
-          Promise$1.resolve = resolve$1;
-          Promise$1.reject = reject$1;
-          Promise$1._setScheduler = setScheduler;
-          Promise$1._setAsap = setAsap;
-          Promise$1._asap = asap;
-          function polyfill() {
-            var local = void 0;
-            if (typeof global !== 'undefined') {
-              local = global;
-            } else if (typeof self !== 'undefined') {
-              local = self;
-            } else {
-              try {
-                local = Function('return this')();
-              } catch (e) {
-                throw new Error('polyfill failed because global object is unavailable in this environment');
-              }
-            }
-            var P = local.Promise;
-            if (P) {
-              var promiseToString = null;
-              try {
-                promiseToString = Object.prototype.toString.call(P.resolve());
-              } catch (e) {}
-              if (promiseToString === '[object Promise]' && !P.cast) {
-                return;
-              }
-            }
-            local.Promise = Promise$1;
-          }
-          Promise$1.polyfill = polyfill;
-          Promise$1.Promise = Promise$1;
-          return Promise$1;
-        });
-      }).call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {});
-    }, {
-      _process: 33
-    } ],
-    33: [ function(_dereq_, module, exports) {
-      var process = module.exports = {};
-      var cachedSetTimeout;
-      var cachedClearTimeout;
-      function defaultSetTimout() {
-        throw new Error('setTimeout has not been defined');
-      }
-      function defaultClearTimeout() {
-        throw new Error('clearTimeout has not been defined');
-      }
-      (function() {
-        try {
-          if (typeof setTimeout === 'function') {
-            cachedSetTimeout = setTimeout;
-          } else {
-            cachedSetTimeout = defaultSetTimout;
-          }
-        } catch (e) {
-          cachedSetTimeout = defaultSetTimout;
-        }
-        try {
-          if (typeof clearTimeout === 'function') {
-            cachedClearTimeout = clearTimeout;
-          } else {
-            cachedClearTimeout = defaultClearTimeout;
-          }
-        } catch (e) {
-          cachedClearTimeout = defaultClearTimeout;
-        }
-      })();
-      function runTimeout(fun) {
-        if (cachedSetTimeout === setTimeout) {
-          return setTimeout(fun, 0);
-        }
-        if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
-          cachedSetTimeout = setTimeout;
-          return setTimeout(fun, 0);
-        }
-        try {
-          return cachedSetTimeout(fun, 0);
-        } catch (e) {
-          try {
-            return cachedSetTimeout.call(null, fun, 0);
-          } catch (e) {
-            return cachedSetTimeout.call(this, fun, 0);
-          }
-        }
-      }
-      function runClearTimeout(marker) {
-        if (cachedClearTimeout === clearTimeout) {
-          return clearTimeout(marker);
-        }
-        if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
-          cachedClearTimeout = clearTimeout;
-          return clearTimeout(marker);
-        }
-        try {
-          return cachedClearTimeout(marker);
-        } catch (e) {
-          try {
-            return cachedClearTimeout.call(null, marker);
-          } catch (e) {
-            return cachedClearTimeout.call(this, marker);
-          }
-        }
-      }
-      var queue = [];
-      var draining = false;
-      var currentQueue;
-      var queueIndex = -1;
-      function cleanUpNextTick() {
-        if (!draining || !currentQueue) {
-          return;
-        }
-        draining = false;
-        if (currentQueue.length) {
-          queue = currentQueue.concat(queue);
-        } else {
-          queueIndex = -1;
-        }
-        if (queue.length) {
-          drainQueue();
-        }
-      }
-      function drainQueue() {
-        if (draining) {
-          return;
-        }
-        var timeout = runTimeout(cleanUpNextTick);
-        draining = true;
-        var len = queue.length;
-        while (len) {
-          currentQueue = queue;
-          queue = [];
-          while (++queueIndex < len) {
-            if (currentQueue) {
-              currentQueue[queueIndex].run();
-            }
-          }
-          queueIndex = -1;
-          len = queue.length;
-        }
-        currentQueue = null;
-        draining = false;
-        runClearTimeout(timeout);
-      }
-      process.nextTick = function(fun) {
-        var args = new Array(arguments.length - 1);
-        if (arguments.length > 1) {
-          for (var i = 1; i < arguments.length; i++) {
-            args[i - 1] = arguments[i];
-          }
-        }
-        queue.push(new Item(fun, args));
-        if (queue.length === 1 && !draining) {
-          runTimeout(drainQueue);
-        }
-      };
-      function Item(fun, array) {
-        this.fun = fun;
-        this.array = array;
-      }
-      Item.prototype.run = function() {
-        this.fun.apply(null, this.array);
-      };
-      process.title = 'browser';
-      process.browser = true;
-      process.env = {};
-      process.argv = [];
-      process.version = '';
-      process.versions = {};
-      function noop() {}
-      process.on = noop;
-      process.addListener = noop;
-      process.once = noop;
-      process.off = noop;
-      process.removeListener = noop;
-      process.removeAllListeners = noop;
-      process.emit = noop;
-      process.prependListener = noop;
-      process.prependOnceListener = noop;
-      process.listeners = function(name) {
-        return [];
-      };
-      process.binding = function(name) {
-        throw new Error('process.binding is not supported');
-      };
-      process.cwd = function() {
-        return '/';
-      };
-      process.chdir = function(dir) {
-        throw new Error('process.chdir is not supported');
-      };
-      process.umask = function() {
-        return 0;
-      };
-    }, {} ],
-    34: [ function(_dereq_, module, exports) {
-      (function(global) {
-        (function(self) {
-          'use strict';
-          if (self.WeakMap) {
-            return;
-          }
-          var hasOwnProperty = Object.prototype.hasOwnProperty;
-          var defineProperty = function(object, name, value) {
-            if (Object.defineProperty) {
-              Object.defineProperty(object, name, {
-                configurable: true,
-                writable: true,
-                value: value
-              });
-            } else {
-              object[name] = value;
-            }
-          };
-          self.WeakMap = function() {
-            function WeakMap() {
-              if (this === void 0) {
-                throw new TypeError('Constructor WeakMap requires \'new\'');
-              }
-              defineProperty(this, '_id', genId('_WeakMap'));
-              if (arguments.length > 0) {
-                throw new TypeError('WeakMap iterable is not supported');
-              }
-            }
-            defineProperty(WeakMap.prototype, 'delete', function(key) {
-              checkInstance(this, 'delete');
-              if (!isObject(key)) {
-                return false;
-              }
-              var entry = key[this._id];
-              if (entry && entry[0] === key) {
-                delete key[this._id];
-                return true;
-              }
-              return false;
-            });
-            defineProperty(WeakMap.prototype, 'get', function(key) {
-              checkInstance(this, 'get');
-              if (!isObject(key)) {
-                return void 0;
-              }
-              var entry = key[this._id];
-              if (entry && entry[0] === key) {
-                return entry[1];
-              }
-              return void 0;
-            });
-            defineProperty(WeakMap.prototype, 'has', function(key) {
-              checkInstance(this, 'has');
-              if (!isObject(key)) {
-                return false;
-              }
-              var entry = key[this._id];
-              if (entry && entry[0] === key) {
-                return true;
-              }
-              return false;
-            });
-            defineProperty(WeakMap.prototype, 'set', function(key, value) {
-              checkInstance(this, 'set');
-              if (!isObject(key)) {
-                throw new TypeError('Invalid value used as weak map key');
-              }
-              var entry = key[this._id];
-              if (entry && entry[0] === key) {
-                entry[1] = value;
-                return this;
-              }
-              defineProperty(key, this._id, [ key, value ]);
-              return this;
-            });
-            function checkInstance(x, methodName) {
-              if (!isObject(x) || !hasOwnProperty.call(x, '_id')) {
-                throw new TypeError(methodName + ' method called on incompatible receiver ' + typeof x);
-              }
-            }
-            function genId(prefix) {
-              return prefix + '_' + rand() + '.' + rand();
-            }
-            function rand() {
-              return Math.random().toString().substring(2);
-            }
-            defineProperty(WeakMap, '_polyfill', true);
-            return WeakMap;
-          }();
-          function isObject(x) {
-            return Object(x) === x;
-          }
-        })(typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : this);
-      }).call(this, typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {});
-    }, {} ]
-  }, {}, [ 1 ]);
   'use strict';
   var utils = axe.utils = {};
   'use strict';
   var helpers = {};
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   function getDefaultConfiguration(audit) {
     'use strict';
     var config;
@@ -2546,7 +68,7 @@
     config.reporter = config.reporter || null;
     config.rules = config.rules || [];
     config.checks = config.checks || [];
-    config.data = _extends({
+    config.data = Object.assign({
       checks: {},
       rules: {}
     }, config.data);
@@ -2565,104 +87,7 @@
     this.tagExclude = [ 'experimental' ];
     this.defaultConfig = audit;
     this._init();
-    this._defaultLocale = null;
   }
-  Audit.prototype._setDefaultLocale = function() {
-    if (this._defaultLocale) {
-      return;
-    }
-    var locale = {
-      checks: {},
-      rules: {}
-    };
-    var checkIDs = Object.keys(this.data.checks);
-    for (var i = 0; i < checkIDs.length; i++) {
-      var id = checkIDs[i];
-      var check = this.data.checks[id];
-      var _check$messages = check.messages, pass = _check$messages.pass, fail = _check$messages.fail, incomplete = _check$messages.incomplete;
-      locale.checks[id] = {
-        pass: pass,
-        fail: fail,
-        incomplete: incomplete
-      };
-    }
-    var ruleIDs = Object.keys(this.data.rules);
-    for (var _i = 0; _i < ruleIDs.length; _i++) {
-      var _id = ruleIDs[_i];
-      var rule = this.data.rules[_id];
-      var description = rule.description, help = rule.help;
-      locale.rules[_id] = {
-        description: description,
-        help: help
-      };
-    }
-    this._defaultLocale = locale;
-  };
-  Audit.prototype._resetLocale = function() {
-    var defaultLocale = this._defaultLocale;
-    if (!defaultLocale) {
-      return;
-    }
-    this.applyLocale(defaultLocale);
-  };
-  var mergeCheckLocale = function mergeCheckLocale(a, b) {
-    var pass = b.pass, fail = b.fail;
-    if (typeof pass === 'string') {
-      pass = axe.imports.doT.compile(pass);
-    }
-    if (typeof fail === 'string') {
-      fail = axe.imports.doT.compile(fail);
-    }
-    return _extends({}, a, {
-      messages: {
-        pass: pass || a.messages.pass,
-        fail: fail || a.messages.fail,
-        incomplete: _typeof(a.messages.incomplete) === 'object' ? _extends({}, a.messages.incomplete, {}, b.incomplete) : b.incomplete
-      }
-    });
-  };
-  var mergeRuleLocale = function mergeRuleLocale(a, b) {
-    var help = b.help, description = b.description;
-    if (typeof help === 'string') {
-      help = axe.imports.doT.compile(help);
-    }
-    if (typeof description === 'string') {
-      description = axe.imports.doT.compile(description);
-    }
-    return _extends({}, a, {
-      help: help || a.help,
-      description: description || a.description
-    });
-  };
-  Audit.prototype._applyCheckLocale = function(checks) {
-    var keys = Object.keys(checks);
-    for (var i = 0; i < keys.length; i++) {
-      var id = keys[i];
-      if (!this.data.checks[id]) {
-        throw new Error('Locale provided for unknown check: "'.concat(id, '"'));
-      }
-      this.data.checks[id] = mergeCheckLocale(this.data.checks[id], checks[id]);
-    }
-  };
-  Audit.prototype._applyRuleLocale = function(rules) {
-    var keys = Object.keys(rules);
-    for (var i = 0; i < keys.length; i++) {
-      var id = keys[i];
-      if (!this.data.rules[id]) {
-        throw new Error('Locale provided for unknown rule: "'.concat(id, '"'));
-      }
-      this.data.rules[id] = mergeRuleLocale(this.data.rules[id], rules[id]);
-    }
-  };
-  Audit.prototype.applyLocale = function(locale) {
-    this._setDefaultLocale();
-    if (locale.checks) {
-      this._applyCheckLocale(locale.checks);
-    }
-    if (locale.rules) {
-      this._applyRuleLocale(locale.rules);
-    }
-  };
   Audit.prototype._init = function() {
     var audit = getDefaultConfiguration(this.defaultConfig);
     axe.commons = commons = audit.commons;
@@ -2698,7 +123,7 @@
   Audit.prototype.addCheck = function(spec) {
     'use strict';
     var metadata = spec.metadata;
-    if (_typeof(metadata) === 'object') {
+    if ((typeof metadata === 'undefined' ? 'undefined' : _typeof(metadata)) === 'object') {
       this.data.checks[spec.id] = metadata;
       if (_typeof(metadata.messages) === 'object') {
         Object.keys(metadata.messages).filter(function(prop) {
@@ -2716,110 +141,54 @@
       this.checks[spec.id] = new Check(spec);
     }
   };
-  function getRulesToRun(rules, context, options) {
-    var base = {
-      now: [],
-      later: []
-    };
-    var splitRules = rules.reduce(function(out, rule) {
-      if (!axe.utils.ruleShouldRun(rule, context, options)) {
-        return out;
-      }
-      if (rule.preload) {
-        out.later.push(rule);
-        return out;
-      }
-      out.now.push(rule);
-      return out;
-    }, base);
-    return splitRules;
-  }
-  function getDefferedRule(rule, context, options) {
-    if (options.performanceTimer) {
-      axe.utils.performanceTimer.mark('mark_rule_start_' + rule.id);
-    }
-    return function(resolve, reject) {
-      rule.run(context, options, function(ruleResult) {
-        resolve(ruleResult);
-      }, function(err) {
-        if (!options.debug) {
-          var errResult = Object.assign(new RuleResult(rule), {
-            result: axe.constants.CANTTELL,
-            description: 'An error occured while running this rule',
-            message: err.message,
-            stack: err.stack,
-            error: err,
-            errorNode: err.errorNode
-          });
-          resolve(errResult);
-        } else {
-          reject(err);
-        }
-      });
-    };
-  }
   Audit.prototype.run = function(context, options, resolve, reject) {
     'use strict';
-    this.normalizeOptions(options);
-    axe._selectCache = [];
-    var allRulesToRun = getRulesToRun(this.rules, context, options);
-    var runNowRules = allRulesToRun.now;
-    var runLaterRules = allRulesToRun.later;
-    var nowRulesQueue = axe.utils.queue();
-    runNowRules.forEach(function(rule) {
-      nowRulesQueue.defer(getDefferedRule(rule, context, options));
-    });
-    var preloaderQueue = axe.utils.queue();
-    if (runLaterRules.length) {
-      preloaderQueue.defer(function(resolve) {
-        axe.utils.preload(options).then(function(assets) {
-          return resolve(assets);
-        })['catch'](function(err) {
-          console.warn('Couldn\'t load preload assets: ', err);
-          resolve(undefined);
-        });
-      });
-    }
-    var queueForNowRulesAndPreloader = axe.utils.queue();
-    queueForNowRulesAndPreloader.defer(nowRulesQueue);
-    queueForNowRulesAndPreloader.defer(preloaderQueue);
-    queueForNowRulesAndPreloader.then(function(nowRulesAndPreloaderResults) {
-      var assetsFromQueue = nowRulesAndPreloaderResults.pop();
-      if (assetsFromQueue && assetsFromQueue.length) {
-        var assets = assetsFromQueue[0];
-        if (assets) {
-          context = _extends({}, context, {}, assets);
+    this.validateOptions(options);
+    axe._tree = axe.utils.getFlattenedTree(document.documentElement);
+    var q = axe.utils.queue();
+    this.rules.forEach(function(rule) {
+      if (axe.utils.ruleShouldRun(rule, context, options)) {
+        if (options.performanceTimer) {
+          var markEnd = 'mark_rule_end_' + rule.id;
+          var markStart = 'mark_rule_start_' + rule.id;
+          axe.utils.performanceTimer.mark(markStart);
         }
+        q.defer(function(res, rej) {
+          rule.run(context, options, function(out) {
+            if (options.performanceTimer) {
+              axe.utils.performanceTimer.mark(markEnd);
+              axe.utils.performanceTimer.measure('rule_' + rule.id, markStart, markEnd);
+            }
+            res(out);
+          }, function(err) {
+            if (!options.debug) {
+              var errResult = Object.assign(new RuleResult(rule), {
+                result: axe.constants.CANTTELL,
+                description: 'An error occured while running this rule',
+                message: err.message,
+                stack: err.stack,
+                error: err
+              });
+              res(errResult);
+            } else {
+              rej(err);
+            }
+          });
+        });
       }
-      var nowRulesResults = nowRulesAndPreloaderResults[0];
-      if (!runLaterRules.length) {
-        axe._selectCache = undefined;
-        resolve(nowRulesResults.filter(function(result) {
-          return !!result;
-        }));
-        return;
-      }
-      var laterRulesQueue = axe.utils.queue();
-      runLaterRules.forEach(function(rule) {
-        var deferredRule = getDefferedRule(rule, context, options);
-        laterRulesQueue.defer(deferredRule);
-      });
-      laterRulesQueue.then(function(laterRuleResults) {
-        axe._selectCache = undefined;
-        resolve(nowRulesResults.concat(laterRuleResults).filter(function(result) {
-          return !!result;
-        }));
-      })['catch'](reject);
-    })['catch'](reject);
+    });
+    q.then(function(results) {
+      axe._tree = undefined;
+      resolve(results.filter(function(result) {
+        return !!result;
+      }));
+    }).catch(reject);
   };
   Audit.prototype.after = function(results, options) {
     'use strict';
     var rules = this.rules;
     return results.map(function(ruleResult) {
       var rule = axe.utils.findBy(rules, 'id', ruleResult.id);
-      if (!rule) {
-        throw new Error('Result for unknown rule. You may be running mismatch axe-core versions');
-      }
       return rule.after(ruleResult, options);
     });
   };
@@ -2828,43 +197,34 @@
       return rule.id === ruleId;
     });
   };
-  Audit.prototype.normalizeOptions = function(options) {
+  Audit.prototype.validateOptions = function(options) {
     'use strict';
     var audit = this;
     if (_typeof(options.runOnly) === 'object') {
-      if (Array.isArray(options.runOnly)) {
-        options.runOnly = {
-          type: 'tag',
-          values: options.runOnly
-        };
-      }
       var only = options.runOnly;
-      if (only.value && !only.values) {
-        only.values = only.value;
-        delete only.value;
-      }
-      if (!Array.isArray(only.values) || only.values.length === 0) {
-        throw new Error('runOnly.values must be a non-empty array');
-      }
-      if ([ 'rule', 'rules' ].includes(only.type)) {
-        only.type = 'rule';
-        only.values.forEach(function(ruleId) {
+      if (only.type === 'rule' && Array.isArray(only.value)) {
+        only.value.forEach(function(ruleId) {
           if (!audit.getRule(ruleId)) {
             throw new Error('unknown rule `' + ruleId + '` in options.runOnly');
           }
         });
-      } else if ([ 'tag', 'tags', undefined ].includes(only.type)) {
-        only.type = 'tag';
-        var unmatchedTags = audit.rules.reduce(function(unmatchedTags, rule) {
-          return unmatchedTags.length ? unmatchedTags.filter(function(tag) {
-            return !rule.tags.includes(tag);
-          }) : unmatchedTags;
-        }, only.values);
-        if (unmatchedTags.length !== 0) {
-          axe.log('Could not find tags `' + unmatchedTags.join('`, `') + '`');
+      } else if (Array.isArray(only.value) && only.value.length > 0) {
+        var tags = [].concat(only.value);
+        audit.rules.forEach(function(rule) {
+          var tagPos, i, l;
+          if (!tags) {
+            return;
+          }
+          for (i = 0, l = rule.tags.length; i < l; i++) {
+            tagPos = tags.indexOf(rule.tags[i]);
+            if (tagPos !== -1) {
+              tags.splice(tagPos, 1);
+            }
+          }
+        });
+        if (tags.length !== 0) {
+          throw new Error('could not find tags `' + tags.join('`, `') + '`');
         }
-      } else {
-        throw new Error('Unknown runOnly type \''.concat(only.type, '\''));
       }
     }
     if (_typeof(options.rules) === 'object') {
@@ -2897,7 +257,7 @@
   Audit.prototype._constructHelpUrls = function() {
     var _this = this;
     var previous = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
-    var version = (axe.version.match(/^[1-9][0-9]*\.[0-9]+/) || [ 'x.y' ])[0];
+    var version = axe.version.substring(0, axe.version.lastIndexOf('.'));
     this.rules.forEach(function(rule) {
       if (!_this.data.rules[rule.id]) {
         _this.data.rules[rule.id] = {};
@@ -2911,26 +271,8 @@
   Audit.prototype.resetRulesAndChecks = function() {
     'use strict';
     this._init();
-    this._resetLocale();
   };
   'use strict';
-  (function() {
-    'use strict';
-    var _cache = {};
-    var cache = {
-      set: function set(key, value) {
-        _cache[key] = value;
-      },
-      get: function get(key) {
-        return _cache[key];
-      },
-      clear: function clear() {
-        _cache = {};
-      }
-    };
-    axe._cache = cache;
-  })();
-  'use strict';
   function CheckResult(check) {
     'use strict';
     this.id = check.id;
@@ -2953,7 +295,7 @@
     }
   }
   Check.prototype.enabled = true;
-  Check.prototype.run = function(node, options, context, resolve, reject) {
+  Check.prototype.run = function(node, options, resolve, reject) {
     'use strict';
     options = options || {};
     var enabled = options.hasOwnProperty('enabled') ? options.enabled : this.enabled, checkOptions = options.options || this.options;
@@ -2962,46 +304,21 @@
       var checkHelper = axe.utils.checkHelper(checkResult, options, resolve, reject);
       var result;
       try {
-        result = this.evaluate.call(checkHelper, node.actualNode, checkOptions, node, context);
+        result = this.evaluate.call(checkHelper, node.actualNode, checkOptions, node);
       } catch (e) {
-        if (node && node.actualNode) {
-          e.errorNode = new DqElement(node.actualNode).toJSON();
-        }
         reject(e);
         return;
       }
       if (!checkHelper.isAsync) {
         checkResult.result = result;
-        resolve(checkResult);
+        setTimeout(function() {
+          resolve(checkResult);
+        }, 0);
       }
     } else {
       resolve(null);
     }
   };
-  Check.prototype.runSync = function(node, options, context) {
-    options = options || {};
-    var _options = options, _options$enabled = _options.enabled, enabled = _options$enabled === void 0 ? this.enabled : _options$enabled;
-    if (!enabled) {
-      return null;
-    }
-    var checkOptions = options.options || this.options;
-    var checkResult = new CheckResult(this);
-    var checkHelper = axe.utils.checkHelper(checkResult, options);
-    checkHelper.async = function() {
-      throw new Error('Cannot run async check while in a synchronous run');
-    };
-    var result;
-    try {
-      result = this.evaluate.call(checkHelper, node.actualNode, checkOptions, node, context);
-    } catch (e) {
-      if (node && node.actualNode) {
-        e.errorNode = new DqElement(node.actualNode).toJSON();
-      }
-      throw e;
-    }
-    checkResult.result = result;
-    return checkResult;
-  };
   Check.prototype.configure = function(spec) {
     var _this = this;
     [ 'options', 'enabled' ].filter(function(prop) {
@@ -3016,18 +333,11 @@
     });
   };
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   function pushUniqueFrame(collection, frame) {
     'use strict';
     if (axe.utils.isHidden(frame)) {
@@ -3068,7 +378,7 @@
   }
   function normalizeContext(context) {
     'use strict';
-    if (context && _typeof(context) === 'object' || context instanceof NodeList) {
+    if (context && (typeof context === 'undefined' ? 'undefined' : _typeof(context)) === 'object' || context instanceof NodeList) {
       if (context instanceof Node) {
         return {
           include: [ context ],
@@ -3107,7 +417,7 @@
       if (typeof item === 'string') {
         nodeList = Array.from(document.querySelectorAll(item));
         result = result.concat(nodeList.map(function(node) {
-          return axe.utils.getNodeFromTree(node);
+          return axe.utils.getFlattenedTree(node)[0];
         }));
         break;
       } else if (item && item.length && !(item instanceof Node)) {
@@ -3116,15 +426,11 @@
         } else {
           nodeList = Array.from(document.querySelectorAll(item[0]));
           result = result.concat(nodeList.map(function(node) {
-            return axe.utils.getNodeFromTree(node);
+            return axe.utils.getFlattenedTree(node)[0];
           }));
         }
       } else if (item instanceof Node) {
-        if (item.documentElement instanceof Node) {
-          result.push(context.flatTree[0]);
-        } else {
-          result.push(axe.utils.getNodeFromTree(item));
-        }
+        result.push(axe.utils.getFlattenedTree(item)[0]);
       }
     }
     return result.filter(function(r) {
@@ -3145,35 +451,20 @@
       });
     }
   }
-  function getRootNode(_ref) {
-    var include = _ref.include, exclude = _ref.exclude;
-    var selectors = Array.from(include).concat(Array.from(exclude));
-    var localDocument = selectors.reduce(function(result, item) {
-      if (result) {
-        return result;
-      } else if (item instanceof Element) {
-        return item.ownerDocument;
-      } else if (item instanceof Document) {
-        return item;
-      }
-    }, null);
-    return (localDocument || document).documentElement;
-  }
   function Context(spec) {
     'use strict';
-    var _this = this;
+    var self = this;
     this.frames = [];
     this.initiator = spec && typeof spec.initiator === 'boolean' ? spec.initiator : true;
     this.page = false;
     spec = normalizeContext(spec);
-    this.flatTree = axe.utils.getFlattenedTree(getRootNode(spec));
     this.exclude = spec.exclude;
     this.include = spec.include;
     this.include = parseSelectorArray(this, 'include');
     this.exclude = parseSelectorArray(this, 'exclude');
     axe.utils.select('frame, iframe', this).forEach(function(frame) {
-      if (isNodeInContext(frame, _this)) {
-        pushUniqueFrame(_this.frames, frame.actualNode);
+      if (isNodeInContext(frame, self)) {
+        pushUniqueFrame(self.frames, frame.actualNode);
       }
     });
     if (this.include.length === 1 && this.include[0].actualNode === document.documentElement) {
@@ -3183,10 +474,6 @@
     if (err instanceof Error) {
       throw err;
     }
-    if (!Array.isArray(this.include)) {
-      this.include = Array.from(this.include);
-    }
-    this.include.sort(axe.utils.nodeSorter);
   }
   'use strict';
   function RuleResult(rule) {
@@ -3210,7 +497,6 @@
     this.all = spec.all || [];
     this.none = spec.none || [];
     this.tags = spec.tags || [];
-    this.preload = spec.preload ? true : false;
     if (spec.matches) {
       this.matches = createExecutionContext(spec.matches);
     }
@@ -3220,34 +506,16 @@
     return true;
   };
   Rule.prototype.gather = function(context) {
-    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-    var markStart = 'mark_gather_start_' + this.id;
-    var markEnd = 'mark_gather_end_' + this.id;
-    var markHiddenStart = 'mark_isHidden_start_' + this.id;
-    var markHiddenEnd = 'mark_isHidden_end_' + this.id;
-    if (options.performanceTimer) {
-      axe.utils.performanceTimer.mark(markStart);
-    }
+    'use strict';
     var elements = axe.utils.select(this.selector, context);
     if (this.excludeHidden) {
-      if (options.performanceTimer) {
-        axe.utils.performanceTimer.mark(markHiddenStart);
-      }
-      elements = elements.filter(function(element) {
+      return elements.filter(function(element) {
         return !axe.utils.isHidden(element.actualNode);
       });
-      if (options.performanceTimer) {
-        axe.utils.performanceTimer.mark(markHiddenEnd);
-        axe.utils.performanceTimer.measure('rule_' + this.id + '#gather_axe.utils.isHidden', markHiddenStart, markHiddenEnd);
-      }
-    }
-    if (options.performanceTimer) {
-      axe.utils.performanceTimer.mark(markEnd);
-      axe.utils.performanceTimer.measure('rule_' + this.id + '#gather', markStart, markEnd);
     }
     return elements;
   };
-  Rule.prototype.runChecks = function(type, node, options, context, resolve, reject) {
+  Rule.prototype.runChecks = function(type, node, options, resolve, reject) {
     'use strict';
     var self = this;
     var checkQueue = axe.utils.queue();
@@ -3255,7 +523,7 @@
       var check = self._audit.checks[c.id || c];
       var option = axe.utils.getCheckOption(check, self.id, options);
       checkQueue.defer(function(res, rej) {
-        check.run(node, option, context, res, rej);
+        check.run(node, option, res, rej);
       });
     });
     checkQueue.then(function(results) {
@@ -3266,38 +534,17 @@
         type: type,
         results: results
       });
-    })['catch'](reject);
+    }).catch(reject);
   };
-  Rule.prototype.runChecksSync = function(type, node, options, context) {
-    'use strict';
-    var self = this;
-    var results = [];
-    this[type].forEach(function(c) {
-      var check = self._audit.checks[c.id || c];
-      var option = axe.utils.getCheckOption(check, self.id, options);
-      results.push(check.runSync(node, option, context));
-    });
-    results = results.filter(function(check) {
-      return check;
-    });
-    return {
-      type: type,
-      results: results
-    };
-  };
-  Rule.prototype.run = function(context) {
+  Rule.prototype.run = function(context, options, resolve, reject) {
     var _this = this;
-    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-    var resolve = arguments.length > 2 ? arguments[2] : undefined;
-    var reject = arguments.length > 3 ? arguments[3] : undefined;
-    if (options.performanceTimer) {
-      this._trackPerformance();
-    }
     var q = axe.utils.queue();
     var ruleResult = new RuleResult(this);
-    var nodes;
+    var nodes = void 0;
     try {
-      nodes = this.gatherAndMatchNodes(context, options);
+      nodes = this.gather(context).filter(function(node) {
+        return _this.matches(node.actualNode, node);
+      });
     } catch (error) {
       reject(new SupportError({
         cause: error,
@@ -3306,126 +553,49 @@
       return;
     }
     if (options.performanceTimer) {
-      this._logGatherPerformance(nodes);
+      axe.log('gather (', nodes.length, '):', axe.utils.performanceTimer.timeElapsed() + 'ms');
     }
     nodes.forEach(function(node) {
       q.defer(function(resolveNode, rejectNode) {
         var checkQueue = axe.utils.queue();
-        [ 'any', 'all', 'none' ].forEach(function(type) {
-          checkQueue.defer(function(res, rej) {
-            _this.runChecks(type, node, options, context, res, rej);
-          });
+        checkQueue.defer(function(res, rej) {
+          _this.runChecks('any', node, options, res, rej);
+        });
+        checkQueue.defer(function(res, rej) {
+          _this.runChecks('all', node, options, res, rej);
+        });
+        checkQueue.defer(function(res, rej) {
+          _this.runChecks('none', node, options, res, rej);
         });
         checkQueue.then(function(results) {
-          var result = getResult(results);
-          if (result) {
-            result.node = new axe.utils.DqElement(node.actualNode, options);
-            ruleResult.nodes.push(result);
+          if (results.length) {
+            var hasResults = false, result = {};
+            results.forEach(function(r) {
+              var res = r.results.filter(function(result) {
+                return result;
+              });
+              result[r.type] = res;
+              if (res.length) {
+                hasResults = true;
+              }
+            });
+            if (hasResults) {
+              result.node = new axe.utils.DqElement(node.actualNode, options);
+              ruleResult.nodes.push(result);
+            }
           }
           resolveNode();
-        })['catch'](function(err) {
+        }).catch(function(err) {
           return rejectNode(err);
         });
       });
     });
-    q.defer(function(resolve) {
-      return setTimeout(resolve, 0);
-    });
-    if (options.performanceTimer) {
-      this._logRulePerformance();
-    }
     q.then(function() {
       return resolve(ruleResult);
-    })['catch'](function(error) {
+    }).catch(function(error) {
       return reject(error);
     });
   };
-  Rule.prototype.runSync = function(context) {
-    var _this2 = this;
-    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-    if (options.performanceTimer) {
-      this._trackPerformance();
-    }
-    var ruleResult = new RuleResult(this);
-    var nodes;
-    try {
-      nodes = this.gatherAndMatchNodes(context, options);
-    } catch (error) {
-      throw new SupportError({
-        cause: error,
-        ruleId: this.id
-      });
-    }
-    if (options.performanceTimer) {
-      this._logGatherPerformance(nodes);
-    }
-    nodes.forEach(function(node) {
-      var results = [];
-      [ 'any', 'all', 'none' ].forEach(function(type) {
-        results.push(_this2.runChecksSync(type, node, options, context));
-      });
-      var result = getResult(results);
-      if (result) {
-        result.node = node.actualNode ? new axe.utils.DqElement(node.actualNode, options) : null;
-        ruleResult.nodes.push(result);
-      }
-    });
-    if (options.performanceTimer) {
-      this._logRulePerformance();
-    }
-    return ruleResult;
-  };
-  Rule.prototype._trackPerformance = function() {
-    this._markStart = 'mark_rule_start_' + this.id;
-    this._markEnd = 'mark_rule_end_' + this.id;
-    this._markChecksStart = 'mark_runchecks_start_' + this.id;
-    this._markChecksEnd = 'mark_runchecks_end_' + this.id;
-  };
-  Rule.prototype._logGatherPerformance = function(nodes) {
-    axe.log('gather (', nodes.length, '):', axe.utils.performanceTimer.timeElapsed() + 'ms');
-    axe.utils.performanceTimer.mark(this._markChecksStart);
-  };
-  Rule.prototype._logRulePerformance = function() {
-    axe.utils.performanceTimer.mark(this._markChecksEnd);
-    axe.utils.performanceTimer.mark(this._markEnd);
-    axe.utils.performanceTimer.measure('runchecks_' + this.id, this._markChecksStart, this._markChecksEnd);
-    axe.utils.performanceTimer.measure('rule_' + this.id, this._markStart, this._markEnd);
-  };
-  function getResult(results) {
-    if (results.length) {
-      var hasResults = false, result = {};
-      results.forEach(function(r) {
-        var res = r.results.filter(function(result) {
-          return result;
-        });
-        result[r.type] = res;
-        if (res.length) {
-          hasResults = true;
-        }
-      });
-      if (hasResults) {
-        return result;
-      }
-      return null;
-    }
-  }
-  Rule.prototype.gatherAndMatchNodes = function(context, options) {
-    var _this3 = this;
-    var markMatchesStart = 'mark_matches_start_' + this.id;
-    var markMatchesEnd = 'mark_matches_end_' + this.id;
-    var nodes = this.gather(context, options);
-    if (options.performanceTimer) {
-      axe.utils.performanceTimer.mark(markMatchesStart);
-    }
-    nodes = nodes.filter(function(node) {
-      return _this3.matches(node.actualNode, node, context);
-    });
-    if (options.performanceTimer) {
-      axe.utils.performanceTimer.mark(markMatchesEnd);
-      axe.utils.performanceTimer.measure('rule_' + this.id + '#matches', markMatchesStart, markMatchesEnd);
-    }
-    return nodes;
-  };
   function findAfterChecks(rule) {
     'use strict';
     return axe.utils.getAllChecks(rule).map(function(c) {
@@ -3527,188 +697,6 @@
     }
   };
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
-  function _possibleConstructorReturn(self, call) {
-    if (call && (_typeof(call) === 'object' || typeof call === 'function')) {
-      return call;
-    }
-    return _assertThisInitialized(self);
-  }
-  function _getPrototypeOf(o) {
-    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
-      return o.__proto__ || Object.getPrototypeOf(o);
-    };
-    return _getPrototypeOf(o);
-  }
-  function _assertThisInitialized(self) {
-    if (self === void 0) {
-      throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');
-    }
-    return self;
-  }
-  function _inherits(subClass, superClass) {
-    if (typeof superClass !== 'function' && superClass !== null) {
-      throw new TypeError('Super expression must either be null or a function');
-    }
-    subClass.prototype = Object.create(superClass && superClass.prototype, {
-      constructor: {
-        value: subClass,
-        writable: true,
-        configurable: true
-      }
-    });
-    if (superClass) {
-      _setPrototypeOf(subClass, superClass);
-    }
-  }
-  function _setPrototypeOf(o, p) {
-    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
-      o.__proto__ = p;
-      return o;
-    };
-    return _setPrototypeOf(o, p);
-  }
-  function _classCallCheck(instance, Constructor) {
-    if (!(instance instanceof Constructor)) {
-      throw new TypeError('Cannot call a class as a function');
-    }
-  }
-  function _defineProperties(target, props) {
-    for (var i = 0; i < props.length; i++) {
-      var descriptor = props[i];
-      descriptor.enumerable = descriptor.enumerable || false;
-      descriptor.configurable = true;
-      if ('value' in descriptor) {
-        descriptor.writable = true;
-      }
-      Object.defineProperty(target, descriptor.key, descriptor);
-    }
-  }
-  function _createClass(Constructor, protoProps, staticProps) {
-    if (protoProps) {
-      _defineProperties(Constructor.prototype, protoProps);
-    }
-    if (staticProps) {
-      _defineProperties(Constructor, staticProps);
-    }
-    return Constructor;
-  }
-  var whitespaceRegex = /[\t\r\n\f]/g;
-  var AbstractVirtualNode = function() {
-    function AbstractVirtualNode() {
-      _classCallCheck(this, AbstractVirtualNode);
-      this.children = [];
-      this.parent = null;
-    }
-    _createClass(AbstractVirtualNode, [ {
-      key: 'hasClass',
-      value: function hasClass() {
-        throw new Error('VirtualNode class must have a "hasClass" function');
-      }
-    }, {
-      key: 'attr',
-      value: function attr() {
-        throw new Error('VirtualNode class must have a "attr" function');
-      }
-    }, {
-      key: 'hasAttr',
-      value: function hasAttr() {
-        throw new Error('VirtualNode class must have a "hasAttr" function');
-      }
-    }, {
-      key: 'props',
-      get: function get() {
-        throw new Error('VirtualNode class must have a "props" object consisting ' + 'of "nodeType" and "nodeName" properties');
-      }
-    } ]);
-    return AbstractVirtualNode;
-  }();
-  var VirtualNode = function(_AbstractVirtualNode) {
-    _inherits(VirtualNode, _AbstractVirtualNode);
-    function VirtualNode(node, parent, shadowId) {
-      var _this;
-      _classCallCheck(this, VirtualNode);
-      _this = _possibleConstructorReturn(this, _getPrototypeOf(VirtualNode).call(this));
-      _this.shadowId = shadowId;
-      _this.children = [];
-      _this.actualNode = node;
-      _this.parent = parent;
-      _this._isHidden = null;
-      _this._cache = {};
-      if (axe._cache.get('nodeMap')) {
-        axe._cache.get('nodeMap').set(node, _assertThisInitialized(_this));
-      }
-      return _this;
-    }
-    _createClass(VirtualNode, [ {
-      key: 'hasClass',
-      value: function hasClass(className) {
-        var classAttr = this.attr('class');
-        if (!classAttr) {
-          return false;
-        }
-        var selector = ' ' + className + ' ';
-        return (' ' + classAttr + ' ').replace(whitespaceRegex, ' ').indexOf(selector) >= 0;
-      }
-    }, {
-      key: 'attr',
-      value: function attr(attrName) {
-        if (typeof this.actualNode.getAttribute !== 'function') {
-          return null;
-        }
-        return this.actualNode.getAttribute(attrName);
-      }
-    }, {
-      key: 'hasAttr',
-      value: function hasAttr(attrName) {
-        if (typeof this.actualNode.hasAttribute !== 'function') {
-          return false;
-        }
-        return this.actualNode.hasAttribute(attrName);
-      }
-    }, {
-      key: 'props',
-      get: function get() {
-        var _this$actualNode = this.actualNode, nodeType = _this$actualNode.nodeType, nodeName = _this$actualNode.nodeName, id = _this$actualNode.id, type = _this$actualNode.type;
-        return {
-          nodeType: nodeType,
-          nodeName: nodeName.toLowerCase(),
-          id: id,
-          type: type
-        };
-      }
-    }, {
-      key: 'isFocusable',
-      get: function get() {
-        if (!this._cache.hasOwnProperty('isFocusable')) {
-          this._cache.isFocusable = axe.commons.dom.isFocusable(this.actualNode);
-        }
-        return this._cache.isFocusable;
-      }
-    }, {
-      key: 'tabbableElements',
-      get: function get() {
-        if (!this._cache.hasOwnProperty('tabbableElements')) {
-          this._cache.tabbableElements = axe.commons.dom.getTabbableElements(this);
-        }
-        return this._cache.tabbableElements;
-      }
-    } ]);
-    return VirtualNode;
-  }(AbstractVirtualNode);
-  axe.AbstractVirtualNode = AbstractVirtualNode;
-  'use strict';
   (function(axe) {
     var definitions = [ {
       name: 'NA',
@@ -3736,11 +724,7 @@
       results: [],
       resultGroups: [],
       resultGroupMap: {},
-      impact: Object.freeze([ 'minor', 'moderate', 'serious', 'critical' ]),
-      preload: Object.freeze({
-        assets: [ 'cssom' ],
-        timeout: 1e4
-      })
+      impact: Object.freeze([ 'minor', 'moderate', 'serious', 'critical' ])
     };
     definitions.forEach(function(definition) {
       var name = definition.name;
@@ -3766,18 +750,11 @@
     });
   })(axe);
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   axe.log = function() {
     'use strict';
     if ((typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log) {
@@ -3785,10 +762,42 @@
     }
   };
   'use strict';
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
+  axe.a11yCheck = function(context, options, callback) {
+    'use strict';
+    if (typeof options === 'function') {
+      callback = options;
+      options = {};
+    }
+    if (!options || (typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') {
+      options = {};
+    }
+    var audit = axe._audit;
+    if (!audit) {
+      throw new Error('No audit configured');
+    }
+    options.reporter = options.reporter || audit.reporter || 'v2';
+    if (options.performanceTimer) {
+      axe.utils.performanceTimer.start();
+    }
+    var reporter = axe.getReporter(options.reporter);
+    axe._runRules(context, options, function(results) {
+      var res = reporter(results, options, callback);
+      if (res !== undefined) {
+        if (options.performanceTimer) {
+          axe.utils.performanceTimer.end();
+        }
+        callback(res);
+      }
+    }, axe.log);
+  };
+  'use strict';
   function cleanupPlugins(resolve, reject) {
     'use strict';
-    resolve = resolve || function() {};
-    reject = reject || axe.log;
     if (!axe._audit) {
       throw new Error('No audit configured');
     }
@@ -3807,10 +816,9 @@
         }
       });
     });
-    var flattenedTree = axe.utils.getFlattenedTree(document.body);
-    axe.utils.querySelectorAll(flattenedTree, 'iframe, frame').forEach(function(node) {
+    axe.utils.toArray(document.querySelectorAll('frame, iframe')).forEach(function(frame) {
       q.defer(function(res, rej) {
-        return axe.utils.sendCommandToFrame(node.actualNode, {
+        return axe.utils.sendCommandToFrame(frame, {
           command: 'cleanup-plugin'
         }, res, rej);
       });
@@ -3821,7 +829,7 @@
       } else {
         reject(cleanupErrors);
       }
-    })['catch'](reject);
+    }).catch(reject);
   }
   axe.cleanup = cleanupPlugins;
   'use strict';
@@ -3840,20 +848,11 @@
         audit.addCheck(check);
       });
     }
-    var modifiedRules = [];
     if (spec.rules) {
       spec.rules.forEach(function(rule) {
-        modifiedRules.push(rule.id);
         audit.addRule(rule);
       });
     }
-    if (spec.disableOtherRules) {
-      audit.rules.forEach(function(rule) {
-        if (modifiedRules.includes(rule.id) === false) {
-          rule.enabled = false;
-        }
-      });
-    }
     if (typeof spec.branding !== 'undefined') {
       audit.setBranding(spec.branding);
     } else {
@@ -3862,9 +861,6 @@
     if (spec.tagExclude) {
       audit.tagExclude = spec.tagExclude;
     }
-    if (spec.locale) {
-      audit.applyLocale(spec.locale);
-    }
   }
   axe.configure = configureChecksRulesAndBranding;
   'use strict';
@@ -3899,16 +895,13 @@
       callback(err);
     };
     var context = data && data.context || {};
-    if (context.hasOwnProperty('include') && !context.include.length) {
+    if (context.include && !context.include.length) {
       context.include = [ document ];
     }
     var options = data && data.options || {};
     switch (data.command) {
      case 'rules':
-      return runRules(context, options, function(results, cleanup) {
-        resolve(results);
-        cleanup();
-      }, reject);
+      return runRules(context, options, resolve, reject);
 
      case 'cleanup-plugin':
       return cleanupPlugins(resolve, reject);
@@ -4001,19 +994,11 @@
   }
   axe.reset = resetConfiguration;
   'use strict';
-  function cleanup() {
-    axe._cache.clear();
-    axe._tree = undefined;
-    axe._selectorData = undefined;
-  }
   function runRules(context, options, resolve, reject) {
     'use strict';
     try {
       context = new Context(context);
-      axe._tree = context.flatTree;
-      axe._selectorData = axe.utils.getSelectorData(context.flatTree);
     } catch (e) {
-      cleanup();
       return reject(e);
     }
     var q = axe.utils.queue();
@@ -4026,24 +1011,23 @@
         axe.utils.collectResultsFromFrames(context, options, 'rules', null, res, rej);
       });
     }
-    var scrollState;
     q.defer(function(res, rej) {
       if (options.restoreScroll) {
-        scrollState = axe.utils.getScrollState();
+        var scrollState = axe.utils.getScrollState();
+        audit.run(context, options, res, rej);
+        axe.utils.setScrollState(scrollState);
+      } else {
+        audit.run(context, options, res, rej);
       }
-      audit.run(context, options, res, rej);
     });
     q.then(function(data) {
       try {
-        if (scrollState) {
-          axe.utils.setScrollState(scrollState);
-        }
         if (options.performanceTimer) {
           axe.utils.performanceTimer.auditEnd();
         }
-        var results = axe.utils.mergeResults(data.map(function(results) {
+        var results = axe.utils.mergeResults(data.map(function(d) {
           return {
-            results: results
+            results: d
           };
         }));
         if (context.initiator) {
@@ -4052,80 +1036,22 @@
           results = results.map(axe.utils.finalizeRuleResult);
         }
         try {
-          resolve(results, cleanup);
+          resolve(results);
         } catch (e) {
-          cleanup();
           axe.log(e);
         }
       } catch (e) {
-        cleanup();
         reject(e);
       }
-    })['catch'](function(e) {
-      cleanup();
-      reject(e);
-    });
+    }).catch(reject);
   }
   axe._runRules = runRules;
   'use strict';
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
-  axe.runVirtualRule = function(ruleId, vNode) {
-    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
-    options.reporter = options.reporter || axe._audit.reporter || 'v1';
-    axe._selectorData = {};
-    var rule = axe._audit.rules.find(function(rule) {
-      return rule.id === ruleId;
-    });
-    if (!rule) {
-      throw new Error('unknown rule `' + ruleId + '`');
-    }
-    rule = Object.create(rule, {
-      excludeHidden: {
-        value: false
-      }
-    });
-    var context = {
-      include: [ vNode ]
-    };
-    var rawResults = rule.runSync(context, options);
-    axe.utils.publishMetaData(rawResults);
-    axe.utils.finalizeRuleResult(rawResults);
-    var results = axe.utils.aggregateResult([ rawResults ]);
-    results.violations.forEach(function(result) {
-      return result.nodes.forEach(function(nodeResult) {
-        nodeResult.failureSummary = helpers.failureSummary(nodeResult);
-      });
-    });
-    return _extends({}, helpers.getEnvironmentData(), {}, results, {
-      toolOptions: options
-    });
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
   };
-  'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
   function isContext(potential) {
     'use strict';
     switch (true) {
@@ -4135,7 +1061,7 @@
      case NodeList && potential instanceof NodeList:
       return true;
 
-     case _typeof(potential) !== 'object':
+     case (typeof potential === 'undefined' ? 'undefined' : _typeof(potential)) !== 'object':
       return false;
 
      case potential.include !== undefined:
@@ -4159,7 +1085,7 @@
       options = context;
       context = document;
     }
-    if (_typeof(options) !== 'object') {
+    if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') {
       if (callback !== undefined) {
         throw typeErr;
       }
@@ -4188,18 +1114,17 @@
     if (options.performanceTimer) {
       axe.utils.performanceTimer.start();
     }
-    var p;
+    var p = void 0;
     var reject = noop;
     var resolve = noop;
-    if (typeof Promise === 'function' && callback === noop) {
+    if (window.Promise && callback === noop) {
       p = new Promise(function(_resolve, _reject) {
         reject = _reject;
         resolve = _resolve;
       });
     }
-    axe._runRules(context, options, function(rawResults, cleanup) {
+    axe._runRules(context, options, function(rawResults) {
       var respond = function respond(results) {
-        cleanup();
         try {
           callback(null, results);
         } catch (e) {
@@ -4217,7 +1142,6 @@
           respond(results);
         }
       } catch (err) {
-        cleanup();
         callback(err);
         reject(err);
       }
@@ -4248,47 +1172,16 @@
     }).join('\n\n');
   };
   'use strict';
-  helpers.getEnvironmentData = function getEnvironmentData() {
-    var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;
-    var _win$screen = win.screen, screen = _win$screen === void 0 ? {} : _win$screen, _win$navigator = win.navigator, navigator = _win$navigator === void 0 ? {} : _win$navigator, _win$location = win.location, location = _win$location === void 0 ? {} : _win$location, innerHeight = win.innerHeight, innerWidth = win.innerWidth;
-    var orientation = screen.msOrientation || screen.orientation || screen.mozOrientation || {};
-    return {
-      testEngine: {
-        name: 'axe-core',
-        version: axe.version
-      },
-      testRunner: {
-        name: axe._audit.brand
-      },
-      testEnvironment: {
-        userAgent: navigator.userAgent,
-        windowWidth: innerWidth,
-        windowHeight: innerHeight,
-        orientationAngle: orientation.angle,
-        orientationType: orientation.type
-      },
-      timestamp: new Date().toISOString(),
-      url: location.href
-    };
-  };
-  'use strict';
   helpers.incompleteFallbackMessage = function incompleteFallbackMessage() {
     'use strict';
     return axe._audit.data.incompleteFallbackMessage();
   };
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   function normalizeRelatedNodes(node, options) {
     'use strict';
     [ 'any', 'all', 'none' ].forEach(function(type) {
@@ -4319,14 +1212,9 @@
   var resultKeys = axe.constants.resultGroups;
   helpers.processAggregate = function(results, options) {
     var resultObject = axe.utils.aggregateResult(results);
+    resultObject.timestamp = new Date().toISOString();
+    resultObject.url = window.location.href;
     resultKeys.forEach(function(key) {
-      if (options.resultTypes && !options.resultTypes.includes(key)) {
-        (resultObject[key] || []).forEach(function(ruleResult) {
-          if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) {
-            ruleResult.nodes = [ ruleResult.nodes[0] ];
-          }
-        });
-      }
       resultObject[key] = (resultObject[key] || []).map(function(ruleResult) {
         ruleResult = Object.assign({}, ruleResult);
         if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) {
@@ -4360,135 +1248,46 @@
     return resultObject;
   };
   'use strict';
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
   axe.addReporter('na', function(results, options, callback) {
     'use strict';
-    console.warn('"na" reporter will be deprecated in axe v4.0. Use the "v2" reporter instead.');
     if (typeof options === 'function') {
       callback = options;
       options = {};
     }
     var out = helpers.processAggregate(results, options);
-    callback(_extends({}, helpers.getEnvironmentData(), {
-      toolOptions: options,
+    callback({
       violations: out.violations,
       passes: out.passes,
       incomplete: out.incomplete,
-      inapplicable: out.inapplicable
-    }));
+      inapplicable: out.inapplicable,
+      timestamp: out.timestamp,
+      url: out.url
+    });
   });
   'use strict';
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
   axe.addReporter('no-passes', function(results, options, callback) {
     'use strict';
     if (typeof options === 'function') {
       callback = options;
       options = {};
     }
-    options.resultTypes = [ 'violations' ];
     var out = helpers.processAggregate(results, options);
-    callback(_extends({}, helpers.getEnvironmentData(), {
-      toolOptions: options,
-      violations: out.violations
-    }));
+    callback({
+      violations: out.violations,
+      timestamp: out.timestamp,
+      url: out.url
+    });
   });
   'use strict';
-  axe.addReporter('rawEnv', function(results, options, callback) {
-    if (typeof options === 'function') {
-      callback = options;
-      options = {};
-    }
-    function rawCallback(raw) {
-      var env = helpers.getEnvironmentData();
-      callback({
-        raw: raw,
-        env: env
-      });
-    }
-    axe.getReporter('raw')(results, options, rawCallback);
-  });
-  'use strict';
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
   axe.addReporter('raw', function(results, options, callback) {
     'use strict';
     if (typeof options === 'function') {
       callback = options;
       options = {};
     }
-    if (!results || !Array.isArray(results)) {
-      return callback(results);
-    }
-    var transformedResults = results.map(function(result) {
-      var transformedResult = _extends({}, result);
-      var types = [ 'passes', 'violations', 'incomplete', 'inapplicable' ];
-      for (var _i = 0, _types = types; _i < _types.length; _i++) {
-        var type = _types[_i];
-        if (transformedResult[type] && Array.isArray(transformedResult[type])) {
-          transformedResult[type] = transformedResult[type].map(function(typeResult) {
-            return _extends({}, typeResult, {
-              node: typeResult.node.toJSON()
-            });
-          });
-        }
-      }
-      return transformedResult;
-    });
-    callback(transformedResults);
+    callback(results);
   });
   'use strict';
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
   axe.addReporter('v1', function(results, options, callback) {
     'use strict';
     if (typeof options === 'function') {
@@ -4501,29 +1300,16 @@
         nodeResult.failureSummary = helpers.failureSummary(nodeResult);
       });
     });
-    callback(_extends({}, helpers.getEnvironmentData(), {
-      toolOptions: options,
+    callback({
       violations: out.violations,
       passes: out.passes,
       incomplete: out.incomplete,
-      inapplicable: out.inapplicable
-    }));
+      inapplicable: out.inapplicable,
+      timestamp: out.timestamp,
+      url: out.url
+    });
   });
   'use strict';
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
   axe.addReporter('v2', function(results, options, callback) {
     'use strict';
     if (typeof options === 'function') {
@@ -4531,13 +1317,14 @@
       options = {};
     }
     var out = helpers.processAggregate(results, options);
-    callback(_extends({}, helpers.getEnvironmentData(), {
-      toolOptions: options,
+    callback({
       violations: out.violations,
       passes: out.passes,
       incomplete: out.incomplete,
-      inapplicable: out.inapplicable
-    }));
+      inapplicable: out.inapplicable,
+      timestamp: out.timestamp,
+      url: out.url
+    });
   }, true);
   'use strict';
   axe.utils.aggregate = function(map, values, initial) {
@@ -4551,7 +1338,6 @@
     return map[sorting.pop()];
   };
   'use strict';
-  var _axe$constants = axe.constants, CANTTELL_PRIO = _axe$constants.CANTTELL_PRIO, FAIL_PRIO = _axe$constants.FAIL_PRIO;
   var checkMap = [];
   checkMap[axe.constants.PASS_PRIO] = true;
   checkMap[axe.constants.CANTTELL_PRIO] = null;
@@ -4568,38 +1354,32 @@
   axe.utils.aggregateChecks = function(nodeResOriginal) {
     var nodeResult = Object.assign({}, nodeResOriginal);
     anyAllNone(nodeResult, function(check, type) {
-      var i = typeof check.result === 'undefined' ? -1 : checkMap.indexOf(check.result);
+      var i = checkMap.indexOf(check.result);
       check.priority = i !== -1 ? i : axe.constants.CANTTELL_PRIO;
       if (type === 'none') {
-        if (check.priority === axe.constants.PASS_PRIO) {
-          check.priority = axe.constants.FAIL_PRIO;
-        } else if (check.priority === axe.constants.FAIL_PRIO) {
-          check.priority = axe.constants.PASS_PRIO;
-        }
+        check.priority = 4 - check.priority;
       }
     });
-    var priorities = {
-      all: nodeResult.all.reduce(function(a, b) {
-        return Math.max(a, b.priority);
-      }, 0),
-      none: nodeResult.none.reduce(function(a, b) {
-        return Math.max(a, b.priority);
-      }, 0),
-      any: nodeResult.any.reduce(function(a, b) {
-        return Math.min(a, b.priority);
-      }, 4) % 4
-    };
-    nodeResult.priority = Math.max(priorities.all, priorities.none, priorities.any);
+    var priorities = anyAllNone(nodeResult, function(c) {
+      return c.priority;
+    });
+    nodeResult.priority = Math.max(priorities.all.reduce(function(a, b) {
+      return Math.max(a, b);
+    }, 0), priorities.none.reduce(function(a, b) {
+      return Math.max(a, b);
+    }, 0), priorities.any.reduce(function(a, b) {
+      return Math.min(a, b);
+    }, 4) % 4);
     var impacts = [];
     checkTypes.forEach(function(type) {
       nodeResult[type] = nodeResult[type].filter(function(check) {
-        return check.priority === nodeResult.priority && check.priority === priorities[type];
+        return check.priority === nodeResult.priority;
       });
       nodeResult[type].forEach(function(check) {
         return impacts.push(check.impact);
       });
     });
-    if ([ CANTTELL_PRIO, FAIL_PRIO ].includes(nodeResult.priority)) {
+    if (nodeResult.priority === axe.constants.FAIL_PRIO) {
       nodeResult.impact = axe.utils.aggregate(axe.constants.impact, impacts);
     } else {
       nodeResult.impact = null;
@@ -4613,49 +1393,6 @@
     return nodeResult;
   };
   'use strict';
-  (function() {
-    axe.utils.aggregateNodeResults = function(nodeResults) {
-      var ruleResult = {};
-      nodeResults = nodeResults.map(function(nodeResult) {
-        if (nodeResult.any && nodeResult.all && nodeResult.none) {
-          return axe.utils.aggregateChecks(nodeResult);
-        } else if (Array.isArray(nodeResult.node)) {
-          return axe.utils.finalizeRuleResult(nodeResult);
-        } else {
-          throw new TypeError('Invalid Result type');
-        }
-      });
-      if (nodeResults && nodeResults.length) {
-        var resultList = nodeResults.map(function(node) {
-          return node.result;
-        });
-        ruleResult.result = axe.utils.aggregate(axe.constants.results, resultList, ruleResult.result);
-      } else {
-        ruleResult.result = 'inapplicable';
-      }
-      axe.constants.resultGroups.forEach(function(group) {
-        return ruleResult[group] = [];
-      });
-      nodeResults.forEach(function(nodeResult) {
-        var groupName = axe.constants.resultGroupMap[nodeResult.result];
-        ruleResult[groupName].push(nodeResult);
-      });
-      var impactGroup = axe.constants.FAIL_GROUP;
-      if (ruleResult[impactGroup].length === 0) {
-        impactGroup = axe.constants.CANTTELL_GROUP;
-      }
-      if (ruleResult[impactGroup].length > 0) {
-        var impactList = ruleResult[impactGroup].map(function(failure) {
-          return failure.impact;
-        });
-        ruleResult.impact = axe.utils.aggregate(axe.constants.impact, impactList) || null;
-      } else {
-        ruleResult.impact = null;
-      }
-      return ruleResult;
-    };
-  })();
-  'use strict';
   function copyToGroup(resultObject, subResult, group) {
     var resultCopy = Object.assign({}, subResult);
     resultCopy.nodes = (resultCopy[group] || []).concat();
@@ -4685,6 +1422,42 @@
     return resultObject;
   };
   'use strict';
+  (function() {
+    axe.utils.aggregateRule = function(subResults) {
+      var ruleResult = {};
+      subResults = subResults.map(function(subResult) {
+        if (subResult.any && subResult.all && subResult.none) {
+          return axe.utils.aggregateChecks(subResult);
+        } else if (Array.isArray(subResult.node)) {
+          return axe.utils.finalizeRuleResult(subResult);
+        } else {
+          throw new TypeError('Invalid Result type');
+        }
+      });
+      var resultList = subResults.map(function(node) {
+        return node.result;
+      });
+      ruleResult.result = axe.utils.aggregate(axe.constants.results, resultList, ruleResult.result);
+      axe.constants.resultGroups.forEach(function(group) {
+        return ruleResult[group] = [];
+      });
+      subResults.forEach(function(subResult) {
+        var groupName = axe.constants.resultGroupMap[subResult.result];
+        ruleResult[groupName].push(subResult);
+      });
+      var failGroup = axe.constants.FAIL_GROUP;
+      if (ruleResult[failGroup].length > 0) {
+        var impactList = ruleResult[failGroup].map(function(failure) {
+          return failure.impact;
+        });
+        ruleResult.impact = axe.utils.aggregate(axe.constants.impact, impactList) || null;
+      } else {
+        ruleResult.impact = null;
+      }
+      return ruleResult;
+    };
+  })();
+  'use strict';
   function areStylesSet(el, styles, stopAt) {
     'use strict';
     var styl = window.getComputedStyle(el, null);
@@ -4715,7 +1488,7 @@
         this.isAsync = true;
         return function(result) {
           if (result instanceof Error === false) {
-            checkResult.result = result;
+            checkResult.value = result;
             resolve(checkResult);
           } else {
             reject(result);
@@ -4734,22 +1507,15 @@
     };
   };
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   axe.utils.clone = function(obj) {
     'use strict';
     var index, length, out = obj;
-    if (obj !== null && _typeof(obj) === 'object') {
+    if (obj !== null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object') {
       if (Array.isArray(obj)) {
         out = [];
         for (index = 0, length = obj.length; index < length; index++) {
@@ -4767,11 +1533,7 @@
   'use strict';
   function err(message, node) {
     'use strict';
-    var selector;
-    if (axe._tree) {
-      selector = axe.utils.getSelector(node);
-    }
-    return new Error(message + ': ' + (selector || node));
+    return new Error(message + ': ' + axe.utils.getSelector(node));
   }
   axe.utils.sendCommandToFrame = function(node, parameters, resolve, reject) {
     'use strict';
@@ -4783,19 +1545,20 @@
     }
     var timeout = setTimeout(function() {
       timeout = setTimeout(function() {
+        var errMsg = err('No response from frame', node);
         if (!parameters.debug) {
+          axe.log(errMsg);
           resolve(null);
         } else {
-          reject(err('No response from frame', node));
+          reject(errMsg);
         }
       }, 0);
     }, 500);
     axe.utils.respondable(win, 'axe.ping', null, undefined, function() {
       clearTimeout(timeout);
-      var frameWaitTime = parameters.options && parameters.options.frameWaitTime || 6e4;
       timeout = setTimeout(function() {
         reject(err('Axe in frame timed out', node));
-      }, frameWaitTime);
+      }, 3e4);
       axe.utils.respondable(win, 'axe.start', parameters, undefined, function(data) {
         clearTimeout(timeout);
         if (data instanceof Error === false) {
@@ -4838,43 +1601,611 @@
     });
     q.then(function(data) {
       resolve(axe.utils.mergeResults(data, options));
-    })['catch'](reject);
+    }).catch(reject);
   }
   axe.utils.collectResultsFromFrames = collectResultsFromFrames;
   'use strict';
-  axe.utils.contains = function(vNode, otherVNode) {
+  axe.utils.contains = function(node, otherNode) {
     'use strict';
-    function containsShadowChild(vNode, otherVNode) {
-      if (vNode.shadowId === otherVNode.shadowId) {
+    function containsShadowChild(node, otherNode) {
+      if (node.shadowId === otherNode.shadowId) {
         return true;
       }
-      return !!vNode.children.find(function(child) {
-        return containsShadowChild(child, otherVNode);
+      return !!node.children.find(function(child) {
+        return containsShadowChild(child, otherNode);
       });
     }
-    if (vNode.shadowId || otherVNode.shadowId) {
-      return containsShadowChild(vNode, otherVNode);
+    if (node.shadowId || otherNode.shadowId) {
+      return containsShadowChild(node, otherNode);
     }
-    if (vNode.actualNode) {
-      if (typeof vNode.actualNode.contains === 'function') {
-        return vNode.actualNode.contains(otherVNode.actualNode);
-      }
-      return !!(vNode.actualNode.compareDocumentPosition(otherVNode.actualNode) & 16);
-    } else {
-      do {
-        if (otherVNode === vNode) {
-          return true;
-        }
-      } while (otherVNode = otherVNode && otherVNode.parent);
+    if (typeof node.actualNode.contains === 'function') {
+      return node.actualNode.contains(otherNode.actualNode);
     }
-    return false;
+    return !!(node.actualNode.compareDocumentPosition(otherNode.actualNode) & 16);
   };
   'use strict';
   (function(axe) {
-    var parser = new axe.imports.CssSelectorParser();
-    parser.registerSelectorPseudos('not');
+    /*!
+  * The copyright below covers the code within this function block only
+  *
+  * Copyright (c) 2013 Dulin Marat
+  * 
+  * Permission is hereby granted, free of charge, to any person obtaining a copy
+  * of this software and associated documentation files (the "Software"), to deal
+  * in the Software without restriction, including without limitation the rights
+  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  * copies of the Software, and to permit persons to whom the Software is
+  * furnished to do so, subject to the following conditions:
+  * 
+  * The above copyright notice and this permission notice shall be included in
+  * all copies or substantial portions of the Software.
+  * 
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  * THE SOFTWARE.
+  */
+    function CssSelectorParser() {
+      this.pseudos = {};
+      this.attrEqualityMods = {};
+      this.ruleNestingOperators = {};
+      this.substitutesEnabled = false;
+    }
+    CssSelectorParser.prototype.registerSelectorPseudos = function(name) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        name = arguments[j];
+        this.pseudos[name] = 'selector';
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.unregisterSelectorPseudos = function(name) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        name = arguments[j];
+        delete this.pseudos[name];
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.registerNumericPseudos = function(name) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        name = arguments[j];
+        this.pseudos[name] = 'numeric';
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.unregisterNumericPseudos = function(name) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        name = arguments[j];
+        delete this.pseudos[name];
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.registerNestingOperators = function(operator) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        operator = arguments[j];
+        this.ruleNestingOperators[operator] = true;
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.unregisterNestingOperators = function(operator) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        operator = arguments[j];
+        delete this.ruleNestingOperators[operator];
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.registerAttrEqualityMods = function(mod) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        mod = arguments[j];
+        this.attrEqualityMods[mod] = true;
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.unregisterAttrEqualityMods = function(mod) {
+      for (var j = 0, len = arguments.length; j < len; j++) {
+        mod = arguments[j];
+        delete this.attrEqualityMods[mod];
+      }
+      return this;
+    };
+    CssSelectorParser.prototype.enableSubstitutes = function() {
+      this.substitutesEnabled = true;
+      return this;
+    };
+    CssSelectorParser.prototype.disableSubstitutes = function() {
+      this.substitutesEnabled = false;
+      return this;
+    };
+    function isIdentStart(c) {
+      return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c === '-' || c === '_';
+    }
+    function isIdent(c) {
+      return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c === '-' || c === '_';
+    }
+    function isHex(c) {
+      return c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= '0' && c <= '9';
+    }
+    function isDecimal(c) {
+      return c >= '0' && c <= '9';
+    }
+    function isAttrMatchOperator(chr) {
+      return chr === '=' || chr === '^' || chr === '$' || chr === '*' || chr === '~';
+    }
+    var identSpecialChars = {
+      '!': true,
+      '"': true,
+      '#': true,
+      $: true,
+      '%': true,
+      '&': true,
+      '\'': true,
+      '(': true,
+      ')': true,
+      '*': true,
+      '+': true,
+      ',': true,
+      '.': true,
+      '/': true,
+      ';': true,
+      '<': true,
+      '=': true,
+      '>': true,
+      '?': true,
+      '@': true,
+      '[': true,
+      '\\': true,
+      ']': true,
+      '^': true,
+      '`': true,
+      '{': true,
+      '|': true,
+      '}': true,
+      '~': true
+    };
+    var strReplacementsRev = {
+      '\n': '\\n',
+      '\r': '\\r',
+      '\t': '\\t',
+      '\f': '\\f',
+      '\v': '\\v'
+    };
+    var singleQuoteEscapeChars = {
+      n: '\n',
+      r: '\r',
+      t: '\t',
+      f: '\f',
+      '\\': '\\',
+      '\'': '\''
+    };
+    var doubleQuotesEscapeChars = {
+      n: '\n',
+      r: '\r',
+      t: '\t',
+      f: '\f',
+      '\\': '\\',
+      '"': '"'
+    };
+    function ParseContext(str, pos, pseudos, attrEqualityMods, ruleNestingOperators, substitutesEnabled) {
+      var chr, getIdent, getStr, l, skipWhitespace;
+      l = str.length;
+      chr = null;
+      getStr = function getStr(quote, escapeTable) {
+        var esc, hex, result;
+        result = '';
+        pos++;
+        chr = str.charAt(pos);
+        while (pos < l) {
+          if (chr === quote) {
+            pos++;
+            return result;
+          } else if (chr === '\\') {
+            pos++;
+            chr = str.charAt(pos);
+            if (chr === quote) {
+              result += quote;
+            } else if (esc = escapeTable[chr]) {
+              result += esc;
+            } else if (isHex(chr)) {
+              hex = chr;
+              pos++;
+              chr = str.charAt(pos);
+              while (isHex(chr)) {
+                hex += chr;
+                pos++;
+                chr = str.charAt(pos);
+              }
+              if (chr === ' ') {
+                pos++;
+                chr = str.charAt(pos);
+              }
+              result += String.fromCharCode(parseInt(hex, 16));
+              continue;
+            } else {
+              result += chr;
+            }
+          } else {
+            result += chr;
+          }
+          pos++;
+          chr = str.charAt(pos);
+        }
+        return result;
+      };
+      getIdent = function getIdent() {
+        var result = '';
+        chr = str.charAt(pos);
+        while (pos < l) {
+          if (isIdent(chr)) {
+            result += chr;
+          } else if (chr === '\\') {
+            pos++;
+            if (pos >= l) {
+              throw Error('Expected symbol but end of file reached.');
+            }
+            chr = str.charAt(pos);
+            if (identSpecialChars[chr]) {
+              result += chr;
+            } else if (isHex(chr)) {
+              var hex = chr;
+              pos++;
+              chr = str.charAt(pos);
+              while (isHex(chr)) {
+                hex += chr;
+                pos++;
+                chr = str.charAt(pos);
+              }
+              if (chr === ' ') {
+                pos++;
+                chr = str.charAt(pos);
+              }
+              result += String.fromCharCode(parseInt(hex, 16));
+              continue;
+            } else {
+              result += chr;
+            }
+          } else {
+            return result;
+          }
+          pos++;
+          chr = str.charAt(pos);
+        }
+        return result;
+      };
+      skipWhitespace = function skipWhitespace() {
+        chr = str.charAt(pos);
+        var result = false;
+        while (chr === ' ' || chr === '\t' || chr === '\n' || chr === '\r' || chr === '\f') {
+          result = true;
+          pos++;
+          chr = str.charAt(pos);
+        }
+        return result;
+      };
+      this.parse = function() {
+        var res = this.parseSelector();
+        if (pos < l) {
+          throw Error('Rule expected but "' + str.charAt(pos) + '" found.');
+        }
+        return res;
+      };
+      this.parseSelector = function() {
+        var res;
+        var selector = res = this.parseSingleSelector();
+        chr = str.charAt(pos);
+        while (chr === ',') {
+          pos++;
+          skipWhitespace();
+          if (res.type !== 'selectors') {
+            res = {
+              type: 'selectors',
+              selectors: [ selector ]
+            };
+          }
+          selector = this.parseSingleSelector();
+          if (!selector) {
+            throw Error('Rule expected after ",".');
+          }
+          res.selectors.push(selector);
+        }
+        return res;
+      };
+      this.parseSingleSelector = function() {
+        skipWhitespace();
+        var selector = {
+          type: 'ruleSet'
+        };
+        var rule = this.parseRule();
+        if (!rule) {
+          return null;
+        }
+        var currentRule = selector;
+        while (rule) {
+          rule.type = 'rule';
+          currentRule.rule = rule;
+          currentRule = rule;
+          skipWhitespace();
+          chr = str.charAt(pos);
+          if (pos >= l || chr === ',' || chr === ')') {
+            break;
+          }
+          if (ruleNestingOperators[chr]) {
+            var op = chr;
+            pos++;
+            skipWhitespace();
+            rule = this.parseRule();
+            if (!rule) {
+              throw Error('Rule expected after "' + op + '".');
+            }
+            rule.nestingOperator = op;
+          } else {
+            rule = this.parseRule();
+            if (rule) {
+              rule.nestingOperator = null;
+            }
+          }
+        }
+        return selector;
+      };
+      this.parseRule = function() {
+        var rule = null;
+        while (pos < l) {
+          chr = str.charAt(pos);
+          if (chr === '*') {
+            pos++;
+            (rule = rule || {}).tagName = '*';
+          } else if (isIdentStart(chr) || chr === '\\') {
+            (rule = rule || {}).tagName = getIdent();
+          } else if (chr === '.') {
+            pos++;
+            rule = rule || {};
+            (rule.classNames = rule.classNames || []).push(getIdent());
+          } else if (chr === '#') {
+            pos++;
+            (rule = rule || {}).id = getIdent();
+          } else if (chr === '[') {
+            pos++;
+            skipWhitespace();
+            var attr = {
+              name: getIdent()
+            };
+            skipWhitespace();
+            if (chr === ']') {
+              pos++;
+            } else {
+              var operator = '';
+              if (attrEqualityMods[chr]) {
+                operator = chr;
+                pos++;
+                chr = str.charAt(pos);
+              }
+              if (pos >= l) {
+                throw Error('Expected "=" but end of file reached.');
+              }
+              if (chr !== '=') {
+                throw Error('Expected "=" but "' + chr + '" found.');
+              }
+              attr.operator = operator + '=';
+              pos++;
+              skipWhitespace();
+              var attrValue = '';
+              attr.valueType = 'string';
+              if (chr === '"') {
+                attrValue = getStr('"', doubleQuotesEscapeChars);
+              } else if (chr === '\'') {
+                attrValue = getStr('\'', singleQuoteEscapeChars);
+              } else if (substitutesEnabled && chr === '$') {
+                pos++;
+                attrValue = getIdent();
+                attr.valueType = 'substitute';
+              } else {
+                while (pos < l) {
+                  if (chr === ']') {
+                    break;
+                  }
+                  attrValue += chr;
+                  pos++;
+                  chr = str.charAt(pos);
+                }
+                attrValue = attrValue.trim();
+              }
+              skipWhitespace();
+              if (pos >= l) {
+                throw Error('Expected "]" but end of file reached.');
+              }
+              if (chr !== ']') {
+                throw Error('Expected "]" but "' + chr + '" found.');
+              }
+              pos++;
+              attr.value = attrValue;
+            }
+            rule = rule || {};
+            (rule.attrs = rule.attrs || []).push(attr);
+          } else if (chr === ':') {
+            pos++;
+            var pseudoName = getIdent();
+            var pseudo = {
+              name: pseudoName
+            };
+            if (chr === '(') {
+              pos++;
+              var value = '';
+              skipWhitespace();
+              if (pseudos[pseudoName] === 'selector') {
+                pseudo.valueType = 'selector';
+                value = this.parseSelector();
+              } else {
+                pseudo.valueType = pseudos[pseudoName] || 'string';
+                if (chr === '"') {
+                  value = getStr('"', doubleQuotesEscapeChars);
+                } else if (chr === '\'') {
+                  value = getStr('\'', singleQuoteEscapeChars);
+                } else if (substitutesEnabled && chr === '$') {
+                  pos++;
+                  value = getIdent();
+                  pseudo.valueType = 'substitute';
+                } else {
+                  while (pos < l) {
+                    if (chr === ')') {
+                      break;
+                    }
+                    value += chr;
+                    pos++;
+                    chr = str.charAt(pos);
+                  }
+                  value = value.trim();
+                }
+                skipWhitespace();
+              }
+              if (pos >= l) {
+                throw Error('Expected ")" but end of file reached.');
+              }
+              if (chr !== ')') {
+                throw Error('Expected ")" but "' + chr + '" found.');
+              }
+              pos++;
+              pseudo.value = value;
+            }
+            rule = rule || {};
+            (rule.pseudos = rule.pseudos || []).push(pseudo);
+          } else {
+            break;
+          }
+        }
+        return rule;
+      };
+      return this;
+    }
+    CssSelectorParser.prototype.parse = function(str) {
+      var context = new ParseContext(str, 0, this.pseudos, this.attrEqualityMods, this.ruleNestingOperators, this.substitutesEnabled);
+      return context.parse();
+    };
+    CssSelectorParser.prototype.escapeIdentifier = function(s) {
+      var result = '';
+      var i = 0;
+      var len = s.length;
+      while (i < len) {
+        var chr = s.charAt(i);
+        if (identSpecialChars[chr]) {
+          result += '\\' + chr;
+        } else {
+          if (!(chr === '_' || chr === '-' || chr >= 'A' && chr <= 'Z' || chr >= 'a' && chr <= 'z' || i !== 0 && chr >= '0' && chr <= '9')) {
+            var charCode = chr.charCodeAt(0);
+            if ((charCode & 63488) === 55296) {
+              var extraCharCode = s.charCodeAt(i++);
+              if ((charCode & 64512) !== 55296 || (extraCharCode & 64512) !== 56320) {
+                throw Error('UCS-2(decode): illegal sequence');
+              }
+              charCode = ((charCode & 1023) << 10) + (extraCharCode & 1023) + 65536;
+            }
+            result += '\\' + charCode.toString(16) + ' ';
+          } else {
+            result += chr;
+          }
+        }
+        i++;
+      }
+      return result;
+    };
+    CssSelectorParser.prototype.escapeStr = function(s) {
+      var result = '';
+      var i = 0;
+      var len = s.length;
+      var chr, replacement;
+      while (i < len) {
+        chr = s.charAt(i);
+        if (chr === '"') {
+          chr = '\\"';
+        } else if (chr === '\\') {
+          chr = '\\\\';
+        } else if (replacement = strReplacementsRev[chr]) {
+          chr = replacement;
+        }
+        result += chr;
+        i++;
+      }
+      return '"' + result + '"';
+    };
+    CssSelectorParser.prototype.render = function(path) {
+      return this._renderEntity(path).trim();
+    };
+    CssSelectorParser.prototype._renderEntity = function(entity) {
+      var currentEntity, parts, res;
+      res = '';
+      switch (entity.type) {
+       case 'ruleSet':
+        currentEntity = entity.rule;
+        parts = [];
+        while (currentEntity) {
+          if (currentEntity.nestingOperator) {
+            parts.push(currentEntity.nestingOperator);
+          }
+          parts.push(this._renderEntity(currentEntity));
+          currentEntity = currentEntity.rule;
+        }
+        res = parts.join(' ');
+        break;
+
+       case 'selectors':
+        res = entity.selectors.map(this._renderEntity, this).join(', ');
+        break;
+
+       case 'rule':
+        if (entity.tagName) {
+          if (entity.tagName === '*') {
+            res = '*';
+          } else {
+            res = this.escapeIdentifier(entity.tagName);
+          }
+        }
+        if (entity.id) {
+          res += '#' + this.escapeIdentifier(entity.id);
+        }
+        if (entity.classNames) {
+          res += entity.classNames.map(function(cn) {
+            return '.' + this.escapeIdentifier(cn);
+          }, this).join('');
+        }
+        if (entity.attrs) {
+          res += entity.attrs.map(function(attr) {
+            if (attr.operator) {
+              if (attr.valueType === 'substitute') {
+                return '[' + this.escapeIdentifier(attr.name) + attr.operator + '$' + attr.value + ']';
+              } else {
+                return '[' + this.escapeIdentifier(attr.name) + attr.operator + this.escapeStr(attr.value) + ']';
+              }
+            } else {
+              return '[' + this.escapeIdentifier(attr.name) + ']';
+            }
+          }, this).join('');
+        }
+        if (entity.pseudos) {
+          res += entity.pseudos.map(function(pseudo) {
+            if (pseudo.valueType) {
+              if (pseudo.valueType === 'selector') {
+                return ':' + this.escapeIdentifier(pseudo.name) + '(' + this._renderEntity(pseudo.value) + ')';
+              } else if (pseudo.valueType === 'substitute') {
+                return ':' + this.escapeIdentifier(pseudo.name) + '($' + pseudo.value + ')';
+              } else if (pseudo.valueType === 'numeric') {
+                return ':' + this.escapeIdentifier(pseudo.name) + '(' + pseudo.value + ')';
+              } else {
+                return ':' + this.escapeIdentifier(pseudo.name) + '(' + this.escapeIdentifier(pseudo.value) + ')';
+              }
+            } else {
+              return ':' + this.escapeIdentifier(pseudo.name);
+            }
+          }, this).join('');
+        }
+        break;
+
+       default:
+        throw Error('Unknown entity type: "' + entity.type(+'".'));
+      }
+      return res;
+    };
+    var parser = new CssSelectorParser();
     parser.registerNestingOperators('>');
-    parser.registerAttrEqualityMods('^', '$', '*');
     axe.utils.cssParser = parser;
   })(axe);
   'use strict';
@@ -4936,23 +2267,20 @@
   axe.utils.matchesSelector = function() {
     'use strict';
     var method;
-    function getMethod(node) {
-      var index, candidate, candidates = [ 'matches', 'matchesSelector', 'mozMatchesSelector', 'webkitMatchesSelector', 'msMatchesSelector' ], length = candidates.length;
+    function getMethod(win) {
+      var index, candidate, elProto = win.Element.prototype, candidates = [ 'matches', 'matchesSelector', 'mozMatchesSelector', 'webkitMatchesSelector', 'msMatchesSelector' ], length = candidates.length;
       for (index = 0; index < length; index++) {
         candidate = candidates[index];
-        if (node[candidate]) {
+        if (elProto[candidate]) {
           return candidate;
         }
       }
     }
     return function(node, selector) {
       if (!method || !node[method]) {
-        method = getMethod(node);
+        method = getMethod(node.ownerDocument.defaultView);
       }
-      if (node[method]) {
-        return node[method](selector);
-      }
-      return false;
+      return node[method](selector);
     };
   }();
   'use strict';
@@ -4967,14 +2295,13 @@
     while (++index < length) {
       codeUnit = string.charCodeAt(index);
       if (codeUnit == 0) {
-        result += '�';
-        continue;
+        throw new Error('INVALID_CHARACTER_ERR');
       }
-      if (codeUnit >= 1 && codeUnit <= 31 || codeUnit == 127 || index == 0 && codeUnit >= 48 && codeUnit <= 57 || index == 1 && codeUnit >= 48 && codeUnit <= 57 && firstCodeUnit == 45) {
+      if (codeUnit >= 1 && codeUnit <= 31 || codeUnit >= 127 && codeUnit <= 159 || index == 0 && codeUnit >= 48 && codeUnit <= 57 || index == 1 && codeUnit >= 48 && codeUnit <= 57 && firstCodeUnit == 45) {
         result += '\\' + codeUnit.toString(16) + ' ';
         continue;
       }
-      if (index == 0 && length == 1 && codeUnit == 45) {
+      if (index == 1 && codeUnit == 45 && firstCodeUnit == 45) {
         result += '\\' + string.charAt(index);
         continue;
       }
@@ -5000,27 +2327,20 @@
   };
   'use strict';
   axe.utils.finalizeRuleResult = function(ruleResult) {
-    Object.assign(ruleResult, axe.utils.aggregateNodeResults(ruleResult.nodes));
+    Object.assign(ruleResult, axe.utils.aggregateRule(ruleResult.nodes));
     delete ruleResult.nodes;
     return ruleResult;
   };
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   axe.utils.findBy = function(array, key, value) {
     if (Array.isArray(array)) {
       return array.find(function(obj) {
-        return _typeof(obj) === 'object' && obj[key] === value;
+        return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj[key] === value;
       });
     }
   };
@@ -5028,6 +2348,13 @@
   var axe = axe || {
     utils: {}
   };
+  function virtualDOMfromNode(node, shadowId) {
+    return {
+      shadowId: shadowId,
+      children: [],
+      actualNode: node
+    };
+  }
   function getSlotChildren(node) {
     var retVal = [];
     node = node.firstChild;
@@ -5037,10 +2364,10 @@
     }
     return retVal;
   }
-  function flattenTree(node, shadowId, parent) {
+  axe.utils.getFlattenedTree = function(node, shadowId) {
     var retVal, realArray, nodeName;
-    function reduceShadowDOM(res, child, parent) {
-      var replacements = flattenTree(child, shadowId, parent);
+    function reduceShadowDOM(res, child) {
+      var replacements = axe.utils.getFlattenedTree(child, shadowId);
       if (replacements) {
         res = res.concat(replacements);
       }
@@ -5050,59 +2377,59 @@
       node = node.documentElement;
     }
     nodeName = node.nodeName.toLowerCase();
-    if (axe.utils.isShadowRoot(node)) {
-      retVal = new VirtualNode(node, parent, shadowId);
+    if (node.shadowRoot && nodeName !== 'marquee') {
+      retVal = virtualDOMfromNode(node, shadowId);
       shadowId = 'a' + Math.random().toString().substring(2);
       realArray = Array.from(node.shadowRoot.childNodes);
-      retVal.children = realArray.reduce(function(res, child) {
-        return reduceShadowDOM(res, child, retVal);
-      }, []);
+      retVal.children = realArray.reduce(reduceShadowDOM, []);
       return [ retVal ];
     } else {
-      if (nodeName === 'content' && typeof node.getDistributedNodes === 'function') {
+      if (nodeName === 'content') {
         realArray = Array.from(node.getDistributedNodes());
-        return realArray.reduce(function(res, child) {
-          return reduceShadowDOM(res, child, parent);
-        }, []);
-      } else if (nodeName === 'slot' && typeof node.assignedNodes === 'function') {
+        return realArray.reduce(reduceShadowDOM, []);
+      } else if (nodeName === 'slot') {
         realArray = Array.from(node.assignedNodes());
         if (!realArray.length) {
           realArray = getSlotChildren(node);
         }
         var styl = window.getComputedStyle(node);
         if (false && styl.display !== 'contents') {
-          retVal = new VirtualNode(node, parent, shadowId);
-          retVal.children = realArray.reduce(function(res, child) {
-            return reduceShadowDOM(res, child, retVal);
-          }, []);
+          retVal = virtualDOMfromNode(node, shadowId);
+          retVal.children = realArray.reduce(reduceShadowDOM, []);
           return [ retVal ];
         } else {
-          return realArray.reduce(function(res, child) {
-            return reduceShadowDOM(res, child, parent);
-          }, []);
+          return realArray.reduce(reduceShadowDOM, []);
         }
       } else {
         if (node.nodeType === 1) {
-          retVal = new VirtualNode(node, parent, shadowId);
+          retVal = virtualDOMfromNode(node, shadowId);
           realArray = Array.from(node.childNodes);
-          retVal.children = realArray.reduce(function(res, child) {
-            return reduceShadowDOM(res, child, retVal);
-          }, []);
+          retVal.children = realArray.reduce(reduceShadowDOM, []);
           return [ retVal ];
         } else if (node.nodeType === 3) {
-          return [ new VirtualNode(node, parent) ];
+          return [ virtualDOMfromNode(node) ];
         }
         return undefined;
       }
     }
-  }
-  axe.utils.getFlattenedTree = function(node, shadowId) {
-    axe._cache.set('nodeMap', new WeakMap());
-    return flattenTree(node, shadowId);
   };
   axe.utils.getNodeFromTree = function(vNode, node) {
-    var el = node || vNode;
-    return axe._cache.get('nodeMap') ? axe._cache.get('nodeMap').get(el) : null;
+    var found;
+    if (vNode.actualNode === node) {
+      return vNode;
+    }
+    vNode.children.forEach(function(candidate) {
+      var retVal;
+      if (candidate.actualNode === node) {
+        found = candidate;
+      } else {
+        retVal = axe.utils.getNodeFromTree(candidate, node);
+        if (retVal) {
+          found = retVal;
+        }
+      }
+    });
+    return found;
   };
   'use strict';
   axe.utils.getAllChecks = function getAllChecks(object) {
@@ -5111,13 +2438,6 @@
     return result.concat(object.any || []).concat(object.all || []).concat(object.none || []);
   };
   'use strict';
-  axe.utils.getBaseLang = function getBaseLang(lang) {
-    if (!lang) {
-      return '';
-    }
-    return lang.trim().split('-')[0].toLowerCase();
-  };
-  'use strict';
   axe.utils.getCheckOption = function(check, ruleID, options) {
     var ruleCheckOption = ((options.rules && options.rules[ruleID] || {}).checks || {})[check.id];
     var checkOption = (options.checks || {})[check.id];
@@ -5146,45 +2466,45 @@
     };
   };
   'use strict';
-  function _slicedToArray(arr, i) {
-    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
-  }
-  function _nonIterableRest() {
-    throw new TypeError('Invalid attempt to destructure non-iterable instance');
-  }
-  function _iterableToArrayLimit(arr, i) {
-    var _arr = [];
-    var _n = true;
-    var _d = false;
-    var _e = undefined;
-    try {
-      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
-        _arr.push(_s.value);
-        if (i && _arr.length === i) {
-          break;
-        }
-      }
-    } catch (err) {
-      _d = true;
-      _e = err;
-    } finally {
+  var _slicedToArray = function() {
+    function sliceIterator(arr, i) {
+      var _arr = [];
+      var _n = true;
+      var _d = false;
+      var _e = undefined;
       try {
-        if (!_n && _i['return'] != null) {
-          _i['return']();
+        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
+          _arr.push(_s.value);
+          if (i && _arr.length === i) {
+            break;
+          }
         }
+      } catch (err) {
+        _d = true;
+        _e = err;
       } finally {
-        if (_d) {
-          throw _e;
+        try {
+          if (!_n && _i['return']) {
+            _i['return']();
+          }
+        } finally {
+          if (_d) {
+            throw _e;
+          }
         }
       }
+      return _arr;
     }
-    return _arr;
-  }
-  function _arrayWithHoles(arr) {
-    if (Array.isArray(arr)) {
-      return arr;
-    }
-  }
+    return function(arr, i) {
+      if (Array.isArray(arr)) {
+        return arr;
+      } else if (Symbol.iterator in Object(arr)) {
+        return sliceIterator(arr, i);
+      } else {
+        throw new TypeError('Invalid attempt to destructure non-iterable instance');
+      }
+    };
+  }();
   function isMostlyNumbers() {
     var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
     return str.length !== 0 && (str.match(/[0-9]/g) || '').length >= str.length / 2;
@@ -5192,9 +2512,6 @@
   function splitString(str, splitIndex) {
     return [ str.substring(0, splitIndex), str.substring(splitIndex) ];
   }
-  function trimRight(str) {
-    return str.replace(/\s+$/, '');
-  }
   function uriParser(url) {
     var original = url;
     var protocol = '', domain = '', port = '', path = '', query = '', hash = '';
@@ -5252,168 +2569,61 @@
     if (uri.length <= 1 || uri.substr(0, 5) === 'data:' || uri.substr(0, 11) === 'javascript:' || uri.includes('?')) {
       return;
     }
-    var currentDomain = options.currentDomain, _options$maxLength = options.maxLength, maxLength = _options$maxLength === void 0 ? 25 : _options$maxLength;
+    var currentDomain = options.currentDomain, _options$maxLength = options.maxLength, maxLength = _options$maxLength === undefined ? 25 : _options$maxLength;
     var _uriParser = uriParser(uri), path = _uriParser.path, domain = _uriParser.domain, hash = _uriParser.hash;
     var pathEnd = path.substr(path.substr(0, path.length - 2).lastIndexOf('/') + 1);
     if (hash) {
       if (pathEnd && (pathEnd + hash).length <= maxLength) {
-        return trimRight(pathEnd + hash);
+        return pathEnd + hash;
       } else if (pathEnd.length < 2 && hash.length > 2 && hash.length <= maxLength) {
-        return trimRight(hash);
+        return hash;
       } else {
         return;
       }
     } else if (domain && domain.length < maxLength && path.length <= 1) {
-      return trimRight(domain + path);
+      return domain + path;
     }
     if (path === '/' + pathEnd && domain && currentDomain && domain !== currentDomain && (domain + path).length <= maxLength) {
-      return trimRight(domain + path);
+      return domain + path;
     }
     var lastDotIndex = pathEnd.lastIndexOf('.');
     if ((lastDotIndex === -1 || lastDotIndex > 1) && (lastDotIndex !== -1 || pathEnd.length > 2) && pathEnd.length <= maxLength && !pathEnd.match(/index(\.[a-zA-Z]{2-4})?/) && !isMostlyNumbers(pathEnd)) {
-      return trimRight(pathEnd);
+      return pathEnd;
     }
   };
   'use strict';
-  axe.utils.getNodeAttributes = function getNodeAttributes(node) {
-    if (node.attributes instanceof window.NamedNodeMap) {
-      return node.attributes;
-    }
-    return node.cloneNode(false).attributes;
-  };
-  'use strict';
-  axe.utils.getRootNode = function getRootNode(node) {
-    var doc = node.getRootNode && node.getRootNode() || document;
-    if (doc === node) {
-      doc = document;
-    }
-    return doc;
-  };
-  'use strict';
-  axe.utils.getScroll = function getScroll(elm) {
-    var buffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
-    var overflowX = elm.scrollWidth > elm.clientWidth + buffer;
-    var overflowY = elm.scrollHeight > elm.clientHeight + buffer;
-    if (!(overflowX || overflowY)) {
-      return;
-    }
-    var style = window.getComputedStyle(elm);
-    var overflowXStyle = style.getPropertyValue('overflow-x');
-    var overflowYStyle = style.getPropertyValue('overflow-y');
-    var scrollableX = overflowXStyle !== 'visible' && overflowXStyle !== 'hidden';
-    var scrollableY = overflowYStyle !== 'visible' && overflowYStyle !== 'hidden';
-    if (overflowX && scrollableX || overflowY && scrollableY) {
-      return {
-        elm: elm,
-        top: elm.scrollTop,
-        left: elm.scrollLeft
-      };
-    }
-  };
-  'use strict';
-  var escapeSelector = axe.utils.escapeSelector;
-  var isXHTML;
-  var ignoredAttributes = [ 'class', 'style', 'id', 'selected', 'checked', 'disabled', 'tabindex', 'aria-checked', 'aria-selected', 'aria-invalid', 'aria-activedescendant', 'aria-busy', 'aria-disabled', 'aria-expanded', 'aria-grabbed', 'aria-pressed', 'aria-valuenow' ];
-  var MAXATTRIBUTELENGTH = 31;
-  function getAttributeNameValue(node, at) {
-    var name = at.name;
-    var atnv;
-    if (name.indexOf('href') !== -1 || name.indexOf('src') !== -1) {
-      var friendly = axe.utils.getFriendlyUriEnd(node.getAttribute(name));
-      if (friendly) {
-        var value = encodeURI(friendly);
-        if (value) {
-          atnv = escapeSelector(at.name) + '$="' + escapeSelector(value) + '"';
-        } else {
-          return;
-        }
-      } else {
-        atnv = escapeSelector(at.name) + '="' + escapeSelector(node.getAttribute(name)) + '"';
+  function _toConsumableArray(arr) {
+    if (Array.isArray(arr)) {
+      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
+        arr2[i] = arr[i];
       }
+      return arr2;
     } else {
-      atnv = escapeSelector(name) + '="' + escapeSelector(at.value) + '"';
+      return Array.from(arr);
     }
-    return atnv;
   }
-  function countSort(a, b) {
-    return a.count < b.count ? -1 : a.count === b.count ? 0 : 1;
+  var escapeSelector = axe.utils.escapeSelector;
+  function isUncommonClassName(className) {
+    return ![ 'focus', 'hover', 'hidden', 'visible', 'dirty', 'touched', 'valid', 'disable', 'enable', 'active', 'col-' ].find(function(str) {
+      return className.includes(str);
+    });
   }
-  function filterAttributes(at) {
-    return !ignoredAttributes.includes(at.name) && at.name.indexOf(':') === -1 && (!at.value || at.value.length < MAXATTRIBUTELENGTH);
-  }
-  axe.utils.getSelectorData = function(domTree) {
-    var data = {
-      classes: {},
-      tags: {},
-      attributes: {}
-    };
-    domTree = Array.isArray(domTree) ? domTree : [ domTree ];
-    var currentLevel = domTree.slice();
-    var stack = [];
-    var _loop = function _loop() {
-      var current = currentLevel.pop();
-      var node = current.actualNode;
-      if (!!node.querySelectorAll) {
-        var tag = node.nodeName;
-        if (data.tags[tag]) {
-          data.tags[tag]++;
-        } else {
-          data.tags[tag] = 1;
-        }
-        if (node.classList) {
-          Array.from(node.classList).forEach(function(cl) {
-            var ind = escapeSelector(cl);
-            if (data.classes[ind]) {
-              data.classes[ind]++;
-            } else {
-              data.classes[ind] = 1;
-            }
-          });
-        }
-        if (node.hasAttributes()) {
-          Array.from(axe.utils.getNodeAttributes(node)).filter(filterAttributes).forEach(function(at) {
-            var atnv = getAttributeNameValue(node, at);
-            if (atnv) {
-              if (data.attributes[atnv]) {
-                data.attributes[atnv]++;
-              } else {
-                data.attributes[atnv] = 1;
-              }
-            }
-          });
-        }
-      }
-      if (current.children.length) {
-        stack.push(currentLevel);
-        currentLevel = current.children.slice();
-      }
-      while (!currentLevel.length && stack.length) {
-        currentLevel = stack.pop();
-      }
-    };
-    while (currentLevel.length) {
-      _loop();
+  function getDistinctClassList(elm) {
+    if (!elm.classList || elm.classList.length === 0) {
+      return [];
     }
-    return data;
-  };
-  function uncommonClasses(node, selectorData) {
-    var retVal = [];
-    var classData = selectorData.classes;
-    var tagData = selectorData.tags;
-    if (node.classList) {
-      Array.from(node.classList).forEach(function(cl) {
-        var ind = escapeSelector(cl);
-        if (classData[ind] < tagData[node.nodeName]) {
-          retVal.push({
-            name: ind,
-            count: classData[ind],
-            species: 'class'
-          });
-        }
-      });
-    }
-    return retVal.sort(countSort);
+    var siblings = elm.parentNode && Array.from(elm.parentNode.children || '') || [];
+    return siblings.reduce(function(classList, childElm) {
+      if (elm === childElm) {
+        return classList;
+      } else {
+        return classList.filter(function(classItem) {
+          return !childElm.classList.contains(classItem);
+        });
+      }
+    }, Array.from(elm.classList).filter(isUncommonClassName));
   }
+  var commonNodes = [ 'div', 'span', 'p', 'b', 'i', 'u', 'strong', 'em', 'h2', 'h3' ];
   function getNthChildString(elm, selector) {
     var siblings = elm.parentNode && Array.from(elm.parentNode.children || '') || [];
     var hasMatchingSiblings = siblings.find(function(sibling) {
@@ -5426,108 +2636,124 @@
       return '';
     }
   }
-  function getElmId(elm) {
-    if (!elm.getAttribute('id')) {
-      return;
-    }
-    var doc = elm.getRootNode && elm.getRootNode() || document;
-    var id = '#' + escapeSelector(elm.getAttribute('id') || '');
-    if (!id.match(/player_uid_/) && doc.querySelectorAll(id).length === 1) {
-      return id;
-    }
-  }
-  function getBaseSelector(elm) {
-    if (typeof isXHTML === 'undefined') {
-      isXHTML = axe.utils.isXHTML(document);
-    }
-    return escapeSelector(isXHTML ? elm.localName : elm.nodeName.toLowerCase());
-  }
-  function uncommonAttributes(node, selectorData) {
-    var retVal = [];
-    var attData = selectorData.attributes;
-    var tagData = selectorData.tags;
-    if (node.hasAttributes()) {
-      Array.from(axe.utils.getNodeAttributes(node)).filter(filterAttributes).forEach(function(at) {
-        var atnv = getAttributeNameValue(node, at);
-        if (atnv && attData[atnv] < tagData[node.nodeName]) {
-          retVal.push({
-            name: atnv,
-            count: attData[atnv],
-            species: 'attribute'
-          });
+  var createSelector = {
+    getElmId: function getElmId(elm) {
+      if (!elm.getAttribute('id')) {
+        return;
+      }
+      var doc = elm.getRootNode && elm.getRootNode() || document;
+      var id = '#' + escapeSelector(elm.getAttribute('id') || '');
+      if (!id.match(/player_uid_/) && doc.querySelectorAll(id).length === 1) {
+        return id;
+      }
+    },
+    getCustomElm: function getCustomElm(elm, _ref) {
+      var isCustomElm = _ref.isCustomElm, nodeName = _ref.nodeName;
+      if (isCustomElm) {
+        return nodeName;
+      }
+    },
+    getElmRoleProp: function getElmRoleProp(elm) {
+      if (elm.hasAttribute('role')) {
+        return '[role="' + escapeSelector(elm.getAttribute('role')) + '"]';
+      }
+    },
+    getUncommonElm: function getUncommonElm(elm, _ref2) {
+      var isCommonElm = _ref2.isCommonElm, isCustomElm = _ref2.isCustomElm, nodeName = _ref2.nodeName;
+      if (!isCommonElm && !isCustomElm) {
+        nodeName = escapeSelector(nodeName);
+        if (nodeName === 'input' && elm.hasAttribute('type')) {
+          nodeName += '[type="' + elm.type + '"]';
         }
-      });
-    }
-    return retVal.sort(countSort);
-  }
-  function getThreeLeastCommonFeatures(elm, selectorData) {
-    var selector = '';
-    var features;
-    var clss = uncommonClasses(elm, selectorData);
-    var atts = uncommonAttributes(elm, selectorData);
-    if (clss.length && clss[0].count === 1) {
-      features = [ clss[0] ];
-    } else if (atts.length && atts[0].count === 1) {
-      features = [ atts[0] ];
-      selector = getBaseSelector(elm);
-    } else {
-      features = clss.concat(atts);
-      features.sort(countSort);
-      features = features.slice(0, 3);
-      if (!features.some(function(feat) {
-        return feat.species === 'class';
-      })) {
-        selector = getBaseSelector(elm);
+        return nodeName;
+      }
+    },
+    getElmNameProp: function getElmNameProp(elm) {
+      if (!elm.hasAttribute('id') && elm.name) {
+        return '[name="' + escapeSelector(elm.name) + '"]';
+      }
+    },
+    getDistinctClass: function getDistinctClass(elm, _ref3) {
+      var distinctClassList = _ref3.distinctClassList;
+      if (distinctClassList.length > 0 && distinctClassList.length < 3) {
+        return '.' + distinctClassList.map(escapeSelector).join('.');
+      }
+    },
+    getFileRefProp: function getFileRefProp(elm) {
+      var attr = void 0;
+      if (elm.hasAttribute('href')) {
+        attr = 'href';
+      } else if (elm.hasAttribute('src')) {
+        attr = 'src';
       } else {
-        features.sort(function(a, b) {
-          return a.species !== b.species && a.species === 'class' ? -1 : a.species === b.species ? 0 : 1;
-        });
+        return;
+      }
+      var friendlyUriEnd = axe.utils.getFriendlyUriEnd(elm.getAttribute(attr));
+      if (friendlyUriEnd) {
+        return '[' + attr + '$="' + encodeURI(friendlyUriEnd) + '"]';
+      }
+    },
+    getCommonName: function getCommonName(elm, _ref4) {
+      var nodeName = _ref4.nodeName, isCommonElm = _ref4.isCommonElm;
+      if (isCommonElm) {
+        return nodeName;
       }
     }
-    return selector += features.reduce(function(val, feat) {
-      switch (feat.species) {
-       case 'class':
-        return val + '.' + feat.name;
-
-       case 'attribute':
-        return val + '[' + feat.name + ']';
+  };
+  function getElmFeatures(elm, featureCount) {
+    var nodeName = elm.nodeName.toLowerCase();
+    var classList = Array.from(elm.classList) || [];
+    var props = {
+      nodeName: nodeName,
+      classList: classList,
+      isCustomElm: nodeName.includes('-'),
+      isCommonElm: commonNodes.includes(nodeName),
+      distinctClassList: getDistinctClassList(elm)
+    };
+    return [ createSelector.getCustomElm, createSelector.getElmRoleProp, createSelector.getUncommonElm, createSelector.getElmNameProp, createSelector.getDistinctClass, createSelector.getFileRefProp, createSelector.getCommonName ].reduce(function(features, func) {
+      if (features.length === featureCount) {
+        return features;
       }
-      return val;
-    }, '');
+      var feature = func(elm, props);
+      if (feature) {
+        if (!feature[0].match(/[a-z]/)) {
+          features.push(feature);
+        } else {
+          features.unshift(feature);
+        }
+      }
+      return features;
+    }, []);
   }
   function generateSelector(elm, options, doc) {
-    if (!axe._selectorData) {
-      throw new Error('Expect axe._selectorData to be set up');
+    var selector = void 0, addParent = void 0;
+    var _options$isUnique = options.isUnique, isUnique = _options$isUnique === undefined ? false : _options$isUnique;
+    var idSelector = createSelector.getElmId(elm);
+    var _options$featureCount = options.featureCount, featureCount = _options$featureCount === undefined ? 2 : _options$featureCount, _options$minDepth = options.minDepth, minDepth = _options$minDepth === undefined ? 1 : _options$minDepth, _options$toRoot = options.toRoot, toRoot = _options$toRoot === undefined ? false : _options$toRoot, _options$childSelecto = options.childSelectors, childSelectors = _options$childSelecto === undefined ? [] : _options$childSelecto;
+    if (idSelector) {
+      selector = idSelector;
+      isUnique = true;
+    } else {
+      selector = getElmFeatures(elm, featureCount).join('');
+      selector += getNthChildString(elm, selector);
+      isUnique = options.isUnique || doc.querySelectorAll(selector).length === 1;
+      if (!isUnique && elm === document.documentElement) {
+        selector += ':root';
+      }
+      addParent = minDepth !== 0 || !isUnique;
     }
-    var _options$toRoot = options.toRoot, toRoot = _options$toRoot === void 0 ? false : _options$toRoot;
-    var selector;
-    var similar;
-    do {
-      var features = getElmId(elm);
-      if (!features) {
-        features = getThreeLeastCommonFeatures(elm, axe._selectorData);
-        features += getNthChildString(elm, features);
-      }
-      if (selector) {
-        selector = features + ' > ' + selector;
-      } else {
-        selector = features;
-      }
-      if (!similar) {
-        similar = Array.from(doc.querySelectorAll(selector));
-      } else {
-        similar = similar.filter(function(item) {
-          return axe.utils.matchesSelector(item, selector);
-        });
-      }
-      elm = elm.parentElement;
-    } while ((similar.length > 1 || toRoot) && elm && elm.nodeType !== 11);
-    if (similar.length === 1) {
-      return selector;
-    } else if (selector.indexOf(' > ') !== -1) {
-      return ':root' + selector.substring(selector.indexOf(' > '));
+    var selectorParts = [ selector ].concat(_toConsumableArray(childSelectors));
+    if (elm.parentElement && elm.parentElement.nodeType !== 11 && (toRoot || addParent)) {
+      return generateSelector(elm.parentNode, {
+        toRoot: toRoot,
+        isUnique: isUnique,
+        childSelectors: selectorParts,
+        featureCount: 1,
+        minDepth: minDepth - 1
+      }, doc);
+    } else {
+      return selectorParts.join(' > ');
     }
-    return ':root';
   }
   axe.utils.getSelector = function createUniqueSelector(elm) {
     var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -5557,30 +2783,6 @@
     }
   };
   'use strict';
-  axe.utils.getStyleSheetFactory = function getStyleSheetFactory(dynamicDoc) {
-    if (!dynamicDoc) {
-      throw new Error('axe.utils.getStyleSheetFactory should be invoked with an argument');
-    }
-    return function(options) {
-      var data = options.data, _options$isCrossOrigi = options.isCrossOrigin, isCrossOrigin = _options$isCrossOrigi === void 0 ? false : _options$isCrossOrigi, shadowId = options.shadowId, root = options.root, priority = options.priority, _options$isLink = options.isLink, isLink = _options$isLink === void 0 ? false : _options$isLink;
-      var style = dynamicDoc.createElement('style');
-      if (isLink) {
-        var text = dynamicDoc.createTextNode('@import "'.concat(data.href, '"'));
-        style.appendChild(text);
-      } else {
-        style.appendChild(dynamicDoc.createTextNode(data));
-      }
-      dynamicDoc.head.appendChild(style);
-      return {
-        sheet: style.sheet,
-        isCrossOrigin: isCrossOrigin,
-        shadowId: shadowId,
-        root: root,
-        priority: priority
-      };
-    };
-  };
-  'use strict';
   function getXPathArray(node, path) {
     var sibling, count;
     if (!node) {
@@ -5637,9 +2839,9 @@
   function xpathToString(xpathArray) {
     return xpathArray.reduce(function(str, elm) {
       if (elm.id) {
-        return '/'.concat(elm.str, '[@id=\'').concat(elm.id, '\']');
+        return '/' + elm.str + '[@id=\'' + elm.id + '\']';
       } else {
-        return str + '/'.concat(elm.str) + (elm.count > 0 ? '['.concat(elm.count, ']') : '');
+        return str + ('/' + elm.str) + (elm.count > 0 ? '[' + elm.count + ']' : '');
       }
     }, '');
   }
@@ -5677,51 +2879,19 @@
   'use strict';
   axe.utils.isHidden = function isHidden(el, recursed) {
     'use strict';
-    var node = axe.utils.getNodeFromTree(el);
+    var parent;
     if (el.nodeType === 9) {
       return false;
     }
     if (el.nodeType === 11) {
       el = el.host;
     }
-    if (node && node._isHidden !== null) {
-      return node._isHidden;
-    }
     var style = window.getComputedStyle(el, null);
     if (!style || !el.parentNode || style.getPropertyValue('display') === 'none' || !recursed && style.getPropertyValue('visibility') === 'hidden' || el.getAttribute('aria-hidden') === 'true') {
       return true;
     }
-    var parent = el.assignedSlot ? el.assignedSlot : el.parentNode;
-    var isHidden = axe.utils.isHidden(parent, true);
-    if (node) {
-      node._isHidden = isHidden;
-    }
-    return isHidden;
-  };
-  'use strict';
-  var htmlTags = [ 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'math', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'script', 'section', 'select', 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr' ];
-  axe.utils.isHtmlElement = function isHtmlElement(node) {
-    var tagName = node.nodeName.toLowerCase();
-    return htmlTags.includes(tagName) && node.namespaceURI !== 'http://www.w3.org/2000/svg';
-  };
-  'use strict';
-  var possibleShadowRoots = [ 'article', 'aside', 'blockquote', 'body', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', 'nav', 'p', 'section', 'span' ];
-  axe.utils.isShadowRoot = function isShadowRoot(node) {
-    var nodeName = node.nodeName.toLowerCase();
-    if (node.shadowRoot) {
-      if (/^[a-z][a-z0-9_.-]*-[a-z0-9_.-]*$/.test(nodeName) || possibleShadowRoots.includes(nodeName)) {
-        return true;
-      }
-    }
-    return false;
-  };
-  'use strict';
-  axe.utils.isXHTML = function(doc) {
-    'use strict';
-    if (!doc.createElement) {
-      return false;
-    }
-    return doc.createElement('A').localName === 'A';
+    parent = el.assignedSlot ? el.assignedSlot : el.parentNode;
+    return axe.utils.isHidden(parent, true);
   };
   'use strict';
   function pushFrame(resultSet, options, frameElement, frameSelector) {
@@ -5799,125 +2969,17 @@
     return result;
   };
   'use strict';
-  axe.utils.nodeSorter = function nodeSorter(nodeA, nodeB) {
-    nodeA = nodeA.actualNode || nodeA;
-    nodeB = nodeB.actualNode || nodeB;
-    if (nodeA === nodeB) {
+  axe.utils.nodeSorter = function nodeSorter(a, b) {
+    'use strict';
+    if (a.actualNode === b.actualNode) {
       return 0;
     }
-    if (nodeA.compareDocumentPosition(nodeB) & 4) {
+    if (a.actualNode.compareDocumentPosition(b.actualNode) & 4) {
       return -1;
-    } else {
-      return 1;
     }
+    return 1;
   };
   'use strict';
-  axe.utils.parseCrossOriginStylesheet = function parseCrossOriginStylesheet(url, options, priority, importedUrls, isCrossOrigin) {
-    var axiosOptions = {
-      method: 'get',
-      url: url
-    };
-    importedUrls.push(url);
-    return axe.imports.axios(axiosOptions).then(function(_ref) {
-      var data = _ref.data;
-      var result = options.convertDataToStylesheet({
-        data: data,
-        isCrossOrigin: isCrossOrigin,
-        priority: priority,
-        root: options.rootNode,
-        shadowId: options.shadowId
-      });
-      return axe.utils.parseStylesheet(result.sheet, options, priority, importedUrls, result.isCrossOrigin);
-    });
-  };
-  'use strict';
-  function _toConsumableArray(arr) {
-    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
-  }
-  function _nonIterableSpread() {
-    throw new TypeError('Invalid attempt to spread non-iterable instance');
-  }
-  function _iterableToArray(iter) {
-    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === '[object Arguments]') {
-      return Array.from(iter);
-    }
-  }
-  function _arrayWithoutHoles(arr) {
-    if (Array.isArray(arr)) {
-      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
-        arr2[i] = arr[i];
-      }
-      return arr2;
-    }
-  }
-  axe.utils.parseSameOriginStylesheet = function parseSameOriginStylesheet(sheet, options, priority, importedUrls) {
-    var isCrossOrigin = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
-    var rules = Array.from(sheet.cssRules);
-    if (!rules) {
-      return Promise.resolve();
-    }
-    var cssImportRules = rules.filter(function(r) {
-      return r.type === 3;
-    });
-    if (!cssImportRules.length) {
-      return Promise.resolve({
-        isCrossOrigin: isCrossOrigin,
-        priority: priority,
-        root: options.rootNode,
-        shadowId: options.shadowId,
-        sheet: sheet
-      });
-    }
-    var cssImportUrlsNotAlreadyImported = cssImportRules.filter(function(rule) {
-      return rule.href;
-    }).map(function(rule) {
-      return rule.href;
-    }).filter(function(url) {
-      return !importedUrls.includes(url);
-    });
-    var promises = cssImportUrlsNotAlreadyImported.map(function(importUrl, cssRuleIndex) {
-      var newPriority = [].concat(_toConsumableArray(priority), [ cssRuleIndex ]);
-      var isCrossOriginRequest = /^https?:\/\/|^\/\//i.test(importUrl);
-      return axe.utils.parseCrossOriginStylesheet(importUrl, options, newPriority, importedUrls, isCrossOriginRequest);
-    });
-    var nonImportCSSRules = rules.filter(function(r) {
-      return r.type !== 3;
-    });
-    if (!nonImportCSSRules.length) {
-      return Promise.all(promises);
-    }
-    promises.push(Promise.resolve(options.convertDataToStylesheet({
-      data: nonImportCSSRules.map(function(rule) {
-        return rule.cssText;
-      }).join(),
-      isCrossOrigin: isCrossOrigin,
-      priority: priority,
-      root: options.rootNode,
-      shadowId: options.shadowId
-    })));
-    return Promise.all(promises);
-  };
-  'use strict';
-  axe.utils.parseStylesheet = function parseStylesheet(sheet, options, priority, importedUrls) {
-    var isCrossOrigin = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
-    var isSameOrigin = isSameOriginStylesheet(sheet);
-    if (isSameOrigin) {
-      return axe.utils.parseSameOriginStylesheet(sheet, options, priority, importedUrls, isCrossOrigin);
-    }
-    return axe.utils.parseCrossOriginStylesheet(sheet.href, options, priority, importedUrls, true);
-  };
-  function isSameOriginStylesheet(sheet) {
-    try {
-      var rules = sheet.cssRules;
-      if (!rules && sheet.href) {
-        return false;
-      }
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-  'use strict';
   utils.performanceTimer = function() {
     'use strict';
     function now() {
@@ -5959,10 +3021,7 @@
           axe.log('Measure ' + req.name + ' took ' + req.duration + 'ms');
         }
         if (window.performance && window.performance.getEntriesByType !== undefined) {
-          var axeStart = window.performance.getEntriesByName('mark_axe_start')[0];
-          var measures = window.performance.getEntriesByType('measure').filter(function(measure) {
-            return measure.startTime >= axeStart.startTime;
-          });
+          var measures = window.performance.getEntriesByType('measure');
           for (var i = 0; i < measures.length; ++i) {
             var req = measures[i];
             if (req.name === measureName) {
@@ -6008,27 +3067,25 @@
     })();
   }
   if (!Array.prototype.find) {
-    Object.defineProperty(Array.prototype, 'find', {
-      value: function value(predicate) {
-        if (this === null) {
-          throw new TypeError('Array.prototype.find called on null or undefined');
-        }
-        if (typeof predicate !== 'function') {
-          throw new TypeError('predicate must be a function');
-        }
-        var list = Object(this);
-        var length = list.length >>> 0;
-        var thisArg = arguments[1];
-        var value;
-        for (var i = 0; i < length; i++) {
-          value = list[i];
-          if (predicate.call(thisArg, value, i, list)) {
-            return value;
-          }
-        }
-        return undefined;
+    Array.prototype.find = function(predicate) {
+      if (this === null) {
+        throw new TypeError('Array.prototype.find called on null or undefined');
       }
-    });
+      if (typeof predicate !== 'function') {
+        throw new TypeError('predicate must be a function');
+      }
+      var list = Object(this);
+      var length = list.length >>> 0;
+      var thisArg = arguments[1];
+      var value;
+      for (var i = 0; i < length; i++) {
+        value = list[i];
+        if (predicate.call(thisArg, value, i, list)) {
+          return value;
+        }
+      }
+      return undefined;
+    };
   }
   axe.utils.pollyfillElementsFromPoint = function() {
     if (document.elementsFromPoint) {
@@ -6059,10 +3116,6 @@
         });
         current.style.setProperty(cssProp, cssDisableVal, 'important');
       }
-      if (elements.indexOf(document.documentElement) < elements.length - 1) {
-        elements.splice(elements.indexOf(document.documentElement), 1);
-        elements.push(document.documentElement);
-      }
       for (i = previousPointerEvents.length; !!(d = previousPointerEvents[--i]); ) {
         elements[i].style.setProperty(cssProp, d.value ? d.value : '', d.priority);
       }
@@ -6074,114 +3127,108 @@
     document.elementsFromPoint = axe.utils.pollyfillElementsFromPoint();
   }
   if (!Array.prototype.includes) {
-    Object.defineProperty(Array.prototype, 'includes', {
-      value: function value(searchElement) {
-        'use strict';
-        var O = Object(this);
-        var len = parseInt(O.length, 10) || 0;
-        if (len === 0) {
-          return false;
-        }
-        var n = parseInt(arguments[1], 10) || 0;
-        var k;
-        if (n >= 0) {
-          k = n;
-        } else {
-          k = len + n;
-          if (k < 0) {
-            k = 0;
-          }
-        }
-        var currentElement;
-        while (k < len) {
-          currentElement = O[k];
-          if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {
-            return true;
-          }
-          k++;
-        }
+    Array.prototype.includes = function(searchElement) {
+      'use strict';
+      var O = Object(this);
+      var len = parseInt(O.length, 10) || 0;
+      if (len === 0) {
         return false;
       }
-    });
+      var n = parseInt(arguments[1], 10) || 0;
+      var k;
+      if (n >= 0) {
+        k = n;
+      } else {
+        k = len + n;
+        if (k < 0) {
+          k = 0;
+        }
+      }
+      var currentElement;
+      while (k < len) {
+        currentElement = O[k];
+        if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {
+          return true;
+        }
+        k++;
+      }
+      return false;
+    };
   }
   if (!Array.prototype.some) {
-    Object.defineProperty(Array.prototype, 'some', {
-      value: function value(fun) {
-        'use strict';
-        if (this == null) {
-          throw new TypeError('Array.prototype.some called on null or undefined');
-        }
-        if (typeof fun !== 'function') {
-          throw new TypeError();
-        }
-        var t = Object(this);
-        var len = t.length >>> 0;
-        var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
-        for (var i = 0; i < len; i++) {
-          if (i in t && fun.call(thisArg, t[i], i, t)) {
-            return true;
-          }
-        }
-        return false;
+    Array.prototype.some = function(fun) {
+      'use strict';
+      if (this == null) {
+        throw new TypeError('Array.prototype.some called on null or undefined');
       }
-    });
+      if (typeof fun !== 'function') {
+        throw new TypeError();
+      }
+      var t = Object(this);
+      var len = t.length >>> 0;
+      var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
+      for (var i = 0; i < len; i++) {
+        if (i in t && fun.call(thisArg, t[i], i, t)) {
+          return true;
+        }
+      }
+      return false;
+    };
   }
   if (!Array.from) {
-    Object.defineProperty(Array, 'from', {
-      value: function() {
-        var toStr = Object.prototype.toString;
-        var isCallable = function isCallable(fn) {
-          return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
-        };
-        var toInteger = function toInteger(value) {
-          var number = Number(value);
-          if (isNaN(number)) {
-            return 0;
+    Array.from = function() {
+      var toStr = Object.prototype.toString;
+      var isCallable = function isCallable(fn) {
+        return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
+      };
+      var toInteger = function toInteger(value) {
+        var number = Number(value);
+        if (isNaN(number)) {
+          return 0;
+        }
+        if (number === 0 || !isFinite(number)) {
+          return number;
+        }
+        return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
+      };
+      var maxSafeInteger = Math.pow(2, 53) - 1;
+      var toLength = function toLength(value) {
+        var len = toInteger(value);
+        return Math.min(Math.max(len, 0), maxSafeInteger);
+      };
+      return function from(arrayLike) {
+        var C = this;
+        var items = Object(arrayLike);
+        if (arrayLike == null) {
+          throw new TypeError('Array.from requires an array-like object - not null or undefined');
+        }
+        var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
+        var T;
+        if (typeof mapFn !== 'undefined') {
+          if (!isCallable(mapFn)) {
+            throw new TypeError('Array.from: when provided, the second argument must be a function');
           }
-          if (number === 0 || !isFinite(number)) {
-            return number;
+          if (arguments.length > 2) {
+            T = arguments[2];
           }
-          return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
-        };
-        var maxSafeInteger = Math.pow(2, 53) - 1;
-        var toLength = function toLength(value) {
-          var len = toInteger(value);
-          return Math.min(Math.max(len, 0), maxSafeInteger);
-        };
-        return function from(arrayLike) {
-          var C = this;
-          var items = Object(arrayLike);
-          if (arrayLike == null) {
-            throw new TypeError('Array.from requires an array-like object - not null or undefined');
+        }
+        var len = toLength(items.length);
+        var A = isCallable(C) ? Object(new C(len)) : new Array(len);
+        var k = 0;
+        var kValue;
+        while (k < len) {
+          kValue = items[k];
+          if (mapFn) {
+            A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
+          } else {
+            A[k] = kValue;
           }
-          var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
-          var T;
-          if (typeof mapFn !== 'undefined') {
-            if (!isCallable(mapFn)) {
-              throw new TypeError('Array.from: when provided, the second argument must be a function');
-            }
-            if (arguments.length > 2) {
-              T = arguments[2];
-            }
-          }
-          var len = toLength(items.length);
-          var A = isCallable(C) ? Object(new C(len)) : new Array(len);
-          var k = 0;
-          var kValue;
-          while (k < len) {
-            kValue = items[k];
-            if (mapFn) {
-              A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
-            } else {
-              A[k] = kValue;
-            }
-            k += 1;
-          }
-          A.length = len;
-          return A;
-        };
-      }()
-    });
+          k += 1;
+        }
+        A.length = len;
+        return A;
+      };
+    }();
   }
   if (!String.prototype.includes) {
     String.prototype.includes = function(search, start) {
@@ -6196,238 +3243,15 @@
     };
   }
   'use strict';
-  axe.utils.preloadCssom = function preloadCssom(_ref) {
-    var _ref$treeRoot = _ref.treeRoot, treeRoot = _ref$treeRoot === void 0 ? axe._tree[0] : _ref$treeRoot;
-    var rootNodes = getAllRootNodesInTree(treeRoot);
-    if (!rootNodes.length) {
-      return Promise.resolve();
-    }
-    var dynamicDoc = document.implementation.createHTMLDocument('Dynamic document for loading cssom');
-    var convertDataToStylesheet = axe.utils.getStyleSheetFactory(dynamicDoc);
-    return getCssomForAllRootNodes(rootNodes, convertDataToStylesheet).then(function(assets) {
-      return flattenAssets(assets);
-    });
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
   };
-  function getAllRootNodesInTree(tree) {
-    var ids = [];
-    var rootNodes = axe.utils.querySelectorAllFilter(tree, '*', function(node) {
-      if (ids.includes(node.shadowId)) {
-        return false;
-      }
-      ids.push(node.shadowId);
-      return true;
-    }).map(function(node) {
-      return {
-        shadowId: node.shadowId,
-        rootNode: axe.utils.getRootNode(node.actualNode)
-      };
-    });
-    return axe.utils.uniqueArray(rootNodes, []);
-  }
-  function getCssomForAllRootNodes(rootNodes, convertDataToStylesheet) {
-    var promises = [];
-    rootNodes.forEach(function(_ref2, index) {
-      var rootNode = _ref2.rootNode, shadowId = _ref2.shadowId;
-      var sheets = getStylesheetsOfRootNode(rootNode, shadowId, convertDataToStylesheet);
-      if (!sheets) {
-        return Promise.all(promises);
-      }
-      var rootIndex = index + 1;
-      var parseOptions = {
-        rootNode: rootNode,
-        shadowId: shadowId,
-        convertDataToStylesheet: convertDataToStylesheet,
-        rootIndex: rootIndex
-      };
-      var importedUrls = [];
-      var p = Promise.all(sheets.map(function(sheet, sheetIndex) {
-        var priority = [ rootIndex, sheetIndex ];
-        return axe.utils.parseStylesheet(sheet, parseOptions, priority, importedUrls);
-      }));
-      promises.push(p);
-    });
-    return Promise.all(promises);
-  }
-  function flattenAssets(assets) {
-    return assets.reduce(function(acc, val) {
-      return Array.isArray(val) ? acc.concat(flattenAssets(val)) : acc.concat(val);
-    }, []);
-  }
-  function getStylesheetsOfRootNode(rootNode, shadowId, convertDataToStylesheet) {
-    var sheets;
-    if (rootNode.nodeType === 11 && shadowId) {
-      sheets = getStylesheetsFromDocumentFragment(rootNode, convertDataToStylesheet);
-    } else {
-      sheets = getStylesheetsFromDocument(rootNode);
-    }
-    return filterStylesheetsWithSameHref(sheets);
-  }
-  function getStylesheetsFromDocumentFragment(rootNode, convertDataToStylesheet) {
-    return Array.from(rootNode.children).filter(filerStyleAndLinkAttributesInDocumentFragment).reduce(function(out, node) {
-      var nodeName = node.nodeName.toUpperCase();
-      var data = nodeName === 'STYLE' ? node.textContent : node;
-      var isLink = nodeName === 'LINK';
-      var stylesheet = convertDataToStylesheet({
-        data: data,
-        isLink: isLink,
-        root: rootNode
-      });
-      out.push(stylesheet.sheet);
-      return out;
-    }, []);
-  }
-  function getStylesheetsFromDocument(rootNode) {
-    return Array.from(rootNode.styleSheets).filter(function(sheet) {
-      return filterMediaIsPrint(sheet.media.mediaText);
-    });
-  }
-  function filerStyleAndLinkAttributesInDocumentFragment(node) {
-    var nodeName = node.nodeName.toUpperCase();
-    var linkHref = node.getAttribute('href');
-    var linkRel = node.getAttribute('rel');
-    var isLink = nodeName === 'LINK' && linkHref && linkRel && node.rel.toUpperCase().includes('STYLESHEET');
-    var isStyle = nodeName === 'STYLE';
-    return isStyle || isLink && filterMediaIsPrint(node.media);
-  }
-  function filterMediaIsPrint(media) {
-    if (!media) {
-      return true;
-    }
-    return !media.toUpperCase().includes('PRINT');
-  }
-  function filterStylesheetsWithSameHref(sheets) {
-    var hrefs = [];
-    return sheets.filter(function(sheet) {
-      if (!sheet.href) {
-        return true;
-      }
-      if (hrefs.includes(sheet.href)) {
-        return false;
-      }
-      hrefs.push(sheet.href);
-      return true;
-    });
-  }
-  'use strict';
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
-  function _defineProperty(obj, key, value) {
-    if (key in obj) {
-      Object.defineProperty(obj, key, {
-        value: value,
-        enumerable: true,
-        configurable: true,
-        writable: true
-      });
-    } else {
-      obj[key] = value;
-    }
-    return obj;
-  }
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
-  function isValidPreloadObject(preload) {
-    return _typeof(preload) === 'object' && Array.isArray(preload.assets);
-  }
-  axe.utils.shouldPreload = function shouldPreload(options) {
-    if (!options || options.preload === undefined || options.preload === null) {
-      return true;
-    }
-    if (typeof options.preload === 'boolean') {
-      return options.preload;
-    }
-    return isValidPreloadObject(options.preload);
-  };
-  axe.utils.getPreloadConfig = function getPreloadConfig(options) {
-    var _axe$constants$preloa = axe.constants.preload, assets = _axe$constants$preloa.assets, timeout = _axe$constants$preloa.timeout;
-    var config = {
-      assets: assets,
-      timeout: timeout
-    };
-    if (!options.preload) {
-      return config;
-    }
-    if (typeof options.preload === 'boolean') {
-      return config;
-    }
-    var areRequestedAssetsValid = options.preload.assets.every(function(a) {
-      return assets.includes(a.toLowerCase());
-    });
-    if (!areRequestedAssetsValid) {
-      throw new Error('Requested assets, not supported. ' + 'Supported assets are: '.concat(assets.join(', '), '.'));
-    }
-    config.assets = axe.utils.uniqueArray(options.preload.assets.map(function(a) {
-      return a.toLowerCase();
-    }), []);
-    if (options.preload.timeout && typeof options.preload.timeout === 'number' && !Number.isNaN(options.preload.timeout)) {
-      config.timeout = options.preload.timeout;
-    }
-    return config;
-  };
-  axe.utils.preload = function preload(options) {
-    var preloadFunctionsMap = {
-      cssom: axe.utils.preloadCssom
-    };
-    var shouldPreload = axe.utils.shouldPreload(options);
-    if (!shouldPreload) {
-      return Promise.resolve();
-    }
-    return new Promise(function(resolve, reject) {
-      var _axe$utils$getPreload = axe.utils.getPreloadConfig(options), assets = _axe$utils$getPreload.assets, timeout = _axe$utils$getPreload.timeout;
-      setTimeout(function() {
-        return reject('Preload assets timed out.');
-      }, timeout);
-      Promise.all(assets.map(function(asset) {
-        return preloadFunctionsMap[asset](options).then(function(results) {
-          return _defineProperty({}, asset, results);
-        });
-      })).then(function(results) {
-        var preloadAssets = results.reduce(function(out, result) {
-          return _extends({}, out, {}, result);
-        }, {});
-        resolve(preloadAssets);
-      });
-    });
-  };
-  'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
   function getIncompleteReason(checkData, messages) {
     function getDefaultMsg(messages) {
-      if (messages.incomplete && messages.incomplete['default']) {
-        return messages.incomplete['default'];
+      if (messages.incomplete && messages.incomplete.default) {
+        return messages.incomplete.default;
       } else {
         return helpers.incompleteFallbackMessage();
       }
@@ -6489,22 +3313,22 @@
   'use strict';
   var convertExpressions = function convertExpressions() {};
   var matchExpressions = function matchExpressions() {};
-  function matchesTag(vNode, exp) {
-    return vNode.props.nodeType === 1 && (exp.tag === '*' || vNode.props.nodeName === exp.tag);
+  function matchesTag(node, exp) {
+    return node.nodeType === 1 && (exp.tag === '*' || node.nodeName.toLowerCase() === exp.tag);
   }
-  function matchesClasses(vNode, exp) {
-    return !exp.classes || exp.classes.every(function(cl) {
-      return vNode.hasClass(cl.value);
-    });
+  function matchesClasses(node, exp) {
+    return !exp.classes || exp.classes.reduce(function(result, cl) {
+      return result && node.className && node.className.match(cl.regexp);
+    }, true);
   }
-  function matchesAttributes(vNode, exp) {
+  function matchesAttributes(node, exp) {
     return !exp.attributes || exp.attributes.reduce(function(result, att) {
-      var nodeAtt = vNode.attr(att.key);
+      var nodeAtt = node.getAttribute(att.key);
       return result && nodeAtt !== null && (!att.value || att.test(nodeAtt));
     }, true);
   }
-  function matchesId(vNode, exp) {
-    return !exp.id || vNode.props.id === exp.id;
+  function matchesId(node, exp) {
+    return !exp.id || node.id === exp.id;
   }
   function matchesPseudos(target, exp) {
     if (!exp.pseudos || exp.pseudos.reduce(function(result, pseudo) {
@@ -6517,7 +3341,23 @@
     }
     return false;
   }
+  function matchSelector(targets, exp, recurse) {
+    var result = [];
+    targets = Array.isArray(targets) ? targets : [ targets ];
+    targets.forEach(function(target) {
+      if (matchesTag(target.actualNode, exp) && matchesClasses(target.actualNode, exp) && matchesAttributes(target.actualNode, exp) && matchesId(target.actualNode, exp) && matchesPseudos(target, exp)) {
+        result.push(target);
+      }
+      if (recurse) {
+        result = result.concat(matchSelector(target.children.filter(function(child) {
+          return !exp.id || child.shadowId === target.shadowId;
+        }), exp, recurse));
+      }
+    });
+    return result;
+  }
   var escapeRegExp = function() {
+    /*! Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan <http://stevenlevithan.com/regex/xregexp/> MIT License */
     var from = /(?=[\-\[\]{}()*+?.\\\^$|,#\s])/g;
     var to = '\\';
     return function(string) {
@@ -6526,6 +3366,7 @@
   }();
   var reUnescape = /\\/g;
   function convertAttributes(atts) {
+    /*! Credit Mootools Copyright Mootools, MIT License */
     if (!atts) {
       return;
     }
@@ -6558,7 +3399,7 @@
 
        case '*=':
         test = function test(value) {
-          return value && value.includes(attributeValue);
+          return value && value.indexOf(attributeValue) > -1;
         };
         break;
 
@@ -6609,7 +3450,7 @@
     return pseudos.map(function(p) {
       var expressions;
       if (p.name === 'not') {
-        expressions = p.value;
+        expressions = axe.utils.cssParser.parse(p.value);
         expressions = expressions.selectors ? expressions.selectors : [ expressions ];
         expressions = convertExpressions(expressions);
       }
@@ -6638,87 +3479,34 @@
       return newExp;
     });
   };
-  function createLocalVariables(vNodes, anyLevel, thisLevel, parentShadowId) {
-    var retVal = {
-      vNodes: vNodes.slice(),
-      anyLevel: anyLevel,
-      thisLevel: thisLevel,
-      parentShadowId: parentShadowId
-    };
-    retVal.vNodes.reverse();
-    return retVal;
-  }
-  function matchesSelector(vNode, exp) {
-    return matchesTag(vNode, exp[0]) && matchesClasses(vNode, exp[0]) && matchesAttributes(vNode, exp[0]) && matchesId(vNode, exp[0]) && matchesPseudos(vNode, exp[0]);
-  }
-  matchExpressions = function matchExpressions(domTree, expressions, recurse, filter) {
-    var stack = [];
-    var vNodes = Array.isArray(domTree) ? domTree : [ domTree ];
-    var currentLevel = createLocalVariables(vNodes, expressions, [], domTree[0].shadowId);
-    var result = [];
-    while (currentLevel.vNodes.length) {
-      var vNode = currentLevel.vNodes.pop();
-      var childOnly = [];
-      var childAny = [];
-      var combined = currentLevel.anyLevel.slice().concat(currentLevel.thisLevel);
-      var added = false;
-      for (var i = 0; i < combined.length; i++) {
-        var exp = combined[i];
-        if (matchesSelector(vNode, exp) && (!exp[0].id || vNode.shadowId === currentLevel.parentShadowId)) {
-          if (exp.length === 1) {
-            if (!added && (!filter || filter(vNode))) {
-              result.push(vNode);
-              added = true;
-            }
-          } else {
-            var rest = exp.slice(1);
-            if ([ ' ', '>' ].includes(rest[0].combinator) === false) {
-              throw new Error('axe.utils.querySelectorAll does not support the combinator: ' + exp[1].combinator);
-            }
-            if (rest[0].combinator === '>') {
-              childOnly.push(rest);
-            } else {
-              childAny.push(rest);
-            }
-          }
+  matchExpressions = function matchExpressions(domTree, expressions, recurse) {
+    return expressions.reduce(function(collected, exprArr) {
+      var candidates = domTree;
+      exprArr.forEach(function(exp, index) {
+        recurse = exp.combinator === '>' ? false : recurse;
+        if ([ ' ', '>' ].indexOf(exp.combinator) === -1) {
+          throw new Error('axe.utils.querySelectorAll does not support the combinator: ' + exp.combinator);
         }
-        if (currentLevel.anyLevel.includes(exp) && (!exp[0].id || vNode.shadowId === currentLevel.parentShadowId)) {
-          childAny.push(exp);
-        }
-      }
-      if (vNode.children && vNode.children.length && recurse) {
-        stack.push(currentLevel);
-        currentLevel = createLocalVariables(vNode.children, childAny, childOnly, vNode.shadowId);
-      }
-      while (!currentLevel.vNodes.length && stack.length) {
-        currentLevel = stack.pop();
-      }
-    }
-    return result;
+        candidates = candidates.reduce(function(result, node) {
+          return result.concat(matchSelector(index ? node.children : node, exp, recurse));
+        }, []);
+      });
+      return collected.concat(candidates);
+    }, []);
   };
   axe.utils.querySelectorAll = function(domTree, selector) {
-    return axe.utils.querySelectorAllFilter(domTree, selector);
-  };
-  axe.utils.querySelectorAllFilter = function(domTree, selector, filter) {
     domTree = Array.isArray(domTree) ? domTree : [ domTree ];
     var expressions = axe.utils.cssParser.parse(selector);
     expressions = expressions.selectors ? expressions.selectors : [ expressions ];
     expressions = convertExpressions(expressions);
-    return matchExpressions(domTree, expressions, true, filter);
+    return matchExpressions(domTree, expressions, true);
   };
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   (function() {
     'use strict';
     function noop() {}
@@ -6771,10 +3559,10 @@
       }
       var q = {
         defer: function defer(fn) {
-          if (_typeof(fn) === 'object' && fn.then && fn['catch']) {
+          if ((typeof fn === 'undefined' ? 'undefined' : _typeof(fn)) === 'object' && fn.then && fn.catch) {
             var defer = fn;
             fn = function fn(resolve, reject) {
-              defer.then(resolve)['catch'](reject);
+              defer.then(resolve).catch(reject);
             };
           }
           funcGuard(fn);
@@ -6822,24 +3610,17 @@
     axe.utils.queue = queue;
   })();
   'use strict';
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
+  var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {
+    return typeof obj;
+  } : function(obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
+  };
   (function(exports) {
     'use strict';
-    var messages = {}, subscribers = {}, errorTypes = Object.freeze([ 'EvalError', 'RangeError', 'ReferenceError', 'SyntaxError', 'TypeError', 'URIError' ]);
+    var messages = {}, subscribers = {};
     function _getSource() {
-      var application = 'axeAPI', version = '', src;
-      if (typeof axe !== 'undefined' && axe._audit && axe._audit.application) {
+      var application = 'axe', version = '', src;
+      if (typeof axe !== 'undefined' && axe._audit && !axe._audit.application) {
         application = axe._audit.application;
       }
       if (typeof axe !== 'undefined') {
@@ -6849,9 +3630,9 @@
       return src;
     }
     function verify(postedMessage) {
-      if (_typeof(postedMessage) === 'object' && typeof postedMessage.uuid === 'string' && postedMessage._respondable === true) {
+      if ((typeof postedMessage === 'undefined' ? 'undefined' : _typeof(postedMessage)) === 'object' && typeof postedMessage.uuid === 'string' && postedMessage._respondable === true) {
         var messageSource = _getSource();
-        return postedMessage._source === messageSource || postedMessage._source === 'axeAPI.x.y.z' || messageSource === 'axeAPI.x.y.z';
+        return postedMessage._source === messageSource || postedMessage._source === 'axe.x.y.z' || messageSource === 'axe.x.y.z';
       }
       return false;
     }
@@ -6895,18 +3676,17 @@
         post(source, topic, message, uuid, keepalive, callback);
       };
     }
-    function publish(source, data, keepalive) {
+    function publish(target, data, keepalive) {
       var topic = data.topic;
       var subscriber = subscribers[topic];
       if (subscriber) {
-        var responder = createResponder(source, null, data.uuid);
+        var responder = createResponder(target, null, data.uuid);
         subscriber(data.message, keepalive, responder);
       }
     }
     function buildErrorObject(error) {
       var msg = error.message || 'Unknown error occurred';
-      var errorName = errorTypes.includes(error.name) ? error.name : 'Error';
-      var ErrConstructor = window[errorName] || Error;
+      var ErrConstructor = window[error.name] || Error;
       if (error.stack) {
         msg += '\n' + error.stack.replace(error.message, '');
       }
@@ -6963,7 +3743,7 @@
     'use strict';
     var include, exclude, matching;
     var defaultExclude = axe._audit && axe._audit.tagExclude ? axe._audit.tagExclude : [];
-    if (runOnly.hasOwnProperty('include') || runOnly.hasOwnProperty('exclude')) {
+    if (runOnly.include || runOnly.exclude) {
       include = runOnly.include || [];
       include = Array.isArray(include) ? include : [ include ];
       exclude = runOnly.exclude || [];
@@ -7005,9 +3785,21 @@
     }
   };
   'use strict';
+  function getScroll(elm) {
+    var style = window.getComputedStyle(elm);
+    var visibleOverflowY = style.getPropertyValue('overflow-y') === 'visible';
+    var visibleOverflowX = style.getPropertyValue('overflow-x') === 'visible';
+    if (!visibleOverflowY && elm.scrollHeight > elm.clientHeight || !visibleOverflowX && elm.scrollWidth > elm.clientWidth) {
+      return {
+        elm: elm,
+        top: elm.scrollTop,
+        left: elm.scrollLeft
+      };
+    }
+  }
   function setScroll(elm, top, left) {
     if (elm === window) {
-      return elm.scroll(left, top);
+      return elm.scroll(top, left);
     } else {
       elm.scrollTop = top;
       elm.scrollLeft = left;
@@ -7015,7 +3807,7 @@
   }
   function getElmScrollRecursive(root) {
     return Array.from(root.children).reduce(function(scrolls, elm) {
-      var scroll = axe.utils.getScroll(elm);
+      var scroll = getScroll(elm);
       if (scroll) {
         scrolls.push(scroll);
       }
@@ -7065,77 +3857,33 @@
     }
     return false;
   }
-  function pushNode(result, nodes) {
+  function pushNode(result, nodes, context) {
     'use strict';
-    var temp;
-    if (result.length === 0) {
-      return nodes;
-    }
-    if (result.length < nodes.length) {
-      temp = result;
-      result = nodes;
-      nodes = temp;
-    }
     for (var i = 0, l = nodes.length; i < l; i++) {
-      if (!result.includes(nodes[i])) {
+      if (!result.find(function(item) {
+        return item.actualNode === nodes[i].actualNode;
+      }) && isNodeInContext(nodes[i], context)) {
         result.push(nodes[i]);
       }
     }
-    return result;
-  }
-  function reduceIncludes(includes) {
-    return includes.reduce(function(res, el) {
-      if (!res.length || !axe.utils.contains(res[res.length - 1], el)) {
-        res.push(el);
-      }
-      return res;
-    }, []);
   }
   axe.utils.select = function select(selector, context) {
     'use strict';
-    var result = [];
-    var candidate;
-    if (axe._selectCache) {
-      for (var j = 0, l = axe._selectCache.length; j < l; j++) {
-        var item = axe._selectCache[j];
-        if (item.selector === selector) {
-          return item.result;
-        }
+    var result = [], candidate;
+    for (var i = 0, l = context.include.length; i < l; i++) {
+      candidate = context.include[i];
+      if (candidate.actualNode.nodeType === candidate.actualNode.ELEMENT_NODE && axe.utils.matchesSelector(candidate.actualNode, selector)) {
+        pushNode(result, [ candidate ], context);
       }
+      pushNode(result, axe.utils.querySelectorAll(candidate, selector), context);
     }
-    var curried = function(context) {
-      return function(node) {
-        return isNodeInContext(node, context);
-      };
-    }(context);
-    var reducedIncludes = reduceIncludes(context.include);
-    for (var i = 0; i < reducedIncludes.length; i++) {
-      candidate = reducedIncludes[i];
-      result = pushNode(result, axe.utils.querySelectorAllFilter(candidate, selector, curried));
-    }
-    if (axe._selectCache) {
-      axe._selectCache.push({
-        selector: selector,
-        result: result
-      });
-    }
-    return result;
+    return result.sort(axe.utils.nodeSorter);
   };
   'use strict';
   axe.utils.toArray = function(thing) {
     'use strict';
     return Array.prototype.slice.call(thing);
   };
-  axe.utils.uniqueArray = function(arr1, arr2) {
-    return arr1.concat(arr2).filter(function(elem, pos, arr) {
-      return arr.indexOf(elem) === pos;
-    });
-  };
-  'use strict';
-  axe.utils.tokenList = function(str) {
-    'use strict';
-    return str.trim().replace(/\s{2,}/g, ' ').split(' ');
-  };
   'use strict';
   var uuid;
   (function(_global) {
@@ -7252,62 +4000,6 @@
     uuid.BufferClass = BufferClass;
   })(window);
   'use strict';
-  axe.utils.validInputTypes = function validInputTypes() {
-    'use strict';
-    return [ 'hidden', 'text', 'search', 'tel', 'url', 'email', 'password', 'date', 'month', 'week', 'time', 'datetime-local', 'number', 'range', 'color', 'checkbox', 'radio', 'file', 'submit', 'image', 'reset', 'button' ];
-  };
-  'use strict';
-  var langs = [ 'aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'in', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'ji', 'jv', 'jw', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu', 'aaa', 'aab', 'aac', 'aad', 'aae', 'aaf', 'aag', 'aah', 'aai', 'aak', 'aal', 'aam', 'aan', 'aao', 'aap', 'aaq', 'aas', 'aat', 'aau', 'aav', 'aaw', 'aax', 'aaz', 'aba', 'abb', 'abc', 'abd', 'abe', 'abf', 'abg', 'abh', 'abi', 'abj', 'abl', 'abm', 'abn', 'abo', 'abp', 'abq', 'abr', 'abs', 'abt', 'abu', 'abv', 'abw', 'abx', 'aby', 'abz', 'aca', 'acb', 'acd', 'ace', 'acf', 'ach', 'aci', 'ack', 'acl', 'acm', 'acn', 'acp', 'acq', 'acr', 'acs', 'act', 'acu', 'acv', 'acw', 'acx', 'acy', 'acz', 'ada', 'adb', 'add', 'ade', 'adf', 'adg', 'adh', 'adi', 'adj', 'adl', 'adn', 'ado', 'adp', 'adq', 'adr', 'ads', 'adt', 'adu', 'adw', 'adx', 'ady', 'adz', 'aea', 'aeb', 'aec', 'aed', 'aee', 'aek', 'ael', 'aem', 'aen', 'aeq', 'aer', 'aes', 'aeu', 'aew', 'aey', 'aez', 'afa', 'afb', 'afd', 'afe', 'afg', 'afh', 'afi', 'afk', 'afn', 'afo', 'afp', 'afs', 'aft', 'afu', 'afz', 'aga', 'agb', 'agc', 'agd', 'age', 'agf', 'agg', 'agh', 'agi', 'agj', 'agk', 'agl', 'agm', 'agn', 'ago', 'agp', 'agq', 'agr', 'ags', 'agt', 'agu', 'agv', 'agw', 'agx', 'agy', 'agz', 'aha', 'ahb', 'ahg', 'ahh', 'ahi', 'ahk', 'ahl', 'ahm', 'ahn', 'aho', 'ahp', 'ahr', 'ahs', 'aht', 'aia', 'aib', 'aic', 'aid', 'aie', 'aif', 'aig', 'aih', 'aii', 'aij', 'aik', 'ail', 'aim', 'ain', 'aio', 'aip', 'aiq', 'air', 'ais', 'ait', 'aiw', 'aix', 'aiy', 'aja', 'ajg', 'aji', 'ajn', 'ajp', 'ajt', 'aju', 'ajw', 'ajz', 'akb', 'akc', 'akd', 'ake', 'akf', 'akg', 'akh', 'aki', 'akj', 'akk', 'akl', 'akm', 'ako', 'akp', 'akq', 'akr', 'aks', 'akt', 'aku', 'akv', 'akw', 'akx', 'aky', 'akz', 'ala', 'alc', 'ald', 'ale', 'alf', 'alg', 'alh', 'ali', 'alj', 'alk', 'all', 'alm', 'aln', 'alo', 'alp', 'alq', 'alr', 'als', 'alt', 'alu', 'alv', 'alw', 'alx', 'aly', 'alz', 'ama', 'amb', 'amc', 'ame', 'amf', 'amg', 'ami', 'amj', 'amk', 'aml', 'amm', 'amn', 'amo', 'amp', 'amq', 'amr', 'ams', 'amt', 'amu', 'amv', 'amw', 'amx', 'amy', 'amz', 'ana', 'anb', 'anc', 'and', 'ane', 'anf', 'ang', 'anh', 'ani', 'anj', 'ank', 'anl', 'anm', 'ann', 'ano', 'anp', 'anq', 'anr', 'ans', 'ant', 'anu', 'anv', 'anw', 'anx', 'any', 'anz', 'aoa', 'aob', 'aoc', 'aod', 'aoe', 'aof', 'aog', 'aoh', 'aoi', 'aoj', 'aok', 'aol', 'aom', 'aon', 'aor', 'aos', 'aot', 'aou', 'aox', 'aoz', 'apa', 'apb', 'apc', 'apd', 'ape', 'apf', 'apg', 'aph', 'api', 'apj', 'apk', 'apl', 'apm', 'apn', 'apo', 'app', 'apq', 'apr', 'aps', 'apt', 'apu', 'apv', 'apw', 'apx', 'apy', 'apz', 'aqa', 'aqc', 'aqd', 'aqg', 'aql', 'aqm', 'aqn', 'aqp', 'aqr', 'aqt', 'aqz', 'arb', 'arc', 'ard', 'are', 'arh', 'ari', 'arj', 'ark', 'arl', 'arn', 'aro', 'arp', 'arq', 'arr', 'ars', 'art', 'aru', 'arv', 'arw', 'arx', 'ary', 'arz', 'asa', 'asb', 'asc', 'asd', 'ase', 'asf', 'asg', 'ash', 'asi', 'asj', 'ask', 'asl', 'asn', 'aso', 'asp', 'asq', 'asr', 'ass', 'ast', 'asu', 'asv', 'asw', 'asx', 'asy', 'asz', 'ata', 'atb', 'atc', 'atd', 'ate', 'atg', 'ath', 'ati', 'atj', 'atk', 'atl', 'atm', 'atn', 'ato', 'atp', 'atq', 'atr', 'ats', 'att', 'atu', 'atv', 'atw', 'atx', 'aty', 'atz', 'aua', 'aub', 'auc', 'aud', 'aue', 'auf', 'aug', 'auh', 'aui', 'auj', 'auk', 'aul', 'aum', 'aun', 'auo', 'aup', 'auq', 'aur', 'aus', 'aut', 'auu', 'auw', 'aux', 'auy', 'auz', 'avb', 'avd', 'avi', 'avk', 'avl', 'avm', 'avn', 'avo', 'avs', 'avt', 'avu', 'avv', 'awa', 'awb', 'awc', 'awd', 'awe', 'awg', 'awh', 'awi', 'awk', 'awm', 'awn', 'awo', 'awr', 'aws', 'awt', 'awu', 'awv', 'aww', 'awx', 'awy', 'axb', 'axe', 'axg', 'axk', 'axl', 'axm', 'axx', 'aya', 'ayb', 'ayc', 'ayd', 'aye', 'ayg', 'ayh', 'ayi', 'ayk', 'ayl', 'ayn', 'ayo', 'ayp', 'ayq', 'ayr', 'ays', 'ayt', 'ayu', 'ayx', 'ayy', 'ayz', 'aza', 'azb', 'azc', 'azd', 'azg', 'azj', 'azm', 'azn', 'azo', 'azt', 'azz', 'baa', 'bab', 'bac', 'bad', 'bae', 'baf', 'bag', 'bah', 'bai', 'baj', 'bal', 'ban', 'bao', 'bap', 'bar', 'bas', 'bat', 'bau', 'bav', 'baw', 'bax', 'bay', 'baz', 'bba', 'bbb', 'bbc', 'bbd', 'bbe', 'bbf', 'bbg', 'bbh', 'bbi', 'bbj', 'bbk', 'bbl', 'bbm', 'bbn', 'bbo', 'bbp', 'bbq', 'bbr', 'bbs', 'bbt', 'bbu', 'bbv', 'bbw', 'bbx', 'bby', 'bbz', 'bca', 'bcb', 'bcc', 'bcd', 'bce', 'bcf', 'bcg', 'bch', 'bci', 'bcj', 'bck', 'bcl', 'bcm', 'bcn', 'bco', 'bcp', 'bcq', 'bcr', 'bcs', 'bct', 'bcu', 'bcv', 'bcw', 'bcy', 'bcz', 'bda', 'bdb', 'bdc', 'bdd', 'bde', 'bdf', 'bdg', 'bdh', 'bdi', 'bdj', 'bdk', 'bdl', 'bdm', 'bdn', 'bdo', 'bdp', 'bdq', 'bdr', 'bds', 'bdt', 'bdu', 'bdv', 'bdw', 'bdx', 'bdy', 'bdz', 'bea', 'beb', 'bec', 'bed', 'bee', 'bef', 'beg', 'beh', 'bei', 'bej', 'bek', 'bem', 'beo', 'bep', 'beq', 'ber', 'bes', 'bet', 'beu', 'bev', 'bew', 'bex', 'bey', 'bez', 'bfa', 'bfb', 'bfc', 'bfd', 'bfe', 'bff', 'bfg', 'bfh', 'bfi', 'bfj', 'bfk', 'bfl', 'bfm', 'bfn', 'bfo', 'bfp', 'bfq', 'bfr', 'bfs', 'bft', 'bfu', 'bfw', 'bfx', 'bfy', 'bfz', 'bga', 'bgb', 'bgc', 'bgd', 'bge', 'bgf', 'bgg', 'bgi', 'bgj', 'bgk', 'bgl', 'bgm', 'bgn', 'bgo', 'bgp', 'bgq', 'bgr', 'bgs', 'bgt', 'bgu', 'bgv', 'bgw', 'bgx', 'bgy', 'bgz', 'bha', 'bhb', 'bhc', 'bhd', 'bhe', 'bhf', 'bhg', 'bhh', 'bhi', 'bhj', 'bhk', 'bhl', 'bhm', 'bhn', 'bho', 'bhp', 'bhq', 'bhr', 'bhs', 'bht', 'bhu', 'bhv', 'bhw', 'bhx', 'bhy', 'bhz', 'bia', 'bib', 'bic', 'bid', 'bie', 'bif', 'big', 'bij', 'bik', 'bil', 'bim', 'bin', 'bio', 'bip', 'biq', 'bir', 'bit', 'biu', 'biv', 'biw', 'bix', 'biy', 'biz', 'bja', 'bjb', 'bjc', 'bjd', 'bje', 'bjf', 'bjg', 'bjh', 'bji', 'bjj', 'bjk', 'bjl', 'bjm', 'bjn', 'bjo', 'bjp', 'bjq', 'bjr', 'bjs', 'bjt', 'bju', 'bjv', 'bjw', 'bjx', 'bjy', 'bjz', 'bka', 'bkb', 'bkc', 'bkd', 'bkf', 'bkg', 'bkh', 'bki', 'bkj', 'bkk', 'bkl', 'bkm', 'bkn', 'bko', 'bkp', 'bkq', 'bkr', 'bks', 'bkt', 'bku', 'bkv', 'bkw', 'bkx', 'bky', 'bkz', 'bla', 'blb', 'blc', 'bld', 'ble', 'blf', 'blg', 'blh', 'bli', 'blj', 'blk', 'bll', 'blm', 'bln', 'blo', 'blp', 'blq', 'blr', 'bls', 'blt', 'blv', 'blw', 'blx', 'bly', 'blz', 'bma', 'bmb', 'bmc', 'bmd', 'bme', 'bmf', 'bmg', 'bmh', 'bmi', 'bmj', 'bmk', 'bml', 'bmm', 'bmn', 'bmo', 'bmp', 'bmq', 'bmr', 'bms', 'bmt', 'bmu', 'bmv', 'bmw', 'bmx', 'bmy', 'bmz', 'bna', 'bnb', 'bnc', 'bnd', 'bne', 'bnf', 'bng', 'bni', 'bnj', 'bnk', 'bnl', 'bnm', 'bnn', 'bno', 'bnp', 'bnq', 'bnr', 'bns', 'bnt', 'bnu', 'bnv', 'bnw', 'bnx', 'bny', 'bnz', 'boa', 'bob', 'boe', 'bof', 'bog', 'boh', 'boi', 'boj', 'bok', 'bol', 'bom', 'bon', 'boo', 'bop', 'boq', 'bor', 'bot', 'bou', 'bov', 'bow', 'box', 'boy', 'boz', 'bpa', 'bpb', 'bpd', 'bpg', 'bph', 'bpi', 'bpj', 'bpk', 'bpl', 'bpm', 'bpn', 'bpo', 'bpp', 'bpq', 'bpr', 'bps', 'bpt', 'bpu', 'bpv', 'bpw', 'bpx', 'bpy', 'bpz', 'bqa', 'bqb', 'bqc', 'bqd', 'bqf', 'bqg', 'bqh', 'bqi', 'bqj', 'bqk', 'bql', 'bqm', 'bqn', 'bqo', 'bqp', 'bqq', 'bqr', 'bqs', 'bqt', 'bqu', 'bqv', 'bqw', 'bqx', 'bqy', 'bqz', 'bra', 'brb', 'brc', 'brd', 'brf', 'brg', 'brh', 'bri', 'brj', 'brk', 'brl', 'brm', 'brn', 'bro', 'brp', 'brq', 'brr', 'brs', 'brt', 'bru', 'brv', 'brw', 'brx', 'bry', 'brz', 'bsa', 'bsb', 'bsc', 'bse', 'bsf', 'bsg', 'bsh', 'bsi', 'bsj', 'bsk', 'bsl', 'bsm', 'bsn', 'bso', 'bsp', 'bsq', 'bsr', 'bss', 'bst', 'bsu', 'bsv', 'bsw', 'bsx', 'bsy', 'bta', 'btb', 'btc', 'btd', 'bte', 'btf', 'btg', 'bth', 'bti', 'btj', 'btk', 'btl', 'btm', 'btn', 'bto', 'btp', 'btq', 'btr', 'bts', 'btt', 'btu', 'btv', 'btw', 'btx', 'bty', 'btz', 'bua', 'bub', 'buc', 'bud', 'bue', 'buf', 'bug', 'buh', 'bui', 'buj', 'buk', 'bum', 'bun', 'buo', 'bup', 'buq', 'bus', 'but', 'buu', 'buv', 'buw', 'bux', 'buy', 'buz', 'bva', 'bvb', 'bvc', 'bvd', 'bve', 'bvf', 'bvg', 'bvh', 'bvi', 'bvj', 'bvk', 'bvl', 'bvm', 'bvn', 'bvo', 'bvp', 'bvq', 'bvr', 'bvt', 'bvu', 'bvv', 'bvw', 'bvx', 'bvy', 'bvz', 'bwa', 'bwb', 'bwc', 'bwd', 'bwe', 'bwf', 'bwg', 'bwh', 'bwi', 'bwj', 'bwk', 'bwl', 'bwm', 'bwn', 'bwo', 'bwp', 'bwq', 'bwr', 'bws', 'bwt', 'bwu', 'bww', 'bwx', 'bwy', 'bwz', 'bxa', 'bxb', 'bxc', 'bxd', 'bxe', 'bxf', 'bxg', 'bxh', 'bxi', 'bxj', 'bxk', 'bxl', 'bxm', 'bxn', 'bxo', 'bxp', 'bxq', 'bxr', 'bxs', 'bxu', 'bxv', 'bxw', 'bxx', 'bxz', 'bya', 'byb', 'byc', 'byd', 'bye', 'byf', 'byg', 'byh', 'byi', 'byj', 'byk', 'byl', 'bym', 'byn', 'byo', 'byp', 'byq', 'byr', 'bys', 'byt', 'byv', 'byw', 'byx', 'byy', 'byz', 'bza', 'bzb', 'bzc', 'bzd', 'bze', 'bzf', 'bzg', 'bzh', 'bzi', 'bzj', 'bzk', 'bzl', 'bzm', 'bzn', 'bzo', 'bzp', 'bzq', 'bzr', 'bzs', 'bzt', 'bzu', 'bzv', 'bzw', 'bzx', 'bzy', 'bzz', 'caa', 'cab', 'cac', 'cad', 'cae', 'caf', 'cag', 'cah', 'cai', 'caj', 'cak', 'cal', 'cam', 'can', 'cao', 'cap', 'caq', 'car', 'cas', 'cau', 'cav', 'caw', 'cax', 'cay', 'caz', 'cba', 'cbb', 'cbc', 'cbd', 'cbe', 'cbg', 'cbh', 'cbi', 'cbj', 'cbk', 'cbl', 'cbn', 'cbo', 'cbq', 'cbr', 'cbs', 'cbt', 'cbu', 'cbv', 'cbw', 'cby', 'cca', 'ccc', 'ccd', 'cce', 'ccg', 'cch', 'ccj', 'ccl', 'ccm', 'ccn', 'cco', 'ccp', 'ccq', 'ccr', 'ccs', 'cda', 'cdc', 'cdd', 'cde', 'cdf', 'cdg', 'cdh', 'cdi', 'cdj', 'cdm', 'cdn', 'cdo', 'cdr', 'cds', 'cdy', 'cdz', 'cea', 'ceb', 'ceg', 'cek', 'cel', 'cen', 'cet', 'cfa', 'cfd', 'cfg', 'cfm', 'cga', 'cgc', 'cgg', 'cgk', 'chb', 'chc', 'chd', 'chf', 'chg', 'chh', 'chj', 'chk', 'chl', 'chm', 'chn', 'cho', 'chp', 'chq', 'chr', 'cht', 'chw', 'chx', 'chy', 'chz', 'cia', 'cib', 'cic', 'cid', 'cie', 'cih', 'cik', 'cim', 'cin', 'cip', 'cir', 'ciw', 'ciy', 'cja', 'cje', 'cjh', 'cji', 'cjk', 'cjm', 'cjn', 'cjo', 'cjp', 'cjr', 'cjs', 'cjv', 'cjy', 'cka', 'ckb', 'ckh', 'ckl', 'ckn', 'cko', 'ckq', 'ckr', 'cks', 'ckt', 'cku', 'ckv', 'ckx', 'cky', 'ckz', 'cla', 'clc', 'cld', 'cle', 'clh', 'cli', 'clj', 'clk', 'cll', 'clm', 'clo', 'clt', 'clu', 'clw', 'cly', 'cma', 'cmc', 'cme', 'cmg', 'cmi', 'cmk', 'cml', 'cmm', 'cmn', 'cmo', 'cmr', 'cms', 'cmt', 'cna', 'cnb', 'cnc', 'cng', 'cnh', 'cni', 'cnk', 'cnl', 'cno', 'cnr', 'cns', 'cnt', 'cnu', 'cnw', 'cnx', 'coa', 'cob', 'coc', 'cod', 'coe', 'cof', 'cog', 'coh', 'coj', 'cok', 'col', 'com', 'con', 'coo', 'cop', 'coq', 'cot', 'cou', 'cov', 'cow', 'cox', 'coy', 'coz', 'cpa', 'cpb', 'cpc', 'cpe', 'cpf', 'cpg', 'cpi', 'cpn', 'cpo', 'cpp', 'cps', 'cpu', 'cpx', 'cpy', 'cqd', 'cqu', 'cra', 'crb', 'crc', 'crd', 'crf', 'crg', 'crh', 'cri', 'crj', 'crk', 'crl', 'crm', 'crn', 'cro', 'crp', 'crq', 'crr', 'crs', 'crt', 'crv', 'crw', 'crx', 'cry', 'crz', 'csa', 'csb', 'csc', 'csd', 'cse', 'csf', 'csg', 'csh', 'csi', 'csj', 'csk', 'csl', 'csm', 'csn', 'cso', 'csq', 'csr', 'css', 'cst', 'csu', 'csv', 'csw', 'csy', 'csz', 'cta', 'ctc', 'ctd', 'cte', 'ctg', 'cth', 'ctl', 'ctm', 'ctn', 'cto', 'ctp', 'cts', 'ctt', 'ctu', 'ctz', 'cua', 'cub', 'cuc', 'cug', 'cuh', 'cui', 'cuj', 'cuk', 'cul', 'cum', 'cuo', 'cup', 'cuq', 'cur', 'cus', 'cut', 'cuu', 'cuv', 'cuw', 'cux', 'cuy', 'cvg', 'cvn', 'cwa', 'cwb', 'cwd', 'cwe', 'cwg', 'cwt', 'cya', 'cyb', 'cyo', 'czh', 'czk', 'czn', 'czo', 'czt', 'daa', 'dac', 'dad', 'dae', 'daf', 'dag', 'dah', 'dai', 'daj', 'dak', 'dal', 'dam', 'dao', 'dap', 'daq', 'dar', 'das', 'dau', 'dav', 'daw', 'dax', 'day', 'daz', 'dba', 'dbb', 'dbd', 'dbe', 'dbf', 'dbg', 'dbi', 'dbj', 'dbl', 'dbm', 'dbn', 'dbo', 'dbp', 'dbq', 'dbr', 'dbt', 'dbu', 'dbv', 'dbw', 'dby', 'dcc', 'dcr', 'dda', 'ddd', 'dde', 'ddg', 'ddi', 'ddj', 'ddn', 'ddo', 'ddr', 'dds', 'ddw', 'dec', 'ded', 'dee', 'def', 'deg', 'deh', 'dei', 'dek', 'del', 'dem', 'den', 'dep', 'deq', 'der', 'des', 'dev', 'dez', 'dga', 'dgb', 'dgc', 'dgd', 'dge', 'dgg', 'dgh', 'dgi', 'dgk', 'dgl', 'dgn', 'dgo', 'dgr', 'dgs', 'dgt', 'dgu', 'dgw', 'dgx', 'dgz', 'dha', 'dhd', 'dhg', 'dhi', 'dhl', 'dhm', 'dhn', 'dho', 'dhr', 'dhs', 'dhu', 'dhv', 'dhw', 'dhx', 'dia', 'dib', 'dic', 'did', 'dif', 'dig', 'dih', 'dii', 'dij', 'dik', 'dil', 'dim', 'din', 'dio', 'dip', 'diq', 'dir', 'dis', 'dit', 'diu', 'diw', 'dix', 'diy', 'diz', 'dja', 'djb', 'djc', 'djd', 'dje', 'djf', 'dji', 'djj', 'djk', 'djl', 'djm', 'djn', 'djo', 'djr', 'dju', 'djw', 'dka', 'dkk', 'dkl', 'dkr', 'dks', 'dkx', 'dlg', 'dlk', 'dlm', 'dln', 'dma', 'dmb', 'dmc', 'dmd', 'dme', 'dmg', 'dmk', 'dml', 'dmm', 'dmn', 'dmo', 'dmr', 'dms', 'dmu', 'dmv', 'dmw', 'dmx', 'dmy', 'dna', 'dnd', 'dne', 'dng', 'dni', 'dnj', 'dnk', 'dnn', 'dnr', 'dnt', 'dnu', 'dnv', 'dnw', 'dny', 'doa', 'dob', 'doc', 'doe', 'dof', 'doh', 'doi', 'dok', 'dol', 'don', 'doo', 'dop', 'doq', 'dor', 'dos', 'dot', 'dov', 'dow', 'dox', 'doy', 'doz', 'dpp', 'dra', 'drb', 'drc', 'drd', 'dre', 'drg', 'drh', 'dri', 'drl', 'drn', 'dro', 'drq', 'drr', 'drs', 'drt', 'dru', 'drw', 'dry', 'dsb', 'dse', 'dsh', 'dsi', 'dsl', 'dsn', 'dso', 'dsq', 'dta', 'dtb', 'dtd', 'dth', 'dti', 'dtk', 'dtm', 'dtn', 'dto', 'dtp', 'dtr', 'dts', 'dtt', 'dtu', 'dty', 'dua', 'dub', 'duc', 'dud', 'due', 'duf', 'dug', 'duh', 'dui', 'duj', 'duk', 'dul', 'dum', 'dun', 'duo', 'dup', 'duq', 'dur', 'dus', 'duu', 'duv', 'duw', 'dux', 'duy', 'duz', 'dva', 'dwa', 'dwl', 'dwr', 'dws', 'dwu', 'dww', 'dwy', 'dya', 'dyb', 'dyd', 'dyg', 'dyi', 'dym', 'dyn', 'dyo', 'dyu', 'dyy', 'dza', 'dzd', 'dze', 'dzg', 'dzl', 'dzn', 'eaa', 'ebg', 'ebk', 'ebo', 'ebr', 'ebu', 'ecr', 'ecs', 'ecy', 'eee', 'efa', 'efe', 'efi', 'ega', 'egl', 'ego', 'egx', 'egy', 'ehu', 'eip', 'eit', 'eiv', 'eja', 'eka', 'ekc', 'eke', 'ekg', 'eki', 'ekk', 'ekl', 'ekm', 'eko', 'ekp', 'ekr', 'eky', 'ele', 'elh', 'eli', 'elk', 'elm', 'elo', 'elp', 'elu', 'elx', 'ema', 'emb', 'eme', 'emg', 'emi', 'emk', 'emm', 'emn', 'emo', 'emp', 'ems', 'emu', 'emw', 'emx', 'emy', 'ena', 'enb', 'enc', 'end', 'enf', 'enh', 'enl', 'enm', 'enn', 'eno', 'enq', 'enr', 'enu', 'env', 'enw', 'enx', 'eot', 'epi', 'era', 'erg', 'erh', 'eri', 'erk', 'ero', 'err', 'ers', 'ert', 'erw', 'ese', 'esg', 'esh', 'esi', 'esk', 'esl', 'esm', 'esn', 'eso', 'esq', 'ess', 'esu', 'esx', 'esy', 'etb', 'etc', 'eth', 'etn', 'eto', 'etr', 'ets', 'ett', 'etu', 'etx', 'etz', 'euq', 'eve', 'evh', 'evn', 'ewo', 'ext', 'eya', 'eyo', 'eza', 'eze', 'faa', 'fab', 'fad', 'faf', 'fag', 'fah', 'fai', 'faj', 'fak', 'fal', 'fam', 'fan', 'fap', 'far', 'fat', 'fau', 'fax', 'fay', 'faz', 'fbl', 'fcs', 'fer', 'ffi', 'ffm', 'fgr', 'fia', 'fie', 'fil', 'fip', 'fir', 'fit', 'fiu', 'fiw', 'fkk', 'fkv', 'fla', 'flh', 'fli', 'fll', 'fln', 'flr', 'fly', 'fmp', 'fmu', 'fnb', 'fng', 'fni', 'fod', 'foi', 'fom', 'fon', 'for', 'fos', 'fox', 'fpe', 'fqs', 'frc', 'frd', 'frk', 'frm', 'fro', 'frp', 'frq', 'frr', 'frs', 'frt', 'fse', 'fsl', 'fss', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fuj', 'fum', 'fun', 'fuq', 'fur', 'fut', 'fuu', 'fuv', 'fuy', 'fvr', 'fwa', 'fwe', 'gaa', 'gab', 'gac', 'gad', 'gae', 'gaf', 'gag', 'gah', 'gai', 'gaj', 'gak', 'gal', 'gam', 'gan', 'gao', 'gap', 'gaq', 'gar', 'gas', 'gat', 'gau', 'gav', 'gaw', 'gax', 'gay', 'gaz', 'gba', 'gbb', 'gbc', 'gbd', 'gbe', 'gbf', 'gbg', 'gbh', 'gbi', 'gbj', 'gbk', 'gbl', 'gbm', 'gbn', 'gbo', 'gbp', 'gbq', 'gbr', 'gbs', 'gbu', 'gbv', 'gbw', 'gbx', 'gby', 'gbz', 'gcc', 'gcd', 'gce', 'gcf', 'gcl', 'gcn', 'gcr', 'gct', 'gda', 'gdb', 'gdc', 'gdd', 'gde', 'gdf', 'gdg', 'gdh', 'gdi', 'gdj', 'gdk', 'gdl', 'gdm', 'gdn', 'gdo', 'gdq', 'gdr', 'gds', 'gdt', 'gdu', 'gdx', 'gea', 'geb', 'gec', 'ged', 'geg', 'geh', 'gei', 'gej', 'gek', 'gel', 'gem', 'geq', 'ges', 'gev', 'gew', 'gex', 'gey', 'gez', 'gfk', 'gft', 'gfx', 'gga', 'ggb', 'ggd', 'gge', 'ggg', 'ggk', 'ggl', 'ggn', 'ggo', 'ggr', 'ggt', 'ggu', 'ggw', 'gha', 'ghc', 'ghe', 'ghh', 'ghk', 'ghl', 'ghn', 'gho', 'ghr', 'ghs', 'ght', 'gia', 'gib', 'gic', 'gid', 'gie', 'gig', 'gih', 'gil', 'gim', 'gin', 'gio', 'gip', 'giq', 'gir', 'gis', 'git', 'giu', 'giw', 'gix', 'giy', 'giz', 'gji', 'gjk', 'gjm', 'gjn', 'gjr', 'gju', 'gka', 'gkd', 'gke', 'gkn', 'gko', 'gkp', 'gku', 'glc', 'gld', 'glh', 'gli', 'glj', 'glk', 'gll', 'glo', 'glr', 'glu', 'glw', 'gly', 'gma', 'gmb', 'gmd', 'gme', 'gmg', 'gmh', 'gml', 'gmm', 'gmn', 'gmq', 'gmu', 'gmv', 'gmw', 'gmx', 'gmy', 'gmz', 'gna', 'gnb', 'gnc', 'gnd', 'gne', 'gng', 'gnh', 'gni', 'gnj', 'gnk', 'gnl', 'gnm', 'gnn', 'gno', 'gnq', 'gnr', 'gnt', 'gnu', 'gnw', 'gnz', 'goa', 'gob', 'goc', 'god', 'goe', 'gof', 'gog', 'goh', 'goi', 'goj', 'gok', 'gol', 'gom', 'gon', 'goo', 'gop', 'goq', 'gor', 'gos', 'got', 'gou', 'gow', 'gox', 'goy', 'goz', 'gpa', 'gpe', 'gpn', 'gqa', 'gqi', 'gqn', 'gqr', 'gqu', 'gra', 'grb', 'grc', 'grd', 'grg', 'grh', 'gri', 'grj', 'grk', 'grm', 'gro', 'grq', 'grr', 'grs', 'grt', 'gru', 'grv', 'grw', 'grx', 'gry', 'grz', 'gse', 'gsg', 'gsl', 'gsm', 'gsn', 'gso', 'gsp', 'gss', 'gsw', 'gta', 'gti', 'gtu', 'gua', 'gub', 'guc', 'gud', 'gue', 'guf', 'gug', 'guh', 'gui', 'guk', 'gul', 'gum', 'gun', 'guo', 'gup', 'guq', 'gur', 'gus', 'gut', 'guu', 'guv', 'guw', 'gux', 'guz', 'gva', 'gvc', 'gve', 'gvf', 'gvj', 'gvl', 'gvm', 'gvn', 'gvo', 'gvp', 'gvr', 'gvs', 'gvy', 'gwa', 'gwb', 'gwc', 'gwd', 'gwe', 'gwf', 'gwg', 'gwi', 'gwj', 'gwm', 'gwn', 'gwr', 'gwt', 'gwu', 'gww', 'gwx', 'gxx', 'gya', 'gyb', 'gyd', 'gye', 'gyf', 'gyg', 'gyi', 'gyl', 'gym', 'gyn', 'gyo', 'gyr', 'gyy', 'gza', 'gzi', 'gzn', 'haa', 'hab', 'hac', 'had', 'hae', 'haf', 'hag', 'hah', 'hai', 'haj', 'hak', 'hal', 'ham', 'han', 'hao', 'hap', 'haq', 'har', 'has', 'hav', 'haw', 'hax', 'hay', 'haz', 'hba', 'hbb', 'hbn', 'hbo', 'hbu', 'hca', 'hch', 'hdn', 'hds', 'hdy', 'hea', 'hed', 'heg', 'heh', 'hei', 'hem', 'hgm', 'hgw', 'hhi', 'hhr', 'hhy', 'hia', 'hib', 'hid', 'hif', 'hig', 'hih', 'hii', 'hij', 'hik', 'hil', 'him', 'hio', 'hir', 'hit', 'hiw', 'hix', 'hji', 'hka', 'hke', 'hkk', 'hkn', 'hks', 'hla', 'hlb', 'hld', 'hle', 'hlt', 'hlu', 'hma', 'hmb', 'hmc', 'hmd', 'hme', 'hmf', 'hmg', 'hmh', 'hmi', 'hmj', 'hmk', 'hml', 'hmm', 'hmn', 'hmp', 'hmq', 'hmr', 'hms', 'hmt', 'hmu', 'hmv', 'hmw', 'hmx', 'hmy', 'hmz', 'hna', 'hnd', 'hne', 'hnh', 'hni', 'hnj', 'hnn', 'hno', 'hns', 'hnu', 'hoa', 'hob', 'hoc', 'hod', 'hoe', 'hoh', 'hoi', 'hoj', 'hok', 'hol', 'hom', 'hoo', 'hop', 'hor', 'hos', 'hot', 'hov', 'how', 'hoy', 'hoz', 'hpo', 'hps', 'hra', 'hrc', 'hre', 'hrk', 'hrm', 'hro', 'hrp', 'hrr', 'hrt', 'hru', 'hrw', 'hrx', 'hrz', 'hsb', 'hsh', 'hsl', 'hsn', 'hss', 'hti', 'hto', 'hts', 'htu', 'htx', 'hub', 'huc', 'hud', 'hue', 'huf', 'hug', 'huh', 'hui', 'huj', 'huk', 'hul', 'hum', 'huo', 'hup', 'huq', 'hur', 'hus', 'hut', 'huu', 'huv', 'huw', 'hux', 'huy', 'huz', 'hvc', 'hve', 'hvk', 'hvn', 'hvv', 'hwa', 'hwc', 'hwo', 'hya', 'hyw', 'hyx', 'iai', 'ian', 'iap', 'iar', 'iba', 'ibb', 'ibd', 'ibe', 'ibg', 'ibh', 'ibi', 'ibl', 'ibm', 'ibn', 'ibr', 'ibu', 'iby', 'ica', 'ich', 'icl', 'icr', 'ida', 'idb', 'idc', 'idd', 'ide', 'idi', 'idr', 'ids', 'idt', 'idu', 'ifa', 'ifb', 'ife', 'iff', 'ifk', 'ifm', 'ifu', 'ify', 'igb', 'ige', 'igg', 'igl', 'igm', 'ign', 'igo', 'igs', 'igw', 'ihb', 'ihi', 'ihp', 'ihw', 'iin', 'iir', 'ijc', 'ije', 'ijj', 'ijn', 'ijo', 'ijs', 'ike', 'iki', 'ikk', 'ikl', 'iko', 'ikp', 'ikr', 'iks', 'ikt', 'ikv', 'ikw', 'ikx', 'ikz', 'ila', 'ilb', 'ilg', 'ili', 'ilk', 'ill', 'ilm', 'ilo', 'ilp', 'ils', 'ilu', 'ilv', 'ilw', 'ima', 'ime', 'imi', 'iml', 'imn', 'imo', 'imr', 'ims', 'imy', 'inb', 'inc', 'ine', 'ing', 'inh', 'inj', 'inl', 'inm', 'inn', 'ino', 'inp', 'ins', 'int', 'inz', 'ior', 'iou', 'iow', 'ipi', 'ipo', 'iqu', 'iqw', 'ira', 'ire', 'irh', 'iri', 'irk', 'irn', 'iro', 'irr', 'iru', 'irx', 'iry', 'isa', 'isc', 'isd', 'ise', 'isg', 'ish', 'isi', 'isk', 'ism', 'isn', 'iso', 'isr', 'ist', 'isu', 'itb', 'itc', 'itd', 'ite', 'iti', 'itk', 'itl', 'itm', 'ito', 'itr', 'its', 'itt', 'itv', 'itw', 'itx', 'ity', 'itz', 'ium', 'ivb', 'ivv', 'iwk', 'iwm', 'iwo', 'iws', 'ixc', 'ixl', 'iya', 'iyo', 'iyx', 'izh', 'izi', 'izr', 'izz', 'jaa', 'jab', 'jac', 'jad', 'jae', 'jaf', 'jah', 'jaj', 'jak', 'jal', 'jam', 'jan', 'jao', 'jaq', 'jar', 'jas', 'jat', 'jau', 'jax', 'jay', 'jaz', 'jbe', 'jbi', 'jbj', 'jbk', 'jbn', 'jbo', 'jbr', 'jbt', 'jbu', 'jbw', 'jcs', 'jct', 'jda', 'jdg', 'jdt', 'jeb', 'jee', 'jeg', 'jeh', 'jei', 'jek', 'jel', 'jen', 'jer', 'jet', 'jeu', 'jgb', 'jge', 'jgk', 'jgo', 'jhi', 'jhs', 'jia', 'jib', 'jic', 'jid', 'jie', 'jig', 'jih', 'jii', 'jil', 'jim', 'jio', 'jiq', 'jit', 'jiu', 'jiv', 'jiy', 'jje', 'jjr', 'jka', 'jkm', 'jko', 'jkp', 'jkr', 'jku', 'jle', 'jls', 'jma', 'jmb', 'jmc', 'jmd', 'jmi', 'jml', 'jmn', 'jmr', 'jms', 'jmw', 'jmx', 'jna', 'jnd', 'jng', 'jni', 'jnj', 'jnl', 'jns', 'job', 'jod', 'jog', 'jor', 'jos', 'jow', 'jpa', 'jpr', 'jpx', 'jqr', 'jra', 'jrb', 'jrr', 'jrt', 'jru', 'jsl', 'jua', 'jub', 'juc', 'jud', 'juh', 'jui', 'juk', 'jul', 'jum', 'jun', 'juo', 'jup', 'jur', 'jus', 'jut', 'juu', 'juw', 'juy', 'jvd', 'jvn', 'jwi', 'jya', 'jye', 'jyy', 'kaa', 'kab', 'kac', 'kad', 'kae', 'kaf', 'kag', 'kah', 'kai', 'kaj', 'kak', 'kam', 'kao', 'kap', 'kaq', 'kar', 'kav', 'kaw', 'kax', 'kay', 'kba', 'kbb', 'kbc', 'kbd', 'kbe', 'kbf', 'kbg', 'kbh', 'kbi', 'kbj', 'kbk', 'kbl', 'kbm', 'kbn', 'kbo', 'kbp', 'kbq', 'kbr', 'kbs', 'kbt', 'kbu', 'kbv', 'kbw', 'kbx', 'kby', 'kbz', 'kca', 'kcb', 'kcc', 'kcd', 'kce', 'kcf', 'kcg', 'kch', 'kci', 'kcj', 'kck', 'kcl', 'kcm', 'kcn', 'kco', 'kcp', 'kcq', 'kcr', 'kcs', 'kct', 'kcu', 'kcv', 'kcw', 'kcx', 'kcy', 'kcz', 'kda', 'kdc', 'kdd', 'kde', 'kdf', 'kdg', 'kdh', 'kdi', 'kdj', 'kdk', 'kdl', 'kdm', 'kdn', 'kdo', 'kdp', 'kdq', 'kdr', 'kdt', 'kdu', 'kdv', 'kdw', 'kdx', 'kdy', 'kdz', 'kea', 'keb', 'kec', 'ked', 'kee', 'kef', 'keg', 'keh', 'kei', 'kej', 'kek', 'kel', 'kem', 'ken', 'keo', 'kep', 'keq', 'ker', 'kes', 'ket', 'keu', 'kev', 'kew', 'kex', 'key', 'kez', 'kfa', 'kfb', 'kfc', 'kfd', 'kfe', 'kff', 'kfg', 'kfh', 'kfi', 'kfj', 'kfk', 'kfl', 'kfm', 'kfn', 'kfo', 'kfp', 'kfq', 'kfr', 'kfs', 'kft', 'kfu', 'kfv', 'kfw', 'kfx', 'kfy', 'kfz', 'kga', 'kgb', 'kgc', 'kgd', 'kge', 'kgf', 'kgg', 'kgh', 'kgi', 'kgj', 'kgk', 'kgl', 'kgm', 'kgn', 'kgo', 'kgp', 'kgq', 'kgr', 'kgs', 'kgt', 'kgu', 'kgv', 'kgw', 'kgx', 'kgy', 'kha', 'khb', 'khc', 'khd', 'khe', 'khf', 'khg', 'khh', 'khi', 'khj', 'khk', 'khl', 'khn', 'kho', 'khp', 'khq', 'khr', 'khs', 'kht', 'khu', 'khv', 'khw', 'khx', 'khy', 'khz', 'kia', 'kib', 'kic', 'kid', 'kie', 'kif', 'kig', 'kih', 'kii', 'kij', 'kil', 'kim', 'kio', 'kip', 'kiq', 'kis', 'kit', 'kiu', 'kiv', 'kiw', 'kix', 'kiy', 'kiz', 'kja', 'kjb', 'kjc', 'kjd', 'kje', 'kjf', 'kjg', 'kjh', 'kji', 'kjj', 'kjk', 'kjl', 'kjm', 'kjn', 'kjo', 'kjp', 'kjq', 'kjr', 'kjs', 'kjt', 'kju', 'kjv', 'kjx', 'kjy', 'kjz', 'kka', 'kkb', 'kkc', 'kkd', 'kke', 'kkf', 'kkg', 'kkh', 'kki', 'kkj', 'kkk', 'kkl', 'kkm', 'kkn', 'kko', 'kkp', 'kkq', 'kkr', 'kks', 'kkt', 'kku', 'kkv', 'kkw', 'kkx', 'kky', 'kkz', 'kla', 'klb', 'klc', 'kld', 'kle', 'klf', 'klg', 'klh', 'kli', 'klj', 'klk', 'kll', 'klm', 'kln', 'klo', 'klp', 'klq', 'klr', 'kls', 'klt', 'klu', 'klv', 'klw', 'klx', 'kly', 'klz', 'kma', 'kmb', 'kmc', 'kmd', 'kme', 'kmf', 'kmg', 'kmh', 'kmi', 'kmj', 'kmk', 'kml', 'kmm', 'kmn', 'kmo', 'kmp', 'kmq', 'kmr', 'kms', 'kmt', 'kmu', 'kmv', 'kmw', 'kmx', 'kmy', 'kmz', 'kna', 'knb', 'knc', 'knd', 'kne', 'knf', 'kng', 'kni', 'knj', 'knk', 'knl', 'knm', 'knn', 'kno', 'knp', 'knq', 'knr', 'kns', 'knt', 'knu', 'knv', 'knw', 'knx', 'kny', 'knz', 'koa', 'koc', 'kod', 'koe', 'kof', 'kog', 'koh', 'koi', 'koj', 'kok', 'kol', 'koo', 'kop', 'koq', 'kos', 'kot', 'kou', 'kov', 'kow', 'kox', 'koy', 'koz', 'kpa', 'kpb', 'kpc', 'kpd', 'kpe', 'kpf', 'kpg', 'kph', 'kpi', 'kpj', 'kpk', 'kpl', 'kpm', 'kpn', 'kpo', 'kpp', 'kpq', 'kpr', 'kps', 'kpt', 'kpu', 'kpv', 'kpw', 'kpx', 'kpy', 'kpz', 'kqa', 'kqb', 'kqc', 'kqd', 'kqe', 'kqf', 'kqg', 'kqh', 'kqi', 'kqj', 'kqk', 'kql', 'kqm', 'kqn', 'kqo', 'kqp', 'kqq', 'kqr', 'kqs', 'kqt', 'kqu', 'kqv', 'kqw', 'kqx', 'kqy', 'kqz', 'kra', 'krb', 'krc', 'krd', 'kre', 'krf', 'krh', 'kri', 'krj', 'krk', 'krl', 'krm', 'krn', 'kro', 'krp', 'krr', 'krs', 'krt', 'kru', 'krv', 'krw', 'krx', 'kry', 'krz', 'ksa', 'ksb', 'ksc', 'ksd', 'kse', 'ksf', 'ksg', 'ksh', 'ksi', 'ksj', 'ksk', 'ksl', 'ksm', 'ksn', 'kso', 'ksp', 'ksq', 'ksr', 'kss', 'kst', 'ksu', 'ksv', 'ksw', 'ksx', 'ksy', 'ksz', 'kta', 'ktb', 'ktc', 'ktd', 'kte', 'ktf', 'ktg', 'kth', 'kti', 'ktj', 'ktk', 'ktl', 'ktm', 'ktn', 'kto', 'ktp', 'ktq', 'ktr', 'kts', 'ktt', 'ktu', 'ktv', 'ktw', 'ktx', 'kty', 'ktz', 'kub', 'kuc', 'kud', 'kue', 'kuf', 'kug', 'kuh', 'kui', 'kuj', 'kuk', 'kul', 'kum', 'kun', 'kuo', 'kup', 'kuq', 'kus', 'kut', 'kuu', 'kuv', 'kuw', 'kux', 'kuy', 'kuz', 'kva', 'kvb', 'kvc', 'kvd', 'kve', 'kvf', 'kvg', 'kvh', 'kvi', 'kvj', 'kvk', 'kvl', 'kvm', 'kvn', 'kvo', 'kvp', 'kvq', 'kvr', 'kvs', 'kvt', 'kvu', 'kvv', 'kvw', 'kvx', 'kvy', 'kvz', 'kwa', 'kwb', 'kwc', 'kwd', 'kwe', 'kwf', 'kwg', 'kwh', 'kwi', 'kwj', 'kwk', 'kwl', 'kwm', 'kwn', 'kwo', 'kwp', 'kwq', 'kwr', 'kws', 'kwt', 'kwu', 'kwv', 'kww', 'kwx', 'kwy', 'kwz', 'kxa', 'kxb', 'kxc', 'kxd', 'kxe', 'kxf', 'kxh', 'kxi', 'kxj', 'kxk', 'kxl', 'kxm', 'kxn', 'kxo', 'kxp', 'kxq', 'kxr', 'kxs', 'kxt', 'kxu', 'kxv', 'kxw', 'kxx', 'kxy', 'kxz', 'kya', 'kyb', 'kyc', 'kyd', 'kye', 'kyf', 'kyg', 'kyh', 'kyi', 'kyj', 'kyk', 'kyl', 'kym', 'kyn', 'kyo', 'kyp', 'kyq', 'kyr', 'kys', 'kyt', 'kyu', 'kyv', 'kyw', 'kyx', 'kyy', 'kyz', 'kza', 'kzb', 'kzc', 'kzd', 'kze', 'kzf', 'kzg', 'kzh', 'kzi', 'kzj', 'kzk', 'kzl', 'kzm', 'kzn', 'kzo', 'kzp', 'kzq', 'kzr', 'kzs', 'kzt', 'kzu', 'kzv', 'kzw', 'kzx', 'kzy', 'kzz', 'laa', 'lab', 'lac', 'lad', 'lae', 'laf', 'lag', 'lah', 'lai', 'laj', 'lak', 'lal', 'lam', 'lan', 'lap', 'laq', 'lar', 'las', 'lau', 'law', 'lax', 'lay', 'laz', 'lba', 'lbb', 'lbc', 'lbe', 'lbf', 'lbg', 'lbi', 'lbj', 'lbk', 'lbl', 'lbm', 'lbn', 'lbo', 'lbq', 'lbr', 'lbs', 'lbt', 'lbu', 'lbv', 'lbw', 'lbx', 'lby', 'lbz', 'lcc', 'lcd', 'lce', 'lcf', 'lch', 'lcl', 'lcm', 'lcp', 'lcq', 'lcs', 'lda', 'ldb', 'ldd', 'ldg', 'ldh', 'ldi', 'ldj', 'ldk', 'ldl', 'ldm', 'ldn', 'ldo', 'ldp', 'ldq', 'lea', 'leb', 'lec', 'led', 'lee', 'lef', 'leg', 'leh', 'lei', 'lej', 'lek', 'lel', 'lem', 'len', 'leo', 'lep', 'leq', 'ler', 'les', 'let', 'leu', 'lev', 'lew', 'lex', 'ley', 'lez', 'lfa', 'lfn', 'lga', 'lgb', 'lgg', 'lgh', 'lgi', 'lgk', 'lgl', 'lgm', 'lgn', 'lgq', 'lgr', 'lgt', 'lgu', 'lgz', 'lha', 'lhh', 'lhi', 'lhl', 'lhm', 'lhn', 'lhp', 'lhs', 'lht', 'lhu', 'lia', 'lib', 'lic', 'lid', 'lie', 'lif', 'lig', 'lih', 'lii', 'lij', 'lik', 'lil', 'lio', 'lip', 'liq', 'lir', 'lis', 'liu', 'liv', 'liw', 'lix', 'liy', 'liz', 'lja', 'lje', 'lji', 'ljl', 'ljp', 'ljw', 'ljx', 'lka', 'lkb', 'lkc', 'lkd', 'lke', 'lkh', 'lki', 'lkj', 'lkl', 'lkm', 'lkn', 'lko', 'lkr', 'lks', 'lkt', 'lku', 'lky', 'lla', 'llb', 'llc', 'lld', 'lle', 'llf', 'llg', 'llh', 'lli', 'llj', 'llk', 'lll', 'llm', 'lln', 'llo', 'llp', 'llq', 'lls', 'llu', 'llx', 'lma', 'lmb', 'lmc', 'lmd', 'lme', 'lmf', 'lmg', 'lmh', 'lmi', 'lmj', 'lmk', 'lml', 'lmm', 'lmn', 'lmo', 'lmp', 'lmq', 'lmr', 'lmu', 'lmv', 'lmw', 'lmx', 'lmy', 'lmz', 'lna', 'lnb', 'lnd', 'lng', 'lnh', 'lni', 'lnj', 'lnl', 'lnm', 'lnn', 'lno', 'lns', 'lnu', 'lnw', 'lnz', 'loa', 'lob', 'loc', 'loe', 'lof', 'log', 'loh', 'loi', 'loj', 'lok', 'lol', 'lom', 'lon', 'loo', 'lop', 'loq', 'lor', 'los', 'lot', 'lou', 'lov', 'low', 'lox', 'loy', 'loz', 'lpa', 'lpe', 'lpn', 'lpo', 'lpx', 'lra', 'lrc', 'lre', 'lrg', 'lri', 'lrk', 'lrl', 'lrm', 'lrn', 'lro', 'lrr', 'lrt', 'lrv', 'lrz', 'lsa', 'lsd', 'lse', 'lsg', 'lsh', 'lsi', 'lsl', 'lsm', 'lso', 'lsp', 'lsr', 'lss', 'lst', 'lsy', 'ltc', 'ltg', 'lth', 'lti', 'ltn', 'lto', 'lts', 'ltu', 'lua', 'luc', 'lud', 'lue', 'luf', 'lui', 'luj', 'luk', 'lul', 'lum', 'lun', 'luo', 'lup', 'luq', 'lur', 'lus', 'lut', 'luu', 'luv', 'luw', 'luy', 'luz', 'lva', 'lvk', 'lvs', 'lvu', 'lwa', 'lwe', 'lwg', 'lwh', 'lwl', 'lwm', 'lwo', 'lws', 'lwt', 'lwu', 'lww', 'lya', 'lyg', 'lyn', 'lzh', 'lzl', 'lzn', 'lzz', 'maa', 'mab', 'mad', 'mae', 'maf', 'mag', 'mai', 'maj', 'mak', 'mam', 'man', 'map', 'maq', 'mas', 'mat', 'mau', 'mav', 'maw', 'max', 'maz', 'mba', 'mbb', 'mbc', 'mbd', 'mbe', 'mbf', 'mbh', 'mbi', 'mbj', 'mbk', 'mbl', 'mbm', 'mbn', 'mbo', 'mbp', 'mbq', 'mbr', 'mbs', 'mbt', 'mbu', 'mbv', 'mbw', 'mbx', 'mby', 'mbz', 'mca', 'mcb', 'mcc', 'mcd', 'mce', 'mcf', 'mcg', 'mch', 'mci', 'mcj', 'mck', 'mcl', 'mcm', 'mcn', 'mco', 'mcp', 'mcq', 'mcr', 'mcs', 'mct', 'mcu', 'mcv', 'mcw', 'mcx', 'mcy', 'mcz', 'mda', 'mdb', 'mdc', 'mdd', 'mde', 'mdf', 'mdg', 'mdh', 'mdi', 'mdj', 'mdk', 'mdl', 'mdm', 'mdn', 'mdp', 'mdq', 'mdr', 'mds', 'mdt', 'mdu', 'mdv', 'mdw', 'mdx', 'mdy', 'mdz', 'mea', 'meb', 'mec', 'med', 'mee', 'mef', 'meg', 'meh', 'mei', 'mej', 'mek', 'mel', 'mem', 'men', 'meo', 'mep', 'meq', 'mer', 'mes', 'met', 'meu', 'mev', 'mew', 'mey', 'mez', 'mfa', 'mfb', 'mfc', 'mfd', 'mfe', 'mff', 'mfg', 'mfh', 'mfi', 'mfj', 'mfk', 'mfl', 'mfm', 'mfn', 'mfo', 'mfp', 'mfq', 'mfr', 'mfs', 'mft', 'mfu', 'mfv', 'mfw', 'mfx', 'mfy', 'mfz', 'mga', 'mgb', 'mgc', 'mgd', 'mge', 'mgf', 'mgg', 'mgh', 'mgi', 'mgj', 'mgk', 'mgl', 'mgm', 'mgn', 'mgo', 'mgp', 'mgq', 'mgr', 'mgs', 'mgt', 'mgu', 'mgv', 'mgw', 'mgx', 'mgy', 'mgz', 'mha', 'mhb', 'mhc', 'mhd', 'mhe', 'mhf', 'mhg', 'mhh', 'mhi', 'mhj', 'mhk', 'mhl', 'mhm', 'mhn', 'mho', 'mhp', 'mhq', 'mhr', 'mhs', 'mht', 'mhu', 'mhw', 'mhx', 'mhy', 'mhz', 'mia', 'mib', 'mic', 'mid', 'mie', 'mif', 'mig', 'mih', 'mii', 'mij', 'mik', 'mil', 'mim', 'min', 'mio', 'mip', 'miq', 'mir', 'mis', 'mit', 'miu', 'miw', 'mix', 'miy', 'miz', 'mja', 'mjb', 'mjc', 'mjd', 'mje', 'mjg', 'mjh', 'mji', 'mjj', 'mjk', 'mjl', 'mjm', 'mjn', 'mjo', 'mjp', 'mjq', 'mjr', 'mjs', 'mjt', 'mju', 'mjv', 'mjw', 'mjx', 'mjy', 'mjz', 'mka', 'mkb', 'mkc', 'mke', 'mkf', 'mkg', 'mkh', 'mki', 'mkj', 'mkk', 'mkl', 'mkm', 'mkn', 'mko', 'mkp', 'mkq', 'mkr', 'mks', 'mkt', 'mku', 'mkv', 'mkw', 'mkx', 'mky', 'mkz', 'mla', 'mlb', 'mlc', 'mld', 'mle', 'mlf', 'mlh', 'mli', 'mlj', 'mlk', 'mll', 'mlm', 'mln', 'mlo', 'mlp', 'mlq', 'mlr', 'mls', 'mlu', 'mlv', 'mlw', 'mlx', 'mlz', 'mma', 'mmb', 'mmc', 'mmd', 'mme', 'mmf', 'mmg', 'mmh', 'mmi', 'mmj', 'mmk', 'mml', 'mmm', 'mmn', 'mmo', 'mmp', 'mmq', 'mmr', 'mmt', 'mmu', 'mmv', 'mmw', 'mmx', 'mmy', 'mmz', 'mna', 'mnb', 'mnc', 'mnd', 'mne', 'mnf', 'mng', 'mnh', 'mni', 'mnj', 'mnk', 'mnl', 'mnm', 'mnn', 'mno', 'mnp', 'mnq', 'mnr', 'mns', 'mnt', 'mnu', 'mnv', 'mnw', 'mnx', 'mny', 'mnz', 'moa', 'moc', 'mod', 'moe', 'mof', 'mog', 'moh', 'moi', 'moj', 'mok', 'mom', 'moo', 'mop', 'moq', 'mor', 'mos', 'mot', 'mou', 'mov', 'mow', 'mox', 'moy', 'moz', 'mpa', 'mpb', 'mpc', 'mpd', 'mpe', 'mpg', 'mph', 'mpi', 'mpj', 'mpk', 'mpl', 'mpm', 'mpn', 'mpo', 'mpp', 'mpq', 'mpr', 'mps', 'mpt', 'mpu', 'mpv', 'mpw', 'mpx', 'mpy', 'mpz', 'mqa', 'mqb', 'mqc', 'mqe', 'mqf', 'mqg', 'mqh', 'mqi', 'mqj', 'mqk', 'mql', 'mqm', 'mqn', 'mqo', 'mqp', 'mqq', 'mqr', 'mqs', 'mqt', 'mqu', 'mqv', 'mqw', 'mqx', 'mqy', 'mqz', 'mra', 'mrb', 'mrc', 'mrd', 'mre', 'mrf', 'mrg', 'mrh', 'mrj', 'mrk', 'mrl', 'mrm', 'mrn', 'mro', 'mrp', 'mrq', 'mrr', 'mrs', 'mrt', 'mru', 'mrv', 'mrw', 'mrx', 'mry', 'mrz', 'msb', 'msc', 'msd', 'mse', 'msf', 'msg', 'msh', 'msi', 'msj', 'msk', 'msl', 'msm', 'msn', 'mso', 'msp', 'msq', 'msr', 'mss', 'mst', 'msu', 'msv', 'msw', 'msx', 'msy', 'msz', 'mta', 'mtb', 'mtc', 'mtd', 'mte', 'mtf', 'mtg', 'mth', 'mti', 'mtj', 'mtk', 'mtl', 'mtm', 'mtn', 'mto', 'mtp', 'mtq', 'mtr', 'mts', 'mtt', 'mtu', 'mtv', 'mtw', 'mtx', 'mty', 'mua', 'mub', 'muc', 'mud', 'mue', 'mug', 'muh', 'mui', 'muj', 'muk', 'mul', 'mum', 'mun', 'muo', 'mup', 'muq', 'mur', 'mus', 'mut', 'muu', 'muv', 'mux', 'muy', 'muz', 'mva', 'mvb', 'mvd', 'mve', 'mvf', 'mvg', 'mvh', 'mvi', 'mvk', 'mvl', 'mvm', 'mvn', 'mvo', 'mvp', 'mvq', 'mvr', 'mvs', 'mvt', 'mvu', 'mvv', 'mvw', 'mvx', 'mvy', 'mvz', 'mwa', 'mwb', 'mwc', 'mwd', 'mwe', 'mwf', 'mwg', 'mwh', 'mwi', 'mwj', 'mwk', 'mwl', 'mwm', 'mwn', 'mwo', 'mwp', 'mwq', 'mwr', 'mws', 'mwt', 'mwu', 'mwv', 'mww', 'mwx', 'mwy', 'mwz', 'mxa', 'mxb', 'mxc', 'mxd', 'mxe', 'mxf', 'mxg', 'mxh', 'mxi', 'mxj', 'mxk', 'mxl', 'mxm', 'mxn', 'mxo', 'mxp', 'mxq', 'mxr', 'mxs', 'mxt', 'mxu', 'mxv', 'mxw', 'mxx', 'mxy', 'mxz', 'myb', 'myc', 'myd', 'mye', 'myf', 'myg', 'myh', 'myi', 'myj', 'myk', 'myl', 'mym', 'myn', 'myo', 'myp', 'myq', 'myr', 'mys', 'myt', 'myu', 'myv', 'myw', 'myx', 'myy', 'myz', 'mza', 'mzb', 'mzc', 'mzd', 'mze', 'mzg', 'mzh', 'mzi', 'mzj', 'mzk', 'mzl', 'mzm', 'mzn', 'mzo', 'mzp', 'mzq', 'mzr', 'mzs', 'mzt', 'mzu', 'mzv', 'mzw', 'mzx', 'mzy', 'mzz', 'naa', 'nab', 'nac', 'nad', 'nae', 'naf', 'nag', 'nah', 'nai', 'naj', 'nak', 'nal', 'nam', 'nan', 'nao', 'nap', 'naq', 'nar', 'nas', 'nat', 'naw', 'nax', 'nay', 'naz', 'nba', 'nbb', 'nbc', 'nbd', 'nbe', 'nbf', 'nbg', 'nbh', 'nbi', 'nbj', 'nbk', 'nbm', 'nbn', 'nbo', 'nbp', 'nbq', 'nbr', 'nbs', 'nbt', 'nbu', 'nbv', 'nbw', 'nbx', 'nby', 'nca', 'ncb', 'ncc', 'ncd', 'nce', 'ncf', 'ncg', 'nch', 'nci', 'ncj', 'nck', 'ncl', 'ncm', 'ncn', 'nco', 'ncp', 'ncq', 'ncr', 'ncs', 'nct', 'ncu', 'ncx', 'ncz', 'nda', 'ndb', 'ndc', 'ndd', 'ndf', 'ndg', 'ndh', 'ndi', 'ndj', 'ndk', 'ndl', 'ndm', 'ndn', 'ndp', 'ndq', 'ndr', 'nds', 'ndt', 'ndu', 'ndv', 'ndw', 'ndx', 'ndy', 'ndz', 'nea', 'neb', 'nec', 'ned', 'nee', 'nef', 'neg', 'neh', 'nei', 'nej', 'nek', 'nem', 'nen', 'neo', 'neq', 'ner', 'nes', 'net', 'neu', 'nev', 'new', 'nex', 'ney', 'nez', 'nfa', 'nfd', 'nfl', 'nfr', 'nfu', 'nga', 'ngb', 'ngc', 'ngd', 'nge', 'ngf', 'ngg', 'ngh', 'ngi', 'ngj', 'ngk', 'ngl', 'ngm', 'ngn', 'ngo', 'ngp', 'ngq', 'ngr', 'ngs', 'ngt', 'ngu', 'ngv', 'ngw', 'ngx', 'ngy', 'ngz', 'nha', 'nhb', 'nhc', 'nhd', 'nhe', 'nhf', 'nhg', 'nhh', 'nhi', 'nhk', 'nhm', 'nhn', 'nho', 'nhp', 'nhq', 'nhr', 'nht', 'nhu', 'nhv', 'nhw', 'nhx', 'nhy', 'nhz', 'nia', 'nib', 'nic', 'nid', 'nie', 'nif', 'nig', 'nih', 'nii', 'nij', 'nik', 'nil', 'nim', 'nin', 'nio', 'niq', 'nir', 'nis', 'nit', 'niu', 'niv', 'niw', 'nix', 'niy', 'niz', 'nja', 'njb', 'njd', 'njh', 'nji', 'njj', 'njl', 'njm', 'njn', 'njo', 'njr', 'njs', 'njt', 'nju', 'njx', 'njy', 'njz', 'nka', 'nkb', 'nkc', 'nkd', 'nke', 'nkf', 'nkg', 'nkh', 'nki', 'nkj', 'nkk', 'nkm', 'nkn', 'nko', 'nkp', 'nkq', 'nkr', 'nks', 'nkt', 'nku', 'nkv', 'nkw', 'nkx', 'nkz', 'nla', 'nlc', 'nle', 'nlg', 'nli', 'nlj', 'nlk', 'nll', 'nlm', 'nln', 'nlo', 'nlq', 'nlr', 'nlu', 'nlv', 'nlw', 'nlx', 'nly', 'nlz', 'nma', 'nmb', 'nmc', 'nmd', 'nme', 'nmf', 'nmg', 'nmh', 'nmi', 'nmj', 'nmk', 'nml', 'nmm', 'nmn', 'nmo', 'nmp', 'nmq', 'nmr', 'nms', 'nmt', 'nmu', 'nmv', 'nmw', 'nmx', 'nmy', 'nmz', 'nna', 'nnb', 'nnc', 'nnd', 'nne', 'nnf', 'nng', 'nnh', 'nni', 'nnj', 'nnk', 'nnl', 'nnm', 'nnn', 'nnp', 'nnq', 'nnr', 'nns', 'nnt', 'nnu', 'nnv', 'nnw', 'nnx', 'nny', 'nnz', 'noa', 'noc', 'nod', 'noe', 'nof', 'nog', 'noh', 'noi', 'noj', 'nok', 'nol', 'nom', 'non', 'noo', 'nop', 'noq', 'nos', 'not', 'nou', 'nov', 'now', 'noy', 'noz', 'npa', 'npb', 'npg', 'nph', 'npi', 'npl', 'npn', 'npo', 'nps', 'npu', 'npx', 'npy', 'nqg', 'nqk', 'nql', 'nqm', 'nqn', 'nqo', 'nqq', 'nqy', 'nra', 'nrb', 'nrc', 'nre', 'nrf', 'nrg', 'nri', 'nrk', 'nrl', 'nrm', 'nrn', 'nrp', 'nrr', 'nrt', 'nru', 'nrx', 'nrz', 'nsa', 'nsc', 'nsd', 'nse', 'nsf', 'nsg', 'nsh', 'nsi', 'nsk', 'nsl', 'nsm', 'nsn', 'nso', 'nsp', 'nsq', 'nsr', 'nss', 'nst', 'nsu', 'nsv', 'nsw', 'nsx', 'nsy', 'nsz', 'ntd', 'nte', 'ntg', 'nti', 'ntj', 'ntk', 'ntm', 'nto', 'ntp', 'ntr', 'nts', 'ntu', 'ntw', 'ntx', 'nty', 'ntz', 'nua', 'nub', 'nuc', 'nud', 'nue', 'nuf', 'nug', 'nuh', 'nui', 'nuj', 'nuk', 'nul', 'num', 'nun', 'nuo', 'nup', 'nuq', 'nur', 'nus', 'nut', 'nuu', 'nuv', 'nuw', 'nux', 'nuy', 'nuz', 'nvh', 'nvm', 'nvo', 'nwa', 'nwb', 'nwc', 'nwe', 'nwg', 'nwi', 'nwm', 'nwo', 'nwr', 'nwx', 'nwy', 'nxa', 'nxd', 'nxe', 'nxg', 'nxi', 'nxk', 'nxl', 'nxm', 'nxn', 'nxo', 'nxq', 'nxr', 'nxu', 'nxx', 'nyb', 'nyc', 'nyd', 'nye', 'nyf', 'nyg', 'nyh', 'nyi', 'nyj', 'nyk', 'nyl', 'nym', 'nyn', 'nyo', 'nyp', 'nyq', 'nyr', 'nys', 'nyt', 'nyu', 'nyv', 'nyw', 'nyx', 'nyy', 'nza', 'nzb', 'nzd', 'nzi', 'nzk', 'nzm', 'nzs', 'nzu', 'nzy', 'nzz', 'oaa', 'oac', 'oar', 'oav', 'obi', 'obk', 'obl', 'obm', 'obo', 'obr', 'obt', 'obu', 'oca', 'och', 'oco', 'ocu', 'oda', 'odk', 'odt', 'odu', 'ofo', 'ofs', 'ofu', 'ogb', 'ogc', 'oge', 'ogg', 'ogo', 'ogu', 'oht', 'ohu', 'oia', 'oin', 'ojb', 'ojc', 'ojg', 'ojp', 'ojs', 'ojv', 'ojw', 'oka', 'okb', 'okd', 'oke', 'okg', 'okh', 'oki', 'okj', 'okk', 'okl', 'okm', 'okn', 'oko', 'okr', 'oks', 'oku', 'okv', 'okx', 'ola', 'old', 'ole', 'olk', 'olm', 'olo', 'olr', 'olt', 'olu', 'oma', 'omb', 'omc', 'ome', 'omg', 'omi', 'omk', 'oml', 'omn', 'omo', 'omp', 'omq', 'omr', 'omt', 'omu', 'omv', 'omw', 'omx', 'ona', 'onb', 'one', 'ong', 'oni', 'onj', 'onk', 'onn', 'ono', 'onp', 'onr', 'ons', 'ont', 'onu', 'onw', 'onx', 'ood', 'oog', 'oon', 'oor', 'oos', 'opa', 'opk', 'opm', 'opo', 'opt', 'opy', 'ora', 'orc', 'ore', 'org', 'orh', 'orn', 'oro', 'orr', 'ors', 'ort', 'oru', 'orv', 'orw', 'orx', 'ory', 'orz', 'osa', 'osc', 'osi', 'oso', 'osp', 'ost', 'osu', 'osx', 'ota', 'otb', 'otd', 'ote', 'oti', 'otk', 'otl', 'otm', 'otn', 'oto', 'otq', 'otr', 'ots', 'ott', 'otu', 'otw', 'otx', 'oty', 'otz', 'oua', 'oub', 'oue', 'oui', 'oum', 'oun', 'ovd', 'owi', 'owl', 'oyb', 'oyd', 'oym', 'oyy', 'ozm', 'paa', 'pab', 'pac', 'pad', 'pae', 'paf', 'pag', 'pah', 'pai', 'pak', 'pal', 'pam', 'pao', 'pap', 'paq', 'par', 'pas', 'pat', 'pau', 'pav', 'paw', 'pax', 'pay', 'paz', 'pbb', 'pbc', 'pbe', 'pbf', 'pbg', 'pbh', 'pbi', 'pbl', 'pbm', 'pbn', 'pbo', 'pbp', 'pbr', 'pbs', 'pbt', 'pbu', 'pbv', 'pby', 'pbz', 'pca', 'pcb', 'pcc', 'pcd', 'pce', 'pcf', 'pcg', 'pch', 'pci', 'pcj', 'pck', 'pcl', 'pcm', 'pcn', 'pcp', 'pcr', 'pcw', 'pda', 'pdc', 'pdi', 'pdn', 'pdo', 'pdt', 'pdu', 'pea', 'peb', 'ped', 'pee', 'pef', 'peg', 'peh', 'pei', 'pej', 'pek', 'pel', 'pem', 'peo', 'pep', 'peq', 'pes', 'pev', 'pex', 'pey', 'pez', 'pfa', 'pfe', 'pfl', 'pga', 'pgd', 'pgg', 'pgi', 'pgk', 'pgl', 'pgn', 'pgs', 'pgu', 'pgy', 'pgz', 'pha', 'phd', 'phg', 'phh', 'phi', 'phk', 'phl', 'phm', 'phn', 'pho', 'phq', 'phr', 'pht', 'phu', 'phv', 'phw', 'pia', 'pib', 'pic', 'pid', 'pie', 'pif', 'pig', 'pih', 'pii', 'pij', 'pil', 'pim', 'pin', 'pio', 'pip', 'pir', 'pis', 'pit', 'piu', 'piv', 'piw', 'pix', 'piy', 'piz', 'pjt', 'pka', 'pkb', 'pkc', 'pkg', 'pkh', 'pkn', 'pko', 'pkp', 'pkr', 'pks', 'pkt', 'pku', 'pla', 'plb', 'plc', 'pld', 'ple', 'plf', 'plg', 'plh', 'plj', 'plk', 'pll', 'pln', 'plo', 'plp', 'plq', 'plr', 'pls', 'plt', 'plu', 'plv', 'plw', 'ply', 'plz', 'pma', 'pmb', 'pmc', 'pmd', 'pme', 'pmf', 'pmh', 'pmi', 'pmj', 'pmk', 'pml', 'pmm', 'pmn', 'pmo', 'pmq', 'pmr', 'pms', 'pmt', 'pmu', 'pmw', 'pmx', 'pmy', 'pmz', 'pna', 'pnb', 'pnc', 'pne', 'png', 'pnh', 'pni', 'pnj', 'pnk', 'pnl', 'pnm', 'pnn', 'pno', 'pnp', 'pnq', 'pnr', 'pns', 'pnt', 'pnu', 'pnv', 'pnw', 'pnx', 'pny', 'pnz', 'poc', 'pod', 'poe', 'pof', 'pog', 'poh', 'poi', 'pok', 'pom', 'pon', 'poo', 'pop', 'poq', 'pos', 'pot', 'pov', 'pow', 'pox', 'poy', 'poz', 'ppa', 'ppe', 'ppi', 'ppk', 'ppl', 'ppm', 'ppn', 'ppo', 'ppp', 'ppq', 'ppr', 'pps', 'ppt', 'ppu', 'pqa', 'pqe', 'pqm', 'pqw', 'pra', 'prb', 'prc', 'prd', 'pre', 'prf', 'prg', 'prh', 'pri', 'prk', 'prl', 'prm', 'prn', 'pro', 'prp', 'prq', 'prr', 'prs', 'prt', 'pru', 'prw', 'prx', 'pry', 'prz', 'psa', 'psc', 'psd', 'pse', 'psg', 'psh', 'psi', 'psl', 'psm', 'psn', 'pso', 'psp', 'psq', 'psr', 'pss', 'pst', 'psu', 'psw', 'psy', 'pta', 'pth', 'pti', 'ptn', 'pto', 'ptp', 'ptq', 'ptr', 'ptt', 'ptu', 'ptv', 'ptw', 'pty', 'pua', 'pub', 'puc', 'pud', 'pue', 'puf', 'pug', 'pui', 'puj', 'puk', 'pum', 'puo', 'pup', 'puq', 'pur', 'put', 'puu', 'puw', 'pux', 'puy', 'puz', 'pwa', 'pwb', 'pwg', 'pwi', 'pwm', 'pwn', 'pwo', 'pwr', 'pww', 'pxm', 'pye', 'pym', 'pyn', 'pys', 'pyu', 'pyx', 'pyy', 'pzn', 'qaa..qtz', 'qua', 'qub', 'quc', 'qud', 'quf', 'qug', 'quh', 'qui', 'quk', 'qul', 'qum', 'qun', 'qup', 'quq', 'qur', 'qus', 'quv', 'quw', 'qux', 'quy', 'quz', 'qva', 'qvc', 'qve', 'qvh', 'qvi', 'qvj', 'qvl', 'qvm', 'qvn', 'qvo', 'qvp', 'qvs', 'qvw', 'qvy', 'qvz', 'qwa', 'qwc', 'qwe', 'qwh', 'qwm', 'qws', 'qwt', 'qxa', 'qxc', 'qxh', 'qxl', 'qxn', 'qxo', 'qxp', 'qxq', 'qxr', 'qxs', 'qxt', 'qxu', 'qxw', 'qya', 'qyp', 'raa', 'rab', 'rac', 'rad', 'raf', 'rag', 'rah', 'rai', 'raj', 'rak', 'ral', 'ram', 'ran', 'rao', 'rap', 'raq', 'rar', 'ras', 'rat', 'rau', 'rav', 'raw', 'rax', 'ray', 'raz', 'rbb', 'rbk', 'rbl', 'rbp', 'rcf', 'rdb', 'rea', 'reb', 'ree', 'reg', 'rei', 'rej', 'rel', 'rem', 'ren', 'rer', 'res', 'ret', 'rey', 'rga', 'rge', 'rgk', 'rgn', 'rgr', 'rgs', 'rgu', 'rhg', 'rhp', 'ria', 'rie', 'rif', 'ril', 'rim', 'rin', 'rir', 'rit', 'riu', 'rjg', 'rji', 'rjs', 'rka', 'rkb', 'rkh', 'rki', 'rkm', 'rkt', 'rkw', 'rma', 'rmb', 'rmc', 'rmd', 'rme', 'rmf', 'rmg', 'rmh', 'rmi', 'rmk', 'rml', 'rmm', 'rmn', 'rmo', 'rmp', 'rmq', 'rmr', 'rms', 'rmt', 'rmu', 'rmv', 'rmw', 'rmx', 'rmy', 'rmz', 'rna', 'rnd', 'rng', 'rnl', 'rnn', 'rnp', 'rnr', 'rnw', 'roa', 'rob', 'roc', 'rod', 'roe', 'rof', 'rog', 'rol', 'rom', 'roo', 'rop', 'ror', 'rou', 'row', 'rpn', 'rpt', 'rri', 'rro', 'rrt', 'rsb', 'rsi', 'rsl', 'rsm', 'rtc', 'rth', 'rtm', 'rts', 'rtw', 'rub', 'ruc', 'rue', 'ruf', 'rug', 'ruh', 'rui', 'ruk', 'ruo', 'rup', 'ruq', 'rut', 'ruu', 'ruy', 'ruz', 'rwa', 'rwk', 'rwm', 'rwo', 'rwr', 'rxd', 'rxw', 'ryn', 'rys', 'ryu', 'rzh', 'saa', 'sab', 'sac', 'sad', 'sae', 'saf', 'sah', 'sai', 'saj', 'sak', 'sal', 'sam', 'sao', 'sap', 'saq', 'sar', 'sas', 'sat', 'sau', 'sav', 'saw', 'sax', 'say', 'saz', 'sba', 'sbb', 'sbc', 'sbd', 'sbe', 'sbf', 'sbg', 'sbh', 'sbi', 'sbj', 'sbk', 'sbl', 'sbm', 'sbn', 'sbo', 'sbp', 'sbq', 'sbr', 'sbs', 'sbt', 'sbu', 'sbv', 'sbw', 'sbx', 'sby', 'sbz', 'sca', 'scb', 'sce', 'scf', 'scg', 'sch', 'sci', 'sck', 'scl', 'scn', 'sco', 'scp', 'scq', 'scs', 'sct', 'scu', 'scv', 'scw', 'scx', 'sda', 'sdb', 'sdc', 'sde', 'sdf', 'sdg', 'sdh', 'sdj', 'sdk', 'sdl', 'sdm', 'sdn', 'sdo', 'sdp', 'sdr', 'sds', 'sdt', 'sdu', 'sdv', 'sdx', 'sdz', 'sea', 'seb', 'sec', 'sed', 'see', 'sef', 'seg', 'seh', 'sei', 'sej', 'sek', 'sel', 'sem', 'sen', 'seo', 'sep', 'seq', 'ser', 'ses', 'set', 'seu', 'sev', 'sew', 'sey', 'sez', 'sfb', 'sfe', 'sfm', 'sfs', 'sfw', 'sga', 'sgb', 'sgc', 'sgd', 'sge', 'sgg', 'sgh', 'sgi', 'sgj', 'sgk', 'sgl', 'sgm', 'sgn', 'sgo', 'sgp', 'sgr', 'sgs', 'sgt', 'sgu', 'sgw', 'sgx', 'sgy', 'sgz', 'sha', 'shb', 'shc', 'shd', 'she', 'shg', 'shh', 'shi', 'shj', 'shk', 'shl', 'shm', 'shn', 'sho', 'shp', 'shq', 'shr', 'shs', 'sht', 'shu', 'shv', 'shw', 'shx', 'shy', 'shz', 'sia', 'sib', 'sid', 'sie', 'sif', 'sig', 'sih', 'sii', 'sij', 'sik', 'sil', 'sim', 'sio', 'sip', 'siq', 'sir', 'sis', 'sit', 'siu', 'siv', 'siw', 'six', 'siy', 'siz', 'sja', 'sjb', 'sjd', 'sje', 'sjg', 'sjk', 'sjl', 'sjm', 'sjn', 'sjo', 'sjp', 'sjr', 'sjs', 'sjt', 'sju', 'sjw', 'ska', 'skb', 'skc', 'skd', 'ske', 'skf', 'skg', 'skh', 'ski', 'skj', 'skk', 'skm', 'skn', 'sko', 'skp', 'skq', 'skr', 'sks', 'skt', 'sku', 'skv', 'skw', 'skx', 'sky', 'skz', 'sla', 'slc', 'sld', 'sle', 'slf', 'slg', 'slh', 'sli', 'slj', 'sll', 'slm', 'sln', 'slp', 'slq', 'slr', 'sls', 'slt', 'slu', 'slw', 'slx', 'sly', 'slz', 'sma', 'smb', 'smc', 'smd', 'smf', 'smg', 'smh', 'smi', 'smj', 'smk', 'sml', 'smm', 'smn', 'smp', 'smq', 'smr', 'sms', 'smt', 'smu', 'smv', 'smw', 'smx', 'smy', 'smz', 'snb', 'snc', 'sne', 'snf', 'sng', 'snh', 'sni', 'snj', 'snk', 'snl', 'snm', 'snn', 'sno', 'snp', 'snq', 'snr', 'sns', 'snu', 'snv', 'snw', 'snx', 'sny', 'snz', 'soa', 'sob', 'soc', 'sod', 'soe', 'sog', 'soh', 'soi', 'soj', 'sok', 'sol', 'son', 'soo', 'sop', 'soq', 'sor', 'sos', 'sou', 'sov', 'sow', 'sox', 'soy', 'soz', 'spb', 'spc', 'spd', 'spe', 'spg', 'spi', 'spk', 'spl', 'spm', 'spn', 'spo', 'spp', 'spq', 'spr', 'sps', 'spt', 'spu', 'spv', 'spx', 'spy', 'sqa', 'sqh', 'sqj', 'sqk', 'sqm', 'sqn', 'sqo', 'sqq', 'sqr', 'sqs', 'sqt', 'squ', 'sra', 'srb', 'src', 'sre', 'srf', 'srg', 'srh', 'sri', 'srk', 'srl', 'srm', 'srn', 'sro', 'srq', 'srr', 'srs', 'srt', 'sru', 'srv', 'srw', 'srx', 'sry', 'srz', 'ssa', 'ssb', 'ssc', 'ssd', 'sse', 'ssf', 'ssg', 'ssh', 'ssi', 'ssj', 'ssk', 'ssl', 'ssm', 'ssn', 'sso', 'ssp', 'ssq', 'ssr', 'sss', 'sst', 'ssu', 'ssv', 'ssx', 'ssy', 'ssz', 'sta', 'stb', 'std', 'ste', 'stf', 'stg', 'sth', 'sti', 'stj', 'stk', 'stl', 'stm', 'stn', 'sto', 'stp', 'stq', 'str', 'sts', 'stt', 'stu', 'stv', 'stw', 'sty', 'sua', 'sub', 'suc', 'sue', 'sug', 'sui', 'suj', 'suk', 'sul', 'sum', 'suq', 'sur', 'sus', 'sut', 'suv', 'suw', 'sux', 'suy', 'suz', 'sva', 'svb', 'svc', 'sve', 'svk', 'svm', 'svr', 'svs', 'svx', 'swb', 'swc', 'swf', 'swg', 'swh', 'swi', 'swj', 'swk', 'swl', 'swm', 'swn', 'swo', 'swp', 'swq', 'swr', 'sws', 'swt', 'swu', 'swv', 'sww', 'swx', 'swy', 'sxb', 'sxc', 'sxe', 'sxg', 'sxk', 'sxl', 'sxm', 'sxn', 'sxo', 'sxr', 'sxs', 'sxu', 'sxw', 'sya', 'syb', 'syc', 'syd', 'syi', 'syk', 'syl', 'sym', 'syn', 'syo', 'syr', 'sys', 'syw', 'syx', 'syy', 'sza', 'szb', 'szc', 'szd', 'sze', 'szg', 'szl', 'szn', 'szp', 'szs', 'szv', 'szw', 'taa', 'tab', 'tac', 'tad', 'tae', 'taf', 'tag', 'tai', 'taj', 'tak', 'tal', 'tan', 'tao', 'tap', 'taq', 'tar', 'tas', 'tau', 'tav', 'taw', 'tax', 'tay', 'taz', 'tba', 'tbb', 'tbc', 'tbd', 'tbe', 'tbf', 'tbg', 'tbh', 'tbi', 'tbj', 'tbk', 'tbl', 'tbm', 'tbn', 'tbo', 'tbp', 'tbq', 'tbr', 'tbs', 'tbt', 'tbu', 'tbv', 'tbw', 'tbx', 'tby', 'tbz', 'tca', 'tcb', 'tcc', 'tcd', 'tce', 'tcf', 'tcg', 'tch', 'tci', 'tck', 'tcl', 'tcm', 'tcn', 'tco', 'tcp', 'tcq', 'tcs', 'tct', 'tcu', 'tcw', 'tcx', 'tcy', 'tcz', 'tda', 'tdb', 'tdc', 'tdd', 'tde', 'tdf', 'tdg', 'tdh', 'tdi', 'tdj', 'tdk', 'tdl', 'tdm', 'tdn', 'tdo', 'tdq', 'tdr', 'tds', 'tdt', 'tdu', 'tdv', 'tdx', 'tdy', 'tea', 'teb', 'tec', 'ted', 'tee', 'tef', 'teg', 'teh', 'tei', 'tek', 'tem', 'ten', 'teo', 'tep', 'teq', 'ter', 'tes', 'tet', 'teu', 'tev', 'tew', 'tex', 'tey', 'tez', 'tfi', 'tfn', 'tfo', 'tfr', 'tft', 'tga', 'tgb', 'tgc', 'tgd', 'tge', 'tgf', 'tgg', 'tgh', 'tgi', 'tgj', 'tgn', 'tgo', 'tgp', 'tgq', 'tgr', 'tgs', 'tgt', 'tgu', 'tgv', 'tgw', 'tgx', 'tgy', 'tgz', 'thc', 'thd', 'the', 'thf', 'thh', 'thi', 'thk', 'thl', 'thm', 'thn', 'thp', 'thq', 'thr', 'ths', 'tht', 'thu', 'thv', 'thw', 'thx', 'thy', 'thz', 'tia', 'tic', 'tid', 'tie', 'tif', 'tig', 'tih', 'tii', 'tij', 'tik', 'til', 'tim', 'tin', 'tio', 'tip', 'tiq', 'tis', 'tit', 'tiu', 'tiv', 'tiw', 'tix', 'tiy', 'tiz', 'tja', 'tjg', 'tji', 'tjl', 'tjm', 'tjn', 'tjo', 'tjs', 'tju', 'tjw', 'tka', 'tkb', 'tkd', 'tke', 'tkf', 'tkg', 'tkk', 'tkl', 'tkm', 'tkn', 'tkp', 'tkq', 'tkr', 'tks', 'tkt', 'tku', 'tkv', 'tkw', 'tkx', 'tkz', 'tla', 'tlb', 'tlc', 'tld', 'tlf', 'tlg', 'tlh', 'tli', 'tlj', 'tlk', 'tll', 'tlm', 'tln', 'tlo', 'tlp', 'tlq', 'tlr', 'tls', 'tlt', 'tlu', 'tlv', 'tlw', 'tlx', 'tly', 'tma', 'tmb', 'tmc', 'tmd', 'tme', 'tmf', 'tmg', 'tmh', 'tmi', 'tmj', 'tmk', 'tml', 'tmm', 'tmn', 'tmo', 'tmp', 'tmq', 'tmr', 'tms', 'tmt', 'tmu', 'tmv', 'tmw', 'tmy', 'tmz', 'tna', 'tnb', 'tnc', 'tnd', 'tne', 'tnf', 'tng', 'tnh', 'tni', 'tnk', 'tnl', 'tnm', 'tnn', 'tno', 'tnp', 'tnq', 'tnr', 'tns', 'tnt', 'tnu', 'tnv', 'tnw', 'tnx', 'tny', 'tnz', 'tob', 'toc', 'tod', 'toe', 'tof', 'tog', 'toh', 'toi', 'toj', 'tol', 'tom', 'too', 'top', 'toq', 'tor', 'tos', 'tou', 'tov', 'tow', 'tox', 'toy', 'toz', 'tpa', 'tpc', 'tpe', 'tpf', 'tpg', 'tpi', 'tpj', 'tpk', 'tpl', 'tpm', 'tpn', 'tpo', 'tpp', 'tpq', 'tpr', 'tpt', 'tpu', 'tpv', 'tpw', 'tpx', 'tpy', 'tpz', 'tqb', 'tql', 'tqm', 'tqn', 'tqo', 'tqp', 'tqq', 'tqr', 'tqt', 'tqu', 'tqw', 'tra', 'trb', 'trc', 'trd', 'tre', 'trf', 'trg', 'trh', 'tri', 'trj', 'trk', 'trl', 'trm', 'trn', 'tro', 'trp', 'trq', 'trr', 'trs', 'trt', 'tru', 'trv', 'trw', 'trx', 'try', 'trz', 'tsa', 'tsb', 'tsc', 'tsd', 'tse', 'tsf', 'tsg', 'tsh', 'tsi', 'tsj', 'tsk', 'tsl', 'tsm', 'tsp', 'tsq', 'tsr', 'tss', 'tst', 'tsu', 'tsv', 'tsw', 'tsx', 'tsy', 'tsz', 'tta', 'ttb', 'ttc', 'ttd', 'tte', 'ttf', 'ttg', 'tth', 'tti', 'ttj', 'ttk', 'ttl', 'ttm', 'ttn', 'tto', 'ttp', 'ttq', 'ttr', 'tts', 'ttt', 'ttu', 'ttv', 'ttw', 'tty', 'ttz', 'tua', 'tub', 'tuc', 'tud', 'tue', 'tuf', 'tug', 'tuh', 'tui', 'tuj', 'tul', 'tum', 'tun', 'tuo', 'tup', 'tuq', 'tus', 'tut', 'tuu', 'tuv', 'tuw', 'tux', 'tuy', 'tuz', 'tva', 'tvd', 'tve', 'tvk', 'tvl', 'tvm', 'tvn', 'tvo', 'tvs', 'tvt', 'tvu', 'tvw', 'tvy', 'twa', 'twb', 'twc', 'twd', 'twe', 'twf', 'twg', 'twh', 'twl', 'twm', 'twn', 'two', 'twp', 'twq', 'twr', 'twt', 'twu', 'tww', 'twx', 'twy', 'txa', 'txb', 'txc', 'txe', 'txg', 'txh', 'txi', 'txj', 'txm', 'txn', 'txo', 'txq', 'txr', 'txs', 'txt', 'txu', 'txx', 'txy', 'tya', 'tye', 'tyh', 'tyi', 'tyj', 'tyl', 'tyn', 'typ', 'tyr', 'tys', 'tyt', 'tyu', 'tyv', 'tyx', 'tyz', 'tza', 'tzh', 'tzj', 'tzl', 'tzm', 'tzn', 'tzo', 'tzx', 'uam', 'uan', 'uar', 'uba', 'ubi', 'ubl', 'ubr', 'ubu', 'uby', 'uda', 'ude', 'udg', 'udi', 'udj', 'udl', 'udm', 'udu', 'ues', 'ufi', 'uga', 'ugb', 'uge', 'ugn', 'ugo', 'ugy', 'uha', 'uhn', 'uis', 'uiv', 'uji', 'uka', 'ukg', 'ukh', 'ukk', 'ukl', 'ukp', 'ukq', 'uks', 'uku', 'ukw', 'uky', 'ula', 'ulb', 'ulc', 'ule', 'ulf', 'uli', 'ulk', 'ull', 'ulm', 'uln', 'ulu', 'ulw', 'uma', 'umb', 'umc', 'umd', 'umg', 'umi', 'umm', 'umn', 'umo', 'ump', 'umr', 'ums', 'umu', 'una', 'und', 'une', 'ung', 'unk', 'unm', 'unn', 'unp', 'unr', 'unu', 'unx', 'unz', 'uok', 'upi', 'upv', 'ura', 'urb', 'urc', 'ure', 'urf', 'urg', 'urh', 'uri', 'urj', 'urk', 'url', 'urm', 'urn', 'uro', 'urp', 'urr', 'urt', 'uru', 'urv', 'urw', 'urx', 'ury', 'urz', 'usa', 'ush', 'usi', 'usk', 'usp', 'usu', 'uta', 'ute', 'utp', 'utr', 'utu', 'uum', 'uun', 'uur', 'uuu', 'uve', 'uvh', 'uvl', 'uwa', 'uya', 'uzn', 'uzs', 'vaa', 'vae', 'vaf', 'vag', 'vah', 'vai', 'vaj', 'val', 'vam', 'van', 'vao', 'vap', 'var', 'vas', 'vau', 'vav', 'vay', 'vbb', 'vbk', 'vec', 'ved', 'vel', 'vem', 'veo', 'vep', 'ver', 'vgr', 'vgt', 'vic', 'vid', 'vif', 'vig', 'vil', 'vin', 'vis', 'vit', 'viv', 'vka', 'vki', 'vkj', 'vkk', 'vkl', 'vkm', 'vko', 'vkp', 'vkt', 'vku', 'vlp', 'vls', 'vma', 'vmb', 'vmc', 'vmd', 'vme', 'vmf', 'vmg', 'vmh', 'vmi', 'vmj', 'vmk', 'vml', 'vmm', 'vmp', 'vmq', 'vmr', 'vms', 'vmu', 'vmv', 'vmw', 'vmx', 'vmy', 'vmz', 'vnk', 'vnm', 'vnp', 'vor', 'vot', 'vra', 'vro', 'vrs', 'vrt', 'vsi', 'vsl', 'vsv', 'vto', 'vum', 'vun', 'vut', 'vwa', 'waa', 'wab', 'wac', 'wad', 'wae', 'waf', 'wag', 'wah', 'wai', 'waj', 'wak', 'wal', 'wam', 'wan', 'wao', 'wap', 'waq', 'war', 'was', 'wat', 'wau', 'wav', 'waw', 'wax', 'way', 'waz', 'wba', 'wbb', 'wbe', 'wbf', 'wbh', 'wbi', 'wbj', 'wbk', 'wbl', 'wbm', 'wbp', 'wbq', 'wbr', 'wbs', 'wbt', 'wbv', 'wbw', 'wca', 'wci', 'wdd', 'wdg', 'wdj', 'wdk', 'wdu', 'wdy', 'wea', 'wec', 'wed', 'weg', 'weh', 'wei', 'wem', 'wen', 'weo', 'wep', 'wer', 'wes', 'wet', 'weu', 'wew', 'wfg', 'wga', 'wgb', 'wgg', 'wgi', 'wgo', 'wgu', 'wgw', 'wgy', 'wha', 'whg', 'whk', 'whu', 'wib', 'wic', 'wie', 'wif', 'wig', 'wih', 'wii', 'wij', 'wik', 'wil', 'wim', 'win', 'wir', 'wit', 'wiu', 'wiv', 'wiw', 'wiy', 'wja', 'wji', 'wka', 'wkb', 'wkd', 'wkl', 'wku', 'wkw', 'wky', 'wla', 'wlc', 'wle', 'wlg', 'wli', 'wlk', 'wll', 'wlm', 'wlo', 'wlr', 'wls', 'wlu', 'wlv', 'wlw', 'wlx', 'wly', 'wma', 'wmb', 'wmc', 'wmd', 'wme', 'wmh', 'wmi', 'wmm', 'wmn', 'wmo', 'wms', 'wmt', 'wmw', 'wmx', 'wnb', 'wnc', 'wnd', 'wne', 'wng', 'wni', 'wnk', 'wnm', 'wnn', 'wno', 'wnp', 'wnu', 'wnw', 'wny', 'woa', 'wob', 'woc', 'wod', 'woe', 'wof', 'wog', 'woi', 'wok', 'wom', 'won', 'woo', 'wor', 'wos', 'wow', 'woy', 'wpc', 'wra', 'wrb', 'wrd', 'wrg', 'wrh', 'wri', 'wrk', 'wrl', 'wrm', 'wrn', 'wro', 'wrp', 'wrr', 'wrs', 'wru', 'wrv', 'wrw', 'wrx', 'wry', 'wrz', 'wsa', 'wsg', 'wsi', 'wsk', 'wsr', 'wss', 'wsu', 'wsv', 'wtf', 'wth', 'wti', 'wtk', 'wtm', 'wtw', 'wua', 'wub', 'wud', 'wuh', 'wul', 'wum', 'wun', 'wur', 'wut', 'wuu', 'wuv', 'wux', 'wuy', 'wwa', 'wwb', 'wwo', 'wwr', 'www', 'wxa', 'wxw', 'wya', 'wyb', 'wyi', 'wym', 'wyr', 'wyy', 'xaa', 'xab', 'xac', 'xad', 'xae', 'xag', 'xai', 'xaj', 'xak', 'xal', 'xam', 'xan', 'xao', 'xap', 'xaq', 'xar', 'xas', 'xat', 'xau', 'xav', 'xaw', 'xay', 'xba', 'xbb', 'xbc', 'xbd', 'xbe', 'xbg', 'xbi', 'xbj', 'xbm', 'xbn', 'xbo', 'xbp', 'xbr', 'xbw', 'xbx', 'xby', 'xcb', 'xcc', 'xce', 'xcg', 'xch', 'xcl', 'xcm', 'xcn', 'xco', 'xcr', 'xct', 'xcu', 'xcv', 'xcw', 'xcy', 'xda', 'xdc', 'xdk', 'xdm', 'xdo', 'xdy', 'xeb', 'xed', 'xeg', 'xel', 'xem', 'xep', 'xer', 'xes', 'xet', 'xeu', 'xfa', 'xga', 'xgb', 'xgd', 'xgf', 'xgg', 'xgi', 'xgl', 'xgm', 'xgn', 'xgr', 'xgu', 'xgw', 'xha', 'xhc', 'xhd', 'xhe', 'xhr', 'xht', 'xhu', 'xhv', 'xia', 'xib', 'xii', 'xil', 'xin', 'xip', 'xir', 'xis', 'xiv', 'xiy', 'xjb', 'xjt', 'xka', 'xkb', 'xkc', 'xkd', 'xke', 'xkf', 'xkg', 'xkh', 'xki', 'xkj', 'xkk', 'xkl', 'xkn', 'xko', 'xkp', 'xkq', 'xkr', 'xks', 'xkt', 'xku', 'xkv', 'xkw', 'xkx', 'xky', 'xkz', 'xla', 'xlb', 'xlc', 'xld', 'xle', 'xlg', 'xli', 'xln', 'xlo', 'xlp', 'xls', 'xlu', 'xly', 'xma', 'xmb', 'xmc', 'xmd', 'xme', 'xmf', 'xmg', 'xmh', 'xmj', 'xmk', 'xml', 'xmm', 'xmn', 'xmo', 'xmp', 'xmq', 'xmr', 'xms', 'xmt', 'xmu', 'xmv', 'xmw', 'xmx', 'xmy', 'xmz', 'xna', 'xnb', 'xnd', 'xng', 'xnh', 'xni', 'xnk', 'xnn', 'xno', 'xnr', 'xns', 'xnt', 'xnu', 'xny', 'xnz', 'xoc', 'xod', 'xog', 'xoi', 'xok', 'xom', 'xon', 'xoo', 'xop', 'xor', 'xow', 'xpa', 'xpc', 'xpe', 'xpg', 'xpi', 'xpj', 'xpk', 'xpm', 'xpn', 'xpo', 'xpp', 'xpq', 'xpr', 'xps', 'xpt', 'xpu', 'xpy', 'xqa', 'xqt', 'xra', 'xrb', 'xrd', 'xre', 'xrg', 'xri', 'xrm', 'xrn', 'xrq', 'xrr', 'xrt', 'xru', 'xrw', 'xsa', 'xsb', 'xsc', 'xsd', 'xse', 'xsh', 'xsi', 'xsj', 'xsl', 'xsm', 'xsn', 'xso', 'xsp', 'xsq', 'xsr', 'xss', 'xsu', 'xsv', 'xsy', 'xta', 'xtb', 'xtc', 'xtd', 'xte', 'xtg', 'xth', 'xti', 'xtj', 'xtl', 'xtm', 'xtn', 'xto', 'xtp', 'xtq', 'xtr', 'xts', 'xtt', 'xtu', 'xtv', 'xtw', 'xty', 'xtz', 'xua', 'xub', 'xud', 'xug', 'xuj', 'xul', 'xum', 'xun', 'xuo', 'xup', 'xur', 'xut', 'xuu', 'xve', 'xvi', 'xvn', 'xvo', 'xvs', 'xwa', 'xwc', 'xwd', 'xwe', 'xwg', 'xwj', 'xwk', 'xwl', 'xwo', 'xwr', 'xwt', 'xww', 'xxb', 'xxk', 'xxm', 'xxr', 'xxt', 'xya', 'xyb', 'xyj', 'xyk', 'xyl', 'xyt', 'xyy', 'xzh', 'xzm', 'xzp', 'yaa', 'yab', 'yac', 'yad', 'yae', 'yaf', 'yag', 'yah', 'yai', 'yaj', 'yak', 'yal', 'yam', 'yan', 'yao', 'yap', 'yaq', 'yar', 'yas', 'yat', 'yau', 'yav', 'yaw', 'yax', 'yay', 'yaz', 'yba', 'ybb', 'ybd', 'ybe', 'ybh', 'ybi', 'ybj', 'ybk', 'ybl', 'ybm', 'ybn', 'ybo', 'ybx', 'yby', 'ych', 'ycl', 'ycn', 'ycp', 'yda', 'ydd', 'yde', 'ydg', 'ydk', 'yds', 'yea', 'yec', 'yee', 'yei', 'yej', 'yel', 'yen', 'yer', 'yes', 'yet', 'yeu', 'yev', 'yey', 'yga', 'ygi', 'ygl', 'ygm', 'ygp', 'ygr', 'ygs', 'ygu', 'ygw', 'yha', 'yhd', 'yhl', 'yhs', 'yia', 'yif', 'yig', 'yih', 'yii', 'yij', 'yik', 'yil', 'yim', 'yin', 'yip', 'yiq', 'yir', 'yis', 'yit', 'yiu', 'yiv', 'yix', 'yiy', 'yiz', 'yka', 'ykg', 'yki', 'ykk', 'ykl', 'ykm', 'ykn', 'yko', 'ykr', 'ykt', 'yku', 'yky', 'yla', 'ylb', 'yle', 'ylg', 'yli', 'yll', 'ylm', 'yln', 'ylo', 'ylr', 'ylu', 'yly', 'yma', 'ymb', 'ymc', 'ymd', 'yme', 'ymg', 'ymh', 'ymi', 'ymk', 'yml', 'ymm', 'ymn', 'ymo', 'ymp', 'ymq', 'ymr', 'yms', 'ymt', 'ymx', 'ymz', 'yna', 'ynd', 'yne', 'yng', 'ynh', 'ynk', 'ynl', 'ynn', 'yno', 'ynq', 'yns', 'ynu', 'yob', 'yog', 'yoi', 'yok', 'yol', 'yom', 'yon', 'yos', 'yot', 'yox', 'yoy', 'ypa', 'ypb', 'ypg', 'yph', 'ypk', 'ypm', 'ypn', 'ypo', 'ypp', 'ypz', 'yra', 'yrb', 'yre', 'yri', 'yrk', 'yrl', 'yrm', 'yrn', 'yro', 'yrs', 'yrw', 'yry', 'ysc', 'ysd', 'ysg', 'ysl', 'ysn', 'yso', 'ysp', 'ysr', 'yss', 'ysy', 'yta', 'ytl', 'ytp', 'ytw', 'yty', 'yua', 'yub', 'yuc', 'yud', 'yue', 'yuf', 'yug', 'yui', 'yuj', 'yuk', 'yul', 'yum', 'yun', 'yup', 'yuq', 'yur', 'yut', 'yuu', 'yuw', 'yux', 'yuy', 'yuz', 'yva', 'yvt', 'ywa', 'ywg', 'ywl', 'ywn', 'ywq', 'ywr', 'ywt', 'ywu', 'yww', 'yxa', 'yxg', 'yxl', 'yxm', 'yxu', 'yxy', 'yyr', 'yyu', 'yyz', 'yzg', 'yzk', 'zaa', 'zab', 'zac', 'zad', 'zae', 'zaf', 'zag', 'zah', 'zai', 'zaj', 'zak', 'zal', 'zam', 'zao', 'zap', 'zaq', 'zar', 'zas', 'zat', 'zau', 'zav', 'zaw', 'zax', 'zay', 'zaz', 'zbc', 'zbe', 'zbl', 'zbt', 'zbw', 'zca', 'zch', 'zdj', 'zea', 'zeg', 'zeh', 'zen', 'zga', 'zgb', 'zgh', 'zgm', 'zgn', 'zgr', 'zhb', 'zhd', 'zhi', 'zhn', 'zhw', 'zhx', 'zia', 'zib', 'zik', 'zil', 'zim', 'zin', 'zir', 'ziw', 'ziz', 'zka', 'zkb', 'zkd', 'zkg', 'zkh', 'zkk', 'zkn', 'zko', 'zkp', 'zkr', 'zkt', 'zku', 'zkv', 'zkz', 'zle', 'zlj', 'zlm', 'zln', 'zlq', 'zls', 'zlw', 'zma', 'zmb', 'zmc', 'zmd', 'zme', 'zmf', 'zmg', 'zmh', 'zmi', 'zmj', 'zmk', 'zml', 'zmm', 'zmn', 'zmo', 'zmp', 'zmq', 'zmr', 'zms', 'zmt', 'zmu', 'zmv', 'zmw', 'zmx', 'zmy', 'zmz', 'zna', 'znd', 'zne', 'zng', 'znk', 'zns', 'zoc', 'zoh', 'zom', 'zoo', 'zoq', 'zor', 'zos', 'zpa', 'zpb', 'zpc', 'zpd', 'zpe', 'zpf', 'zpg', 'zph', 'zpi', 'zpj', 'zpk', 'zpl', 'zpm', 'zpn', 'zpo', 'zpp', 'zpq', 'zpr', 'zps', 'zpt', 'zpu', 'zpv', 'zpw', 'zpx', 'zpy', 'zpz', 'zqe', 'zra', 'zrg', 'zrn', 'zro', 'zrp', 'zrs', 'zsa', 'zsk', 'zsl', 'zsm', 'zsr', 'zsu', 'zte', 'ztg', 'ztl', 'ztm', 'ztn', 'ztp', 'ztq', 'zts', 'ztt', 'ztu', 'ztx', 'zty', 'zua', 'zuh', 'zum', 'zun', 'zuy', 'zwa', 'zxx', 'zyb', 'zyg', 'zyj', 'zyn', 'zyp', 'zza', 'zzj' ];
-  axe.utils.validLangs = function() {
-    'use strict';
-    return langs;
-  };
-  'use strict';
-  function _toConsumableArray(arr) {
-    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
-  }
-  function _nonIterableSpread() {
-    throw new TypeError('Invalid attempt to spread non-iterable instance');
-  }
-  function _iterableToArray(iter) {
-    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === '[object Arguments]') {
-      return Array.from(iter);
-    }
-  }
-  function _arrayWithoutHoles(arr) {
-    if (Array.isArray(arr)) {
-      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
-        arr2[i] = arr[i];
-      }
-      return arr2;
-    }
-  }
-  function _extends() {
-    _extends = Object.assign || function(target) {
-      for (var i = 1; i < arguments.length; i++) {
-        var source = arguments[i];
-        for (var key in source) {
-          if (Object.prototype.hasOwnProperty.call(source, key)) {
-            target[key] = source[key];
-          }
-        }
-      }
-      return target;
-    };
-    return _extends.apply(this, arguments);
-  }
-  function _typeof(obj) {
-    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
-      _typeof = function _typeof(obj) {
-        return typeof obj;
-      };
-    } else {
-      _typeof = function _typeof(obj) {
-        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;
-      };
-    }
-    return _typeof(obj);
-  }
   axe._load({
     data: {
       rules: {
@@ -7323,26 +4015,10 @@
           description: 'Ensures ARIA attributes are allowed for an element\'s role',
           help: 'Elements must only use allowed ARIA attributes'
         },
-        'aria-allowed-role': {
-          description: 'Ensures role attribute has an appropriate value for the element',
-          help: 'ARIA role must be appropriate for the element'
-        },
-        'aria-dpub-role-fallback': {
-          description: 'Ensures unsupported DPUB roles are only used on elements with implicit fallback roles',
-          help: 'Unsupported DPUB ARIA roles should be used on elements with implicit fallback roles'
-        },
         'aria-hidden-body': {
           description: 'Ensures aria-hidden=\'true\' is not present on the document body.',
           help: 'aria-hidden=\'true\' must not be present on the document body'
         },
-        'aria-hidden-focus': {
-          description: 'Ensures aria-hidden elements do not contain focusable elements',
-          help: 'ARIA hidden element must not contain focusable elements'
-        },
-        'aria-input-field-name': {
-          description: 'Ensures every ARIA input field has an accessible name',
-          help: 'ARIA input fields have an accessible name'
-        },
         'aria-required-attr': {
           description: 'Ensures elements with ARIA roles have all required ARIA attributes',
           help: 'Required ARIA attributes must be provided'
@@ -7359,10 +4035,6 @@
           description: 'Ensures all elements with a role attribute use a valid value',
           help: 'ARIA roles used must conform to valid values'
         },
-        'aria-toggle-field-name': {
-          description: 'Ensures every ARIA toggle field has an accessible name',
-          help: 'ARIA toggle fields have an accessible name'
-        },
         'aria-valid-attr-value': {
           description: 'Ensures all ARIA attributes have valid values',
           help: 'ARIA attributes must conform to valid values'
@@ -7375,14 +4047,6 @@
           description: 'Ensures <audio> elements have captions',
           help: '<audio> elements must have a captions track'
         },
-        'autocomplete-valid': {
-          description: 'Ensure the autocomplete attribute is correct and suitable for the form field',
-          help: 'autocomplete attribute must be used correctly'
-        },
-        'avoid-inline-spacing': {
-          description: 'Ensure that text spacing set through style attributes can be adjusted with custom stylesheets',
-          help: 'Inline text spacing must be adjustable with custom stylesheets'
-        },
         blink: {
           description: 'Ensures <blink> elements are not used',
           help: '<blink> elements are deprecated and must not be used'
@@ -7396,17 +4060,13 @@
           help: 'Page must have means to bypass repeated blocks'
         },
         checkboxgroup: {
-          description: 'Ensures related <input type="checkbox"> elements have a group and that the group designation is consistent',
+          description: 'Ensures related <input type="checkbox"> elements have a group and that that group designation is consistent',
           help: 'Checkbox inputs with the same name attribute value must be part of a group'
         },
         'color-contrast': {
           description: 'Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds',
           help: 'Elements must have sufficient color contrast'
         },
-        'css-orientation-lock': {
-          description: 'Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations',
-          help: 'CSS Media queries are not used to lock display orientation'
-        },
         'definition-list': {
           description: 'Ensures <dl> elements are structured correctly',
           help: '<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script> or <template> elements'
@@ -7419,14 +4079,6 @@
           description: 'Ensures each HTML document contains a non-empty <title> element',
           help: 'Documents must have <title> element to aid in navigation'
         },
-        'duplicate-id-active': {
-          description: 'Ensures every id attribute value of active elements is unique',
-          help: 'IDs of active elements must be unique'
-        },
-        'duplicate-id-aria': {
-          description: 'Ensures every id attribute value used in ARIA and in labels is unique',
-          help: 'IDs used in ARIA and labels must be unique'
-        },
         'duplicate-id': {
           description: 'Ensures every id attribute value is unique',
           help: 'id attribute value must be unique'
@@ -7435,18 +4087,6 @@
           description: 'Ensures headings have discernible text',
           help: 'Headings must not be empty'
         },
-        'focus-order-semantics': {
-          description: 'Ensures elements in the focus order have an appropriate role',
-          help: 'Elements in the focus order need a role appropriate for interactive content'
-        },
-        'form-field-multiple-labels': {
-          description: 'Ensures form field does not have multiple label elements',
-          help: 'Form field must not have multiple label elements'
-        },
-        'frame-tested': {
-          description: 'Ensures <iframe> and <frame> elements contain the axe-core script',
-          help: 'Frames must be tested with axe-core'
-        },
         'frame-title-unique': {
           description: 'Ensures <iframe> and <frame> elements contain a unique title attribute',
           help: 'Frames must have a unique title attribute'
@@ -7463,6 +4103,10 @@
           description: 'Informs users about hidden content.',
           help: 'Hidden content on the page cannot be analyzed'
         },
+        'href-no-hash': {
+          description: 'Ensures that href values are valid link references to promote only using anchors as links',
+          help: 'Anchors must only be used as links with valid URLs or URL fragments'
+        },
         'html-has-lang': {
           description: 'Ensures every HTML document has a lang attribute',
           help: '<html> element must have a lang attribute'
@@ -7471,30 +4115,18 @@
           description: 'Ensures the lang attribute of the <html> element has a valid value',
           help: '<html> element must have a valid value for the lang attribute'
         },
-        'html-xml-lang-mismatch': {
-          description: 'Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page',
-          help: 'HTML elements with lang and xml:lang must have the same base language'
-        },
         'image-alt': {
           description: 'Ensures <img> elements have alternate text or a role of none or presentation',
           help: 'Images must have alternate text'
         },
         'image-redundant-alt': {
-          description: 'Ensure image alternative is not repeated as text',
-          help: 'Alternative text of images should not be repeated as text'
-        },
-        'input-button-name': {
-          description: 'Ensures input buttons have discernible text',
-          help: 'Input buttons must have discernible text'
+          description: 'Ensure button and link text is not repeated as image alternative',
+          help: 'Text of buttons and links should not be repeated in the image alternative'
         },
         'input-image-alt': {
           description: 'Ensures <input type="image"> elements have alternate text',
           help: 'Image buttons must have alternate text'
         },
-        'label-content-name-mismatch': {
-          description: 'Ensures that elements labelled through their content must have their visible text as part of their accessible name',
-          help: 'Elements must have their visible text as part of their accessible name'
-        },
         'label-title-only': {
           description: 'Ensures that every form element is not solely labeled using the title or aria-describedby attributes',
           help: 'Form elements should have a visible label'
@@ -7503,38 +4135,6 @@
           description: 'Ensures every form element has a label',
           help: 'Form elements must have labels'
         },
-        'landmark-banner-is-top-level': {
-          description: 'Ensures the banner landmark is at top level',
-          help: 'Banner landmark must not be contained in another landmark'
-        },
-        'landmark-complementary-is-top-level': {
-          description: 'Ensures the complementary landmark or aside is at top level',
-          help: 'Aside must not be contained in another landmark'
-        },
-        'landmark-contentinfo-is-top-level': {
-          description: 'Ensures the contentinfo landmark is at top level',
-          help: 'Contentinfo landmark must not be contained in another landmark'
-        },
-        'landmark-main-is-top-level': {
-          description: 'Ensures the main landmark is at top level',
-          help: 'Main landmark must not be contained in another landmark'
-        },
-        'landmark-no-duplicate-banner': {
-          description: 'Ensures the document has at most one banner landmark',
-          help: 'Document must not have more than one banner landmark'
-        },
-        'landmark-no-duplicate-contentinfo': {
-          description: 'Ensures the document has at most one contentinfo landmark',
-          help: 'Document must not have more than one contentinfo landmark'
-        },
-        'landmark-one-main': {
-          description: 'Ensures the document has only one main landmark and each iframe in the page has at most one main landmark',
-          help: 'Document must have one main landmark'
-        },
-        'landmark-unique': {
-          help: 'Ensures landmarks are unique',
-          description: 'Landmarks must have a unique role or role/label/title (i.e. accessible name) combination'
-        },
         'layout-table': {
           description: 'Ensures presentational <table> elements do not use <th>, <caption> elements or the summary attribute',
           help: 'Layout tables must not use data table elements'
@@ -7579,37 +4179,25 @@
           description: 'Ensure p elements are not used to style headings',
           help: 'Bold, italic text and font-size are not used to style p elements as a heading'
         },
-        'page-has-heading-one': {
-          description: 'Ensure that the page, or at least one of its frames contains a level-one heading',
-          help: 'Page must contain a level-one heading'
-        },
         radiogroup: {
           description: 'Ensures related <input type="radio"> elements have a group and that the group designation is consistent',
           help: 'Radio inputs with the same name attribute value must be part of a group'
         },
         region: {
-          description: 'Ensures all page content is contained by landmarks',
-          help: 'All page content must be contained by landmarks'
-        },
-        'role-img-alt': {
-          description: 'Ensures [role=\'img\'] elements have alternate text',
-          help: '[role=\'img\'] elements have an alternative text'
+          description: 'Ensures all content is contained within a landmark region',
+          help: 'Content should be contained in a landmark region'
         },
         'scope-attr-valid': {
           description: 'Ensures the scope attribute is used correctly on tables',
           help: 'scope attribute should be used correctly'
         },
-        'scrollable-region-focusable': {
-          description: 'Elements that have scrollable content should be accessible by keyboard',
-          help: 'Ensure that scrollable region has keyboard access'
-        },
         'server-side-image-map': {
           description: 'Ensures that server-side image maps are not used',
           help: 'Server-side image maps must not be used'
         },
         'skip-link': {
-          description: 'Ensure all skip links have a focusable target',
-          help: 'The skip-link target should exist and be focusable'
+          description: 'Ensures the first link on the page is a skip link',
+          help: 'The page should have a skip link as its first link'
         },
         tabindex: {
           description: 'Ensures tabindex attribute values are not greater than 0',
@@ -7633,7 +4221,7 @@
         },
         'th-has-data-cells': {
           description: 'Ensure that each table header in a data table refers to data cells',
-          help: 'All th elements and elements with role=columnheader/rowheader must have data cells they describe'
+          help: 'All th element and elements with role=columnheader/rowheader must data cells which it describes'
         },
         'valid-lang': {
           description: 'Ensures lang attributes have valid values',
@@ -7709,7 +4297,7 @@
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty';
+              var out = 'aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty or not visible';
               return out;
             }
           }
@@ -7735,57 +4323,6 @@
             }
           }
         },
-        'aria-unsupported-attr': {
-          impact: 'critical',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'ARIA attribute is supported';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'ARIA attribute is not widely supported in screen readers and assistive technologies: ';
-              var arr1 = it.data;
-              if (arr1) {
-                var value, i1 = -1, l1 = arr1.length - 1;
-                while (i1 < l1) {
-                  value = arr1[i1 += 1];
-                  out += ' ' + value;
-                }
-              }
-              return out;
-            }
-          }
-        },
-        'aria-allowed-role': {
-          impact: 'minor',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'ARIA role is allowed for given element';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'ARIA role' + (it.data && it.data.length > 1 ? 's' : '') + ' ' + it.data.join(', ') + ' ' + (it.data && it.data.length > 1 ? 'are' : ' is') + ' not allowed for given element';
-              return out;
-            },
-            incomplete: function anonymous(it) {
-              var out = 'ARIA role' + (it.data && it.data.length > 1 ? 's' : '') + ' ' + it.data.join(', ') + ' must be removed when the element is made visible, as ' + (it.data && it.data.length > 1 ? 'they are' : 'it is') + ' not allowed for the element';
-              return out;
-            }
-          }
-        },
-        'implicit-role-fallback': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element’s implicit ARIA role is an appropriate fallback';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element’s implicit ARIA role is not a good fallback for the (unsupported) role';
-              return out;
-            }
-          }
-        },
         'aria-hidden-body': {
           impact: 'critical',
           messages: {
@@ -7799,45 +4336,6 @@
             }
           }
         },
-        'focusable-disabled': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'No focusable elements contained within element';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Focusable content should be disabled or be removed from the DOM';
-              return out;
-            }
-          }
-        },
-        'focusable-not-tabbable': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'No focusable elements contained within element';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Focusable content should have tabindex=\'-1\' or be removed from the DOM';
-              return out;
-            }
-          }
-        },
-        'no-implicit-explicit-label': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'There is no mismatch between a <label> and accessible name';
-              return out;
-            },
-            incomplete: function anonymous(it) {
-              var out = 'Check that the <label> does not need be part of the ARIA ' + it.data + ' field\'s name';
-              return out;
-            }
-          }
-        },
         'aria-required-attr': {
           impact: 'critical',
           messages: {
@@ -7877,18 +4375,6 @@
                 }
               }
               return out;
-            },
-            incomplete: function anonymous(it) {
-              var out = 'Expecting ARIA ' + (it.data && it.data.length > 1 ? 'children' : 'child') + ' role to be added:';
-              var arr1 = it.data;
-              if (arr1) {
-                var value, i1 = -1, l1 = arr1.length - 1;
-                while (i1 < l1) {
-                  value = arr1[i1 += 1];
-                  out += ' ' + value;
-                }
-              }
-              return out;
             }
           }
         },
@@ -7939,40 +4425,6 @@
             }
           }
         },
-        unsupportedrole: {
-          impact: 'critical',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'ARIA role is supported';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'The role used is not widely supported in screen readers and assistive technologies: ';
-              var arr1 = it.data;
-              if (arr1) {
-                var value, i1 = -1, l1 = arr1.length - 1;
-                while (i1 < l1) {
-                  value = arr1[i1 += 1];
-                  out += ' ' + value;
-                }
-              }
-              return out;
-            }
-          }
-        },
-        'has-visible-text': {
-          impact: 'minor',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element has text that is visible to screen readers';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element does not have text that is visible to screen readers';
-              return out;
-            }
-          }
-        },
         'aria-valid-attr-value': {
           impact: 'critical',
           messages: {
@@ -7991,40 +4443,6 @@
                 }
               }
               return out;
-            },
-            incomplete: function anonymous(it) {
-              var out = 'ARIA attribute' + (it.data && it.data.length > 1 ? 's' : '') + ' element ID does not exist on the page:';
-              var arr1 = it.data;
-              if (arr1) {
-                var value, i1 = -1, l1 = arr1.length - 1;
-                while (i1 < l1) {
-                  value = arr1[i1 += 1];
-                  out += ' ' + value;
-                }
-              }
-              return out;
-            }
-          }
-        },
-        'aria-errormessage': {
-          impact: 'critical',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Uses a supported aria-errormessage technique';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'aria-errormessage value' + (it.data && it.data.length > 1 ? 's' : '') + ' ';
-              var arr1 = it.data;
-              if (arr1) {
-                var value, i1 = -1, l1 = arr1.length - 1;
-                while (i1 < l1) {
-                  value = arr1[i1 += 1];
-                  out += ' `' + value;
-                }
-              }
-              out += '` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)';
-              return out;
             }
           }
         },
@@ -8056,47 +4474,12 @@
               var out = 'The multimedia element has a captions track';
               return out;
             },
+            fail: function anonymous(it) {
+              var out = 'The multimedia element does not have a captions track';
+              return out;
+            },
             incomplete: function anonymous(it) {
-              var out = 'Check that captions is available for the element';
-              return out;
-            }
-          }
-        },
-        'autocomplete-valid': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'the autocomplete attribute is correctly formatted';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'the autocomplete attribute is incorrectly formatted';
-              return out;
-            }
-          }
-        },
-        'autocomplete-appropriate': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'the autocomplete value is on an appropriate element';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'the autocomplete value is inappropriate for this type of input';
-              return out;
-            }
-          }
-        },
-        'avoid-inline-spacing': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'No inline styles with \'!important\' that affect text spacing has been specified';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Remove \'!important\' from inline style' + (it.data && it.data.length > 1 ? 's' : '') + ' ' + it.data.join(', ') + ', as overriding this is not supported by most browsers';
+              var out = 'A captions track for this element could not be found';
               return out;
             }
           }
@@ -8114,6 +4497,37 @@
             }
           }
         },
+        'non-empty-if-present': {
+          impact: 'critical',
+          messages: {
+            pass: function anonymous(it) {
+              var out = 'Element ';
+              if (it.data) {
+                out += 'has a non-empty value attribute';
+              } else {
+                out += 'does not have a value attribute';
+              }
+              return out;
+            },
+            fail: function anonymous(it) {
+              var out = 'Element has a value attribute and the value attribute is empty';
+              return out;
+            }
+          }
+        },
+        'non-empty-value': {
+          impact: 'critical',
+          messages: {
+            pass: function anonymous(it) {
+              var out = 'Element has a non-empty value attribute';
+              return out;
+            },
+            fail: function anonymous(it) {
+              var out = 'Element has no value attribute or the value attribute is empty';
+              return out;
+            }
+          }
+        },
         'button-has-visible-text': {
           impact: 'critical',
           messages: {
@@ -8153,6 +4567,19 @@
             }
           }
         },
+        'focusable-no-name': {
+          impact: 'serious',
+          messages: {
+            pass: function anonymous(it) {
+              var out = 'Element is not in tab order or has accessible text';
+              return out;
+            },
+            fail: function anonymous(it) {
+              var out = 'Element is in tab order and does not have accessible text';
+              return out;
+            }
+          }
+        },
         'internal-link-present': {
           impact: 'serious',
           messages: {
@@ -8196,21 +4623,11 @@
           impact: 'critical',
           messages: {
             pass: function anonymous(it) {
-              var out = 'Elements with the name "' + it.data.name + '" have both a shared label, and a unique label, referenced through aria-labelledby';
+              var out = 'All elements with the name "' + it.data.name + '" reference the same element with aria-labelledby';
               return out;
             },
             fail: function anonymous(it) {
-              var out = '';
-              var code = it.data && it.data.failureCode;
-              out += 'Elements with the name "' + it.data.name + '" do not all have ';
-              if (code === 'no-shared-label') {
-                out += 'a shared label';
-              } else if (code === 'no-unique-label') {
-                out += 'a unique label';
-              } else {
-                out += 'both a shared label, and a unique label';
-              }
-              out += ', referenced through aria-labelledby';
+              var out = 'All elements with the name "' + it.data.name + '" do not reference the same element with aria-labelledby';
               return out;
             }
           }
@@ -8250,7 +4667,7 @@
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'Element has insufficient color contrast of ' + it.data.contrastRatio + ' (foreground color: ' + it.data.fgColor + ', background color: ' + it.data.bgColor + ', font size: ' + it.data.fontSize + ', font weight: ' + it.data.fontWeight + '). Expected contrast ratio of ' + it.data.expectedContrastRatio;
+              var out = 'Element has insufficient color contrast of ' + it.data.contrastRatio + ' (foreground color: ' + it.data.fgColor + ', background color: ' + it.data.bgColor + ', font size: ' + it.data.fontSize + ', font weight: ' + it.data.fontWeight + ')';
               return out;
             },
             incomplete: {
@@ -8260,31 +4677,11 @@
               bgOverlap: 'Element\'s background color could not be determined because it is overlapped by another element',
               fgAlpha: 'Element\'s foreground color could not be determined because of alpha transparency',
               elmPartiallyObscured: 'Element\'s background color could not be determined because it\'s partially obscured by another element',
-              elmPartiallyObscuring: 'Element\'s background color could not be determined because it partially overlaps other elements',
-              outsideViewport: 'Element\'s background color could not be determined because it\'s outside the viewport',
               equalRatio: 'Element has a 1:1 contrast ratio with the background',
-              shortTextContent: 'Element content is too short to determine if it is actual text content',
               default: 'Unable to determine contrast ratio'
             }
           }
         },
-        'css-orientation-lock': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Display is operable, and orientation lock does not exist';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'CSS Orientation lock is applied, and makes display inoperable';
-              return out;
-            },
-            incomplete: function anonymous(it) {
-              var out = 'CSS Orientation lock cannot be determined';
-              return out;
-            }
-          }
-        },
         'structured-dlitems': {
           impact: 'serious',
           messages: {
@@ -8337,97 +4734,28 @@
             }
           }
         },
-        'duplicate-id-active': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Document has no active elements that share the same id attribute';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Document has active elements with the same id attribute: ' + it.data;
-              return out;
-            }
-          }
-        },
-        'duplicate-id-aria': {
-          impact: 'critical',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Document has no elements referenced with ARIA or labels that share the same id attribute';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Document has multiple elements referenced with ARIA with the same id attribute: ' + it.data;
-              return out;
-            }
-          }
-        },
         'duplicate-id': {
-          impact: 'minor',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Document has no static elements that share the same id attribute';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Document has multiple static elements with the same id attribute';
-              return out;
-            }
-          }
-        },
-        'has-widget-role': {
-          impact: 'minor',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element has a widget role.';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element does not have a widget role.';
-              return out;
-            }
-          }
-        },
-        'valid-scrollable-semantics': {
-          impact: 'minor',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element has valid semantics for an element in the focus order.';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element has invalid semantics for an element in the focus order.';
-              return out;
-            }
-          }
-        },
-        'multiple-label': {
           impact: 'moderate',
           messages: {
             pass: function anonymous(it) {
-              var out = 'Form field does not have multiple label elements';
+              var out = 'Document has no elements that share the same id attribute';
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'Multiple label elements is not widely supported in assistive technologies';
+              var out = 'Document has multiple elements with the same id attribute: ' + it.data;
               return out;
             }
           }
         },
-        'frame-tested': {
-          impact: 'critical',
+        'has-visible-text': {
+          impact: 'minor',
           messages: {
             pass: function anonymous(it) {
-              var out = 'The iframe was tested with axe-core';
+              var out = 'Element has text that is visible to screen readers';
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'The iframe could not be tested with axe-core';
-              return out;
-            },
-            incomplete: function anonymous(it) {
-              var out = 'The iframe still has to be tested with axe-core';
+              var out = 'Element does not have text that is visible to screen readers';
               return out;
             }
           }
@@ -8475,6 +4803,19 @@
             }
           }
         },
+        'href-no-hash': {
+          impact: 'moderate',
+          messages: {
+            pass: function anonymous(it) {
+              var out = 'Anchor does not have an href value of #';
+              return out;
+            },
+            fail: function anonymous(it) {
+              var out = 'Anchor has an href value of #';
+              return out;
+            }
+          }
+        },
         'has-lang': {
           impact: 'serious',
           messages: {
@@ -8501,19 +4842,6 @@
             }
           }
         },
-        'xml-lang-mismatch': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Lang and xml:lang attributes have the same base language';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Lang and xml:lang attributes do not have the same base language';
-              return out;
-            }
-          }
-        },
         'has-alt': {
           impact: 'critical',
           messages: {
@@ -8527,19 +4855,6 @@
             }
           }
         },
-        'alt-space-value': {
-          impact: 'critical',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element has a valid alt attribute value';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element has an alt attribute containing only a space character, which is not ignored by all screen readers';
-              return out;
-            }
-          }
-        },
         'duplicate-img-label': {
           impact: 'minor',
           messages: {
@@ -8553,50 +4868,6 @@
             }
           }
         },
-        'non-empty-if-present': {
-          impact: 'critical',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element ';
-              if (it.data) {
-                out += 'has a non-empty value attribute';
-              } else {
-                out += 'does not have a value attribute';
-              }
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element has a value attribute and the value attribute is empty';
-              return out;
-            }
-          }
-        },
-        'non-empty-value': {
-          impact: 'critical',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element has a non-empty value attribute';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element has no value attribute or the value attribute is empty';
-              return out;
-            }
-          }
-        },
-        'label-content-name-mismatch': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element contains visible text as part of it\'s accessible name';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Text inside the element is not included in the accessible name';
-              return out;
-            }
-          }
-        },
         'title-only': {
           impact: 'serious',
           messages: {
@@ -8649,93 +4920,15 @@
             }
           }
         },
-        'hidden-explicit-label': {
-          impact: 'critical',
+        'multiple-label': {
+          impact: 'serious',
           messages: {
             pass: function anonymous(it) {
-              var out = 'Form element has a visible explicit <label>';
+              var out = 'Form element does not have multiple <label> elements';
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'Form element has explicit <label> that is hidden';
-              return out;
-            }
-          }
-        },
-        'landmark-is-top-level': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'The ' + it.data.role + ' landmark is at the top level.';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'The ' + it.data.role + ' landmark is contained in another landmark.';
-              return out;
-            }
-          }
-        },
-        'page-no-duplicate-banner': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Document does not have more than one banner landmark';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Document has more than one banner landmark';
-              return out;
-            }
-          }
-        },
-        'page-no-duplicate-contentinfo': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Document does not have more than one contentinfo landmark';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Document has more than one contentinfo landmark';
-              return out;
-            }
-          }
-        },
-        'page-has-main': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Document has at least one main landmark';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Document does not have a main landmark';
-              return out;
-            }
-          }
-        },
-        'page-no-duplicate-main': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Document does not have more than one main landmark';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Document has more than one main landmark';
-              return out;
-            }
-          }
-        },
-        'landmark-is-unique': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Landmarks must have a unique role or role/label/title (i.e. accessible name) combination';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable';
+              var out = 'Form element has multiple <label> elements';
               return out;
             }
           }
@@ -8783,11 +4976,11 @@
           impact: 'serious',
           messages: {
             pass: function anonymous(it) {
-              var out = 'Links can be distinguished from surrounding text in some way other than by color';
+              var out = 'Links can be distinguished from surrounding text in a way that does not rely on color';
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'Links need to be distinguished from surrounding text in some way other than by color';
+              var out = 'Links can not be distinguished from surrounding text in a way that does not rely on color';
               return out;
             },
             incomplete: {
@@ -8800,19 +4993,6 @@
             }
           }
         },
-        'focusable-no-name': {
-          impact: 'serious',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element is not in tab order or has accessible text';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element is in tab order and does not have accessible text';
-              return out;
-            }
-          }
-        },
         'only-listitems': {
           impact: 'serious',
           messages: {
@@ -8873,7 +5053,7 @@
               return out;
             },
             fail: function anonymous(it) {
-              var out = '' + it.data + ' on <meta> tag disables zooming on mobile devices';
+              var out = '<meta> tag disables zooming on mobile devices';
               return out;
             }
           }
@@ -8891,28 +5071,15 @@
             }
           }
         },
-        'page-has-heading-one': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Page has at least one level-one heading';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Page must have a level-one heading';
-              return out;
-            }
-          }
-        },
         region: {
           impact: 'moderate',
           messages: {
             pass: function anonymous(it) {
-              var out = 'All page content is contained by landmarks';
+              var out = 'Content contained by ARIA landmark';
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'Some page content is not contained by landmarks';
+              var out = 'Content not contained by an ARIA landmark';
               return out;
             }
           }
@@ -8943,32 +5110,6 @@
             }
           }
         },
-        'focusable-content': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element contains focusable elements';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element should have focusable content';
-              return out;
-            }
-          }
-        },
-        'focusable-element': {
-          impact: 'moderate',
-          messages: {
-            pass: function anonymous(it) {
-              var out = 'Element is focusable';
-              return out;
-            },
-            fail: function anonymous(it) {
-              var out = 'Element should be focusable';
-              return out;
-            }
-          }
-        },
         exists: {
           impact: 'minor',
           messages: {
@@ -8986,15 +5127,11 @@
           impact: 'moderate',
           messages: {
             pass: function anonymous(it) {
-              var out = 'Skip link target exists';
-              return out;
-            },
-            incomplete: function anonymous(it) {
-              var out = 'Skip link target should become visible on activation';
+              var out = 'Valid skip link found';
               return out;
             },
             fail: function anonymous(it) {
-              var out = 'No skip link target';
+              var out = 'No valid skip link found';
               return out;
             }
           }
@@ -9088,8 +5225,12 @@
               var out = 'The multimedia element has an audio description track';
               return out;
             },
+            fail: function anonymous(it) {
+              var out = 'The multimedia element does not have an audio description track';
+              return out;
+            },
             incomplete: function anonymous(it) {
-              var out = 'Check that audio description is available for the element';
+              var out = 'An audio description track for this element could not be found';
               return out;
             }
           }
@@ -9126,7 +5267,7 @@
         }
       },
       incompleteFallbackMessage: function anonymous(it) {
-        var out = 'axe couldn\'t tell the reason. Time to break out the element inspector!';
+        var out = 'aXe couldn\'t tell the reason. Time to break out the element inspector!';
         return out;
       }
     },
@@ -9134,7 +5275,7 @@
       id: 'accesskeys',
       selector: '[accesskey]',
       excludeHidden: false,
-      tags: [ 'best-practice', 'cat.keyboard' ],
+      tags: [ 'wcag2a', 'wcag211', 'cat.keyboard' ],
       all: [],
       any: [],
       none: [ 'accesskeys' ]
@@ -9148,53 +5289,28 @@
       none: []
     }, {
       id: 'aria-allowed-attr',
-      matches: function matches(node, virtualNode, context) {
-        var aria = /^aria-/;
-        if (node.hasAttributes()) {
-          var attrs = axe.utils.getNodeAttributes(node);
-          for (var i = 0, l = attrs.length; i < l; i++) {
-            if (aria.test(attrs[i].name)) {
-              return true;
+      matches: function matches(node, virtualNode) {
+        var role = node.getAttribute('role');
+        if (!role) {
+          role = axe.commons.aria.implicitRole(node);
+        }
+        var allowed = axe.commons.aria.allowedAttr(role);
+        if (role && allowed) {
+          var aria = /^aria-/;
+          if (node.hasAttributes()) {
+            var attrs = node.attributes;
+            for (var i = 0, l = attrs.length; i < l; i++) {
+              if (aria.test(attrs[i].name)) {
+                return true;
+              }
             }
           }
         }
         return false;
       },
-      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],
+      tags: [ 'cat.aria', 'wcag2a', 'wcag411', 'wcag412' ],
       all: [],
       any: [ 'aria-allowed-attr' ],
-      none: [ 'aria-unsupported-attr' ]
-    }, {
-      id: 'aria-allowed-role',
-      excludeHidden: false,
-      selector: '[role]',
-      matches: function matches(node, virtualNode, context) {
-        return axe.commons.aria.getRole(node, {
-          noImplicit: true,
-          dpub: true,
-          fallback: true
-        }) !== null;
-      },
-      tags: [ 'cat.aria', 'best-practice' ],
-      all: [],
-      any: [ {
-        options: {
-          allowImplicit: true,
-          ignoredTags: []
-        },
-        id: 'aria-allowed-role'
-      } ],
-      none: []
-    }, {
-      id: 'aria-dpub-role-fallback',
-      selector: '[role]',
-      matches: function matches(node, virtualNode, context) {
-        var role = node.getAttribute('role');
-        return [ 'doc-backlink', 'doc-biblioentry', 'doc-biblioref', 'doc-cover', 'doc-endnote', 'doc-glossref', 'doc-noteref' ].includes(role);
-      },
-      tags: [ 'cat.aria', 'wcag2a', 'wcag131' ],
-      all: [ 'implicit-role-fallback' ],
-      any: [],
       none: []
     }, {
       id: 'aria-hidden-body',
@@ -9205,60 +5321,9 @@
       any: [ 'aria-hidden-body' ],
       none: []
     }, {
-      id: 'aria-hidden-focus',
-      selector: '[aria-hidden="true"]',
-      matches: function matches(node, virtualNode, context) {
-        var getComposedParent = axe.commons.dom.getComposedParent;
-        function shouldMatchElement(el) {
-          if (!el) {
-            return true;
-          }
-          if (el.getAttribute('aria-hidden') === 'true') {
-            return false;
-          }
-          return shouldMatchElement(getComposedParent(el));
-        }
-        return shouldMatchElement(getComposedParent(node));
-      },
-      excludeHidden: false,
-      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'wcag131' ],
-      all: [ 'focusable-disabled', 'focusable-not-tabbable' ],
-      any: [],
-      none: []
-    }, {
-      id: 'aria-input-field-name',
-      selector: '[role="combobox"], [role="listbox"], [role="searchbox"], [role="slider"], [role="spinbutton"], [role="textbox"]',
-      matches: function matches(node, virtualNode, context) {
-        var aria = axe.commons.aria;
-        var nodeName = node.nodeName.toUpperCase();
-        var role = aria.getRole(node, {
-          noImplicit: true
-        });
-        if (nodeName === 'AREA' && !!node.getAttribute('href')) {
-          return false;
-        }
-        if ([ 'INPUT', 'SELECT', 'TEXTAREA' ].includes(nodeName)) {
-          return false;
-        }
-        if (nodeName === 'IMG' || role === 'img' && nodeName !== 'SVG') {
-          return false;
-        }
-        if (nodeName === 'BUTTON' || role === 'button') {
-          return false;
-        }
-        if (role === 'combobox' && axe.utils.querySelectorAll(virtualNode, 'input:not([type="hidden"])').length) {
-          return false;
-        }
-        return true;
-      },
-      tags: [ 'wcag2a', 'wcag412' ],
-      all: [],
-      any: [ 'aria-label', 'aria-labelledby', 'non-empty-title' ],
-      none: [ 'no-implicit-explicit-label' ]
-    }, {
       id: 'aria-required-attr',
       selector: '[role]',
-      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],
+      tags: [ 'cat.aria', 'wcag2a', 'wcag411', 'wcag412' ],
       all: [],
       any: [ 'aria-required-attr' ],
       none: []
@@ -9267,12 +5332,7 @@
       selector: '[role]',
       tags: [ 'cat.aria', 'wcag2a', 'wcag131' ],
       all: [],
-      any: [ {
-        options: {
-          reviewEmpty: [ 'doc-bibliography', 'doc-endnotes', 'grid', 'list', 'listbox', 'table', 'tablist', 'tree', 'treegrid', 'rowgroup' ]
-        },
-        id: 'aria-required-children'
-      } ],
+      any: [ 'aria-required-children' ],
       none: []
     }, {
       id: 'aria-required-parent',
@@ -9284,46 +5344,16 @@
     }, {
       id: 'aria-roles',
       selector: '[role]',
-      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],
+      tags: [ 'cat.aria', 'wcag2a', 'wcag131', 'wcag411', 'wcag412' ],
       all: [],
       any: [],
-      none: [ 'invalidrole', 'abstractrole', 'unsupportedrole' ]
-    }, {
-      id: 'aria-toggle-field-name',
-      selector: '[role="checkbox"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="radio"], [role="switch"]',
-      matches: function matches(node, virtualNode, context) {
-        var aria = axe.commons.aria;
-        var nodeName = node.nodeName.toUpperCase();
-        var role = aria.getRole(node, {
-          noImplicit: true
-        });
-        if (nodeName === 'AREA' && !!node.getAttribute('href')) {
-          return false;
-        }
-        if ([ 'INPUT', 'SELECT', 'TEXTAREA' ].includes(nodeName)) {
-          return false;
-        }
-        if (nodeName === 'IMG' || role === 'img' && nodeName !== 'SVG') {
-          return false;
-        }
-        if (nodeName === 'BUTTON' || role === 'button') {
-          return false;
-        }
-        if (role === 'combobox' && axe.utils.querySelectorAll(virtualNode, 'input:not([type="hidden"])').length) {
-          return false;
-        }
-        return true;
-      },
-      tags: [ 'wcag2a', 'wcag412' ],
-      all: [],
-      any: [ 'aria-label', 'aria-labelledby', 'non-empty-title', 'has-visible-text' ],
-      none: [ 'no-implicit-explicit-label' ]
+      none: [ 'invalidrole', 'abstractrole' ]
     }, {
       id: 'aria-valid-attr-value',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         var aria = /^aria-/;
         if (node.hasAttributes()) {
-          var attrs = axe.utils.getNodeAttributes(node);
+          var attrs = node.attributes;
           for (var i = 0, l = attrs.length; i < l; i++) {
             if (aria.test(attrs[i].name)) {
               return true;
@@ -9332,19 +5362,19 @@
         }
         return false;
       },
-      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],
-      all: [ {
+      tags: [ 'cat.aria', 'wcag2a', 'wcag131', 'wcag411', 'wcag412' ],
+      all: [],
+      any: [ {
         options: [],
         id: 'aria-valid-attr-value'
-      }, 'aria-errormessage' ],
-      any: [],
+      } ],
       none: []
     }, {
       id: 'aria-valid-attr',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         var aria = /^aria-/;
         if (node.hasAttributes()) {
-          var attrs = axe.utils.getNodeAttributes(node);
+          var attrs = node.attributes;
           for (var i = 0, l = attrs.length; i < l; i++) {
             if (aria.test(attrs[i].name)) {
               return true;
@@ -9353,7 +5383,7 @@
         }
         return false;
       },
-      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],
+      tags: [ 'cat.aria', 'wcag2a', 'wcag411' ],
       all: [],
       any: [ {
         options: [],
@@ -9363,57 +5393,12 @@
     }, {
       id: 'audio-caption',
       selector: 'audio',
-      enabled: false,
       excludeHidden: false,
-      tags: [ 'cat.time-and-media', 'wcag2a', 'wcag121', 'section508', 'section508.22.a' ],
+      tags: [ 'cat.time-and-media', 'wcag2a', 'wcag122', 'section508', 'section508.22.a' ],
       all: [],
       any: [],
       none: [ 'caption' ]
     }, {
-      id: 'autocomplete-valid',
-      matches: function matches(node, virtualNode, context) {
-        var _axe$commons = axe.commons, text = _axe$commons.text, aria = _axe$commons.aria, dom = _axe$commons.dom;
-        var autocomplete = virtualNode.attr('autocomplete');
-        if (!autocomplete || text.sanitize(autocomplete) === '') {
-          return false;
-        }
-        var nodeName = virtualNode.props.nodeName;
-        if ([ 'textarea', 'input', 'select' ].includes(nodeName) === false) {
-          return false;
-        }
-        var excludedInputTypes = [ 'submit', 'reset', 'button', 'hidden' ];
-        if (nodeName === 'input' && excludedInputTypes.includes(virtualNode.props.type)) {
-          return false;
-        }
-        var ariaDisabled = virtualNode.attr('aria-disabled') || 'false';
-        if (virtualNode.hasAttr('disabled') || ariaDisabled.toLowerCase() === 'true') {
-          return false;
-        }
-        var role = virtualNode.attr('role');
-        var tabIndex = virtualNode.attr('tabindex');
-        if (tabIndex === '-1' && role) {
-          var roleDef = aria.lookupTable.role[role];
-          if (roleDef === undefined || roleDef.type !== 'widget') {
-            return false;
-          }
-        }
-        if (tabIndex === '-1' && virtualNode.actualNode && !dom.isVisible(virtualNode.actualNode, false) && !dom.isVisible(virtualNode.actualNode, true)) {
-          return false;
-        }
-        return true;
-      },
-      tags: [ 'cat.forms', 'wcag21aa', 'wcag135' ],
-      all: [ 'autocomplete-valid', 'autocomplete-appropriate' ],
-      any: [],
-      none: []
-    }, {
-      id: 'avoid-inline-spacing',
-      selector: '[style]',
-      tags: [ 'wcag21aa', 'wcag1412' ],
-      all: [ 'avoid-inline-spacing' ],
-      any: [],
-      none: []
-    }, {
       id: 'blink',
       selector: 'blink',
       excludeHidden: false,
@@ -9423,16 +5408,16 @@
       none: [ 'is-on-screen' ]
     }, {
       id: 'button-name',
-      selector: 'button, [role="button"]',
+      selector: 'button, [role="button"], input[type="button"], input[type="submit"], input[type="reset"]',
       tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'section508', 'section508.22.a' ],
       all: [],
-      any: [ 'button-has-visible-text', 'aria-label', 'aria-labelledby', 'role-presentation', 'role-none', 'non-empty-title' ],
-      none: []
+      any: [ 'non-empty-if-present', 'non-empty-value', 'button-has-visible-text', 'aria-label', 'aria-labelledby', 'role-presentation', 'role-none' ],
+      none: [ 'focusable-no-name' ]
     }, {
       id: 'bypass',
       selector: 'html',
       pageLevel: true,
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return !!node.querySelector('a[href]');
       },
       tags: [ 'cat.keyboard', 'wcag2a', 'wcag241', 'section508', 'section508.22.o' ],
@@ -9448,9 +5433,9 @@
       none: []
     }, {
       id: 'color-contrast',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         var nodeName = node.nodeName.toUpperCase(), nodeType = node.type;
-        if (node.getAttribute('aria-disabled') === 'true' || axe.commons.dom.findUpVirtual(virtualNode, '[aria-disabled="true"]')) {
+        if (node.getAttribute('aria-disabled') === 'true' || axe.commons.dom.findUp(node, '[aria-disabled="true"]')) {
           return false;
         }
         if (nodeName === 'INPUT') {
@@ -9465,39 +5450,37 @@
         if (nodeName === 'OPTION') {
           return false;
         }
-        if (nodeName === 'BUTTON' && node.disabled || axe.commons.dom.findUpVirtual(virtualNode, 'button[disabled]')) {
+        if (nodeName === 'BUTTON' && node.disabled || axe.commons.dom.findUp(node, 'button[disabled]')) {
           return false;
         }
-        if (nodeName === 'FIELDSET' && node.disabled || axe.commons.dom.findUpVirtual(virtualNode, 'fieldset[disabled]')) {
+        if (nodeName === 'FIELDSET' && node.disabled || axe.commons.dom.findUp(node, 'fieldset[disabled]')) {
           return false;
         }
-        var nodeParentLabel = axe.commons.dom.findUpVirtual(virtualNode, 'label');
+        var nodeParentLabel = axe.commons.dom.findUp(node, 'label');
         if (nodeName === 'LABEL' || nodeParentLabel) {
           var relevantNode = node;
-          var relevantVirtualNode = virtualNode;
           if (nodeParentLabel) {
             relevantNode = nodeParentLabel;
-            relevantVirtualNode = axe.utils.getNodeFromTree(nodeParentLabel);
           }
           var doc = axe.commons.dom.getRootNode(relevantNode);
           var candidate = relevantNode.htmlFor && doc.getElementById(relevantNode.htmlFor);
           if (candidate && candidate.disabled) {
             return false;
           }
-          var candidate = axe.utils.querySelectorAll(relevantVirtualNode, 'input:not([type="hidden"]):not([type="image"])' + ':not([type="button"]):not([type="submit"]):not([type="reset"]), select, textarea');
+          var candidate = axe.utils.querySelectorAll(virtualNode, 'input:not([type="hidden"]):not([type="image"])' + ':not([type="button"]):not([type="submit"]):not([type="reset"]), select, textarea');
           if (candidate.length && candidate[0].actualNode.disabled) {
             return false;
           }
         }
         if (node.getAttribute('id')) {
-          var id = axe.utils.escapeSelector(node.getAttribute('id'));
+          var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));
           var _doc = axe.commons.dom.getRootNode(node);
           var candidate = _doc.querySelector('[aria-labelledby~=' + id + ']');
           if (candidate && candidate.disabled) {
             return false;
           }
         }
-        if (axe.commons.text.visibleVirtual(virtualNode, false, true) === '') {
+        if (axe.commons.text.visible(virtualNode, false, true) === '') {
           return false;
         }
         var range = document.createRange(), childNodes = virtualNode.children, length = childNodes.length, child, index;
@@ -9525,17 +5508,9 @@
       any: [ 'color-contrast' ],
       none: []
     }, {
-      id: 'css-orientation-lock',
-      selector: 'html',
-      tags: [ 'cat.structure', 'wcag134', 'wcag21aa', 'experimental' ],
-      all: [ 'css-orientation-lock' ],
-      any: [],
-      none: [],
-      preload: true
-    }, {
       id: 'definition-list',
       selector: 'dl',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return !node.getAttribute('role');
       },
       tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],
@@ -9545,7 +5520,7 @@
     }, {
       id: 'dlitem',
       selector: 'dd, dt',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return !node.getAttribute('role');
       },
       tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],
@@ -9555,7 +5530,7 @@
     }, {
       id: 'document-title',
       selector: 'html',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return node.ownerDocument.defaultView.self === node.ownerDocument.defaultView.top;
       },
       tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag242' ],
@@ -9563,43 +5538,8 @@
       any: [ 'doc-has-title' ],
       none: []
     }, {
-      id: 'duplicate-id-active',
-      selector: '[id]',
-      matches: function matches(node, virtualNode, context) {
-        var _axe$commons2 = axe.commons, dom = _axe$commons2.dom, aria = _axe$commons2.aria;
-        var id = node.getAttribute('id').trim();
-        var idSelector = '*[id="'.concat(axe.utils.escapeSelector(id), '"]');
-        var idMatchingElms = Array.from(dom.getRootNode(node).querySelectorAll(idSelector));
-        return idMatchingElms.some(dom.isFocusable) && !aria.isAccessibleRef(node);
-      },
-      excludeHidden: false,
-      tags: [ 'cat.parsing', 'wcag2a', 'wcag411' ],
-      all: [],
-      any: [ 'duplicate-id-active' ],
-      none: []
-    }, {
-      id: 'duplicate-id-aria',
-      selector: '[id]',
-      matches: function matches(node, virtualNode, context) {
-        return axe.commons.aria.isAccessibleRef(node);
-      },
-      excludeHidden: false,
-      tags: [ 'cat.parsing', 'wcag2a', 'wcag411' ],
-      all: [],
-      any: [ 'duplicate-id-aria' ],
-      none: []
-    }, {
       id: 'duplicate-id',
       selector: '[id]',
-      matches: function matches(node, virtualNode, context) {
-        var _axe$commons3 = axe.commons, dom = _axe$commons3.dom, aria = _axe$commons3.aria;
-        var id = node.getAttribute('id').trim();
-        var idSelector = '*[id="'.concat(axe.utils.escapeSelector(id), '"]');
-        var idMatchingElms = Array.from(dom.getRootNode(node).querySelectorAll(idSelector));
-        return idMatchingElms.every(function(elm) {
-          return !dom.isFocusable(elm);
-        }) && !aria.isAccessibleRef(node);
-      },
       excludeHidden: false,
       tags: [ 'cat.parsing', 'wcag2a', 'wcag411' ],
       all: [],
@@ -9608,67 +5548,15 @@
     }, {
       id: 'empty-heading',
       selector: 'h1, h2, h3, h4, h5, h6, [role="heading"]',
-      matches: function matches(node, virtualNode, context) {
-        var explicitRoles;
-        if (node.hasAttribute('role')) {
-          explicitRoles = node.getAttribute('role').split(/\s+/i).filter(axe.commons.aria.isValidRole);
-        }
-        if (explicitRoles && explicitRoles.length > 0) {
-          return explicitRoles.includes('heading');
-        } else {
-          return axe.commons.aria.implicitRole(node) === 'heading';
-        }
-      },
+      enabled: true,
       tags: [ 'cat.name-role-value', 'best-practice' ],
       all: [],
-      any: [ 'has-visible-text' ],
-      none: []
-    }, {
-      id: 'focus-order-semantics',
-      selector: 'div, h1, h2, h3, h4, h5, h6, [role=heading], p, span',
-      matches: function matches(node, virtualNode, context) {
-        return axe.commons.dom.insertedIntoFocusOrder(node);
-      },
-      tags: [ 'cat.keyboard', 'best-practice', 'experimental' ],
-      all: [],
-      any: [ {
-        options: [],
-        id: 'has-widget-role'
-      }, {
-        options: [],
-        id: 'valid-scrollable-semantics'
-      } ],
-      none: []
-    }, {
-      id: 'form-field-multiple-labels',
-      selector: 'input, select, textarea',
-      matches: function matches(node, virtualNode, context) {
-        if (node.nodeName.toLowerCase() !== 'input' || node.hasAttribute('type') === false) {
-          return true;
-        }
-        var type = node.getAttribute('type').toLowerCase();
-        return [ 'hidden', 'image', 'button', 'submit', 'reset' ].includes(type) === false;
-      },
-      tags: [ 'cat.forms', 'wcag2a', 'wcag332' ],
-      all: [],
-      any: [],
-      none: [ 'multiple-label' ]
-    }, {
-      id: 'frame-tested',
-      selector: 'frame, iframe',
-      tags: [ 'cat.structure', 'review-item', 'best-practice' ],
-      all: [ {
-        options: {
-          isViolation: false
-        },
-        id: 'frame-tested'
-      } ],
-      any: [],
+      any: [ 'has-visible-text', 'role-presentation', 'role-none' ],
       none: []
     }, {
       id: 'frame-title-unique',
       selector: 'frame[title], iframe[title]',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         var title = node.getAttribute('title');
         return !!(title ? axe.commons.text.sanitize(title).trim() : '');
       },
@@ -9679,24 +5567,14 @@
     }, {
       id: 'frame-title',
       selector: 'frame, iframe',
-      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag241', 'wcag412', 'section508', 'section508.22.i' ],
+      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag241', 'section508', 'section508.22.i' ],
       all: [],
       any: [ 'aria-label', 'aria-labelledby', 'non-empty-title', 'role-presentation', 'role-none' ],
       none: []
     }, {
       id: 'heading-order',
-      selector: 'h1, h2, h3, h4, h5, h6, [role=heading]',
-      matches: function matches(node, virtualNode, context) {
-        var explicitRoles;
-        if (node.hasAttribute('role')) {
-          explicitRoles = node.getAttribute('role').split(/\s+/i).filter(axe.commons.aria.isValidRole);
-        }
-        if (explicitRoles && explicitRoles.length > 0) {
-          return explicitRoles.includes('heading');
-        } else {
-          return axe.commons.aria.implicitRole(node) === 'heading';
-        }
-      },
+      selector: 'h1,h2,h3,h4,h5,h6,[role=heading]',
+      enabled: false,
       tags: [ 'cat.semantics', 'best-practice' ],
       all: [],
       any: [ 'heading-order' ],
@@ -9705,62 +5583,48 @@
       id: 'hidden-content',
       selector: '*',
       excludeHidden: false,
-      tags: [ 'cat.structure', 'experimental', 'review-item', 'best-practice' ],
+      tags: [ 'experimental', 'review-item' ],
       all: [],
       any: [ 'hidden-content' ],
+      none: [],
+      enabled: false
+    }, {
+      id: 'href-no-hash',
+      selector: 'a[href]',
+      enabled: false,
+      tags: [ 'cat.semantics', 'best-practice' ],
+      all: [],
+      any: [ 'href-no-hash' ],
       none: []
     }, {
       id: 'html-has-lang',
       selector: 'html',
-      matches: function matches(node, virtualNode, context) {
-        return node.ownerDocument.defaultView.self === node.ownerDocument.defaultView.top;
-      },
       tags: [ 'cat.language', 'wcag2a', 'wcag311' ],
       all: [],
       any: [ 'has-lang' ],
       none: []
     }, {
       id: 'html-lang-valid',
-      selector: 'html[lang], html[xml\\:lang]',
+      selector: 'html[lang]',
       tags: [ 'cat.language', 'wcag2a', 'wcag311' ],
       all: [],
       any: [],
       none: [ 'valid-lang' ]
     }, {
-      id: 'html-xml-lang-mismatch',
-      selector: 'html[lang][xml\\:lang]',
-      matches: function matches(node, virtualNode, context) {
-        var getBaseLang = axe.utils.getBaseLang;
-        var primaryLangValue = getBaseLang(node.getAttribute('lang'));
-        var primaryXmlLangValue = getBaseLang(node.getAttribute('xml:lang'));
-        return axe.utils.validLangs().includes(primaryLangValue) && axe.utils.validLangs().includes(primaryXmlLangValue);
-      },
-      tags: [ 'cat.language', 'wcag2a', 'wcag311' ],
-      all: [ 'xml-lang-mismatch' ],
-      any: [],
-      none: []
-    }, {
       id: 'image-alt',
-      selector: 'img',
+      selector: 'img, [role=\'img\']',
       tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a' ],
       all: [],
       any: [ 'has-alt', 'aria-label', 'aria-labelledby', 'non-empty-title', 'role-presentation', 'role-none' ],
-      none: [ 'alt-space-value' ]
+      none: []
     }, {
       id: 'image-redundant-alt',
-      selector: 'img',
+      selector: 'button, [role="button"], a[href], p, li, td, th',
       tags: [ 'cat.text-alternatives', 'best-practice' ],
       all: [],
       any: [],
       none: [ 'duplicate-img-label' ]
     }, {
-      id: 'input-button-name',
-      selector: 'input[type="button"], input[type="submit"], input[type="reset"]',
-      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'section508', 'section508.22.a' ],
-      all: [],
-      any: [ 'non-empty-if-present', 'non-empty-value', 'aria-label', 'aria-labelledby', 'role-presentation', 'role-none', 'non-empty-title' ],
-      none: []
-    }, {
       id: 'input-image-alt',
       selector: 'input[type="image"]',
       tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a' ],
@@ -9768,43 +5632,19 @@
       any: [ 'non-empty-alt', 'aria-label', 'aria-labelledby', 'non-empty-title' ],
       none: []
     }, {
-      id: 'label-content-name-mismatch',
-      matches: function matches(node, virtualNode, context) {
-        var _axe$commons4 = axe.commons, aria = _axe$commons4.aria, text = _axe$commons4.text;
-        var role = aria.getRole(node);
-        if (!role) {
-          return false;
+      id: 'label-title-only',
+      selector: 'input, select, textarea',
+      matches: function matches(node, virtualNode) {
+        if (node.nodeName.toLowerCase() !== 'input') {
+          return true;
         }
-        var isWidgetType = aria.lookupTable.rolesOfType.widget.includes(role);
-        if (!isWidgetType) {
-          return false;
-        }
-        var rolesWithNameFromContents = aria.getRolesWithNameFromContents();
-        if (!rolesWithNameFromContents.includes(role)) {
-          return false;
-        }
-        if (!text.sanitize(aria.arialabelText(node)) && !text.sanitize(aria.arialabelledbyText(node))) {
-          return false;
-        }
-        if (!text.sanitize(text.visibleVirtual(virtualNode))) {
+        var t = node.getAttribute('type').toLowerCase();
+        if (t === 'hidden' || t === 'image' || t === 'button' || t === 'submit' || t === 'reset') {
           return false;
         }
         return true;
       },
-      tags: [ 'wcag21a', 'wcag253', 'experimental' ],
-      all: [],
-      any: [ 'label-content-name-mismatch' ],
-      none: []
-    }, {
-      id: 'label-title-only',
-      selector: 'input, select, textarea',
-      matches: function matches(node, virtualNode, context) {
-        if (node.nodeName.toLowerCase() !== 'input' || node.hasAttribute('type') === false) {
-          return true;
-        }
-        var type = node.getAttribute('type').toLowerCase();
-        return [ 'hidden', 'image', 'button', 'submit', 'reset' ].includes(type) === false;
-      },
+      enabled: false,
       tags: [ 'cat.forms', 'best-practice' ],
       all: [],
       any: [],
@@ -9812,133 +5652,25 @@
     }, {
       id: 'label',
       selector: 'input, select, textarea',
-      matches: function matches(node, virtualNode, context) {
-        if (node.nodeName.toLowerCase() !== 'input' || node.hasAttribute('type') === false) {
+      matches: function matches(node, virtualNode) {
+        if (node.nodeName.toLowerCase() !== 'input') {
           return true;
         }
-        var type = node.getAttribute('type').toLowerCase();
-        return [ 'hidden', 'image', 'button', 'submit', 'reset' ].includes(type) === false;
+        var t = node.getAttribute('type').toLowerCase();
+        if (t === 'hidden' || t === 'image' || t === 'button' || t === 'submit' || t === 'reset') {
+          return false;
+        }
+        return true;
       },
       tags: [ 'cat.forms', 'wcag2a', 'wcag332', 'wcag131', 'section508', 'section508.22.n' ],
       all: [],
       any: [ 'aria-label', 'aria-labelledby', 'implicit-label', 'explicit-label', 'non-empty-title' ],
-      none: [ 'help-same-as-label', 'hidden-explicit-label' ]
-    }, {
-      id: 'landmark-banner-is-top-level',
-      selector: 'header:not([role]), [role=banner]',
-      matches: function matches(node, virtualNode, context) {
-        var nativeScopeFilter = 'article, aside, main, nav, section';
-        return node.hasAttribute('role') || !axe.commons.dom.findUpVirtual(virtualNode, nativeScopeFilter);
-      },
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [],
-      any: [ 'landmark-is-top-level' ],
-      none: []
-    }, {
-      id: 'landmark-complementary-is-top-level',
-      selector: 'aside:not([role]), [role=complementary]',
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [],
-      any: [ 'landmark-is-top-level' ],
-      none: []
-    }, {
-      id: 'landmark-contentinfo-is-top-level',
-      selector: 'footer:not([role]), [role=contentinfo]',
-      matches: function matches(node, virtualNode, context) {
-        var nativeScopeFilter = 'article, aside, main, nav, section';
-        return node.hasAttribute('role') || !axe.commons.dom.findUpVirtual(virtualNode, nativeScopeFilter);
-      },
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [],
-      any: [ 'landmark-is-top-level' ],
-      none: []
-    }, {
-      id: 'landmark-main-is-top-level',
-      selector: 'main:not([role]), [role=main]',
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [],
-      any: [ 'landmark-is-top-level' ],
-      none: []
-    }, {
-      id: 'landmark-no-duplicate-banner',
-      selector: 'html',
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [],
-      any: [ {
-        options: {
-          selector: 'header:not([role]), [role=banner]',
-          nativeScopeFilter: 'article, aside, main, nav, section'
-        },
-        id: 'page-no-duplicate-banner'
-      } ],
-      none: []
-    }, {
-      id: 'landmark-no-duplicate-contentinfo',
-      selector: 'html',
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [],
-      any: [ {
-        options: {
-          selector: 'footer:not([role]), [role=contentinfo]',
-          nativeScopeFilter: 'article, aside, main, nav, section'
-        },
-        id: 'page-no-duplicate-contentinfo'
-      } ],
-      none: []
-    }, {
-      id: 'landmark-one-main',
-      selector: 'html',
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [ {
-        options: {
-          selector: 'main:not([role]), [role=\'main\']'
-        },
-        id: 'page-has-main'
-      }, {
-        options: {
-          selector: 'main:not([role]), [role=\'main\']'
-        },
-        id: 'page-no-duplicate-main'
-      } ],
-      any: [],
-      none: []
-    }, {
-      id: 'landmark-unique',
-      selector: '[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section',
-      tags: [ 'cat.semantics', 'best-practice' ],
-      matches: function matches(node, virtualNode, context) {
-        var excludedParentsForHeaderFooterLandmarks = [ 'article', 'aside', 'main', 'nav', 'section' ].join(',');
-        function isHeaderFooterLandmark(headerFooterElement) {
-          return !axe.commons.dom.findUpVirtual(headerFooterElement, excludedParentsForHeaderFooterLandmarks);
-        }
-        function isLandmarkVirtual(virtualNode) {
-          var actualNode = virtualNode.actualNode;
-          var landmarkRoles = axe.commons.aria.getRolesByType('landmark');
-          var role = axe.commons.aria.getRole(actualNode);
-          if (!role) {
-            return false;
-          }
-          var nodeName = actualNode.nodeName.toUpperCase();
-          if (nodeName === 'HEADER' || nodeName === 'FOOTER') {
-            return isHeaderFooterLandmark(virtualNode);
-          }
-          if (nodeName === 'SECTION' || nodeName === 'FORM') {
-            var accessibleText = axe.commons.text.accessibleTextVirtual(virtualNode);
-            return !!accessibleText;
-          }
-          return landmarkRoles.indexOf(role) >= 0 || role === 'region';
-        }
-        return isLandmarkVirtual(virtualNode) && axe.commons.dom.isVisible(node, true);
-      },
-      all: [],
-      any: [ 'landmark-is-unique' ],
-      none: []
+      none: [ 'help-same-as-label', 'multiple-label' ]
     }, {
       id: 'layout-table',
       selector: 'table',
-      matches: function matches(node, virtualNode, context) {
-        var role = (node.getAttribute('role') || '').toLowerCase();
-        return !((role === 'presentation' || role === 'none') && !axe.commons.dom.isFocusable(node)) && !axe.commons.table.isDataTable(node);
+      matches: function matches(node, virtualNode) {
+        return !axe.commons.table.isDataTable(node);
       },
       tags: [ 'cat.semantics', 'wcag2a', 'wcag131' ],
       all: [],
@@ -9946,8 +5678,8 @@
       none: [ 'has-th', 'has-caption', 'has-summary' ]
     }, {
       id: 'link-in-text-block',
-      selector: 'a[href], [role=link]',
-      matches: function matches(node, virtualNode, context) {
+      selector: 'a[href], *[role=link]',
+      matches: function matches(node, virtualNode) {
         var text = axe.commons.text.sanitize(node.textContent);
         var role = node.getAttribute('role');
         if (role && role !== 'link') {
@@ -9969,17 +5701,17 @@
     }, {
       id: 'link-name',
       selector: 'a[href], [role=link][href]',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return node.getAttribute('role') !== 'button';
       },
-      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'wcag244', 'section508', 'section508.22.a' ],
+      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag111', 'wcag412', 'wcag244', 'section508', 'section508.22.a' ],
       all: [],
       any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', 'role-presentation', 'role-none' ],
       none: [ 'focusable-no-name' ]
     }, {
       id: 'list',
       selector: 'ul, ol',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return !node.getAttribute('role');
       },
       tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],
@@ -9989,7 +5721,7 @@
     }, {
       id: 'listitem',
       selector: 'li',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return !node.getAttribute('role');
       },
       tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],
@@ -10044,12 +5776,12 @@
       selector: 'object',
       tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a' ],
       all: [],
-      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', 'non-empty-title', 'role-presentation', 'role-none' ],
+      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', 'non-empty-title' ],
       none: []
     }, {
       id: 'p-as-heading',
       selector: 'p',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         var children = Array.from(node.parentNode.childNodes);
         var nodeText = node.textContent.trim();
         var isSentence = /[.!?:;](?![.!?:;])/g;
@@ -10082,18 +5814,6 @@
       any: [],
       none: []
     }, {
-      id: 'page-has-heading-one',
-      selector: 'html',
-      tags: [ 'cat.semantics', 'best-practice' ],
-      all: [ {
-        options: {
-          selector: 'h1:not([role]), [role="heading"][aria-level="1"]'
-        },
-        id: 'page-has-heading-one'
-      } ],
-      any: [],
-      none: []
-    }, {
       id: 'radiogroup',
       selector: 'input[type=radio][name]',
       tags: [ 'cat.forms', 'best-practice' ],
@@ -10104,46 +5824,20 @@
       id: 'region',
       selector: 'html',
       pageLevel: true,
+      enabled: false,
       tags: [ 'cat.keyboard', 'best-practice' ],
       all: [],
       any: [ 'region' ],
       none: []
     }, {
-      id: 'role-img-alt',
-      selector: '[role=\'img\']:not(svg):not(img):not(area):not(input):not(object)',
-      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a' ],
-      all: [],
-      any: [ 'aria-label', 'aria-labelledby', 'non-empty-title' ],
-      none: []
-    }, {
       id: 'scope-attr-valid',
       selector: 'td[scope], th[scope]',
+      enabled: true,
       tags: [ 'cat.tables', 'best-practice' ],
       all: [ 'html5-scope', 'scope-value' ],
       any: [],
       none: []
     }, {
-      id: 'scrollable-region-focusable',
-      matches: function matches(node, virtualNode, context) {
-        var querySelectorAll = axe.utils.querySelectorAll;
-        var hasContentVirtual = axe.commons.dom.hasContentVirtual;
-        if (!!axe.utils.getScroll(node, 13) === false) {
-          return false;
-        }
-        var nodeAndDescendents = querySelectorAll(virtualNode, '*');
-        var hasVisibleChildren = nodeAndDescendents.some(function(elm) {
-          return hasContentVirtual(elm, true, true);
-        });
-        if (!hasVisibleChildren) {
-          return false;
-        }
-        return true;
-      },
-      tags: [ 'wcag2a', 'wcag211' ],
-      all: [],
-      any: [ 'focusable-content', 'focusable-element' ],
-      none: []
-    }, {
       id: 'server-side-image-map',
       selector: 'img[ismap]',
       tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag211', 'section508', 'section508.22.f' ],
@@ -10152,10 +5846,9 @@
       none: [ 'exists' ]
     }, {
       id: 'skip-link',
-      selector: 'a[href^="#"], a[href^="/#"]',
-      matches: function matches(node, virtualNode, context) {
-        return axe.commons.dom.isSkipLink(node);
-      },
+      selector: 'a[href]',
+      pageLevel: true,
+      enabled: false,
       tags: [ 'cat.keyboard', 'best-practice' ],
       all: [],
       any: [ 'skip-link' ],
@@ -10177,7 +5870,7 @@
     }, {
       id: 'table-fake-caption',
       selector: 'table',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return axe.commons.table.isDataTable(node);
       },
       tags: [ 'cat.tables', 'experimental', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ],
@@ -10187,7 +5880,7 @@
     }, {
       id: 'td-has-header',
       selector: 'table',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         if (axe.commons.table.isDataTable(node)) {
           var tableArray = axe.commons.table.toArray(node);
           return tableArray.length >= 3 && tableArray[0].length >= 3 && tableArray[1].length >= 3 && tableArray[2].length >= 3;
@@ -10208,7 +5901,7 @@
     }, {
       id: 'th-has-data-cells',
       selector: 'table',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return axe.commons.table.isDataTable(node);
       },
       tags: [ 'cat.tables', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ],
@@ -10218,7 +5911,7 @@
     }, {
       id: 'valid-lang',
       selector: '[lang], [xml\\:lang]',
-      matches: function matches(node, virtualNode, context) {
+      matches: function matches(node, virtualNode) {
         return node.nodeName.toLowerCase() !== 'html';
       },
       tags: [ 'cat.language', 'wcag2aa', 'wcag312' ],
@@ -10229,7 +5922,7 @@
       id: 'video-caption',
       selector: 'video',
       excludeHidden: false,
-      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag122', 'section508', 'section508.22.a' ],
+      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag122', 'wcag123', 'section508', 'section508.22.a' ],
       all: [],
       any: [],
       none: [ 'caption' ]
@@ -10244,27 +5937,23 @@
     } ],
     checks: [ {
       id: 'abstractrole',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return axe.commons.aria.getRoleType(node.getAttribute('role')) === 'abstract';
       }
     }, {
       id: 'aria-allowed-attr',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        options = options || {};
+      evaluate: function evaluate(node, options, virtualNode) {
         var invalid = [];
-        var attr, attrName, allowed, role = node.getAttribute('role'), attrs = axe.utils.getNodeAttributes(node);
+        var attr, attrName, allowed, role = node.getAttribute('role'), attrs = node.attributes;
         if (!role) {
           role = axe.commons.aria.implicitRole(node);
         }
         allowed = axe.commons.aria.allowedAttr(role);
-        if (Array.isArray(options[role])) {
-          allowed = axe.utils.uniqueArray(options[role].concat(allowed));
-        }
         if (role && allowed) {
           for (var i = 0, l = attrs.length; i < l; i++) {
             attr = attrs[i];
             attrName = attr.name;
-            if (axe.commons.aria.validateAttr(attrName) && !allowed.includes(attrName)) {
+            if (axe.commons.aria.validateAttr(attrName) && allowed.indexOf(attrName) === -1) {
               invalid.push(attrName + '="' + attr.nodeValue + '"');
             }
           }
@@ -10276,130 +5965,25 @@
         return true;
       }
     }, {
-      id: 'aria-allowed-role',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var dom = axe.commons.dom;
-        var _ref = options || {}, _ref$allowImplicit = _ref.allowImplicit, allowImplicit = _ref$allowImplicit === void 0 ? true : _ref$allowImplicit, _ref$ignoredTags = _ref.ignoredTags, ignoredTags = _ref$ignoredTags === void 0 ? [] : _ref$ignoredTags;
-        var tagName = node.nodeName.toUpperCase();
-        if (ignoredTags.map(function(t) {
-          return t.toUpperCase();
-        }).includes(tagName)) {
-          return true;
-        }
-        var unallowedRoles = axe.commons.aria.getElementUnallowedRoles(node, allowImplicit);
-        if (unallowedRoles.length) {
-          this.data(unallowedRoles);
-          if (!dom.isVisible(node, true)) {
-            return undefined;
-          }
-          return false;
-        }
-        return true;
-      },
-      options: {
-        allowImplicit: true,
-        ignoredTags: []
-      }
-    }, {
       id: 'aria-hidden-body',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return node.getAttribute('aria-hidden') !== 'true';
       }
     }, {
-      id: 'aria-errormessage',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons5 = axe.commons, aria = _axe$commons5.aria, dom = _axe$commons5.dom;
-        options = Array.isArray(options) ? options : [];
-        var attr = node.getAttribute('aria-errormessage');
-        var hasAttr = node.hasAttribute('aria-errormessage');
-        var doc = dom.getRootNode(node);
-        function validateAttrValue(attr) {
-          if (attr.trim() === '') {
-            return aria.lookupTable.attributes['aria-errormessage'].allowEmpty;
-          }
-          var idref = attr && doc.getElementById(attr);
-          if (idref) {
-            return idref.getAttribute('role') === 'alert' || idref.getAttribute('aria-live') === 'assertive' || axe.utils.tokenList(node.getAttribute('aria-describedby') || '').indexOf(attr) > -1;
-          }
-        }
-        if (options.indexOf(attr) === -1 && hasAttr) {
-          if (!validateAttrValue(attr)) {
-            this.data(axe.utils.tokenList(attr));
-            return false;
-          }
-        }
-        return true;
-      }
-    }, {
-      id: 'has-widget-role',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var role = node.getAttribute('role');
-        if (role === null) {
-          return false;
-        }
-        var roleType = axe.commons.aria.getRoleType(role);
-        return roleType === 'widget' || roleType === 'composite';
-      },
-      options: []
-    }, {
-      id: 'implicit-role-fallback',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var role = node.getAttribute('role');
-        if (role === null || !axe.commons.aria.isValidRole(role)) {
-          return true;
-        }
-        var roleType = axe.commons.aria.getRoleType(role);
-        return axe.commons.aria.implicitRole(node) === roleType;
-      }
-    }, {
       id: 'invalidrole',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        return !axe.commons.aria.isValidRole(node.getAttribute('role'), {
-          allowAbstract: true
-        });
-      }
-    }, {
-      id: 'no-implicit-explicit-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons6 = axe.commons, aria = _axe$commons6.aria, text = _axe$commons6.text;
-        var role = aria.getRole(node, {
-          noImplicit: true
-        });
-        this.data(role);
-        var labelText = text.sanitize(text.labelText(virtualNode)).toLowerCase();
-        var accText = text.sanitize(text.accessibleText(node)).toLowerCase();
-        if (!accText && !labelText) {
-          return false;
-        }
-        if (!accText && labelText) {
-          return undefined;
-        }
-        if (!accText.includes(labelText)) {
-          return undefined;
-        }
-        return false;
+      evaluate: function evaluate(node, options, virtualNode) {
+        return !axe.commons.aria.isValidRole(node.getAttribute('role'));
       }
     }, {
       id: 'aria-required-attr',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        options = options || {};
+      evaluate: function evaluate(node, options, virtualNode) {
         var missing = [];
-        var _axe$commons$forms = axe.commons.forms, isNativeTextbox = _axe$commons$forms.isNativeTextbox, isNativeSelect = _axe$commons$forms.isNativeSelect, isAriaTextbox = _axe$commons$forms.isAriaTextbox, isAriaListbox = _axe$commons$forms.isAriaListbox, isAriaCombobox = _axe$commons$forms.isAriaCombobox, isAriaRange = _axe$commons$forms.isAriaRange;
-        var preChecks = {
-          'aria-valuenow': function ariaValuenow() {
-            return !(isNativeTextbox(node) || isNativeSelect(node) || isAriaTextbox(node) || isAriaListbox(node) || isAriaCombobox(node) || isAriaRange(node) && node.hasAttribute('aria-valuenow'));
-          }
-        };
         if (node.hasAttributes()) {
-          var role = node.getAttribute('role');
-          var required = axe.commons.aria.requiredAttr(role);
-          if (Array.isArray(options[role])) {
-            required = axe.utils.uniqueArray(options[role], required);
-          }
+          var attr, role = node.getAttribute('role'), required = axe.commons.aria.requiredAttr(role);
           if (role && required) {
             for (var i = 0, l = required.length; i < l; i++) {
-              var attr = required[i];
-              if (!node.getAttribute(attr) && (preChecks[attr] ? preChecks[attr]() : true)) {
+              attr = required[i];
+              if (!node.getAttribute(attr)) {
                 missing.push(attr);
               }
             }
@@ -10413,12 +5997,8 @@
       }
     }, {
       id: 'aria-required-children',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var requiredOwned = axe.commons.aria.requiredOwned;
-        var implicitNodes = axe.commons.aria.implicitNodes;
-        var matchesSelector = axe.utils.matchesSelector;
-        var idrefs = axe.commons.dom.idrefs;
-        var reviewEmpty = options && Array.isArray(options.reviewEmpty) ? options.reviewEmpty : [];
+      evaluate: function evaluate(node, options, virtualNode) {
+        var requiredOwned = axe.commons.aria.requiredOwned, implicitNodes = axe.commons.aria.implicitNodes, matchesSelector = axe.commons.utils.matchesSelector, idrefs = axe.commons.dom.idrefs;
         function owns(node, virtualTree, role, ariaOwned) {
           if (node === null) {
             return false;
@@ -10436,39 +6016,27 @@
             if (nodes[index] === null) {
               continue;
             }
-            var virtualTree = axe.utils.getNodeFromTree(nodes[index]);
+            var virtualTree = axe.utils.getNodeFromTree(axe._tree[0], nodes[index]);
             if (owns(nodes[index], virtualTree, role, true)) {
               return true;
             }
           }
           return false;
         }
-        function missingRequiredChildren(node, childRoles, all, role) {
-          var index, length = childRoles.length, missing = [], ownedElements = idrefs(node, 'aria-owns');
-          for (index = 0; index < length; index++) {
-            var childRole = childRoles[index];
-            if (owns(node, virtualNode, childRole) || ariaOwns(ownedElements, childRole)) {
+        function missingRequiredChildren(node, childRoles, all) {
+          var i, l = childRoles.length, missing = [], ownedElements = idrefs(node, 'aria-owns');
+          for (i = 0; i < l; i++) {
+            var r = childRoles[i];
+            if (owns(node, virtualNode, r) || ariaOwns(ownedElements, r)) {
               if (!all) {
                 return null;
               }
             } else {
               if (all) {
-                missing.push(childRole);
+                missing.push(r);
               }
             }
           }
-          if (role === 'combobox') {
-            var textboxIndex = missing.indexOf('textbox');
-            var textTypeInputs = [ 'text', 'search', 'email', 'url', 'tel' ];
-            if (textboxIndex >= 0 && node.nodeName.toUpperCase() === 'INPUT' && textTypeInputs.includes(node.type)) {
-              missing.splice(textboxIndex, 1);
-            }
-            var listboxIndex = missing.indexOf('listbox');
-            var expanded = node.getAttribute('aria-expanded');
-            if (listboxIndex >= 0 && (!expanded || expanded === 'false')) {
-              missing.splice(listboxIndex, 1);
-            }
-          }
           if (missing.length) {
             return missing;
           }
@@ -10488,29 +6056,22 @@
           var all = true;
           childRoles = required.all;
         }
-        var missing = missingRequiredChildren(node, childRoles, all, role);
+        var missing = missingRequiredChildren(node, childRoles, all);
         if (!missing) {
           return true;
         }
         this.data(missing);
-        if (reviewEmpty.includes(role) && node.children.length === 0 && idrefs(node, 'aria-owns').length === 0) {
-          return undefined;
-        } else {
-          return false;
-        }
-      },
-      options: {
-        reviewEmpty: [ 'doc-bibliography', 'doc-endnotes', 'grid', 'list', 'listbox', 'table', 'tablist', 'tree', 'treegrid', 'rowgroup' ]
+        return false;
       }
     }, {
       id: 'aria-required-parent',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         function getSelector(role) {
           var impliedNative = axe.commons.aria.implicitNodes(role) || [];
           return impliedNative.concat('[role="' + role + '"]').join(',');
         }
-        function getMissingContext(virtualNode, requiredContext, includeElement) {
-          var index, length, role = virtualNode.actualNode.getAttribute('role'), missing = [];
+        function getMissingContext(element, requiredContext, includeElement) {
+          var index, length, role = element.getAttribute('role'), missing = [];
           if (!requiredContext) {
             requiredContext = axe.commons.aria.requiredContext(role);
           }
@@ -10518,10 +6079,10 @@
             return null;
           }
           for (index = 0, length = requiredContext.length; index < length; index++) {
-            if (includeElement && axe.utils.matchesSelector(virtualNode.actualNode, getSelector(requiredContext[index]))) {
+            if (includeElement && axe.utils.matchesSelector(element, getSelector(requiredContext[index]))) {
               return null;
             }
-            if (axe.commons.dom.findUpVirtual(virtualNode, getSelector(requiredContext[index]))) {
+            if (axe.commons.dom.findUp(element, getSelector(requiredContext[index]))) {
               return null;
             } else {
               missing.push(requiredContext[index]);
@@ -10533,9 +6094,9 @@
           var owners = [], o = null;
           while (element) {
             if (element.getAttribute('id')) {
-              var id = axe.utils.escapeSelector(element.getAttribute('id'));
+              var id = axe.commons.utils.escapeSelector(element.getAttribute('id'));
               var doc = axe.commons.dom.getRootNode(element);
-              o = doc.querySelector('[aria-owns~='.concat(id, ']'));
+              o = doc.querySelector('[aria-owns~=' + id + ']');
               if (o) {
                 owners.push(o);
               }
@@ -10544,14 +6105,14 @@
           }
           return owners.length ? owners : null;
         }
-        var missingParents = getMissingContext(virtualNode);
+        var missingParents = getMissingContext(node);
         if (!missingParents) {
           return true;
         }
         var owners = getAriaOwners(node);
         if (owners) {
           for (var i = 0, l = owners.length; i < l; i++) {
-            missingParents = getMissingContext(axe.utils.getNodeFromTree(owners[i]), missingParents, true);
+            missingParents = getMissingContext(owners[i], missingParents, true);
             if (!missingParents) {
               return true;
             }
@@ -10561,78 +6122,18 @@
         return false;
       }
     }, {
-      id: 'aria-unsupported-attr',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var nodeName = node.nodeName.toUpperCase();
-        var lookupTable = axe.commons.aria.lookupTable;
-        var role = axe.commons.aria.getRole(node);
-        var unsupportedAttrs = Array.from(axe.utils.getNodeAttributes(node)).filter(function(_ref2) {
-          var name = _ref2.name;
-          var attribute = lookupTable.attributes[name];
-          if (!axe.commons.aria.validateAttr(name)) {
-            return false;
-          }
-          var unsupported = attribute.unsupported;
-          if (_typeof(unsupported) !== 'object') {
-            return !!unsupported;
-          }
-          var isException = axe.commons.matches(node, unsupported.exceptions);
-          if (!Object.keys(lookupTable.evaluateRoleForElement).includes(nodeName)) {
-            return !isException;
-          }
-          return !lookupTable.evaluateRoleForElement[nodeName]({
-            node: node,
-            role: role,
-            out: isException
-          });
-        }).map(function(candidate) {
-          return candidate.name.toString();
-        });
-        if (unsupportedAttrs.length) {
-          this.data(unsupportedAttrs);
-          return true;
-        }
-        return false;
-      }
-    }, {
-      id: 'unsupportedrole',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        return axe.commons.aria.isUnsupportedRole(axe.commons.aria.getRole(node));
-      }
-    }, {
       id: 'aria-valid-attr-value',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         options = Array.isArray(options) ? options : [];
-        var needsReview = [];
-        var invalid = [];
-        var aria = /^aria-/;
-        var attrs = axe.utils.getNodeAttributes(node);
-        var skipAttrs = [ 'aria-errormessage' ];
-        var preChecks = {
-          'aria-controls': function ariaControls() {
-            return node.getAttribute('aria-expanded') !== 'false' && node.getAttribute('aria-selected') !== 'false';
-          },
-          'aria-owns': function ariaOwns() {
-            return node.getAttribute('aria-expanded') !== 'false';
-          },
-          'aria-describedby': function ariaDescribedby() {
-            if (!axe.commons.aria.validateAttrValue(node, 'aria-describedby')) {
-              needsReview.push('aria-describedby="'.concat(node.getAttribute('aria-describedby'), '"'));
-            }
-            return;
-          }
-        };
+        var invalid = [], aria = /^aria-/;
+        var attr, attrName, attrs = node.attributes;
         for (var i = 0, l = attrs.length; i < l; i++) {
-          var attr = attrs[i];
-          var attrName = attr.name;
-          if (!skipAttrs.includes(attrName) && options.indexOf(attrName) === -1 && aria.test(attrName) && (preChecks[attrName] ? preChecks[attrName]() : true) && !axe.commons.aria.validateAttrValue(node, attrName)) {
-            invalid.push(''.concat(attrName, '="').concat(attr.nodeValue, '"'));
+          attr = attrs[i];
+          attrName = attr.name;
+          if (options.indexOf(attrName) === -1 && aria.test(attrName) && !axe.commons.aria.validateAttrValue(node, attrName)) {
+            invalid.push(attrName + '="' + attr.nodeValue + '"');
           }
         }
-        if (needsReview.length) {
-          this.data(needsReview);
-          return undefined;
-        }
         if (invalid.length) {
           this.data(invalid);
           return false;
@@ -10642,10 +6143,10 @@
       options: []
     }, {
       id: 'aria-valid-attr',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         options = Array.isArray(options) ? options : [];
         var invalid = [], aria = /^aria-/;
-        var attr, attrs = axe.utils.getNodeAttributes(node);
+        var attr, attrs = node.attributes;
         for (var i = 0, l = attrs.length; i < l; i++) {
           attr = attrs[i].name;
           if (options.indexOf(attr) === -1 && aria.test(attr) && !axe.commons.aria.validateAttr(attr)) {
@@ -10660,95 +6161,51 @@
       },
       options: []
     }, {
-      id: 'valid-scrollable-semantics',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS = {
-          ARTICLE: true,
-          ASIDE: true,
-          NAV: true,
-          SECTION: true
-        };
-        var VALID_ROLES_FOR_SCROLLABLE_REGIONS = {
-          application: true,
-          banner: false,
-          complementary: true,
-          contentinfo: true,
-          form: true,
-          main: true,
-          navigation: true,
-          region: true,
-          search: false
-        };
-        function validScrollableTagName(node) {
-          var nodeName = node.nodeName.toUpperCase();
-          return VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS[nodeName] || false;
-        }
-        function validScrollableRole(node) {
-          var role = node.getAttribute('role');
-          if (!role) {
-            return false;
-          }
-          return VALID_ROLES_FOR_SCROLLABLE_REGIONS[role.toLowerCase()] || false;
-        }
-        function validScrollableSemantics(node) {
-          return validScrollableRole(node) || validScrollableTagName(node);
-        }
-        return validScrollableSemantics(node);
-      },
-      options: []
-    }, {
       id: 'color-contrast',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons7 = axe.commons, dom = _axe$commons7.dom, color = _axe$commons7.color, text = _axe$commons7.text;
-        if (!dom.isVisible(node, false)) {
+      evaluate: function evaluate(node, options, virtualNode) {
+        if (!axe.commons.dom.isVisible(node, false)) {
           return true;
         }
         var noScroll = !!(options || {}).noScroll;
-        var bgNodes = [];
-        var bgColor = color.getBackgroundColor(node, bgNodes, noScroll);
-        var fgColor = color.getForegroundColor(node, noScroll);
+        var bgNodes = [], bgColor = axe.commons.color.getBackgroundColor(node, bgNodes, noScroll), fgColor = axe.commons.color.getForegroundColor(node, noScroll);
         var nodeStyle = window.getComputedStyle(node);
         var fontSize = parseFloat(nodeStyle.getPropertyValue('font-size'));
         var fontWeight = nodeStyle.getPropertyValue('font-weight');
         var bold = [ 'bold', 'bolder', '600', '700', '800', '900' ].indexOf(fontWeight) !== -1;
-        var cr = color.hasValidContrastRatio(bgColor, fgColor, fontSize, bold);
+        var cr = axe.commons.color.hasValidContrastRatio(bgColor, fgColor, fontSize, bold);
         var truncatedResult = Math.floor(cr.contrastRatio * 100) / 100;
         var missing;
         if (bgColor === null) {
-          missing = color.incompleteData.get('bgColor');
+          missing = axe.commons.color.incompleteData.get('bgColor');
         }
-        var equalRatio = truncatedResult === 1;
-        var shortTextContent = text.visibleVirtual(virtualNode, false, true).length === 1;
-        if (equalRatio) {
-          missing = color.incompleteData.set('bgColor', 'equalRatio');
-        } else if (shortTextContent) {
-          missing = 'shortTextContent';
+        var equalRatio = false;
+        if (truncatedResult === 1) {
+          equalRatio = true;
+          missing = axe.commons.color.incompleteData.set('bgColor', 'equalRatio');
         }
         var data = {
           fgColor: fgColor ? fgColor.toHexString() : undefined,
           bgColor: bgColor ? bgColor.toHexString() : undefined,
           contrastRatio: cr ? truncatedResult : undefined,
-          fontSize: ''.concat((fontSize * 72 / 96).toFixed(1), 'pt (').concat(fontSize, 'px)'),
+          fontSize: (fontSize * 72 / 96).toFixed(1) + 'pt',
           fontWeight: bold ? 'bold' : 'normal',
-          missingData: missing,
-          expectedContrastRatio: cr.expectedContrastRatio + ':1'
+          missingData: missing
         };
         this.data(data);
-        if (fgColor === null || bgColor === null || equalRatio || shortTextContent && !cr.isValid) {
+        if (fgColor === null || bgColor === null || equalRatio) {
           missing = null;
-          color.incompleteData.clear();
+          axe.commons.color.incompleteData.clear();
           this.relatedNodes(bgNodes);
           return undefined;
-        }
-        if (!cr.isValid) {
+        } else if (!cr.isValid) {
           this.relatedNodes(bgNodes);
         }
         return cr.isValid;
       }
     }, {
       id: 'link-in-text-block',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons8 = axe.commons, color = _axe$commons8.color, dom = _axe$commons8.dom;
+      evaluate: function evaluate(node, options, virtualNode) {
+        var _axe$commons = axe.commons, color = _axe$commons.color, dom = _axe$commons.dom;
         function getContrast(color1, color2) {
           var c1lum = color1.getRelativeLuminance();
           var c2lum = color2.getRelativeLuminance();
@@ -10790,7 +6247,7 @@
           nodeColor = color.getBackgroundColor(node);
           parentColor = color.getBackgroundColor(parentBlock);
           if (!nodeColor || !parentColor || getContrast(nodeColor, parentColor) >= 3) {
-            var reason;
+            var reason = void 0;
             if (!nodeColor || !parentColor) {
               reason = axe.commons.color.incompleteData.get('bgColor');
             } else {
@@ -10807,67 +6264,11 @@
         return false;
       }
     }, {
-      id: 'autocomplete-appropriate',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        if (virtualNode.props.nodeName !== 'input') {
-          return true;
-        }
-        var number = [ 'text', 'search', 'number' ];
-        var url = [ 'text', 'search', 'url' ];
-        var allowedTypesMap = {
-          bday: [ 'text', 'search', 'date' ],
-          email: [ 'text', 'search', 'email' ],
-          'cc-exp': [ 'text', 'search', 'month' ],
-          'street-address': [ 'text' ],
-          tel: [ 'text', 'search', 'tel' ],
-          'cc-exp-month': number,
-          'cc-exp-year': number,
-          'transaction-amount': number,
-          'bday-day': number,
-          'bday-month': number,
-          'bday-year': number,
-          'new-password': [ 'text', 'search', 'password' ],
-          'current-password': [ 'text', 'search', 'password' ],
-          url: url,
-          photo: url,
-          impp: url
-        };
-        if (_typeof(options) === 'object') {
-          Object.keys(options).forEach(function(key) {
-            if (!allowedTypesMap[key]) {
-              allowedTypesMap[key] = [];
-            }
-            allowedTypesMap[key] = allowedTypesMap[key].concat(options[key]);
-          });
-        }
-        var autocomplete = virtualNode.attr('autocomplete');
-        var autocompleteTerms = autocomplete.split(/\s+/g).map(function(term) {
-          return term.toLowerCase();
-        });
-        var purposeTerm = autocompleteTerms[autocompleteTerms.length - 1];
-        if (axe.commons.text.autocomplete.stateTerms.includes(purposeTerm)) {
-          return true;
-        }
-        var allowedTypes = allowedTypesMap[purposeTerm];
-        var type = virtualNode.hasAttr('type') ? axe.commons.text.sanitize(virtualNode.attr('type')).toLowerCase() : 'text';
-        type = axe.utils.validInputTypes().includes(type) ? type : 'text';
-        if (typeof allowedTypes === 'undefined') {
-          return type === 'text';
-        }
-        return allowedTypes.includes(type);
-      }
-    }, {
-      id: 'autocomplete-valid',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var autocomplete = virtualNode.attr('autocomplete') || '';
-        return axe.commons.text.isValidAutocomplete(autocomplete, options);
-      }
-    }, {
       id: 'fieldset',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var failureCode, self = this;
         function getUnrelatedElements(parent, name) {
-          return axe.utils.toArray(parent.querySelectorAll('select,textarea,button,input:not([name="' + name + '"]):not([type="hidden"])'));
+          return axe.commons.utils.toArray(parent.querySelectorAll('select,textarea,button,input:not([name="' + name + '"]):not([type="hidden"])'));
         }
         function checkFieldset(group, name) {
           var firstNode = group.firstElementChild;
@@ -10908,22 +6309,22 @@
           return true;
         }
         function spliceCurrentNode(nodes, current) {
-          return axe.utils.toArray(nodes).filter(function(candidate) {
+          return axe.commons.utils.toArray(nodes).filter(function(candidate) {
             return candidate !== current;
           });
         }
-        function runCheck(virtualNode) {
-          var name = axe.utils.escapeSelector(virtualNode.actualNode.name);
-          var root = axe.commons.dom.getRootNode(virtualNode.actualNode);
-          var matchingNodes = root.querySelectorAll('input[type="' + axe.utils.escapeSelector(virtualNode.actualNode.type) + '"][name="' + name + '"]');
+        function runCheck(element) {
+          var name = axe.commons.utils.escapeSelector(node.name);
+          var root = axe.commons.dom.getRootNode(node);
+          var matchingNodes = root.querySelectorAll('input[type="' + axe.commons.utils.escapeSelector(node.type) + '"][name="' + name + '"]');
           if (matchingNodes.length < 2) {
             return true;
           }
-          var fieldset = axe.commons.dom.findUpVirtual(virtualNode, 'fieldset');
-          var group = axe.commons.dom.findUpVirtual(virtualNode, '[role="group"]' + (virtualNode.actualNode.type === 'radio' ? ',[role="radiogroup"]' : ''));
+          var fieldset = axe.commons.dom.findUp(element, 'fieldset');
+          var group = axe.commons.dom.findUp(element, '[role="group"]' + (node.type === 'radio' ? ',[role="radiogroup"]' : ''));
           if (!group && !fieldset) {
             failureCode = 'no-group';
-            self.relatedNodes(spliceCurrentNode(matchingNodes, virtualNode.actualNode));
+            self.relatedNodes(spliceCurrentNode(matchingNodes, element));
             return false;
           } else if (fieldset) {
             return checkFieldset(fieldset, name);
@@ -10935,7 +6336,7 @@
           name: node.getAttribute('name'),
           type: node.getAttribute('type')
         };
-        var result = runCheck(virtualNode);
+        var result = runCheck(node);
         if (!result) {
           data.failureCode = failureCode;
         }
@@ -10968,58 +6369,27 @@
       }
     }, {
       id: 'group-labelledby',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons9 = axe.commons, dom = _axe$commons9.dom, text = _axe$commons9.text;
-        var type = axe.utils.escapeSelector(node.type);
-        var name = axe.utils.escapeSelector(node.name);
-        var doc = dom.getRootNode(node);
-        var data = {
-          name: node.name,
-          type: node.type
-        };
-        var matchingNodes = Array.from(doc.querySelectorAll('input[type="'.concat(type, '"][name="').concat(name, '"]')));
+      evaluate: function evaluate(node, options, virtualNode) {
+        this.data({
+          name: node.getAttribute('name'),
+          type: node.getAttribute('type')
+        });
+        var doc = axe.commons.dom.getRootNode(node);
+        var matchingNodes = doc.querySelectorAll('input[type="' + axe.commons.utils.escapeSelector(node.type) + '"][name="' + axe.commons.utils.escapeSelector(node.name) + '"]');
         if (matchingNodes.length <= 1) {
-          this.data(data);
           return true;
         }
-        var sharedLabels = dom.idrefs(node, 'aria-labelledby').filter(function(label) {
-          return !!label;
-        });
-        var uniqueLabels = sharedLabels.slice();
-        matchingNodes.forEach(function(groupItem) {
-          if (groupItem === node) {
-            return;
-          }
-          var labels = dom.idrefs(groupItem, 'aria-labelledby').filter(function(newLabel) {
-            return newLabel;
+        return [].map.call(matchingNodes, function(m) {
+          var l = m.getAttribute('aria-labelledby');
+          return l ? l.split(/\s+/) : [];
+        }).reduce(function(prev, curr) {
+          return prev.filter(function(n) {
+            return curr.includes(n);
           });
-          sharedLabels = sharedLabels.filter(function(sharedLabel) {
-            return labels.includes(sharedLabel);
-          });
-          uniqueLabels = uniqueLabels.filter(function(uniqueLabel) {
-            return !labels.includes(uniqueLabel);
-          });
-        });
-        var accessibleTextOptions = {
-          inLabelledByContext: true
-        };
-        uniqueLabels = uniqueLabels.filter(function(labelNode) {
-          return text.accessibleText(labelNode, accessibleTextOptions);
-        });
-        sharedLabels = sharedLabels.filter(function(labelNode) {
-          return text.accessibleText(labelNode, accessibleTextOptions);
-        });
-        if (uniqueLabels.length > 0 && sharedLabels.length > 0) {
-          this.data(data);
-          return true;
-        }
-        if (uniqueLabels.length > 0 && sharedLabels.length === 0) {
-          data.failureCode = 'no-shared-label';
-        } else if (uniqueLabels.length === 0 && sharedLabels.length > 0) {
-          data.failureCode = 'no-unique-label';
-        }
-        this.data(data);
-        return false;
+        }).filter(function(n) {
+          var labelNode = doc.getElementById(n);
+          return labelNode && axe.commons.text.accessibleText(labelNode);
+        }).length !== 0;
       },
       after: function after(results, options) {
         var seen = {};
@@ -11037,7 +6407,7 @@
       }
     }, {
       id: 'accesskeys',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         if (axe.commons.dom.isVisible(node, false)) {
           this.data(node.getAttribute('accesskey'));
           this.relatedNodes([ node ]);
@@ -11064,256 +6434,51 @@
         });
       }
     }, {
-      id: 'focusable-content',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var tabbableElements = virtualNode.tabbableElements;
-        if (!tabbableElements) {
-          return false;
-        }
-        var tabbableContentElements = tabbableElements.filter(function(el) {
-          return el !== virtualNode;
-        });
-        return tabbableContentElements.length > 0;
-      }
-    }, {
-      id: 'focusable-disabled',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var elementsThatCanBeDisabled = [ 'BUTTON', 'FIELDSET', 'INPUT', 'SELECT', 'TEXTAREA' ];
-        var tabbableElements = virtualNode.tabbableElements;
-        if (!tabbableElements || !tabbableElements.length) {
-          return true;
-        }
-        var relatedNodes = tabbableElements.reduce(function(out, _ref3) {
-          var el = _ref3.actualNode;
-          var nodeName = el.nodeName.toUpperCase();
-          if (elementsThatCanBeDisabled.includes(nodeName)) {
-            out.push(el);
-          }
-          return out;
-        }, []);
-        this.relatedNodes(relatedNodes);
-        return relatedNodes.length === 0;
-      }
-    }, {
-      id: 'focusable-element',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var isFocusable = virtualNode.isFocusable;
-        var tabIndex = parseInt(virtualNode.actualNode.getAttribute('tabindex'), 10);
-        tabIndex = !isNaN(tabIndex) ? tabIndex : null;
-        return tabIndex ? isFocusable && tabIndex >= 0 : isFocusable;
-      }
-    }, {
       id: 'focusable-no-name',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var tabIndex = node.getAttribute('tabindex'), inFocusOrder = axe.commons.dom.isFocusable(node) && tabIndex > -1;
-        if (!inFocusOrder) {
+      evaluate: function evaluate(node, options, virtualNode) {
+        var tabIndex = node.getAttribute('tabindex'), isFocusable = axe.commons.dom.isFocusable(node) && tabIndex > -1;
+        if (!isFocusable) {
           return false;
         }
-        return !axe.commons.text.accessibleTextVirtual(virtualNode);
-      }
-    }, {
-      id: 'focusable-not-tabbable',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var elementsThatCanBeDisabled = [ 'BUTTON', 'FIELDSET', 'INPUT', 'SELECT', 'TEXTAREA' ];
-        var tabbableElements = virtualNode.tabbableElements;
-        if (!tabbableElements || !tabbableElements.length) {
-          return true;
-        }
-        var relatedNodes = tabbableElements.reduce(function(out, _ref4) {
-          var el = _ref4.actualNode;
-          var nodeName = el.nodeName.toUpperCase();
-          if (!elementsThatCanBeDisabled.includes(nodeName)) {
-            out.push(el);
-          }
-          return out;
-        }, []);
-        this.relatedNodes(relatedNodes);
-        return relatedNodes.length === 0;
-      }
-    }, {
-      id: 'landmark-is-top-level',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var landmarks = axe.commons.aria.getRolesByType('landmark');
-        var parent = axe.commons.dom.getComposedParent(node);
-        this.data({
-          role: node.getAttribute('role') || axe.commons.aria.implicitRole(node)
-        });
-        while (parent) {
-          var role = parent.getAttribute('role');
-          if (!role && parent.nodeName.toUpperCase() !== 'FORM') {
-            role = axe.commons.aria.implicitRole(parent);
-          }
-          if (role && landmarks.includes(role)) {
-            return false;
-          }
-          parent = axe.commons.dom.getComposedParent(parent);
-        }
-        return true;
-      }
-    }, {
-      id: 'page-has-heading-one',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        if (!options || !options.selector || typeof options.selector !== 'string') {
-          throw new TypeError('visible-in-page requires options.selector to be a string');
-        }
-        var matchingElms = axe.utils.querySelectorAll(virtualNode, options.selector);
-        this.relatedNodes(matchingElms.map(function(vNode) {
-          return vNode.actualNode;
-        }));
-        return matchingElms.length > 0;
-      },
-      after: function after(results, options) {
-        var elmUsedAnywhere = results.some(function(frameResult) {
-          return frameResult.result === true;
-        });
-        if (elmUsedAnywhere) {
-          results.forEach(function(result) {
-            result.result = true;
-          });
-        }
-        return results;
-      },
-      options: {
-        selector: 'h1:not([role]), [role="heading"][aria-level="1"]'
-      }
-    }, {
-      id: 'page-has-main',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        if (!options || !options.selector || typeof options.selector !== 'string') {
-          throw new TypeError('visible-in-page requires options.selector to be a string');
-        }
-        var matchingElms = axe.utils.querySelectorAll(virtualNode, options.selector);
-        this.relatedNodes(matchingElms.map(function(vNode) {
-          return vNode.actualNode;
-        }));
-        return matchingElms.length > 0;
-      },
-      after: function after(results, options) {
-        var elmUsedAnywhere = results.some(function(frameResult) {
-          return frameResult.result === true;
-        });
-        if (elmUsedAnywhere) {
-          results.forEach(function(result) {
-            result.result = true;
-          });
-        }
-        return results;
-      },
-      options: {
-        selector: 'main:not([role]), [role=\'main\']'
-      }
-    }, {
-      id: 'page-no-duplicate-banner',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        if (!options || !options.selector || typeof options.selector !== 'string') {
-          throw new TypeError('visible-in-page requires options.selector to be a string');
-        }
-        var elms = axe.utils.querySelectorAll(virtualNode, options.selector);
-        if (typeof options.nativeScopeFilter === 'string') {
-          elms = elms.filter(function(elm) {
-            return elm.actualNode.hasAttribute('role') || !axe.commons.dom.findUpVirtual(elm, options.nativeScopeFilter);
-          });
-        }
-        this.relatedNodes(elms.map(function(elm) {
-          return elm.actualNode;
-        }));
-        return elms.length <= 1;
-      },
-      options: {
-        selector: 'header:not([role]), [role=banner]',
-        nativeScopeFilter: 'article, aside, main, nav, section'
-      }
-    }, {
-      id: 'page-no-duplicate-contentinfo',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        if (!options || !options.selector || typeof options.selector !== 'string') {
-          throw new TypeError('visible-in-page requires options.selector to be a string');
-        }
-        var elms = axe.utils.querySelectorAll(virtualNode, options.selector);
-        if (typeof options.nativeScopeFilter === 'string') {
-          elms = elms.filter(function(elm) {
-            return elm.actualNode.hasAttribute('role') || !axe.commons.dom.findUpVirtual(elm, options.nativeScopeFilter);
-          });
-        }
-        this.relatedNodes(elms.map(function(elm) {
-          return elm.actualNode;
-        }));
-        return elms.length <= 1;
-      },
-      options: {
-        selector: 'footer:not([role]), [role=contentinfo]',
-        nativeScopeFilter: 'article, aside, main, nav, section'
-      }
-    }, {
-      id: 'page-no-duplicate-main',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        if (!options || !options.selector || typeof options.selector !== 'string') {
-          throw new TypeError('visible-in-page requires options.selector to be a string');
-        }
-        var elms = axe.utils.querySelectorAll(virtualNode, options.selector);
-        if (typeof options.nativeScopeFilter === 'string') {
-          elms = elms.filter(function(elm) {
-            return elm.actualNode.hasAttribute('role') || !axe.commons.dom.findUpVirtual(elm, options.nativeScopeFilter);
-          });
-        }
-        this.relatedNodes(elms.map(function(elm) {
-          return elm.actualNode;
-        }));
-        return elms.length <= 1;
-      },
-      options: {
-        selector: 'main:not([role]), [role=\'main\']'
+        return !axe.commons.text.accessibleText(node);
       }
     }, {
       id: 'tabindex',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return node.tabIndex <= 0;
       }
     }, {
-      id: 'alt-space-value',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var validAttrValue = /^\s+$/.test(node.getAttribute('alt'));
-        return node.hasAttribute('alt') && validAttrValue;
-      }
-    }, {
       id: 'duplicate-img-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons10 = axe.commons, aria = _axe$commons10.aria, text = _axe$commons10.text, dom = _axe$commons10.dom;
-        if ([ 'none', 'presentation' ].includes(aria.getRole(node))) {
+      evaluate: function evaluate(node, options, virtualNode) {
+        var text = axe.commons.text.visible(virtualNode, true).toLowerCase();
+        if (text === '') {
           return false;
         }
-        var parent = dom.findUpVirtual(virtualNode, 'button, [role="button"], a[href], p, li, td, th');
-        if (!parent) {
-          return false;
-        }
-        var parentVNode = axe.utils.getNodeFromTree(parent);
-        var visibleText = text.visibleVirtual(parentVNode, true).toLowerCase();
-        if (visibleText === '') {
-          return false;
-        }
-        return visibleText === text.accessibleTextVirtual(virtualNode).toLowerCase();
+        var images = axe.utils.querySelectorAll(virtualNode, 'img').filter(function(_ref) {
+          var actualNode = _ref.actualNode;
+          return axe.commons.dom.isVisible(actualNode) && ![ 'none', 'presentation' ].includes(actualNode.getAttribute('role'));
+        });
+        return images.some(function(img) {
+          return text === axe.commons.text.accessibleText(img).toLowerCase();
+        });
       }
     }, {
       id: 'explicit-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         if (node.getAttribute('id')) {
           var root = axe.commons.dom.getRootNode(node);
-          var id = axe.utils.escapeSelector(node.getAttribute('id'));
-          var label = root.querySelector('label[for="'.concat(id, '"]'));
+          var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));
+          var label = root.querySelector('label[for="' + id + '"]');
           if (label) {
-            if (!axe.commons.dom.isVisible(label)) {
-              return true;
-            } else {
-              return !!axe.commons.text.accessibleText(label);
-            }
+            return !!axe.commons.text.accessibleText(label);
           }
         }
         return false;
       }
     }, {
       id: 'help-same-as-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var labelText = axe.commons.text.labelVirtual(virtualNode), check = node.getAttribute('title');
+      evaluate: function evaluate(node, options, virtualNode) {
+        var labelText = axe.commons.text.label(virtualNode), check = node.getAttribute('title');
         if (!labelText) {
           return false;
         }
@@ -11330,149 +6495,61 @@
       },
       enabled: false
     }, {
-      id: 'hidden-explicit-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        if (node.getAttribute('id')) {
-          var root = axe.commons.dom.getRootNode(node);
-          var id = axe.utils.escapeSelector(node.getAttribute('id'));
-          var label = root.querySelector('label[for="'.concat(id, '"]'));
-          if (label && !axe.commons.dom.isVisible(label, true)) {
-            var name = axe.commons.text.accessibleTextVirtual(virtualNode).trim();
-            var isNameEmpty = name === '';
-            return isNameEmpty;
-          }
-        }
-        return false;
-      }
-    }, {
       id: 'implicit-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons11 = axe.commons, dom = _axe$commons11.dom, text = _axe$commons11.text;
-        var label = dom.findUpVirtual(virtualNode, 'label');
+      evaluate: function evaluate(node, options, virtualNode) {
+        var label = axe.commons.dom.findUp(node, 'label');
         if (label) {
-          return !!text.accessibleText(label, {
-            inControlContext: true
-          });
+          return !!axe.commons.text.accessibleText(label);
         }
         return false;
       }
     }, {
-      id: 'label-content-name-mismatch',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var text = axe.commons.text;
-        var accText = text.accessibleText(node).toLowerCase();
-        if (text.isHumanInterpretable(accText) < 1) {
-          return undefined;
-        }
-        var visibleText = text.sanitize(text.visibleVirtual(virtualNode)).toLowerCase();
-        if (text.isHumanInterpretable(visibleText) < 1) {
-          if (isStringContained(visibleText, accText)) {
-            return true;
-          }
-          return undefined;
-        }
-        return isStringContained(visibleText, accText);
-        function isStringContained(compare, compareWith) {
-          var curatedCompareWith = curateString(compareWith);
-          var curatedCompare = curateString(compare);
-          if (!curatedCompareWith || !curatedCompare) {
-            return false;
-          }
-          return curatedCompareWith.includes(curatedCompare);
-        }
-        function curateString(str) {
-          var noUnicodeStr = text.removeUnicode(str, {
-            emoji: true,
-            nonBmp: true,
-            punctuations: true
-          });
-          return text.sanitize(noUnicodeStr);
-        }
-      }
-    }, {
       id: 'multiple-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var id = axe.utils.escapeSelector(node.getAttribute('id'));
+      evaluate: function evaluate(node, options, virtualNode) {
+        var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));
+        var labels = Array.from(document.querySelectorAll('label[for="' + id + '"]'));
         var parent = node.parentNode;
-        var root = axe.commons.dom.getRootNode(node);
-        root = root.documentElement || root;
-        var labels = Array.from(root.querySelectorAll('label[for="'.concat(id, '"]')));
         if (labels.length) {
-          labels = labels.filter(function(label) {
-            return axe.commons.dom.isVisible(label);
+          labels = labels.filter(function(label, index) {
+            if (index === 0 && !axe.commons.dom.isVisible(label, true) || axe.commons.dom.isVisible(label, true)) {
+              return label;
+            }
           });
         }
         while (parent) {
-          if (parent.nodeName.toUpperCase() === 'LABEL' && labels.indexOf(parent) === -1) {
+          if (parent.tagName === 'LABEL' && labels.indexOf(parent) === -1) {
             labels.push(parent);
           }
           parent = parent.parentNode;
         }
         this.relatedNodes(labels);
-        if (labels.length > 1) {
-          var ATVisibleLabels = labels.filter(function(label) {
-            return axe.commons.dom.isVisible(label, true);
-          });
-          if (ATVisibleLabels.length > 1) {
-            return true;
-          }
-          var labelledby = axe.commons.dom.idrefs(node, 'aria-labelledby');
-          return !labelledby.includes(ATVisibleLabels[0]);
-        }
-        return false;
+        return labels.length > 1;
       }
     }, {
       id: 'title-only',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var labelText = axe.commons.text.labelVirtual(virtualNode);
+      evaluate: function evaluate(node, options, virtualNode) {
+        var labelText = axe.commons.text.label(virtualNode);
         return !labelText && !!(node.getAttribute('title') || node.getAttribute('aria-describedby'));
       }
     }, {
-      id: 'landmark-is-unique',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var role = axe.commons.aria.getRole(node);
-        var accessibleText = axe.commons.text.accessibleTextVirtual(virtualNode);
-        accessibleText = accessibleText ? accessibleText.toLowerCase() : null;
-        this.data({
-          role: role,
-          accessibleText: accessibleText
-        });
-        this.relatedNodes([ node ]);
-        return true;
-      },
-      after: function after(results, options) {
-        var uniqueLandmarks = [];
-        return results.filter(function(currentResult) {
-          var findMatch = function findMatch(someResult) {
-            return currentResult.data.role === someResult.data.role && currentResult.data.accessibleText === someResult.data.accessibleText;
-          };
-          var matchedResult = uniqueLandmarks.find(findMatch);
-          if (matchedResult) {
-            matchedResult.result = false;
-            matchedResult.relatedNodes.push(currentResult.relatedNodes[0]);
-            return false;
-          }
-          uniqueLandmarks.push(currentResult);
-          currentResult.relatedNodes = [];
-          return true;
-        });
-      }
-    }, {
       id: 'has-lang',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return !!(node.getAttribute('lang') || node.getAttribute('xml:lang') || '').trim();
       }
     }, {
       id: 'valid-lang',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
+        function getBaseLang(lang) {
+          return lang.trim().split('-')[0].toLowerCase();
+        }
         var langs, invalid;
-        langs = (options ? options : axe.utils.validLangs()).map(axe.utils.getBaseLang);
+        langs = (options ? options : axe.commons.utils.validLangs()).map(getBaseLang);
         invalid = [ 'lang', 'xml:lang' ].reduce(function(invalid, langAttr) {
           var langVal = node.getAttribute(langAttr);
           if (typeof langVal !== 'string') {
             return invalid;
           }
-          var baselangVal = axe.utils.getBaseLang(langVal);
+          var baselangVal = getBaseLang(langVal);
           if (baselangVal !== '' && langs.indexOf(baselangVal) === -1) {
             invalid.push(langAttr + '="' + node.getAttribute(langAttr) + '"');
           }
@@ -11485,146 +6562,65 @@
         return false;
       }
     }, {
-      id: 'xml-lang-mismatch',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var getBaseLang = axe.utils.getBaseLang;
-        var primaryLangValue = getBaseLang(node.getAttribute('lang'));
-        var primaryXmlLangValue = getBaseLang(node.getAttribute('xml:lang'));
-        return primaryLangValue === primaryXmlLangValue;
+      id: 'dlitem',
+      evaluate: function evaluate(node, options, virtualNode) {
+        var parent = axe.commons.dom.getComposedParent(node);
+        return parent.nodeName.toUpperCase() === 'DL';
       }
     }, {
-      id: 'dlitem',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var parent = axe.commons.dom.getComposedParent(node);
-        var parentTagName = parent.nodeName.toUpperCase();
-        var parentRole = axe.commons.aria.getRole(parent, {
-          noImplicit: true
+      id: 'has-listitem',
+      evaluate: function evaluate(node, options, virtualNode) {
+        return virtualNode.children.every(function(_ref2) {
+          var actualNode = _ref2.actualNode;
+          return actualNode.nodeName.toUpperCase() !== 'LI';
         });
-        if (parentTagName === 'DIV' && [ 'presentation', 'none', null ].includes(parentRole)) {
-          parent = axe.commons.dom.getComposedParent(parent);
-          parentTagName = parent.nodeName.toUpperCase();
-          parentRole = axe.commons.aria.getRole(parent, {
-            noImplicit: true
-          });
-        }
-        if (parentTagName !== 'DL') {
-          return false;
-        }
-        if (!parentRole || parentRole === 'list') {
-          return true;
-        }
-        return false;
       }
     }, {
       id: 'listitem',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var parent = axe.commons.dom.getComposedParent(node);
-        if (!parent) {
-          return undefined;
-        }
-        var parentTagName = parent.nodeName.toUpperCase();
-        var parentRole = (parent.getAttribute('role') || '').toLowerCase();
-        if (parentRole === 'list') {
-          return true;
-        }
-        if (parentRole && axe.commons.aria.isValidRole(parentRole)) {
-          return false;
-        }
-        return [ 'UL', 'OL' ].includes(parentTagName);
+        return [ 'UL', 'OL' ].includes(parent.nodeName.toUpperCase()) || (parent.getAttribute('role') || '').toLowerCase() === 'list';
       }
     }, {
       id: 'only-dlitems',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons12 = axe.commons, dom = _axe$commons12.dom, aria = _axe$commons12.aria;
-        var ALLOWED_ROLES = [ 'definition', 'term', 'list' ];
-        var base = {
-          badNodes: [],
-          hasNonEmptyTextNode: false
-        };
-        var content = virtualNode.children.reduce(function(content, child) {
-          var actualNode = child.actualNode;
-          if (actualNode.nodeName.toUpperCase() === 'DIV' && aria.getRole(actualNode) === null) {
-            return content.concat(child.children);
-          }
-          return content.concat(child);
-        }, []);
-        var result = content.reduce(function(out, childNode) {
-          var actualNode = childNode.actualNode;
-          var tagName = actualNode.nodeName.toUpperCase();
-          if (actualNode.nodeType === 1 && dom.isVisible(actualNode, true, false)) {
-            var explicitRole = aria.getRole(actualNode, {
-              noImplicit: true
-            });
-            if (tagName !== 'DT' && tagName !== 'DD' || explicitRole) {
-              if (!ALLOWED_ROLES.includes(explicitRole)) {
-                out.badNodes.push(actualNode);
-              }
-            }
+      evaluate: function evaluate(node, options, virtualNode) {
+        var bad = [], permitted = [ 'STYLE', 'META', 'LINK', 'MAP', 'AREA', 'SCRIPT', 'DATALIST', 'TEMPLATE' ], hasNonEmptyTextNode = false;
+        virtualNode.children.forEach(function(_ref3) {
+          var actualNode = _ref3.actualNode;
+          var nodeName = actualNode.nodeName.toUpperCase();
+          if (actualNode.nodeType === 1 && nodeName !== 'DT' && nodeName !== 'DD' && permitted.indexOf(nodeName) === -1) {
+            bad.push(actualNode);
           } else if (actualNode.nodeType === 3 && actualNode.nodeValue.trim() !== '') {
-            out.hasNonEmptyTextNode = true;
+            hasNonEmptyTextNode = true;
           }
-          return out;
-        }, base);
-        if (result.badNodes.length) {
-          this.relatedNodes(result.badNodes);
+        });
+        if (bad.length) {
+          this.relatedNodes(bad);
         }
-        return !!result.badNodes.length || result.hasNonEmptyTextNode;
+        var retVal = !!bad.length || hasNonEmptyTextNode;
+        return retVal;
       }
     }, {
       id: 'only-listitems',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var dom = axe.commons.dom;
-        var getIsListItemRole = function getIsListItemRole(role, tagName) {
-          return role === 'listitem' || tagName === 'LI' && !role;
-        };
-        var getHasListItem = function getHasListItem(hasListItem, tagName, isListItemRole) {
-          return hasListItem || tagName === 'LI' && isListItemRole || isListItemRole;
-        };
-        var base = {
-          badNodes: [],
-          isEmpty: true,
-          hasNonEmptyTextNode: false,
-          hasListItem: false,
-          liItemsWithRole: 0
-        };
-        var out = virtualNode.children.reduce(function(out, _ref5) {
-          var actualNode = _ref5.actualNode;
-          var tagName = actualNode.nodeName.toUpperCase();
-          if (actualNode.nodeType === 1 && dom.isVisible(actualNode, true, false)) {
-            var role = (actualNode.getAttribute('role') || '').toLowerCase();
-            var isListItemRole = getIsListItemRole(role, tagName);
-            out.hasListItem = getHasListItem(out.hasListItem, tagName, isListItemRole);
-            if (isListItemRole) {
-              out.isEmpty = false;
-            }
-            if (tagName === 'LI' && !isListItemRole) {
-              out.liItemsWithRole++;
-            }
-            if (tagName !== 'LI' && !isListItemRole) {
-              out.badNodes.push(actualNode);
-            }
+      evaluate: function evaluate(node, options, virtualNode) {
+        var bad = [], permitted = [ 'STYLE', 'META', 'LINK', 'MAP', 'AREA', 'SCRIPT', 'DATALIST', 'TEMPLATE' ], hasNonEmptyTextNode = false;
+        virtualNode.children.forEach(function(_ref4) {
+          var actualNode = _ref4.actualNode;
+          var nodeName = actualNode.nodeName.toUpperCase();
+          if (actualNode.nodeType === 1 && nodeName !== 'LI' && permitted.indexOf(nodeName) === -1) {
+            bad.push(actualNode);
+          } else if (actualNode.nodeType === 3 && actualNode.nodeValue.trim() !== '') {
+            hasNonEmptyTextNode = true;
           }
-          if (actualNode.nodeType === 3) {
-            if (actualNode.nodeValue.trim() !== '') {
-              out.hasNonEmptyTextNode = true;
-            }
-          }
-          return out;
-        }, base);
-        var virtualNodeChildrenOfTypeLi = virtualNode.children.filter(function(_ref6) {
-          var actualNode = _ref6.actualNode;
-          return actualNode.nodeName.toUpperCase() === 'LI';
         });
-        var allLiItemsHaveRole = out.liItemsWithRole > 0 && virtualNodeChildrenOfTypeLi.length === out.liItemsWithRole;
-        if (out.badNodes.length) {
-          this.relatedNodes(out.badNodes);
+        if (bad.length) {
+          this.relatedNodes(bad);
         }
-        var isInvalidListItem = !(out.hasListItem || out.isEmpty && !allLiItemsHaveRole);
-        return isInvalidListItem || !!out.badNodes.length || out.hasNonEmptyTextNode;
+        return !!bad.length || hasNonEmptyTextNode;
       }
     }, {
       id: 'structured-dlitems',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var children = virtualNode.children;
         if (!children || !children.length) {
           return false;
@@ -11646,128 +6642,35 @@
       }
     }, {
       id: 'caption',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var tracks = axe.utils.querySelectorAll(virtualNode, 'track');
-        var hasCaptions = tracks.some(function(_ref7) {
-          var actualNode = _ref7.actualNode;
-          return (actualNode.getAttribute('kind') || '').toLowerCase() === 'captions';
-        });
-        return hasCaptions ? false : undefined;
+        if (tracks.length) {
+          return !tracks.some(function(_ref5) {
+            var actualNode = _ref5.actualNode;
+            return (actualNode.getAttribute('kind') || '').toLowerCase() === 'captions';
+          });
+        }
+        return undefined;
       }
     }, {
       id: 'description',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var tracks = axe.utils.querySelectorAll(virtualNode, 'track');
-        var hasDescriptions = tracks.some(function(_ref8) {
-          var actualNode = _ref8.actualNode;
-          return (actualNode.getAttribute('kind') || '').toLowerCase() === 'descriptions';
-        });
-        return hasDescriptions ? false : undefined;
-      }
-    }, {
-      id: 'frame-tested',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var resolve = this.async();
-        var _Object$assign = Object.assign({
-          isViolation: false,
-          timeout: 500
-        }, options), isViolation = _Object$assign.isViolation, timeout = _Object$assign.timeout;
-        var timer = setTimeout(function() {
-          timer = setTimeout(function() {
-            timer = null;
-            resolve(isViolation ? false : undefined);
-          }, 0);
-        }, timeout);
-        axe.utils.respondable(node.contentWindow, 'axe.ping', null, undefined, function() {
-          if (timer !== null) {
-            clearTimeout(timer);
-            resolve(true);
-          }
-        });
-      },
-      options: {
-        isViolation: false
-      }
-    }, {
-      id: 'css-orientation-lock',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _ref9 = context || {}, _ref9$cssom = _ref9.cssom, cssom = _ref9$cssom === void 0 ? undefined : _ref9$cssom;
-        if (!cssom || !cssom.length) {
-          return undefined;
-        }
-        var rulesGroupByDocumentFragment = cssom.reduce(function(out, _ref10) {
-          var sheet = _ref10.sheet, root = _ref10.root, shadowId = _ref10.shadowId;
-          var key = shadowId ? shadowId : 'topDocument';
-          if (!out[key]) {
-            out[key] = {
-              root: root,
-              rules: []
-            };
-          }
-          if (!sheet || !sheet.cssRules) {
-            return out;
-          }
-          var rules = Array.from(sheet.cssRules);
-          out[key].rules = out[key].rules.concat(rules);
+        if (tracks.length) {
+          var out = !tracks.some(function(_ref6) {
+            var actualNode = _ref6.actualNode;
+            return (actualNode.getAttribute('kind') || '').toLowerCase() === 'descriptions';
+          });
+          axe.log(tracks.map(function(t) {
+            return t.actualNode.getAttribute('kind');
+          }), out);
           return out;
-        }, {});
-        var isLocked = false;
-        var relatedElements = [];
-        Object.keys(rulesGroupByDocumentFragment).forEach(function(key) {
-          var _rulesGroupByDocument = rulesGroupByDocumentFragment[key], root = _rulesGroupByDocument.root, rules = _rulesGroupByDocument.rules;
-          var mediaRules = rules.filter(function(r) {
-            return r.type === 4;
-          });
-          if (!mediaRules || !mediaRules.length) {
-            return;
-          }
-          var orientationRules = mediaRules.filter(function(r) {
-            var cssText = r.cssText;
-            return /orientation:\s*landscape/i.test(cssText) || /orientation:\s*portrait/i.test(cssText);
-          });
-          if (!orientationRules || !orientationRules.length) {
-            return;
-          }
-          orientationRules.forEach(function(r) {
-            if (!r.cssRules.length) {
-              return;
-            }
-            Array.from(r.cssRules).forEach(function(cssRule) {
-              if (!cssRule.selectorText) {
-                return;
-              }
-              if (cssRule.style.length <= 0) {
-                return;
-              }
-              var transformStyleValue = cssRule.style.transform || cssRule.style.webkitTransform || cssRule.style.msTransform || false;
-              if (!transformStyleValue) {
-                return;
-              }
-              var rotate = transformStyleValue.match(/rotate\(([^)]+)deg\)/);
-              var deg = parseInt(rotate && rotate[1] || 0);
-              var locked = deg % 90 === 0 && deg % 180 !== 0;
-              if (locked && cssRule.selectorText.toUpperCase() !== 'HTML') {
-                var selector = cssRule.selectorText;
-                var elms = Array.from(root.querySelectorAll(selector));
-                if (elms && elms.length) {
-                  relatedElements = relatedElements.concat(elms);
-                }
-              }
-              isLocked = locked;
-            });
-          });
-        });
-        if (!isLocked) {
-          return true;
         }
-        if (relatedElements.length) {
-          this.relatedNodes(relatedElements);
-        }
-        return false;
+        return undefined;
       }
     }, {
       id: 'meta-viewport-large',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         options = options || {};
         var params, content = node.getAttribute('content') || '', parsedParams = content.split(/[;,]/), result = {}, minimum = options.scaleMinimum || 2, lowerBound = options.lowerBound || false;
         for (var i = 0, l = parsedParams.length; i < l; i++) {
@@ -11781,11 +6684,9 @@
           return true;
         }
         if (!lowerBound && result['user-scalable'] === 'no') {
-          this.data('user-scalable=no');
           return false;
         }
         if (result['maximum-scale'] && parseFloat(result['maximum-scale']) < minimum) {
-          this.data('maximum-scale');
           return false;
         }
         return true;
@@ -11796,7 +6697,7 @@
       }
     }, {
       id: 'meta-viewport',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         options = options || {};
         var params, content = node.getAttribute('content') || '', parsedParams = content.split(/[;,]/), result = {}, minimum = options.scaleMinimum || 2, lowerBound = options.lowerBound || false;
         for (var i = 0, l = parsedParams.length; i < l; i++) {
@@ -11810,11 +6711,9 @@
           return true;
         }
         if (!lowerBound && result['user-scalable'] === 'no') {
-          this.data('user-scalable=no');
           return false;
         }
         if (result['maximum-scale'] && parseFloat(result['maximum-scale']) < minimum) {
-          this.data('maximum-scale');
           return false;
         }
         return true;
@@ -11824,18 +6723,18 @@
       }
     }, {
       id: 'header-present',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        return !!axe.utils.querySelectorAll(virtualNode, 'h1, h2, h3, h4, h5, h6, [role="heading"]')[0];
+      evaluate: function evaluate(node, options, virtualNode) {
+        return !!node.querySelector('h1, h2, h3, h4, h5, h6, [role="heading"]');
       }
     }, {
       id: 'heading-order',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var ariaHeadingLevel = node.getAttribute('aria-level');
         if (ariaHeadingLevel !== null) {
           this.data(parseInt(ariaHeadingLevel, 10));
           return true;
         }
-        var headingLevel = node.nodeName.toUpperCase().match(/H(\d)/);
+        var headingLevel = node.tagName.match(/H(\d)/);
         if (headingLevel) {
           this.data(parseInt(headingLevel[1], 10));
           return true;
@@ -11856,27 +6755,33 @@
         return results;
       }
     }, {
+      id: 'href-no-hash',
+      evaluate: function evaluate(node, options, virtualNode) {
+        var href = node.getAttribute('href');
+        if (href === '#') {
+          return false;
+        }
+        return true;
+      }
+    }, {
       id: 'internal-link-present',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var links = axe.utils.querySelectorAll(virtualNode, 'a[href]');
-        return links.some(function(vLink) {
-          return /^#[^/!]/.test(vLink.actualNode.getAttribute('href'));
-        });
+      evaluate: function evaluate(node, options, virtualNode) {
+        return !!node.querySelector('a[href^="#"]');
       }
     }, {
       id: 'landmark',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return axe.utils.querySelectorAll(virtualNode, 'main, [role="main"]').length > 0;
       }
     }, {
       id: 'meta-refresh',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var content = node.getAttribute('content') || '', parsedParams = content.split(/[;,]/);
         return content === '' || parsedParams[0] === '0';
       }
     }, {
       id: 'p-as-heading',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var siblings = Array.from(node.parentNode.children);
         var currentIndex = siblings.indexOf(node);
         options = options || {};
@@ -11941,7 +6846,7 @@
         if (!nextStyle || !isHeaderStyle(currStyle, nextStyle, margins)) {
           return true;
         }
-        var blockquote = axe.commons.dom.findUpVirtual(virtualNode, 'blockquote');
+        var blockquote = axe.commons.dom.findUp(node, 'blockquote');
         if (blockquote && blockquote.nodeName.toUpperCase() === 'BLOCKQUOTE') {
           return undefined;
         }
@@ -11966,45 +6871,42 @@
       }
     }, {
       id: 'region',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons13 = axe.commons, dom = _axe$commons13.dom, aria = _axe$commons13.aria;
+      evaluate: function evaluate(node, options, virtualNode) {
+        var _axe$commons2 = axe.commons, dom = _axe$commons2.dom, aria = _axe$commons2.aria;
+        function getSkiplink(virtualNode) {
+          var firstLink = axe.utils.querySelectorAll(virtualNode, 'a[href]')[0];
+          if (firstLink && axe.commons.dom.getElementByReference(firstLink.actualNode, 'href')) {
+            return firstLink.actualNode;
+          }
+        }
+        var skipLink = getSkiplink(virtualNode);
         var landmarkRoles = aria.getRolesByType('landmark');
         var implicitLandmarks = landmarkRoles.reduce(function(arr, role) {
           return arr.concat(aria.implicitNodes(role));
         }, []).filter(function(r) {
           return r !== null;
+        }).map(function(r) {
+          return r.toUpperCase();
         });
-        function isRegion(virtualNode) {
-          var node = virtualNode.actualNode;
-          var explicitRole = axe.commons.aria.getRole(node, {
-            noImplicit: true
-          });
-          var ariaLive = (node.getAttribute('aria-live') || '').toLowerCase().trim();
-          if (explicitRole) {
-            return explicitRole === 'dialog' || landmarkRoles.includes(explicitRole);
+        function isSkipLink(node) {
+          return skipLink && skipLink === node;
+        }
+        function isLandmark(node) {
+          if (node.hasAttribute('role')) {
+            return landmarkRoles.includes(node.getAttribute('role').toLowerCase());
+          } else {
+            return implicitLandmarks.includes(node.nodeName.toUpperCase());
           }
-          if ([ 'assertive', 'polite' ].includes(ariaLive)) {
-            return true;
-          }
-          return implicitLandmarks.some(function(implicitSelector) {
-            var matches = axe.utils.matchesSelector(node, implicitSelector);
-            if (node.nodeName.toUpperCase() === 'FORM') {
-              var titleAttr = node.getAttribute('title');
-              var title = titleAttr && titleAttr.trim() !== '' ? axe.commons.text.sanitize(titleAttr) : null;
-              return matches && (!!aria.labelVirtual(virtualNode) || !!title);
-            }
-            return matches;
-          });
         }
         function findRegionlessElms(virtualNode) {
           var node = virtualNode.actualNode;
-          if (isRegion(virtualNode) || dom.isSkipLink(virtualNode.actualNode) && dom.getElementByReference(virtualNode.actualNode, 'href') || !dom.isVisible(node, true)) {
+          if (isLandmark(node) || isSkipLink(node) || !dom.isVisible(node, true)) {
             return [];
           } else if (dom.hasContent(node, true)) {
             return [ node ];
           } else {
-            return virtualNode.children.filter(function(_ref11) {
-              var actualNode = _ref11.actualNode;
+            return virtualNode.children.filter(function(_ref7) {
+              var actualNode = _ref7.actualNode;
               return actualNode.nodeType === 1;
             }).map(findRegionlessElms).reduce(function(a, b) {
               return a.concat(b);
@@ -12020,16 +6922,15 @@
       }
     }, {
       id: 'skip-link',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var target = axe.commons.dom.getElementByReference(node, 'href');
-        if (target) {
-          return axe.commons.dom.isVisible(target, true) || undefined;
-        }
-        return false;
+      evaluate: function evaluate(node, options, virtualNode) {
+        return axe.commons.dom.isFocusable(axe.commons.dom.getElementByReference(node, 'href'));
+      },
+      after: function after(results, options) {
+        return [ results[0] ];
       }
     }, {
       id: 'unique-frame-title',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var title = axe.commons.text.sanitize(node.title).trim().toLowerCase();
         this.data(title);
         return true;
@@ -12045,121 +6946,27 @@
         return results;
       }
     }, {
-      id: 'duplicate-id-active',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var id = node.getAttribute('id').trim();
-        if (!id) {
-          return true;
-        }
-        var root = axe.commons.dom.getRootNode(node);
-        var matchingNodes = Array.from(root.querySelectorAll('[id="'.concat(axe.utils.escapeSelector(id), '"]'))).filter(function(foundNode) {
-          return foundNode !== node;
-        });
-        if (matchingNodes.length) {
-          this.relatedNodes(matchingNodes);
-        }
-        this.data(id);
-        return matchingNodes.length === 0;
-      },
-      after: function after(results, options) {
-        var uniqueIds = [];
-        return results.filter(function(r) {
-          if (uniqueIds.indexOf(r.data) === -1) {
-            uniqueIds.push(r.data);
-            return true;
-          }
-          return false;
-        });
-      }
-    }, {
-      id: 'duplicate-id-aria',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var id = node.getAttribute('id').trim();
-        if (!id) {
-          return true;
-        }
-        var root = axe.commons.dom.getRootNode(node);
-        var matchingNodes = Array.from(root.querySelectorAll('[id="'.concat(axe.utils.escapeSelector(id), '"]'))).filter(function(foundNode) {
-          return foundNode !== node;
-        });
-        if (matchingNodes.length) {
-          this.relatedNodes(matchingNodes);
-        }
-        this.data(id);
-        return matchingNodes.length === 0;
-      },
-      after: function after(results, options) {
-        var uniqueIds = [];
-        return results.filter(function(r) {
-          if (uniqueIds.indexOf(r.data) === -1) {
-            uniqueIds.push(r.data);
-            return true;
-          }
-          return false;
-        });
-      }
-    }, {
-      id: 'duplicate-id',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var id = node.getAttribute('id').trim();
-        if (!id) {
-          return true;
-        }
-        var root = axe.commons.dom.getRootNode(node);
-        var matchingNodes = Array.from(root.querySelectorAll('[id="'.concat(axe.utils.escapeSelector(id), '"]'))).filter(function(foundNode) {
-          return foundNode !== node;
-        });
-        if (matchingNodes.length) {
-          this.relatedNodes(matchingNodes);
-        }
-        this.data(id);
-        return matchingNodes.length === 0;
-      },
-      after: function after(results, options) {
-        var uniqueIds = [];
-        return results.filter(function(r) {
-          if (uniqueIds.indexOf(r.data) === -1) {
-            uniqueIds.push(r.data);
-            return true;
-          }
-          return false;
-        });
-      }
-    }, {
       id: 'aria-label',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons14 = axe.commons, text = _axe$commons14.text, aria = _axe$commons14.aria;
-        return !!text.sanitize(aria.arialabelText(node));
+      evaluate: function evaluate(node, options, virtualNode) {
+        var label = node.getAttribute('aria-label');
+        return !!(label ? axe.commons.text.sanitize(label).trim() : '');
       }
     }, {
       id: 'aria-labelledby',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var _axe$commons15 = axe.commons, text = _axe$commons15.text, aria = _axe$commons15.aria;
-        return !!text.sanitize(aria.arialabelledbyText(node));
-      }
-    }, {
-      id: 'avoid-inline-spacing',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var inlineSpacingCssProperties = [ 'line-height', 'letter-spacing', 'word-spacing' ];
-        var overriddenProperties = inlineSpacingCssProperties.filter(function(property) {
-          if (node.style.getPropertyPriority(property) === 'important') {
-            return property;
-          }
+      evaluate: function evaluate(node, options, virtualNode) {
+        var getIdRefs = axe.commons.dom.idrefs;
+        return getIdRefs(node, 'aria-labelledby').some(function(elm) {
+          return elm && axe.commons.text.accessibleText(elm, true);
         });
-        if (overriddenProperties.length > 0) {
-          this.data(overriddenProperties);
-          return false;
-        }
-        return true;
       }
     }, {
       id: 'button-has-visible-text',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var nodeName = node.nodeName.toUpperCase();
         var role = node.getAttribute('role');
-        var label;
+        var label = void 0;
         if (nodeName === 'BUTTON' || role === 'button' && nodeName !== 'INPUT') {
-          label = axe.commons.text.accessibleTextVirtual(virtualNode);
+          label = axe.commons.text.accessibleText(node);
           this.data(label);
           return !!label;
         } else {
@@ -12168,74 +6975,104 @@
       }
     }, {
       id: 'doc-has-title',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var title = document.title;
         return !!(title ? axe.commons.text.sanitize(title).trim() : '');
       }
     }, {
+      id: 'duplicate-id',
+      evaluate: function evaluate(node, options, virtualNode) {
+        if (!node.getAttribute('id').trim()) {
+          return true;
+        }
+        var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));
+        var matchingNodes = document.querySelectorAll('[id="' + id + '"]');
+        var related = [];
+        for (var i = 0; i < matchingNodes.length; i++) {
+          if (matchingNodes[i] !== node) {
+            related.push(matchingNodes[i]);
+          }
+        }
+        if (related.length) {
+          this.relatedNodes(related);
+        }
+        this.data(node.getAttribute('id'));
+        return matchingNodes.length <= 1;
+      },
+      after: function after(results, options) {
+        var uniqueIds = [];
+        return results.filter(function(r) {
+          if (uniqueIds.indexOf(r.data) === -1) {
+            uniqueIds.push(r.data);
+            return true;
+          }
+          return false;
+        });
+      }
+    }, {
       id: 'exists',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return true;
       }
     }, {
       id: 'has-alt',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var nn = node.nodeName.toLowerCase();
         return node.hasAttribute('alt') && (nn === 'img' || nn === 'input' || nn === 'area');
       }
     }, {
       id: 'has-visible-text',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        return axe.commons.text.accessibleTextVirtual(virtualNode).length > 0;
+      evaluate: function evaluate(node, options, virtualNode) {
+        return axe.commons.text.accessibleText(node).length > 0;
       }
     }, {
       id: 'is-on-screen',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return axe.commons.dom.isVisible(node, false) && !axe.commons.dom.isOffscreen(node);
       }
     }, {
       id: 'non-empty-alt',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var label = node.getAttribute('alt');
         return !!(label ? axe.commons.text.sanitize(label).trim() : '');
       }
     }, {
       id: 'non-empty-if-present',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var nodeName = node.nodeName.toUpperCase();
         var type = (node.getAttribute('type') || '').toLowerCase();
         var label = node.getAttribute('value');
         this.data(label);
-        if (nodeName === 'INPUT' && [ 'submit', 'reset' ].includes(type)) {
+        if (nodeName === 'INPUT' && [ 'submit', 'reset' ].indexOf(type) !== -1) {
           return label === null;
         }
         return false;
       }
     }, {
       id: 'non-empty-title',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        var text = axe.commons.text;
-        return !!text.sanitize(text.titleText(node));
+      evaluate: function evaluate(node, options, virtualNode) {
+        var title = node.getAttribute('title');
+        return !!(title ? axe.commons.text.sanitize(title).trim() : '');
       }
     }, {
       id: 'non-empty-value',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var label = node.getAttribute('value');
         return !!(label ? axe.commons.text.sanitize(label).trim() : '');
       }
     }, {
       id: 'role-none',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return node.getAttribute('role') === 'none';
       }
     }, {
       id: 'role-presentation',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return node.getAttribute('role') === 'presentation';
       }
     }, {
       id: 'caption-faked',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var table = axe.commons.table.toGrid(node);
         var firstRow = table[0];
         if (table.length <= 1 || firstRow.length <= 1 || node.rows.length <= 1) {
@@ -12247,17 +7084,17 @@
       }
     }, {
       id: 'has-caption',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return !!node.caption;
       }
     }, {
       id: 'has-summary',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         return !!node.summary;
       }
     }, {
       id: 'has-th',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var row, cell, badCells = [];
         for (var rowIndex = 0, rowLength = node.rows.length; rowIndex < rowLength; rowIndex++) {
           row = node.rows[rowIndex];
@@ -12276,7 +7113,7 @@
       }
     }, {
       id: 'html5-scope',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         if (!axe.commons.dom.isHTML5(document)) {
           return true;
         }
@@ -12284,12 +7121,12 @@
       }
     }, {
       id: 'same-caption-summary',
-      evaluate: function evaluate(node, options, virtualNode, context) {
-        return !!(node.summary && node.caption) && node.summary.toLowerCase() === axe.commons.text.accessibleText(node.caption).toLowerCase();
+      evaluate: function evaluate(node, options, virtualNode) {
+        return !!(node.summary && node.caption) && node.summary === axe.commons.text.accessibleText(node.caption);
       }
     }, {
       id: 'scope-value',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         options = options || {};
         var value = node.getAttribute('scope').toLowerCase();
         var validVals = [ 'row', 'col', 'rowgroup', 'colgroup' ] || options.values;
@@ -12297,15 +7134,16 @@
       }
     }, {
       id: 'td-has-header',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var tableUtils = axe.commons.table;
         var badCells = [];
         var cells = tableUtils.getAllCells(node);
         cells.forEach(function(cell) {
           if (axe.commons.dom.hasContent(cell) && tableUtils.isDataCell(cell) && !axe.commons.aria.label(cell)) {
-            var hasHeaders = tableUtils.getHeaders(cell).some(function(header) {
-              return header !== null && !!axe.commons.dom.hasContent(header);
-            });
+            var hasHeaders = tableUtils.getHeaders(cell);
+            hasHeaders = hasHeaders.reduce(function(hasHeaders, header) {
+              return hasHeaders || header !== null && !!axe.commons.dom.hasContent(header);
+            }, false);
             if (!hasHeaders) {
               badCells.push(cell);
             }
@@ -12319,7 +7157,7 @@
       }
     }, {
       id: 'td-headers-attr',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var cells = [];
         for (var rowIndex = 0, rowLength = node.rows.length; rowIndex < rowLength; rowIndex++) {
           var row = node.rows[rowIndex];
@@ -12364,7 +7202,7 @@
       }
     }, {
       id: 'th-has-data-cells',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var tableUtils = axe.commons.table;
         var cells = tableUtils.getAllCells(node);
         var checkResult = this;
@@ -12386,35 +7224,34 @@
           return cell.nodeName.toUpperCase() === 'TH' || [ 'rowheader', 'columnheader' ].indexOf(cell.getAttribute('role')) !== -1;
         });
         var tableGrid = tableUtils.toGrid(node);
-        var out = true;
-        headers.forEach(function(header) {
+        var out = headers.reduce(function(res, header) {
           if (header.getAttribute('id') && reffedHeaders.includes(header.getAttribute('id'))) {
-            return;
+            return !res ? res : true;
           }
-          var pos = tableUtils.getCellPosition(header, tableGrid);
           var hasCell = false;
+          var pos = tableUtils.getCellPosition(header, tableGrid);
           if (tableUtils.isColumnHeader(header)) {
-            hasCell = tableUtils.traverse('down', pos, tableGrid).find(function(cell) {
-              return !tableUtils.isColumnHeader(cell);
-            });
+            hasCell = tableUtils.traverse('down', pos, tableGrid).reduce(function(out, cell) {
+              return out || axe.commons.dom.hasContent(cell) && !tableUtils.isColumnHeader(cell);
+            }, false);
           }
           if (!hasCell && tableUtils.isRowHeader(header)) {
-            hasCell = tableUtils.traverse('right', pos, tableGrid).find(function(cell) {
-              return !tableUtils.isRowHeader(cell);
-            });
+            hasCell = tableUtils.traverse('right', pos, tableGrid).reduce(function(out, cell) {
+              return out || axe.commons.dom.hasContent(cell) && !tableUtils.isRowHeader(cell);
+            }, false);
           }
           if (!hasCell) {
             checkResult.relatedNodes(header);
           }
-          out = out && hasCell;
-        });
+          return res && hasCell;
+        }, true);
         return out ? true : undefined;
       }
     }, {
       id: 'hidden-content',
-      evaluate: function evaluate(node, options, virtualNode, context) {
+      evaluate: function evaluate(node, options, virtualNode) {
         var whitelist = [ 'SCRIPT', 'HEAD', 'TITLE', 'NOSCRIPT', 'STYLE', 'TEMPLATE' ];
-        if (!whitelist.includes(node.nodeName.toUpperCase()) && axe.commons.dom.hasContentVirtual(virtualNode)) {
+        if (!whitelist.includes(node.tagName.toUpperCase()) && axe.commons.dom.hasContent(virtualNode)) {
           var styles = window.getComputedStyle(node);
           if (styles.getPropertyValue('display') === 'none') {
             return undefined;
@@ -12431,2040 +7268,946 @@
     } ],
     commons: function() {
       var commons = {};
-      var aria = commons.aria = {};
-      var lookupTable = aria.lookupTable = {};
-      var isNull = function isNull(value) {
-        return value === null;
-      };
-      var isNotNull = function isNotNull(value) {
-        return value !== null;
-      };
-      lookupTable.attributes = {
+      var aria = commons.aria = {}, lookupTables = aria._lut = {};
+      lookupTables.attributes = {
         'aria-activedescendant': {
-          type: 'idref',
-          allowEmpty: true,
-          unsupported: false
+          type: 'idref'
         },
         'aria-atomic': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'true', 'false' ]
         },
         'aria-autocomplete': {
           type: 'nmtoken',
-          values: [ 'inline', 'list', 'both', 'none' ],
-          unsupported: false
+          values: [ 'inline', 'list', 'both', 'none' ]
         },
         'aria-busy': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'true', 'false' ]
         },
         'aria-checked': {
           type: 'nmtoken',
-          values: [ 'true', 'false', 'mixed', 'undefined' ],
-          unsupported: false
+          values: [ 'true', 'false', 'mixed', 'undefined' ]
         },
         'aria-colcount': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-colindex': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-colspan': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-controls': {
-          type: 'idrefs',
-          allowEmpty: true,
-          unsupported: false
+          type: 'idrefs'
         },
         'aria-current': {
           type: 'nmtoken',
-          allowEmpty: true,
-          values: [ 'page', 'step', 'location', 'date', 'time', 'true', 'false' ],
-          unsupported: false
+          values: [ 'page', 'step', 'location', 'date', 'time', 'true', 'false' ]
         },
         'aria-describedby': {
-          type: 'idrefs',
-          allowEmpty: true,
-          unsupported: false
-        },
-        'aria-describedat': {
-          unsupported: true,
-          unstandardized: true
-        },
-        'aria-details': {
-          unsupported: true
+          type: 'idrefs'
         },
         'aria-disabled': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'true', 'false' ]
         },
         'aria-dropeffect': {
           type: 'nmtokens',
-          values: [ 'copy', 'move', 'reference', 'execute', 'popup', 'none' ],
-          unsupported: false
-        },
-        'aria-errormessage': {
-          type: 'idref',
-          allowEmpty: true,
-          unsupported: false
+          values: [ 'copy', 'move', 'reference', 'execute', 'popup', 'none' ]
         },
         'aria-expanded': {
           type: 'nmtoken',
-          values: [ 'true', 'false', 'undefined' ],
-          unsupported: false
+          values: [ 'true', 'false', 'undefined' ]
         },
         'aria-flowto': {
-          type: 'idrefs',
-          allowEmpty: true,
-          unsupported: false
+          type: 'idrefs'
         },
         'aria-grabbed': {
           type: 'nmtoken',
-          values: [ 'true', 'false', 'undefined' ],
-          unsupported: false
+          values: [ 'true', 'false', 'undefined' ]
         },
         'aria-haspopup': {
-          type: 'nmtoken',
-          allowEmpty: true,
-          values: [ 'true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog' ],
-          unsupported: false
+          type: 'boolean',
+          values: [ 'true', 'false' ]
         },
         'aria-hidden': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'true', 'false' ]
         },
         'aria-invalid': {
           type: 'nmtoken',
-          allowEmpty: true,
-          values: [ 'true', 'false', 'spelling', 'grammar' ],
-          unsupported: false
-        },
-        'aria-keyshortcuts': {
-          type: 'string',
-          allowEmpty: true,
-          unsupported: false
+          values: [ 'true', 'false', 'spelling', 'grammar' ]
         },
         'aria-label': {
-          type: 'string',
-          allowEmpty: true,
-          unsupported: false
+          type: 'string'
         },
         'aria-labelledby': {
-          type: 'idrefs',
-          allowEmpty: true,
-          unsupported: false
+          type: 'idrefs'
         },
         'aria-level': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-live': {
           type: 'nmtoken',
-          values: [ 'off', 'polite', 'assertive' ],
-          unsupported: false
-        },
-        'aria-modal': {
-          type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'off', 'polite', 'assertive' ]
         },
         'aria-multiline': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'true', 'false' ]
         },
         'aria-multiselectable': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'true', 'false' ]
         },
         'aria-orientation': {
           type: 'nmtoken',
-          values: [ 'horizontal', 'vertical' ],
-          unsupported: false
+          values: [ 'horizontal', 'vertical' ]
         },
         'aria-owns': {
-          type: 'idrefs',
-          allowEmpty: true,
-          unsupported: false
-        },
-        'aria-placeholder': {
-          type: 'string',
-          allowEmpty: true,
-          unsupported: false
+          type: 'idrefs'
         },
         'aria-posinset': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-pressed': {
           type: 'nmtoken',
-          values: [ 'true', 'false', 'mixed', 'undefined' ],
-          unsupported: false
+          values: [ 'true', 'false', 'mixed', 'undefined' ]
         },
         'aria-readonly': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
+          values: [ 'true', 'false' ]
         },
         'aria-relevant': {
           type: 'nmtokens',
-          values: [ 'additions', 'removals', 'text', 'all' ],
-          unsupported: false
+          values: [ 'additions', 'removals', 'text', 'all' ]
         },
         'aria-required': {
           type: 'boolean',
-          values: [ 'true', 'false' ],
-          unsupported: false
-        },
-        'aria-roledescription': {
-          type: 'string',
-          allowEmpty: true,
-          unsupported: {
-            exceptions: [ 'button', {
-              nodeName: 'input',
-              properties: {
-                type: [ 'button', 'checkbox', 'image', 'radio', 'reset', 'submit' ]
-              }
-            }, 'img', 'select', 'summary' ]
-          }
+          values: [ 'true', 'false' ]
         },
         'aria-rowcount': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-rowindex': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-rowspan': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-selected': {
           type: 'nmtoken',
-          values: [ 'true', 'false', 'undefined' ],
-          unsupported: false
+          values: [ 'true', 'false', 'undefined' ]
         },
         'aria-setsize': {
-          type: 'int',
-          unsupported: false
+          type: 'int'
         },
         'aria-sort': {
           type: 'nmtoken',
-          values: [ 'ascending', 'descending', 'other', 'none' ],
-          unsupported: false
+          values: [ 'ascending', 'descending', 'other', 'none' ]
         },
         'aria-valuemax': {
-          type: 'decimal',
-          unsupported: false
+          type: 'decimal'
         },
         'aria-valuemin': {
-          type: 'decimal',
-          unsupported: false
+          type: 'decimal'
         },
         'aria-valuenow': {
-          type: 'decimal',
-          unsupported: false
+          type: 'decimal'
         },
         'aria-valuetext': {
-          type: 'string',
-          unsupported: false
+          type: 'string'
         }
       };
-      lookupTable.globalAttributes = [ 'aria-atomic', 'aria-busy', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-disabled', 'aria-dropeffect', 'aria-flowto', 'aria-grabbed', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-live', 'aria-owns', 'aria-relevant', 'aria-roledescription' ];
-      lookupTable.role = {
+      lookupTables.globalAttributes = [ 'aria-atomic', 'aria-busy', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-disabled', 'aria-dropeffect', 'aria-flowto', 'aria-grabbed', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-label', 'aria-labelledby', 'aria-live', 'aria-owns', 'aria-relevant' ];
+      lookupTables.role = {
         alert: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          context: null
         },
         alertdialog: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-modal', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'dialog', 'section' ]
+          context: null
         },
         application: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'article', 'audio', 'embed', 'iframe', 'object', 'section', 'svg', 'video' ]
+          context: null
         },
         article: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'article' ],
-          unsupported: false
+          implicit: [ 'article' ]
         },
         banner: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'header' ],
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          implicit: [ 'header' ]
         },
         button: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-pressed', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded', 'aria-pressed' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: null,
-          implicit: [ 'button', 'input[type="button"]', 'input[type="image"]', 'input[type="reset"]', 'input[type="submit"]', 'summary' ],
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          implicit: [ 'button', 'input[type="button"]', 'input[type="image"]', 'input[type="reset"]', 'input[type="submit"]', 'summary' ]
         },
         cell: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-colindex', 'aria-colspan', 'aria-rowindex', 'aria-rowspan', 'aria-errormessage' ]
+            allowed: [ 'aria-colindex', 'aria-colspan', 'aria-rowindex', 'aria-rowspan' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'row' ],
-          implicit: [ 'td', 'th' ],
-          unsupported: false
+          implicit: [ 'td', 'th' ]
         },
         checkbox: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-checked', 'aria-required', 'aria-readonly', 'aria-errormessage' ]
+            required: [ 'aria-checked' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: null,
-          implicit: [ 'input[type="checkbox"]' ],
-          unsupported: false,
-          allowedElements: [ 'button' ]
+          implicit: [ 'input[type="checkbox"]' ]
         },
         columnheader: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-rowindex', 'aria-rowspan', 'aria-required', 'aria-readonly', 'aria-selected', 'aria-sort', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded', 'aria-sort', 'aria-readonly', 'aria-selected', 'aria-required' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'row' ],
-          implicit: [ 'th' ],
-          unsupported: false
+          implicit: [ 'th' ]
         },
         combobox: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-autocomplete', 'aria-required', 'aria-activedescendant', 'aria-orientation', 'aria-errormessage' ],
-            required: [ 'aria-expanded' ]
+            required: [ 'aria-expanded' ],
+            allowed: [ 'aria-autocomplete', 'aria-required', 'aria-activedescendant' ]
           },
           owned: {
             all: [ 'listbox', 'textbox' ]
           },
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: 'input',
-            properties: {
-              type: 'text'
-            }
-          } ]
+          context: null
         },
         command: {
           nameFrom: [ 'author' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         complementary: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'aside' ],
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          implicit: [ 'aside' ]
         },
         composite: {
           nameFrom: [ 'author' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         contentinfo: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'footer' ],
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          implicit: [ 'footer' ]
         },
         definition: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'dd', 'dfn' ],
-          unsupported: false
+          implicit: [ 'dd' ]
         },
         dialog: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-modal', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'dialog' ],
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          implicit: [ 'dialog' ]
         },
         directory: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'ol', 'ul' ]
+          context: null
         },
         document: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'body' ],
-          unsupported: false,
-          allowedElements: [ 'article', 'embed', 'iframe', 'object', 'section', 'svg' ]
-        },
-        'doc-abstract': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-acknowledgments': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-afterword': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-appendix': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-backlink': {
-          type: 'link',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          nameFrom: [ 'author', 'contents' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
-        },
-        'doc-biblioentry': {
-          type: 'listitem',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]
-          },
-          owned: null,
-          nameFrom: [ 'author' ],
-          context: [ 'doc-bibliography' ],
-          unsupported: false,
-          allowedElements: [ 'li' ]
-        },
-        'doc-bibliography': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: {
-            one: [ 'doc-biblioentry' ]
-          },
-          nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-biblioref': {
-          type: 'link',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          nameFrom: [ 'author', 'contents' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
-        },
-        'doc-chapter': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-colophon': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-conclusion': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-cover': {
-          type: 'img',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false
-        },
-        'doc-credit': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-credits': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-dedication': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-endnote': {
-          type: 'listitem',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: [ 'doc-endnotes' ],
-          unsupported: false,
-          allowedElements: [ 'li' ]
-        },
-        'doc-endnotes': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: {
-            one: [ 'doc-endnote' ]
-          },
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-epigraph': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false
-        },
-        'doc-epilogue': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-errata': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-example': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'aside', 'section' ]
-        },
-        'doc-footnote': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'aside', 'footer', 'header' ]
-        },
-        'doc-foreword': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-glossary': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: [ 'term', 'definition' ],
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'dl' ]
-        },
-        'doc-glossref': {
-          type: 'link',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author', 'contents' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
-        },
-        'doc-index': {
-          type: 'navigation',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'nav', 'section' ]
-        },
-        'doc-introduction': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-noteref': {
-          type: 'link',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author', 'contents' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
-        },
-        'doc-notice': {
-          type: 'note',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-pagebreak': {
-          type: 'separator',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'hr' ]
-        },
-        'doc-pagelist': {
-          type: 'navigation',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'nav', 'section' ]
-        },
-        'doc-part': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-preface': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-prologue': {
-          type: 'landmark',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-pullquote': {
-          type: 'none',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'aside', 'section' ]
-        },
-        'doc-qna': {
-          type: 'section',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
-        },
-        'doc-subtitle': {
-          type: 'sectionhead',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: {
-            nodeName: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ]
-          }
-        },
-        'doc-tip': {
-          type: 'note',
-          attributes: {
-            allowed: [ 'aria-expanded' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'aside' ]
-        },
-        'doc-toc': {
-          type: 'navigation',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: null,
-          namefrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'nav', 'section' ]
-        },
-        feed: {
-          type: 'structure',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
-          owned: {
-            one: [ 'article' ]
-          },
-          nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'article', 'aside', 'section' ]
-        },
-        figure: {
-          type: 'structure',
-          unsupported: false
+          implicit: [ 'body' ]
         },
         form: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'form' ],
-          unsupported: false
+          implicit: [ 'form' ]
         },
         grid: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-colcount', 'aria-level', 'aria-multiselectable', 'aria-readonly', 'aria-rowcount', 'aria-errormessage' ]
+            allowed: [ 'aria-level', 'aria-multiselectable', 'aria-readonly', 'aria-activedescendant', 'aria-expanded' ]
           },
           owned: {
             one: [ 'rowgroup', 'row' ]
           },
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'table' ],
-          unsupported: false
+          implicit: [ 'table' ]
         },
         gridcell: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-rowindex', 'aria-rowspan', 'aria-selected', 'aria-readonly', 'aria-required', 'aria-errormessage' ]
+            allowed: [ 'aria-selected', 'aria-readonly', 'aria-expanded', 'aria-required' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'row' ],
-          implicit: [ 'td', 'th' ],
-          unsupported: false
+          implicit: [ 'td', 'th' ]
         },
         group: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'details', 'optgroup' ],
-          unsupported: false,
-          allowedElements: [ 'dl', 'figcaption', 'fieldset', 'figure', 'footer', 'header', 'ol', 'ul' ]
+          implicit: [ 'details', 'optgroup' ]
         },
         heading: {
           type: 'structure',
           attributes: {
-            required: [ 'aria-level' ],
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-level', 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: null,
-          implicit: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ],
-          unsupported: false
+          implicit: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ]
         },
         img: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'img' ],
-          unsupported: false,
-          allowedElements: [ 'embed', 'iframe', 'object', 'svg' ]
+          implicit: [ 'img' ]
         },
         input: {
           nameFrom: [ 'author' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         landmark: {
           nameFrom: [ 'author' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         link: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: null,
-          implicit: [ 'a[href]' ],
-          unsupported: false,
-          allowedElements: [ 'button', {
-            nodeName: 'input',
-            properties: {
-              type: [ 'image', 'button' ]
-            }
-          } ]
+          implicit: [ 'a[href]' ]
         },
         list: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: {
             all: [ 'listitem' ]
           },
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'ol', 'ul', 'dl' ],
-          unsupported: false
+          implicit: [ 'ol', 'ul', 'dl' ]
         },
         listbox: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-multiselectable', 'aria-required', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-multiselectable', 'aria-required', 'aria-expanded' ]
           },
           owned: {
             all: [ 'option' ]
           },
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'select' ],
-          unsupported: false,
-          allowedElements: [ 'ol', 'ul' ]
+          implicit: [ 'select' ]
         },
         listitem: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'list' ],
-          implicit: [ 'li', 'dt' ],
-          unsupported: false
+          implicit: [ 'li', 'dt' ]
         },
         log: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          context: null
         },
         main: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'main' ],
-          unsupported: false,
-          allowedElements: [ 'article', 'section' ]
+          implicit: [ 'main' ]
         },
         marquee: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          context: null
         },
         math: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'math' ],
-          unsupported: false
+          implicit: [ 'math' ]
         },
         menu: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-expanded' ]
           },
           owned: {
             one: [ 'menuitem', 'menuitemradio', 'menuitemcheckbox' ]
           },
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'menu[type="context"]' ],
-          unsupported: false,
-          allowedElements: [ 'ol', 'ul' ]
+          implicit: [ 'menu[type="context"]' ]
         },
         menubar: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-expanded' ]
           },
-          owned: {
-            one: [ 'menuitem', 'menuitemradio', 'menuitemcheckbox' ]
-          },
+          owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'ol', 'ul' ]
+          context: null
         },
         menuitem: {
           type: 'widget',
-          attributes: {
-            allowed: [ 'aria-posinset', 'aria-setsize', 'aria-expanded', 'aria-errormessage' ]
-          },
+          attributes: null,
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'menu', 'menubar' ],
-          implicit: [ 'menuitem[type="command"]' ],
-          unsupported: false,
-          allowedElements: [ 'button', 'li', {
-            nodeName: 'iput',
-            properties: {
-              type: [ 'image', 'button' ]
-            }
-          }, {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          implicit: [ 'menuitem[type="command"]' ]
         },
         menuitemcheckbox: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-checked', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]
+            required: [ 'aria-checked' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'menu', 'menubar' ],
-          implicit: [ 'menuitem[type="checkbox"]' ],
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: [ 'button', 'li' ]
-          }, {
-            nodeName: 'input',
-            properties: {
-              type: [ 'checkbox', 'image', 'button' ]
-            }
-          }, {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          implicit: [ 'menuitem[type="checkbox"]' ]
         },
         menuitemradio: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-checked', 'aria-selected', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]
+            allowed: [ 'aria-selected', 'aria-posinset', 'aria-setsize' ],
+            required: [ 'aria-checked' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'menu', 'menubar' ],
-          implicit: [ 'menuitem[type="radio"]' ],
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: [ 'button', 'li' ]
-          }, {
-            nodeName: 'input',
-            properties: {
-              type: [ 'image', 'button', 'radio' ]
-            }
-          }, {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          implicit: [ 'menuitem[type="radio"]' ]
         },
         navigation: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'nav' ],
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          implicit: [ 'nav' ]
         },
         none: {
           type: 'structure',
           attributes: null,
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: [ 'article', 'aside', 'dl', 'embed', 'figcaption', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'iframe', 'li', 'ol', 'section', 'ul' ]
-          }, {
-            nodeName: 'img',
-            attributes: {
-              alt: isNotNull
-            }
-          } ]
+          context: null
         },
         note: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'aside' ]
+          context: null
         },
         option: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-selected', 'aria-posinset', 'aria-setsize', 'aria-checked', 'aria-errormessage' ]
+            allowed: [ 'aria-selected', 'aria-posinset', 'aria-setsize', 'aria-checked' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'listbox' ],
-          implicit: [ 'option' ],
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: [ 'button', 'li' ]
-          }, {
-            nodeName: 'input',
-            properties: {
-              type: [ 'checkbox', 'button' ]
-            }
-          }, {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          implicit: [ 'option' ]
         },
         presentation: {
           type: 'structure',
           attributes: null,
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: [ 'article', 'aside', 'dl', 'embed', 'figcaption', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'iframe', 'li', 'ol', 'section', 'ul' ]
-          }, {
-            nodeName: 'img',
-            attributes: {
-              alt: isNotNull
-            }
-          } ]
+          context: null
         },
         progressbar: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-valuetext', 'aria-valuenow', 'aria-valuemax', 'aria-valuemin', 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-valuetext', 'aria-valuenow', 'aria-valuemax', 'aria-valuemin' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'progress' ],
-          unsupported: false
+          implicit: [ 'progress' ]
         },
         radio: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-selected', 'aria-posinset', 'aria-setsize', 'aria-required', 'aria-errormessage', 'aria-checked' ]
+            allowed: [ 'aria-selected', 'aria-posinset', 'aria-setsize' ],
+            required: [ 'aria-checked' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: null,
-          implicit: [ 'input[type="radio"]' ],
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: [ 'button', 'li' ]
-          }, {
-            nodeName: 'input',
-            properties: {
-              type: [ 'image', 'button' ]
-            }
-          } ]
+          implicit: [ 'input[type="radio"]' ]
         },
         radiogroup: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-required', 'aria-expanded', 'aria-readonly', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-required', 'aria-expanded' ]
           },
           owned: {
             all: [ 'radio' ]
           },
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: {
-            nodeName: [ 'ol', 'ul' ]
-          }
+          context: null
         },
         range: {
           nameFrom: [ 'author' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         region: {
-          type: 'landmark',
+          type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'section[aria-label]', 'section[aria-labelledby]', 'section[title]' ],
-          unsupported: false,
-          allowedElements: {
-            nodeName: [ 'article', 'aside' ]
-          }
+          implicit: [ 'section' ]
         },
         roletype: {
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         row: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-colindex', 'aria-expanded', 'aria-level', 'aria-selected', 'aria-rowindex', 'aria-errormessage' ]
+            allowed: [ 'aria-level', 'aria-selected', 'aria-activedescendant', 'aria-expanded' ]
           },
           owned: {
             one: [ 'cell', 'columnheader', 'rowheader', 'gridcell' ]
           },
           nameFrom: [ 'author', 'contents' ],
           context: [ 'rowgroup', 'grid', 'treegrid', 'table' ],
-          implicit: [ 'tr' ],
-          unsupported: false
+          implicit: [ 'tr' ]
         },
         rowgroup: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-expanded' ]
           },
           owned: {
             all: [ 'row' ]
           },
           nameFrom: [ 'author', 'contents' ],
-          context: [ 'grid', 'table', 'treegrid' ],
-          implicit: [ 'tbody', 'thead', 'tfoot' ],
-          unsupported: false
+          context: [ 'grid', 'table' ],
+          implicit: [ 'tbody', 'thead', 'tfoot' ]
         },
         rowheader: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-rowindex', 'aria-rowspan', 'aria-required', 'aria-readonly', 'aria-selected', 'aria-sort', 'aria-errormessage' ]
+            allowed: [ 'aria-sort', 'aria-required', 'aria-readonly', 'aria-expanded', 'aria-selected' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
           context: [ 'row' ],
-          implicit: [ 'th' ],
-          unsupported: false
+          implicit: [ 'th' ]
         },
         scrollbar: {
           type: 'widget',
           attributes: {
-            required: [ 'aria-controls', 'aria-valuenow' ],
-            allowed: [ 'aria-valuetext', 'aria-orientation', 'aria-errormessage', 'aria-valuemax', 'aria-valuemin' ]
+            required: [ 'aria-controls', 'aria-orientation', 'aria-valuenow', 'aria-valuemax', 'aria-valuemin' ],
+            allowed: [ 'aria-valuetext' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false
+          context: null
         },
         search: {
           type: 'landmark',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: {
-            nodeName: [ 'aside', 'form', 'section' ]
-          }
+          context: null
         },
         searchbox: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required', 'aria-placeholder', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'input[type="search"]' ],
-          unsupported: false,
-          allowedElements: {
-            nodeName: 'input',
-            properties: {
-              type: 'text'
-            }
-          }
+          implicit: [ 'input[type="search"]' ]
         },
         section: {
           nameFrom: [ 'author', 'contents' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         sectionhead: {
           nameFrom: [ 'author', 'contents' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         select: {
           nameFrom: [ 'author' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         separator: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-orientation', 'aria-valuenow', 'aria-valuemax', 'aria-valuemin', 'aria-valuetext', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded', 'aria-orientation' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'hr' ],
-          unsupported: false,
-          allowedElements: [ 'li' ]
+          implicit: [ 'hr' ]
         },
         slider: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-valuetext', 'aria-orientation', 'aria-readonly', 'aria-errormessage', 'aria-valuemax', 'aria-valuemin' ],
-            required: [ 'aria-valuenow' ]
+            allowed: [ 'aria-valuetext', 'aria-orientation' ],
+            required: [ 'aria-valuenow', 'aria-valuemax', 'aria-valuemin' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'input[type="range"]' ],
-          unsupported: false
+          implicit: [ 'input[type="range"]' ]
         },
         spinbutton: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-valuetext', 'aria-required', 'aria-readonly', 'aria-errormessage', 'aria-valuemax', 'aria-valuemin' ],
-            required: [ 'aria-valuenow' ]
+            allowed: [ 'aria-valuetext', 'aria-required' ],
+            required: [ 'aria-valuenow', 'aria-valuemax', 'aria-valuemin' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'input[type="number"]' ],
-          unsupported: false,
-          allowedElements: {
-            nodeName: 'input',
-            properties: {
-              type: 'text'
-            }
-          }
+          implicit: [ 'input[type="number"]' ]
         },
         status: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'output' ],
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          implicit: [ 'output' ]
         },
         structure: {
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         switch: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-errormessage' ],
             required: [ 'aria-checked' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'button', {
-            nodeName: 'input',
-            properties: {
-              type: [ 'checkbox', 'image', 'button' ]
-            }
-          }, {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          context: null
         },
         tab: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-selected', 'aria-expanded', 'aria-setsize', 'aria-posinset', 'aria-errormessage' ]
+            allowed: [ 'aria-selected', 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
-          context: [ 'tablist' ],
-          unsupported: false,
-          allowedElements: [ {
-            nodeName: [ 'button', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li' ]
-          }, {
-            nodeName: 'input',
-            properties: {
-              type: 'button'
-            }
-          }, {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          context: [ 'tablist' ]
         },
         table: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-colcount', 'aria-rowcount', 'aria-errormessage' ]
+            allowed: [ 'aria-colcount', 'aria-rowcount' ]
           },
           owned: {
             one: [ 'rowgroup', 'row' ]
           },
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'table' ],
-          unsupported: false
+          implicit: [ 'table' ]
         },
         tablist: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-level', 'aria-multiselectable', 'aria-orientation', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-level', 'aria-multiselectable' ]
           },
           owned: {
             all: [ 'tab' ]
           },
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'ol', 'ul' ]
+          context: null
         },
         tabpanel: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'section' ]
+          context: null
         },
-        term: {
+        text: {
           type: 'structure',
-          attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
-          },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
-          context: null,
-          implicit: [ 'dt' ],
-          unsupported: false
+          context: null
         },
         textbox: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required', 'aria-placeholder', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'input[type="text"]', 'input[type="email"]', 'input[type="password"]', 'input[type="tel"]', 'input[type="url"]', 'input:not([type])', 'textarea' ],
-          unsupported: false
+          implicit: [ 'input[type="text"]', 'input[type="email"]', 'input[type="password"]', 'input[type="tel"]', 'input[type="url"]', 'input:not([type])', 'textarea' ]
         },
         timer: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false
+          context: null
         },
         toolbar: {
           type: 'structure',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author' ],
           context: null,
-          implicit: [ 'menu[type="toolbar"]' ],
-          unsupported: false,
-          allowedElements: [ 'ol', 'ul' ]
+          implicit: [ 'menu[type="toolbar"]' ]
         },
         tooltip: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-expanded', 'aria-errormessage' ]
+            allowed: [ 'aria-expanded' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
-          context: null,
-          unsupported: false
+          context: null
         },
         tree: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-multiselectable', 'aria-required', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-multiselectable', 'aria-required', 'aria-expanded' ]
           },
           owned: {
             all: [ 'treeitem' ]
           },
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false,
-          allowedElements: [ 'ol', 'ul' ]
+          context: null
         },
         treegrid: {
           type: 'composite',
           attributes: {
-            allowed: [ 'aria-activedescendant', 'aria-colcount', 'aria-expanded', 'aria-level', 'aria-multiselectable', 'aria-readonly', 'aria-required', 'aria-rowcount', 'aria-orientation', 'aria-errormessage' ]
+            allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-level', 'aria-multiselectable', 'aria-readonly', 'aria-required' ]
           },
           owned: {
-            one: [ 'rowgroup', 'row' ]
+            all: [ 'treeitem' ]
           },
           nameFrom: [ 'author' ],
-          context: null,
-          unsupported: false
+          context: null
         },
         treeitem: {
           type: 'widget',
           attributes: {
-            allowed: [ 'aria-checked', 'aria-selected', 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]
+            allowed: [ 'aria-checked', 'aria-selected', 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize' ]
           },
           owned: null,
           nameFrom: [ 'author', 'contents' ],
-          context: [ 'group', 'tree' ],
-          unsupported: false,
-          allowedElements: [ 'li', {
-            nodeName: 'a',
-            attributes: {
-              href: isNotNull
-            }
-          } ]
+          context: [ 'treegrid', 'tree' ]
         },
         widget: {
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         },
         window: {
           nameFrom: [ 'author' ],
-          type: 'abstract',
-          unsupported: false
+          type: 'abstract'
         }
       };
-      lookupTable.elementsAllowedNoRole = [ {
-        nodeName: [ 'base', 'body', 'caption', 'col', 'colgroup', 'datalist', 'dd', 'details', 'dt', 'head', 'html', 'keygen', 'label', 'legend', 'main', 'map', 'math', 'meta', 'meter', 'noscript', 'optgroup', 'param', 'picture', 'progress', 'script', 'source', 'style', 'template', 'textarea', 'title', 'track' ]
-      }, {
-        nodeName: 'area',
-        attributes: {
-          href: isNotNull
-        }
-      }, {
-        nodeName: 'input',
-        properties: {
-          type: [ 'color', 'data', 'datatime', 'file', 'hidden', 'month', 'number', 'password', 'range', 'reset', 'submit', 'time', 'week' ]
-        }
-      }, {
-        nodeName: 'input',
-        attributes: {
-          list: isNull
-        },
-        properties: {
-          type: [ 'email', 'search', 'tel', 'url' ]
-        }
-      }, {
-        nodeName: 'link',
-        attributes: {
-          href: isNotNull
-        }
-      }, {
-        nodeName: 'menu',
-        attributes: {
-          type: 'context'
-        }
-      }, {
-        nodeName: 'menuitem',
-        attributes: {
-          type: [ 'command', 'checkbox', 'radio' ]
-        }
-      }, {
-        nodeName: 'select',
-        condition: function condition(node) {
-          return Number(node.getAttribute('size')) > 1;
-        },
-        properties: {
-          multiple: true
-        }
-      }, {
-        nodeName: [ 'clippath', 'cursor', 'defs', 'desc', 'feblend', 'fecolormatrix', 'fecomponenttransfer', 'fecomposite', 'feconvolvematrix', 'fediffuselighting', 'fedisplacementmap', 'fedistantlight', 'fedropshadow', 'feflood', 'fefunca', 'fefuncb', 'fefuncg', 'fefuncr', 'fegaussianblur', 'feimage', 'femerge', 'femergenode', 'femorphology', 'feoffset', 'fepointlight', 'fespecularlighting', 'fespotlight', 'fetile', 'feturbulence', 'filter', 'hatch', 'hatchpath', 'lineargradient', 'marker', 'mask', 'meshgradient', 'meshpatch', 'meshrow', 'metadata', 'mpath', 'pattern', 'radialgradient', 'solidcolor', 'stop', 'switch', 'view' ]
-      } ];
-      lookupTable.elementsAllowedAnyRole = [ {
-        nodeName: 'a',
-        attributes: {
-          href: isNull
-        }
-      }, {
-        nodeName: [ 'abbr', 'address', 'canvas', 'div', 'p', 'pre', 'blockquote', 'ins', 'del', 'output', 'span', 'table', 'tbody', 'thead', 'tfoot', 'td', 'em', 'strong', 'small', 's', 'cite', 'q', 'dfn', 'abbr', 'time', 'code', 'var', 'samp', 'kbd', 'sub', 'sup', 'i', 'b', 'u', 'mark', 'ruby', 'rt', 'rp', 'bdi', 'bdo', 'br', 'wbr', 'th', 'tr' ]
-      } ];
-      lookupTable.evaluateRoleForElement = {
-        A: function A(_ref12) {
-          var node = _ref12.node, out = _ref12.out;
-          if (node.namespaceURI === 'http://www.w3.org/2000/svg') {
-            return true;
-          }
-          if (node.href.length) {
-            return out;
-          }
-          return true;
-        },
-        AREA: function AREA(_ref13) {
-          var node = _ref13.node;
-          return !node.href;
-        },
-        BUTTON: function BUTTON(_ref14) {
-          var node = _ref14.node, role = _ref14.role, out = _ref14.out;
-          if (node.getAttribute('type') === 'menu') {
-            return role === 'menuitem';
-          }
-          return out;
-        },
-        IMG: function IMG(_ref15) {
-          var node = _ref15.node, out = _ref15.out;
-          if (node.alt) {
-            return !out;
-          }
-          return out;
-        },
-        INPUT: function INPUT(_ref16) {
-          var node = _ref16.node, role = _ref16.role, out = _ref16.out;
-          switch (node.type) {
-           case 'button':
-           case 'image':
-            return out;
-
-           case 'checkbox':
-            if (role === 'button' && node.hasAttribute('aria-pressed')) {
-              return true;
-            }
-            return out;
-
-           case 'radio':
-            return role === 'menuitemradio';
-
-           case 'text':
-            return role === 'combobox' || role === 'searchbox' || role === 'spinbutton';
-
-           default:
-            return false;
-          }
-        },
-        LI: function LI(_ref17) {
-          var node = _ref17.node, out = _ref17.out;
-          var hasImplicitListitemRole = axe.utils.matchesSelector(node, 'ol li, ul li');
-          if (hasImplicitListitemRole) {
-            return out;
-          }
-          return true;
-        },
-        MENU: function MENU(_ref18) {
-          var node = _ref18.node;
-          if (node.getAttribute('type') === 'context') {
-            return false;
-          }
-          return true;
-        },
-        OPTION: function OPTION(_ref19) {
-          var node = _ref19.node;
-          var withinOptionList = axe.utils.matchesSelector(node, 'select > option, datalist > option, optgroup > option');
-          return !withinOptionList;
-        },
-        SELECT: function SELECT(_ref20) {
-          var node = _ref20.node, role = _ref20.role;
-          return !node.multiple && node.size <= 1 && role === 'menu';
-        },
-        SVG: function SVG(_ref21) {
-          var node = _ref21.node, out = _ref21.out;
-          if (node.parentNode && node.parentNode.namespaceURI === 'http://www.w3.org/2000/svg') {
-            return true;
-          }
-          return out;
-        }
-      };
-      lookupTable.rolesOfType = {
-        widget: [ 'button', 'checkbox', 'dialog', 'gridcell', 'heading', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'scrollbar', 'slider', 'spinbutton', 'status', 'switch', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'tree', 'treeitem' ]
-      };
       var color = {};
       commons.color = color;
       var dom = commons.dom = {};
-      var forms = {};
-      commons.forms = forms;
-      function matches(node, definition) {
-        return matches.fromDefinition(node, definition);
-      }
-      commons.matches = matches;
       var table = commons.table = {};
-      var text = commons.text = {
-        EdgeFormDefaults: {}
-      };
+      var text = commons.text = {};
       var utils = commons.utils = axe.utils;
-      aria.arialabelText = function arialabelText(node) {
-        node = node.actualNode || node;
-        if (node.nodeType !== 1) {
-          return '';
-        }
-        return node.getAttribute('aria-label') || '';
-      };
-      aria.arialabelledbyText = function arialabelledbyText(node) {
-        var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-        node = node.actualNode || node;
-        if (node.nodeType !== 1 || context.inLabelledByContext || context.inControlContext) {
-          return '';
-        }
-        var refs = dom.idrefs(node, 'aria-labelledby').filter(function(elm) {
-          return elm;
-        });
-        return refs.reduce(function(accessibleName, elm) {
-          var accessibleNameAdd = text.accessibleText(elm, _extends({
-            inLabelledByContext: true,
-            startNode: context.startNode || node
-          }, context));
-          if (!accessibleName) {
-            return accessibleNameAdd;
-          } else {
-            return ''.concat(accessibleName, ' ').concat(accessibleNameAdd);
-          }
-        }, '');
-      };
       aria.requiredAttr = function(role) {
-        var roles = aria.lookupTable.role[role], attr = roles && roles.attributes && roles.attributes.required;
+        'use strict';
+        var roles = lookupTables.role[role], attr = roles && roles.attributes && roles.attributes.required;
         return attr || [];
       };
       aria.allowedAttr = function(role) {
-        var roles = aria.lookupTable.role[role], attr = roles && roles.attributes && roles.attributes.allowed || [], requiredAttr = roles && roles.attributes && roles.attributes.required || [];
-        return attr.concat(aria.lookupTable.globalAttributes).concat(requiredAttr);
+        'use strict';
+        var roles = lookupTables.role[role], attr = roles && roles.attributes && roles.attributes.allowed || [], requiredAttr = roles && roles.attributes && roles.attributes.required || [];
+        return attr.concat(lookupTables.globalAttributes).concat(requiredAttr);
       };
-      aria.validateAttr = function validateAttr(att) {
-        var attrDefinition = aria.lookupTable.attributes[att];
-        return !!attrDefinition;
+      aria.validateAttr = function(att) {
+        'use strict';
+        return !!lookupTables.attributes[att];
       };
-      function getRoleSegments(node) {
-        var roles = [];
-        if (!node) {
-          return roles;
-        }
-        if (node.hasAttribute('role')) {
-          var nodeRoles = axe.utils.tokenList(node.getAttribute('role').toLowerCase());
-          roles = roles.concat(nodeRoles);
-        }
-        if (node.hasAttributeNS('http://www.idpf.org/2007/ops', 'type')) {
-          var epubRoles = axe.utils.tokenList(node.getAttributeNS('http://www.idpf.org/2007/ops', 'type').toLowerCase()).map(function(role) {
-            return 'doc-'.concat(role);
-          });
-          roles = roles.concat(epubRoles);
-        }
-        roles = roles.filter(function(role) {
-          return axe.commons.aria.isValidRole(role);
-        });
-        return roles;
-      }
-      aria.getElementUnallowedRoles = function getElementUnallowedRoles(node) {
-        var allowImplicit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
-        var tagName = node.nodeName.toUpperCase();
-        if (!axe.utils.isHtmlElement(node)) {
-          return [];
-        }
-        var roleSegments = getRoleSegments(node);
-        var implicitRole = axe.commons.aria.implicitRole(node);
-        var unallowedRoles = roleSegments.filter(function(role) {
-          if (allowImplicit && role === implicitRole) {
-            return false;
-          }
-          if (!allowImplicit && !(role === 'row' && tagName === 'TR' && axe.utils.matchesSelector(node, 'table[role="grid"] > tr'))) {
-            return true;
-          }
-          return !aria.isAriaRoleAllowedOnElement(node, role);
-        });
-        return unallowedRoles;
-      };
-      aria.getOwnedVirtual = function getOwned(_ref22) {
-        var actualNode = _ref22.actualNode, children = _ref22.children;
-        if (!actualNode || !children) {
-          throw new Error('getOwnedVirtual requires a virtual node');
-        }
-        return dom.idrefs(actualNode, 'aria-owns').reduce(function(ownedElms, element) {
-          if (element) {
-            var virtualNode = axe.utils.getNodeFromTree(element);
-            ownedElms.push(virtualNode);
-          }
-          return ownedElms;
-        }, children);
-      };
-      aria.getRole = function getRole(node) {
-        var _ref23 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, noImplicit = _ref23.noImplicit, fallback = _ref23.fallback, abstracts = _ref23.abstracts, dpub = _ref23.dpub;
-        node = node.actualNode || node;
-        if (node.nodeType !== 1) {
-          return null;
-        }
-        var roleAttr = (node.getAttribute('role') || '').trim().toLowerCase();
-        var roleList = fallback ? axe.utils.tokenList(roleAttr) : [ roleAttr ];
-        var validRoles = roleList.filter(function(role) {
-          if (!dpub && role.substr(0, 4) === 'doc-') {
-            return false;
-          }
-          return aria.isValidRole(role, {
-            allowAbstract: abstracts
-          });
-        });
-        var explicitRole = validRoles[0];
-        if (!explicitRole && !noImplicit) {
-          return aria.implicitRole(node);
-        }
-        return explicitRole || null;
-      };
-      var idRefsRegex = /^idrefs?$/;
-      function cacheIdRefs(node, refAttrs) {
-        if (node.hasAttribute) {
-          if (node.nodeName.toUpperCase() === 'LABEL' && node.hasAttribute('for')) {
-            axe._cache.get('idRefs')[node.getAttribute('for')] = true;
-          }
-          refAttrs.filter(function(attr) {
-            return node.hasAttribute(attr);
-          }).forEach(function(attr) {
-            var attrValue = node.getAttribute(attr);
-            axe.utils.tokenList(attrValue).forEach(function(id) {
-              axe._cache.get('idRefs')[id] = true;
-            });
-          });
-        }
-        for (var i = 0; i < node.children.length; i++) {
-          cacheIdRefs(node.children[i], refAttrs);
-        }
-      }
-      aria.isAccessibleRef = function isAccessibleRef(node) {
-        node = node.actualNode || node;
-        var root = dom.getRootNode(node);
-        root = root.documentElement || root;
-        var id = node.id;
-        if (!axe._cache.get('idRefs')) {
-          axe._cache.set('idRefs', {});
-          var refAttrs = Object.keys(aria.lookupTable.attributes).filter(function(attr) {
-            var type = aria.lookupTable.attributes[attr].type;
-            return idRefsRegex.test(type);
-          });
-          cacheIdRefs(root, refAttrs);
-        }
-        return axe._cache.get('idRefs')[id] === true;
-      };
-      aria.isAriaRoleAllowedOnElement = function isAriaRoleAllowedOnElement(node, role) {
-        var nodeName = node.nodeName.toUpperCase();
-        var lookupTable = axe.commons.aria.lookupTable;
-        if (matches(node, lookupTable.elementsAllowedNoRole)) {
-          return false;
-        }
-        if (matches(node, lookupTable.elementsAllowedAnyRole)) {
+      aria.validateAttrValue = function(node, attr) {
+        'use strict';
+        var matches, list, value = node.getAttribute(attr), attrInfo = lookupTables.attributes[attr];
+        var doc = dom.getRootNode(node);
+        if (!attrInfo) {
           return true;
         }
-        var roleValue = lookupTable.role[role];
-        if (!roleValue || !roleValue.allowedElements) {
-          return false;
+        switch (attrInfo.type) {
+         case 'boolean':
+         case 'nmtoken':
+          return typeof value === 'string' && attrInfo.values.indexOf(value.toLowerCase()) !== -1;
+
+         case 'nmtokens':
+          list = axe.utils.tokenList(value);
+          return list.reduce(function(result, token) {
+            return result && attrInfo.values.indexOf(token) !== -1;
+          }, list.length !== 0);
+
+         case 'idref':
+          return !!(value && doc.getElementById(value));
+
+         case 'idrefs':
+          list = axe.utils.tokenList(value);
+          return list.reduce(function(result, token) {
+            return !!(result && doc.getElementById(token));
+          }, list.length !== 0);
+
+         case 'string':
+          return true;
+
+         case 'decimal':
+          matches = value.match(/^[-+]?([0-9]*)\.?([0-9]*)$/);
+          return !!(matches && (matches[1] || matches[2]));
+
+         case 'int':
+          return /^[-+]?[0-9]+$/.test(value);
         }
-        var out = matches(node, roleValue.allowedElements);
-        if (Object.keys(lookupTable.evaluateRoleForElement).includes(nodeName)) {
-          return lookupTable.evaluateRoleForElement[nodeName]({
-            node: node,
-            role: role,
-            out: out
-          });
-        }
-        return out;
       };
-      aria.isUnsupportedRole = function(role) {
-        var roleDefinition = aria.lookupTable.role[role];
-        return roleDefinition ? roleDefinition.unsupported : false;
-      };
-      aria.labelVirtual = function(_ref24) {
-        var actualNode = _ref24.actualNode;
+      aria.label = function(node) {
         var ref, candidate;
-        if (actualNode.getAttribute('aria-labelledby')) {
-          ref = dom.idrefs(actualNode, 'aria-labelledby');
+        if (node.actualNode instanceof Node === false) {
+          node = axe.utils.getNodeFromTree(axe._tree[0], node);
+        }
+        if (node.actualNode.getAttribute('aria-labelledby')) {
+          ref = dom.idrefs(node.actualNode, 'aria-labelledby');
           candidate = ref.map(function(thing) {
-            var vNode = axe.utils.getNodeFromTree(thing);
-            return vNode ? text.visibleVirtual(vNode, true) : '';
+            var vNode = axe.utils.getNodeFromTree(axe._tree[0], thing);
+            return vNode ? text.visible(vNode, true) : '';
           }).join(' ').trim();
           if (candidate) {
             return candidate;
           }
         }
-        candidate = actualNode.getAttribute('aria-label');
+        candidate = node.actualNode.getAttribute('aria-label');
         if (candidate) {
           candidate = text.sanitize(candidate).trim();
           if (candidate) {
@@ -14473,52 +8216,30 @@
         }
         return null;
       };
-      aria.label = function(node) {
-        node = axe.utils.getNodeFromTree(node);
-        return aria.labelVirtual(node);
-      };
-      aria.namedFromContents = function namedFromContents(node) {
-        var _ref25 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, strict = _ref25.strict;
-        node = node.actualNode || node;
-        if (node.nodeType !== 1) {
-          return false;
-        }
-        var role = aria.getRole(node);
-        var roleDef = aria.lookupTable.role[role];
-        if (roleDef && roleDef.nameFrom.includes('contents') || node.nodeName.toUpperCase() === 'TABLE') {
+      aria.isValidRole = function(role) {
+        'use strict';
+        if (lookupTables.role[role]) {
           return true;
         }
-        if (strict) {
-          return false;
-        }
-        return !roleDef || [ 'presentation', 'none' ].includes(role);
-      };
-      aria.isValidRole = function(role) {
-        var _ref26 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, allowAbstract = _ref26.allowAbstract, _ref26$flagUnsupporte = _ref26.flagUnsupported, flagUnsupported = _ref26$flagUnsupporte === void 0 ? false : _ref26$flagUnsupporte;
-        var roleDefinition = aria.lookupTable.role[role];
-        var isRoleUnsupported = roleDefinition ? roleDefinition.unsupported : false;
-        if (!roleDefinition || flagUnsupported && isRoleUnsupported) {
-          return false;
-        }
-        return allowAbstract ? true : roleDefinition.type !== 'abstract';
+        return false;
       };
       aria.getRolesWithNameFromContents = function() {
-        return Object.keys(aria.lookupTable.role).filter(function(r) {
-          return aria.lookupTable.role[r].nameFrom && aria.lookupTable.role[r].nameFrom.indexOf('contents') !== -1;
+        return Object.keys(lookupTables.role).filter(function(r) {
+          return lookupTables.role[r].nameFrom && lookupTables.role[r].nameFrom.indexOf('contents') !== -1;
         });
       };
       aria.getRolesByType = function(roleType) {
-        return Object.keys(aria.lookupTable.role).filter(function(r) {
-          return aria.lookupTable.role[r].type === roleType;
+        return Object.keys(lookupTables.role).filter(function(r) {
+          return lookupTables.role[r].type === roleType;
         });
       };
       aria.getRoleType = function(role) {
-        var r = aria.lookupTable.role[role];
+        var r = lookupTables.role[role];
         return r && r.type || null;
       };
       aria.requiredOwned = function(role) {
         'use strict';
-        var owned = null, roles = aria.lookupTable.role[role];
+        var owned = null, roles = lookupTables.role[role];
         if (roles) {
           owned = axe.utils.clone(roles.owned);
         }
@@ -14526,7 +8247,7 @@
       };
       aria.requiredContext = function(role) {
         'use strict';
-        var context = null, roles = aria.lookupTable.role[role];
+        var context = null, roles = lookupTables.role[role];
         if (roles) {
           context = axe.utils.clone(roles.context);
         }
@@ -14534,7 +8255,7 @@
       };
       aria.implicitNodes = function(role) {
         'use strict';
-        var implicit = null, roles = aria.lookupTable.role[role];
+        var implicit = null, roles = lookupTables.role[role];
         if (roles && roles.implicit) {
           implicit = axe.utils.clone(roles.implicit);
         }
@@ -14571,8 +8292,8 @@
             return sortedRole.name;
           });
         };
-        var roles = Object.keys(aria.lookupTable.role).map(function(role) {
-          var lookup = aria.lookupTable.role[role];
+        var roles = Object.keys(lookupTables.role).map(function(role) {
+          var lookup = lookupTables.role[role];
           return {
             name: role,
             implicit: lookup && lookup.implicit
@@ -14582,7 +8303,7 @@
         if (!availableImplicitRoles.length) {
           return null;
         }
-        var nodeAttributes = axe.utils.getNodeAttributes(node);
+        var nodeAttributes = node.attributes;
         var ariaAttributes = [];
         for (var i = 0, j = nodeAttributes.length; i < j; i++) {
           var attr = nodeAttributes[i];
@@ -14592,61 +8313,6 @@
         }
         return sortRolesByOptimalAriaContext(availableImplicitRoles, ariaAttributes).shift();
       };
-      aria.validateAttrValue = function validateAttrValue(node, attr) {
-        'use strict';
-        var matches, list, value = node.getAttribute(attr), attrInfo = aria.lookupTable.attributes[attr];
-        var doc = dom.getRootNode(node);
-        if (!attrInfo) {
-          return true;
-        }
-        if (attrInfo.allowEmpty && (!value || value.trim() === '')) {
-          return true;
-        }
-        switch (attrInfo.type) {
-         case 'boolean':
-         case 'nmtoken':
-          return typeof value === 'string' && attrInfo.values.includes(value.toLowerCase());
-
-         case 'nmtokens':
-          list = axe.utils.tokenList(value);
-          return list.reduce(function(result, token) {
-            return result && attrInfo.values.includes(token);
-          }, list.length !== 0);
-
-         case 'idref':
-          return !!(value && doc.getElementById(value));
-
-         case 'idrefs':
-          list = axe.utils.tokenList(value);
-          return list.some(function(token) {
-            return doc.getElementById(token);
-          });
-
-         case 'string':
-          return value.trim() !== '';
-
-         case 'decimal':
-          matches = value.match(/^[-+]?([0-9]*)\.?([0-9]*)$/);
-          return !!(matches && (matches[1] || matches[2]));
-
-         case 'int':
-          return /^[-+]?[0-9]+$/.test(value);
-        }
-      };
-      color.centerPointOfRect = function centerPointOfRect(rect) {
-        if (rect.left > window.innerWidth) {
-          return undefined;
-        }
-        if (rect.top > window.innerHeight) {
-          return undefined;
-        }
-        var x = Math.min(Math.ceil(rect.left + rect.width / 2), window.innerWidth - 1);
-        var y = Math.min(Math.ceil(rect.top + rect.height / 2), window.innerHeight - 1);
-        return {
-          x: x,
-          y: y
-        };
-      };
       color.Color = function(red, green, blue, alpha) {
         this.red = red;
         this.green = green;
@@ -14681,7 +8347,7 @@
             this.red = parseInt(match[1], 10);
             this.green = parseInt(match[2], 10);
             this.blue = parseInt(match[3], 10);
-            this.alpha = Math.round(parseFloat(match[4]) * 100) / 100;
+            this.alpha = parseFloat(match[4]);
             return;
           }
         };
@@ -14717,29 +8383,11 @@
       color.hasValidContrastRatio = function(bg, fg, fontSize, isBold) {
         var contrast = color.getContrast(bg, fg);
         var isSmallFont = isBold && Math.ceil(fontSize * 72) / 96 < 14 || !isBold && Math.ceil(fontSize * 72) / 96 < 18;
-        var expectedContrastRatio = isSmallFont ? 4.5 : 3;
         return {
-          isValid: contrast > expectedContrastRatio,
-          contrastRatio: contrast,
-          expectedContrastRatio: expectedContrastRatio
+          isValid: isSmallFont && contrast >= 4.5 || !isSmallFont && contrast >= 3,
+          contrastRatio: contrast
         };
       };
-      color.elementHasImage = function elementHasImage(elm, style) {
-        var graphicNodes = [ 'IMG', 'CANVAS', 'OBJECT', 'IFRAME', 'VIDEO', 'SVG' ];
-        var nodeName = elm.nodeName.toUpperCase();
-        if (graphicNodes.includes(nodeName)) {
-          axe.commons.color.incompleteData.set('bgColor', 'imgNode');
-          return true;
-        }
-        style = style || window.getComputedStyle(elm);
-        var bgImageStyle = style.getPropertyValue('background-image');
-        var hasBgImage = bgImageStyle !== 'none';
-        if (hasBgImage) {
-          var hasGradient = /gradient/.test(bgImageStyle);
-          axe.commons.color.incompleteData.set('bgColor', hasGradient ? 'bgGradient' : 'bgImage');
-        }
-        return hasBgImage;
-      };
       function _getFonts(style) {
         return style.getPropertyValue('font-family').split(/[,;]/g).map(function(font) {
           return font.trim().toLowerCase();
@@ -14772,20 +8420,139 @@
         return hasStyle;
       }
       color.elementIsDistinct = elementIsDistinct;
-      color.getBackgroundColor = function getBackgroundColor(elm) {
+      var graphicNodes = [ 'IMG', 'CANVAS', 'OBJECT', 'IFRAME', 'VIDEO', 'SVG' ];
+      function elmHasImage(elm, style) {
+        var nodeName = elm.nodeName.toUpperCase();
+        if (graphicNodes.includes(nodeName)) {
+          axe.commons.color.incompleteData.set('bgColor', 'imgNode');
+          return true;
+        }
+        style = style || window.getComputedStyle(elm);
+        var bgImageStyle = style.getPropertyValue('background-image');
+        var hasBgImage = bgImageStyle !== 'none';
+        if (hasBgImage) {
+          var hasGradient = /gradient/.test(bgImageStyle);
+          axe.commons.color.incompleteData.set('bgColor', hasGradient ? 'bgGradient' : 'bgImage');
+        }
+        return hasBgImage;
+      }
+      function getBgColor(elm, elmStyle) {
+        elmStyle = elmStyle || window.getComputedStyle(elm);
+        var bgColor = new color.Color();
+        bgColor.parseRgbString(elmStyle.getPropertyValue('background-color'));
+        if (bgColor.alpha !== 0) {
+          var opacity = elmStyle.getPropertyValue('opacity');
+          bgColor.alpha = bgColor.alpha * opacity;
+        }
+        return bgColor;
+      }
+      function contentOverlapping(targetElement, bgNode) {
+        var targetRect = targetElement.getClientRects()[0];
+        var obscuringElements = document.elementsFromPoint(targetRect.left, targetRect.top);
+        if (obscuringElements) {
+          for (var i = 0; i < obscuringElements.length; i++) {
+            if (obscuringElements[i] !== targetElement && obscuringElements[i] === bgNode) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+      function calculateObscuringAlpha(elmIndex, elmStack, originalElm) {
+        var totalAlpha = 0;
+        if (elmIndex > 0) {
+          for (var i = elmIndex - 1; i >= 0; i--) {
+            var bgElm = elmStack[i];
+            var bgElmStyle = window.getComputedStyle(bgElm);
+            var bgColor = getBgColor(bgElm, bgElmStyle);
+            if (bgColor.alpha && contentOverlapping(originalElm, bgElm)) {
+              totalAlpha += bgColor.alpha;
+            } else {
+              elmStack.splice(i, 1);
+            }
+          }
+        }
+        return totalAlpha;
+      }
+      function elmPartiallyObscured(elm, bgElm, bgColor) {
+        var obscured = elm !== bgElm && !dom.visuallyContains(elm, bgElm) && bgColor.alpha !== 0;
+        if (obscured) {
+          axe.commons.color.incompleteData.set('bgColor', 'elmPartiallyObscured');
+        }
+        return obscured;
+      }
+      function includeMissingElements(elmStack, elm) {
+        var elementMap = {
+          TD: 'TR',
+          INPUT: 'LABEL'
+        };
+        var tagArray = elmStack.map(function(elm) {
+          return elm.tagName;
+        });
+        var bgNodes = elmStack;
+        for (var candidate in elementMap) {
+          if (elementMap.hasOwnProperty(candidate)) {
+            if (elm.tagName === candidate) {
+              var ancestorMatch = axe.commons.dom.findUp(elm, elementMap[candidate]);
+              if (ancestorMatch && elmStack.indexOf(ancestorMatch) === -1) {
+                var overlaps = axe.commons.dom.visuallyOverlaps(elm.getBoundingClientRect(), ancestorMatch);
+                if (overlaps) {
+                  bgNodes.splice(elmStack.indexOf(elm) + 1, 0, ancestorMatch);
+                }
+              }
+            }
+            if (elm.tagName === elementMap[candidate] && tagArray.indexOf(elm.tagName) === -1) {
+              bgNodes.splice(tagArray.indexOf(candidate) + 1, 0, elm);
+            }
+          }
+        }
+        return bgNodes;
+      }
+      function sortPageBackground(elmStack) {
+        var bodyIndex = elmStack.indexOf(document.body);
+        var bgNodes = elmStack;
+        if (bodyIndex > 1 && !elmHasImage(document.documentElement) && getBgColor(document.documentElement).alpha === 0) {
+          bgNodes.splice(bodyIndex, 1);
+          bgNodes.splice(elmStack.indexOf(document.documentElement), 1);
+          bgNodes.push(document.body);
+        }
+        return bgNodes;
+      }
+      color.getBackgroundStack = function(elm) {
+        var rect = elm.getBoundingClientRect();
+        var x = void 0, y = void 0;
+        if (rect.left > window.innerWidth) {
+          return;
+        }
+        if (rect.top > window.innerHeight) {
+          return;
+        }
+        x = Math.min(Math.ceil(rect.left + rect.width / 2), window.innerWidth - 1);
+        y = Math.min(Math.ceil(rect.top + rect.height / 2), window.innerHeight - 1);
+        var elmStack = document.elementsFromPoint(x, y);
+        elmStack = includeMissingElements(elmStack, elm);
+        elmStack = dom.reduceToElementsBelowFloating(elmStack, elm);
+        elmStack = sortPageBackground(elmStack);
+        var elmIndex = elmStack.indexOf(elm);
+        if (calculateObscuringAlpha(elmIndex, elmStack, elm) >= .99) {
+          axe.commons.color.incompleteData.set('bgColor', 'bgOverlap');
+          return null;
+        }
+        return elmIndex !== -1 ? elmStack : null;
+      };
+      color.getBackgroundColor = function(elm) {
         var bgElms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
         var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
         if (noScroll !== true) {
-          var clientHeight = elm.getBoundingClientRect().height;
-          var alignToTop = clientHeight - 2 >= window.innerHeight * 2;
+          var alignToTop = elm.clientHeight - 2 >= window.innerHeight * 2;
           elm.scrollIntoView(alignToTop);
         }
         var bgColors = [];
         var elmStack = color.getBackgroundStack(elm);
         (elmStack || []).some(function(bgElm) {
           var bgElmStyle = window.getComputedStyle(bgElm);
-          var bgColor = color.getOwnBackgroundColor(bgElmStyle);
-          if (elmPartiallyObscured(elm, bgElm, bgColor) || color.elementHasImage(bgElm, bgElmStyle)) {
+          var bgColor = getBgColor(bgElm, bgElmStyle);
+          if (elmPartiallyObscured(elm, bgElm, bgColor) || elmHasImage(bgElm, bgElmStyle)) {
             bgColors = null;
             bgElms.push(bgElm);
             return true;
@@ -14805,151 +8572,9 @@
         }
         return null;
       };
-      color.getBackgroundStack = function getBackgroundStack(elm) {
-        var elmStack = color.filteredRectStack(elm);
-        if (elmStack === null) {
-          return null;
-        }
-        elmStack = includeMissingElements(elmStack, elm);
-        elmStack = dom.reduceToElementsBelowFloating(elmStack, elm);
-        elmStack = sortPageBackground(elmStack);
-        var elmIndex = elmStack.indexOf(elm);
-        if (calculateObscuringElement(elmIndex, elmStack, elm)) {
-          axe.commons.color.incompleteData.set('bgColor', 'bgOverlap');
-          return null;
-        }
-        return elmIndex !== -1 ? elmStack : null;
-      };
-      color.filteredRectStack = function filteredRectStack(elm) {
-        var rectStack = color.getRectStack(elm);
-        if (rectStack && rectStack.length === 1) {
-          return rectStack[0];
-        }
-        if (rectStack && rectStack.length > 1) {
-          var boundingStack = rectStack.shift();
-          var isSame;
-          includeMissingElements(boundingStack, elm);
-          rectStack.forEach(function(rectList, index) {
-            if (index === 0) {
-              return;
-            }
-            var rectA = rectStack[index - 1], rectB = rectStack[index];
-            isSame = rectA.every(function(element, elementIndex) {
-              return element === rectB[elementIndex];
-            }) || boundingStack.includes(elm);
-          });
-          if (!isSame) {
-            axe.commons.color.incompleteData.set('bgColor', 'elmPartiallyObscuring');
-            return null;
-          }
-          return rectStack[0];
-        }
-        axe.commons.color.incompleteData.set('bgColor', 'outsideViewport');
-        return null;
-      };
-      color.getRectStack = function(elm) {
-        var boundingCoords = axe.commons.color.centerPointOfRect(elm.getBoundingClientRect());
-        if (!boundingCoords) {
-          return null;
-        }
-        var boundingStack = dom.shadowElementsFromPoint(boundingCoords.x, boundingCoords.y);
-        var rects = Array.from(elm.getClientRects());
-        if (!rects || rects.length <= 1) {
-          return [ boundingStack ];
-        }
-        var filteredArr = rects.filter(function(rect) {
-          return rect.width && rect.width > 0;
-        }).map(function(rect) {
-          var coords = axe.commons.color.centerPointOfRect(rect);
-          if (coords) {
-            return dom.shadowElementsFromPoint(coords.x, coords.y);
-          }
-        });
-        if (filteredArr.some(function(stack) {
-          return stack === undefined;
-        })) {
-          return null;
-        }
-        filteredArr.splice(0, 0, boundingStack);
-        return filteredArr;
-      };
-      function sortPageBackground(elmStack) {
-        var bodyIndex = elmStack.indexOf(document.body);
-        var bgNodes = elmStack;
-        var sortBodyElement = bodyIndex > 1 || bodyIndex === -1;
-        if (sortBodyElement && !color.elementHasImage(document.documentElement) && color.getOwnBackgroundColor(window.getComputedStyle(document.documentElement)).alpha === 0) {
-          if (bodyIndex > 1) {
-            bgNodes.splice(bodyIndex, 1);
-          }
-          bgNodes.splice(elmStack.indexOf(document.documentElement), 1);
-          bgNodes.push(document.body);
-        }
-        return bgNodes;
-      }
-      function includeMissingElements(elmStack, elm) {
-        var nodeName = elm.nodeName.toUpperCase();
-        var elementMap = {
-          TD: [ 'TR', 'THEAD', 'TBODY', 'TFOOT' ],
-          TH: [ 'TR', 'THEAD', 'TBODY', 'TFOOT' ],
-          INPUT: [ 'LABEL' ]
-        };
-        var tagArray = elmStack.map(function(elm) {
-          return elm.nodeName.toUpperCase();
-        });
-        var bgNodes = elmStack;
-        for (var candidate in elementMap) {
-          if (tagArray.includes(candidate)) {
-            for (var candidateIndex = 0; candidateIndex < elementMap[candidate].length; candidateIndex++) {
-              var ancestorMatch = axe.commons.dom.findUp(elm, elementMap[candidate][candidateIndex]);
-              if (ancestorMatch && elmStack.indexOf(ancestorMatch) === -1) {
-                var overlaps = axe.commons.dom.visuallyOverlaps(elm.getBoundingClientRect(), ancestorMatch);
-                if (overlaps) {
-                  bgNodes.splice(tagArray.indexOf(candidate) + 1, 0, ancestorMatch);
-                }
-              }
-              if (nodeName === elementMap[candidate][candidateIndex] && tagArray.indexOf(nodeName) === -1) {
-                bgNodes.splice(tagArray.indexOf(candidate) + 1, 0, elm);
-              }
-            }
-          }
-        }
-        return bgNodes;
-      }
-      function elmPartiallyObscured(elm, bgElm, bgColor) {
-        var obscured = elm !== bgElm && !dom.visuallyContains(elm, bgElm) && bgColor.alpha !== 0;
-        if (obscured) {
-          axe.commons.color.incompleteData.set('bgColor', 'elmPartiallyObscured');
-        }
-        return obscured;
-      }
-      function calculateObscuringElement(elmIndex, elmStack, originalElm) {
-        if (elmIndex > 0) {
-          for (var i = elmIndex - 1; i >= 0; i--) {
-            var bgElm = elmStack[i];
-            if (contentOverlapping(originalElm, bgElm)) {
-              return true;
-            } else {
-              elmStack.splice(i, 1);
-            }
-          }
-        }
-        return false;
-      }
-      function contentOverlapping(targetElement, bgNode) {
-        var targetRect = targetElement.getClientRects()[0];
-        var obscuringElements = dom.shadowElementsFromPoint(targetRect.left, targetRect.top);
-        if (obscuringElements) {
-          for (var i = 0; i < obscuringElements.length; i++) {
-            if (obscuringElements[i] !== targetElement && obscuringElements[i] === bgNode) {
-              return true;
-            }
-          }
-        }
-        return false;
-      }
       dom.isOpaque = function(node) {
         var style = window.getComputedStyle(node);
-        return color.elementHasImage(node, style) || color.getOwnBackgroundColor(style).alpha === 1;
+        return elmHasImage(node, style) || getBgColor(node, style).alpha === 1;
       };
       color.getForegroundColor = function(node, noScroll) {
         var nodeStyle = window.getComputedStyle(node);
@@ -14968,15 +8593,6 @@
         }
         return color.flattenColors(fgColor, bgColor);
       };
-      color.getOwnBackgroundColor = function getOwnBackgroundColor(elmStyle) {
-        var bgColor = new color.Color();
-        bgColor.parseRgbString(elmStyle.getPropertyValue('background-color'));
-        if (bgColor.alpha !== 0) {
-          var opacity = elmStyle.getPropertyValue('opacity');
-          bgColor.alpha = bgColor.alpha * opacity;
-        }
-        return bgColor;
-      };
       color.incompleteData = function() {
         var data = {};
         return {
@@ -15013,9 +8629,10 @@
         }
         return finalElements;
       };
-      dom.findElmsInContext = function(_ref27) {
-        var context = _ref27.context, value = _ref27.value, attr = _ref27.attr, _ref27$elm = _ref27.elm, elm = _ref27$elm === void 0 ? '' : _ref27$elm;
-        var root;
+      dom.findElmsInContext = function(_ref8) {
+        var context = _ref8.context, value = _ref8.value, attr = _ref8.attr, _ref8$elm = _ref8.elm, elm = _ref8$elm === undefined ? '' : _ref8$elm;
+        var root = void 0;
+        context = context.actualNode || context;
         var escapedValue = axe.utils.escapeSelector(value);
         if (context.nodeType === 9 || context.nodeType === 11) {
           root = context;
@@ -15025,30 +8642,22 @@
         return Array.from(root.querySelectorAll(elm + '[' + attr + '=' + escapedValue + ']'));
       };
       dom.findUp = function(element, target) {
-        return dom.findUpVirtual(axe.utils.getNodeFromTree(element), target);
-      };
-      dom.findUpVirtual = function(element, target) {
-        var parent;
-        parent = element.actualNode;
-        if (!element.shadowId && typeof element.actualNode.closest === 'function') {
-          var match = element.actualNode.closest(target);
-          if (match) {
-            return match;
-          }
-          return null;
-        }
+        var doc = void 0, matches = void 0, parent = element;
         do {
           parent = parent.assignedSlot ? parent.assignedSlot : parent.parentNode;
           if (parent && parent.nodeType === 11) {
+            matches = null;
             parent = parent.host;
           }
-        } while (parent && !axe.utils.matchesSelector(parent, target) && parent !== document.documentElement);
-        if (!parent) {
-          return null;
-        }
-        if (!axe.utils.matchesSelector(parent, target)) {
-          return null;
-        }
+          if (!matches) {
+            doc = axe.commons.dom.getRootNode(parent);
+            matches = doc.querySelectorAll(target);
+            matches = axe.utils.toArray(matches);
+            if (doc === document && !matches.length) {
+              return null;
+            }
+          }
+        } while (parent && !matches.includes(parent));
         return parent;
       };
       dom.getComposedParent = function getComposedParent(element) {
@@ -15066,21 +8675,16 @@
       };
       dom.getElementByReference = function(node, attr) {
         var fragment = node.getAttribute(attr);
-        if (!fragment) {
-          return null;
-        }
-        if (fragment.charAt(0) === '#') {
-          fragment = decodeURIComponent(fragment.substring(1));
-        } else if (fragment.substr(0, 2) === '/#') {
-          fragment = decodeURIComponent(fragment.substring(2));
-        }
-        var candidate = document.getElementById(fragment);
-        if (candidate) {
-          return candidate;
-        }
-        candidate = document.getElementsByName(fragment);
-        if (candidate.length) {
-          return candidate[0];
+        if (fragment && fragment.charAt(0) === '#') {
+          fragment = fragment.substring(1);
+          var candidate = document.getElementById(fragment);
+          if (candidate) {
+            return candidate;
+          }
+          candidate = document.getElementsByName(fragment);
+          if (candidate.length) {
+            return candidate[0];
+          }
         }
         return null;
       };
@@ -15096,7 +8700,13 @@
           height: coords.bottom - coords.top
         };
       };
-      dom.getRootNode = axe.utils.getRootNode;
+      dom.getRootNode = function(node) {
+        var doc = node.getRootNode && node.getRootNode() || document;
+        if (doc === node) {
+          doc = document;
+        }
+        return doc;
+      };
       dom.getScrollOffset = function(element) {
         'use strict';
         if (!element.nodeType && element.document) {
@@ -15114,16 +8724,6 @@
           top: element.scrollTop
         };
       };
-      dom.getTabbableElements = function getTabbableElements(virtualNode) {
-        var nodeAndDescendents = axe.utils.querySelectorAll(virtualNode, '*');
-        var tabbableElements = nodeAndDescendents.filter(function(vNode) {
-          var isFocusable = vNode.isFocusable;
-          var tabIndex = vNode.actualNode.getAttribute('tabindex');
-          tabIndex = tabIndex && !isNaN(parseInt(tabIndex, 10)) ? parseInt(tabIndex) : null;
-          return tabIndex ? isFocusable && tabIndex >= 0 : isFocusable;
-        });
-        return tabbableElements;
-      };
       dom.getViewportSize = function(win) {
         'use strict';
         var body, doc = win.document, docElement = doc.documentElement;
@@ -15148,21 +8748,20 @@
       var hiddenTextElms = [ 'HEAD', 'TITLE', 'TEMPLATE', 'SCRIPT', 'STYLE', 'IFRAME', 'OBJECT', 'VIDEO', 'AUDIO', 'NOSCRIPT' ];
       function hasChildTextNodes(elm) {
         if (!hiddenTextElms.includes(elm.actualNode.nodeName.toUpperCase())) {
-          return elm.children.some(function(_ref28) {
-            var actualNode = _ref28.actualNode;
+          return elm.children.some(function(_ref9) {
+            var actualNode = _ref9.actualNode;
             return actualNode.nodeType === 3 && actualNode.nodeValue.trim();
           });
         }
       }
-      dom.hasContentVirtual = function(elm, noRecursion, ignoreAria) {
-        return hasChildTextNodes(elm) || dom.isVisualContent(elm.actualNode) || !!ignoreAria || !!aria.labelVirtual(elm) || !noRecursion && elm.children.some(function(child) {
-          return child.actualNode.nodeType === 1 && dom.hasContentVirtual(child);
+      dom.hasContent = function hasContent(elm, noRecursion) {
+        if (!elm.actualNode) {
+          elm = axe.utils.getNodeFromTree(axe._tree[0], elm);
+        }
+        return hasChildTextNodes(elm) || dom.isVisualContent(elm.actualNode) || !!aria.label(elm) || !noRecursion && elm.children.some(function(child) {
+          return child.actualNode.nodeType === 1 && dom.hasContent(child);
         });
       };
-      dom.hasContent = function hasContent(elm, noRecursion, ignoreAria) {
-        elm = axe.utils.getNodeFromTree(elm);
-        return dom.hasContentVirtual(elm, noRecursion, ignoreAria);
-      };
       dom.idrefs = function(node, attr) {
         'use strict';
         var index, length, doc = dom.getRootNode(node), result = [], idrefs = node.getAttribute(attr);
@@ -15174,25 +8773,9 @@
         }
         return result;
       };
-      function focusDisabled(el) {
-        return el.disabled || dom.isHiddenWithCSS(el) && el.nodeName.toUpperCase() !== 'AREA';
-      }
       dom.isFocusable = function(el) {
         'use strict';
-        if (focusDisabled(el)) {
-          return false;
-        } else if (dom.isNativelyFocusable(el)) {
-          return true;
-        }
-        var tabindex = el.getAttribute('tabindex');
-        if (tabindex && !isNaN(parseInt(tabindex, 10))) {
-          return true;
-        }
-        return false;
-      };
-      dom.isNativelyFocusable = function(el) {
-        'use strict';
-        if (!el || focusDisabled(el)) {
+        if (!el || el.disabled || !dom.isVisible(el) && el.nodeName.toUpperCase() !== 'AREA') {
           return false;
         }
         switch (el.nodeName.toUpperCase()) {
@@ -15212,41 +8795,10 @@
          case 'BUTTON':
           return true;
         }
-        return false;
-      };
-      dom.insertedIntoFocusOrder = function(el) {
-        return el.tabIndex > -1 && dom.isFocusable(el) && !dom.isNativelyFocusable(el);
-      };
-      dom.isHiddenWithCSS = function isHiddenWithCSS(el, descendentVisibilityValue) {
-        if (el.nodeType === 9) {
-          return false;
-        }
-        if (el.nodeType === 11) {
-          el = el.host;
-        }
-        if ([ 'STYLE', 'SCRIPT' ].includes(el.nodeName.toUpperCase())) {
-          return false;
-        }
-        var style = window.getComputedStyle(el, null);
-        if (!style) {
-          throw new Error('Style does not exist for the given element.');
-        }
-        var displayValue = style.getPropertyValue('display');
-        if (displayValue === 'none') {
+        var tabindex = el.getAttribute('tabindex');
+        if (tabindex && !isNaN(parseInt(tabindex, 10))) {
           return true;
         }
-        var HIDDEN_VISIBILITY_VALUES = [ 'hidden', 'collapse' ];
-        var visibilityValue = style.getPropertyValue('visibility');
-        if (HIDDEN_VISIBILITY_VALUES.includes(visibilityValue) && !descendentVisibilityValue) {
-          return true;
-        }
-        if (HIDDEN_VISIBILITY_VALUES.includes(visibilityValue) && descendentVisibilityValue && HIDDEN_VISIBILITY_VALUES.includes(descendentVisibilityValue)) {
-          return true;
-        }
-        var parent = dom.getComposedParent(el);
-        if (parent && !HIDDEN_VISIBILITY_VALUES.includes(visibilityValue)) {
-          return dom.isHiddenWithCSS(parent, visibilityValue);
-        }
         return false;
       };
       dom.isHTML5 = function(doc) {
@@ -15273,7 +8825,7 @@
         while (parentBlock && !isBlock(parentBlock)) {
           parentBlock = dom.getComposedParent(parentBlock);
         }
-        return axe.utils.getNodeFromTree(parentBlock);
+        return axe.utils.getNodeFromTree(axe._tree[0], parentBlock);
       }
       dom.isInTextBlock = function isInTextBlock(node) {
         if (isBlock(node)) {
@@ -15301,7 +8853,7 @@
             } else {
               inBrBlock = 2;
             }
-          } else if (currNode.style.display === 'none' || currNode.style.overflow === 'hidden' || ![ '', null, 'none' ].includes(currNode.style['float']) || ![ '', null, 'relative' ].includes(currNode.style.position)) {
+          } else if (currNode.style.display === 'none' || currNode.style.overflow === 'hidden' || ![ '', null, 'none' ].includes(currNode.style.float) || ![ '', null, 'relative' ].includes(currNode.style.position)) {
             return false;
           } else if (nodeName === 'A' && currNode.href || (currNode.getAttribute('role') || '').toLowerCase() === 'link') {
             if (currNode === node) {
@@ -15315,29 +8867,26 @@
         linkText = axe.commons.text.sanitize(linkText);
         return parentText.length > linkText.length;
       };
-      dom.isNode = function(element) {
+      dom.isNode = function(candidate) {
         'use strict';
-        return element instanceof Node;
+        return candidate instanceof Node;
       };
-      function noParentScrolled(element, offset) {
-        element = dom.getComposedParent(element);
-        while (element && element.nodeName.toLowerCase() !== 'html') {
-          if (element.scrollTop) {
-            offset += element.scrollTop;
-            if (offset >= 0) {
-              return false;
-            }
-          }
-          element = dom.getComposedParent(element);
-        }
-        return true;
-      }
       dom.isOffscreen = function(element) {
-        var leftBoundary;
-        var docElement = document.documentElement;
-        var styl = window.getComputedStyle(element);
-        var dir = window.getComputedStyle(document.body || docElement).getPropertyValue('direction');
-        var coords = dom.getElementCoordinates(element);
+        'use strict';
+        var noParentScrolled = function noParentScrolled(element, offset) {
+          element = element.parentNode;
+          while (element.nodeName.toLowerCase() !== 'html') {
+            if (element.scrollTop) {
+              offset += element.scrollTop;
+              if (offset >= 0) {
+                return false;
+              }
+            }
+            element = element.parentNode;
+          }
+          return true;
+        };
+        var leftBoundary, docElement = document.documentElement, styl = window.getComputedStyle(element), dir = window.getComputedStyle(document.body || docElement).getPropertyValue('direction'), coords = dom.getElementCoordinates(element);
         if (coords.bottom < 0 && (noParentScrolled(element, coords.bottom) || styl.position === 'absolute')) {
           return true;
         }
@@ -15356,23 +8905,6 @@
         }
         return false;
       };
-      var isInternalLinkRegex = /^\/?#[^/!]/;
-      dom.isSkipLink = function(element) {
-        if (!isInternalLinkRegex.test(element.getAttribute('href'))) {
-          return false;
-        }
-        var firstPageLink;
-        if (typeof axe._cache.get('firstPageLink') !== 'undefined') {
-          firstPageLink = axe._cache.get('firstPageLink');
-        } else {
-          firstPageLink = axe.utils.querySelectorAll(axe._tree, 'a:not([href^="#"]):not([href^="/#"]):not([href^="javascript"])')[0];
-          axe._cache.set('firstPageLink', firstPageLink || null);
-        }
-        if (!firstPageLink) {
-          return true;
-        }
-        return element.compareDocumentPosition(firstPageLink.actualNode) === element.DOCUMENT_POSITION_FOLLOWING;
-      };
       function isClipped(clip) {
         'use strict';
         var matches = clip.match(/rect\s*\(([0-9]+)px,?\s*([0-9]+)px,?\s*([0-9]+)px,?\s*([0-9]+)px\s*\)/);
@@ -15383,42 +8915,34 @@
       }
       dom.isVisible = function(el, screenReader, recursed) {
         'use strict';
-        var node = axe.utils.getNodeFromTree(el);
-        var cacheName = '_isVisible' + (screenReader ? 'ScreenReader' : '');
+        var style, nodeName, parent;
         if (el.nodeType === 9) {
           return true;
         }
         if (el.nodeType === 11) {
           el = el.host;
         }
-        if (node && typeof node[cacheName] !== 'undefined') {
-          return node[cacheName];
-        }
-        var style = window.getComputedStyle(el, null);
+        style = window.getComputedStyle(el, null);
         if (style === null) {
           return false;
         }
-        var nodeName = el.nodeName.toUpperCase();
-        if (style.getPropertyValue('display') === 'none' || [ 'STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE' ].includes(nodeName) || !screenReader && isClipped(style.getPropertyValue('clip')) || !recursed && (style.getPropertyValue('visibility') === 'hidden' || !screenReader && dom.isOffscreen(el)) || screenReader && el.getAttribute('aria-hidden') === 'true') {
+        nodeName = el.nodeName.toUpperCase();
+        if (style.getPropertyValue('display') === 'none' || nodeName.toUpperCase() === 'STYLE' || nodeName.toUpperCase() === 'SCRIPT' || !screenReader && isClipped(style.getPropertyValue('clip')) || !recursed && (style.getPropertyValue('visibility') === 'hidden' || !screenReader && dom.isOffscreen(el)) || screenReader && el.getAttribute('aria-hidden') === 'true') {
           return false;
         }
-        var parent = el.assignedSlot ? el.assignedSlot : el.parentNode;
-        var isVisible = false;
+        parent = el.assignedSlot ? el.assignedSlot : el.parentNode;
         if (parent) {
-          isVisible = dom.isVisible(parent, screenReader, true);
+          return dom.isVisible(parent, screenReader, true);
         }
-        if (node) {
-          node[cacheName] = isVisible;
-        }
-        return isVisible;
+        return false;
       };
       var visualRoles = [ 'checkbox', 'img', 'radio', 'range', 'slider', 'spinbutton', 'textbox' ];
-      dom.isVisualContent = function(element) {
-        var role = element.getAttribute('role');
+      dom.isVisualContent = function(candidate) {
+        var role = candidate.getAttribute('role');
         if (role) {
           return visualRoles.indexOf(role) !== -1;
         }
-        switch (element.nodeName.toUpperCase()) {
+        switch (candidate.tagName.toUpperCase()) {
          case 'IMG':
          case 'IFRAME':
          case 'OBJECT':
@@ -15436,33 +8960,12 @@
           return true;
 
          case 'INPUT':
-          return element.type !== 'hidden';
+          return candidate.type !== 'hidden';
 
          default:
           return false;
         }
       };
-      dom.shadowElementsFromPoint = function(nodeX, nodeY) {
-        var root = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;
-        var i = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
-        if (i > 999) {
-          throw new Error('Infinite loop detected');
-        }
-        return Array.from(root.elementsFromPoint(nodeX, nodeY)).filter(function(nodes) {
-          return dom.getRootNode(nodes) === root;
-        }).reduce(function(stack, elm) {
-          if (axe.utils.isShadowRoot(elm)) {
-            var shadowStack = dom.shadowElementsFromPoint(nodeX, nodeY, elm.shadowRoot, i + 1);
-            stack = stack.concat(shadowStack);
-            if (stack.length && axe.commons.dom.visuallyContains(stack[0], elm)) {
-              stack.push(elm);
-            }
-          } else {
-            stack.push(elm);
-          }
-          return stack;
-        }, []);
-      };
       dom.visuallyContains = function(node, parent) {
         var rectBound = node.getBoundingClientRect();
         var margin = .01;
@@ -15512,114 +9015,6 @@
         }
         return true;
       };
-      forms.isAriaCombobox = function(node) {
-        var role = axe.commons.aria.getRole(node, {
-          noImplicit: true
-        });
-        return role === 'combobox';
-      };
-      forms.isAriaListbox = function(node) {
-        var role = axe.commons.aria.getRole(node, {
-          noImplicit: true
-        });
-        return role === 'listbox';
-      };
-      var rangeRoles = [ 'progressbar', 'scrollbar', 'slider', 'spinbutton' ];
-      forms.isAriaRange = function(node) {
-        var role = axe.commons.aria.getRole(node, {
-          noImplicit: true
-        });
-        return rangeRoles.includes(role);
-      };
-      forms.isAriaTextbox = function(node) {
-        var role = axe.commons.aria.getRole(node, {
-          noImplicit: true
-        });
-        return role === 'textbox';
-      };
-      forms.isNativeSelect = function(node) {
-        var nodeName = node.nodeName.toUpperCase();
-        return nodeName === 'SELECT';
-      };
-      var nonTextInputTypes = [ 'button', 'checkbox', 'color', 'file', 'hidden', 'image', 'password', 'radio', 'reset', 'submit' ];
-      forms.isNativeTextbox = function(node) {
-        var nodeName = node.nodeName.toUpperCase();
-        return nodeName === 'TEXTAREA' || nodeName === 'INPUT' && !nonTextInputTypes.includes(node.type);
-      };
-      matches.attributes = function matchesAttributes(node, matcher) {
-        node = node.actualNode || node;
-        return matches.fromFunction(function(attrName) {
-          return node.getAttribute(attrName);
-        }, matcher);
-      };
-      matches.condition = function(arg, condition) {
-        return !!condition(arg);
-      };
-      var matchers = [ 'nodeName', 'attributes', 'properties', 'condition' ];
-      matches.fromDefinition = function matchFromDefinition(node, definition) {
-        node = node.actualNode || node;
-        if (Array.isArray(definition)) {
-          return definition.some(function(definitionItem) {
-            return matches(node, definitionItem);
-          });
-        }
-        if (typeof definition === 'string') {
-          return axe.utils.matchesSelector(node, definition);
-        }
-        return Object.keys(definition).every(function(matcherName) {
-          if (!matchers.includes(matcherName)) {
-            throw new Error('Unknown matcher type "'.concat(matcherName, '"'));
-          }
-          var matchMethod = matches[matcherName];
-          var matcher = definition[matcherName];
-          return matchMethod(node, matcher);
-        });
-      };
-      matches.fromFunction = function matchFromFunction(getValue, matcher) {
-        var matcherType = _typeof(matcher);
-        if (matcherType !== 'object' || Array.isArray(matcher) || matcher instanceof RegExp) {
-          throw new Error('Expect matcher to be an object');
-        }
-        return Object.keys(matcher).every(function(propName) {
-          return matches.fromPrimative(getValue(propName), matcher[propName]);
-        });
-      };
-      matches.fromPrimative = function matchFromPrimative(someString, matcher) {
-        var matcherType = _typeof(matcher);
-        if (Array.isArray(matcher) && typeof someString !== 'undefined') {
-          return matcher.includes(someString);
-        }
-        if (matcherType === 'function') {
-          return !!matcher(someString);
-        }
-        if (matcher instanceof RegExp) {
-          return matcher.test(someString);
-        }
-        return matcher === someString;
-      };
-      var isXHTMLGlobal;
-      matches.nodeName = function matchNodeName(node, matcher) {
-        var _ref29 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, isXHTML = _ref29.isXHTML;
-        node = node.actualNode || node;
-        if (typeof isXHTML === 'undefined') {
-          if (typeof matcher === 'string') {
-            return axe.utils.matchesSelector(node, matcher);
-          }
-          if (typeof isXHTMLGlobal === 'undefined') {
-            isXHTMLGlobal = axe.utils.isXHTML(node.ownerDocument);
-          }
-          isXHTML = isXHTMLGlobal;
-        }
-        var nodeName = isXHTML ? node.nodeName : node.nodeName.toLowerCase();
-        return matches.fromPrimative(nodeName, matcher);
-      };
-      matches.properties = function matchesProperties(node, matcher) {
-        node = node.actualNode || node;
-        var out = matches.fromFunction(function(propName) {
-          return node[propName];
-        }, matcher);
-        return out;
-      };
       table.getAllCells = function(tableElm) {
         var rowIndex, cellIndex, rowLength, cellLength;
         var cells = [];
@@ -15687,29 +9082,24 @@
         var headerCol = tableGrid.map(function(col) {
           return col[pos.x];
         }).reduce(function(headerCol, cell) {
-          return headerCol && cell && cell.nodeName.toUpperCase() === 'TH';
+          return headerCol && cell.nodeName.toUpperCase() === 'TH';
         }, true);
         if (headerCol) {
           return 'row';
         }
         return 'auto';
       };
-      table.isColumnHeader = function(element) {
-        return [ 'col', 'auto' ].indexOf(table.getScope(element)) !== -1;
+      table.isColumnHeader = function(node) {
+        return [ 'col', 'auto' ].indexOf(table.getScope(node)) !== -1;
       };
       table.isDataCell = function(cell) {
         if (!cell.children.length && !cell.textContent.trim()) {
           return false;
         }
-        var role = cell.getAttribute('role');
-        if (axe.commons.aria.isValidRole(role)) {
-          return [ 'cell', 'gridcell' ].includes(role);
-        } else {
-          return cell.nodeName.toUpperCase() === 'TD';
-        }
+        return cell.nodeName.toUpperCase() === 'TD';
       };
       table.isDataTable = function(node) {
-        var role = (node.getAttribute('role') || '').toLowerCase();
+        var role = node.getAttribute('role');
         if ((role === 'presentation' || role === 'none') && !dom.isFocusable(node)) {
           return false;
         }
@@ -15753,7 +9143,7 @@
             if (cell.getAttribute('scope') || cell.getAttribute('headers') || cell.getAttribute('abbr')) {
               return true;
             }
-            if ([ 'columnheader', 'rowheader' ].includes((cell.getAttribute('role') || '').toLowerCase())) {
+            if ([ 'columnheader', 'rowheader' ].indexOf(cell.getAttribute('role')) !== -1) {
               return true;
             }
             if (cell.children.length === 1 && cell.children[0].nodeName.toUpperCase() === 'ABBR') {
@@ -15812,12 +9202,12 @@
         }
         if (cell.getAttribute('id')) {
           var id = axe.utils.escapeSelector(cell.getAttribute('id'));
-          return !!document.querySelector('[headers~="'.concat(id, '"]'));
+          return !!document.querySelector('[headers~="' + id + '"]');
         }
         return false;
       };
-      table.isRowHeader = function(cell) {
-        return [ 'row', 'auto' ].includes(table.getScope(cell));
+      table.isRowHeader = function(node) {
+        return [ 'row', 'auto' ].indexOf(table.getScope(node)) !== -1;
       };
       table.toGrid = function(node) {
         var table = [];
@@ -15908,514 +9298,279 @@
           }, tableGrid, callback);
         };
       })(table);
-      text.accessibleText = function accessibleText(element, context) {
-        var virtualNode = axe.utils.getNodeFromTree(element);
-        return text.accessibleTextVirtual(virtualNode, context);
+      var defaultButtonValues = {
+        submit: 'Submit',
+        reset: 'Reset'
       };
-      text.accessibleTextVirtual = function accessibleTextVirtual(virtualNode) {
-        var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-        var actualNode = virtualNode.actualNode;
-        context = prepareContext(virtualNode, context);
-        if (shouldIgnoreHidden(virtualNode, context)) {
-          return '';
+      var inputTypes = [ 'text', 'search', 'tel', 'url', 'email', 'date', 'time', 'number', 'range', 'color' ];
+      var phrasingElements = [ 'A', 'EM', 'STRONG', 'SMALL', 'MARK', 'ABBR', 'DFN', 'I', 'B', 'S', 'U', 'CODE', 'VAR', 'SAMP', 'KBD', 'SUP', 'SUB', 'Q', 'CITE', 'SPAN', 'BDO', 'BDI', 'BR', 'WBR', 'INS', 'DEL', 'IMG', 'EMBED', 'OBJECT', 'IFRAME', 'MAP', 'AREA', 'SCRIPT', 'NOSCRIPT', 'RUBY', 'VIDEO', 'AUDIO', 'INPUT', 'TEXTAREA', 'SELECT', 'BUTTON', 'LABEL', 'OUTPUT', 'DATALIST', 'KEYGEN', 'PROGRESS', 'COMMAND', 'CANVAS', 'TIME', 'METER' ];
+      function findLabel(_ref10) {
+        var actualNode = _ref10.actualNode;
+        var label = void 0;
+        if (actualNode.id) {
+          label = dom.findElmsInContext({
+            elm: 'label',
+            attr: 'for',
+            value: actualNode.id,
+            context: actualNode
+          })[0];
+        } else {
+          label = dom.findUp(actualNode, 'label');
         }
-        var computationSteps = [ aria.arialabelledbyText, aria.arialabelText, text.nativeTextAlternative, text.formControlValue, text.subtreeText, textNodeContent, text.titleText ];
-        var accName = computationSteps.reduce(function(accName, step) {
-          if (context.startNode === virtualNode) {
-            accName = text.sanitize(accName);
+        return axe.utils.getNodeFromTree(axe._tree[0], label);
+      }
+      function isButton(_ref11) {
+        var actualNode = _ref11.actualNode;
+        return [ 'button', 'reset', 'submit' ].includes(actualNode.type.toLowerCase());
+      }
+      function isInput(_ref12) {
+        var actualNode = _ref12.actualNode;
+        var nodeName = actualNode.nodeName.toUpperCase();
+        return nodeName === 'TEXTAREA' || nodeName === 'SELECT' || nodeName === 'INPUT' && actualNode.type.toLowerCase() !== 'hidden';
+      }
+      function shouldCheckSubtree(_ref13) {
+        var actualNode = _ref13.actualNode;
+        return [ 'BUTTON', 'SUMMARY', 'A' ].includes(actualNode.nodeName.toUpperCase());
+      }
+      function shouldNeverCheckSubtree(_ref14) {
+        var actualNode = _ref14.actualNode;
+        return [ 'TABLE', 'FIGURE' ].includes(actualNode.nodeName.toUpperCase());
+      }
+      function formValueText(_ref15) {
+        var actualNode = _ref15.actualNode;
+        var nodeName = actualNode.nodeName.toUpperCase();
+        if (nodeName === 'INPUT') {
+          if (!actualNode.hasAttribute('type') || inputTypes.includes(actualNode.type.toLowerCase())) {
+            return actualNode.value;
           }
-          if (accName !== '') {
-            return accName;
+          return '';
+        }
+        if (nodeName === 'SELECT') {
+          var opts = actualNode.options;
+          if (opts && opts.length) {
+            var returnText = '';
+            for (var i = 0; i < opts.length; i++) {
+              if (opts[i].selected) {
+                returnText += ' ' + opts[i].text;
+              }
+            }
+            return text.sanitize(returnText);
           }
-          return step(virtualNode, context);
-        }, '');
-        if (context.debug) {
-          axe.log(accName || '{empty-value}', actualNode, context);
-        }
-        return accName;
-      };
-      function textNodeContent(_ref30) {
-        var actualNode = _ref30.actualNode;
-        if (actualNode.nodeType !== 3) {
           return '';
         }
-        return actualNode.textContent;
-      }
-      function shouldIgnoreHidden(_ref31, context) {
-        var actualNode = _ref31.actualNode;
-        if (actualNode.nodeType !== 1 || context.includeHidden) {
-          return false;
-        }
-        return !dom.isVisible(actualNode, true);
-      }
-      function prepareContext(virtualNode, context) {
-        var actualNode = virtualNode.actualNode;
-        if (!context.startNode) {
-          context = _extends({
-            startNode: virtualNode
-          }, context);
-        }
-        if (actualNode.nodeType === 1 && context.inLabelledByContext && context.includeHidden === undefined) {
-          context = _extends({
-            includeHidden: !dom.isVisible(actualNode, true)
-          }, context);
-        }
-        return context;
-      }
-      text.accessibleTextVirtual.alreadyProcessed = function alreadyProcessed(virtualnode, context) {
-        context.processed = context.processed || [];
-        if (context.processed.includes(virtualnode)) {
-          return true;
-        }
-        context.processed.push(virtualnode);
-        return false;
-      };
-      var controlValueRoles = [ 'textbox', 'progressbar', 'scrollbar', 'slider', 'spinbutton', 'combobox', 'listbox' ];
-      text.formControlValueMethods = {
-        nativeTextboxValue: nativeTextboxValue,
-        nativeSelectValue: nativeSelectValue,
-        ariaTextboxValue: ariaTextboxValue,
-        ariaListboxValue: ariaListboxValue,
-        ariaComboboxValue: ariaComboboxValue,
-        ariaRangeValue: ariaRangeValue
-      };
-      text.formControlValue = function formControlValue(virtualNode) {
-        var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-        var actualNode = virtualNode.actualNode;
-        var unsupported = text.unsupported.accessibleNameFromFieldValue || [];
-        var role = aria.getRole(actualNode);
-        if (context.startNode === virtualNode || !controlValueRoles.includes(role) || unsupported.includes(role)) {
-          return '';
-        }
-        var valueMethods = Object.keys(text.formControlValueMethods).map(function(name) {
-          return text.formControlValueMethods[name];
-        });
-        var valueString = valueMethods.reduce(function(accName, step) {
-          return accName || step(virtualNode, context);
-        }, '');
-        if (context.debug) {
-          axe.log(valueString || '{empty-value}', actualNode, context);
-        }
-        return valueString;
-      };
-      function nativeTextboxValue(node) {
-        node = node.actualNode || node;
-        if (axe.commons.forms.isNativeTextbox(node)) {
-          return node.value || '';
+        if (nodeName === 'TEXTAREA' && actualNode.value) {
+          return actualNode.value;
         }
         return '';
       }
-      function nativeSelectValue(node) {
-        node = node.actualNode || node;
-        if (!axe.commons.forms.isNativeSelect(node)) {
-          return '';
+      function checkDescendant(_ref16, nodeName) {
+        var actualNode = _ref16.actualNode;
+        var candidate = actualNode.querySelector(nodeName.toLowerCase());
+        if (candidate) {
+          return text.accessibleText(candidate);
         }
-        return Array.from(node.options).filter(function(option) {
-          return option.selected;
-        }).map(function(option) {
-          return option.text;
-        }).join(' ') || '';
+        return '';
       }
-      function ariaTextboxValue(virtualNode) {
-        var actualNode = virtualNode.actualNode;
-        if (!axe.commons.forms.isAriaTextbox(actualNode)) {
-          return '';
+      function isEmbeddedControl(elm) {
+        if (!elm) {
+          return false;
         }
-        if (!dom.isHiddenWithCSS(actualNode)) {
-          return text.visibleVirtual(virtualNode, true);
-        } else {
-          return actualNode.textContent;
-        }
-      }
-      function ariaListboxValue(virtualNode, context) {
-        var actualNode = virtualNode.actualNode;
-        if (!axe.commons.forms.isAriaListbox(actualNode)) {
-          return '';
-        }
-        var selected = aria.getOwnedVirtual(virtualNode).filter(function(owned) {
-          return aria.getRole(owned) === 'option' && owned.actualNode.getAttribute('aria-selected') === 'true';
-        });
-        if (selected.length === 0) {
-          return '';
-        }
-        return axe.commons.text.accessibleTextVirtual(selected[0], context);
-      }
-      function ariaComboboxValue(virtualNode, context) {
-        var actualNode = virtualNode.actualNode;
-        var listbox;
-        if (!axe.commons.forms.isAriaCombobox(actualNode)) {
-          return '';
-        }
-        listbox = aria.getOwnedVirtual(virtualNode).filter(function(elm) {
-          return aria.getRole(elm) === 'listbox';
-        })[0];
-        return listbox ? text.formControlValueMethods.ariaListboxValue(listbox, context) : '';
-      }
-      function ariaRangeValue(node) {
-        node = node.actualNode || node;
-        if (!axe.commons.forms.isAriaRange(node) || !node.hasAttribute('aria-valuenow')) {
-          return '';
-        }
-        var valueNow = +node.getAttribute('aria-valuenow');
-        return !isNaN(valueNow) ? String(valueNow) : '0';
-      }
-      text.isHumanInterpretable = function(str) {
-        if (!str.length) {
-          return 0;
-        }
-        var alphaNumericIconMap = [ 'x', 'i' ];
-        if (alphaNumericIconMap.includes(str)) {
-          return 0;
-        }
-        var noUnicodeStr = text.removeUnicode(str, {
-          emoji: true,
-          nonBmp: true,
-          punctuations: true
-        });
-        if (!text.sanitize(noUnicodeStr)) {
-          return 0;
-        }
-        return 1;
-      };
-      var autocomplete = {
-        stateTerms: [ 'on', 'off' ],
-        standaloneTerms: [ 'name', 'honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix', 'nickname', 'username', 'new-password', 'current-password', 'organization-title', 'organization', 'street-address', 'address-line1', 'address-line2', 'address-line3', 'address-level4', 'address-level3', 'address-level2', 'address-level1', 'country', 'country-name', 'postal-code', 'cc-name', 'cc-given-name', 'cc-additional-name', 'cc-family-name', 'cc-number', 'cc-exp', 'cc-exp-month', 'cc-exp-year', 'cc-csc', 'cc-type', 'transaction-currency', 'transaction-amount', 'language', 'bday', 'bday-day', 'bday-month', 'bday-year', 'sex', 'url', 'photo' ],
-        qualifiers: [ 'home', 'work', 'mobile', 'fax', 'pager' ],
-        qualifiedTerms: [ 'tel', 'tel-country-code', 'tel-national', 'tel-area-code', 'tel-local', 'tel-local-prefix', 'tel-local-suffix', 'tel-extension', 'email', 'impp' ],
-        locations: [ 'billing', 'shipping' ]
-      };
-      text.autocomplete = autocomplete;
-      text.isValidAutocomplete = function isValidAutocomplete(autocomplete) {
-        var _ref32 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref32$looseTyped = _ref32.looseTyped, looseTyped = _ref32$looseTyped === void 0 ? false : _ref32$looseTyped, _ref32$stateTerms = _ref32.stateTerms, stateTerms = _ref32$stateTerms === void 0 ? [] : _ref32$stateTerms, _ref32$locations = _ref32.locations, locations = _ref32$locations === void 0 ? [] : _ref32$locations, _ref32$qualifiers = _ref32.qualifiers, qualifiers = _ref32$qualifiers === void 0 ? [] : _ref32$qualifiers, _ref32$standaloneTerm = _ref32.standaloneTerms, standaloneTerms = _ref32$standaloneTerm === void 0 ? [] : _ref32$standaloneTerm, _ref32$qualifiedTerms = _ref32.qualifiedTerms, qualifiedTerms = _ref32$qualifiedTerms === void 0 ? [] : _ref32$qualifiedTerms;
-        autocomplete = autocomplete.toLowerCase().trim();
-        stateTerms = stateTerms.concat(text.autocomplete.stateTerms);
-        if (stateTerms.includes(autocomplete) || autocomplete === '') {
+        var actualNode = elm.actualNode;
+        switch (actualNode.nodeName.toUpperCase()) {
+         case 'SELECT':
+         case 'TEXTAREA':
           return true;
+
+         case 'INPUT':
+          return !actualNode.hasAttribute('type') || inputTypes.includes(actualNode.getAttribute('type').toLowerCase());
+
+         default:
+          return false;
         }
-        qualifiers = qualifiers.concat(text.autocomplete.qualifiers);
-        locations = locations.concat(text.autocomplete.locations);
-        standaloneTerms = standaloneTerms.concat(text.autocomplete.standaloneTerms);
-        qualifiedTerms = qualifiedTerms.concat(text.autocomplete.qualifiedTerms);
-        var autocompleteTerms = autocomplete.split(/\s+/g);
-        if (!looseTyped) {
-          if (autocompleteTerms[0].length > 8 && autocompleteTerms[0].substr(0, 8) === 'section-') {
-            autocompleteTerms.shift();
-          }
-          if (locations.includes(autocompleteTerms[0])) {
-            autocompleteTerms.shift();
-          }
-          if (qualifiers.includes(autocompleteTerms[0])) {
-            autocompleteTerms.shift();
-            standaloneTerms = [];
-          }
-          if (autocompleteTerms.length !== 1) {
-            return false;
-          }
+      }
+      function shouldCheckAlt(_ref17) {
+        var actualNode = _ref17.actualNode;
+        var nodeName = actualNode.nodeName.toUpperCase();
+        return [ 'IMG', 'APPLET', 'AREA' ].includes(nodeName) || nodeName === 'INPUT' && actualNode.type.toLowerCase() === 'image';
+      }
+      function nonEmptyText(t) {
+        return !!text.sanitize(t);
+      }
+      text.accessibleText = function(element, inLabelledByContext) {
+        var accessibleNameComputation = void 0;
+        var encounteredNodes = [];
+        if (element instanceof Node) {
+          element = axe.utils.getNodeFromTree(axe._tree[0], element);
         }
-        var purposeTerm = autocompleteTerms[autocompleteTerms.length - 1];
-        return standaloneTerms.includes(purposeTerm) || qualifiedTerms.includes(purposeTerm);
-      };
-      text.labelText = function labelText(virtualNode) {
-        var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-        var alreadyProcessed = text.accessibleTextVirtual.alreadyProcessed;
-        if (context.inControlContext || context.inLabelledByContext || alreadyProcessed(virtualNode, context)) {
+        function getInnerText(element, inLabelledByContext, inControlContext) {
+          return element.children.reduce(function(returnText, child) {
+            var actualNode = child.actualNode;
+            if (actualNode.nodeType === 3) {
+              returnText += actualNode.nodeValue;
+            } else if (actualNode.nodeType === 1) {
+              if (!phrasingElements.includes(actualNode.nodeName.toUpperCase())) {
+                returnText += ' ';
+              }
+              returnText += accessibleNameComputation(child, inLabelledByContext, inControlContext);
+            }
+            return returnText;
+          }, '');
+        }
+        function checkNative(element, inLabelledByContext, inControlContext) {
+          var returnText = '';
+          var actualNode = element.actualNode;
+          var nodeName = actualNode.nodeName.toUpperCase();
+          if (shouldCheckSubtree(element)) {
+            returnText = getInnerText(element, false, false) || '';
+            if (nonEmptyText(returnText)) {
+              return returnText;
+            }
+          }
+          if (nodeName === 'FIGURE') {
+            returnText = checkDescendant(element, 'figcaption');
+            if (nonEmptyText(returnText)) {
+              return returnText;
+            }
+          }
+          if (nodeName === 'TABLE') {
+            returnText = checkDescendant(element, 'caption');
+            if (nonEmptyText(returnText)) {
+              return returnText;
+            }
+            returnText = actualNode.getAttribute('title') || actualNode.getAttribute('summary') || '';
+            if (nonEmptyText(returnText)) {
+              return returnText;
+            }
+          }
+          if (shouldCheckAlt(element)) {
+            return actualNode.getAttribute('alt') || '';
+          }
+          if (isInput(element) && !inControlContext) {
+            if (isButton(element)) {
+              return actualNode.value || actualNode.title || defaultButtonValues[actualNode.type] || '';
+            }
+            var labelElement = findLabel(element);
+            if (labelElement) {
+              return accessibleNameComputation(labelElement, inLabelledByContext, true);
+            }
+          }
           return '';
         }
-        if (!context.startNode) {
-          context.startNode = virtualNode;
+        function checkARIA(element, inLabelledByContext, inControlContext) {
+          var returnText = '';
+          var actualNode = element.actualNode;
+          if (!inLabelledByContext && actualNode.hasAttribute('aria-labelledby')) {
+            returnText = text.sanitize(dom.idrefs(actualNode, 'aria-labelledby').map(function(label) {
+              if (label !== null) {
+                if (actualNode === label) {
+                  encounteredNodes.pop();
+                }
+                var vLabel = axe.utils.getNodeFromTree(axe._tree[0], label);
+                return accessibleNameComputation(vLabel, true, actualNode !== label);
+              } else {
+                return '';
+              }
+            }).join(' '));
+          }
+          if (!returnText && !(inControlContext && isEmbeddedControl(element)) && actualNode.hasAttribute('aria-label')) {
+            return text.sanitize(actualNode.getAttribute('aria-label'));
+          }
+          return returnText;
         }
-        var labelContext = _extends({
-          inControlContext: true
-        }, context);
-        var explicitLabels = getExplicitLabels(virtualNode);
-        var implicitLabel = dom.findUpVirtual(virtualNode, 'label');
-        var labels;
-        if (implicitLabel) {
-          labels = [].concat(_toConsumableArray(explicitLabels), [ implicitLabel ]);
-          labels.sort(axe.utils.nodeSorter);
-        } else {
-          labels = explicitLabels;
-        }
-        return labels.map(function(label) {
-          return text.accessibleText(label, labelContext);
-        }).filter(function(text) {
-          return text !== '';
-        }).join(' ');
+        accessibleNameComputation = function accessibleNameComputation(element, inLabelledByContext, inControlContext) {
+          var returnText = void 0;
+          if (!element || encounteredNodes.includes(element)) {
+            return '';
+          } else if (element !== null && element.actualNode instanceof Node !== true) {
+            throw new Error('Invalid argument. Virtual Node must be provided');
+          } else if (!inLabelledByContext && !dom.isVisible(element.actualNode, true)) {
+            return '';
+          }
+          encounteredNodes.push(element);
+          var role = element.actualNode.getAttribute('role');
+          returnText = checkARIA(element, inLabelledByContext, inControlContext);
+          if (nonEmptyText(returnText)) {
+            return returnText;
+          }
+          returnText = checkNative(element, inLabelledByContext, inControlContext);
+          if (nonEmptyText(returnText)) {
+            return returnText;
+          }
+          if (inControlContext) {
+            returnText = formValueText(element);
+            if (nonEmptyText(returnText)) {
+              return returnText;
+            }
+          }
+          if (!shouldNeverCheckSubtree(element) && (!role || aria.getRolesWithNameFromContents().indexOf(role) !== -1)) {
+            returnText = getInnerText(element, inLabelledByContext, inControlContext);
+            if (nonEmptyText(returnText)) {
+              return returnText;
+            }
+          }
+          if (element.actualNode.hasAttribute('title')) {
+            return element.actualNode.getAttribute('title');
+          }
+          return '';
+        };
+        return text.sanitize(accessibleNameComputation(element, inLabelledByContext));
       };
-      function getExplicitLabels(_ref33) {
-        var actualNode = _ref33.actualNode;
-        if (!actualNode.id) {
-          return [];
-        }
-        return dom.findElmsInContext({
-          elm: 'label',
-          attr: 'for',
-          value: actualNode.id,
-          context: actualNode
-        });
-      }
-      text.labelVirtual = function(node) {
+      text.label = function(node) {
         var ref, candidate, doc;
-        candidate = aria.labelVirtual(node);
+        candidate = aria.label(node);
         if (candidate) {
           return candidate;
         }
         if (node.actualNode.id) {
-          var id = axe.utils.escapeSelector(node.actualNode.getAttribute('id'));
+          var id = axe.commons.utils.escapeSelector(node.actualNode.getAttribute('id'));
           doc = axe.commons.dom.getRootNode(node.actualNode);
           ref = doc.querySelector('label[for="' + id + '"]');
+          ref = axe.utils.getNodeFromTree(axe._tree[0], ref);
           candidate = ref && text.visible(ref, true);
           if (candidate) {
             return candidate;
           }
         }
-        ref = dom.findUpVirtual(node, 'label');
+        ref = dom.findUp(node.actualNode, 'label');
+        ref = axe.utils.getNodeFromTree(axe._tree[0], ref);
         candidate = ref && text.visible(ref, true);
         if (candidate) {
           return candidate;
         }
         return null;
       };
-      text.label = function(node) {
-        node = axe.utils.getNodeFromTree(node);
-        return text.labelVirtual(node);
-      };
-      text.nativeElementType = [ {
-        matches: [ {
-          nodeName: 'textarea'
-        }, {
-          nodeName: 'input',
-          properties: {
-            type: [ 'text', 'password', 'search', 'tel', 'email', 'url' ]
-          }
-        } ],
-        namingMethods: 'labelText'
-      }, {
-        matches: {
-          nodeName: 'input',
-          properties: {
-            type: [ 'button', 'submit', 'reset' ]
-          }
-        },
-        namingMethods: [ 'valueText', 'titleText', 'buttonDefaultText' ]
-      }, {
-        matches: {
-          nodeName: 'input',
-          properties: {
-            type: 'image'
-          }
-        },
-        namingMethods: [ 'altText', 'valueText', 'labelText', 'titleText', 'buttonDefaultText' ]
-      }, {
-        matches: 'button',
-        namingMethods: 'subtreeText'
-      }, {
-        matches: 'fieldset',
-        namingMethods: 'fieldsetLegendText'
-      }, {
-        matches: 'OUTPUT',
-        namingMethods: 'subtreeText'
-      }, {
-        matches: [ {
-          nodeName: 'select'
-        }, {
-          nodeName: 'input',
-          properties: {
-            type: /^(?!text|password|search|tel|email|url|button|submit|reset)/
-          }
-        } ],
-        namingMethods: 'labelText'
-      }, {
-        matches: 'summary',
-        namingMethods: 'subtreeText'
-      }, {
-        matches: 'figure',
-        namingMethods: [ 'figureText', 'titleText' ]
-      }, {
-        matches: 'img',
-        namingMethods: 'altText'
-      }, {
-        matches: 'table',
-        namingMethods: [ 'tableCaptionText', 'tableSummaryText' ]
-      }, {
-        matches: [ 'hr', 'br' ],
-        namingMethods: [ 'titleText', 'singleSpace' ]
-      } ];
-      text.nativeTextAlternative = function nativeTextAlternative(virtualNode) {
-        var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-        var actualNode = virtualNode.actualNode;
-        if (actualNode.nodeType !== 1 || [ 'presentation', 'none' ].includes(aria.getRole(actualNode))) {
-          return '';
-        }
-        var textMethods = findTextMethods(virtualNode);
-        var accName = textMethods.reduce(function(accName, step) {
-          return accName || step(virtualNode, context);
-        }, '');
-        if (context.debug) {
-          axe.log(accName || '{empty-value}', actualNode, context);
-        }
-        return accName;
-      };
-      function findTextMethods(virtualNode) {
-        var nativeElementType = text.nativeElementType, nativeTextMethods = text.nativeTextMethods;
-        var nativeType = nativeElementType.find(function(_ref34) {
-          var matches = _ref34.matches;
-          return axe.commons.matches(virtualNode, matches);
-        });
-        var methods = nativeType ? [].concat(nativeType.namingMethods) : [];
-        return methods.map(function(methodName) {
-          return nativeTextMethods[methodName];
-        });
-      }
-      var defaultButtonValues = {
-        submit: 'Submit',
-        image: 'Submit',
-        reset: 'Reset',
-        button: ''
-      };
-      text.nativeTextMethods = {
-        valueText: function valueText(_ref35) {
-          var actualNode = _ref35.actualNode;
-          return actualNode.value || '';
-        },
-        buttonDefaultText: function buttonDefaultText(_ref36) {
-          var actualNode = _ref36.actualNode;
-          return defaultButtonValues[actualNode.type] || '';
-        },
-        tableCaptionText: descendantText.bind(null, 'caption'),
-        figureText: descendantText.bind(null, 'figcaption'),
-        fieldsetLegendText: descendantText.bind(null, 'legend'),
-        altText: attrText.bind(null, 'alt'),
-        tableSummaryText: attrText.bind(null, 'summary'),
-        titleText: function titleText(virtualNode, context) {
-          return text.titleText(virtualNode, context);
-        },
-        subtreeText: function subtreeText(virtualNode, context) {
-          return text.subtreeText(virtualNode, context);
-        },
-        labelText: function labelText(virtualNode, context) {
-          return text.labelText(virtualNode, context);
-        },
-        singleSpace: function singleSpace() {
-          return ' ';
-        }
-      };
-      function attrText(attr, _ref37) {
-        var actualNode = _ref37.actualNode;
-        return actualNode.getAttribute(attr) || '';
-      }
-      function descendantText(nodeName, _ref38, context) {
-        var actualNode = _ref38.actualNode;
-        nodeName = nodeName.toLowerCase();
-        var nodeNames = [ nodeName, actualNode.nodeName.toLowerCase() ].join(',');
-        var candidate = actualNode.querySelector(nodeNames);
-        if (!candidate || candidate.nodeName.toLowerCase() !== nodeName) {
-          return '';
-        }
-        return text.accessibleText(candidate, context);
-      }
       text.sanitize = function(str) {
         'use strict';
         return str.replace(/\r\n/g, '\n').replace(/\u00A0/g, ' ').replace(/[\s]{2,}/g, ' ').trim();
       };
-      text.subtreeText = function subtreeText(virtualNode) {
-        var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-        var alreadyProcessed = text.accessibleTextVirtual.alreadyProcessed;
-        context.startNode = context.startNode || virtualNode;
-        var strict = context.strict;
-        if (alreadyProcessed(virtualNode, context) || !aria.namedFromContents(virtualNode, {
-          strict: strict
-        })) {
-          return '';
-        }
-        return aria.getOwnedVirtual(virtualNode).reduce(function(contentText, child) {
-          return appendAccessibleText(contentText, child, context);
-        }, '');
-      };
-      var phrasingElements = [ 'A', 'EM', 'STRONG', 'SMALL', 'MARK', 'ABBR', 'DFN', 'I', 'B', 'S', 'U', 'CODE', 'VAR', 'SAMP', 'KBD', 'SUP', 'SUB', 'Q', 'CITE', 'SPAN', 'BDO', 'BDI', 'WBR', 'INS', 'DEL', 'MAP', 'AREA', 'NOSCRIPT', 'RUBY', 'BUTTON', 'LABEL', 'OUTPUT', 'DATALIST', 'KEYGEN', 'PROGRESS', 'COMMAND', 'CANVAS', 'TIME', 'METER', '#TEXT' ];
-      function appendAccessibleText(contentText, virtualNode, context) {
-        var nodeName = virtualNode.actualNode.nodeName.toUpperCase();
-        var contentTextAdd = text.accessibleTextVirtual(virtualNode, context);
-        if (!contentTextAdd) {
-          return contentText;
-        }
-        if (!phrasingElements.includes(nodeName)) {
-          if (contentTextAdd[0] !== ' ') {
-            contentTextAdd += ' ';
-          }
-          if (contentText && contentText[contentText.length - 1] !== ' ') {
-            contentTextAdd = ' ' + contentTextAdd;
-          }
-        }
-        return contentText + contentTextAdd;
-      }
-      var alwaysTitleElements = [ 'button', 'iframe', 'a[href]', {
-        nodeName: 'input',
-        properties: {
-          type: 'button'
-        }
-      } ];
-      text.titleText = function titleText(node) {
-        node = node.actualNode || node;
-        if (node.nodeType !== 1 || !node.hasAttribute('title')) {
-          return '';
-        }
-        if (!axe.commons.matches(node, alwaysTitleElements) && [ 'none', 'presentation' ].includes(aria.getRole(node))) {
-          return '';
-        }
-        return node.getAttribute('title');
-      };
-      text.hasUnicode = function hasUnicode(str, options) {
-        var emoji = options.emoji, nonBmp = options.nonBmp, punctuations = options.punctuations;
-        if (emoji) {
-          return axe.imports.emojiRegexText().test(str);
-        }
-        if (nonBmp) {
-          return getUnicodeNonBmpRegExp().test(str);
-        }
-        if (punctuations) {
-          return getPunctuationRegExp().test(str);
-        }
-        return false;
-      };
-      text.removeUnicode = function removeUnicode(str, options) {
-        var emoji = options.emoji, nonBmp = options.nonBmp, punctuations = options.punctuations;
-        if (emoji) {
-          str = str.replace(axe.imports.emojiRegexText(), '');
-        }
-        if (nonBmp) {
-          str = str.replace(getUnicodeNonBmpRegExp(), '');
-        }
-        if (punctuations) {
-          str = str.replace(getPunctuationRegExp(), '');
-        }
-        return str;
-      };
-      function getUnicodeNonBmpRegExp() {
-        return new RegExp('[' + 'ᴀ-ᵿ' + 'ᶀ-ᶿ' + '᷀-᷿' + '₠-⃏' + '⃐-⃿' + '℀-⅏' + '⅐-↏' + '←-⇿' + '∀-⋿' + '⌀-⏿' + '␀-␿' + '⑀-⑟' + '①-⓿' + '─-╿' + '▀-▟' + '■-◿' + '☀-⛿' + '✀-➿' + ']');
-      }
-      function getPunctuationRegExp() {
-        return /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g;
-      }
-      text.unsupported = {
-        accessibleNameFromFieldValue: [ 'combobox', 'listbox', 'progressbar' ]
-      };
-      text.visibleVirtual = function(element, screenReader, noRecursing) {
-        var result = element.children.map(function(child) {
+      text.visible = function(element, screenReader, noRecursing) {
+        'use strict';
+        var index, child, nodeValue, childNodes = element.children, length = childNodes.length, result = '';
+        for (index = 0; index < length; index++) {
+          child = childNodes[index];
           if (child.actualNode.nodeType === 3) {
-            var nodeValue = child.actualNode.nodeValue;
+            nodeValue = child.actualNode.nodeValue;
             if (nodeValue && dom.isVisible(element.actualNode, screenReader)) {
-              return nodeValue;
+              result += nodeValue;
             }
           } else if (!noRecursing) {
-            return text.visibleVirtual(child, screenReader);
+            result += text.visible(child, screenReader);
           }
-        }).join('');
+        }
         return text.sanitize(result);
       };
-      text.visible = function(element, screenReader, noRecursing) {
-        element = axe.utils.getNodeFromTree(element);
-        return text.visibleVirtual(element, screenReader, noRecursing);
+      axe.utils.toArray = function(thing) {
+        'use strict';
+        return Array.prototype.slice.call(thing);
+      };
+      axe.utils.tokenList = function(str) {
+        'use strict';
+        return str.trim().replace(/\s{2,}/g, ' ').split(' ');
+      };
+      var langs = [ 'aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'in', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'ji', 'jv', 'jw', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu', 'aaa', 'aab', 'aac', 'aad', 'aae', 'aaf', 'aag', 'aah', 'aai', 'aak', 'aal', 'aam', 'aan', 'aao', 'aap', 'aaq', 'aas', 'aat', 'aau', 'aav', 'aaw', 'aax', 'aaz', 'aba', 'abb', 'abc', 'abd', 'abe', 'abf', 'abg', 'abh', 'abi', 'abj', 'abl', 'abm', 'abn', 'abo', 'abp', 'abq', 'abr', 'abs', 'abt', 'abu', 'abv', 'abw', 'abx', 'aby', 'abz', 'aca', 'acb', 'acd', 'ace', 'acf', 'ach', 'aci', 'ack', 'acl', 'acm', 'acn', 'acp', 'acq', 'acr', 'acs', 'act', 'acu', 'acv', 'acw', 'acx', 'acy', 'acz', 'ada', 'adb', 'add', 'ade', 'adf', 'adg', 'adh', 'adi', 'adj', 'adl', 'adn', 'ado', 'adp', 'adq', 'adr', 'ads', 'adt', 'adu', 'adw', 'adx', 'ady', 'adz', 'aea', 'aeb', 'aec', 'aed', 'aee', 'aek', 'ael', 'aem', 'aen', 'aeq', 'aer', 'aes', 'aeu', 'aew', 'aey', 'aez', 'afa', 'afb', 'afd', 'afe', 'afg', 'afh', 'afi', 'afk', 'afn', 'afo', 'afp', 'afs', 'aft', 'afu', 'afz', 'aga', 'agb', 'agc', 'agd', 'age', 'agf', 'agg', 'agh', 'agi', 'agj', 'agk', 'agl', 'agm', 'agn', 'ago', 'agp', 'agq', 'agr', 'ags', 'agt', 'agu', 'agv', 'agw', 'agx', 'agy', 'agz', 'aha', 'ahb', 'ahg', 'ahh', 'ahi', 'ahk', 'ahl', 'ahm', 'ahn', 'aho', 'ahp', 'ahr', 'ahs', 'aht', 'aia', 'aib', 'aic', 'aid', 'aie', 'aif', 'aig', 'aih', 'aii', 'aij', 'aik', 'ail', 'aim', 'ain', 'aio', 'aip', 'aiq', 'air', 'ais', 'ait', 'aiw', 'aix', 'aiy', 'aja', 'ajg', 'aji', 'ajn', 'ajp', 'ajt', 'aju', 'ajw', 'ajz', 'akb', 'akc', 'akd', 'ake', 'akf', 'akg', 'akh', 'aki', 'akj', 'akk', 'akl', 'akm', 'ako', 'akp', 'akq', 'akr', 'aks', 'akt', 'aku', 'akv', 'akw', 'akx', 'aky', 'akz', 'ala', 'alc', 'ald', 'ale', 'alf', 'alg', 'alh', 'ali', 'alj', 'alk', 'all', 'alm', 'aln', 'alo', 'alp', 'alq', 'alr', 'als', 'alt', 'alu', 'alv', 'alw', 'alx', 'aly', 'alz', 'ama', 'amb', 'amc', 'ame', 'amf', 'amg', 'ami', 'amj', 'amk', 'aml', 'amm', 'amn', 'amo', 'amp', 'amq', 'amr', 'ams', 'amt', 'amu', 'amv', 'amw', 'amx', 'amy', 'amz', 'ana', 'anb', 'anc', 'and', 'ane', 'anf', 'ang', 'anh', 'ani', 'anj', 'ank', 'anl', 'anm', 'ann', 'ano', 'anp', 'anq', 'anr', 'ans', 'ant', 'anu', 'anv', 'anw', 'anx', 'any', 'anz', 'aoa', 'aob', 'aoc', 'aod', 'aoe', 'aof', 'aog', 'aoh', 'aoi', 'aoj', 'aok', 'aol', 'aom', 'aon', 'aor', 'aos', 'aot', 'aou', 'aox', 'aoz', 'apa', 'apb', 'apc', 'apd', 'ape', 'apf', 'apg', 'aph', 'api', 'apj', 'apk', 'apl', 'apm', 'apn', 'apo', 'app', 'apq', 'apr', 'aps', 'apt', 'apu', 'apv', 'apw', 'apx', 'apy', 'apz', 'aqa', 'aqc', 'aqd', 'aqg', 'aql', 'aqm', 'aqn', 'aqp', 'aqr', 'aqt', 'aqz', 'arb', 'arc', 'ard', 'are', 'arh', 'ari', 'arj', 'ark', 'arl', 'arn', 'aro', 'arp', 'arq', 'arr', 'ars', 'art', 'aru', 'arv', 'arw', 'arx', 'ary', 'arz', 'asa', 'asb', 'asc', 'asd', 'ase', 'asf', 'asg', 'ash', 'asi', 'asj', 'ask', 'asl', 'asn', 'aso', 'asp', 'asq', 'asr', 'ass', 'ast', 'asu', 'asv', 'asw', 'asx', 'asy', 'asz', 'ata', 'atb', 'atc', 'atd', 'ate', 'atg', 'ath', 'ati', 'atj', 'atk', 'atl', 'atm', 'atn', 'ato', 'atp', 'atq', 'atr', 'ats', 'att', 'atu', 'atv', 'atw', 'atx', 'aty', 'atz', 'aua', 'aub', 'auc', 'aud', 'aue', 'auf', 'aug', 'auh', 'aui', 'auj', 'auk', 'aul', 'aum', 'aun', 'auo', 'aup', 'auq', 'aur', 'aus', 'aut', 'auu', 'auw', 'aux', 'auy', 'auz', 'avb', 'avd', 'avi', 'avk', 'avl', 'avm', 'avn', 'avo', 'avs', 'avt', 'avu', 'avv', 'awa', 'awb', 'awc', 'awd', 'awe', 'awg', 'awh', 'awi', 'awk', 'awm', 'awn', 'awo', 'awr', 'aws', 'awt', 'awu', 'awv', 'aww', 'awx', 'awy', 'axb', 'axe', 'axg', 'axk', 'axl', 'axm', 'axx', 'aya', 'ayb', 'ayc', 'ayd', 'aye', 'ayg', 'ayh', 'ayi', 'ayk', 'ayl', 'ayn', 'ayo', 'ayp', 'ayq', 'ayr', 'ays', 'ayt', 'ayu', 'ayx', 'ayy', 'ayz', 'aza', 'azb', 'azc', 'azd', 'azg', 'azj', 'azm', 'azn', 'azo', 'azt', 'azz', 'baa', 'bab', 'bac', 'bad', 'bae', 'baf', 'bag', 'bah', 'bai', 'baj', 'bal', 'ban', 'bao', 'bap', 'bar', 'bas', 'bat', 'bau', 'bav', 'baw', 'bax', 'bay', 'baz', 'bba', 'bbb', 'bbc', 'bbd', 'bbe', 'bbf', 'bbg', 'bbh', 'bbi', 'bbj', 'bbk', 'bbl', 'bbm', 'bbn', 'bbo', 'bbp', 'bbq', 'bbr', 'bbs', 'bbt', 'bbu', 'bbv', 'bbw', 'bbx', 'bby', 'bbz', 'bca', 'bcb', 'bcc', 'bcd', 'bce', 'bcf', 'bcg', 'bch', 'bci', 'bcj', 'bck', 'bcl', 'bcm', 'bcn', 'bco', 'bcp', 'bcq', 'bcr', 'bcs', 'bct', 'bcu', 'bcv', 'bcw', 'bcy', 'bcz', 'bda', 'bdb', 'bdc', 'bdd', 'bde', 'bdf', 'bdg', 'bdh', 'bdi', 'bdj', 'bdk', 'bdl', 'bdm', 'bdn', 'bdo', 'bdp', 'bdq', 'bdr', 'bds', 'bdt', 'bdu', 'bdv', 'bdw', 'bdx', 'bdy', 'bdz', 'bea', 'beb', 'bec', 'bed', 'bee', 'bef', 'beg', 'beh', 'bei', 'bej', 'bek', 'bem', 'beo', 'bep', 'beq', 'ber', 'bes', 'bet', 'beu', 'bev', 'bew', 'bex', 'bey', 'bez', 'bfa', 'bfb', 'bfc', 'bfd', 'bfe', 'bff', 'bfg', 'bfh', 'bfi', 'bfj', 'bfk', 'bfl', 'bfm', 'bfn', 'bfo', 'bfp', 'bfq', 'bfr', 'bfs', 'bft', 'bfu', 'bfw', 'bfx', 'bfy', 'bfz', 'bga', 'bgb', 'bgc', 'bgd', 'bge', 'bgf', 'bgg', 'bgi', 'bgj', 'bgk', 'bgl', 'bgm', 'bgn', 'bgo', 'bgp', 'bgq', 'bgr', 'bgs', 'bgt', 'bgu', 'bgv', 'bgw', 'bgx', 'bgy', 'bgz', 'bha', 'bhb', 'bhc', 'bhd', 'bhe', 'bhf', 'bhg', 'bhh', 'bhi', 'bhj', 'bhk', 'bhl', 'bhm', 'bhn', 'bho', 'bhp', 'bhq', 'bhr', 'bhs', 'bht', 'bhu', 'bhv', 'bhw', 'bhx', 'bhy', 'bhz', 'bia', 'bib', 'bic', 'bid', 'bie', 'bif', 'big', 'bij', 'bik', 'bil', 'bim', 'bin', 'bio', 'bip', 'biq', 'bir', 'bit', 'biu', 'biv', 'biw', 'bix', 'biy', 'biz', 'bja', 'bjb', 'bjc', 'bjd', 'bje', 'bjf', 'bjg', 'bjh', 'bji', 'bjj', 'bjk', 'bjl', 'bjm', 'bjn', 'bjo', 'bjp', 'bjq', 'bjr', 'bjs', 'bjt', 'bju', 'bjv', 'bjw', 'bjx', 'bjy', 'bjz', 'bka', 'bkb', 'bkc', 'bkd', 'bkf', 'bkg', 'bkh', 'bki', 'bkj', 'bkk', 'bkl', 'bkm', 'bkn', 'bko', 'bkp', 'bkq', 'bkr', 'bks', 'bkt', 'bku', 'bkv', 'bkw', 'bkx', 'bky', 'bkz', 'bla', 'blb', 'blc', 'bld', 'ble', 'blf', 'blg', 'blh', 'bli', 'blj', 'blk', 'bll', 'blm', 'bln', 'blo', 'blp', 'blq', 'blr', 'bls', 'blt', 'blv', 'blw', 'blx', 'bly', 'blz', 'bma', 'bmb', 'bmc', 'bmd', 'bme', 'bmf', 'bmg', 'bmh', 'bmi', 'bmj', 'bmk', 'bml', 'bmm', 'bmn', 'bmo', 'bmp', 'bmq', 'bmr', 'bms', 'bmt', 'bmu', 'bmv', 'bmw', 'bmx', 'bmy', 'bmz', 'bna', 'bnb', 'bnc', 'bnd', 'bne', 'bnf', 'bng', 'bni', 'bnj', 'bnk', 'bnl', 'bnm', 'bnn', 'bno', 'bnp', 'bnq', 'bnr', 'bns', 'bnt', 'bnu', 'bnv', 'bnw', 'bnx', 'bny', 'bnz', 'boa', 'bob', 'boe', 'bof', 'bog', 'boh', 'boi', 'boj', 'bok', 'bol', 'bom', 'bon', 'boo', 'bop', 'boq', 'bor', 'bot', 'bou', 'bov', 'bow', 'box', 'boy', 'boz', 'bpa', 'bpb', 'bpd', 'bpg', 'bph', 'bpi', 'bpj', 'bpk', 'bpl', 'bpm', 'bpn', 'bpo', 'bpp', 'bpq', 'bpr', 'bps', 'bpt', 'bpu', 'bpv', 'bpw', 'bpx', 'bpy', 'bpz', 'bqa', 'bqb', 'bqc', 'bqd', 'bqf', 'bqg', 'bqh', 'bqi', 'bqj', 'bqk', 'bql', 'bqm', 'bqn', 'bqo', 'bqp', 'bqq', 'bqr', 'bqs', 'bqt', 'bqu', 'bqv', 'bqw', 'bqx', 'bqy', 'bqz', 'bra', 'brb', 'brc', 'brd', 'brf', 'brg', 'brh', 'bri', 'brj', 'brk', 'brl', 'brm', 'brn', 'bro', 'brp', 'brq', 'brr', 'brs', 'brt', 'bru', 'brv', 'brw', 'brx', 'bry', 'brz', 'bsa', 'bsb', 'bsc', 'bse', 'bsf', 'bsg', 'bsh', 'bsi', 'bsj', 'bsk', 'bsl', 'bsm', 'bsn', 'bso', 'bsp', 'bsq', 'bsr', 'bss', 'bst', 'bsu', 'bsv', 'bsw', 'bsx', 'bsy', 'bta', 'btb', 'btc', 'btd', 'bte', 'btf', 'btg', 'bth', 'bti', 'btj', 'btk', 'btl', 'btm', 'btn', 'bto', 'btp', 'btq', 'btr', 'bts', 'btt', 'btu', 'btv', 'btw', 'btx', 'bty', 'btz', 'bua', 'bub', 'buc', 'bud', 'bue', 'buf', 'bug', 'buh', 'bui', 'buj', 'buk', 'bum', 'bun', 'buo', 'bup', 'buq', 'bus', 'but', 'buu', 'buv', 'buw', 'bux', 'buy', 'buz', 'bva', 'bvb', 'bvc', 'bvd', 'bve', 'bvf', 'bvg', 'bvh', 'bvi', 'bvj', 'bvk', 'bvl', 'bvm', 'bvn', 'bvo', 'bvp', 'bvq', 'bvr', 'bvt', 'bvu', 'bvv', 'bvw', 'bvx', 'bvy', 'bvz', 'bwa', 'bwb', 'bwc', 'bwd', 'bwe', 'bwf', 'bwg', 'bwh', 'bwi', 'bwj', 'bwk', 'bwl', 'bwm', 'bwn', 'bwo', 'bwp', 'bwq', 'bwr', 'bws', 'bwt', 'bwu', 'bww', 'bwx', 'bwy', 'bwz', 'bxa', 'bxb', 'bxc', 'bxd', 'bxe', 'bxf', 'bxg', 'bxh', 'bxi', 'bxj', 'bxk', 'bxl', 'bxm', 'bxn', 'bxo', 'bxp', 'bxq', 'bxr', 'bxs', 'bxu', 'bxv', 'bxw', 'bxx', 'bxz', 'bya', 'byb', 'byc', 'byd', 'bye', 'byf', 'byg', 'byh', 'byi', 'byj', 'byk', 'byl', 'bym', 'byn', 'byo', 'byp', 'byq', 'byr', 'bys', 'byt', 'byv', 'byw', 'byx', 'byy', 'byz', 'bza', 'bzb', 'bzc', 'bzd', 'bze', 'bzf', 'bzg', 'bzh', 'bzi', 'bzj', 'bzk', 'bzl', 'bzm', 'bzn', 'bzo', 'bzp', 'bzq', 'bzr', 'bzs', 'bzt', 'bzu', 'bzv', 'bzw', 'bzx', 'bzy', 'bzz', 'caa', 'cab', 'cac', 'cad', 'cae', 'caf', 'cag', 'cah', 'cai', 'caj', 'cak', 'cal', 'cam', 'can', 'cao', 'cap', 'caq', 'car', 'cas', 'cau', 'cav', 'caw', 'cax', 'cay', 'caz', 'cba', 'cbb', 'cbc', 'cbd', 'cbe', 'cbg', 'cbh', 'cbi', 'cbj', 'cbk', 'cbl', 'cbn', 'cbo', 'cbq', 'cbr', 'cbs', 'cbt', 'cbu', 'cbv', 'cbw', 'cby', 'cca', 'ccc', 'ccd', 'cce', 'ccg', 'cch', 'ccj', 'ccl', 'ccm', 'ccn', 'cco', 'ccp', 'ccq', 'ccr', 'ccs', 'cda', 'cdc', 'cdd', 'cde', 'cdf', 'cdg', 'cdh', 'cdi', 'cdj', 'cdm', 'cdn', 'cdo', 'cdr', 'cds', 'cdy', 'cdz', 'cea', 'ceb', 'ceg', 'cek', 'cel', 'cen', 'cet', 'cfa', 'cfd', 'cfg', 'cfm', 'cga', 'cgc', 'cgg', 'cgk', 'chb', 'chc', 'chd', 'chf', 'chg', 'chh', 'chj', 'chk', 'chl', 'chm', 'chn', 'cho', 'chp', 'chq', 'chr', 'cht', 'chw', 'chx', 'chy', 'chz', 'cia', 'cib', 'cic', 'cid', 'cie', 'cih', 'cik', 'cim', 'cin', 'cip', 'cir', 'ciw', 'ciy', 'cja', 'cje', 'cjh', 'cji', 'cjk', 'cjm', 'cjn', 'cjo', 'cjp', 'cjr', 'cjs', 'cjv', 'cjy', 'cka', 'ckb', 'ckh', 'ckl', 'ckn', 'cko', 'ckq', 'ckr', 'cks', 'ckt', 'cku', 'ckv', 'ckx', 'cky', 'ckz', 'cla', 'clc', 'cld', 'cle', 'clh', 'cli', 'clj', 'clk', 'cll', 'clm', 'clo', 'clt', 'clu', 'clw', 'cly', 'cma', 'cmc', 'cme', 'cmg', 'cmi', 'cmk', 'cml', 'cmm', 'cmn', 'cmo', 'cmr', 'cms', 'cmt', 'cna', 'cnb', 'cnc', 'cng', 'cnh', 'cni', 'cnk', 'cnl', 'cno', 'cns', 'cnt', 'cnu', 'cnw', 'cnx', 'coa', 'cob', 'coc', 'cod', 'coe', 'cof', 'cog', 'coh', 'coj', 'cok', 'col', 'com', 'con', 'coo', 'cop', 'coq', 'cot', 'cou', 'cov', 'cow', 'cox', 'coy', 'coz', 'cpa', 'cpb', 'cpc', 'cpe', 'cpf', 'cpg', 'cpi', 'cpn', 'cpo', 'cpp', 'cps', 'cpu', 'cpx', 'cpy', 'cqd', 'cqu', 'cra', 'crb', 'crc', 'crd', 'crf', 'crg', 'crh', 'cri', 'crj', 'crk', 'crl', 'crm', 'crn', 'cro', 'crp', 'crq', 'crr', 'crs', 'crt', 'crv', 'crw', 'crx', 'cry', 'crz', 'csa', 'csb', 'csc', 'csd', 'cse', 'csf', 'csg', 'csh', 'csi', 'csj', 'csk', 'csl', 'csm', 'csn', 'cso', 'csq', 'csr', 'css', 'cst', 'csu', 'csv', 'csw', 'csy', 'csz', 'cta', 'ctc', 'ctd', 'cte', 'ctg', 'cth', 'ctl', 'ctm', 'ctn', 'cto', 'ctp', 'cts', 'ctt', 'ctu', 'ctz', 'cua', 'cub', 'cuc', 'cug', 'cuh', 'cui', 'cuj', 'cuk', 'cul', 'cum', 'cuo', 'cup', 'cuq', 'cur', 'cus', 'cut', 'cuu', 'cuv', 'cuw', 'cux', 'cvg', 'cvn', 'cwa', 'cwb', 'cwd', 'cwe', 'cwg', 'cwt', 'cya', 'cyb', 'cyo', 'czh', 'czk', 'czn', 'czo', 'czt', 'daa', 'dac', 'dad', 'dae', 'daf', 'dag', 'dah', 'dai', 'daj', 'dak', 'dal', 'dam', 'dao', 'dap', 'daq', 'dar', 'das', 'dau', 'dav', 'daw', 'dax', 'day', 'daz', 'dba', 'dbb', 'dbd', 'dbe', 'dbf', 'dbg', 'dbi', 'dbj', 'dbl', 'dbm', 'dbn', 'dbo', 'dbp', 'dbq', 'dbr', 'dbt', 'dbu', 'dbv', 'dbw', 'dby', 'dcc', 'dcr', 'dda', 'ddd', 'dde', 'ddg', 'ddi', 'ddj', 'ddn', 'ddo', 'ddr', 'dds', 'ddw', 'dec', 'ded', 'dee', 'def', 'deg', 'deh', 'dei', 'dek', 'del', 'dem', 'den', 'dep', 'deq', 'der', 'des', 'dev', 'dez', 'dga', 'dgb', 'dgc', 'dgd', 'dge', 'dgg', 'dgh', 'dgi', 'dgk', 'dgl', 'dgn', 'dgo', 'dgr', 'dgs', 'dgt', 'dgu', 'dgw', 'dgx', 'dgz', 'dha', 'dhd', 'dhg', 'dhi', 'dhl', 'dhm', 'dhn', 'dho', 'dhr', 'dhs', 'dhu', 'dhv', 'dhw', 'dhx', 'dia', 'dib', 'dic', 'did', 'dif', 'dig', 'dih', 'dii', 'dij', 'dik', 'dil', 'dim', 'din', 'dio', 'dip', 'diq', 'dir', 'dis', 'dit', 'diu', 'diw', 'dix', 'diy', 'diz', 'dja', 'djb', 'djc', 'djd', 'dje', 'djf', 'dji', 'djj', 'djk', 'djl', 'djm', 'djn', 'djo', 'djr', 'dju', 'djw', 'dka', 'dkk', 'dkl', 'dkr', 'dks', 'dkx', 'dlg', 'dlk', 'dlm', 'dln', 'dma', 'dmb', 'dmc', 'dmd', 'dme', 'dmg', 'dmk', 'dml', 'dmm', 'dmn', 'dmo', 'dmr', 'dms', 'dmu', 'dmv', 'dmw', 'dmx', 'dmy', 'dna', 'dnd', 'dne', 'dng', 'dni', 'dnj', 'dnk', 'dnn', 'dnr', 'dnt', 'dnu', 'dnv', 'dnw', 'dny', 'doa', 'dob', 'doc', 'doe', 'dof', 'doh', 'doi', 'dok', 'dol', 'don', 'doo', 'dop', 'doq', 'dor', 'dos', 'dot', 'dov', 'dow', 'dox', 'doy', 'doz', 'dpp', 'dra', 'drb', 'drc', 'drd', 'dre', 'drg', 'drh', 'dri', 'drl', 'drn', 'dro', 'drq', 'drr', 'drs', 'drt', 'dru', 'drw', 'dry', 'dsb', 'dse', 'dsh', 'dsi', 'dsl', 'dsn', 'dso', 'dsq', 'dta', 'dtb', 'dtd', 'dth', 'dti', 'dtk', 'dtm', 'dtn', 'dto', 'dtp', 'dtr', 'dts', 'dtt', 'dtu', 'dty', 'dua', 'dub', 'duc', 'dud', 'due', 'duf', 'dug', 'duh', 'dui', 'duj', 'duk', 'dul', 'dum', 'dun', 'duo', 'dup', 'duq', 'dur', 'dus', 'duu', 'duv', 'duw', 'dux', 'duy', 'duz', 'dva', 'dwa', 'dwl', 'dwr', 'dws', 'dwu', 'dww', 'dwy', 'dya', 'dyb', 'dyd', 'dyg', 'dyi', 'dym', 'dyn', 'dyo', 'dyu', 'dyy', 'dza', 'dzd', 'dze', 'dzg', 'dzl', 'dzn', 'eaa', 'ebg', 'ebk', 'ebo', 'ebr', 'ebu', 'ecr', 'ecs', 'ecy', 'eee', 'efa', 'efe', 'efi', 'ega', 'egl', 'ego', 'egx', 'egy', 'ehu', 'eip', 'eit', 'eiv', 'eja', 'eka', 'ekc', 'eke', 'ekg', 'eki', 'ekk', 'ekl', 'ekm', 'eko', 'ekp', 'ekr', 'eky', 'ele', 'elh', 'eli', 'elk', 'elm', 'elo', 'elp', 'elu', 'elx', 'ema', 'emb', 'eme', 'emg', 'emi', 'emk', 'emm', 'emn', 'emo', 'emp', 'ems', 'emu', 'emw', 'emx', 'emy', 'ena', 'enb', 'enc', 'end', 'enf', 'enh', 'enl', 'enm', 'enn', 'eno', 'enq', 'enr', 'enu', 'env', 'enw', 'enx', 'eot', 'epi', 'era', 'erg', 'erh', 'eri', 'erk', 'ero', 'err', 'ers', 'ert', 'erw', 'ese', 'esg', 'esh', 'esi', 'esk', 'esl', 'esm', 'esn', 'eso', 'esq', 'ess', 'esu', 'esx', 'esy', 'etb', 'etc', 'eth', 'etn', 'eto', 'etr', 'ets', 'ett', 'etu', 'etx', 'etz', 'euq', 'eve', 'evh', 'evn', 'ewo', 'ext', 'eya', 'eyo', 'eza', 'eze', 'faa', 'fab', 'fad', 'faf', 'fag', 'fah', 'fai', 'faj', 'fak', 'fal', 'fam', 'fan', 'fap', 'far', 'fat', 'fau', 'fax', 'fay', 'faz', 'fbl', 'fcs', 'fer', 'ffi', 'ffm', 'fgr', 'fia', 'fie', 'fil', 'fip', 'fir', 'fit', 'fiu', 'fiw', 'fkk', 'fkv', 'fla', 'flh', 'fli', 'fll', 'fln', 'flr', 'fly', 'fmp', 'fmu', 'fnb', 'fng', 'fni', 'fod', 'foi', 'fom', 'fon', 'for', 'fos', 'fox', 'fpe', 'fqs', 'frc', 'frd', 'frk', 'frm', 'fro', 'frp', 'frq', 'frr', 'frs', 'frt', 'fse', 'fsl', 'fss', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fuj', 'fum', 'fun', 'fuq', 'fur', 'fut', 'fuu', 'fuv', 'fuy', 'fvr', 'fwa', 'fwe', 'gaa', 'gab', 'gac', 'gad', 'gae', 'gaf', 'gag', 'gah', 'gai', 'gaj', 'gak', 'gal', 'gam', 'gan', 'gao', 'gap', 'gaq', 'gar', 'gas', 'gat', 'gau', 'gav', 'gaw', 'gax', 'gay', 'gaz', 'gba', 'gbb', 'gbc', 'gbd', 'gbe', 'gbf', 'gbg', 'gbh', 'gbi', 'gbj', 'gbk', 'gbl', 'gbm', 'gbn', 'gbo', 'gbp', 'gbq', 'gbr', 'gbs', 'gbu', 'gbv', 'gbw', 'gbx', 'gby', 'gbz', 'gcc', 'gcd', 'gce', 'gcf', 'gcl', 'gcn', 'gcr', 'gct', 'gda', 'gdb', 'gdc', 'gdd', 'gde', 'gdf', 'gdg', 'gdh', 'gdi', 'gdj', 'gdk', 'gdl', 'gdm', 'gdn', 'gdo', 'gdq', 'gdr', 'gds', 'gdt', 'gdu', 'gdx', 'gea', 'geb', 'gec', 'ged', 'geg', 'geh', 'gei', 'gej', 'gek', 'gel', 'gem', 'geq', 'ges', 'gev', 'gew', 'gex', 'gey', 'gez', 'gfk', 'gft', 'gfx', 'gga', 'ggb', 'ggd', 'gge', 'ggg', 'ggk', 'ggl', 'ggn', 'ggo', 'ggr', 'ggt', 'ggu', 'ggw', 'gha', 'ghc', 'ghe', 'ghh', 'ghk', 'ghl', 'ghn', 'gho', 'ghr', 'ghs', 'ght', 'gia', 'gib', 'gic', 'gid', 'gie', 'gig', 'gih', 'gil', 'gim', 'gin', 'gio', 'gip', 'giq', 'gir', 'gis', 'git', 'giu', 'giw', 'gix', 'giy', 'giz', 'gji', 'gjk', 'gjm', 'gjn', 'gjr', 'gju', 'gka', 'gke', 'gkn', 'gko', 'gkp', 'gku', 'glc', 'gld', 'glh', 'gli', 'glj', 'glk', 'gll', 'glo', 'glr', 'glu', 'glw', 'gly', 'gma', 'gmb', 'gmd', 'gme', 'gmg', 'gmh', 'gml', 'gmm', 'gmn', 'gmq', 'gmu', 'gmv', 'gmw', 'gmx', 'gmy', 'gmz', 'gna', 'gnb', 'gnc', 'gnd', 'gne', 'gng', 'gnh', 'gni', 'gnk', 'gnl', 'gnm', 'gnn', 'gno', 'gnq', 'gnr', 'gnt', 'gnu', 'gnw', 'gnz', 'goa', 'gob', 'goc', 'god', 'goe', 'gof', 'gog', 'goh', 'goi', 'goj', 'gok', 'gol', 'gom', 'gon', 'goo', 'gop', 'goq', 'gor', 'gos', 'got', 'gou', 'gow', 'gox', 'goy', 'goz', 'gpa', 'gpe', 'gpn', 'gqa', 'gqi', 'gqn', 'gqr', 'gqu', 'gra', 'grb', 'grc', 'grd', 'grg', 'grh', 'gri', 'grj', 'grk', 'grm', 'gro', 'grq', 'grr', 'grs', 'grt', 'gru', 'grv', 'grw', 'grx', 'gry', 'grz', 'gse', 'gsg', 'gsl', 'gsm', 'gsn', 'gso', 'gsp', 'gss', 'gsw', 'gta', 'gti', 'gtu', 'gua', 'gub', 'guc', 'gud', 'gue', 'guf', 'gug', 'guh', 'gui', 'guk', 'gul', 'gum', 'gun', 'guo', 'gup', 'guq', 'gur', 'gus', 'gut', 'guu', 'guv', 'guw', 'gux', 'guz', 'gva', 'gvc', 'gve', 'gvf', 'gvj', 'gvl', 'gvm', 'gvn', 'gvo', 'gvp', 'gvr', 'gvs', 'gvy', 'gwa', 'gwb', 'gwc', 'gwd', 'gwe', 'gwf', 'gwg', 'gwi', 'gwj', 'gwm', 'gwn', 'gwr', 'gwt', 'gwu', 'gww', 'gwx', 'gxx', 'gya', 'gyb', 'gyd', 'gye', 'gyf', 'gyg', 'gyi', 'gyl', 'gym', 'gyn', 'gyr', 'gyy', 'gza', 'gzi', 'gzn', 'haa', 'hab', 'hac', 'had', 'hae', 'haf', 'hag', 'hah', 'hai', 'haj', 'hak', 'hal', 'ham', 'han', 'hao', 'hap', 'haq', 'har', 'has', 'hav', 'haw', 'hax', 'hay', 'haz', 'hba', 'hbb', 'hbn', 'hbo', 'hbu', 'hca', 'hch', 'hdn', 'hds', 'hdy', 'hea', 'hed', 'heg', 'heh', 'hei', 'hem', 'hgm', 'hgw', 'hhi', 'hhr', 'hhy', 'hia', 'hib', 'hid', 'hif', 'hig', 'hih', 'hii', 'hij', 'hik', 'hil', 'him', 'hio', 'hir', 'hit', 'hiw', 'hix', 'hji', 'hka', 'hke', 'hkk', 'hks', 'hla', 'hlb', 'hld', 'hle', 'hlt', 'hlu', 'hma', 'hmb', 'hmc', 'hmd', 'hme', 'hmf', 'hmg', 'hmh', 'hmi', 'hmj', 'hmk', 'hml', 'hmm', 'hmn', 'hmp', 'hmq', 'hmr', 'hms', 'hmt', 'hmu', 'hmv', 'hmw', 'hmx', 'hmy', 'hmz', 'hna', 'hnd', 'hne', 'hnh', 'hni', 'hnj', 'hnn', 'hno', 'hns', 'hnu', 'hoa', 'hob', 'hoc', 'hod', 'hoe', 'hoh', 'hoi', 'hoj', 'hok', 'hol', 'hom', 'hoo', 'hop', 'hor', 'hos', 'hot', 'hov', 'how', 'hoy', 'hoz', 'hpo', 'hps', 'hra', 'hrc', 'hre', 'hrk', 'hrm', 'hro', 'hrp', 'hrr', 'hrt', 'hru', 'hrw', 'hrx', 'hrz', 'hsb', 'hsh', 'hsl', 'hsn', 'hss', 'hti', 'hto', 'hts', 'htu', 'htx', 'hub', 'huc', 'hud', 'hue', 'huf', 'hug', 'huh', 'hui', 'huj', 'huk', 'hul', 'hum', 'huo', 'hup', 'huq', 'hur', 'hus', 'hut', 'huu', 'huv', 'huw', 'hux', 'huy', 'huz', 'hvc', 'hve', 'hvk', 'hvn', 'hvv', 'hwa', 'hwc', 'hwo', 'hya', 'hyx', 'iai', 'ian', 'iap', 'iar', 'iba', 'ibb', 'ibd', 'ibe', 'ibg', 'ibh', 'ibi', 'ibl', 'ibm', 'ibn', 'ibr', 'ibu', 'iby', 'ica', 'ich', 'icl', 'icr', 'ida', 'idb', 'idc', 'idd', 'ide', 'idi', 'idr', 'ids', 'idt', 'idu', 'ifa', 'ifb', 'ife', 'iff', 'ifk', 'ifm', 'ifu', 'ify', 'igb', 'ige', 'igg', 'igl', 'igm', 'ign', 'igo', 'igs', 'igw', 'ihb', 'ihi', 'ihp', 'ihw', 'iin', 'iir', 'ijc', 'ije', 'ijj', 'ijn', 'ijo', 'ijs', 'ike', 'iki', 'ikk', 'ikl', 'iko', 'ikp', 'ikr', 'iks', 'ikt', 'ikv', 'ikw', 'ikx', 'ikz', 'ila', 'ilb', 'ilg', 'ili', 'ilk', 'ill', 'ilm', 'ilo', 'ilp', 'ils', 'ilu', 'ilv', 'ilw', 'ima', 'ime', 'imi', 'iml', 'imn', 'imo', 'imr', 'ims', 'imy', 'inb', 'inc', 'ine', 'ing', 'inh', 'inj', 'inl', 'inm', 'inn', 'ino', 'inp', 'ins', 'int', 'inz', 'ior', 'iou', 'iow', 'ipi', 'ipo', 'iqu', 'iqw', 'ira', 'ire', 'irh', 'iri', 'irk', 'irn', 'iro', 'irr', 'iru', 'irx', 'iry', 'isa', 'isc', 'isd', 'ise', 'isg', 'ish', 'isi', 'isk', 'ism', 'isn', 'iso', 'isr', 'ist', 'isu', 'itb', 'itc', 'itd', 'ite', 'iti', 'itk', 'itl', 'itm', 'ito', 'itr', 'its', 'itt', 'itv', 'itw', 'itx', 'ity', 'itz', 'ium', 'ivb', 'ivv', 'iwk', 'iwm', 'iwo', 'iws', 'ixc', 'ixl', 'iya', 'iyo', 'iyx', 'izh', 'izi', 'izr', 'izz', 'jaa', 'jab', 'jac', 'jad', 'jae', 'jaf', 'jah', 'jaj', 'jak', 'jal', 'jam', 'jan', 'jao', 'jaq', 'jar', 'jas', 'jat', 'jau', 'jax', 'jay', 'jaz', 'jbe', 'jbi', 'jbj', 'jbk', 'jbn', 'jbo', 'jbr', 'jbt', 'jbu', 'jbw', 'jcs', 'jct', 'jda', 'jdg', 'jdt', 'jeb', 'jee', 'jeg', 'jeh', 'jei', 'jek', 'jel', 'jen', 'jer', 'jet', 'jeu', 'jgb', 'jge', 'jgk', 'jgo', 'jhi', 'jhs', 'jia', 'jib', 'jic', 'jid', 'jie', 'jig', 'jih', 'jii', 'jil', 'jim', 'jio', 'jiq', 'jit', 'jiu', 'jiv', 'jiy', 'jje', 'jjr', 'jka', 'jkm', 'jko', 'jkp', 'jkr', 'jku', 'jle', 'jls', 'jma', 'jmb', 'jmc', 'jmd', 'jmi', 'jml', 'jmn', 'jmr', 'jms', 'jmw', 'jmx', 'jna', 'jnd', 'jng', 'jni', 'jnj', 'jnl', 'jns', 'job', 'jod', 'jog', 'jor', 'jos', 'jow', 'jpa', 'jpr', 'jpx', 'jqr', 'jra', 'jrb', 'jrr', 'jrt', 'jru', 'jsl', 'jua', 'jub', 'juc', 'jud', 'juh', 'jui', 'juk', 'jul', 'jum', 'jun', 'juo', 'jup', 'jur', 'jus', 'jut', 'juu', 'juw', 'juy', 'jvd', 'jvn', 'jwi', 'jya', 'jye', 'jyy', 'kaa', 'kab', 'kac', 'kad', 'kae', 'kaf', 'kag', 'kah', 'kai', 'kaj', 'kak', 'kam', 'kao', 'kap', 'kaq', 'kar', 'kav', 'kaw', 'kax', 'kay', 'kba', 'kbb', 'kbc', 'kbd', 'kbe', 'kbf', 'kbg', 'kbh', 'kbi', 'kbj', 'kbk', 'kbl', 'kbm', 'kbn', 'kbo', 'kbp', 'kbq', 'kbr', 'kbs', 'kbt', 'kbu', 'kbv', 'kbw', 'kbx', 'kby', 'kbz', 'kca', 'kcb', 'kcc', 'kcd', 'kce', 'kcf', 'kcg', 'kch', 'kci', 'kcj', 'kck', 'kcl', 'kcm', 'kcn', 'kco', 'kcp', 'kcq', 'kcr', 'kcs', 'kct', 'kcu', 'kcv', 'kcw', 'kcx', 'kcy', 'kcz', 'kda', 'kdc', 'kdd', 'kde', 'kdf', 'kdg', 'kdh', 'kdi', 'kdj', 'kdk', 'kdl', 'kdm', 'kdn', 'kdo', 'kdp', 'kdq', 'kdr', 'kdt', 'kdu', 'kdv', 'kdw', 'kdx', 'kdy', 'kdz', 'kea', 'keb', 'kec', 'ked', 'kee', 'kef', 'keg', 'keh', 'kei', 'kej', 'kek', 'kel', 'kem', 'ken', 'keo', 'kep', 'keq', 'ker', 'kes', 'ket', 'keu', 'kev', 'kew', 'kex', 'key', 'kez', 'kfa', 'kfb', 'kfc', 'kfd', 'kfe', 'kff', 'kfg', 'kfh', 'kfi', 'kfj', 'kfk', 'kfl', 'kfm', 'kfn', 'kfo', 'kfp', 'kfq', 'kfr', 'kfs', 'kft', 'kfu', 'kfv', 'kfw', 'kfx', 'kfy', 'kfz', 'kga', 'kgb', 'kgc', 'kgd', 'kge', 'kgf', 'kgg', 'kgh', 'kgi', 'kgj', 'kgk', 'kgl', 'kgm', 'kgn', 'kgo', 'kgp', 'kgq', 'kgr', 'kgs', 'kgt', 'kgu', 'kgv', 'kgw', 'kgx', 'kgy', 'kha', 'khb', 'khc', 'khd', 'khe', 'khf', 'khg', 'khh', 'khi', 'khj', 'khk', 'khl', 'khn', 'kho', 'khp', 'khq', 'khr', 'khs', 'kht', 'khu', 'khv', 'khw', 'khx', 'khy', 'khz', 'kia', 'kib', 'kic', 'kid', 'kie', 'kif', 'kig', 'kih', 'kii', 'kij', 'kil', 'kim', 'kio', 'kip', 'kiq', 'kis', 'kit', 'kiu', 'kiv', 'kiw', 'kix', 'kiy', 'kiz', 'kja', 'kjb', 'kjc', 'kjd', 'kje', 'kjf', 'kjg', 'kjh', 'kji', 'kjj', 'kjk', 'kjl', 'kjm', 'kjn', 'kjo', 'kjp', 'kjq', 'kjr', 'kjs', 'kjt', 'kju', 'kjv', 'kjx', 'kjy', 'kjz', 'kka', 'kkb', 'kkc', 'kkd', 'kke', 'kkf', 'kkg', 'kkh', 'kki', 'kkj', 'kkk', 'kkl', 'kkm', 'kkn', 'kko', 'kkp', 'kkq', 'kkr', 'kks', 'kkt', 'kku', 'kkv', 'kkw', 'kkx', 'kky', 'kkz', 'kla', 'klb', 'klc', 'kld', 'kle', 'klf', 'klg', 'klh', 'kli', 'klj', 'klk', 'kll', 'klm', 'kln', 'klo', 'klp', 'klq', 'klr', 'kls', 'klt', 'klu', 'klv', 'klw', 'klx', 'kly', 'klz', 'kma', 'kmb', 'kmc', 'kmd', 'kme', 'kmf', 'kmg', 'kmh', 'kmi', 'kmj', 'kmk', 'kml', 'kmm', 'kmn', 'kmo', 'kmp', 'kmq', 'kmr', 'kms', 'kmt', 'kmu', 'kmv', 'kmw', 'kmx', 'kmy', 'kmz', 'kna', 'knb', 'knc', 'knd', 'kne', 'knf', 'kng', 'kni', 'knj', 'knk', 'knl', 'knm', 'knn', 'kno', 'knp', 'knq', 'knr', 'kns', 'knt', 'knu', 'knv', 'knw', 'knx', 'kny', 'knz', 'koa', 'koc', 'kod', 'koe', 'kof', 'kog', 'koh', 'koi', 'koj', 'kok', 'kol', 'koo', 'kop', 'koq', 'kos', 'kot', 'kou', 'kov', 'kow', 'kox', 'koy', 'koz', 'kpa', 'kpb', 'kpc', 'kpd', 'kpe', 'kpf', 'kpg', 'kph', 'kpi', 'kpj', 'kpk', 'kpl', 'kpm', 'kpn', 'kpo', 'kpp', 'kpq', 'kpr', 'kps', 'kpt', 'kpu', 'kpv', 'kpw', 'kpx', 'kpy', 'kpz', 'kqa', 'kqb', 'kqc', 'kqd', 'kqe', 'kqf', 'kqg', 'kqh', 'kqi', 'kqj', 'kqk', 'kql', 'kqm', 'kqn', 'kqo', 'kqp', 'kqq', 'kqr', 'kqs', 'kqt', 'kqu', 'kqv', 'kqw', 'kqx', 'kqy', 'kqz', 'kra', 'krb', 'krc', 'krd', 'kre', 'krf', 'krh', 'kri', 'krj', 'krk', 'krl', 'krm', 'krn', 'kro', 'krp', 'krr', 'krs', 'krt', 'kru', 'krv', 'krw', 'krx', 'kry', 'krz', 'ksa', 'ksb', 'ksc', 'ksd', 'kse', 'ksf', 'ksg', 'ksh', 'ksi', 'ksj', 'ksk', 'ksl', 'ksm', 'ksn', 'kso', 'ksp', 'ksq', 'ksr', 'kss', 'kst', 'ksu', 'ksv', 'ksw', 'ksx', 'ksy', 'ksz', 'kta', 'ktb', 'ktc', 'ktd', 'kte', 'ktf', 'ktg', 'kth', 'kti', 'ktj', 'ktk', 'ktl', 'ktm', 'ktn', 'kto', 'ktp', 'ktq', 'ktr', 'kts', 'ktt', 'ktu', 'ktv', 'ktw', 'ktx', 'kty', 'ktz', 'kub', 'kuc', 'kud', 'kue', 'kuf', 'kug', 'kuh', 'kui', 'kuj', 'kuk', 'kul', 'kum', 'kun', 'kuo', 'kup', 'kuq', 'kus', 'kut', 'kuu', 'kuv', 'kuw', 'kux', 'kuy', 'kuz', 'kva', 'kvb', 'kvc', 'kvd', 'kve', 'kvf', 'kvg', 'kvh', 'kvi', 'kvj', 'kvk', 'kvl', 'kvm', 'kvn', 'kvo', 'kvp', 'kvq', 'kvr', 'kvs', 'kvt', 'kvu', 'kvv', 'kvw', 'kvx', 'kvy', 'kvz', 'kwa', 'kwb', 'kwc', 'kwd', 'kwe', 'kwf', 'kwg', 'kwh', 'kwi', 'kwj', 'kwk', 'kwl', 'kwm', 'kwn', 'kwo', 'kwp', 'kwq', 'kwr', 'kws', 'kwt', 'kwu', 'kwv', 'kww', 'kwx', 'kwy', 'kwz', 'kxa', 'kxb', 'kxc', 'kxd', 'kxe', 'kxf', 'kxh', 'kxi', 'kxj', 'kxk', 'kxl', 'kxm', 'kxn', 'kxo', 'kxp', 'kxq', 'kxr', 'kxs', 'kxt', 'kxu', 'kxv', 'kxw', 'kxx', 'kxy', 'kxz', 'kya', 'kyb', 'kyc', 'kyd', 'kye', 'kyf', 'kyg', 'kyh', 'kyi', 'kyj', 'kyk', 'kyl', 'kym', 'kyn', 'kyo', 'kyp', 'kyq', 'kyr', 'kys', 'kyt', 'kyu', 'kyv', 'kyw', 'kyx', 'kyy', 'kyz', 'kza', 'kzb', 'kzc', 'kzd', 'kze', 'kzf', 'kzg', 'kzh', 'kzi', 'kzj', 'kzk', 'kzl', 'kzm', 'kzn', 'kzo', 'kzp', 'kzq', 'kzr', 'kzs', 'kzt', 'kzu', 'kzv', 'kzw', 'kzx', 'kzy', 'kzz', 'laa', 'lab', 'lac', 'lad', 'lae', 'laf', 'lag', 'lah', 'lai', 'laj', 'lak', 'lal', 'lam', 'lan', 'lap', 'laq', 'lar', 'las', 'lau', 'law', 'lax', 'lay', 'laz', 'lba', 'lbb', 'lbc', 'lbe', 'lbf', 'lbg', 'lbi', 'lbj', 'lbk', 'lbl', 'lbm', 'lbn', 'lbo', 'lbq', 'lbr', 'lbs', 'lbt', 'lbu', 'lbv', 'lbw', 'lbx', 'lby', 'lbz', 'lcc', 'lcd', 'lce', 'lcf', 'lch', 'lcl', 'lcm', 'lcp', 'lcq', 'lcs', 'lda', 'ldb', 'ldd', 'ldg', 'ldh', 'ldi', 'ldj', 'ldk', 'ldl', 'ldm', 'ldn', 'ldo', 'ldp', 'ldq', 'lea', 'leb', 'lec', 'led', 'lee', 'lef', 'leg', 'leh', 'lei', 'lej', 'lek', 'lel', 'lem', 'len', 'leo', 'lep', 'leq', 'ler', 'les', 'let', 'leu', 'lev', 'lew', 'lex', 'ley', 'lez', 'lfa', 'lfn', 'lga', 'lgb', 'lgg', 'lgh', 'lgi', 'lgk', 'lgl', 'lgm', 'lgn', 'lgq', 'lgr', 'lgt', 'lgu', 'lgz', 'lha', 'lhh', 'lhi', 'lhl', 'lhm', 'lhn', 'lhp', 'lhs', 'lht', 'lhu', 'lia', 'lib', 'lic', 'lid', 'lie', 'lif', 'lig', 'lih', 'lii', 'lij', 'lik', 'lil', 'lio', 'lip', 'liq', 'lir', 'lis', 'liu', 'liv', 'liw', 'lix', 'liy', 'liz', 'lja', 'lje', 'lji', 'ljl', 'ljp', 'ljw', 'ljx', 'lka', 'lkb', 'lkc', 'lkd', 'lke', 'lkh', 'lki', 'lkj', 'lkl', 'lkm', 'lkn', 'lko', 'lkr', 'lks', 'lkt', 'lku', 'lky', 'lla', 'llb', 'llc', 'lld', 'lle', 'llf', 'llg', 'llh', 'lli', 'llj', 'llk', 'lll', 'llm', 'lln', 'llo', 'llp', 'llq', 'lls', 'llu', 'llx', 'lma', 'lmb', 'lmc', 'lmd', 'lme', 'lmf', 'lmg', 'lmh', 'lmi', 'lmj', 'lmk', 'lml', 'lmm', 'lmn', 'lmo', 'lmp', 'lmq', 'lmr', 'lmu', 'lmv', 'lmw', 'lmx', 'lmy', 'lmz', 'lna', 'lnb', 'lnd', 'lng', 'lnh', 'lni', 'lnj', 'lnl', 'lnm', 'lnn', 'lno', 'lns', 'lnu', 'lnw', 'lnz', 'loa', 'lob', 'loc', 'loe', 'lof', 'log', 'loh', 'loi', 'loj', 'lok', 'lol', 'lom', 'lon', 'loo', 'lop', 'loq', 'lor', 'los', 'lot', 'lou', 'lov', 'low', 'lox', 'loy', 'loz', 'lpa', 'lpe', 'lpn', 'lpo', 'lpx', 'lra', 'lrc', 'lre', 'lrg', 'lri', 'lrk', 'lrl', 'lrm', 'lrn', 'lro', 'lrr', 'lrt', 'lrv', 'lrz', 'lsa', 'lsd', 'lse', 'lsg', 'lsh', 'lsi', 'lsl', 'lsm', 'lso', 'lsp', 'lsr', 'lss', 'lst', 'lsy', 'ltc', 'ltg', 'lth', 'lti', 'ltn', 'lto', 'lts', 'ltu', 'lua', 'luc', 'lud', 'lue', 'luf', 'lui', 'luj', 'luk', 'lul', 'lum', 'lun', 'luo', 'lup', 'luq', 'lur', 'lus', 'lut', 'luu', 'luv', 'luw', 'luy', 'luz', 'lva', 'lvk', 'lvs', 'lvu', 'lwa', 'lwe', 'lwg', 'lwh', 'lwl', 'lwm', 'lwo', 'lwt', 'lwu', 'lww', 'lya', 'lyg', 'lyn', 'lzh', 'lzl', 'lzn', 'lzz', 'maa', 'mab', 'mad', 'mae', 'maf', 'mag', 'mai', 'maj', 'mak', 'mam', 'man', 'map', 'maq', 'mas', 'mat', 'mau', 'mav', 'maw', 'max', 'maz', 'mba', 'mbb', 'mbc', 'mbd', 'mbe', 'mbf', 'mbh', 'mbi', 'mbj', 'mbk', 'mbl', 'mbm', 'mbn', 'mbo', 'mbp', 'mbq', 'mbr', 'mbs', 'mbt', 'mbu', 'mbv', 'mbw', 'mbx', 'mby', 'mbz', 'mca', 'mcb', 'mcc', 'mcd', 'mce', 'mcf', 'mcg', 'mch', 'mci', 'mcj', 'mck', 'mcl', 'mcm', 'mcn', 'mco', 'mcp', 'mcq', 'mcr', 'mcs', 'mct', 'mcu', 'mcv', 'mcw', 'mcx', 'mcy', 'mcz', 'mda', 'mdb', 'mdc', 'mdd', 'mde', 'mdf', 'mdg', 'mdh', 'mdi', 'mdj', 'mdk', 'mdl', 'mdm', 'mdn', 'mdp', 'mdq', 'mdr', 'mds', 'mdt', 'mdu', 'mdv', 'mdw', 'mdx', 'mdy', 'mdz', 'mea', 'meb', 'mec', 'med', 'mee', 'mef', 'meg', 'meh', 'mei', 'mej', 'mek', 'mel', 'mem', 'men', 'meo', 'mep', 'meq', 'mer', 'mes', 'met', 'meu', 'mev', 'mew', 'mey', 'mez', 'mfa', 'mfb', 'mfc', 'mfd', 'mfe', 'mff', 'mfg', 'mfh', 'mfi', 'mfj', 'mfk', 'mfl', 'mfm', 'mfn', 'mfo', 'mfp', 'mfq', 'mfr', 'mfs', 'mft', 'mfu', 'mfv', 'mfw', 'mfx', 'mfy', 'mfz', 'mga', 'mgb', 'mgc', 'mgd', 'mge', 'mgf', 'mgg', 'mgh', 'mgi', 'mgj', 'mgk', 'mgl', 'mgm', 'mgn', 'mgo', 'mgp', 'mgq', 'mgr', 'mgs', 'mgt', 'mgu', 'mgv', 'mgw', 'mgx', 'mgy', 'mgz', 'mha', 'mhb', 'mhc', 'mhd', 'mhe', 'mhf', 'mhg', 'mhh', 'mhi', 'mhj', 'mhk', 'mhl', 'mhm', 'mhn', 'mho', 'mhp', 'mhq', 'mhr', 'mhs', 'mht', 'mhu', 'mhw', 'mhx', 'mhy', 'mhz', 'mia', 'mib', 'mic', 'mid', 'mie', 'mif', 'mig', 'mih', 'mii', 'mij', 'mik', 'mil', 'mim', 'min', 'mio', 'mip', 'miq', 'mir', 'mis', 'mit', 'miu', 'miw', 'mix', 'miy', 'miz', 'mja', 'mjb', 'mjc', 'mjd', 'mje', 'mjg', 'mjh', 'mji', 'mjj', 'mjk', 'mjl', 'mjm', 'mjn', 'mjo', 'mjp', 'mjq', 'mjr', 'mjs', 'mjt', 'mju', 'mjv', 'mjw', 'mjx', 'mjy', 'mjz', 'mka', 'mkb', 'mkc', 'mke', 'mkf', 'mkg', 'mkh', 'mki', 'mkj', 'mkk', 'mkl', 'mkm', 'mkn', 'mko', 'mkp', 'mkq', 'mkr', 'mks', 'mkt', 'mku', 'mkv', 'mkw', 'mkx', 'mky', 'mkz', 'mla', 'mlb', 'mlc', 'mld', 'mle', 'mlf', 'mlh', 'mli', 'mlj', 'mlk', 'mll', 'mlm', 'mln', 'mlo', 'mlp', 'mlq', 'mlr', 'mls', 'mlu', 'mlv', 'mlw', 'mlx', 'mlz', 'mma', 'mmb', 'mmc', 'mmd', 'mme', 'mmf', 'mmg', 'mmh', 'mmi', 'mmj', 'mmk', 'mml', 'mmm', 'mmn', 'mmo', 'mmp', 'mmq', 'mmr', 'mmt', 'mmu', 'mmv', 'mmw', 'mmx', 'mmy', 'mmz', 'mna', 'mnb', 'mnc', 'mnd', 'mne', 'mnf', 'mng', 'mnh', 'mni', 'mnj', 'mnk', 'mnl', 'mnm', 'mnn', 'mno', 'mnp', 'mnq', 'mnr', 'mns', 'mnt', 'mnu', 'mnv', 'mnw', 'mnx', 'mny', 'mnz', 'moa', 'moc', 'mod', 'moe', 'mof', 'mog', 'moh', 'moi', 'moj', 'mok', 'mom', 'moo', 'mop', 'moq', 'mor', 'mos', 'mot', 'mou', 'mov', 'mow', 'mox', 'moy', 'moz', 'mpa', 'mpb', 'mpc', 'mpd', 'mpe', 'mpg', 'mph', 'mpi', 'mpj', 'mpk', 'mpl', 'mpm', 'mpn', 'mpo', 'mpp', 'mpq', 'mpr', 'mps', 'mpt', 'mpu', 'mpv', 'mpw', 'mpx', 'mpy', 'mpz', 'mqa', 'mqb', 'mqc', 'mqe', 'mqf', 'mqg', 'mqh', 'mqi', 'mqj', 'mqk', 'mql', 'mqm', 'mqn', 'mqo', 'mqp', 'mqq', 'mqr', 'mqs', 'mqt', 'mqu', 'mqv', 'mqw', 'mqx', 'mqy', 'mqz', 'mra', 'mrb', 'mrc', 'mrd', 'mre', 'mrf', 'mrg', 'mrh', 'mrj', 'mrk', 'mrl', 'mrm', 'mrn', 'mro', 'mrp', 'mrq', 'mrr', 'mrs', 'mrt', 'mru', 'mrv', 'mrw', 'mrx', 'mry', 'mrz', 'msb', 'msc', 'msd', 'mse', 'msf', 'msg', 'msh', 'msi', 'msj', 'msk', 'msl', 'msm', 'msn', 'mso', 'msp', 'msq', 'msr', 'mss', 'mst', 'msu', 'msv', 'msw', 'msx', 'msy', 'msz', 'mta', 'mtb', 'mtc', 'mtd', 'mte', 'mtf', 'mtg', 'mth', 'mti', 'mtj', 'mtk', 'mtl', 'mtm', 'mtn', 'mto', 'mtp', 'mtq', 'mtr', 'mts', 'mtt', 'mtu', 'mtv', 'mtw', 'mtx', 'mty', 'mua', 'mub', 'muc', 'mud', 'mue', 'mug', 'muh', 'mui', 'muj', 'muk', 'mul', 'mum', 'mun', 'muo', 'mup', 'muq', 'mur', 'mus', 'mut', 'muu', 'muv', 'mux', 'muy', 'muz', 'mva', 'mvb', 'mvd', 'mve', 'mvf', 'mvg', 'mvh', 'mvi', 'mvk', 'mvl', 'mvm', 'mvn', 'mvo', 'mvp', 'mvq', 'mvr', 'mvs', 'mvt', 'mvu', 'mvv', 'mvw', 'mvx', 'mvy', 'mvz', 'mwa', 'mwb', 'mwc', 'mwd', 'mwe', 'mwf', 'mwg', 'mwh', 'mwi', 'mwj', 'mwk', 'mwl', 'mwm', 'mwn', 'mwo', 'mwp', 'mwq', 'mwr', 'mws', 'mwt', 'mwu', 'mwv', 'mww', 'mwx', 'mwy', 'mwz', 'mxa', 'mxb', 'mxc', 'mxd', 'mxe', 'mxf', 'mxg', 'mxh', 'mxi', 'mxj', 'mxk', 'mxl', 'mxm', 'mxn', 'mxo', 'mxp', 'mxq', 'mxr', 'mxs', 'mxt', 'mxu', 'mxv', 'mxw', 'mxx', 'mxy', 'mxz', 'myb', 'myc', 'myd', 'mye', 'myf', 'myg', 'myh', 'myi', 'myj', 'myk', 'myl', 'mym', 'myn', 'myo', 'myp', 'myq', 'myr', 'mys', 'myt', 'myu', 'myv', 'myw', 'myx', 'myy', 'myz', 'mza', 'mzb', 'mzc', 'mzd', 'mze', 'mzg', 'mzh', 'mzi', 'mzj', 'mzk', 'mzl', 'mzm', 'mzn', 'mzo', 'mzp', 'mzq', 'mzr', 'mzs', 'mzt', 'mzu', 'mzv', 'mzw', 'mzx', 'mzy', 'mzz', 'naa', 'nab', 'nac', 'nad', 'nae', 'naf', 'nag', 'nah', 'nai', 'naj', 'nak', 'nal', 'nam', 'nan', 'nao', 'nap', 'naq', 'nar', 'nas', 'nat', 'naw', 'nax', 'nay', 'naz', 'nba', 'nbb', 'nbc', 'nbd', 'nbe', 'nbf', 'nbg', 'nbh', 'nbi', 'nbj', 'nbk', 'nbm', 'nbn', 'nbo', 'nbp', 'nbq', 'nbr', 'nbs', 'nbt', 'nbu', 'nbv', 'nbw', 'nbx', 'nby', 'nca', 'ncb', 'ncc', 'ncd', 'nce', 'ncf', 'ncg', 'nch', 'nci', 'ncj', 'nck', 'ncl', 'ncm', 'ncn', 'nco', 'ncp', 'ncq', 'ncr', 'ncs', 'nct', 'ncu', 'ncx', 'ncz', 'nda', 'ndb', 'ndc', 'ndd', 'ndf', 'ndg', 'ndh', 'ndi', 'ndj', 'ndk', 'ndl', 'ndm', 'ndn', 'ndp', 'ndq', 'ndr', 'nds', 'ndt', 'ndu', 'ndv', 'ndw', 'ndx', 'ndy', 'ndz', 'nea', 'neb', 'nec', 'ned', 'nee', 'nef', 'neg', 'neh', 'nei', 'nej', 'nek', 'nem', 'nen', 'neo', 'neq', 'ner', 'nes', 'net', 'neu', 'nev', 'new', 'nex', 'ney', 'nez', 'nfa', 'nfd', 'nfl', 'nfr', 'nfu', 'nga', 'ngb', 'ngc', 'ngd', 'nge', 'ngf', 'ngg', 'ngh', 'ngi', 'ngj', 'ngk', 'ngl', 'ngm', 'ngn', 'ngo', 'ngp', 'ngq', 'ngr', 'ngs', 'ngt', 'ngu', 'ngv', 'ngw', 'ngx', 'ngy', 'ngz', 'nha', 'nhb', 'nhc', 'nhd', 'nhe', 'nhf', 'nhg', 'nhh', 'nhi', 'nhk', 'nhm', 'nhn', 'nho', 'nhp', 'nhq', 'nhr', 'nht', 'nhu', 'nhv', 'nhw', 'nhx', 'nhy', 'nhz', 'nia', 'nib', 'nic', 'nid', 'nie', 'nif', 'nig', 'nih', 'nii', 'nij', 'nik', 'nil', 'nim', 'nin', 'nio', 'niq', 'nir', 'nis', 'nit', 'niu', 'niv', 'niw', 'nix', 'niy', 'niz', 'nja', 'njb', 'njd', 'njh', 'nji', 'njj', 'njl', 'njm', 'njn', 'njo', 'njr', 'njs', 'njt', 'nju', 'njx', 'njy', 'njz', 'nka', 'nkb', 'nkc', 'nkd', 'nke', 'nkf', 'nkg', 'nkh', 'nki', 'nkj', 'nkk', 'nkm', 'nkn', 'nko', 'nkp', 'nkq', 'nkr', 'nks', 'nkt', 'nku', 'nkv', 'nkw', 'nkx', 'nkz', 'nla', 'nlc', 'nle', 'nlg', 'nli', 'nlj', 'nlk', 'nll', 'nln', 'nlo', 'nlq', 'nlr', 'nlu', 'nlv', 'nlw', 'nlx', 'nly', 'nlz', 'nma', 'nmb', 'nmc', 'nmd', 'nme', 'nmf', 'nmg', 'nmh', 'nmi', 'nmj', 'nmk', 'nml', 'nmm', 'nmn', 'nmo', 'nmp', 'nmq', 'nmr', 'nms', 'nmt', 'nmu', 'nmv', 'nmw', 'nmx', 'nmy', 'nmz', 'nna', 'nnb', 'nnc', 'nnd', 'nne', 'nnf', 'nng', 'nnh', 'nni', 'nnj', 'nnk', 'nnl', 'nnm', 'nnn', 'nnp', 'nnq', 'nnr', 'nns', 'nnt', 'nnu', 'nnv', 'nnw', 'nnx', 'nny', 'nnz', 'noa', 'noc', 'nod', 'noe', 'nof', 'nog', 'noh', 'noi', 'noj', 'nok', 'nol', 'nom', 'non', 'noo', 'nop', 'noq', 'nos', 'not', 'nou', 'nov', 'now', 'noy', 'noz', 'npa', 'npb', 'npg', 'nph', 'npi', 'npl', 'npn', 'npo', 'nps', 'npu', 'npx', 'npy', 'nqg', 'nqk', 'nql', 'nqm', 'nqn', 'nqo', 'nqq', 'nqy', 'nra', 'nrb', 'nrc', 'nre', 'nrf', 'nrg', 'nri', 'nrk', 'nrl', 'nrm', 'nrn', 'nrp', 'nrr', 'nrt', 'nru', 'nrx', 'nrz', 'nsa', 'nsc', 'nsd', 'nse', 'nsf', 'nsg', 'nsh', 'nsi', 'nsk', 'nsl', 'nsm', 'nsn', 'nso', 'nsp', 'nsq', 'nsr', 'nss', 'nst', 'nsu', 'nsv', 'nsw', 'nsx', 'nsy', 'nsz', 'ntd', 'nte', 'ntg', 'nti', 'ntj', 'ntk', 'ntm', 'nto', 'ntp', 'ntr', 'nts', 'ntu', 'ntw', 'ntx', 'nty', 'ntz', 'nua', 'nub', 'nuc', 'nud', 'nue', 'nuf', 'nug', 'nuh', 'nui', 'nuj', 'nuk', 'nul', 'num', 'nun', 'nuo', 'nup', 'nuq', 'nur', 'nus', 'nut', 'nuu', 'nuv', 'nuw', 'nux', 'nuy', 'nuz', 'nvh', 'nvm', 'nvo', 'nwa', 'nwb', 'nwc', 'nwe', 'nwg', 'nwi', 'nwm', 'nwo', 'nwr', 'nwx', 'nwy', 'nxa', 'nxd', 'nxe', 'nxg', 'nxi', 'nxk', 'nxl', 'nxm', 'nxn', 'nxo', 'nxq', 'nxr', 'nxu', 'nxx', 'nyb', 'nyc', 'nyd', 'nye', 'nyf', 'nyg', 'nyh', 'nyi', 'nyj', 'nyk', 'nyl', 'nym', 'nyn', 'nyo', 'nyp', 'nyq', 'nyr', 'nys', 'nyt', 'nyu', 'nyv', 'nyw', 'nyx', 'nyy', 'nza', 'nzb', 'nzi', 'nzk', 'nzm', 'nzs', 'nzu', 'nzy', 'nzz', 'oaa', 'oac', 'oar', 'oav', 'obi', 'obk', 'obl', 'obm', 'obo', 'obr', 'obt', 'obu', 'oca', 'och', 'oco', 'ocu', 'oda', 'odk', 'odt', 'odu', 'ofo', 'ofs', 'ofu', 'ogb', 'ogc', 'oge', 'ogg', 'ogo', 'ogu', 'oht', 'ohu', 'oia', 'oin', 'ojb', 'ojc', 'ojg', 'ojp', 'ojs', 'ojv', 'ojw', 'oka', 'okb', 'okd', 'oke', 'okg', 'okh', 'oki', 'okj', 'okk', 'okl', 'okm', 'okn', 'oko', 'okr', 'oks', 'oku', 'okv', 'okx', 'ola', 'old', 'ole', 'olk', 'olm', 'olo', 'olr', 'olt', 'olu', 'oma', 'omb', 'omc', 'ome', 'omg', 'omi', 'omk', 'oml', 'omn', 'omo', 'omp', 'omq', 'omr', 'omt', 'omu', 'omv', 'omw', 'omx', 'ona', 'onb', 'one', 'ong', 'oni', 'onj', 'onk', 'onn', 'ono', 'onp', 'onr', 'ons', 'ont', 'onu', 'onw', 'onx', 'ood', 'oog', 'oon', 'oor', 'oos', 'opa', 'opk', 'opm', 'opo', 'opt', 'opy', 'ora', 'orc', 'ore', 'org', 'orh', 'orn', 'oro', 'orr', 'ors', 'ort', 'oru', 'orv', 'orw', 'orx', 'ory', 'orz', 'osa', 'osc', 'osi', 'oso', 'osp', 'ost', 'osu', 'osx', 'ota', 'otb', 'otd', 'ote', 'oti', 'otk', 'otl', 'otm', 'otn', 'oto', 'otq', 'otr', 'ots', 'ott', 'otu', 'otw', 'otx', 'oty', 'otz', 'oua', 'oub', 'oue', 'oui', 'oum', 'oun', 'ovd', 'owi', 'owl', 'oyb', 'oyd', 'oym', 'oyy', 'ozm', 'paa', 'pab', 'pac', 'pad', 'pae', 'paf', 'pag', 'pah', 'pai', 'pak', 'pal', 'pam', 'pao', 'pap', 'paq', 'par', 'pas', 'pat', 'pau', 'pav', 'paw', 'pax', 'pay', 'paz', 'pbb', 'pbc', 'pbe', 'pbf', 'pbg', 'pbh', 'pbi', 'pbl', 'pbn', 'pbo', 'pbp', 'pbr', 'pbs', 'pbt', 'pbu', 'pbv', 'pby', 'pbz', 'pca', 'pcb', 'pcc', 'pcd', 'pce', 'pcf', 'pcg', 'pch', 'pci', 'pcj', 'pck', 'pcl', 'pcm', 'pcn', 'pcp', 'pcr', 'pcw', 'pda', 'pdc', 'pdi', 'pdn', 'pdo', 'pdt', 'pdu', 'pea', 'peb', 'ped', 'pee', 'pef', 'peg', 'peh', 'pei', 'pej', 'pek', 'pel', 'pem', 'peo', 'pep', 'peq', 'pes', 'pev', 'pex', 'pey', 'pez', 'pfa', 'pfe', 'pfl', 'pga', 'pgd', 'pgg', 'pgi', 'pgk', 'pgl', 'pgn', 'pgs', 'pgu', 'pgy', 'pgz', 'pha', 'phd', 'phg', 'phh', 'phi', 'phk', 'phl', 'phm', 'phn', 'pho', 'phq', 'phr', 'pht', 'phu', 'phv', 'phw', 'pia', 'pib', 'pic', 'pid', 'pie', 'pif', 'pig', 'pih', 'pii', 'pij', 'pil', 'pim', 'pin', 'pio', 'pip', 'pir', 'pis', 'pit', 'piu', 'piv', 'piw', 'pix', 'piy', 'piz', 'pjt', 'pka', 'pkb', 'pkc', 'pkg', 'pkh', 'pkn', 'pko', 'pkp', 'pkr', 'pks', 'pkt', 'pku', 'pla', 'plb', 'plc', 'pld', 'ple', 'plf', 'plg', 'plh', 'plj', 'plk', 'pll', 'pln', 'plo', 'plp', 'plq', 'plr', 'pls', 'plt', 'plu', 'plv', 'plw', 'ply', 'plz', 'pma', 'pmb', 'pmc', 'pmd', 'pme', 'pmf', 'pmh', 'pmi', 'pmj', 'pmk', 'pml', 'pmm', 'pmn', 'pmo', 'pmq', 'pmr', 'pms', 'pmt', 'pmu', 'pmw', 'pmx', 'pmy', 'pmz', 'pna', 'pnb', 'pnc', 'pne', 'png', 'pnh', 'pni', 'pnj', 'pnk', 'pnl', 'pnm', 'pnn', 'pno', 'pnp', 'pnq', 'pnr', 'pns', 'pnt', 'pnu', 'pnv', 'pnw', 'pnx', 'pny', 'pnz', 'poc', 'pod', 'poe', 'pof', 'pog', 'poh', 'poi', 'pok', 'pom', 'pon', 'poo', 'pop', 'poq', 'pos', 'pot', 'pov', 'pow', 'pox', 'poy', 'poz', 'ppa', 'ppe', 'ppi', 'ppk', 'ppl', 'ppm', 'ppn', 'ppo', 'ppp', 'ppq', 'ppr', 'pps', 'ppt', 'ppu', 'pqa', 'pqe', 'pqm', 'pqw', 'pra', 'prb', 'prc', 'prd', 'pre', 'prf', 'prg', 'prh', 'pri', 'prk', 'prl', 'prm', 'prn', 'pro', 'prp', 'prq', 'prr', 'prs', 'prt', 'pru', 'prw', 'prx', 'pry', 'prz', 'psa', 'psc', 'psd', 'pse', 'psg', 'psh', 'psi', 'psl', 'psm', 'psn', 'pso', 'psp', 'psq', 'psr', 'pss', 'pst', 'psu', 'psw', 'psy', 'pta', 'pth', 'pti', 'ptn', 'pto', 'ptp', 'ptq', 'ptr', 'ptt', 'ptu', 'ptv', 'ptw', 'pty', 'pua', 'pub', 'puc', 'pud', 'pue', 'puf', 'pug', 'pui', 'puj', 'puk', 'pum', 'puo', 'pup', 'puq', 'pur', 'put', 'puu', 'puw', 'pux', 'puy', 'puz', 'pwa', 'pwb', 'pwg', 'pwi', 'pwm', 'pwn', 'pwo', 'pwr', 'pww', 'pxm', 'pye', 'pym', 'pyn', 'pys', 'pyu', 'pyx', 'pyy', 'pzn', 'qaa..qtz', 'qua', 'qub', 'quc', 'qud', 'quf', 'qug', 'quh', 'qui', 'quk', 'qul', 'qum', 'qun', 'qup', 'quq', 'qur', 'qus', 'quv', 'quw', 'qux', 'quy', 'quz', 'qva', 'qvc', 'qve', 'qvh', 'qvi', 'qvj', 'qvl', 'qvm', 'qvn', 'qvo', 'qvp', 'qvs', 'qvw', 'qvy', 'qvz', 'qwa', 'qwc', 'qwe', 'qwh', 'qwm', 'qws', 'qwt', 'qxa', 'qxc', 'qxh', 'qxl', 'qxn', 'qxo', 'qxp', 'qxq', 'qxr', 'qxs', 'qxt', 'qxu', 'qxw', 'qya', 'qyp', 'raa', 'rab', 'rac', 'rad', 'raf', 'rag', 'rah', 'rai', 'raj', 'rak', 'ral', 'ram', 'ran', 'rao', 'rap', 'raq', 'rar', 'ras', 'rat', 'rau', 'rav', 'raw', 'rax', 'ray', 'raz', 'rbb', 'rbk', 'rbl', 'rbp', 'rcf', 'rdb', 'rea', 'reb', 'ree', 'reg', 'rei', 'rej', 'rel', 'rem', 'ren', 'rer', 'res', 'ret', 'rey', 'rga', 'rge', 'rgk', 'rgn', 'rgr', 'rgs', 'rgu', 'rhg', 'rhp', 'ria', 'rie', 'rif', 'ril', 'rim', 'rin', 'rir', 'rit', 'riu', 'rjg', 'rji', 'rjs', 'rka', 'rkb', 'rkh', 'rki', 'rkm', 'rkt', 'rkw', 'rma', 'rmb', 'rmc', 'rmd', 'rme', 'rmf', 'rmg', 'rmh', 'rmi', 'rmk', 'rml', 'rmm', 'rmn', 'rmo', 'rmp', 'rmq', 'rmr', 'rms', 'rmt', 'rmu', 'rmv', 'rmw', 'rmx', 'rmy', 'rmz', 'rna', 'rnd', 'rng', 'rnl', 'rnn', 'rnp', 'rnr', 'rnw', 'roa', 'rob', 'roc', 'rod', 'roe', 'rof', 'rog', 'rol', 'rom', 'roo', 'rop', 'ror', 'rou', 'row', 'rpn', 'rpt', 'rri', 'rro', 'rrt', 'rsb', 'rsi', 'rsl', 'rsm', 'rtc', 'rth', 'rtm', 'rts', 'rtw', 'rub', 'ruc', 'rue', 'ruf', 'rug', 'ruh', 'rui', 'ruk', 'ruo', 'rup', 'ruq', 'rut', 'ruu', 'ruy', 'ruz', 'rwa', 'rwk', 'rwm', 'rwo', 'rwr', 'rxd', 'rxw', 'ryn', 'rys', 'ryu', 'rzh', 'saa', 'sab', 'sac', 'sad', 'sae', 'saf', 'sah', 'sai', 'saj', 'sak', 'sal', 'sam', 'sao', 'sap', 'saq', 'sar', 'sas', 'sat', 'sau', 'sav', 'saw', 'sax', 'say', 'saz', 'sba', 'sbb', 'sbc', 'sbd', 'sbe', 'sbf', 'sbg', 'sbh', 'sbi', 'sbj', 'sbk', 'sbl', 'sbm', 'sbn', 'sbo', 'sbp', 'sbq', 'sbr', 'sbs', 'sbt', 'sbu', 'sbv', 'sbw', 'sbx', 'sby', 'sbz', 'sca', 'scb', 'sce', 'scf', 'scg', 'sch', 'sci', 'sck', 'scl', 'scn', 'sco', 'scp', 'scq', 'scs', 'sct', 'scu', 'scv', 'scw', 'scx', 'sda', 'sdb', 'sdc', 'sde', 'sdf', 'sdg', 'sdh', 'sdj', 'sdk', 'sdl', 'sdm', 'sdn', 'sdo', 'sdp', 'sdr', 'sds', 'sdt', 'sdu', 'sdv', 'sdx', 'sdz', 'sea', 'seb', 'sec', 'sed', 'see', 'sef', 'seg', 'seh', 'sei', 'sej', 'sek', 'sel', 'sem', 'sen', 'seo', 'sep', 'seq', 'ser', 'ses', 'set', 'seu', 'sev', 'sew', 'sey', 'sez', 'sfb', 'sfe', 'sfm', 'sfs', 'sfw', 'sga', 'sgb', 'sgc', 'sgd', 'sge', 'sgg', 'sgh', 'sgi', 'sgj', 'sgk', 'sgl', 'sgm', 'sgn', 'sgo', 'sgp', 'sgr', 'sgs', 'sgt', 'sgu', 'sgw', 'sgx', 'sgy', 'sgz', 'sha', 'shb', 'shc', 'shd', 'she', 'shg', 'shh', 'shi', 'shj', 'shk', 'shl', 'shm', 'shn', 'sho', 'shp', 'shq', 'shr', 'shs', 'sht', 'shu', 'shv', 'shw', 'shx', 'shy', 'shz', 'sia', 'sib', 'sid', 'sie', 'sif', 'sig', 'sih', 'sii', 'sij', 'sik', 'sil', 'sim', 'sio', 'sip', 'siq', 'sir', 'sis', 'sit', 'siu', 'siv', 'siw', 'six', 'siy', 'siz', 'sja', 'sjb', 'sjd', 'sje', 'sjg', 'sjk', 'sjl', 'sjm', 'sjn', 'sjo', 'sjp', 'sjr', 'sjs', 'sjt', 'sju', 'sjw', 'ska', 'skb', 'skc', 'skd', 'ske', 'skf', 'skg', 'skh', 'ski', 'skj', 'skk', 'skm', 'skn', 'sko', 'skp', 'skq', 'skr', 'sks', 'skt', 'sku', 'skv', 'skw', 'skx', 'sky', 'skz', 'sla', 'slc', 'sld', 'sle', 'slf', 'slg', 'slh', 'sli', 'slj', 'sll', 'slm', 'sln', 'slp', 'slq', 'slr', 'sls', 'slt', 'slu', 'slw', 'slx', 'sly', 'slz', 'sma', 'smb', 'smc', 'smd', 'smf', 'smg', 'smh', 'smi', 'smj', 'smk', 'sml', 'smm', 'smn', 'smp', 'smq', 'smr', 'sms', 'smt', 'smu', 'smv', 'smw', 'smx', 'smy', 'smz', 'snb', 'snc', 'sne', 'snf', 'sng', 'snh', 'sni', 'snj', 'snk', 'snl', 'snm', 'snn', 'sno', 'snp', 'snq', 'snr', 'sns', 'snu', 'snv', 'snw', 'snx', 'sny', 'snz', 'soa', 'sob', 'soc', 'sod', 'soe', 'sog', 'soh', 'soi', 'soj', 'sok', 'sol', 'son', 'soo', 'sop', 'soq', 'sor', 'sos', 'sou', 'sov', 'sow', 'sox', 'soy', 'soz', 'spb', 'spc', 'spd', 'spe', 'spg', 'spi', 'spk', 'spl', 'spm', 'spn', 'spo', 'spp', 'spq', 'spr', 'sps', 'spt', 'spu', 'spv', 'spx', 'spy', 'sqa', 'sqh', 'sqj', 'sqk', 'sqm', 'sqn', 'sqo', 'sqq', 'sqr', 'sqs', 'sqt', 'squ', 'sra', 'srb', 'src', 'sre', 'srf', 'srg', 'srh', 'sri', 'srk', 'srl', 'srm', 'srn', 'sro', 'srq', 'srr', 'srs', 'srt', 'sru', 'srv', 'srw', 'srx', 'sry', 'srz', 'ssa', 'ssb', 'ssc', 'ssd', 'sse', 'ssf', 'ssg', 'ssh', 'ssi', 'ssj', 'ssk', 'ssl', 'ssm', 'ssn', 'sso', 'ssp', 'ssq', 'ssr', 'sss', 'sst', 'ssu', 'ssv', 'ssx', 'ssy', 'ssz', 'sta', 'stb', 'std', 'ste', 'stf', 'stg', 'sth', 'sti', 'stj', 'stk', 'stl', 'stm', 'stn', 'sto', 'stp', 'stq', 'str', 'sts', 'stt', 'stu', 'stv', 'stw', 'sty', 'sua', 'sub', 'suc', 'sue', 'sug', 'sui', 'suj', 'suk', 'sul', 'sum', 'suq', 'sur', 'sus', 'sut', 'suv', 'suw', 'sux', 'suy', 'suz', 'sva', 'svb', 'svc', 'sve', 'svk', 'svm', 'svr', 'svs', 'svx', 'swb', 'swc', 'swf', 'swg', 'swh', 'swi', 'swj', 'swk', 'swl', 'swm', 'swn', 'swo', 'swp', 'swq', 'swr', 'sws', 'swt', 'swu', 'swv', 'sww', 'swx', 'swy', 'sxb', 'sxc', 'sxe', 'sxg', 'sxk', 'sxl', 'sxm', 'sxn', 'sxo', 'sxr', 'sxs', 'sxu', 'sxw', 'sya', 'syb', 'syc', 'syd', 'syi', 'syk', 'syl', 'sym', 'syn', 'syo', 'syr', 'sys', 'syw', 'syx', 'syy', 'sza', 'szb', 'szc', 'szd', 'sze', 'szg', 'szl', 'szn', 'szp', 'szs', 'szv', 'szw', 'taa', 'tab', 'tac', 'tad', 'tae', 'taf', 'tag', 'tai', 'taj', 'tak', 'tal', 'tan', 'tao', 'tap', 'taq', 'tar', 'tas', 'tau', 'tav', 'taw', 'tax', 'tay', 'taz', 'tba', 'tbb', 'tbc', 'tbd', 'tbe', 'tbf', 'tbg', 'tbh', 'tbi', 'tbj', 'tbk', 'tbl', 'tbm', 'tbn', 'tbo', 'tbp', 'tbq', 'tbr', 'tbs', 'tbt', 'tbu', 'tbv', 'tbw', 'tbx', 'tby', 'tbz', 'tca', 'tcb', 'tcc', 'tcd', 'tce', 'tcf', 'tcg', 'tch', 'tci', 'tck', 'tcl', 'tcm', 'tcn', 'tco', 'tcp', 'tcq', 'tcs', 'tct', 'tcu', 'tcw', 'tcx', 'tcy', 'tcz', 'tda', 'tdb', 'tdc', 'tdd', 'tde', 'tdf', 'tdg', 'tdh', 'tdi', 'tdj', 'tdk', 'tdl', 'tdm', 'tdn', 'tdo', 'tdq', 'tdr', 'tds', 'tdt', 'tdu', 'tdv', 'tdx', 'tdy', 'tea', 'teb', 'tec', 'ted', 'tee', 'tef', 'teg', 'teh', 'tei', 'tek', 'tem', 'ten', 'teo', 'tep', 'teq', 'ter', 'tes', 'tet', 'teu', 'tev', 'tew', 'tex', 'tey', 'tfi', 'tfn', 'tfo', 'tfr', 'tft', 'tga', 'tgb', 'tgc', 'tgd', 'tge', 'tgf', 'tgg', 'tgh', 'tgi', 'tgj', 'tgn', 'tgo', 'tgp', 'tgq', 'tgr', 'tgs', 'tgt', 'tgu', 'tgv', 'tgw', 'tgx', 'tgy', 'tgz', 'thc', 'thd', 'the', 'thf', 'thh', 'thi', 'thk', 'thl', 'thm', 'thn', 'thp', 'thq', 'thr', 'ths', 'tht', 'thu', 'thv', 'thw', 'thx', 'thy', 'thz', 'tia', 'tic', 'tid', 'tie', 'tif', 'tig', 'tih', 'tii', 'tij', 'tik', 'til', 'tim', 'tin', 'tio', 'tip', 'tiq', 'tis', 'tit', 'tiu', 'tiv', 'tiw', 'tix', 'tiy', 'tiz', 'tja', 'tjg', 'tji', 'tjl', 'tjm', 'tjn', 'tjo', 'tjs', 'tju', 'tjw', 'tka', 'tkb', 'tkd', 'tke', 'tkf', 'tkg', 'tkk', 'tkl', 'tkm', 'tkn', 'tkp', 'tkq', 'tkr', 'tks', 'tkt', 'tku', 'tkv', 'tkw', 'tkx', 'tkz', 'tla', 'tlb', 'tlc', 'tld', 'tlf', 'tlg', 'tlh', 'tli', 'tlj', 'tlk', 'tll', 'tlm', 'tln', 'tlo', 'tlp', 'tlq', 'tlr', 'tls', 'tlt', 'tlu', 'tlv', 'tlw', 'tlx', 'tly', 'tma', 'tmb', 'tmc', 'tmd', 'tme', 'tmf', 'tmg', 'tmh', 'tmi', 'tmj', 'tmk', 'tml', 'tmm', 'tmn', 'tmo', 'tmp', 'tmq', 'tmr', 'tms', 'tmt', 'tmu', 'tmv', 'tmw', 'tmy', 'tmz', 'tna', 'tnb', 'tnc', 'tnd', 'tne', 'tnf', 'tng', 'tnh', 'tni', 'tnk', 'tnl', 'tnm', 'tnn', 'tno', 'tnp', 'tnq', 'tnr', 'tns', 'tnt', 'tnu', 'tnv', 'tnw', 'tnx', 'tny', 'tnz', 'tob', 'toc', 'tod', 'toe', 'tof', 'tog', 'toh', 'toi', 'toj', 'tol', 'tom', 'too', 'top', 'toq', 'tor', 'tos', 'tou', 'tov', 'tow', 'tox', 'toy', 'toz', 'tpa', 'tpc', 'tpe', 'tpf', 'tpg', 'tpi', 'tpj', 'tpk', 'tpl', 'tpm', 'tpn', 'tpo', 'tpp', 'tpq', 'tpr', 'tpt', 'tpu', 'tpv', 'tpw', 'tpx', 'tpy', 'tpz', 'tqb', 'tql', 'tqm', 'tqn', 'tqo', 'tqp', 'tqq', 'tqr', 'tqt', 'tqu', 'tqw', 'tra', 'trb', 'trc', 'trd', 'tre', 'trf', 'trg', 'trh', 'tri', 'trj', 'trk', 'trl', 'trm', 'trn', 'tro', 'trp', 'trq', 'trr', 'trs', 'trt', 'tru', 'trv', 'trw', 'trx', 'try', 'trz', 'tsa', 'tsb', 'tsc', 'tsd', 'tse', 'tsf', 'tsg', 'tsh', 'tsi', 'tsj', 'tsk', 'tsl', 'tsm', 'tsp', 'tsq', 'tsr', 'tss', 'tst', 'tsu', 'tsv', 'tsw', 'tsx', 'tsy', 'tsz', 'tta', 'ttb', 'ttc', 'ttd', 'tte', 'ttf', 'ttg', 'tth', 'tti', 'ttj', 'ttk', 'ttl', 'ttm', 'ttn', 'tto', 'ttp', 'ttq', 'ttr', 'tts', 'ttt', 'ttu', 'ttv', 'ttw', 'tty', 'ttz', 'tua', 'tub', 'tuc', 'tud', 'tue', 'tuf', 'tug', 'tuh', 'tui', 'tuj', 'tul', 'tum', 'tun', 'tuo', 'tup', 'tuq', 'tus', 'tut', 'tuu', 'tuv', 'tuw', 'tux', 'tuy', 'tuz', 'tva', 'tvd', 'tve', 'tvk', 'tvl', 'tvm', 'tvn', 'tvo', 'tvs', 'tvt', 'tvu', 'tvw', 'tvy', 'twa', 'twb', 'twc', 'twd', 'twe', 'twf', 'twg', 'twh', 'twl', 'twm', 'twn', 'two', 'twp', 'twq', 'twr', 'twt', 'twu', 'tww', 'twx', 'twy', 'txa', 'txb', 'txc', 'txe', 'txg', 'txh', 'txi', 'txj', 'txm', 'txn', 'txo', 'txq', 'txr', 'txs', 'txt', 'txu', 'txx', 'txy', 'tya', 'tye', 'tyh', 'tyi', 'tyj', 'tyl', 'tyn', 'typ', 'tyr', 'tys', 'tyt', 'tyu', 'tyv', 'tyx', 'tyz', 'tza', 'tzh', 'tzj', 'tzl', 'tzm', 'tzn', 'tzo', 'tzx', 'uam', 'uan', 'uar', 'uba', 'ubi', 'ubl', 'ubr', 'ubu', 'uby', 'uda', 'ude', 'udg', 'udi', 'udj', 'udl', 'udm', 'udu', 'ues', 'ufi', 'uga', 'ugb', 'uge', 'ugn', 'ugo', 'ugy', 'uha', 'uhn', 'uis', 'uiv', 'uji', 'uka', 'ukg', 'ukh', 'ukk', 'ukl', 'ukp', 'ukq', 'uks', 'uku', 'ukw', 'uky', 'ula', 'ulb', 'ulc', 'ule', 'ulf', 'uli', 'ulk', 'ull', 'ulm', 'uln', 'ulu', 'ulw', 'uma', 'umb', 'umc', 'umd', 'umg', 'umi', 'umm', 'umn', 'umo', 'ump', 'umr', 'ums', 'umu', 'una', 'und', 'une', 'ung', 'unk', 'unm', 'unn', 'unp', 'unr', 'unu', 'unx', 'unz', 'uok', 'upi', 'upv', 'ura', 'urb', 'urc', 'ure', 'urf', 'urg', 'urh', 'uri', 'urj', 'urk', 'url', 'urm', 'urn', 'uro', 'urp', 'urr', 'urt', 'uru', 'urv', 'urw', 'urx', 'ury', 'urz', 'usa', 'ush', 'usi', 'usk', 'usp', 'usu', 'uta', 'ute', 'utp', 'utr', 'utu', 'uum', 'uun', 'uur', 'uuu', 'uve', 'uvh', 'uvl', 'uwa', 'uya', 'uzn', 'uzs', 'vaa', 'vae', 'vaf', 'vag', 'vah', 'vai', 'vaj', 'val', 'vam', 'van', 'vao', 'vap', 'var', 'vas', 'vau', 'vav', 'vay', 'vbb', 'vbk', 'vec', 'ved', 'vel', 'vem', 'veo', 'vep', 'ver', 'vgr', 'vgt', 'vic', 'vid', 'vif', 'vig', 'vil', 'vin', 'vis', 'vit', 'viv', 'vka', 'vki', 'vkj', 'vkk', 'vkl', 'vkm', 'vko', 'vkp', 'vkt', 'vku', 'vlp', 'vls', 'vma', 'vmb', 'vmc', 'vmd', 'vme', 'vmf', 'vmg', 'vmh', 'vmi', 'vmj', 'vmk', 'vml', 'vmm', 'vmp', 'vmq', 'vmr', 'vms', 'vmu', 'vmv', 'vmw', 'vmx', 'vmy', 'vmz', 'vnk', 'vnm', 'vnp', 'vor', 'vot', 'vra', 'vro', 'vrs', 'vrt', 'vsi', 'vsl', 'vsv', 'vto', 'vum', 'vun', 'vut', 'vwa', 'waa', 'wab', 'wac', 'wad', 'wae', 'waf', 'wag', 'wah', 'wai', 'waj', 'wak', 'wal', 'wam', 'wan', 'wao', 'wap', 'waq', 'war', 'was', 'wat', 'wau', 'wav', 'waw', 'wax', 'way', 'waz', 'wba', 'wbb', 'wbe', 'wbf', 'wbh', 'wbi', 'wbj', 'wbk', 'wbl', 'wbm', 'wbp', 'wbq', 'wbr', 'wbs', 'wbt', 'wbv', 'wbw', 'wca', 'wci', 'wdd', 'wdg', 'wdj', 'wdk', 'wdu', 'wdy', 'wea', 'wec', 'wed', 'weg', 'weh', 'wei', 'wem', 'wen', 'weo', 'wep', 'wer', 'wes', 'wet', 'weu', 'wew', 'wfg', 'wga', 'wgb', 'wgg', 'wgi', 'wgo', 'wgu', 'wgw', 'wgy', 'wha', 'whg', 'whk', 'whu', 'wib', 'wic', 'wie', 'wif', 'wig', 'wih', 'wii', 'wij', 'wik', 'wil', 'wim', 'win', 'wir', 'wit', 'wiu', 'wiv', 'wiw', 'wiy', 'wja', 'wji', 'wka', 'wkb', 'wkd', 'wkl', 'wku', 'wkw', 'wky', 'wla', 'wlc', 'wle', 'wlg', 'wli', 'wlk', 'wll', 'wlm', 'wlo', 'wlr', 'wls', 'wlu', 'wlv', 'wlw', 'wlx', 'wly', 'wma', 'wmb', 'wmc', 'wmd', 'wme', 'wmh', 'wmi', 'wmm', 'wmn', 'wmo', 'wms', 'wmt', 'wmw', 'wmx', 'wnb', 'wnc', 'wnd', 'wne', 'wng', 'wni', 'wnk', 'wnm', 'wnn', 'wno', 'wnp', 'wnu', 'wnw', 'wny', 'woa', 'wob', 'woc', 'wod', 'woe', 'wof', 'wog', 'woi', 'wok', 'wom', 'won', 'woo', 'wor', 'wos', 'wow', 'woy', 'wpc', 'wra', 'wrb', 'wrd', 'wrg', 'wrh', 'wri', 'wrk', 'wrl', 'wrm', 'wrn', 'wro', 'wrp', 'wrr', 'wrs', 'wru', 'wrv', 'wrw', 'wrx', 'wry', 'wrz', 'wsa', 'wsg', 'wsi', 'wsk', 'wsr', 'wss', 'wsu', 'wsv', 'wtf', 'wth', 'wti', 'wtk', 'wtm', 'wtw', 'wua', 'wub', 'wud', 'wuh', 'wul', 'wum', 'wun', 'wur', 'wut', 'wuu', 'wuv', 'wux', 'wuy', 'wwa', 'wwb', 'wwo', 'wwr', 'www', 'wxa', 'wxw', 'wya', 'wyb', 'wyi', 'wym', 'wyr', 'wyy', 'xaa', 'xab', 'xac', 'xad', 'xae', 'xag', 'xai', 'xaj', 'xak', 'xal', 'xam', 'xan', 'xao', 'xap', 'xaq', 'xar', 'xas', 'xat', 'xau', 'xav', 'xaw', 'xay', 'xba', 'xbb', 'xbc', 'xbd', 'xbe', 'xbg', 'xbi', 'xbj', 'xbm', 'xbn', 'xbo', 'xbp', 'xbr', 'xbw', 'xbx', 'xby', 'xcb', 'xcc', 'xce', 'xcg', 'xch', 'xcl', 'xcm', 'xcn', 'xco', 'xcr', 'xct', 'xcu', 'xcv', 'xcw', 'xcy', 'xda', 'xdc', 'xdk', 'xdm', 'xdo', 'xdy', 'xeb', 'xed', 'xeg', 'xel', 'xem', 'xep', 'xer', 'xes', 'xet', 'xeu', 'xfa', 'xga', 'xgb', 'xgd', 'xgf', 'xgg', 'xgi', 'xgl', 'xgm', 'xgn', 'xgr', 'xgu', 'xgw', 'xha', 'xhc', 'xhd', 'xhe', 'xhr', 'xht', 'xhu', 'xhv', 'xia', 'xib', 'xii', 'xil', 'xin', 'xip', 'xir', 'xis', 'xiv', 'xiy', 'xjb', 'xjt', 'xka', 'xkb', 'xkc', 'xkd', 'xke', 'xkf', 'xkg', 'xkh', 'xki', 'xkj', 'xkk', 'xkl', 'xkn', 'xko', 'xkp', 'xkq', 'xkr', 'xks', 'xkt', 'xku', 'xkv', 'xkw', 'xkx', 'xky', 'xkz', 'xla', 'xlb', 'xlc', 'xld', 'xle', 'xlg', 'xli', 'xln', 'xlo', 'xlp', 'xls', 'xlu', 'xly', 'xma', 'xmb', 'xmc', 'xmd', 'xme', 'xmf', 'xmg', 'xmh', 'xmj', 'xmk', 'xml', 'xmm', 'xmn', 'xmo', 'xmp', 'xmq', 'xmr', 'xms', 'xmt', 'xmu', 'xmv', 'xmw', 'xmx', 'xmy', 'xmz', 'xna', 'xnb', 'xnd', 'xng', 'xnh', 'xni', 'xnk', 'xnn', 'xno', 'xnr', 'xns', 'xnt', 'xnu', 'xny', 'xnz', 'xoc', 'xod', 'xog', 'xoi', 'xok', 'xom', 'xon', 'xoo', 'xop', 'xor', 'xow', 'xpa', 'xpc', 'xpe', 'xpg', 'xpi', 'xpj', 'xpk', 'xpm', 'xpn', 'xpo', 'xpp', 'xpq', 'xpr', 'xps', 'xpt', 'xpu', 'xpy', 'xqa', 'xqt', 'xra', 'xrb', 'xrd', 'xre', 'xrg', 'xri', 'xrm', 'xrn', 'xrq', 'xrr', 'xrt', 'xru', 'xrw', 'xsa', 'xsb', 'xsc', 'xsd', 'xse', 'xsh', 'xsi', 'xsj', 'xsl', 'xsm', 'xsn', 'xso', 'xsp', 'xsq', 'xsr', 'xss', 'xsu', 'xsv', 'xsy', 'xta', 'xtb', 'xtc', 'xtd', 'xte', 'xtg', 'xth', 'xti', 'xtj', 'xtl', 'xtm', 'xtn', 'xto', 'xtp', 'xtq', 'xtr', 'xts', 'xtt', 'xtu', 'xtv', 'xtw', 'xty', 'xtz', 'xua', 'xub', 'xud', 'xug', 'xuj', 'xul', 'xum', 'xun', 'xuo', 'xup', 'xur', 'xut', 'xuu', 'xve', 'xvi', 'xvn', 'xvo', 'xvs', 'xwa', 'xwc', 'xwd', 'xwe', 'xwg', 'xwj', 'xwk', 'xwl', 'xwo', 'xwr', 'xwt', 'xww', 'xxb', 'xxk', 'xxm', 'xxr', 'xxt', 'xya', 'xyb', 'xyj', 'xyk', 'xyl', 'xyt', 'xyy', 'xzh', 'xzm', 'xzp', 'yaa', 'yab', 'yac', 'yad', 'yae', 'yaf', 'yag', 'yah', 'yai', 'yaj', 'yak', 'yal', 'yam', 'yan', 'yao', 'yap', 'yaq', 'yar', 'yas', 'yat', 'yau', 'yav', 'yaw', 'yax', 'yay', 'yaz', 'yba', 'ybb', 'ybd', 'ybe', 'ybh', 'ybi', 'ybj', 'ybk', 'ybl', 'ybm', 'ybn', 'ybo', 'ybx', 'yby', 'ych', 'ycl', 'ycn', 'ycp', 'yda', 'ydd', 'yde', 'ydg', 'ydk', 'yds', 'yea', 'yec', 'yee', 'yei', 'yej', 'yel', 'yen', 'yer', 'yes', 'yet', 'yeu', 'yev', 'yey', 'yga', 'ygi', 'ygl', 'ygm', 'ygp', 'ygr', 'ygs', 'ygu', 'ygw', 'yha', 'yhd', 'yhl', 'yhs', 'yia', 'yif', 'yig', 'yih', 'yii', 'yij', 'yik', 'yil', 'yim', 'yin', 'yip', 'yiq', 'yir', 'yis', 'yit', 'yiu', 'yiv', 'yix', 'yiy', 'yiz', 'yka', 'ykg', 'yki', 'ykk', 'ykl', 'ykm', 'ykn', 'yko', 'ykr', 'ykt', 'yku', 'yky', 'yla', 'ylb', 'yle', 'ylg', 'yli', 'yll', 'ylm', 'yln', 'ylo', 'ylr', 'ylu', 'yly', 'yma', 'ymb', 'ymc', 'ymd', 'yme', 'ymg', 'ymh', 'ymi', 'ymk', 'yml', 'ymm', 'ymn', 'ymo', 'ymp', 'ymq', 'ymr', 'yms', 'ymt', 'ymx', 'ymz', 'yna', 'ynd', 'yne', 'yng', 'ynh', 'ynk', 'ynl', 'ynn', 'yno', 'ynq', 'yns', 'ynu', 'yob', 'yog', 'yoi', 'yok', 'yol', 'yom', 'yon', 'yos', 'yot', 'yox', 'yoy', 'ypa', 'ypb', 'ypg', 'yph', 'ypk', 'ypm', 'ypn', 'ypo', 'ypp', 'ypz', 'yra', 'yrb', 'yre', 'yri', 'yrk', 'yrl', 'yrm', 'yrn', 'yro', 'yrs', 'yrw', 'yry', 'ysc', 'ysd', 'ysg', 'ysl', 'ysn', 'yso', 'ysp', 'ysr', 'yss', 'ysy', 'yta', 'ytl', 'ytp', 'ytw', 'yty', 'yua', 'yub', 'yuc', 'yud', 'yue', 'yuf', 'yug', 'yui', 'yuj', 'yuk', 'yul', 'yum', 'yun', 'yup', 'yuq', 'yur', 'yut', 'yuu', 'yuw', 'yux', 'yuy', 'yuz', 'yva', 'yvt', 'ywa', 'ywg', 'ywl', 'ywn', 'ywq', 'ywr', 'ywt', 'ywu', 'yww', 'yxa', 'yxg', 'yxl', 'yxm', 'yxu', 'yxy', 'yyr', 'yyu', 'yyz', 'yzg', 'yzk', 'zaa', 'zab', 'zac', 'zad', 'zae', 'zaf', 'zag', 'zah', 'zai', 'zaj', 'zak', 'zal', 'zam', 'zao', 'zap', 'zaq', 'zar', 'zas', 'zat', 'zau', 'zav', 'zaw', 'zax', 'zay', 'zaz', 'zbc', 'zbe', 'zbl', 'zbt', 'zbw', 'zca', 'zch', 'zdj', 'zea', 'zeg', 'zeh', 'zen', 'zga', 'zgb', 'zgh', 'zgm', 'zgn', 'zgr', 'zhb', 'zhd', 'zhi', 'zhn', 'zhw', 'zhx', 'zia', 'zib', 'zik', 'zil', 'zim', 'zin', 'zir', 'ziw', 'ziz', 'zka', 'zkb', 'zkd', 'zkg', 'zkh', 'zkk', 'zkn', 'zko', 'zkp', 'zkr', 'zkt', 'zku', 'zkv', 'zkz', 'zle', 'zlj', 'zlm', 'zln', 'zlq', 'zls', 'zlw', 'zma', 'zmb', 'zmc', 'zmd', 'zme', 'zmf', 'zmg', 'zmh', 'zmi', 'zmj', 'zmk', 'zml', 'zmm', 'zmn', 'zmo', 'zmp', 'zmq', 'zmr', 'zms', 'zmt', 'zmu', 'zmv', 'zmw', 'zmx', 'zmy', 'zmz', 'zna', 'znd', 'zne', 'zng', 'znk', 'zns', 'zoc', 'zoh', 'zom', 'zoo', 'zoq', 'zor', 'zos', 'zpa', 'zpb', 'zpc', 'zpd', 'zpe', 'zpf', 'zpg', 'zph', 'zpi', 'zpj', 'zpk', 'zpl', 'zpm', 'zpn', 'zpo', 'zpp', 'zpq', 'zpr', 'zps', 'zpt', 'zpu', 'zpv', 'zpw', 'zpx', 'zpy', 'zpz', 'zqe', 'zra', 'zrg', 'zrn', 'zro', 'zrp', 'zrs', 'zsa', 'zsk', 'zsl', 'zsm', 'zsr', 'zsu', 'zte', 'ztg', 'ztl', 'ztm', 'ztn', 'ztp', 'ztq', 'zts', 'ztt', 'ztu', 'ztx', 'zty', 'zua', 'zuh', 'zum', 'zun', 'zuy', 'zwa', 'zxx', 'zyb', 'zyg', 'zyj', 'zyn', 'zyp', 'zza', 'zzj' ];
+      axe.utils.validLangs = function() {
+        'use strict';
+        return langs;
       };
       return commons;
     }()
diff --git a/third_party/axe-core/axe.min.js b/third_party/axe-core/axe.min.js
index 91b00bf..a06be242 100644
--- a/third_party/axe-core/axe.min.js
+++ b/third_party/axe-core/axe.min.js
@@ -1,5 +1,5 @@
-/*! axe v3.3.2
- * Copyright (c) 2019 Deque Systems, Inc.
+/*! aXe v3.0.0-alpha-1
+ * Copyright (c) 2017 Deque Systems, Inc.
  *
  * Your use of this Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -9,4 +9,34 @@
  * distribute or in any file that contains substantial portions of this source
  * code.
  */
-!function e(window){var a=window,document=window.document;function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e){this.name="SupportError",this.cause=e.cause,this.message="`".concat(e.cause,"` - feature unsupported in your environment."),e.ruleId&&(this.ruleId=e.ruleId,this.message+=" Skipping ".concat(this.ruleId," rule.")),this.stack=(new Error).stack}(axe=axe||{}).version="3.3.2","function"==typeof define&&define.amd&&define("axe-core",[],function(){"use strict";return axe}),"object"===("undefined"==typeof module?"undefined":S(module))&&module.exports&&"function"==typeof e.toString&&(axe.source="("+e.toString()+')(typeof window === "object" ? window : this);',module.exports=axe),"function"==typeof window.getComputedStyle&&(window.axe=axe),(l.prototype=Object.create(Error.prototype)).constructor=l,function o(i,u,s){function l(t,e){if(!u[t]){if(!i[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var a=u[t]={exports:{}};i[t][0].call(a.exports,function(e){return l(i[t][1][e]||e)},a,a.exports,o,i,u,s)}return u[t].exports}for(var c="function"==typeof require&&require,e=0;e<s.length;e++)l(s[e]);return l}({1:[function(e,t,n){"Promise"in window||e("es6-promise").polyfill(),e("weakmap-polyfill"),axe.imports={axios:e("axios"),CssSelectorParser:e("css-selector-parser").CssSelectorParser,doT:e("@deque/dot"),emojiRegexText:e("emoji-regex")}},{"@deque/dot":2,axios:3,"css-selector-parser":29,"emoji-regex":31,"es6-promise":32,"weakmap-polyfill":34}],2:[function(e,t,n){!function(){"use strict";var s={name:"doT",version:"1.1.1",templateSettings:{evaluate:/\{\{([\s\S]+?(\}?)+)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,encode:/\{\{!([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,useParams:/(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,defineParams:/^\s*([\w$]+):([\s\S]+)/,conditional:/\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,varname:"it",strip:!0,append:!0,selfcontained:!1,doNotSkipEncoded:!1},template:void 0,compile:void 0,log:!0};"object"!=typeof globalThis&&(Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__),s.encodeHTMLSource=function(e){var t={"&":"&#38;","<":"&#60;",">":"&#62;",'"':"&#34;","'":"&#39;","/":"&#47;"},n=e?/[&<>"'\/]/g:/&(?!#?\w+;)|<|>|"|'|\//g;return function(e){return e?e.toString().replace(n,function(e){return t[e]||e}):""}},void 0!==t&&t.exports?t.exports=s:"function"==typeof define&&define.amd?define(function(){return s}):globalThis.doT=s;var l={append:{start:"'+(",end:")+'",startencode:"'+encodeHTML("},split:{start:"';out+=(",end:");out+='",startencode:"';out+=encodeHTML("}},c=/$^/;function d(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}s.template=function(e,t,n){var r,a,o=(t=t||s.templateSettings).append?l.append:l.split,i=0,u=t.use||t.define?function r(a,e,o){return("string"==typeof e?e:e.toString()).replace(a.define||c,function(e,r,t,n){return 0===r.indexOf("def.")&&(r=r.substring(4)),r in o||(":"===t?(a.defineParams&&n.replace(a.defineParams,function(e,t,n){o[r]={arg:t,text:n}}),r in o||(o[r]=n)):new Function("def","def['"+r+"']="+n)(o)),""}).replace(a.use||c,function(e,t){a.useParams&&(t=t.replace(a.useParams,function(e,t,n,r){if(o[n]&&o[n].arg&&r){var a=(n+":"+r).replace(/'|\\/g,"_");return o.__exp=o.__exp||{},o.__exp[a]=o[n].text.replace(new RegExp("(^|[^\\w$])"+o[n].arg+"([^\\w$])","g"),"$1"+r+"$2"),t+"def.__exp['"+a+"']"}}));var n=new Function("def","return "+t)(o);return n?r(a,n,o):n})}(t,e,n||{}):e;u=("var out='"+(t.strip?u.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):u).replace(/'|\\/g,"\\$&").replace(t.interpolate||c,function(e,t){return o.start+d(t)+o.end}).replace(t.encode||c,function(e,t){return r=!0,o.startencode+d(t)+o.end}).replace(t.conditional||c,function(e,t,n){return t?n?"';}else if("+d(n)+"){out+='":"';}else{out+='":n?"';if("+d(n)+"){out+='":"';}out+='"}).replace(t.iterate||c,function(e,t,n,r){return t?(i+=1,a=r||"i"+i,t=d(t),"';var arr"+i+"="+t+";if(arr"+i+"){var "+n+","+a+"=-1,l"+i+"=arr"+i+".length-1;while("+a+"<l"+i+"){"+n+"=arr"+i+"["+a+"+=1];out+='"):"';} } out+='"}).replace(t.evaluate||c,function(e,t){return"';"+d(t)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,""),r&&(t.selfcontained||!globalThis||globalThis._encodeHTML||(globalThis._encodeHTML=s.encodeHTMLSource(t.doNotSkipEncoded)),u="var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : ("+s.encodeHTMLSource.toString()+"("+(t.doNotSkipEncoded||"")+"));"+u);try{return new Function(t.varname,u)}catch(e){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+u),e}},s.compile=function(e,t){return s.template(e,null,t)}}()},{}],3:[function(e,t,n){t.exports=e("./lib/axios")},{"./lib/axios":5}],4:[function(c,e,t){"use strict";var utils=c("./../utils"),d=c("./../core/settle"),m=c("./../helpers/buildURL"),p=c("./../helpers/parseHeaders"),f=c("./../helpers/isURLSameOrigin"),h=c("../core/createError");e.exports=function(l){return new Promise(function(n,r){var a=l.data,o=l.headers;utils.isFormData(a)&&delete o["Content-Type"];var i=new XMLHttpRequest;if(l.auth){var e=l.auth.username||"",t=l.auth.password||"";o.Authorization="Basic "+btoa(e+":"+t)}if(i.open(l.method.toUpperCase(),m(l.url,l.params,l.paramsSerializer),!0),i.timeout=l.timeout,i.onreadystatechange=function(){if(i&&4===i.readyState&&(0!==i.status||i.responseURL&&0===i.responseURL.indexOf("file:"))){var e="getAllResponseHeaders"in i?p(i.getAllResponseHeaders()):null,t={data:l.responseType&&"text"!==l.responseType?i.response:i.responseText,status:i.status,statusText:i.statusText,headers:e,config:l,request:i};d(n,r,t),i=null}},i.onabort=function(){i&&(r(h("Request aborted",l,"ECONNABORTED",i)),i=null)},i.onerror=function(){r(h("Network Error",l,null,i)),i=null},i.ontimeout=function(){r(h("timeout of "+l.timeout+"ms exceeded",l,"ECONNABORTED",i)),i=null},utils.isStandardBrowserEnv()){var u=c("./../helpers/cookies"),s=(l.withCredentials||f(l.url))&&l.xsrfCookieName?u.read(l.xsrfCookieName):void 0;s&&(o[l.xsrfHeaderName]=s)}if("setRequestHeader"in i&&utils.forEach(o,function(e,t){void 0===a&&"content-type"===t.toLowerCase()?delete o[t]:i.setRequestHeader(t,e)}),l.withCredentials&&(i.withCredentials=!0),l.responseType)try{i.responseType=l.responseType}catch(e){if("json"!==l.responseType)throw e}"function"==typeof l.onDownloadProgress&&i.addEventListener("progress",l.onDownloadProgress),"function"==typeof l.onUploadProgress&&i.upload&&i.upload.addEventListener("progress",l.onUploadProgress),l.cancelToken&&l.cancelToken.promise.then(function(e){i&&(i.abort(),r(e),i=null)}),void 0===a&&(a=null),i.send(a)})}},{"../core/createError":11,"./../core/settle":15,"./../helpers/buildURL":19,"./../helpers/cookies":21,"./../helpers/isURLSameOrigin":23,"./../helpers/parseHeaders":25,"./../utils":27}],5:[function(e,t,n){"use strict";var utils=e("./utils"),r=e("./helpers/bind"),a=e("./core/Axios"),o=e("./core/mergeConfig");function i(e){var t=new a(e),n=r(a.prototype.request,t);return utils.extend(n,a.prototype,t),utils.extend(n,t),n}var u=i(e("./defaults"));u.Axios=a,u.create=function(e){return i(o(u.defaults,e))},u.Cancel=e("./cancel/Cancel"),u.CancelToken=e("./cancel/CancelToken"),u.isCancel=e("./cancel/isCancel"),u.all=function(e){return Promise.all(e)},u.spread=e("./helpers/spread"),t.exports=u,t.exports.default=u},{"./cancel/Cancel":6,"./cancel/CancelToken":7,"./cancel/isCancel":8,"./core/Axios":9,"./core/mergeConfig":14,"./defaults":17,"./helpers/bind":18,"./helpers/spread":26,"./utils":27}],6:[function(e,t,n){"use strict";function r(e){this.message=e}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},{}],7:[function(e,t,n){"use strict";var r=e("./Cancel");function a(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new r(e),t(n.reason))})}a.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},a.source=function(){var t;return{token:new a(function(e){t=e}),cancel:t}},t.exports=a},{"./Cancel":6}],8:[function(e,t,n){"use strict";t.exports=function(e){return!(!e||!e.__CANCEL__)}},{}],9:[function(e,t,n){"use strict";var utils=e("./../utils"),r=e("../helpers/buildURL"),a=e("./InterceptorManager"),o=e("./dispatchRequest"),i=e("./mergeConfig");function u(e){this.defaults=e,this.interceptors={request:new a,response:new a}}u.prototype.request=function(e,t){"string"==typeof e?(e=t||{}).url=arguments[0]:e=e||{},(e=i(this.defaults,e)).method=e.method?e.method.toLowerCase():"get";var n=[o,void 0],r=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){n.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){n.push(e.fulfilled,e.rejected)});n.length;)r=r.then(n.shift(),n.shift());return r},u.prototype.getUri=function(e){return e=i(this.defaults,e),r(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},utils.forEach(["delete","get","head","options"],function(n){u.prototype[n]=function(e,t){return this.request(utils.merge(t||{},{method:n,url:e}))}}),utils.forEach(["post","put","patch"],function(r){u.prototype[r]=function(e,t,n){return this.request(utils.merge(n||{},{method:r,url:e,data:t}))}}),t.exports=u},{"../helpers/buildURL":19,"./../utils":27,"./InterceptorManager":10,"./dispatchRequest":12,"./mergeConfig":14}],10:[function(e,t,n){"use strict";var utils=e("./../utils");function r(){this.handlers=[]}r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(t){utils.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},{"./../utils":27}],11:[function(e,t,n){"use strict";var i=e("./enhanceError");t.exports=function(e,t,n,r,a){var o=new Error(e);return i(o,t,n,r,a)}},{"./enhanceError":13}],12:[function(e,t,n){"use strict";var utils=e("./../utils"),r=e("./transformData"),a=e("../cancel/isCancel"),o=e("../defaults"),i=e("./../helpers/isAbsoluteURL"),u=e("./../helpers/combineURLs");function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}t.exports=function(t){return s(t),t.baseURL&&!i(t.url)&&(t.url=u(t.baseURL,t.url)),t.headers=t.headers||{},t.data=r(t.data,t.headers,t.transformRequest),t.headers=utils.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),utils.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]}),(t.adapter||o.adapter)(t).then(function(e){return s(t),e.data=r(e.data,e.headers,t.transformResponse),e},function(e){return a(e)||(s(t),e&&e.response&&(e.response.data=r(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)})}},{"../cancel/isCancel":8,"../defaults":17,"./../helpers/combineURLs":20,"./../helpers/isAbsoluteURL":22,"./../utils":27,"./transformData":16}],13:[function(e,t,n){"use strict";t.exports=function(e,t,n,r,a){return e.config=t,n&&(e.code=n),e.request=r,e.response=a,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},{}],14:[function(e,t,n){"use strict";var utils=e("../utils");t.exports=function(t,n){n=n||{};var r={};return utils.forEach(["url","method","params","data"],function(e){void 0!==n[e]&&(r[e]=n[e])}),utils.forEach(["headers","auth","proxy"],function(e){utils.isObject(n[e])?r[e]=utils.deepMerge(t[e],n[e]):void 0!==n[e]?r[e]=n[e]:utils.isObject(t[e])?r[e]=utils.deepMerge(t[e]):void 0!==t[e]&&(r[e]=t[e])}),utils.forEach(["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"],function(e){void 0!==n[e]?r[e]=n[e]:void 0!==t[e]&&(r[e]=t[e])}),r}},{"../utils":27}],15:[function(e,t,n){"use strict";var a=e("./createError");t.exports=function(e,t,n){var r=n.config.validateStatus;!r||r(n.status)?e(n):t(a("Request failed with status code "+n.status,n.config,null,n.request,n))}},{"./createError":11}],16:[function(e,t,n){"use strict";var utils=e("./../utils");t.exports=function(t,n,e){return utils.forEach(e,function(e){t=e(t,n)}),t}},{"./../utils":27}],17:[function(i,u,e){(function(e){"use strict";var utils=i("./utils"),n=i("./helpers/normalizeHeaderName"),t={"Content-Type":"application/x-www-form-urlencoded"};function r(e,t){!utils.isUndefined(e)&&utils.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var a,o={adapter:(void 0!==e&&"[object process]"===Object.prototype.toString.call(e)?a=i("./adapters/http"):"undefined"!=typeof XMLHttpRequest&&(a=i("./adapters/xhr")),a),transformRequest:[function(e,t){return n(t,"Accept"),n(t,"Content-Type"),utils.isFormData(e)||utils.isArrayBuffer(e)||utils.isBuffer(e)||utils.isStream(e)||utils.isFile(e)||utils.isBlob(e)?e:utils.isArrayBufferView(e)?e.buffer:utils.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):utils.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return 200<=e&&e<300}};o.headers={common:{Accept:"application/json, text/plain, */*"}},utils.forEach(["delete","get","head"],function(e){o.headers[e]={}}),utils.forEach(["post","put","patch"],function(e){o.headers[e]=utils.merge(t)}),u.exports=o}).call(this,i("_process"))},{"./adapters/http":4,"./adapters/xhr":4,"./helpers/normalizeHeaderName":24,"./utils":27,_process:33}],18:[function(e,t,n){"use strict";t.exports=function(n,r){return function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];return n.apply(r,e)}}},{}],19:[function(e,t,n){"use strict";var utils=e("./../utils");function i(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(e,t,n){if(!t)return e;var r;if(n)r=n(t);else if(utils.isURLSearchParams(t))r=t.toString();else{var a=[];utils.forEach(t,function(e,t){null!=e&&(utils.isArray(e)?t+="[]":e=[e],utils.forEach(e,function(e){utils.isDate(e)?e=e.toISOString():utils.isObject(e)&&(e=JSON.stringify(e)),a.push(i(t)+"="+i(e))}))}),r=a.join("&")}if(r){var o=e.indexOf("#");-1!==o&&(e=e.slice(0,o)),e+=(-1===e.indexOf("?")?"?":"&")+r}return e}},{"./../utils":27}],20:[function(e,t,n){"use strict";t.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},{}],21:[function(e,t,n){"use strict";var utils=e("./../utils");t.exports=utils.isStandardBrowserEnv()?{write:function(e,t,n,r,a,o){var i=[];i.push(e+"="+encodeURIComponent(t)),utils.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),utils.isString(r)&&i.push("path="+r),utils.isString(a)&&i.push("domain="+a),!0===o&&i.push("secure"),document.cookie=i.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},{"./../utils":27}],22:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],23:[function(e,t,n){"use strict";var r,a,o,utils=e("./../utils");function i(e){var t=e;return a&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}t.exports=utils.isStandardBrowserEnv()?(a=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a"),r=i(window.location.href),function(e){var t=utils.isString(e)?i(e):e;return t.protocol===r.protocol&&t.host===r.host}):function(){return!0}},{"./../utils":27}],24:[function(e,t,n){"use strict";var utils=e("../utils");t.exports=function(n,r){utils.forEach(n,function(e,t){t!==r&&t.toUpperCase()===r.toUpperCase()&&(n[r]=e,delete n[t])})}},{"../utils":27}],25:[function(e,t,n){"use strict";var utils=e("./../utils"),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(e){var t,n,r,a={};return e&&utils.forEach(e.split("\n"),function(e){if(r=e.indexOf(":"),t=utils.trim(e.substr(0,r)).toLowerCase(),n=utils.trim(e.substr(r+1)),t){if(a[t]&&0<=o.indexOf(t))return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}}),a}},{"./../utils":27}],26:[function(e,t,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},{}],27:[function(e,t,n){"use strict";var a=e("./helpers/bind"),r=e("is-buffer"),o=Object.prototype.toString;function i(e){return"[object Array]"===o.call(e)}function u(e){return null!==e&&"object"==typeof e}function s(e){return"[object Function]"===o.call(e)}function l(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),i(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.call(null,e[a],a,e)}t.exports={isArray:i,isArrayBuffer:function(e){return"[object ArrayBuffer]"===o.call(e)},isBuffer:r,isFormData:function(e){return"undefined"!=typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:u,isUndefined:function(e){return void 0===e},isDate:function(e){return"[object Date]"===o.call(e)},isFile:function(e){return"[object File]"===o.call(e)},isBlob:function(e){return"[object Blob]"===o.call(e)},isFunction:s,isStream:function(e){return u(e)&&s(e.pipe)},isURLSearchParams:function(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&(void 0!==window&&void 0!==document)},forEach:l,merge:function n(){var r={};function e(e,t){"object"==typeof r[t]&&"object"==typeof e?r[t]=n(r[t],e):r[t]=e}for(var t=0,a=arguments.length;t<a;t++)l(arguments[t],e);return r},deepMerge:function n(){var r={};function e(e,t){"object"==typeof r[t]&&"object"==typeof e?r[t]=n(r[t],e):r[t]="object"==typeof e?n({},e):e}for(var t=0,a=arguments.length;t<a;t++)l(arguments[t],e);return r},extend:function(n,e,r){return l(e,function(e,t){n[t]=r&&"function"==typeof e?a(e,r):e}),n},trim:function(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}}},{"./helpers/bind":18,"is-buffer":28}],28:[function(e,t,n){t.exports=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},{}],29:[function(e,t,n){t.exports={CssSelectorParser:e("./lib/css-selector-parser.js").CssSelectorParser}},{"./lib/css-selector-parser.js":30}],30:[function(e,t,n){function r(){this.pseudos={},this.attrEqualityMods={},this.ruleNestingOperators={},this.substitutesEnabled=!1}function o(e){return"a"<=e&&e<="f"||"A"<=e&&e<="F"||"0"<=e&&e<="9"}r.prototype.registerSelectorPseudos=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],this.pseudos[e]="selector";return this},r.prototype.unregisterSelectorPseudos=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],delete this.pseudos[e];return this},r.prototype.registerNumericPseudos=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],this.pseudos[e]="numeric";return this},r.prototype.unregisterNumericPseudos=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],delete this.pseudos[e];return this},r.prototype.registerNestingOperators=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],this.ruleNestingOperators[e]=!0;return this},r.prototype.unregisterNestingOperators=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],delete this.ruleNestingOperators[e];return this},r.prototype.registerAttrEqualityMods=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],this.attrEqualityMods[e]=!0;return this},r.prototype.unregisterAttrEqualityMods=function(e){for(var t=0,n=arguments.length;t<n;t++)e=arguments[t],delete this.attrEqualityMods[e];return this},r.prototype.enableSubstitutes=function(){return this.substitutesEnabled=!0,this},r.prototype.disableSubstitutes=function(){return this.substitutesEnabled=!1,this};var u={"!":!0,'"':!0,"#":!0,$:!0,"%":!0,"&":!0,"'":!0,"(":!0,")":!0,"*":!0,"+":!0,",":!0,".":!0,"/":!0,";":!0,"<":!0,"=":!0,">":!0,"?":!0,"@":!0,"[":!0,"\\":!0,"]":!0,"^":!0,"`":!0,"{":!0,"|":!0,"}":!0,"~":!0},i={"\n":"\\n","\r":"\\r","\t":"\\t","\f":"\\f","\v":"\\v"},y={n:"\n",r:"\r",t:"\t",f:"\f","\\":"\\","'":"'"},v={n:"\n",r:"\r",t:"\t",f:"\f","\\":"\\",'"':'"'};function a(s,l,c,d,a,m){var p,f,h,b,g;return b=s.length,p=null,h=function(e,t){var n,r,a;for(a="",l++,p=s.charAt(l);l<b;){if(p===e)return l++,a;if("\\"===p)if(l++,(p=s.charAt(l))===e)a+=e;else if(n=t[p])a+=n;else{if(o(p)){for(r=p,l++,p=s.charAt(l);o(p);)r+=p,l++,p=s.charAt(l);" "===p&&(l++,p=s.charAt(l)),a+=String.fromCharCode(parseInt(r,16));continue}a+=p}else a+=p;l++,p=s.charAt(l)}return a},f=function(){var e,t="";for(p=s.charAt(l);l<b;){if("a"<=(e=p)&&e<="z"||"A"<=e&&e<="Z"||"0"<=e&&e<="9"||"-"===e||"_"===e)t+=p;else{if("\\"!==p)return t;if(b<=++l)throw Error("Expected symbol but end of file reached.");if(p=s.charAt(l),u[p])t+=p;else{if(o(p)){var n=p;for(l++,p=s.charAt(l);o(p);)n+=p,l++,p=s.charAt(l);" "===p&&(l++,p=s.charAt(l)),t+=String.fromCharCode(parseInt(n,16));continue}t+=p}}l++,p=s.charAt(l)}return t},g=function(){p=s.charAt(l);for(var e=!1;" "===p||"\t"===p||"\n"===p||"\r"===p||"\f"===p;)e=!0,l++,p=s.charAt(l);return e},this.parse=function(){var e=this.parseSelector();if(l<b)throw Error('Rule expected but "'+s.charAt(l)+'" found.');return e},this.parseSelector=function(){var e,t=e=this.parseSingleSelector();for(p=s.charAt(l);","===p;){if(l++,g(),"selectors"!==e.type&&(e={type:"selectors",selectors:[t]}),!(t=this.parseSingleSelector()))throw Error('Rule expected after ",".');e.selectors.push(t)}return e},this.parseSingleSelector=function(){g();var e={type:"ruleSet"},t=this.parseRule();if(!t)return null;for(var n=e;t&&(t.type="rule",n.rule=t,n=t,g(),p=s.charAt(l),!(b<=l||","===p||")"===p));)if(a[p]){var r=p;if(l++,g(),!(t=this.parseRule()))throw Error('Rule expected after "'+r+'".');t.nestingOperator=r}else(t=this.parseRule())&&(t.nestingOperator=null);return e},this.parseRule=function(){for(var e,t=null;l<b;)if("*"===(p=s.charAt(l)))l++,(t=t||{}).tagName="*";else if("a"<=(e=p)&&e<="z"||"A"<=e&&e<="Z"||"-"===e||"_"===e||"\\"===p)(t=t||{}).tagName=f();else if("."===p)l++,((t=t||{}).classNames=t.classNames||[]).push(f());else if("#"===p)l++,(t=t||{}).id=f();else if("["===p){l++,g();var n={name:f()};if(g(),"]"===p)l++;else{var r="";if(d[p]&&(r=p,l++,p=s.charAt(l)),b<=l)throw Error('Expected "=" but end of file reached.');if("="!==p)throw Error('Expected "=" but "'+p+'" found.');n.operator=r+"=",l++,g();var a="";if(n.valueType="string",'"'===p)a=h('"',v);else if("'"===p)a=h("'",y);else if(m&&"$"===p)l++,a=f(),n.valueType="substitute";else{for(;l<b&&"]"!==p;)a+=p,l++,p=s.charAt(l);a=a.trim()}if(g(),b<=l)throw Error('Expected "]" but end of file reached.');if("]"!==p)throw Error('Expected "]" but "'+p+'" found.');l++,n.value=a}((t=t||{}).attrs=t.attrs||[]).push(n)}else{if(":"!==p)break;l++;var o=f(),i={name:o};if("("===p){l++;var u="";if(g(),"selector"===c[o])i.valueType="selector",u=this.parseSelector();else{if(i.valueType=c[o]||"string",'"'===p)u=h('"',v);else if("'"===p)u=h("'",y);else if(m&&"$"===p)l++,u=f(),i.valueType="substitute";else{for(;l<b&&")"!==p;)u+=p,l++,p=s.charAt(l);u=u.trim()}g()}if(b<=l)throw Error('Expected ")" but end of file reached.');if(")"!==p)throw Error('Expected ")" but "'+p+'" found.');l++,i.value=u}((t=t||{}).pseudos=t.pseudos||[]).push(i)}return t},this}r.prototype.parse=function(e){return new a(e,0,this.pseudos,this.attrEqualityMods,this.ruleNestingOperators,this.substitutesEnabled).parse()},r.prototype.escapeIdentifier=function(e){for(var t="",n=0,r=e.length;n<r;){var a=e.charAt(n);if(u[a])t+="\\"+a;else if("_"===a||"-"===a||"A"<=a&&a<="Z"||"a"<=a&&a<="z"||0!==n&&"0"<=a&&a<="9")t+=a;else{var o=a.charCodeAt(0);if(55296==(63488&o)){var i=e.charCodeAt(n++);if(55296!=(64512&o)||56320!=(64512&i))throw Error("UCS-2(decode): illegal sequence");o=((1023&o)<<10)+(1023&i)+65536}t+="\\"+o.toString(16)+" "}n++}return t},r.prototype.escapeStr=function(e){for(var t,n,r="",a=0,o=e.length;a<o;)'"'===(t=e.charAt(a))?t='\\"':"\\"===t?t="\\\\":(n=i[t])&&(t=n),r+=t,a++;return'"'+r+'"'},r.prototype.render=function(e){return this._renderEntity(e).trim()},r.prototype._renderEntity=function(e){var t,n,r;switch(r="",e.type){case"ruleSet":for(t=e.rule,n=[];t;)t.nestingOperator&&n.push(t.nestingOperator),n.push(this._renderEntity(t)),t=t.rule;r=n.join(" ");break;case"selectors":r=e.selectors.map(this._renderEntity,this).join(", ");break;case"rule":e.tagName&&(r="*"===e.tagName?"*":this.escapeIdentifier(e.tagName)),e.id&&(r+="#"+this.escapeIdentifier(e.id)),e.classNames&&(r+=e.classNames.map(function(e){return"."+this.escapeIdentifier(e)},this).join("")),e.attrs&&(r+=e.attrs.map(function(e){return e.operator?"substitute"===e.valueType?"["+this.escapeIdentifier(e.name)+e.operator+"$"+e.value+"]":"["+this.escapeIdentifier(e.name)+e.operator+this.escapeStr(e.value)+"]":"["+this.escapeIdentifier(e.name)+"]"},this).join("")),e.pseudos&&(r+=e.pseudos.map(function(e){return e.valueType?"selector"===e.valueType?":"+this.escapeIdentifier(e.name)+"("+this._renderEntity(e.value)+")":"substitute"===e.valueType?":"+this.escapeIdentifier(e.name)+"($"+e.value+")":"numeric"===e.valueType?":"+this.escapeIdentifier(e.name)+"("+e.value+")":":"+this.escapeIdentifier(e.name)+"("+this.escapeIdentifier(e.value)+")":":"+this.escapeIdentifier(e.name)},this).join(""));break;default:throw Error('Unknown entity type: "'+e.type(NaN))}return r},n.CssSelectorParser=r},{}],31:[function(e,t,n){"use strict";t.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}},{}],32:[function(V,n,r){(function(P,U){var e,t;e=this,t=function(){"use strict";function s(e){return"function"==typeof e}var n=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},r=0,t=void 0,a=void 0,i=function(e,t){m[r]=e,m[r+1]=t,2===(r+=2)&&(a?a(p):y())};var e=void 0!==window?window:void 0,o=e||{},u=o.MutationObserver||o.WebKitMutationObserver,l="undefined"==typeof self&&void 0!==P&&"[object process]"==={}.toString.call(P),c="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var e=setTimeout;return function(){return e(p,1)}}var m=new Array(1e3);function p(){for(var e=0;e<r;e+=2){(0,m[e])(m[e+1]),m[e]=void 0,m[e+1]=void 0}r=0}var f,h,b,g,y=void 0;function v(e,t){var n=this,r=new this.constructor(k);void 0===r[w]&&O(r);var a=n._state;if(a){var o=arguments[a-1];i(function(){return S(a,r,o,n._result)})}else N(n,r,e,t);return r}function D(e){if(e&&"object"==typeof e&&e.constructor===this)return e;var t=new this(k);return F(t,e),t}y=l?function(){return P.nextTick(p)}:u?(h=0,b=new u(p),g=document.createTextNode(""),b.observe(g,{characterData:!0}),function(){g.data=h=++h%2}):c?((f=new MessageChannel).port1.onmessage=p,function(){return f.port2.postMessage(0)}):void 0===e&&"function"==typeof V?function(){try{var e=Function("return this")().require("vertx");return void 0!==(t=e.runOnLoop||e.runOnContext)?function(){t(p)}:d()}catch(e){return d()}}():d();var w=Math.random().toString(36).substring(2);function k(){}var x=void 0,E=1,C=2;function A(e,t,n){t.constructor===e.constructor&&n===v&&t.constructor.resolve===D?function(t,e){e._state===E?z(t,e._result):e._state===C?q(t,e._result):N(e,void 0,function(e){return F(t,e)},function(e){return q(t,e)})}(e,t):void 0===n?z(e,t):s(n)?function(e,r,a){i(function(t){var n=!1,e=function(e,t,n,r){try{e.call(t,n,r)}catch(e){return e}}(a,r,function(e){n||(n=!0,r!==e?F(t,e):z(t,e))},function(e){n||(n=!0,q(t,e))},t._label);!n&&e&&(n=!0,q(t,e))},e)}(e,t,n):z(e,t)}function F(t,e){if(t===e)q(t,new TypeError("You cannot resolve a promise with itself"));else if(function(e){var t=typeof e;return null!==e&&("object"==t||"function"==t)}(e)){var n=void 0;try{n=e.then}catch(e){return void q(t,e)}A(t,e,n)}else z(t,e)}function j(e){e._onerror&&e._onerror(e._result),T(e)}function z(e,t){e._state===x&&(e._result=t,e._state=E,0!==e._subscribers.length&&i(T,e))}function q(e,t){e._state===x&&(e._state=C,e._result=t,i(j,e))}function N(e,t,n,r){var a=e._subscribers,o=a.length;e._onerror=null,a[o]=t,a[o+E]=n,a[o+C]=r,0===o&&e._state&&i(T,e)}function T(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r=void 0,a=void 0,o=e._result,i=0;i<t.length;i+=3)r=t[i],a=t[i+n],r?S(n,r,a,o):a(o);e._subscribers.length=0}}function S(e,t,n,r){var a=s(n),o=void 0,i=void 0,u=!0;if(a){try{o=n(r)}catch(e){u=!1,i=e}if(t===o)return void q(t,new TypeError("A promises callback cannot return that same promise."))}else o=r;t._state!==x||(a&&u?F(t,o):!1===u?q(t,i):e===E?z(t,o):e===C&&q(t,o))}var R=0;function O(e){e[w]=R++,e._state=void 0,e._result=void 0,e._subscribers=[]}var _=(B.prototype._enumerate=function(e){for(var t=0;this._state===x&&t<e.length;t++)this._eachEntry(e[t],t)},B.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===D){var a=void 0,o=void 0,i=!1;try{a=t.then}catch(e){i=!0,o=e}if(a===v&&t._state!==x)this._settledAt(t._state,e,t._result);else if("function"!=typeof a)this._remaining--,this._result[e]=t;else if(n===L){var u=new n(k);i?q(u,o):A(u,t,a),this._willSettleAt(u,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},B.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===x&&(this._remaining--,e===C?q(r,n):this._result[t]=n),0===this._remaining&&z(r,this._result)},B.prototype._willSettleAt=function(e,t){var n=this;N(e,void 0,function(e){return n._settledAt(E,t,e)},function(e){return n._settledAt(C,t,e)})},B);function B(e,t){this._instanceConstructor=e,this.promise=new e(k),this.promise[w]||O(this.promise),n(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?z(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&z(this.promise,this._result))):q(this.promise,new Error("Array Methods must be provided an Array"))}var L=(I.prototype.catch=function(e){return this.then(null,e)},I.prototype.finally=function(t){var n=this.constructor;return s(t)?this.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){throw e})}):this.then(t,t)},I);function I(e){this[w]=R++,this._result=this._state=void 0,this._subscribers=[],k!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof I?function(t,e){try{e(function(e){F(t,e)},function(e){q(t,e)})}catch(e){q(t,e)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return L.prototype.then=v,L.all=function(e){return new _(this,e).promise},L.race=function(a){var o=this;return n(a)?new o(function(e,t){for(var n=a.length,r=0;r<n;r++)o.resolve(a[r]).then(e,t)}):new o(function(e,t){return t(new TypeError("You must pass an array to race."))})},L.resolve=D,L.reject=function(e){var t=new this(k);return q(t,e),t},L._setScheduler=function(e){a=e},L._setAsap=function(e){i=e},L._asap=i,L.polyfill=function(){var e=void 0;if(void 0!==U)e=U;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var n=null;try{n=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===n&&!t.cast)return}e.Promise=L},L.Promise=L},"object"==typeof r&&void 0!==n?n.exports=t():"function"==typeof define&&define.amd?define(t):e.ES6Promise=t()}).call(this,V("_process"),void 0!==a?a:"undefined"!=typeof self?self:void 0!==window?window:{})},{_process:33}],33:[function(e,t,n){var r,a,o=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function s(t){if(r===setTimeout)return setTimeout(t,0);if((r===i||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:i}catch(e){r=i}try{a="function"==typeof clearTimeout?clearTimeout:u}catch(e){a=u}}();var l,c=[],d=!1,m=-1;function p(){d&&l&&(d=!1,l.length?c=l.concat(c):m=-1,c.length&&f())}function f(){if(!d){var e=s(p);d=!0;for(var t=c.length;t;){for(l=c,c=[];++m<t;)l&&l[m].run();m=-1,t=c.length}l=null,d=!1,function(t){if(a===clearTimeout)return clearTimeout(t);if((a===u||!a)&&clearTimeout)return a=clearTimeout,clearTimeout(t);try{a(t)}catch(e){try{return a.call(null,t)}catch(e){return a.call(this,t)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function b(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new h(e,t)),1!==c.length||d||s(f)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=b,o.addListener=b,o.once=b,o.off=b,o.removeListener=b,o.removeAllListeners=b,o.emit=b,o.prependListener=b,o.prependOnceListener=b,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},{}],34:[function(e,t,n){(function(e){!function(e){"use strict";if(!e.WeakMap){var n=Object.prototype.hasOwnProperty,r=function(e,t,n){Object.defineProperty?Object.defineProperty(e,t,{configurable:!0,writable:!0,value:n}):e[t]=n};e.WeakMap=(r(t.prototype,"delete",function(e){if(a(this,"delete"),!i(e))return!1;var t=e[this._id];return!(!t||t[0]!==e||(delete e[this._id],0))}),r(t.prototype,"get",function(e){if(a(this,"get"),i(e)){var t=e[this._id];return t&&t[0]===e?t[1]:void 0}}),r(t.prototype,"has",function(e){if(a(this,"has"),!i(e))return!1;var t=e[this._id];return!(!t||t[0]!==e)}),r(t.prototype,"set",function(e,t){if(a(this,"set"),!i(e))throw new TypeError("Invalid value used as weak map key");var n=e[this._id];return n&&n[0]===e?n[1]=t:r(e,this._id,[e,t]),this}),r(t,"_polyfill",!0),t)}function t(){if(void 0===this)throw new TypeError("Constructor WeakMap requires 'new'");if(r(this,"_id",function(e){return e+"_"+o()+"."+o()}("_WeakMap")),0<arguments.length)throw new TypeError("WeakMap iterable is not supported")}function a(e,t){if(!i(e)||!n.call(e,"_id"))throw new TypeError(t+" method called on incompatible receiver "+typeof e)}function o(){return Math.random().toString().substring(2)}function i(e){return Object(e)===e}}("undefined"!=typeof self?self:void 0!==window?window:void 0!==e?e:this)}).call(this,void 0!==a?a:"undefined"!=typeof self?self:void 0!==window?window:{})},{}]},{},[1]);var utils=axe.utils={},u={};function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function t(e,t,n){"use strict";var r,a;for(r=0,a=e.length;r<a;r++)t[n](e[r])}function n(e){this.brand="axe",this.application="axeAPI",this.tagExclude=["experimental"],this.defaultConfig=e,this._init(),this._defaultLocale=null}n.prototype._setDefaultLocale=function(){if(!this._defaultLocale){for(var e={checks:{},rules:{}},t=Object.keys(this.data.checks),n=0;n<t.length;n++){var r=t[n],a=this.data.checks[r].messages,o=a.pass,i=a.fail,u=a.incomplete;e.checks[r]={pass:o,fail:i,incomplete:u}}for(var s=Object.keys(this.data.rules),l=0;l<s.length;l++){var c=s[l],d=this.data.rules[c],m=d.description,p=d.help;e.rules[c]={description:m,help:p}}this._defaultLocale=e}},n.prototype._resetLocale=function(){var e=this._defaultLocale;e&&this.applyLocale(e)};function c(a,e,o){return o.performanceTimer&&axe.utils.performanceTimer.mark("mark_rule_start_"+a.id),function(n,r){a.run(e,o,function(e){n(e)},function(e){if(o.debug)r(e);else{var t=Object.assign(new f(a),{result:axe.constants.CANTTELL,description:"An error occured while running this rule",message:e.message,stack:e.stack,error:e,errorNode:e.errorNode});n(t)}})}}function o(e,t,n){var r=e.brand,a=e.application;return axe.constants.helpUrlBase+r+"/"+(n||axe.version.substring(0,axe.version.lastIndexOf(".")))+"/"+t+"?application="+a}function d(e){"use strict";this.id=e.id,this.data=null,this.relatedNodes=[],this.result=null}function r(e){"use strict";return"string"==typeof e?new Function("return "+e+";")():e}function i(e){e&&(this.id=e.id,this.configure(e))}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t,n){"use strict";var r,a;e.frames=e.frames||[];var o=document.querySelectorAll(n.shift());e:for(var i=0,u=o.length;i<u;i++){a=o[i];for(var s=0,l=e.frames.length;s<l;s++)if(e.frames[s].node===a){e.frames[s][t].push(n);break e}r={node:a,include:[],exclude:[]},n&&r[t].push(n),e.frames.push(r)}}function m(e,t){"use strict";for(var n,r,a=[],o=0,i=e[t].length;o<i;o++){if("string"==typeof(n=e[t][o])){r=Array.from(document.querySelectorAll(n)),a=a.concat(r.map(function(e){return axe.utils.getNodeFromTree(e)}));break}!n||!n.length||n instanceof Node?n instanceof Node&&(n.documentElement instanceof Node?a.push(e.flatTree[0]):a.push(axe.utils.getNodeFromTree(n))):1<n.length?s(e,t,n):(r=Array.from(document.querySelectorAll(n[0])),a=a.concat(r.map(function(e){return axe.utils.getNodeFromTree(e)})))}return a.filter(function(e){return e})}function p(e){"use strict";var t=this;this.frames=[],this.initiator=!e||"boolean"!=typeof e.initiator||e.initiator,this.page=!1,e=function(e){"use strict";if(e&&"object"===S(e)||e instanceof NodeList){if(e instanceof Node)return{include:[e],exclude:[]};if(e.hasOwnProperty("include")||e.hasOwnProperty("exclude"))return{include:e.include&&+e.include.length?e.include:[document],exclude:e.exclude||[]};if(e.length===+e.length)return{include:e,exclude:[]}}return"string"==typeof e?{include:[e],exclude:[]}:{include:[document],exclude:[]}}(e),this.flatTree=axe.utils.getFlattenedTree(function(e){var t=e.include,n=e.exclude;return(Array.from(t).concat(Array.from(n)).reduce(function(e,t){return e||(t instanceof Element?t.ownerDocument:t instanceof Document?t:void 0)},null)||document).documentElement}(e)),this.exclude=e.exclude,this.include=e.include,this.include=m(this,"include"),this.exclude=m(this,"exclude"),axe.utils.select("frame, iframe",this).forEach(function(e){Be(e,t)&&function(e,t){"use strict";axe.utils.isHidden(t)||axe.utils.findBy(e,"node",t)||e.push({node:t,include:[],exclude:[]})}(t.frames,e.actualNode)}),1===this.include.length&&this.include[0].actualNode===document.documentElement&&(this.page=!0);var n=function(e){"use strict";if(0===e.include.length){if(0===e.frames.length){var t=axe.utils.respondable.isInFrame()?"frame":"page";return new Error("No elements found for include in "+t+" Context")}e.frames.forEach(function(e,t){if(0===e.include.length)return new Error("No elements found for include in Context of frame "+t)})}}(this);if(n instanceof Error)throw n;Array.isArray(this.include)||(this.include=Array.from(this.include)),this.include.sort(axe.utils.nodeSorter)}function f(e){"use strict";this.id=e.id,this.result=axe.constants.NA,this.pageLevel=e.pageLevel,this.impact=null,this.nodes=[]}function h(e,t){"use strict";this._audit=t,this.id=e.id,this.selector=e.selector||"*",this.excludeHidden="boolean"!=typeof e.excludeHidden||e.excludeHidden,this.enabled="boolean"!=typeof e.enabled||e.enabled,this.pageLevel="boolean"==typeof e.pageLevel&&e.pageLevel,this.any=e.any||[],this.all=e.all||[],this.none=e.none||[],this.tags=e.tags||[],this.preload=!!e.preload,e.matches&&(this.matches=r(e.matches))}function b(e){if(e.length){var n=!1,r={};return e.forEach(function(e){var t=e.results.filter(function(e){return e});(r[e.type]=t).length&&(n=!0)}),n?r:null}}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function g(e){return(g=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function v(e,t){return(v=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function D(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function k(e,t,n){return t&&w(e.prototype,t),n&&w(e,n),e}n.prototype._applyCheckLocale=function(e){for(var t,n,r,a,o=Object.keys(e),i=0;i<o.length;i++){var u=o[i];if(!this.data.checks[u])throw new Error('Locale provided for unknown check: "'.concat(u,'"'));this.data.checks[u]=(t=this.data.checks[u],n=e[u],a=r=void 0,r=n.pass,a=n.fail,"string"==typeof r&&(r=axe.imports.doT.compile(r)),"string"==typeof a&&(a=axe.imports.doT.compile(a)),R({},t,{messages:{pass:r||t.messages.pass,fail:a||t.messages.fail,incomplete:"object"===S(t.messages.incomplete)?R({},t.messages.incomplete,{},n.incomplete):n.incomplete}}))}},n.prototype._applyRuleLocale=function(e){for(var t,n,r,a,o=Object.keys(e),i=0;i<o.length;i++){var u=o[i];if(!this.data.rules[u])throw new Error('Locale provided for unknown rule: "'.concat(u,'"'));this.data.rules[u]=(t=this.data.rules[u],n=e[u],a=r=void 0,r=n.help,a=n.description,"string"==typeof r&&(r=axe.imports.doT.compile(r)),"string"==typeof a&&(a=axe.imports.doT.compile(a)),R({},t,{help:r||t.help,description:a||t.description}))}},n.prototype.applyLocale=function(e){this._setDefaultLocale(),e.checks&&this._applyCheckLocale(e.checks),e.rules&&this._applyRuleLocale(e.rules)},n.prototype._init=function(){var e=function(e){"use strict";var t;return e?(t=axe.utils.clone(e)).commons=e.commons:t={},t.reporter=t.reporter||null,t.rules=t.rules||[],t.checks=t.checks||[],t.data=R({checks:{},rules:{}},t.data),t}(this.defaultConfig);axe.commons=e.commons,this.reporter=e.reporter,this.commands={},this.rules=[],this.checks={},t(e.rules,this,"addRule"),t(e.checks,this,"addCheck"),this.data={},this.data.checks=e.data&&e.data.checks||{},this.data.rules=e.data&&e.data.rules||{},this.data.failureSummaries=e.data&&e.data.failureSummaries||{},this.data.incompleteFallbackMessage=e.data&&e.data.incompleteFallbackMessage||"",this._constructHelpUrls()},n.prototype.registerCommand=function(e){"use strict";this.commands[e.id]=e.callback},n.prototype.addRule=function(e){"use strict";e.metadata&&(this.data.rules[e.id]=e.metadata);var t=this.getRule(e.id);t?t.configure(e):this.rules.push(new h(e,this))},n.prototype.addCheck=function(e){"use strict";var t=e.metadata;"object"===S(t)&&(this.data.checks[e.id]=t,"object"===S(t.messages)&&Object.keys(t.messages).filter(function(e){return t.messages.hasOwnProperty(e)&&"string"==typeof t.messages[e]}).forEach(function(e){0===t.messages[e].indexOf("function")&&(t.messages[e]=new Function("return "+t.messages[e]+";")())})),this.checks[e.id]?this.checks[e.id].configure(e):this.checks[e.id]=new i(e)},n.prototype.run=function(o,i,u,s){"use strict";this.normalizeOptions(i),axe._selectCache=[];var e=function(e,n,r){return e.reduce(function(e,t){return axe.utils.ruleShouldRun(t,n,r)&&(t.preload?e.later.push(t):e.now.push(t)),e},{now:[],later:[]})}(this.rules,o,i),t=e.now,l=e.later,n=axe.utils.queue();t.forEach(function(e){n.defer(c(e,o,i))});var r=axe.utils.queue();l.length&&r.defer(function(t){axe.utils.preload(i).then(function(e){return t(e)}).catch(function(e){console.warn("Couldn't load preload assets: ",e),t(void 0)})});var a=axe.utils.queue();a.defer(n),a.defer(r),a.then(function(e){var t=e.pop();if(t&&t.length){var n=t[0];n&&(o=R({},o,{},n))}var r=e[0];if(!l.length)return axe._selectCache=void 0,void u(r.filter(function(e){return!!e}));var a=axe.utils.queue();l.forEach(function(e){var t=c(e,o,i);a.defer(t)}),a.then(function(e){axe._selectCache=void 0,u(r.concat(e).filter(function(e){return!!e}))}).catch(s)}).catch(s)},n.prototype.after=function(e,n){"use strict";var r=this.rules;return e.map(function(e){var t=axe.utils.findBy(r,"id",e.id);if(!t)throw new Error("Result for unknown rule. You may be running mismatch axe-core versions");return t.after(e,n)})},n.prototype.getRule=function(t){return this.rules.find(function(e){return e.id===t})},n.prototype.normalizeOptions=function(e){"use strict";var t=this;if("object"===S(e.runOnly)){Array.isArray(e.runOnly)&&(e.runOnly={type:"tag",values:e.runOnly});var n=e.runOnly;if(n.value&&!n.values&&(n.values=n.value,delete n.value),!Array.isArray(n.values)||0===n.values.length)throw new Error("runOnly.values must be a non-empty array");if(["rule","rules"].includes(n.type))n.type="rule",n.values.forEach(function(e){if(!t.getRule(e))throw new Error("unknown rule `"+e+"` in options.runOnly")});else{if(!["tag","tags",void 0].includes(n.type))throw new Error("Unknown runOnly type '".concat(n.type,"'"));n.type="tag";var r=t.rules.reduce(function(e,t){return e.length?e.filter(function(e){return!t.tags.includes(e)}):e},n.values);0!==r.length&&axe.log("Could not find tags `"+r.join("`, `")+"`")}}return"object"===S(e.rules)&&Object.keys(e.rules).forEach(function(e){if(!t.getRule(e))throw new Error("unknown rule `"+e+"` in options.rules")}),e},n.prototype.setBranding=function(e){"use strict";var t={brand:this.brand,application:this.application};e&&e.hasOwnProperty("brand")&&e.brand&&"string"==typeof e.brand&&(this.brand=e.brand),e&&e.hasOwnProperty("application")&&e.application&&"string"==typeof e.application&&(this.application=e.application),this._constructHelpUrls(t)},n.prototype._constructHelpUrls=function(){var n=this,r=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,a=(axe.version.match(/^[1-9][0-9]*\.[0-9]+/)||["x.y"])[0];this.rules.forEach(function(e){n.data.rules[e.id]||(n.data.rules[e.id]={});var t=n.data.rules[e.id];("string"!=typeof t.helpUrl||r&&t.helpUrl===o(r,e.id,a))&&(t.helpUrl=o(n,e.id,a))})},n.prototype.resetRulesAndChecks=function(){"use strict";this._init(),this._resetLocale()},function(){"use strict";var n={},e={set:function(e,t){n[e]=t},get:function(e){return n[e]},clear:function(){n={}}};axe._cache=e}(),i.prototype.enabled=!0,i.prototype.run=function(t,e,n,r,a){"use strict";var o=(e=e||{}).hasOwnProperty("enabled")?e.enabled:this.enabled,i=e.options||this.options;if(o){var u,s=new d(this),l=axe.utils.checkHelper(s,e,r,a);try{u=this.evaluate.call(l,t.actualNode,i,t,n)}catch(e){return t&&t.actualNode&&(e.errorNode=new X(t.actualNode).toJSON()),void a(e)}l.isAsync||(s.result=u,r(s))}else r(null)},i.prototype.runSync=function(t,e,n){var r=(e=e||{}).enabled;if(!(void 0===r?this.enabled:r))return null;var a,o=e.options||this.options,i=new d(this),u=axe.utils.checkHelper(i,e);u.async=function(){throw new Error("Cannot run async check while in a synchronous run")};try{a=this.evaluate.call(u,t.actualNode,o,t,n)}catch(e){throw t&&t.actualNode&&(e.errorNode=new X(t.actualNode).toJSON()),e}return i.result=a,i},i.prototype.configure=function(t){var n=this;["options","enabled"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(e){return n[e]=t[e]}),["evaluate","after"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(e){return n[e]=r(t[e])})},h.prototype.matches=function(){"use strict";return!0},h.prototype.gather=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n="mark_gather_start_"+this.id,r="mark_gather_end_"+this.id,a="mark_isHidden_start_"+this.id,o="mark_isHidden_end_"+this.id;t.performanceTimer&&axe.utils.performanceTimer.mark(n);var i=axe.utils.select(this.selector,e);return this.excludeHidden&&(t.performanceTimer&&axe.utils.performanceTimer.mark(a),i=i.filter(function(e){return!axe.utils.isHidden(e.actualNode)}),t.performanceTimer&&(axe.utils.performanceTimer.mark(o),axe.utils.performanceTimer.measure("rule_"+this.id+"#gather_axe.utils.isHidden",a,o))),t.performanceTimer&&(axe.utils.performanceTimer.mark(r),axe.utils.performanceTimer.measure("rule_"+this.id+"#gather",n,r)),i},h.prototype.runChecks=function(t,a,o,i,n,e){"use strict";var u=this,s=axe.utils.queue();this[t].forEach(function(e){var n=u._audit.checks[e.id||e],r=axe.utils.getCheckOption(n,u.id,o);s.defer(function(e,t){n.run(a,r,i,e,t)})}),s.then(function(e){e=e.filter(function(e){return e}),n({type:t,results:e})}).catch(e)},h.prototype.runChecksSync=function(e,r,a,o){"use strict";var i=this,u=[];return this[e].forEach(function(e){var t=i._audit.checks[e.id||e],n=axe.utils.getCheckOption(t,i.id,a);u.push(t.runSync(r,n,o))}),{type:e,results:u=u.filter(function(e){return e})}},h.prototype.run=function(a){var o=this,i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=2<arguments.length?arguments[2]:void 0,t=3<arguments.length?arguments[3]:void 0;i.performanceTimer&&this._trackPerformance();var n,u=axe.utils.queue(),s=new f(this);try{n=this.gatherAndMatchNodes(a,i)}catch(e){return void t(new l({cause:e,ruleId:this.id}))}i.performanceTimer&&this._logGatherPerformance(n),n.forEach(function(r){u.defer(function(n,t){var e=axe.utils.queue();["any","all","none"].forEach(function(n){e.defer(function(e,t){o.runChecks(n,r,i,a,e,t)})}),e.then(function(e){var t=b(e);t&&(t.node=new axe.utils.DqElement(r.actualNode,i),s.nodes.push(t)),n()}).catch(function(e){return t(e)})})}),u.defer(function(e){return setTimeout(e,0)}),i.performanceTimer&&this._logRulePerformance(),u.then(function(){return e(s)}).catch(function(e){return t(e)})},h.prototype.runSync=function(r){var a=this,o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};o.performanceTimer&&this._trackPerformance();var e,i=new f(this);try{e=this.gatherAndMatchNodes(r,o)}catch(e){throw new l({cause:e,ruleId:this.id})}return o.performanceTimer&&this._logGatherPerformance(e),e.forEach(function(t){var n=[];["any","all","none"].forEach(function(e){n.push(a.runChecksSync(e,t,o,r))});var e=b(n);e&&(e.node=t.actualNode?new axe.utils.DqElement(t.actualNode,o):null,i.nodes.push(e))}),o.performanceTimer&&this._logRulePerformance(),i},h.prototype._trackPerformance=function(){this._markStart="mark_rule_start_"+this.id,this._markEnd="mark_rule_end_"+this.id,this._markChecksStart="mark_runchecks_start_"+this.id,this._markChecksEnd="mark_runchecks_end_"+this.id},h.prototype._logGatherPerformance=function(e){axe.log("gather (",e.length,"):",axe.utils.performanceTimer.timeElapsed()+"ms"),axe.utils.performanceTimer.mark(this._markChecksStart)},h.prototype._logRulePerformance=function(){axe.utils.performanceTimer.mark(this._markChecksEnd),axe.utils.performanceTimer.mark(this._markEnd),axe.utils.performanceTimer.measure("runchecks_"+this.id,this._markChecksStart,this._markChecksEnd),axe.utils.performanceTimer.measure("rule_"+this.id,this._markStart,this._markEnd)},h.prototype.gatherAndMatchNodes=function(t,e){var n=this,r="mark_matches_start_"+this.id,a="mark_matches_end_"+this.id,o=this.gather(t,e);return e.performanceTimer&&axe.utils.performanceTimer.mark(r),o=o.filter(function(e){return n.matches(e.actualNode,e,t)}),e.performanceTimer&&(axe.utils.performanceTimer.mark(a),axe.utils.performanceTimer.measure("rule_"+this.id+"#matches",r,a)),o},h.prototype.after=function(a,o){"use strict";var e=function(n){"use strict";return axe.utils.getAllChecks(n).map(function(e){var t=n._audit.checks[e.id||e];return t&&"function"==typeof t.after?t:null}).filter(Boolean)}(this),i=this.id;return e.forEach(function(e){var t=function(e,t){"use strict";var n=[];return e.forEach(function(e){axe.utils.getAllChecks(e).forEach(function(e){e.id===t&&n.push(e)})}),n}(a.nodes,e.id),n=axe.utils.getCheckOption(e,i,o),r=e.after(t,n);t.forEach(function(e){-1===r.indexOf(e)&&(e.filtered=!0)})}),a.nodes=function(e){"use strict";var r=["any","all","none"],t=e.nodes.filter(function(t){var n=0;return r.forEach(function(e){t[e]=function(e){"use strict";return e.filter(function(e){return!0!==e.filtered})}(t[e]),n+=t[e].length}),0<n});return e.pageLevel&&t.length&&(t=[t.reduce(function(t,n){if(t)return r.forEach(function(e){t[e].push.apply(t[e],n[e])}),t})]),t}(a),a},h.prototype.configure=function(e){"use strict";e.hasOwnProperty("selector")&&(this.selector=e.selector),e.hasOwnProperty("excludeHidden")&&(this.excludeHidden="boolean"!=typeof e.excludeHidden||e.excludeHidden),e.hasOwnProperty("enabled")&&(this.enabled="boolean"!=typeof e.enabled||e.enabled),e.hasOwnProperty("pageLevel")&&(this.pageLevel="boolean"==typeof e.pageLevel&&e.pageLevel),e.hasOwnProperty("any")&&(this.any=e.any),e.hasOwnProperty("all")&&(this.all=e.all),e.hasOwnProperty("none")&&(this.none=e.none),e.hasOwnProperty("tags")&&(this.tags=e.tags),e.hasOwnProperty("matches")&&("string"==typeof e.matches?this.matches=new Function("return "+e.matches+";")():this.matches=e.matches)};var x=/[\t\r\n\f]/g,E=(k(C,[{key:"hasClass",value:function(){throw new Error('VirtualNode class must have a "hasClass" function')}},{key:"attr",value:function(){throw new Error('VirtualNode class must have a "attr" function')}},{key:"hasAttr",value:function(){throw new Error('VirtualNode class must have a "hasAttr" function')}},{key:"props",get:function(){throw new Error('VirtualNode class must have a "props" object consisting of "nodeType" and "nodeName" properties')}}]),C);function C(){D(this,C),this.children=[],this.parent=null}var A=(function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&v(e,t)}(F,E),k(F,[{key:"hasClass",value:function(e){var t=this.attr("class");if(!t)return!1;var n=" "+e+" ";return 0<=(" "+t+" ").replace(x," ").indexOf(n)}},{key:"attr",value:function(e){return"function"!=typeof this.actualNode.getAttribute?null:this.actualNode.getAttribute(e)}},{key:"hasAttr",value:function(e){return"function"==typeof this.actualNode.hasAttribute&&this.actualNode.hasAttribute(e)}},{key:"props",get:function(){var e=this.actualNode,t=e.nodeType,n=e.nodeName,r=e.id,a=e.type;return{nodeType:t,nodeName:n.toLowerCase(),id:r,type:a}}},{key:"isFocusable",get:function(){return this._cache.hasOwnProperty("isFocusable")||(this._cache.isFocusable=axe.commons.dom.isFocusable(this.actualNode)),this._cache.isFocusable}},{key:"tabbableElements",get:function(){return this._cache.hasOwnProperty("tabbableElements")||(this._cache.tabbableElements=axe.commons.dom.getTabbableElements(this)),this._cache.tabbableElements}}]),F);function F(e,t,n){var r;return D(this,F),(r=function(e,t){return!t||"object"!==S(t)&&"function"!=typeof t?y(e):t}(this,g(F).call(this))).shadowId=n,r.children=[],r.actualNode=e,r.parent=t,r._isHidden=null,r._cache={},axe._cache.get("nodeMap")&&axe._cache.get("nodeMap").set(e,y(r)),r}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function j(t,n){"use strict";if(t=t||function(){},n=n||axe.log,!axe._audit)throw new Error("No audit configured");var r=axe.utils.queue(),a=[];Object.keys(axe.plugins).forEach(function(e){r.defer(function(t){function n(e){a.push(e),t()}try{axe.plugins[e].cleanup(t,n)}catch(e){n(e)}})});var e=axe.utils.getFlattenedTree(document.body);axe.utils.querySelectorAll(e,"iframe, frame").forEach(function(n){r.defer(function(e,t){return axe.utils.sendCommandToFrame(n.actualNode,{command:"cleanup-plugin"},e,t)})}),r.then(function(e){0===a.length?t(e):n(a)}).catch(n)}function z(e,t,n){"use strict";function r(e){e instanceof Error==!1&&(e=new Error(e)),n(e)}var a=n,o=e&&e.context||{};o.hasOwnProperty("include")&&!o.include.length&&(o.include=[document]);var i=e&&e.options||{};switch(e.command){case"rules":return _(o,i,function(e,t){a(e),t()},r);case"cleanup-plugin":return j(a,r);default:if(axe._audit&&axe._audit.commands&&axe._audit.commands[e.command])return axe._audit.commands[e.command](e,n)}}function q(e){"use strict";this._run=e.run,this._collect=e.collect,this._registry={},e.commands.forEach(function(e){axe._audit.registerCommand(e)})}axe.AbstractVirtualNode=E,function(axe){var o={helpUrlBase:"https://dequeuniversity.com/rules/",results:[],resultGroups:[],resultGroupMap:{},impact:Object.freeze(["minor","moderate","serious","critical"]),preload:Object.freeze({assets:["cssom"],timeout:1e4})};[{name:"NA",value:"inapplicable",priority:0,group:"inapplicable"},{name:"PASS",value:"passed",priority:1,group:"passes"},{name:"CANTTELL",value:"cantTell",priority:2,group:"incomplete"},{name:"FAIL",value:"failed",priority:3,group:"violations"}].forEach(function(e){var t=e.name,n=e.value,r=e.priority,a=e.group;o[t]=n,o[t+"_PRIO"]=r,o[t+"_GROUP"]=a,o.results[r]=n,o.resultGroups[r]=a,o.resultGroupMap[n]=a}),Object.freeze(o.results),Object.freeze(o.resultGroups),Object.freeze(o.resultGroupMap),Object.freeze(o),Object.defineProperty(axe,"constants",{value:o,enumerable:!0,configurable:!1,writable:!1})}(axe),axe.log=function(){"use strict";"object"===("undefined"==typeof console?"undefined":S(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},axe.cleanup=j,axe.configure=function(e){"use strict";var t;if(!(t=axe._audit))throw new Error("No audit configured");e.reporter&&("function"==typeof e.reporter||T[e.reporter])&&(t.reporter=e.reporter),e.checks&&e.checks.forEach(function(e){t.addCheck(e)});var n=[];e.rules&&e.rules.forEach(function(e){n.push(e.id),t.addRule(e)}),e.disableOtherRules&&t.rules.forEach(function(e){!1===n.includes(e.id)&&(e.enabled=!1)}),void 0!==e.branding?t.setBranding(e.branding):t._constructHelpUrls(),e.tagExclude&&(t.tagExclude=e.tagExclude),e.locale&&t.applyLocale(e.locale)},axe.getRules=function(e){"use strict";var t=(e=e||[]).length?axe._audit.rules.filter(function(t){return!!e.filter(function(e){return-1!==t.tags.indexOf(e)}).length}):axe._audit.rules,n=axe._audit.data.rules||{};return t.map(function(e){var t=n[e.id]||{};return{ruleId:e.id,description:t.description,help:t.help,helpUrl:t.helpUrl,tags:e.tags}})},axe._load=function(e){"use strict";axe.utils.respondable.subscribe("axe.ping",function(e,t,n){n({axe:!0})}),axe.utils.respondable.subscribe("axe.start",z),axe._audit=new n(e)},(axe=axe||{}).plugins={},q.prototype.run=function(){"use strict";return this._run.apply(this,arguments)},q.prototype.collect=function(){"use strict";return this._collect.apply(this,arguments)},q.prototype.cleanup=function(e){"use strict";var n=axe.utils.queue(),r=this;Object.keys(this._registry).forEach(function(t){n.defer(function(e){r._registry[t].cleanup(e)})}),n.then(function(){e()})},q.prototype.add=function(e){"use strict";this._registry[e.id]=e},axe.registerPlugin=function(e){"use strict";axe.plugins[e.id]=new q(e)};var N,T={};function O(){axe._cache.clear(),axe._tree=void 0,axe._selectorData=void 0}function _(n,r,a,o){"use strict";try{n=new p(n),axe._tree=n.flatTree,axe._selectorData=axe.utils.getSelectorData(n.flatTree)}catch(e){return O(),o(e)}var i,e=axe.utils.queue(),u=axe._audit;r.performanceTimer&&axe.utils.performanceTimer.auditStart(),n.frames.length&&!1!==r.iframes&&e.defer(function(e,t){axe.utils.collectResultsFromFrames(n,r,"rules",null,e,t)}),e.defer(function(e,t){r.restoreScroll&&(i=axe.utils.getScrollState()),u.run(n,r,e,t)}),e.then(function(e){try{i&&axe.utils.setScrollState(i),r.performanceTimer&&axe.utils.performanceTimer.auditEnd();var t=axe.utils.mergeResults(e.map(function(e){return{results:e}}));n.initiator&&((t=u.after(t,r)).forEach(axe.utils.publishMetaData),t=t.map(axe.utils.finalizeRuleResult));try{a(t,O)}catch(e){O(),axe.log(e)}}catch(e){O(),o(e)}}).catch(function(e){O(),o(e)})}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}axe.getReporter=function(e){"use strict";return"string"==typeof e&&T[e]?T[e]:"function"==typeof e?e:N},axe.addReporter=function(e,t,n){"use strict";T[e]=t,n&&(N=t)},axe.reset=function(){"use strict";var e=axe._audit;if(!e)throw new Error("No audit configured");e.resetRulesAndChecks()},axe._runRules=_,axe.runVirtualRule=function(t,e){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};n.reporter=n.reporter||axe._audit.reporter||"v1",axe._selectorData={};var r=axe._audit.rules.find(function(e){return e.id===t});if(!r)throw new Error("unknown rule `"+t+"`");var a={include:[e]},o=(r=Object.create(r,{excludeHidden:{value:!1}})).runSync(a,n);axe.utils.publishMetaData(o),axe.utils.finalizeRuleResult(o);var i=axe.utils.aggregateResult([o]);return i.violations.forEach(function(e){return e.nodes.forEach(function(e){e.failureSummary=u.failureSummary(e)})}),R({},u.getEnvironmentData(),{},i,{toolOptions:n})};function B(){}function L(e,t,n){"use strict";var r=new TypeError("axe.run arguments are invalid");if(!function(e){"use strict";switch(!0){case"string"==typeof e:case Array.isArray(e):case Node&&e instanceof Node:case NodeList&&e instanceof NodeList:return!0;case"object"!==S(e):return!1;case void 0!==e.include:case void 0!==e.exclude:case"number"==typeof e.length:return!0;default:return!1}}(e)){if(void 0!==n)throw r;n=t,t=e,e=document}if("object"!==S(t)){if(void 0!==n)throw r;n=t,t={}}if("function"!=typeof n&&void 0!==n)throw r;return{context:e,options:t,callback:n||B}}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}axe.run=function(e,a,o){"use strict";if(!axe._audit)throw new Error("No audit configured");var t,n=L(e,a,o);e=n.context,a=n.options,o=n.callback,a.reporter=a.reporter||axe._audit.reporter||"v1",a.performanceTimer&&axe.utils.performanceTimer.start();var i=B,u=B;return"function"==typeof Promise&&o===B&&(t=new Promise(function(e,t){i=t,u=e})),axe._runRules(e,a,function(e,t){function n(e){t();try{o(null,e)}catch(e){axe.log(e)}u(e)}a.performanceTimer&&axe.utils.performanceTimer.end();try{var r=axe.getReporter(a.reporter)(e,a,n);void 0!==r&&n(r)}catch(e){t(),o(e),i(e)}},function(e){o(e),i(e)}),t},u.failureSummary=function(e){"use strict";var n={};return n.none=e.none.concat(e.all),n.any=e.any,Object.keys(n).map(function(e){if(n[e].length){var t=axe._audit.data.failureSummaries[e];return t&&"function"==typeof t.failureMessage?t.failureMessage(n[e].map(function(e){return e.message||""})):void 0}}).filter(function(e){return void 0!==e}).join("\n\n")},u.getEnvironmentData=function(e){var t=0<arguments.length&&void 0!==e?e:window,n=t.screen,r=void 0===n?{}:n,a=t.navigator,o=void 0===a?{}:a,i=t.location,u=void 0===i?{}:i,s=t.innerHeight,l=t.innerWidth,c=r.msOrientation||r.orientation||r.mozOrientation||{};return{testEngine:{name:"axe-core",version:axe.version},testRunner:{name:axe._audit.brand},testEnvironment:{userAgent:o.userAgent,windowWidth:l,windowHeight:s,orientationAngle:c.angle,orientationType:c.type},timestamp:(new Date).toISOString(),url:u.href}},u.incompleteFallbackMessage=function(){"use strict";return axe._audit.data.incompleteFallbackMessage()};var I=axe.constants.resultGroups;function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}u.processAggregate=function(e,n){var t=axe.utils.aggregateResult(e);return I.forEach(function(e){n.resultTypes&&!n.resultTypes.includes(e)&&(t[e]||[]).forEach(function(e){Array.isArray(e.nodes)&&0<e.nodes.length&&(e.nodes=[e.nodes[0]])}),t[e]=(t[e]||[]).map(function(t){return t=Object.assign({},t),Array.isArray(t.nodes)&&0<t.nodes.length&&(t.nodes=t.nodes.map(function(e){return"object"===S(e.node)&&(e.html=e.node.source,n.elementRef&&!e.node.fromFrame&&(e.element=e.node.element),!1===n.selectors&&!e.node.fromFrame||(e.target=e.node.selector),n.xpath&&(e.xpath=e.node.xpath)),delete e.result,delete e.node,function(t,n){"use strict";["any","all","none"].forEach(function(e){Array.isArray(t[e])&&t[e].filter(function(e){return Array.isArray(e.relatedNodes)}).forEach(function(e){e.relatedNodes=e.relatedNodes.map(function(e){var t={html:e.source};return n.elementRef&&!e.fromFrame&&(t.element=e.element),!1===n.selectors&&!e.fromFrame||(t.target=e.selector),n.xpath&&(t.xpath=e.xpath),t})})})}(e,n),e})),I.forEach(function(e){return delete t[e]}),delete t.pageLevel,delete t.result,t})}),t},axe.addReporter("na",function(e,t,n){"use strict";console.warn('"na" reporter will be deprecated in axe v4.0. Use the "v2" reporter instead.'),"function"==typeof t&&(n=t,t={});var r=u.processAggregate(e,t);n(R({},u.getEnvironmentData(),{toolOptions:t,violations:r.violations,passes:r.passes,incomplete:r.incomplete,inapplicable:r.inapplicable}))}),axe.addReporter("no-passes",function(e,t,n){"use strict";"function"==typeof t&&(n=t,t={}),t.resultTypes=["violations"];var r=u.processAggregate(e,t);n(R({},u.getEnvironmentData(),{toolOptions:t,violations:r.violations}))}),axe.addReporter("rawEnv",function(e,t,n){"function"==typeof t&&(n=t,t={}),axe.getReporter("raw")(e,t,function(e){var t=u.getEnvironmentData();n({raw:e,env:t})})}),axe.addReporter("raw",function(e,t,n){"use strict";if("function"==typeof t&&(n=t,t={}),!e||!Array.isArray(e))return n(e);n(e.map(function(e){for(var t=R({},e),n=0,r=["passes","violations","incomplete","inapplicable"];n<r.length;n++){var a=r[n];t[a]&&Array.isArray(t[a])&&(t[a]=t[a].map(function(e){return R({},e,{node:e.node.toJSON()})}))}return t}))}),axe.addReporter("v1",function(e,t,n){"use strict";"function"==typeof t&&(n=t,t={});var r=u.processAggregate(e,t);r.violations.forEach(function(e){return e.nodes.forEach(function(e){e.failureSummary=u.failureSummary(e)})}),n(R({},u.getEnvironmentData(),{toolOptions:t,violations:r.violations,passes:r.passes,incomplete:r.incomplete,inapplicable:r.inapplicable}))}),axe.addReporter("v2",function(e,t,n){"use strict";"function"==typeof t&&(n=t,t={});var r=u.processAggregate(e,t);n(R({},u.getEnvironmentData(),{toolOptions:t,violations:r.violations,passes:r.passes,incomplete:r.incomplete,inapplicable:r.inapplicable}))},!0),axe.utils.aggregate=function(t,e,n){e=e.slice(),n&&e.push(n);var r=e.map(function(e){return t.indexOf(e)}).sort();return t[r.pop()]};var P=axe.constants,U=P.CANTTELL_PRIO,V=P.FAIL_PRIO,M=[];M[axe.constants.PASS_PRIO]=!0,M[axe.constants.CANTTELL_PRIO]=null,M[axe.constants.FAIL_PRIO]=!1;var axe,H=["any","all","none"];function G(n,r){return H.reduce(function(e,t){return e[t]=(n[t]||[]).map(function(e){return r(e,t)}),e},{})}function W(e,t,n){var r=Object.assign({},t);r.nodes=(r[n]||[]).concat(),axe.constants.resultGroups.forEach(function(e){delete r[e]}),e[n].push(r)}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function $(e,t){"use strict";var n;return axe._tree&&(n=axe.utils.getSelector(t)),new Error(e+": "+(n||t))}function X(e,t,n){this._fromFrame=!!n,this.spec=n||{},t&&t.absolutePaths&&(this._options={toRoot:!0}),this.source=void 0!==this.spec.source?this.spec.source:function(e){var t=e.outerHTML;return t||"function"!=typeof XMLSerializer||(t=(new XMLSerializer).serializeToString(e)),function(e,t){if(t=t||300,e.length>t){var n=e.indexOf(">");e=e.substring(0,n+1)}return e}(t||"")}(e),this._element=e}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,a=!1,o=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){a=!0,o=e}finally{try{r||null==u.return||u.return()}finally{if(a)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function J(e,t){return[e.substring(0,t),e.substring(t)]}function K(e){return e.replace(/\s+$/,"")}axe.utils.aggregateChecks=function(e){var n=Object.assign({},e);G(n,function(e,t){var n=void 0===e.result?-1:M.indexOf(e.result);e.priority=-1!==n?n:axe.constants.CANTTELL_PRIO,"none"===t&&(e.priority===axe.constants.PASS_PRIO?e.priority=axe.constants.FAIL_PRIO:e.priority===axe.constants.FAIL_PRIO&&(e.priority=axe.constants.PASS_PRIO))});var r={all:n.all.reduce(function(e,t){return Math.max(e,t.priority)},0),none:n.none.reduce(function(e,t){return Math.max(e,t.priority)},0),any:n.any.reduce(function(e,t){return Math.min(e,t.priority)},4)%4};n.priority=Math.max(r.all,r.none,r.any);var a=[];return H.forEach(function(t){n[t]=n[t].filter(function(e){return e.priority===n.priority&&e.priority===r[t]}),n[t].forEach(function(e){return a.push(e.impact)})}),[U,V].includes(n.priority)?n.impact=axe.utils.aggregate(axe.constants.impact,a):n.impact=null,G(n,function(e){delete e.result,delete e.priority}),n.result=axe.constants.results[n.priority],delete n.priority,n},axe.utils.aggregateNodeResults=function(e){var n={};if((e=e.map(function(e){if(e.any&&e.all&&e.none)return axe.utils.aggregateChecks(e);if(Array.isArray(e.node))return axe.utils.finalizeRuleResult(e);throw new TypeError("Invalid Result type")}))&&e.length){var t=e.map(function(e){return e.result});n.result=axe.utils.aggregate(axe.constants.results,t,n.result)}else n.result="inapplicable";axe.constants.resultGroups.forEach(function(e){return n[e]=[]}),e.forEach(function(e){var t=axe.constants.resultGroupMap[e.result];n[t].push(e)});var r=axe.constants.FAIL_GROUP;if(0===n[r].length&&(r=axe.constants.CANTTELL_GROUP),0<n[r].length){var a=n[r].map(function(e){return e.impact});n.impact=axe.utils.aggregate(axe.constants.impact,a)||null}else n.impact=null;return n},axe.utils.aggregateResult=function(e){var n={};return axe.constants.resultGroups.forEach(function(e){return n[e]=[]}),e.forEach(function(t){t.error?W(n,t,axe.constants.CANTTELL_GROUP):t.result===axe.constants.NA?W(n,t,axe.constants.NA_GROUP):axe.constants.resultGroups.forEach(function(e){Array.isArray(t[e])&&0<t[e].length&&W(n,t,e)})}),n},axe.utils.areStylesSet=function e(t,n,r){"use strict";var a=window.getComputedStyle(t,null),o=!1;return!!a&&(n.forEach(function(e){a.getPropertyValue(e.property)===e.value&&(o=!0)}),!!o||!(t.nodeName.toUpperCase()===r.toUpperCase()||!t.parentNode)&&e(t.parentNode,n,r))},axe.utils.checkHelper=function(t,n,r,a){"use strict";return{isAsync:!1,async:function(){return this.isAsync=!0,function(e){e instanceof Error==!1?(t.result=e,r(t)):a(e)}},data:function(e){t.data=e},relatedNodes:function(e){e=e instanceof Node?[e]:axe.utils.toArray(e),t.relatedNodes=e.map(function(e){return new axe.utils.DqElement(e,n)})}}},axe.utils.clone=function(e){"use strict";var t,n,r=e;if(null!==e&&"object"===S(e))if(Array.isArray(e))for(r=[],t=0,n=e.length;t<n;t++)r[t]=axe.utils.clone(e[t]);else for(t in r={},e)r[t]=axe.utils.clone(e[t]);return r},axe.utils.sendCommandToFrame=function(t,n,r,a){"use strict";var o=t.contentWindow;if(!o)return axe.log("Frame does not have a content window",t),void r(null);var i=setTimeout(function(){i=setTimeout(function(){n.debug?a($("No response from frame",t)):r(null)},0)},500);axe.utils.respondable(o,"axe.ping",null,void 0,function(){clearTimeout(i);var e=n.options&&n.options.frameWaitTime||6e4;i=setTimeout(function(){a($("Axe in frame timed out",t))},e),axe.utils.respondable(o,"axe.start",n,void 0,function(e){clearTimeout(i),e instanceof Error==!1?r(e):a(e)})})},axe.utils.collectResultsFromFrames=function(e,t,n,o,r,a){"use strict";var i=axe.utils.queue();e.frames.forEach(function(r){var a={options:t,command:n,parameter:o,context:{initiator:!1,page:e.page,include:r.include||[],exclude:r.exclude||[]}};i.defer(function(t,e){var n=r.node;axe.utils.sendCommandToFrame(n,a,function(e){if(e)return t({results:e,frameElement:n,frame:axe.utils.getSelector(n)});t(null)},e)})}),i.then(function(e){r(axe.utils.mergeResults(e,t))}).catch(a)},axe.utils.contains=function(e,t){"use strict";if(e.shadowId||t.shadowId)return function t(e,n){return e.shadowId===n.shadowId||!!e.children.find(function(e){return t(e,n)})}(e,t);if(e.actualNode)return"function"==typeof e.actualNode.contains?e.actualNode.contains(t.actualNode):!!(16&e.actualNode.compareDocumentPosition(t.actualNode));do{if(t===e)return!0}while(t=t&&t.parent);return!1},function(axe){var e=new axe.imports.CssSelectorParser;e.registerSelectorPseudos("not"),e.registerNestingOperators(">"),e.registerAttrEqualityMods("^","$","*"),axe.utils.cssParser=e}(axe),X.prototype={get selector(){return this.spec.selector||[axe.utils.getSelector(this.element,this._options)]},get xpath(){return this.spec.xpath||[axe.utils.getXpath(this.element)]},get element(){return this._element},get fromFrame(){return this._fromFrame},toJSON:function(){"use strict";return{selector:this.selector,source:this.source,xpath:this.xpath}}},X.fromFrame=function(e,t,n){return e.selector.unshift(n.selector),e.xpath.unshift(n.xpath),new axe.utils.DqElement(n.element,t,e)},axe.utils.DqElement=X,axe.utils.matchesSelector=function(){"use strict";var n;return function(e,t){return n&&e[n]||(n=function(e){var t,n,r=["matches","matchesSelector","mozMatchesSelector","webkitMatchesSelector","msMatchesSelector"],a=r.length;for(t=0;t<a;t++)if(e[n=r[t]])return n}(e)),!!e[n]&&e[n](t)}}(),axe.utils.escapeSelector=function(e){"use strict";for(var t,n=String(e),r=n.length,a=-1,o="",i=n.charCodeAt(0);++a<r;)0!=(t=n.charCodeAt(a))?o+=1<=t&&t<=31||127==t||0==a&&48<=t&&t<=57||1==a&&48<=t&&t<=57&&45==i?"\\"+t.toString(16)+" ":(0!=a||1!=r||45!=t)&&(128<=t||45==t||95==t||48<=t&&t<=57||65<=t&&t<=90||97<=t&&t<=122)?n.charAt(a):"\\"+n.charAt(a):o+="�";return o},axe.utils.extendMetaData=function(t,n){Object.assign(t,n),Object.keys(n).filter(function(e){return"function"==typeof n[e]}).forEach(function(e){t[e]=null;try{t[e]=n[e](t)}catch(e){}})},axe.utils.finalizeRuleResult=function(e){return Object.assign(e,axe.utils.aggregateNodeResults(e.nodes)),delete e.nodes,e},axe.utils.findBy=function(e,t,n){if(Array.isArray(e))return e.find(function(e){return"object"===S(e)&&e[t]===n})},(axe=axe||{utils:{}}).utils.getFlattenedTree=function(e,t){return axe._cache.set("nodeMap",new WeakMap),function a(e,o,n){var r,t,i;function u(e,t,n){var r=a(t,o,n);return r&&(e=e.concat(r)),e}if(e.documentElement&&(e=e.documentElement),i=e.nodeName.toLowerCase(),axe.utils.isShadowRoot(e))return r=new A(e,n,o),o="a"+Math.random().toString().substring(2),t=Array.from(e.shadowRoot.childNodes),r.children=t.reduce(function(e,t){return u(e,t,r)},[]),[r];if("content"===i&&"function"==typeof e.getDistributedNodes)return(t=Array.from(e.getDistributedNodes())).reduce(function(e,t){return u(e,t,n)},[]);if("slot"!==i||"function"!=typeof e.assignedNodes)return 1===e.nodeType?(r=new A(e,n,o),t=Array.from(e.childNodes),r.children=t.reduce(function(e,t){return u(e,t,r)},[]),[r]):3===e.nodeType?[new A(e,n)]:void 0;(t=Array.from(e.assignedNodes())).length||(t=function(e){var t=[];for(e=e.firstChild;e;)t.push(e),e=e.nextSibling;return t}(e));window.getComputedStyle(e);return t.reduce(function(e,t){return u(e,t,n)},[])}(e,t)},axe.utils.getNodeFromTree=function(e,t){var n=t||e;return axe._cache.get("nodeMap")?axe._cache.get("nodeMap").get(n):null},axe.utils.getAllChecks=function(e){"use strict";return[].concat(e.any||[]).concat(e.all||[]).concat(e.none||[])},axe.utils.getBaseLang=function(e){return e?e.trim().split("-")[0].toLowerCase():""},axe.utils.getCheckOption=function(e,t,n){var r=((n.rules&&n.rules[t]||{}).checks||{})[e.id],a=(n.checks||{})[e.id],o=e.enabled,i=e.options;return a&&(a.hasOwnProperty("enabled")&&(o=a.enabled),a.hasOwnProperty("options")&&(i=a.options)),r&&(r.hasOwnProperty("enabled")&&(o=r.enabled),r.hasOwnProperty("options")&&(i=r.options)),{enabled:o,options:i,absolutePaths:n.absolutePaths}},axe.utils.getFriendlyUriEnd=function(e,t){var n=0<arguments.length&&void 0!==e?e:"",r=1<arguments.length&&void 0!==t?t:{};if(!(n.length<=1||"data:"===n.substr(0,5)||"javascript:"===n.substr(0,11)||n.includes("?"))){var a=r.currentDomain,o=r.maxLength,i=void 0===o?25:o,u=function(e){var t=e,n="",r="",a="",o="",i="";if(e.includes("#")){var u=Y(J(e,e.indexOf("#")),2);e=u[0],i=u[1]}if(e.includes("?")){var s=Y(J(e,e.indexOf("?")),2);e=s[0],o=s[1]}if(e.includes("://")){var l=Y(e.split("://"),2);n=l[0];var c=Y(J(e=l[1],e.indexOf("/")),2);r=c[0],e=c[1]}else if("//"===e.substr(0,2)){var d=Y(J(e=e.substr(2),e.indexOf("/")),2);r=d[0],e=d[1]}if("www."===r.substr(0,4)&&(r=r.substr(4)),r&&r.includes(":")){var m=Y(J(r,r.indexOf(":")),2);r=m[0],a=m[1]}return{original:t,protocol:n,domain:r,port:a,path:e,query:o,hash:i}}(n),s=u.path,l=u.domain,c=u.hash,d=s.substr(s.substr(0,s.length-2).lastIndexOf("/")+1);if(c)return d&&(d+c).length<=i?K(d+c):d.length<2&&2<c.length&&c.length<=i?K(c):void 0;if(l&&l.length<i&&s.length<=1)return K(l+s);if(s==="/"+d&&l&&a&&l!==a&&(l+s).length<=i)return K(l+s);var m=d.lastIndexOf(".");return(-1===m||1<m)&&(-1!==m||2<d.length)&&d.length<=i&&!d.match(/index(\.[a-zA-Z]{2-4})?/)&&!function(e){var t=0<arguments.length&&void 0!==e?e:"";return 0!==t.length&&(t.match(/[0-9]/g)||"").length>=t.length/2}(d)?K(d):void 0}},axe.utils.getNodeAttributes=function(e){return e.attributes instanceof window.NamedNodeMap?e.attributes:e.cloneNode(!1).attributes},axe.utils.getRootNode=function(e){var t=e.getRootNode&&e.getRootNode()||document;return t===e&&(t=document),t},axe.utils.getScroll=function(e,t){var n=1<arguments.length&&void 0!==t?t:0,r=e.scrollWidth>e.clientWidth+n,a=e.scrollHeight>e.clientHeight+n;if(r||a){var o=window.getComputedStyle(e),i=o.getPropertyValue("overflow-x"),u=o.getPropertyValue("overflow-y");return r&&("visible"!==i&&"hidden"!==i)||a&&("visible"!==u&&"hidden"!==u)?{elm:e,top:e.scrollTop,left:e.scrollLeft}:void 0}};var Z,Q,ee=axe.utils.escapeSelector,te=["class","style","id","selected","checked","disabled","tabindex","aria-checked","aria-selected","aria-invalid","aria-activedescendant","aria-busy","aria-disabled","aria-expanded","aria-grabbed","aria-pressed","aria-valuenow"],ne=31;function re(e,t){var n,r=t.name;if(-1!==r.indexOf("href")||-1!==r.indexOf("src")){var a=axe.utils.getFriendlyUriEnd(e.getAttribute(r));if(a){var o=encodeURI(a);if(!o)return;n=ee(t.name)+'$="'+ee(o)+'"'}else n=ee(t.name)+'="'+ee(e.getAttribute(r))+'"'}else n=ee(r)+'="'+ee(t.value)+'"';return n}function ae(e,t){return e.count<t.count?-1:e.count===t.count?0:1}function oe(e){return!te.includes(e.name)&&-1===e.name.indexOf(":")&&(!e.value||e.value.length<ne)}function ie(t,n){var e=t.parentNode&&Array.from(t.parentNode.children||"")||[];return e.find(function(e){return e!==t&&axe.utils.matchesSelector(e,n)})?":nth-child("+(1+e.indexOf(t))+")":""}function ue(e){if(e.getAttribute("id")){var t=e.getRootNode&&e.getRootNode()||document,n="#"+ee(e.getAttribute("id")||"");return n.match(/player_uid_/)||1!==t.querySelectorAll(n).length?void 0:n}}function se(e){return void 0===Z&&(Z=axe.utils.isXHTML(document)),ee(Z?e.localName:e.nodeName.toLowerCase())}function le(e,t){var n,r="",a=function(n,e){var r=[],a=e.classes,o=e.tags;return n.classList&&Array.from(n.classList).forEach(function(e){var t=ee(e);a[t]<o[n.nodeName]&&r.push({name:t,count:a[t],species:"class"})}),r.sort(ae)}(e,t),o=function(n,e){var r=[],a=e.attributes,o=e.tags;return n.hasAttributes()&&Array.from(axe.utils.getNodeAttributes(n)).filter(oe).forEach(function(e){var t=re(n,e);t&&a[t]<o[n.nodeName]&&r.push({name:t,count:a[t],species:"attribute"})}),r.sort(ae)}(e,t);return a.length&&1===a[0].count?n=[a[0]]:o.length&&1===o[0].count?(n=[o[0]],r=se(e)):((n=a.concat(o)).sort(ae),(n=n.slice(0,3)).some(function(e){return"class"===e.species})?n.sort(function(e,t){return e.species!==t.species&&"class"===e.species?-1:e.species===t.species?0:1}):r=se(e)),r+n.reduce(function(e,t){switch(t.species){case"class":return e+"."+t.name;case"attribute":return e+"["+t.name+"]"}return e},"")}function ce(e,t,n){if(!axe._selectorData)throw new Error("Expect axe._selectorData to be set up");var r,a,o=t.toRoot,i=void 0!==o&&o;do{var u=ue(e);u||(u=le(e,axe._selectorData),u+=ie(e,u)),r=r?u+" > "+r:u,a=a?a.filter(function(e){return axe.utils.matchesSelector(e,r)}):Array.from(n.querySelectorAll(r)),e=e.parentElement}while((1<a.length||i)&&e&&11!==e.nodeType);return 1===a.length?r:-1!==r.indexOf(" > ")?":root"+r.substring(r.indexOf(" > ")):":root"}axe.utils.getSelectorData=function(e){function t(){var e=a.pop(),n=e.actualNode;if(n.querySelectorAll){var t=n.nodeName;r.tags[t]?r.tags[t]++:r.tags[t]=1,n.classList&&Array.from(n.classList).forEach(function(e){var t=ee(e);r.classes[t]?r.classes[t]++:r.classes[t]=1}),n.hasAttributes()&&Array.from(axe.utils.getNodeAttributes(n)).filter(oe).forEach(function(e){var t=re(n,e);t&&(r.attributes[t]?r.attributes[t]++:r.attributes[t]=1)})}for(e.children.length&&(o.push(a),a=e.children.slice());!a.length&&o.length;)a=o.pop()}for(var r={classes:{},tags:{},attributes:{}},a=(e=Array.isArray(e)?e:[e]).slice(),o=[];a.length;)t();return r},axe.utils.getSelector=function(e,t){var n=1<arguments.length&&void 0!==t?t:{};if(!e)return"";var r=e.getRootNode&&e.getRootNode()||document;if(11!==r.nodeType)return ce(e,n,r);for(var a=[];11===r.nodeType;)a.push({elm:e,doc:r}),r=(e=r.host).getRootNode();return a.push({elm:e,doc:r}),a.reverse().map(function(e){return ce(e.elm,n,e.doc)})},axe.utils.getStyleSheetFactory=function(d){if(!d)throw new Error("axe.utils.getStyleSheetFactory should be invoked with an argument");return function(e){var t=e.data,n=e.isCrossOrigin,r=void 0!==n&&n,a=e.shadowId,o=e.root,i=e.priority,u=e.isLink,s=void 0!==u&&u,l=d.createElement("style");if(s){var c=d.createTextNode('@import "'.concat(t.href,'"'));l.appendChild(c)}else l.appendChild(d.createTextNode(t));return d.head.appendChild(l),{sheet:l.sheet,isCrossOrigin:r,shadowId:a,root:o,priority:i}}},axe.utils.getXpath=function(e){return function(e){return e.reduce(function(e,t){return t.id?"/".concat(t.str,"[@id='").concat(t.id,"']"):e+"/".concat(t.str)+(0<t.count?"[".concat(t.count,"]"):"")},"")}(function e(t,n){var r,a;if(!t)return[];if(!n&&9===t.nodeType)return n=[{str:"html"}];if(n=n||[],t.parentNode&&t.parentNode!==t&&(n=e(t.parentNode,n)),t.previousSibling){for(a=1,r=t.previousSibling;1===r.nodeType&&r.nodeName===t.nodeName&&a++,r=r.previousSibling;);1===a&&(a=null)}else if(t.nextSibling)for(r=t.nextSibling;r=1===r.nodeType&&r.nodeName===t.nodeName?(a=1,null):(a=null,r.previousSibling););if(1===t.nodeType){var o={};o.str=t.nodeName.toLowerCase();var i=t.getAttribute&&axe.utils.escapeSelector(t.getAttribute("id"));i&&1===t.ownerDocument.querySelectorAll("#"+i).length&&(o.id=t.getAttribute("id")),1<a&&(o.count=a),n.push(o)}return n}(e))},axe.utils.injectStyle=function(e){"use strict";if(Q&&Q.parentNode)return void 0===Q.styleSheet?Q.appendChild(document.createTextNode(e)):Q.styleSheet.cssText+=e,Q;if(e){var t=document.head||document.getElementsByTagName("head")[0];return(Q=document.createElement("style")).type="text/css",void 0===Q.styleSheet?Q.appendChild(document.createTextNode(e)):Q.styleSheet.cssText=e,t.appendChild(Q),Q}},axe.utils.isHidden=function(e,t){"use strict";var n=axe.utils.getNodeFromTree(e);if(9===e.nodeType)return!1;if(11===e.nodeType&&(e=e.host),n&&null!==n._isHidden)return n._isHidden;var r=window.getComputedStyle(e,null);if(!r||!e.parentNode||"none"===r.getPropertyValue("display")||!t&&"hidden"===r.getPropertyValue("visibility")||"true"===e.getAttribute("aria-hidden"))return!0;var a=e.assignedSlot?e.assignedSlot:e.parentNode,o=axe.utils.isHidden(a,!0);return n&&(n._isHidden=o),o};var de=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"];axe.utils.isHtmlElement=function(e){var t=e.nodeName.toLowerCase();return de.includes(t)&&"http://www.w3.org/2000/svg"!==e.namespaceURI};var me,pe,fe=["article","aside","blockquote","body","div","footer","h1","h2","h3","h4","h5","h6","header","main","nav","p","section","span"];function he(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function be(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function ge(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}function ye(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}function ve(e){return"function"==typeof e||"[object Function]"===me.call(e)}function De(e){var t=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(0<t?1:-1)*Math.floor(Math.abs(t)):t}(e);return Math.min(Math.max(t,0),pe)}function we(e){var t=e.nodeName.toUpperCase(),n=e.getAttribute("href"),r=e.getAttribute("rel"),a="LINK"===t&&n&&r&&e.rel.toUpperCase().includes("STYLESHEET");return"STYLE"===t||a&&ke(e.media)}function ke(e){return!e||!e.toUpperCase().includes("PRINT")}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function xe(a,o){"use strict";return function(e){var t=a[e.id]||{},n=t.messages||{},r=Object.assign({},t);delete r.messages,void 0===e.result?"object"===S(n.incomplete)?r.message=function(){return function(t,n){function r(e){return e.incomplete&&e.incomplete.default?e.incomplete.default:u.incompleteFallbackMessage()}if(!t||!t.missingData)return r(n);try{var e=n.incomplete[t.missingData[0].reason];if(!e)throw new Error;return e}catch(e){return"string"==typeof t.missingData?n.incomplete[t.missingData]:r(n)}}(e.data,n)}:r.message=n.incomplete:r.message=e.result===o?n.pass:n.fail,axe.utils.extendMetaData(e,r)}}axe.utils.isShadowRoot=function(e){var t=e.nodeName.toLowerCase();return!(!e.shadowRoot||!/^[a-z][a-z0-9_.-]*-[a-z0-9_.-]*$/.test(t)&&!fe.includes(t))},axe.utils.isXHTML=function(e){"use strict";return!!e.createElement&&"A"===e.createElement("A").localName},axe.utils.mergeResults=function(e,r){"use strict";var a=[];return e.forEach(function(n){var e=function(e){"use strict";return e&&e.results?Array.isArray(e.results)?e.results.length?e.results:null:[e.results]:null}(n);e&&e.length&&e.forEach(function(e){e.nodes&&n.frame&&function(e,n,t,r){"use strict";var a={element:t,selector:r,xpath:axe.utils.getXpath(t)};e.forEach(function(e){e.node=axe.utils.DqElement.fromFrame(e.node,n,a);var t=axe.utils.getAllChecks(e);t.length&&t.forEach(function(e){e.relatedNodes=e.relatedNodes.map(function(e){return axe.utils.DqElement.fromFrame(e,n,a)})})})}(e.nodes,r,n.frameElement,n.frame);var t=axe.utils.findBy(a,"id",e.id);t?e.nodes.length&&function(e,t){"use strict";for(var n,r,a=t[0].node,o=0,i=e.length;o<i;o++)if(r=e[o].node,0<(n=axe.utils.nodeSorter({actualNode:r.element},{actualNode:a.element}))||0===n&&a.selector.length<r.selector.length)return e.splice.apply(e,[o,0].concat(t));e.push.apply(e,t)}(t.nodes,e.nodes):a.push(e)})}),a},axe.utils.nodeSorter=function(e,t){return(e=e.actualNode||e)===(t=t.actualNode||t)?0:4&e.compareDocumentPosition(t)?-1:1},axe.utils.parseCrossOriginStylesheet=function(e,r,a,o,i){var t={method:"get",url:e};return o.push(e),axe.imports.axios(t).then(function(e){var t=e.data,n=r.convertDataToStylesheet({data:t,isCrossOrigin:i,priority:a,root:r.rootNode,shadowId:r.shadowId});return axe.utils.parseStylesheet(n.sheet,r,a,o,n.isCrossOrigin)})},axe.utils.parseSameOriginStylesheet=function(e,a,o,i,t){var n=4<arguments.length&&void 0!==t&&t,r=Array.from(e.cssRules);if(!r)return Promise.resolve();var u=r.filter(function(e){return 3===e.type});if(!u.length)return Promise.resolve({isCrossOrigin:n,priority:o,root:a.rootNode,shadowId:a.shadowId,sheet:e});var s=u.filter(function(e){return e.href}).map(function(e){return e.href}).filter(function(e){return!i.includes(e)}).map(function(e,t){var n=[].concat(he(o),[t]),r=/^https?:\/\/|^\/\//i.test(e);return axe.utils.parseCrossOriginStylesheet(e,a,n,i,r)}),l=r.filter(function(e){return 3!==e.type});return l.length&&s.push(Promise.resolve(a.convertDataToStylesheet({data:l.map(function(e){return e.cssText}).join(),isCrossOrigin:n,priority:o,root:a.rootNode,shadowId:a.shadowId}))),Promise.all(s)},axe.utils.parseStylesheet=function(e,t,n,r,a){var o=4<arguments.length&&void 0!==a&&a;return function(e){try{return!(!e.cssRules&&e.href)}catch(e){return!1}}(e)?axe.utils.parseSameOriginStylesheet(e,t,n,r,o):axe.utils.parseCrossOriginStylesheet(e.href,t,n,r,!0)},utils.performanceTimer=function(){"use strict";function e(){if(window.performance&&window.performance)return window.performance.now()}var t=null,n=e();return{start:function(){this.mark("mark_axe_start")},end:function(){this.mark("mark_axe_end"),this.measure("axe","mark_axe_start","mark_axe_end"),this.logMeasures("axe")},auditStart:function(){this.mark("mark_audit_start")},auditEnd:function(){this.mark("mark_audit_end"),this.measure("audit_start_to_end","mark_audit_start","mark_audit_end"),this.logMeasures()},mark:function(e){window.performance&&void 0!==window.performance.mark&&window.performance.mark(e)},measure:function(e,t,n){window.performance&&void 0!==window.performance.measure&&window.performance.measure(e,t,n)},logMeasures:function(e){function t(e){axe.log("Measure "+e.name+" took "+e.duration+"ms")}if(window.performance&&void 0!==window.performance.getEntriesByType)for(var n=window.performance.getEntriesByName("mark_axe_start")[0],r=window.performance.getEntriesByType("measure").filter(function(e){return e.startTime>=n.startTime}),a=0;a<r.length;++a){var o=r[a];if(o.name===e)return void t(o);t(o)}},timeElapsed:function(){return e()-n},reset:function(){t=t||e(),n=e()}}}(),"function"!=typeof Object.assign&&(Object.assign=function(e){"use strict";if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n<arguments.length;n++){var r=arguments[n];if(null!=r)for(var a in r)r.hasOwnProperty(a)&&(t[a]=r[a])}return t}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var t,n=Object(this),r=n.length>>>0,a=arguments[1],o=0;o<r;o++)if(t=n[o],e.call(a,t,o,n))return t}}),axe.utils.pollyfillElementsFromPoint=function(){if(document.elementsFromPoint)return document.elementsFromPoint;if(document.msElementsFromPoint)return document.msElementsFromPoint;var e,t=((e=document.createElement("x")).style.cssText="pointer-events:auto","auto"===e.style.pointerEvents),u=t?"pointer-events":"visibility",s=t?"none":"hidden",l=document.createElement("style");return l.innerHTML=t?"* { pointer-events: all }":"* { visibility: visible }",function(e,t){var n,r,a,o=[],i=[];for(document.head.appendChild(l);(n=document.elementFromPoint(e,t))&&-1===o.indexOf(n);)o.push(n),i.push({value:n.style.getPropertyValue(u),priority:n.style.getPropertyPriority(u)}),n.style.setProperty(u,s,"important");for(o.indexOf(document.documentElement)<o.length-1&&(o.splice(o.indexOf(document.documentElement),1),o.push(document.documentElement)),r=i.length;a=i[--r];)o[r].style.setProperty(u,a.value?a.value:"",a.priority);return document.head.removeChild(l),o}},"function"==typeof window.addEventListener&&(document.elementsFromPoint=axe.utils.pollyfillElementsFromPoint()),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e,t){"use strict";var n=Object(this),r=parseInt(n.length,10)||0;if(0===r)return!1;var a,o,i=parseInt(t,10)||0;for(0<=i?a=i:(a=r+i)<0&&(a=0);a<r;){if(e===(o=n[a])||e!=e&&o!=o)return!0;a++}return!1}}),Array.prototype.some||Object.defineProperty(Array.prototype,"some",{value:function(e,t){"use strict";if(null==this)throw new TypeError("Array.prototype.some called on null or undefined");if("function"!=typeof e)throw new TypeError;for(var n=Object(this),r=n.length>>>0,a=2<=arguments.length?t:void 0,o=0;o<r;o++)if(o in n&&e.call(a,n[o],o,n))return!0;return!1}}),Array.from||Object.defineProperty(Array,"from",{value:(me=Object.prototype.toString,pe=Math.pow(2,53)-1,function(e,t,n){var r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var a,o=1<arguments.length?t:void 0;if(void 0!==o){if(!ve(o))throw new TypeError("Array.from: when provided, the second argument must be a function");2<arguments.length&&(a=n)}for(var i,u=De(r.length),s=ve(this)?Object(new this(u)):new Array(u),l=0;l<u;)i=r[l],s[l]=o?void 0===a?o(i,l):o.call(a,i,l):i,l+=1;return s.length=u,s})}),String.prototype.includes||(String.prototype.includes=function(e,t){return"number"!=typeof t&&(t=0),!(t+e.length>this.length)&&-1!==this.indexOf(e,t)}),axe.utils.preloadCssom=function(e){var t=e.treeRoot,n=function(e){var t=[],n=axe.utils.querySelectorAllFilter(e,"*",function(e){return!t.includes(e.shadowId)&&(t.push(e.shadowId),!0)}).map(function(e){return{shadowId:e.shadowId,rootNode:axe.utils.getRootNode(e.actualNode)}});return axe.utils.uniqueArray(n,[])}(void 0===t?axe._tree[0]:t);if(!n.length)return Promise.resolve();var r=document.implementation.createHTMLDocument("Dynamic document for loading cssom");return function(e,l){var c=[];return e.forEach(function(e,t){var n=e.rootNode,r=e.shadowId,a=function(e,t,n){var r;r=11===e.nodeType&&t?function(o,i){return Array.from(o.children).filter(we).reduce(function(e,t){var n=t.nodeName.toUpperCase(),r="STYLE"===n?t.textContent:t,a=i({data:r,isLink:"LINK"===n,root:o});return e.push(a.sheet),e},[])}(e,n):function(e){return Array.from(e.styleSheets).filter(function(e){return ke(e.media.mediaText)})}(e);return function(e){var t=[];return e.filter(function(e){return!e.href||!t.includes(e.href)&&(t.push(e.href),!0)})}(r)}(n,r,l);if(!a)return Promise.all(c);var o=t+1,i={rootNode:n,shadowId:r,convertDataToStylesheet:l,rootIndex:o},u=[],s=Promise.all(a.map(function(e,t){var n=[o,t];return axe.utils.parseStylesheet(e,i,n,u)}));c.push(s)}),Promise.all(c)}(n,axe.utils.getStyleSheetFactory(r)).then(function(e){return function n(e){return e.reduce(function(e,t){return Array.isArray(t)?e.concat(n(t)):e.concat(t)},[])}(e)})},axe.utils.shouldPreload=function(e){return!e||void 0===e.preload||null===e.preload||("boolean"==typeof e.preload?e.preload:function(e){return"object"===S(e)&&Array.isArray(e.assets)}(e.preload))},axe.utils.getPreloadConfig=function(e){var t=axe.constants.preload,n=t.assets,r=t.timeout,a={assets:n,timeout:r};if(!e.preload)return a;if("boolean"==typeof e.preload)return a;if(!e.preload.assets.every(function(e){return n.includes(e.toLowerCase())}))throw new Error("Requested assets, not supported. "+"Supported assets are: ".concat(n.join(", "),"."));return a.assets=axe.utils.uniqueArray(e.preload.assets.map(function(e){return e.toLowerCase()}),[]),e.preload.timeout&&"number"==typeof e.preload.timeout&&!Number.isNaN(e.preload.timeout)&&(a.timeout=e.preload.timeout),a},axe.utils.preload=function(o){var i={cssom:axe.utils.preloadCssom};return axe.utils.shouldPreload(o)?new Promise(function(n,e){var t=axe.utils.getPreloadConfig(o),r=t.assets,a=t.timeout;setTimeout(function(){return e("Preload assets timed out.")},a),Promise.all(r.map(function(t){return i[t](o).then(function(e){return function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e)})})).then(function(e){var t=e.reduce(function(e,t){return R({},e,{},t)},{});n(t)})}):Promise.resolve()},axe.utils.publishMetaData=function(e){"use strict";var t=axe._audit.data.checks||{},n=axe._audit.data.rules||{},r=axe.utils.findBy(axe._audit.rules,"id",e.id)||{};e.tags=axe.utils.clone(r.tags||[]);var a=xe(t,!0),o=xe(t,!1);e.nodes.forEach(function(e){e.any.forEach(a),e.all.forEach(a),e.none.forEach(o)}),axe.utils.extendMetaData(e,axe.utils.clone(n[e.id]||{}))};var Ee=function(){},Ce=function(){};var Ae,Fe,je=(Ae=/(?=[\-\[\]{}()*+?.\\\^$|,#\s])/g,function(e){return e.replace(Ae,"\\")}),ze=/\\/g;function qe(e){if(e)return e.map(function(e){var t,n,r=e.name.replace(ze,""),a=(e.value||"").replace(ze,"");switch(e.operator){case"^=":n=new RegExp("^"+je(a));break;case"$=":n=new RegExp(je(a)+"$");break;case"~=":n=new RegExp("(^|\\s)"+je(a)+"(\\s|$)");break;case"|=":n=new RegExp("^"+je(a)+"(-|$)");break;case"=":t=function(e){return a===e};break;case"*=":t=function(e){return e&&e.includes(a)};break;case"!=":t=function(e){return a!==e};break;default:t=function(e){return!!e}}return""===a&&/^[*$^]=$/.test(e.operator)&&(t=function(){return!1}),{key:r,value:a,test:t=t||function(e){return e&&n.test(e)}}})}function Ne(e){if(e)return e.map(function(e){return{value:e=e.replace(ze,""),regexp:new RegExp("(^|\\s)"+je(e)+"(\\s|$)")}})}function Te(e){if(e)return e.map(function(e){var t;return"not"===e.name&&(t=(t=e.value).selectors?t.selectors:[t],t=Ee(t)),{name:e.name,expressions:t,value:e.value}})}function Se(e,t,n,r){var a={vNodes:e.slice(),anyLevel:t,thisLevel:n,parentShadowId:r};return a.vNodes.reverse(),a}function Re(e,t){return function(e,t){return 1===e.props.nodeType&&("*"===t.tag||e.props.nodeName===t.tag)}(e,t[0])&&function(t,e){return!e.classes||e.classes.every(function(e){return t.hasClass(e.value)})}(e,t[0])&&function(r,e){return!e.attributes||e.attributes.reduce(function(e,t){var n=r.attr(t.key);return e&&null!==n&&(!t.value||t.test(n))},!0)}(e,t[0])&&function(e,t){return!t.id||e.props.id===t.id}(e,t[0])&&function(n,e){return!(e.pseudos&&!e.pseudos.reduce(function(e,t){if("not"===t.name)return e&&!Ce([n],t.expressions,!1).length;throw new Error("the pseudo selector "+t.name+" has not yet been implemented")},!0))}(e,t[0])}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Oe(t,e){"use strict";var n,r,a=axe._audit&&axe._audit.tagExclude?axe._audit.tagExclude:[];return r=e.hasOwnProperty("include")||e.hasOwnProperty("exclude")?(n=e.include||[],n=Array.isArray(n)?n:[n],r=e.exclude||[],(r=Array.isArray(r)?r:[r]).concat(a.filter(function(e){return-1===n.indexOf(e)}))):(n=Array.isArray(e)?e:[e],a.filter(function(e){return-1===n.indexOf(e)})),!!(n.some(function(e){return-1!==t.tags.indexOf(e)})||0===n.length&&!1!==t.enabled)&&r.every(function(e){return-1===t.tags.indexOf(e)})}function _e(e){"use strict";return e.sort(function(e,t){return axe.utils.contains(e,t)?1:-1})[0]}function Be(t,e){"use strict";var n=e.include&&_e(e.include.filter(function(e){return axe.utils.contains(e,t)})),r=e.exclude&&_e(e.exclude.filter(function(e){return axe.utils.contains(e,t)}));return!!(!r&&n||r&&axe.utils.contains(r,n))}function Le(e,t){"use strict";var n;if(0===e.length)return t;e.length<t.length&&(n=e,e=t,t=n);for(var r=0,a=t.length;r<a;r++)e.includes(t[r])||e.push(t[r]);return e}Ee=function(e){return e.map(function(e){for(var t=[],n=e.rule;n;)t.push({tag:n.tagName?n.tagName.toLowerCase():"*",combinator:n.nestingOperator?n.nestingOperator:" ",id:n.id,attributes:qe(n.attrs),classes:Ne(n.classNames),pseudos:Te(n.pseudos)}),n=n.rule;return t})},Ce=function(e,t,n,r){for(var a=[],o=Se(Array.isArray(e)?e:[e],t,[],e[0].shadowId),i=[];o.vNodes.length;){for(var u=o.vNodes.pop(),s=[],l=[],c=o.anyLevel.slice().concat(o.thisLevel),d=!1,m=0;m<c.length;m++){var p=c[m];if(Re(u,p)&&(!p[0].id||u.shadowId===o.parentShadowId))if(1===p.length)d||r&&!r(u)||(i.push(u),d=!0);else{var f=p.slice(1);if(!1===[" ",">"].includes(f[0].combinator))throw new Error("axe.utils.querySelectorAll does not support the combinator: "+p[1].combinator);">"===f[0].combinator?s.push(f):l.push(f)}!o.anyLevel.includes(p)||p[0].id&&u.shadowId!==o.parentShadowId||l.push(p)}for(u.children&&u.children.length&&n&&(a.push(o),o=Se(u.children,l,s,u.shadowId));!o.vNodes.length&&a.length;)o=a.pop()}return i},axe.utils.querySelectorAll=function(e,t){return axe.utils.querySelectorAllFilter(e,t)},axe.utils.querySelectorAllFilter=function(e,t,n){e=Array.isArray(e)?e:[e];var r=axe.utils.cssParser.parse(t);return r=r.selectors?r.selectors:[r],r=Ee(r),Ce(e,r,!0,n)},function(){"use strict";function m(){}function p(e){if("function"!=typeof e)throw new TypeError("Queue methods require functions as arguments")}axe.utils.queue=function(){function t(e){r=e,setTimeout(function(){null!=r&&axe.log("Uncaught error (of queue)",r)},1)}var r,a=[],o=0,i=0,n=m,u=!1,s=t;function l(t){return function(e){a[t]=e,(i-=1)||n===m||(u=!0,n(a))}}function c(e){return n=m,s(e),a}var d={defer:function(e){if("object"===S(e)&&e.then&&e.catch){var n=e;e=function(e,t){n.then(e).catch(t)}}if(p(e),void 0===r){if(u)throw new Error("Queue already completed");return a.push(e),++i,function(){for(var e=a.length;o<e;o++){var t=a[o];try{t.call(null,l(o),c)}catch(e){c(e)}}}(),d}},then:function(e){if(p(e),n!==m)throw new Error("queue `then` already set");return r||(n=e,i||(u=!0,n(a))),d},catch:function(e){if(p(e),s!==t)throw new Error("queue `catch` already set");return r?(e(r),r=null):s=e,d},abort:c};return d}}(),function(e){"use strict";var s={},i={},a=Object.freeze(["EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function l(){var e="axeAPI",t="";return void 0!==axe&&axe._audit&&axe._audit.application&&(e=axe._audit.application),void 0!==axe&&(t=axe.version),e+"."+t}function u(e,t,n,r,a,o){var i;n instanceof Error&&(i={name:n.name,message:n.message,stack:n.stack},n=void 0);var u={uuid:r,topic:t,message:n,error:i,_respondable:!0,_source:l(),_keepalive:a};"function"==typeof o&&(s[r]=o),e.postMessage(JSON.stringify(u),"*")}function t(e,t,n,r,a){u(e,t,n,Fe.v1(),r,a)}function c(r,a,o){return function(e,t,n){u(r,a,e,o,t,n)}}function o(e){var t;if("string"==typeof e){try{t=JSON.parse(e)}catch(e){}if(function(e){if("object"!==S(e)||"string"!=typeof e.uuid||!0!==e._respondable)return!1;var t=l();return e._source===t||"axeAPI.x.y.z"===e._source||"axeAPI.x.y.z"===t}(t))return"object"===S(t.error)?t.error=function(e){var t=e.message||"Unknown error occurred",n=a.includes(e.name)?e.name:"Error",r=window[n]||Error;return e.stack&&(t+="\n"+e.stack.replace(e.message,"")),new r(t)}(t.error):t.error=void 0,t}}t.subscribe=function(e,t){i[e]=t},t.isInFrame=function(e){return!!(e=e||window).frameElement},"function"==typeof window.addEventListener&&window.addEventListener("message",function(t){var n=o(t.data);if(n){var r=n.uuid,e=n._keepalive,a=s[r];if(a)a(n.error||n.message,e,c(t.source,n.topic,r)),e||delete s[r];if(!n.error)try{!function(e,t,n){var r=t.topic,a=i[r];if(a){var o=c(e,null,t.uuid);a(t.message,n,o)}}(t.source,n,e)}catch(e){u(t.source,n.topic,e,r,!1)}}},!1),e.respondable=t}(utils),axe.utils.ruleShouldRun=function(e,t,n){"use strict";var r=n.runOnly||{},a=(n.rules||{})[e.id];return!(e.pageLevel&&!t.page)&&("rule"===r.type?-1!==r.values.indexOf(e.id):a&&"boolean"==typeof a.enabled?a.enabled:"tag"===r.type&&r.values?Oe(e,r.values):Oe(e,[]))},axe.utils.getScrollState=function(e){var t=0<arguments.length&&void 0!==e?e:window,n=t.document.documentElement;return[void 0!==t.pageXOffset?{elm:t,top:t.pageYOffset,left:t.pageXOffset}:{elm:n,top:n.scrollTop,left:n.scrollLeft}].concat(function r(e){return Array.from(e.children).reduce(function(e,t){var n=axe.utils.getScroll(t);return n&&e.push(n),e.concat(r(t))},[])}(document.body))},axe.utils.setScrollState=function(e){e.forEach(function(e){return function(e,t,n){if(e===window)return e.scroll(n,t);e.scrollTop=t,e.scrollLeft=n}(e.elm,e.top,e.left)})},axe.utils.select=function(e,t){"use strict";var n,r=[];if(axe._selectCache)for(var a=0,o=axe._selectCache.length;a<o;a++){var i=axe._selectCache[a];if(i.selector===e)return i.result}for(var u,s=(u=t,function(e){return Be(e,u)}),l=function(e){return e.reduce(function(e,t){return e.length&&axe.utils.contains(e[e.length-1],t)||e.push(t),e},[])}(t.include),c=0;c<l.length;c++)n=l[c],r=Le(r,axe.utils.querySelectorAllFilter(n,e,s));return axe._selectCache&&axe._selectCache.push({selector:e,result:r}),r},axe.utils.toArray=function(e){"use strict";return Array.prototype.slice.call(e)},axe.utils.uniqueArray=function(e,t){return e.concat(t).filter(function(e,t,n){return n.indexOf(e)===t})},axe.utils.tokenList=function(e){"use strict";return e.trim().replace(/\s{2,}/g," ").split(" ")},function(e){var i,t=e.crypto||e.msCrypto;if(!i&&t&&t.getRandomValues){var n=new Uint8Array(16);i=function(){return t.getRandomValues(n),n}}if(!i){var r=new Array(16);i=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),r[t]=e>>>((3&t)<<3)&255;return r}}for(var u="function"==typeof e.Buffer?e.Buffer:Array,a=[],o={},s=0;s<256;s++)a[s]=(s+256).toString(16).substr(1),o[a[s]]=s;function p(e,t){var n=t||0,r=a;return r[e[n++]]+r[e[n++]]+r[e[n++]]+r[e[n++]]+"-"+r[e[n++]]+r[e[n++]]+"-"+r[e[n++]]+r[e[n++]]+"-"+r[e[n++]]+r[e[n++]]+"-"+r[e[n++]]+r[e[n++]]+r[e[n++]]+r[e[n++]]+r[e[n++]]+r[e[n++]]}var l=i(),f=[1|l[0],l[1],l[2],l[3],l[4],l[5]],h=16383&(l[6]<<8|l[7]),b=0,g=0;function c(e,t,n){var r=t&&n||0;"string"==typeof e&&(t="binary"==e?new u(16):null,e=null);var a=(e=e||{}).random||(e.rng||i)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t)for(var o=0;o<16;o++)t[r+o]=a[o];return t||p(a)}(Fe=c).v1=function(e,t,n){var r=t&&n||0,a=t||[],o=null!=(e=e||{}).clockseq?e.clockseq:h,i=null!=e.msecs?e.msecs:(new Date).getTime(),u=null!=e.nsecs?e.nsecs:g+1,s=i-b+(u-g)/1e4;if(s<0&&null==e.clockseq&&(o=o+1&16383),(s<0||b<i)&&null==e.nsecs&&(u=0),1e4<=u)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");b=i,h=o;var l=(1e4*(268435455&(i+=122192928e5))+(g=u))%4294967296;a[r++]=l>>>24&255,a[r++]=l>>>16&255,a[r++]=l>>>8&255,a[r++]=255&l;var c=i/4294967296*1e4&268435455;a[r++]=c>>>8&255,a[r++]=255&c,a[r++]=c>>>24&15|16,a[r++]=c>>>16&255,a[r++]=o>>>8|128,a[r++]=255&o;for(var d=e.node||f,m=0;m<6;m++)a[r+m]=d[m];return t||p(a)},Fe.v4=c,Fe.parse=function(e,t,n){var r=t&&n||0,a=0;for(t=t||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,function(e){a<16&&(t[r+a++]=o[e])});a<16;)t[r+a++]=0;return t},Fe.unparse=p,Fe.BufferClass=u}(window),axe.utils.validInputTypes=function(){"use strict";return["hidden","text","search","tel","url","email","password","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]};var Ie=["aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","id","ie","ig","ii","ik","in","io","is","it","iu","iw","ja","ji","jv","jw","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mo","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","sh","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","aaa","aab","aac","aad","aae","aaf","aag","aah","aai","aak","aal","aam","aan","aao","aap","aaq","aas","aat","aau","aav","aaw","aax","aaz","aba","abb","abc","abd","abe","abf","abg","abh","abi","abj","abl","abm","abn","abo","abp","abq","abr","abs","abt","abu","abv","abw","abx","aby","abz","aca","acb","acd","ace","acf","ach","aci","ack","acl","acm","acn","acp","acq","acr","acs","act","acu","acv","acw","acx","acy","acz","ada","adb","add","ade","adf","adg","adh","adi","adj","adl","adn","ado","adp","adq","adr","ads","adt","adu","adw","adx","ady","adz","aea","aeb","aec","aed","aee","aek","ael","aem","aen","aeq","aer","aes","aeu","aew","aey","aez","afa","afb","afd","afe","afg","afh","afi","afk","afn","afo","afp","afs","aft","afu","afz","aga","agb","agc","agd","age","agf","agg","agh","agi","agj","agk","agl","agm","agn","ago","agp","agq","agr","ags","agt","agu","agv","agw","agx","agy","agz","aha","ahb","ahg","ahh","ahi","ahk","ahl","ahm","ahn","aho","ahp","ahr","ahs","aht","aia","aib","aic","aid","aie","aif","aig","aih","aii","aij","aik","ail","aim","ain","aio","aip","aiq","air","ais","ait","aiw","aix","aiy","aja","ajg","aji","ajn","ajp","ajt","aju","ajw","ajz","akb","akc","akd","ake","akf","akg","akh","aki","akj","akk","akl","akm","ako","akp","akq","akr","aks","akt","aku","akv","akw","akx","aky","akz","ala","alc","ald","ale","alf","alg","alh","ali","alj","alk","all","alm","aln","alo","alp","alq","alr","als","alt","alu","alv","alw","alx","aly","alz","ama","amb","amc","ame","amf","amg","ami","amj","amk","aml","amm","amn","amo","amp","amq","amr","ams","amt","amu","amv","amw","amx","amy","amz","ana","anb","anc","and","ane","anf","ang","anh","ani","anj","ank","anl","anm","ann","ano","anp","anq","anr","ans","ant","anu","anv","anw","anx","any","anz","aoa","aob","aoc","aod","aoe","aof","aog","aoh","aoi","aoj","aok","aol","aom","aon","aor","aos","aot","aou","aox","aoz","apa","apb","apc","apd","ape","apf","apg","aph","api","apj","apk","apl","apm","apn","apo","app","apq","apr","aps","apt","apu","apv","apw","apx","apy","apz","aqa","aqc","aqd","aqg","aql","aqm","aqn","aqp","aqr","aqt","aqz","arb","arc","ard","are","arh","ari","arj","ark","arl","arn","aro","arp","arq","arr","ars","art","aru","arv","arw","arx","ary","arz","asa","asb","asc","asd","ase","asf","asg","ash","asi","asj","ask","asl","asn","aso","asp","asq","asr","ass","ast","asu","asv","asw","asx","asy","asz","ata","atb","atc","atd","ate","atg","ath","ati","atj","atk","atl","atm","atn","ato","atp","atq","atr","ats","att","atu","atv","atw","atx","aty","atz","aua","aub","auc","aud","aue","auf","aug","auh","aui","auj","auk","aul","aum","aun","auo","aup","auq","aur","aus","aut","auu","auw","aux","auy","auz","avb","avd","avi","avk","avl","avm","avn","avo","avs","avt","avu","avv","awa","awb","awc","awd","awe","awg","awh","awi","awk","awm","awn","awo","awr","aws","awt","awu","awv","aww","awx","awy","axb","axe","axg","axk","axl","axm","axx","aya","ayb","ayc","ayd","aye","ayg","ayh","ayi","ayk","ayl","ayn","ayo","ayp","ayq","ayr","ays","ayt","ayu","ayx","ayy","ayz","aza","azb","azc","azd","azg","azj","azm","azn","azo","azt","azz","baa","bab","bac","bad","bae","baf","bag","bah","bai","baj","bal","ban","bao","bap","bar","bas","bat","bau","bav","baw","bax","bay","baz","bba","bbb","bbc","bbd","bbe","bbf","bbg","bbh","bbi","bbj","bbk","bbl","bbm","bbn","bbo","bbp","bbq","bbr","bbs","bbt","bbu","bbv","bbw","bbx","bby","bbz","bca","bcb","bcc","bcd","bce","bcf","bcg","bch","bci","bcj","bck","bcl","bcm","bcn","bco","bcp","bcq","bcr","bcs","bct","bcu","bcv","bcw","bcy","bcz","bda","bdb","bdc","bdd","bde","bdf","bdg","bdh","bdi","bdj","bdk","bdl","bdm","bdn","bdo","bdp","bdq","bdr","bds","bdt","bdu","bdv","bdw","bdx","bdy","bdz","bea","beb","bec","bed","bee","bef","beg","beh","bei","bej","bek","bem","beo","bep","beq","ber","bes","bet","beu","bev","bew","bex","bey","bez","bfa","bfb","bfc","bfd","bfe","bff","bfg","bfh","bfi","bfj","bfk","bfl","bfm","bfn","bfo","bfp","bfq","bfr","bfs","bft","bfu","bfw","bfx","bfy","bfz","bga","bgb","bgc","bgd","bge","bgf","bgg","bgi","bgj","bgk","bgl","bgm","bgn","bgo","bgp","bgq","bgr","bgs","bgt","bgu","bgv","bgw","bgx","bgy","bgz","bha","bhb","bhc","bhd","bhe","bhf","bhg","bhh","bhi","bhj","bhk","bhl","bhm","bhn","bho","bhp","bhq","bhr","bhs","bht","bhu","bhv","bhw","bhx","bhy","bhz","bia","bib","bic","bid","bie","bif","big","bij","bik","bil","bim","bin","bio","bip","biq","bir","bit","biu","biv","biw","bix","biy","biz","bja","bjb","bjc","bjd","bje","bjf","bjg","bjh","bji","bjj","bjk","bjl","bjm","bjn","bjo","bjp","bjq","bjr","bjs","bjt","bju","bjv","bjw","bjx","bjy","bjz","bka","bkb","bkc","bkd","bkf","bkg","bkh","bki","bkj","bkk","bkl","bkm","bkn","bko","bkp","bkq","bkr","bks","bkt","bku","bkv","bkw","bkx","bky","bkz","bla","blb","blc","bld","ble","blf","blg","blh","bli","blj","blk","bll","blm","bln","blo","blp","blq","blr","bls","blt","blv","blw","blx","bly","blz","bma","bmb","bmc","bmd","bme","bmf","bmg","bmh","bmi","bmj","bmk","bml","bmm","bmn","bmo","bmp","bmq","bmr","bms","bmt","bmu","bmv","bmw","bmx","bmy","bmz","bna","bnb","bnc","bnd","bne","bnf","bng","bni","bnj","bnk","bnl","bnm","bnn","bno","bnp","bnq","bnr","bns","bnt","bnu","bnv","bnw","bnx","bny","bnz","boa","bob","boe","bof","bog","boh","boi","boj","bok","bol","bom","bon","boo","bop","boq","bor","bot","bou","bov","bow","box","boy","boz","bpa","bpb","bpd","bpg","bph","bpi","bpj","bpk","bpl","bpm","bpn","bpo","bpp","bpq","bpr","bps","bpt","bpu","bpv","bpw","bpx","bpy","bpz","bqa","bqb","bqc","bqd","bqf","bqg","bqh","bqi","bqj","bqk","bql","bqm","bqn","bqo","bqp","bqq","bqr","bqs","bqt","bqu","bqv","bqw","bqx","bqy","bqz","bra","brb","brc","brd","brf","brg","brh","bri","brj","brk","brl","brm","brn","bro","brp","brq","brr","brs","brt","bru","brv","brw","brx","bry","brz","bsa","bsb","bsc","bse","bsf","bsg","bsh","bsi","bsj","bsk","bsl","bsm","bsn","bso","bsp","bsq","bsr","bss","bst","bsu","bsv","bsw","bsx","bsy","bta","btb","btc","btd","bte","btf","btg","bth","bti","btj","btk","btl","btm","btn","bto","btp","btq","btr","bts","btt","btu","btv","btw","btx","bty","btz","bua","bub","buc","bud","bue","buf","bug","buh","bui","buj","buk","bum","bun","buo","bup","buq","bus","but","buu","buv","buw","bux","buy","buz","bva","bvb","bvc","bvd","bve","bvf","bvg","bvh","bvi","bvj","bvk","bvl","bvm","bvn","bvo","bvp","bvq","bvr","bvt","bvu","bvv","bvw","bvx","bvy","bvz","bwa","bwb","bwc","bwd","bwe","bwf","bwg","bwh","bwi","bwj","bwk","bwl","bwm","bwn","bwo","bwp","bwq","bwr","bws","bwt","bwu","bww","bwx","bwy","bwz","bxa","bxb","bxc","bxd","bxe","bxf","bxg","bxh","bxi","bxj","bxk","bxl","bxm","bxn","bxo","bxp","bxq","bxr","bxs","bxu","bxv","bxw","bxx","bxz","bya","byb","byc","byd","bye","byf","byg","byh","byi","byj","byk","byl","bym","byn","byo","byp","byq","byr","bys","byt","byv","byw","byx","byy","byz","bza","bzb","bzc","bzd","bze","bzf","bzg","bzh","bzi","bzj","bzk","bzl","bzm","bzn","bzo","bzp","bzq","bzr","bzs","bzt","bzu","bzv","bzw","bzx","bzy","bzz","caa","cab","cac","cad","cae","caf","cag","cah","cai","caj","cak","cal","cam","can","cao","cap","caq","car","cas","cau","cav","caw","cax","cay","caz","cba","cbb","cbc","cbd","cbe","cbg","cbh","cbi","cbj","cbk","cbl","cbn","cbo","cbq","cbr","cbs","cbt","cbu","cbv","cbw","cby","cca","ccc","ccd","cce","ccg","cch","ccj","ccl","ccm","ccn","cco","ccp","ccq","ccr","ccs","cda","cdc","cdd","cde","cdf","cdg","cdh","cdi","cdj","cdm","cdn","cdo","cdr","cds","cdy","cdz","cea","ceb","ceg","cek","cel","cen","cet","cfa","cfd","cfg","cfm","cga","cgc","cgg","cgk","chb","chc","chd","chf","chg","chh","chj","chk","chl","chm","chn","cho","chp","chq","chr","cht","chw","chx","chy","chz","cia","cib","cic","cid","cie","cih","cik","cim","cin","cip","cir","ciw","ciy","cja","cje","cjh","cji","cjk","cjm","cjn","cjo","cjp","cjr","cjs","cjv","cjy","cka","ckb","ckh","ckl","ckn","cko","ckq","ckr","cks","ckt","cku","ckv","ckx","cky","ckz","cla","clc","cld","cle","clh","cli","clj","clk","cll","clm","clo","clt","clu","clw","cly","cma","cmc","cme","cmg","cmi","cmk","cml","cmm","cmn","cmo","cmr","cms","cmt","cna","cnb","cnc","cng","cnh","cni","cnk","cnl","cno","cnr","cns","cnt","cnu","cnw","cnx","coa","cob","coc","cod","coe","cof","cog","coh","coj","cok","col","com","con","coo","cop","coq","cot","cou","cov","cow","cox","coy","coz","cpa","cpb","cpc","cpe","cpf","cpg","cpi","cpn","cpo","cpp","cps","cpu","cpx","cpy","cqd","cqu","cra","crb","crc","crd","crf","crg","crh","cri","crj","crk","crl","crm","crn","cro","crp","crq","crr","crs","crt","crv","crw","crx","cry","crz","csa","csb","csc","csd","cse","csf","csg","csh","csi","csj","csk","csl","csm","csn","cso","csq","csr","css","cst","csu","csv","csw","csy","csz","cta","ctc","ctd","cte","ctg","cth","ctl","ctm","ctn","cto","ctp","cts","ctt","ctu","ctz","cua","cub","cuc","cug","cuh","cui","cuj","cuk","cul","cum","cuo","cup","cuq","cur","cus","cut","cuu","cuv","cuw","cux","cuy","cvg","cvn","cwa","cwb","cwd","cwe","cwg","cwt","cya","cyb","cyo","czh","czk","czn","czo","czt","daa","dac","dad","dae","daf","dag","dah","dai","daj","dak","dal","dam","dao","dap","daq","dar","das","dau","dav","daw","dax","day","daz","dba","dbb","dbd","dbe","dbf","dbg","dbi","dbj","dbl","dbm","dbn","dbo","dbp","dbq","dbr","dbt","dbu","dbv","dbw","dby","dcc","dcr","dda","ddd","dde","ddg","ddi","ddj","ddn","ddo","ddr","dds","ddw","dec","ded","dee","def","deg","deh","dei","dek","del","dem","den","dep","deq","der","des","dev","dez","dga","dgb","dgc","dgd","dge","dgg","dgh","dgi","dgk","dgl","dgn","dgo","dgr","dgs","dgt","dgu","dgw","dgx","dgz","dha","dhd","dhg","dhi","dhl","dhm","dhn","dho","dhr","dhs","dhu","dhv","dhw","dhx","dia","dib","dic","did","dif","dig","dih","dii","dij","dik","dil","dim","din","dio","dip","diq","dir","dis","dit","diu","diw","dix","diy","diz","dja","djb","djc","djd","dje","djf","dji","djj","djk","djl","djm","djn","djo","djr","dju","djw","dka","dkk","dkl","dkr","dks","dkx","dlg","dlk","dlm","dln","dma","dmb","dmc","dmd","dme","dmg","dmk","dml","dmm","dmn","dmo","dmr","dms","dmu","dmv","dmw","dmx","dmy","dna","dnd","dne","dng","dni","dnj","dnk","dnn","dnr","dnt","dnu","dnv","dnw","dny","doa","dob","doc","doe","dof","doh","doi","dok","dol","don","doo","dop","doq","dor","dos","dot","dov","dow","dox","doy","doz","dpp","dra","drb","drc","drd","dre","drg","drh","dri","drl","drn","dro","drq","drr","drs","drt","dru","drw","dry","dsb","dse","dsh","dsi","dsl","dsn","dso","dsq","dta","dtb","dtd","dth","dti","dtk","dtm","dtn","dto","dtp","dtr","dts","dtt","dtu","dty","dua","dub","duc","dud","due","duf","dug","duh","dui","duj","duk","dul","dum","dun","duo","dup","duq","dur","dus","duu","duv","duw","dux","duy","duz","dva","dwa","dwl","dwr","dws","dwu","dww","dwy","dya","dyb","dyd","dyg","dyi","dym","dyn","dyo","dyu","dyy","dza","dzd","dze","dzg","dzl","dzn","eaa","ebg","ebk","ebo","ebr","ebu","ecr","ecs","ecy","eee","efa","efe","efi","ega","egl","ego","egx","egy","ehu","eip","eit","eiv","eja","eka","ekc","eke","ekg","eki","ekk","ekl","ekm","eko","ekp","ekr","eky","ele","elh","eli","elk","elm","elo","elp","elu","elx","ema","emb","eme","emg","emi","emk","emm","emn","emo","emp","ems","emu","emw","emx","emy","ena","enb","enc","end","enf","enh","enl","enm","enn","eno","enq","enr","enu","env","enw","enx","eot","epi","era","erg","erh","eri","erk","ero","err","ers","ert","erw","ese","esg","esh","esi","esk","esl","esm","esn","eso","esq","ess","esu","esx","esy","etb","etc","eth","etn","eto","etr","ets","ett","etu","etx","etz","euq","eve","evh","evn","ewo","ext","eya","eyo","eza","eze","faa","fab","fad","faf","fag","fah","fai","faj","fak","fal","fam","fan","fap","far","fat","fau","fax","fay","faz","fbl","fcs","fer","ffi","ffm","fgr","fia","fie","fil","fip","fir","fit","fiu","fiw","fkk","fkv","fla","flh","fli","fll","fln","flr","fly","fmp","fmu","fnb","fng","fni","fod","foi","fom","fon","for","fos","fox","fpe","fqs","frc","frd","frk","frm","fro","frp","frq","frr","frs","frt","fse","fsl","fss","fub","fuc","fud","fue","fuf","fuh","fui","fuj","fum","fun","fuq","fur","fut","fuu","fuv","fuy","fvr","fwa","fwe","gaa","gab","gac","gad","gae","gaf","gag","gah","gai","gaj","gak","gal","gam","gan","gao","gap","gaq","gar","gas","gat","gau","gav","gaw","gax","gay","gaz","gba","gbb","gbc","gbd","gbe","gbf","gbg","gbh","gbi","gbj","gbk","gbl","gbm","gbn","gbo","gbp","gbq","gbr","gbs","gbu","gbv","gbw","gbx","gby","gbz","gcc","gcd","gce","gcf","gcl","gcn","gcr","gct","gda","gdb","gdc","gdd","gde","gdf","gdg","gdh","gdi","gdj","gdk","gdl","gdm","gdn","gdo","gdq","gdr","gds","gdt","gdu","gdx","gea","geb","gec","ged","geg","geh","gei","gej","gek","gel","gem","geq","ges","gev","gew","gex","gey","gez","gfk","gft","gfx","gga","ggb","ggd","gge","ggg","ggk","ggl","ggn","ggo","ggr","ggt","ggu","ggw","gha","ghc","ghe","ghh","ghk","ghl","ghn","gho","ghr","ghs","ght","gia","gib","gic","gid","gie","gig","gih","gil","gim","gin","gio","gip","giq","gir","gis","git","giu","giw","gix","giy","giz","gji","gjk","gjm","gjn","gjr","gju","gka","gkd","gke","gkn","gko","gkp","gku","glc","gld","glh","gli","glj","glk","gll","glo","glr","glu","glw","gly","gma","gmb","gmd","gme","gmg","gmh","gml","gmm","gmn","gmq","gmu","gmv","gmw","gmx","gmy","gmz","gna","gnb","gnc","gnd","gne","gng","gnh","gni","gnj","gnk","gnl","gnm","gnn","gno","gnq","gnr","gnt","gnu","gnw","gnz","goa","gob","goc","god","goe","gof","gog","goh","goi","goj","gok","gol","gom","gon","goo","gop","goq","gor","gos","got","gou","gow","gox","goy","goz","gpa","gpe","gpn","gqa","gqi","gqn","gqr","gqu","gra","grb","grc","grd","grg","grh","gri","grj","grk","grm","gro","grq","grr","grs","grt","gru","grv","grw","grx","gry","grz","gse","gsg","gsl","gsm","gsn","gso","gsp","gss","gsw","gta","gti","gtu","gua","gub","guc","gud","gue","guf","gug","guh","gui","guk","gul","gum","gun","guo","gup","guq","gur","gus","gut","guu","guv","guw","gux","guz","gva","gvc","gve","gvf","gvj","gvl","gvm","gvn","gvo","gvp","gvr","gvs","gvy","gwa","gwb","gwc","gwd","gwe","gwf","gwg","gwi","gwj","gwm","gwn","gwr","gwt","gwu","gww","gwx","gxx","gya","gyb","gyd","gye","gyf","gyg","gyi","gyl","gym","gyn","gyo","gyr","gyy","gza","gzi","gzn","haa","hab","hac","had","hae","haf","hag","hah","hai","haj","hak","hal","ham","han","hao","hap","haq","har","has","hav","haw","hax","hay","haz","hba","hbb","hbn","hbo","hbu","hca","hch","hdn","hds","hdy","hea","hed","heg","heh","hei","hem","hgm","hgw","hhi","hhr","hhy","hia","hib","hid","hif","hig","hih","hii","hij","hik","hil","him","hio","hir","hit","hiw","hix","hji","hka","hke","hkk","hkn","hks","hla","hlb","hld","hle","hlt","hlu","hma","hmb","hmc","hmd","hme","hmf","hmg","hmh","hmi","hmj","hmk","hml","hmm","hmn","hmp","hmq","hmr","hms","hmt","hmu","hmv","hmw","hmx","hmy","hmz","hna","hnd","hne","hnh","hni","hnj","hnn","hno","hns","hnu","hoa","hob","hoc","hod","hoe","hoh","hoi","hoj","hok","hol","hom","hoo","hop","hor","hos","hot","hov","how","hoy","hoz","hpo","hps","hra","hrc","hre","hrk","hrm","hro","hrp","hrr","hrt","hru","hrw","hrx","hrz","hsb","hsh","hsl","hsn","hss","hti","hto","hts","htu","htx","hub","huc","hud","hue","huf","hug","huh","hui","huj","huk","hul","hum","huo","hup","huq","hur","hus","hut","huu","huv","huw","hux","huy","huz","hvc","hve","hvk","hvn","hvv","hwa","hwc","hwo","hya","hyw","hyx","iai","ian","iap","iar","iba","ibb","ibd","ibe","ibg","ibh","ibi","ibl","ibm","ibn","ibr","ibu","iby","ica","ich","icl","icr","ida","idb","idc","idd","ide","idi","idr","ids","idt","idu","ifa","ifb","ife","iff","ifk","ifm","ifu","ify","igb","ige","igg","igl","igm","ign","igo","igs","igw","ihb","ihi","ihp","ihw","iin","iir","ijc","ije","ijj","ijn","ijo","ijs","ike","iki","ikk","ikl","iko","ikp","ikr","iks","ikt","ikv","ikw","ikx","ikz","ila","ilb","ilg","ili","ilk","ill","ilm","ilo","ilp","ils","ilu","ilv","ilw","ima","ime","imi","iml","imn","imo","imr","ims","imy","inb","inc","ine","ing","inh","inj","inl","inm","inn","ino","inp","ins","int","inz","ior","iou","iow","ipi","ipo","iqu","iqw","ira","ire","irh","iri","irk","irn","iro","irr","iru","irx","iry","isa","isc","isd","ise","isg","ish","isi","isk","ism","isn","iso","isr","ist","isu","itb","itc","itd","ite","iti","itk","itl","itm","ito","itr","its","itt","itv","itw","itx","ity","itz","ium","ivb","ivv","iwk","iwm","iwo","iws","ixc","ixl","iya","iyo","iyx","izh","izi","izr","izz","jaa","jab","jac","jad","jae","jaf","jah","jaj","jak","jal","jam","jan","jao","jaq","jar","jas","jat","jau","jax","jay","jaz","jbe","jbi","jbj","jbk","jbn","jbo","jbr","jbt","jbu","jbw","jcs","jct","jda","jdg","jdt","jeb","jee","jeg","jeh","jei","jek","jel","jen","jer","jet","jeu","jgb","jge","jgk","jgo","jhi","jhs","jia","jib","jic","jid","jie","jig","jih","jii","jil","jim","jio","jiq","jit","jiu","jiv","jiy","jje","jjr","jka","jkm","jko","jkp","jkr","jku","jle","jls","jma","jmb","jmc","jmd","jmi","jml","jmn","jmr","jms","jmw","jmx","jna","jnd","jng","jni","jnj","jnl","jns","job","jod","jog","jor","jos","jow","jpa","jpr","jpx","jqr","jra","jrb","jrr","jrt","jru","jsl","jua","jub","juc","jud","juh","jui","juk","jul","jum","jun","juo","jup","jur","jus","jut","juu","juw","juy","jvd","jvn","jwi","jya","jye","jyy","kaa","kab","kac","kad","kae","kaf","kag","kah","kai","kaj","kak","kam","kao","kap","kaq","kar","kav","kaw","kax","kay","kba","kbb","kbc","kbd","kbe","kbf","kbg","kbh","kbi","kbj","kbk","kbl","kbm","kbn","kbo","kbp","kbq","kbr","kbs","kbt","kbu","kbv","kbw","kbx","kby","kbz","kca","kcb","kcc","kcd","kce","kcf","kcg","kch","kci","kcj","kck","kcl","kcm","kcn","kco","kcp","kcq","kcr","kcs","kct","kcu","kcv","kcw","kcx","kcy","kcz","kda","kdc","kdd","kde","kdf","kdg","kdh","kdi","kdj","kdk","kdl","kdm","kdn","kdo","kdp","kdq","kdr","kdt","kdu","kdv","kdw","kdx","kdy","kdz","kea","keb","kec","ked","kee","kef","keg","keh","kei","kej","kek","kel","kem","ken","keo","kep","keq","ker","kes","ket","keu","kev","kew","kex","key","kez","kfa","kfb","kfc","kfd","kfe","kff","kfg","kfh","kfi","kfj","kfk","kfl","kfm","kfn","kfo","kfp","kfq","kfr","kfs","kft","kfu","kfv","kfw","kfx","kfy","kfz","kga","kgb","kgc","kgd","kge","kgf","kgg","kgh","kgi","kgj","kgk","kgl","kgm","kgn","kgo","kgp","kgq","kgr","kgs","kgt","kgu","kgv","kgw","kgx","kgy","kha","khb","khc","khd","khe","khf","khg","khh","khi","khj","khk","khl","khn","kho","khp","khq","khr","khs","kht","khu","khv","khw","khx","khy","khz","kia","kib","kic","kid","kie","kif","kig","kih","kii","kij","kil","kim","kio","kip","kiq","kis","kit","kiu","kiv","kiw","kix","kiy","kiz","kja","kjb","kjc","kjd","kje","kjf","kjg","kjh","kji","kjj","kjk","kjl","kjm","kjn","kjo","kjp","kjq","kjr","kjs","kjt","kju","kjv","kjx","kjy","kjz","kka","kkb","kkc","kkd","kke","kkf","kkg","kkh","kki","kkj","kkk","kkl","kkm","kkn","kko","kkp","kkq","kkr","kks","kkt","kku","kkv","kkw","kkx","kky","kkz","kla","klb","klc","kld","kle","klf","klg","klh","kli","klj","klk","kll","klm","kln","klo","klp","klq","klr","kls","klt","klu","klv","klw","klx","kly","klz","kma","kmb","kmc","kmd","kme","kmf","kmg","kmh","kmi","kmj","kmk","kml","kmm","kmn","kmo","kmp","kmq","kmr","kms","kmt","kmu","kmv","kmw","kmx","kmy","kmz","kna","knb","knc","knd","kne","knf","kng","kni","knj","knk","knl","knm","knn","kno","knp","knq","knr","kns","knt","knu","knv","knw","knx","kny","knz","koa","koc","kod","koe","kof","kog","koh","koi","koj","kok","kol","koo","kop","koq","kos","kot","kou","kov","kow","kox","koy","koz","kpa","kpb","kpc","kpd","kpe","kpf","kpg","kph","kpi","kpj","kpk","kpl","kpm","kpn","kpo","kpp","kpq","kpr","kps","kpt","kpu","kpv","kpw","kpx","kpy","kpz","kqa","kqb","kqc","kqd","kqe","kqf","kqg","kqh","kqi","kqj","kqk","kql","kqm","kqn","kqo","kqp","kqq","kqr","kqs","kqt","kqu","kqv","kqw","kqx","kqy","kqz","kra","krb","krc","krd","kre","krf","krh","kri","krj","krk","krl","krm","krn","kro","krp","krr","krs","krt","kru","krv","krw","krx","kry","krz","ksa","ksb","ksc","ksd","kse","ksf","ksg","ksh","ksi","ksj","ksk","ksl","ksm","ksn","kso","ksp","ksq","ksr","kss","kst","ksu","ksv","ksw","ksx","ksy","ksz","kta","ktb","ktc","ktd","kte","ktf","ktg","kth","kti","ktj","ktk","ktl","ktm","ktn","kto","ktp","ktq","ktr","kts","ktt","ktu","ktv","ktw","ktx","kty","ktz","kub","kuc","kud","kue","kuf","kug","kuh","kui","kuj","kuk","kul","kum","kun","kuo","kup","kuq","kus","kut","kuu","kuv","kuw","kux","kuy","kuz","kva","kvb","kvc","kvd","kve","kvf","kvg","kvh","kvi","kvj","kvk","kvl","kvm","kvn","kvo","kvp","kvq","kvr","kvs","kvt","kvu","kvv","kvw","kvx","kvy","kvz","kwa","kwb","kwc","kwd","kwe","kwf","kwg","kwh","kwi","kwj","kwk","kwl","kwm","kwn","kwo","kwp","kwq","kwr","kws","kwt","kwu","kwv","kww","kwx","kwy","kwz","kxa","kxb","kxc","kxd","kxe","kxf","kxh","kxi","kxj","kxk","kxl","kxm","kxn","kxo","kxp","kxq","kxr","kxs","kxt","kxu","kxv","kxw","kxx","kxy","kxz","kya","kyb","kyc","kyd","kye","kyf","kyg","kyh","kyi","kyj","kyk","kyl","kym","kyn","kyo","kyp","kyq","kyr","kys","kyt","kyu","kyv","kyw","kyx","kyy","kyz","kza","kzb","kzc","kzd","kze","kzf","kzg","kzh","kzi","kzj","kzk","kzl","kzm","kzn","kzo","kzp","kzq","kzr","kzs","kzt","kzu","kzv","kzw","kzx","kzy","kzz","laa","lab","lac","lad","lae","laf","lag","lah","lai","laj","lak","lal","lam","lan","lap","laq","lar","las","lau","law","lax","lay","laz","lba","lbb","lbc","lbe","lbf","lbg","lbi","lbj","lbk","lbl","lbm","lbn","lbo","lbq","lbr","lbs","lbt","lbu","lbv","lbw","lbx","lby","lbz","lcc","lcd","lce","lcf","lch","lcl","lcm","lcp","lcq","lcs","lda","ldb","ldd","ldg","ldh","ldi","ldj","ldk","ldl","ldm","ldn","ldo","ldp","ldq","lea","leb","lec","led","lee","lef","leg","leh","lei","lej","lek","lel","lem","len","leo","lep","leq","ler","les","let","leu","lev","lew","lex","ley","lez","lfa","lfn","lga","lgb","lgg","lgh","lgi","lgk","lgl","lgm","lgn","lgq","lgr","lgt","lgu","lgz","lha","lhh","lhi","lhl","lhm","lhn","lhp","lhs","lht","lhu","lia","lib","lic","lid","lie","lif","lig","lih","lii","lij","lik","lil","lio","lip","liq","lir","lis","liu","liv","liw","lix","liy","liz","lja","lje","lji","ljl","ljp","ljw","ljx","lka","lkb","lkc","lkd","lke","lkh","lki","lkj","lkl","lkm","lkn","lko","lkr","lks","lkt","lku","lky","lla","llb","llc","lld","lle","llf","llg","llh","lli","llj","llk","lll","llm","lln","llo","llp","llq","lls","llu","llx","lma","lmb","lmc","lmd","lme","lmf","lmg","lmh","lmi","lmj","lmk","lml","lmm","lmn","lmo","lmp","lmq","lmr","lmu","lmv","lmw","lmx","lmy","lmz","lna","lnb","lnd","lng","lnh","lni","lnj","lnl","lnm","lnn","lno","lns","lnu","lnw","lnz","loa","lob","loc","loe","lof","log","loh","loi","loj","lok","lol","lom","lon","loo","lop","loq","lor","los","lot","lou","lov","low","lox","loy","loz","lpa","lpe","lpn","lpo","lpx","lra","lrc","lre","lrg","lri","lrk","lrl","lrm","lrn","lro","lrr","lrt","lrv","lrz","lsa","lsd","lse","lsg","lsh","lsi","lsl","lsm","lso","lsp","lsr","lss","lst","lsy","ltc","ltg","lth","lti","ltn","lto","lts","ltu","lua","luc","lud","lue","luf","lui","luj","luk","lul","lum","lun","luo","lup","luq","lur","lus","lut","luu","luv","luw","luy","luz","lva","lvk","lvs","lvu","lwa","lwe","lwg","lwh","lwl","lwm","lwo","lws","lwt","lwu","lww","lya","lyg","lyn","lzh","lzl","lzn","lzz","maa","mab","mad","mae","maf","mag","mai","maj","mak","mam","man","map","maq","mas","mat","mau","mav","maw","max","maz","mba","mbb","mbc","mbd","mbe","mbf","mbh","mbi","mbj","mbk","mbl","mbm","mbn","mbo","mbp","mbq","mbr","mbs","mbt","mbu","mbv","mbw","mbx","mby","mbz","mca","mcb","mcc","mcd","mce","mcf","mcg","mch","mci","mcj","mck","mcl","mcm","mcn","mco","mcp","mcq","mcr","mcs","mct","mcu","mcv","mcw","mcx","mcy","mcz","mda","mdb","mdc","mdd","mde","mdf","mdg","mdh","mdi","mdj","mdk","mdl","mdm","mdn","mdp","mdq","mdr","mds","mdt","mdu","mdv","mdw","mdx","mdy","mdz","mea","meb","mec","med","mee","mef","meg","meh","mei","mej","mek","mel","mem","men","meo","mep","meq","mer","mes","met","meu","mev","mew","mey","mez","mfa","mfb","mfc","mfd","mfe","mff","mfg","mfh","mfi","mfj","mfk","mfl","mfm","mfn","mfo","mfp","mfq","mfr","mfs","mft","mfu","mfv","mfw","mfx","mfy","mfz","mga","mgb","mgc","mgd","mge","mgf","mgg","mgh","mgi","mgj","mgk","mgl","mgm","mgn","mgo","mgp","mgq","mgr","mgs","mgt","mgu","mgv","mgw","mgx","mgy","mgz","mha","mhb","mhc","mhd","mhe","mhf","mhg","mhh","mhi","mhj","mhk","mhl","mhm","mhn","mho","mhp","mhq","mhr","mhs","mht","mhu","mhw","mhx","mhy","mhz","mia","mib","mic","mid","mie","mif","mig","mih","mii","mij","mik","mil","mim","min","mio","mip","miq","mir","mis","mit","miu","miw","mix","miy","miz","mja","mjb","mjc","mjd","mje","mjg","mjh","mji","mjj","mjk","mjl","mjm","mjn","mjo","mjp","mjq","mjr","mjs","mjt","mju","mjv","mjw","mjx","mjy","mjz","mka","mkb","mkc","mke","mkf","mkg","mkh","mki","mkj","mkk","mkl","mkm","mkn","mko","mkp","mkq","mkr","mks","mkt","mku","mkv","mkw","mkx","mky","mkz","mla","mlb","mlc","mld","mle","mlf","mlh","mli","mlj","mlk","mll","mlm","mln","mlo","mlp","mlq","mlr","mls","mlu","mlv","mlw","mlx","mlz","mma","mmb","mmc","mmd","mme","mmf","mmg","mmh","mmi","mmj","mmk","mml","mmm","mmn","mmo","mmp","mmq","mmr","mmt","mmu","mmv","mmw","mmx","mmy","mmz","mna","mnb","mnc","mnd","mne","mnf","mng","mnh","mni","mnj","mnk","mnl","mnm","mnn","mno","mnp","mnq","mnr","mns","mnt","mnu","mnv","mnw","mnx","mny","mnz","moa","moc","mod","moe","mof","mog","moh","moi","moj","mok","mom","moo","mop","moq","mor","mos","mot","mou","mov","mow","mox","moy","moz","mpa","mpb","mpc","mpd","mpe","mpg","mph","mpi","mpj","mpk","mpl","mpm","mpn","mpo","mpp","mpq","mpr","mps","mpt","mpu","mpv","mpw","mpx","mpy","mpz","mqa","mqb","mqc","mqe","mqf","mqg","mqh","mqi","mqj","mqk","mql","mqm","mqn","mqo","mqp","mqq","mqr","mqs","mqt","mqu","mqv","mqw","mqx","mqy","mqz","mra","mrb","mrc","mrd","mre","mrf","mrg","mrh","mrj","mrk","mrl","mrm","mrn","mro","mrp","mrq","mrr","mrs","mrt","mru","mrv","mrw","mrx","mry","mrz","msb","msc","msd","mse","msf","msg","msh","msi","msj","msk","msl","msm","msn","mso","msp","msq","msr","mss","mst","msu","msv","msw","msx","msy","msz","mta","mtb","mtc","mtd","mte","mtf","mtg","mth","mti","mtj","mtk","mtl","mtm","mtn","mto","mtp","mtq","mtr","mts","mtt","mtu","mtv","mtw","mtx","mty","mua","mub","muc","mud","mue","mug","muh","mui","muj","muk","mul","mum","mun","muo","mup","muq","mur","mus","mut","muu","muv","mux","muy","muz","mva","mvb","mvd","mve","mvf","mvg","mvh","mvi","mvk","mvl","mvm","mvn","mvo","mvp","mvq","mvr","mvs","mvt","mvu","mvv","mvw","mvx","mvy","mvz","mwa","mwb","mwc","mwd","mwe","mwf","mwg","mwh","mwi","mwj","mwk","mwl","mwm","mwn","mwo","mwp","mwq","mwr","mws","mwt","mwu","mwv","mww","mwx","mwy","mwz","mxa","mxb","mxc","mxd","mxe","mxf","mxg","mxh","mxi","mxj","mxk","mxl","mxm","mxn","mxo","mxp","mxq","mxr","mxs","mxt","mxu","mxv","mxw","mxx","mxy","mxz","myb","myc","myd","mye","myf","myg","myh","myi","myj","myk","myl","mym","myn","myo","myp","myq","myr","mys","myt","myu","myv","myw","myx","myy","myz","mza","mzb","mzc","mzd","mze","mzg","mzh","mzi","mzj","mzk","mzl","mzm","mzn","mzo","mzp","mzq","mzr","mzs","mzt","mzu","mzv","mzw","mzx","mzy","mzz","naa","nab","nac","nad","nae","naf","nag","nah","nai","naj","nak","nal","nam","nan","nao","nap","naq","nar","nas","nat","naw","nax","nay","naz","nba","nbb","nbc","nbd","nbe","nbf","nbg","nbh","nbi","nbj","nbk","nbm","nbn","nbo","nbp","nbq","nbr","nbs","nbt","nbu","nbv","nbw","nbx","nby","nca","ncb","ncc","ncd","nce","ncf","ncg","nch","nci","ncj","nck","ncl","ncm","ncn","nco","ncp","ncq","ncr","ncs","nct","ncu","ncx","ncz","nda","ndb","ndc","ndd","ndf","ndg","ndh","ndi","ndj","ndk","ndl","ndm","ndn","ndp","ndq","ndr","nds","ndt","ndu","ndv","ndw","ndx","ndy","ndz","nea","neb","nec","ned","nee","nef","neg","neh","nei","nej","nek","nem","nen","neo","neq","ner","nes","net","neu","nev","new","nex","ney","nez","nfa","nfd","nfl","nfr","nfu","nga","ngb","ngc","ngd","nge","ngf","ngg","ngh","ngi","ngj","ngk","ngl","ngm","ngn","ngo","ngp","ngq","ngr","ngs","ngt","ngu","ngv","ngw","ngx","ngy","ngz","nha","nhb","nhc","nhd","nhe","nhf","nhg","nhh","nhi","nhk","nhm","nhn","nho","nhp","nhq","nhr","nht","nhu","nhv","nhw","nhx","nhy","nhz","nia","nib","nic","nid","nie","nif","nig","nih","nii","nij","nik","nil","nim","nin","nio","niq","nir","nis","nit","niu","niv","niw","nix","niy","niz","nja","njb","njd","njh","nji","njj","njl","njm","njn","njo","njr","njs","njt","nju","njx","njy","njz","nka","nkb","nkc","nkd","nke","nkf","nkg","nkh","nki","nkj","nkk","nkm","nkn","nko","nkp","nkq","nkr","nks","nkt","nku","nkv","nkw","nkx","nkz","nla","nlc","nle","nlg","nli","nlj","nlk","nll","nlm","nln","nlo","nlq","nlr","nlu","nlv","nlw","nlx","nly","nlz","nma","nmb","nmc","nmd","nme","nmf","nmg","nmh","nmi","nmj","nmk","nml","nmm","nmn","nmo","nmp","nmq","nmr","nms","nmt","nmu","nmv","nmw","nmx","nmy","nmz","nna","nnb","nnc","nnd","nne","nnf","nng","nnh","nni","nnj","nnk","nnl","nnm","nnn","nnp","nnq","nnr","nns","nnt","nnu","nnv","nnw","nnx","nny","nnz","noa","noc","nod","noe","nof","nog","noh","noi","noj","nok","nol","nom","non","noo","nop","noq","nos","not","nou","nov","now","noy","noz","npa","npb","npg","nph","npi","npl","npn","npo","nps","npu","npx","npy","nqg","nqk","nql","nqm","nqn","nqo","nqq","nqy","nra","nrb","nrc","nre","nrf","nrg","nri","nrk","nrl","nrm","nrn","nrp","nrr","nrt","nru","nrx","nrz","nsa","nsc","nsd","nse","nsf","nsg","nsh","nsi","nsk","nsl","nsm","nsn","nso","nsp","nsq","nsr","nss","nst","nsu","nsv","nsw","nsx","nsy","nsz","ntd","nte","ntg","nti","ntj","ntk","ntm","nto","ntp","ntr","nts","ntu","ntw","ntx","nty","ntz","nua","nub","nuc","nud","nue","nuf","nug","nuh","nui","nuj","nuk","nul","num","nun","nuo","nup","nuq","nur","nus","nut","nuu","nuv","nuw","nux","nuy","nuz","nvh","nvm","nvo","nwa","nwb","nwc","nwe","nwg","nwi","nwm","nwo","nwr","nwx","nwy","nxa","nxd","nxe","nxg","nxi","nxk","nxl","nxm","nxn","nxo","nxq","nxr","nxu","nxx","nyb","nyc","nyd","nye","nyf","nyg","nyh","nyi","nyj","nyk","nyl","nym","nyn","nyo","nyp","nyq","nyr","nys","nyt","nyu","nyv","nyw","nyx","nyy","nza","nzb","nzd","nzi","nzk","nzm","nzs","nzu","nzy","nzz","oaa","oac","oar","oav","obi","obk","obl","obm","obo","obr","obt","obu","oca","och","oco","ocu","oda","odk","odt","odu","ofo","ofs","ofu","ogb","ogc","oge","ogg","ogo","ogu","oht","ohu","oia","oin","ojb","ojc","ojg","ojp","ojs","ojv","ojw","oka","okb","okd","oke","okg","okh","oki","okj","okk","okl","okm","okn","oko","okr","oks","oku","okv","okx","ola","old","ole","olk","olm","olo","olr","olt","olu","oma","omb","omc","ome","omg","omi","omk","oml","omn","omo","omp","omq","omr","omt","omu","omv","omw","omx","ona","onb","one","ong","oni","onj","onk","onn","ono","onp","onr","ons","ont","onu","onw","onx","ood","oog","oon","oor","oos","opa","opk","opm","opo","opt","opy","ora","orc","ore","org","orh","orn","oro","orr","ors","ort","oru","orv","orw","orx","ory","orz","osa","osc","osi","oso","osp","ost","osu","osx","ota","otb","otd","ote","oti","otk","otl","otm","otn","oto","otq","otr","ots","ott","otu","otw","otx","oty","otz","oua","oub","oue","oui","oum","oun","ovd","owi","owl","oyb","oyd","oym","oyy","ozm","paa","pab","pac","pad","pae","paf","pag","pah","pai","pak","pal","pam","pao","pap","paq","par","pas","pat","pau","pav","paw","pax","pay","paz","pbb","pbc","pbe","pbf","pbg","pbh","pbi","pbl","pbm","pbn","pbo","pbp","pbr","pbs","pbt","pbu","pbv","pby","pbz","pca","pcb","pcc","pcd","pce","pcf","pcg","pch","pci","pcj","pck","pcl","pcm","pcn","pcp","pcr","pcw","pda","pdc","pdi","pdn","pdo","pdt","pdu","pea","peb","ped","pee","pef","peg","peh","pei","pej","pek","pel","pem","peo","pep","peq","pes","pev","pex","pey","pez","pfa","pfe","pfl","pga","pgd","pgg","pgi","pgk","pgl","pgn","pgs","pgu","pgy","pgz","pha","phd","phg","phh","phi","phk","phl","phm","phn","pho","phq","phr","pht","phu","phv","phw","pia","pib","pic","pid","pie","pif","pig","pih","pii","pij","pil","pim","pin","pio","pip","pir","pis","pit","piu","piv","piw","pix","piy","piz","pjt","pka","pkb","pkc","pkg","pkh","pkn","pko","pkp","pkr","pks","pkt","pku","pla","plb","plc","pld","ple","plf","plg","plh","plj","plk","pll","pln","plo","plp","plq","plr","pls","plt","plu","plv","plw","ply","plz","pma","pmb","pmc","pmd","pme","pmf","pmh","pmi","pmj","pmk","pml","pmm","pmn","pmo","pmq","pmr","pms","pmt","pmu","pmw","pmx","pmy","pmz","pna","pnb","pnc","pne","png","pnh","pni","pnj","pnk","pnl","pnm","pnn","pno","pnp","pnq","pnr","pns","pnt","pnu","pnv","pnw","pnx","pny","pnz","poc","pod","poe","pof","pog","poh","poi","pok","pom","pon","poo","pop","poq","pos","pot","pov","pow","pox","poy","poz","ppa","ppe","ppi","ppk","ppl","ppm","ppn","ppo","ppp","ppq","ppr","pps","ppt","ppu","pqa","pqe","pqm","pqw","pra","prb","prc","prd","pre","prf","prg","prh","pri","prk","prl","prm","prn","pro","prp","prq","prr","prs","prt","pru","prw","prx","pry","prz","psa","psc","psd","pse","psg","psh","psi","psl","psm","psn","pso","psp","psq","psr","pss","pst","psu","psw","psy","pta","pth","pti","ptn","pto","ptp","ptq","ptr","ptt","ptu","ptv","ptw","pty","pua","pub","puc","pud","pue","puf","pug","pui","puj","puk","pum","puo","pup","puq","pur","put","puu","puw","pux","puy","puz","pwa","pwb","pwg","pwi","pwm","pwn","pwo","pwr","pww","pxm","pye","pym","pyn","pys","pyu","pyx","pyy","pzn","qaa..qtz","qua","qub","quc","qud","quf","qug","quh","qui","quk","qul","qum","qun","qup","quq","qur","qus","quv","quw","qux","quy","quz","qva","qvc","qve","qvh","qvi","qvj","qvl","qvm","qvn","qvo","qvp","qvs","qvw","qvy","qvz","qwa","qwc","qwe","qwh","qwm","qws","qwt","qxa","qxc","qxh","qxl","qxn","qxo","qxp","qxq","qxr","qxs","qxt","qxu","qxw","qya","qyp","raa","rab","rac","rad","raf","rag","rah","rai","raj","rak","ral","ram","ran","rao","rap","raq","rar","ras","rat","rau","rav","raw","rax","ray","raz","rbb","rbk","rbl","rbp","rcf","rdb","rea","reb","ree","reg","rei","rej","rel","rem","ren","rer","res","ret","rey","rga","rge","rgk","rgn","rgr","rgs","rgu","rhg","rhp","ria","rie","rif","ril","rim","rin","rir","rit","riu","rjg","rji","rjs","rka","rkb","rkh","rki","rkm","rkt","rkw","rma","rmb","rmc","rmd","rme","rmf","rmg","rmh","rmi","rmk","rml","rmm","rmn","rmo","rmp","rmq","rmr","rms","rmt","rmu","rmv","rmw","rmx","rmy","rmz","rna","rnd","rng","rnl","rnn","rnp","rnr","rnw","roa","rob","roc","rod","roe","rof","rog","rol","rom","roo","rop","ror","rou","row","rpn","rpt","rri","rro","rrt","rsb","rsi","rsl","rsm","rtc","rth","rtm","rts","rtw","rub","ruc","rue","ruf","rug","ruh","rui","ruk","ruo","rup","ruq","rut","ruu","ruy","ruz","rwa","rwk","rwm","rwo","rwr","rxd","rxw","ryn","rys","ryu","rzh","saa","sab","sac","sad","sae","saf","sah","sai","saj","sak","sal","sam","sao","sap","saq","sar","sas","sat","sau","sav","saw","sax","say","saz","sba","sbb","sbc","sbd","sbe","sbf","sbg","sbh","sbi","sbj","sbk","sbl","sbm","sbn","sbo","sbp","sbq","sbr","sbs","sbt","sbu","sbv","sbw","sbx","sby","sbz","sca","scb","sce","scf","scg","sch","sci","sck","scl","scn","sco","scp","scq","scs","sct","scu","scv","scw","scx","sda","sdb","sdc","sde","sdf","sdg","sdh","sdj","sdk","sdl","sdm","sdn","sdo","sdp","sdr","sds","sdt","sdu","sdv","sdx","sdz","sea","seb","sec","sed","see","sef","seg","seh","sei","sej","sek","sel","sem","sen","seo","sep","seq","ser","ses","set","seu","sev","sew","sey","sez","sfb","sfe","sfm","sfs","sfw","sga","sgb","sgc","sgd","sge","sgg","sgh","sgi","sgj","sgk","sgl","sgm","sgn","sgo","sgp","sgr","sgs","sgt","sgu","sgw","sgx","sgy","sgz","sha","shb","shc","shd","she","shg","shh","shi","shj","shk","shl","shm","shn","sho","shp","shq","shr","shs","sht","shu","shv","shw","shx","shy","shz","sia","sib","sid","sie","sif","sig","sih","sii","sij","sik","sil","sim","sio","sip","siq","sir","sis","sit","siu","siv","siw","six","siy","siz","sja","sjb","sjd","sje","sjg","sjk","sjl","sjm","sjn","sjo","sjp","sjr","sjs","sjt","sju","sjw","ska","skb","skc","skd","ske","skf","skg","skh","ski","skj","skk","skm","skn","sko","skp","skq","skr","sks","skt","sku","skv","skw","skx","sky","skz","sla","slc","sld","sle","slf","slg","slh","sli","slj","sll","slm","sln","slp","slq","slr","sls","slt","slu","slw","slx","sly","slz","sma","smb","smc","smd","smf","smg","smh","smi","smj","smk","sml","smm","smn","smp","smq","smr","sms","smt","smu","smv","smw","smx","smy","smz","snb","snc","sne","snf","sng","snh","sni","snj","snk","snl","snm","snn","sno","snp","snq","snr","sns","snu","snv","snw","snx","sny","snz","soa","sob","soc","sod","soe","sog","soh","soi","soj","sok","sol","son","soo","sop","soq","sor","sos","sou","sov","sow","sox","soy","soz","spb","spc","spd","spe","spg","spi","spk","spl","spm","spn","spo","spp","spq","spr","sps","spt","spu","spv","spx","spy","sqa","sqh","sqj","sqk","sqm","sqn","sqo","sqq","sqr","sqs","sqt","squ","sra","srb","src","sre","srf","srg","srh","sri","srk","srl","srm","srn","sro","srq","srr","srs","srt","sru","srv","srw","srx","sry","srz","ssa","ssb","ssc","ssd","sse","ssf","ssg","ssh","ssi","ssj","ssk","ssl","ssm","ssn","sso","ssp","ssq","ssr","sss","sst","ssu","ssv","ssx","ssy","ssz","sta","stb","std","ste","stf","stg","sth","sti","stj","stk","stl","stm","stn","sto","stp","stq","str","sts","stt","stu","stv","stw","sty","sua","sub","suc","sue","sug","sui","suj","suk","sul","sum","suq","sur","sus","sut","suv","suw","sux","suy","suz","sva","svb","svc","sve","svk","svm","svr","svs","svx","swb","swc","swf","swg","swh","swi","swj","swk","swl","swm","swn","swo","swp","swq","swr","sws","swt","swu","swv","sww","swx","swy","sxb","sxc","sxe","sxg","sxk","sxl","sxm","sxn","sxo","sxr","sxs","sxu","sxw","sya","syb","syc","syd","syi","syk","syl","sym","syn","syo","syr","sys","syw","syx","syy","sza","szb","szc","szd","sze","szg","szl","szn","szp","szs","szv","szw","taa","tab","tac","tad","tae","taf","tag","tai","taj","tak","tal","tan","tao","tap","taq","tar","tas","tau","tav","taw","tax","tay","taz","tba","tbb","tbc","tbd","tbe","tbf","tbg","tbh","tbi","tbj","tbk","tbl","tbm","tbn","tbo","tbp","tbq","tbr","tbs","tbt","tbu","tbv","tbw","tbx","tby","tbz","tca","tcb","tcc","tcd","tce","tcf","tcg","tch","tci","tck","tcl","tcm","tcn","tco","tcp","tcq","tcs","tct","tcu","tcw","tcx","tcy","tcz","tda","tdb","tdc","tdd","tde","tdf","tdg","tdh","tdi","tdj","tdk","tdl","tdm","tdn","tdo","tdq","tdr","tds","tdt","tdu","tdv","tdx","tdy","tea","teb","tec","ted","tee","tef","teg","teh","tei","tek","tem","ten","teo","tep","teq","ter","tes","tet","teu","tev","tew","tex","tey","tez","tfi","tfn","tfo","tfr","tft","tga","tgb","tgc","tgd","tge","tgf","tgg","tgh","tgi","tgj","tgn","tgo","tgp","tgq","tgr","tgs","tgt","tgu","tgv","tgw","tgx","tgy","tgz","thc","thd","the","thf","thh","thi","thk","thl","thm","thn","thp","thq","thr","ths","tht","thu","thv","thw","thx","thy","thz","tia","tic","tid","tie","tif","tig","tih","tii","tij","tik","til","tim","tin","tio","tip","tiq","tis","tit","tiu","tiv","tiw","tix","tiy","tiz","tja","tjg","tji","tjl","tjm","tjn","tjo","tjs","tju","tjw","tka","tkb","tkd","tke","tkf","tkg","tkk","tkl","tkm","tkn","tkp","tkq","tkr","tks","tkt","tku","tkv","tkw","tkx","tkz","tla","tlb","tlc","tld","tlf","tlg","tlh","tli","tlj","tlk","tll","tlm","tln","tlo","tlp","tlq","tlr","tls","tlt","tlu","tlv","tlw","tlx","tly","tma","tmb","tmc","tmd","tme","tmf","tmg","tmh","tmi","tmj","tmk","tml","tmm","tmn","tmo","tmp","tmq","tmr","tms","tmt","tmu","tmv","tmw","tmy","tmz","tna","tnb","tnc","tnd","tne","tnf","tng","tnh","tni","tnk","tnl","tnm","tnn","tno","tnp","tnq","tnr","tns","tnt","tnu","tnv","tnw","tnx","tny","tnz","tob","toc","tod","toe","tof","tog","toh","toi","toj","tol","tom","too","top","toq","tor","tos","tou","tov","tow","tox","toy","toz","tpa","tpc","tpe","tpf","tpg","tpi","tpj","tpk","tpl","tpm","tpn","tpo","tpp","tpq","tpr","tpt","tpu","tpv","tpw","tpx","tpy","tpz","tqb","tql","tqm","tqn","tqo","tqp","tqq","tqr","tqt","tqu","tqw","tra","trb","trc","trd","tre","trf","trg","trh","tri","trj","trk","trl","trm","trn","tro","trp","trq","trr","trs","trt","tru","trv","trw","trx","try","trz","tsa","tsb","tsc","tsd","tse","tsf","tsg","tsh","tsi","tsj","tsk","tsl","tsm","tsp","tsq","tsr","tss","tst","tsu","tsv","tsw","tsx","tsy","tsz","tta","ttb","ttc","ttd","tte","ttf","ttg","tth","tti","ttj","ttk","ttl","ttm","ttn","tto","ttp","ttq","ttr","tts","ttt","ttu","ttv","ttw","tty","ttz","tua","tub","tuc","tud","tue","tuf","tug","tuh","tui","tuj","tul","tum","tun","tuo","tup","tuq","tus","tut","tuu","tuv","tuw","tux","tuy","tuz","tva","tvd","tve","tvk","tvl","tvm","tvn","tvo","tvs","tvt","tvu","tvw","tvy","twa","twb","twc","twd","twe","twf","twg","twh","twl","twm","twn","two","twp","twq","twr","twt","twu","tww","twx","twy","txa","txb","txc","txe","txg","txh","txi","txj","txm","txn","txo","txq","txr","txs","txt","txu","txx","txy","tya","tye","tyh","tyi","tyj","tyl","tyn","typ","tyr","tys","tyt","tyu","tyv","tyx","tyz","tza","tzh","tzj","tzl","tzm","tzn","tzo","tzx","uam","uan","uar","uba","ubi","ubl","ubr","ubu","uby","uda","ude","udg","udi","udj","udl","udm","udu","ues","ufi","uga","ugb","uge","ugn","ugo","ugy","uha","uhn","uis","uiv","uji","uka","ukg","ukh","ukk","ukl","ukp","ukq","uks","uku","ukw","uky","ula","ulb","ulc","ule","ulf","uli","ulk","ull","ulm","uln","ulu","ulw","uma","umb","umc","umd","umg","umi","umm","umn","umo","ump","umr","ums","umu","una","und","une","ung","unk","unm","unn","unp","unr","unu","unx","unz","uok","upi","upv","ura","urb","urc","ure","urf","urg","urh","uri","urj","urk","url","urm","urn","uro","urp","urr","urt","uru","urv","urw","urx","ury","urz","usa","ush","usi","usk","usp","usu","uta","ute","utp","utr","utu","uum","uun","uur","uuu","uve","uvh","uvl","uwa","uya","uzn","uzs","vaa","vae","vaf","vag","vah","vai","vaj","val","vam","van","vao","vap","var","vas","vau","vav","vay","vbb","vbk","vec","ved","vel","vem","veo","vep","ver","vgr","vgt","vic","vid","vif","vig","vil","vin","vis","vit","viv","vka","vki","vkj","vkk","vkl","vkm","vko","vkp","vkt","vku","vlp","vls","vma","vmb","vmc","vmd","vme","vmf","vmg","vmh","vmi","vmj","vmk","vml","vmm","vmp","vmq","vmr","vms","vmu","vmv","vmw","vmx","vmy","vmz","vnk","vnm","vnp","vor","vot","vra","vro","vrs","vrt","vsi","vsl","vsv","vto","vum","vun","vut","vwa","waa","wab","wac","wad","wae","waf","wag","wah","wai","waj","wak","wal","wam","wan","wao","wap","waq","war","was","wat","wau","wav","waw","wax","way","waz","wba","wbb","wbe","wbf","wbh","wbi","wbj","wbk","wbl","wbm","wbp","wbq","wbr","wbs","wbt","wbv","wbw","wca","wci","wdd","wdg","wdj","wdk","wdu","wdy","wea","wec","wed","weg","weh","wei","wem","wen","weo","wep","wer","wes","wet","weu","wew","wfg","wga","wgb","wgg","wgi","wgo","wgu","wgw","wgy","wha","whg","whk","whu","wib","wic","wie","wif","wig","wih","wii","wij","wik","wil","wim","win","wir","wit","wiu","wiv","wiw","wiy","wja","wji","wka","wkb","wkd","wkl","wku","wkw","wky","wla","wlc","wle","wlg","wli","wlk","wll","wlm","wlo","wlr","wls","wlu","wlv","wlw","wlx","wly","wma","wmb","wmc","wmd","wme","wmh","wmi","wmm","wmn","wmo","wms","wmt","wmw","wmx","wnb","wnc","wnd","wne","wng","wni","wnk","wnm","wnn","wno","wnp","wnu","wnw","wny","woa","wob","woc","wod","woe","wof","wog","woi","wok","wom","won","woo","wor","wos","wow","woy","wpc","wra","wrb","wrd","wrg","wrh","wri","wrk","wrl","wrm","wrn","wro","wrp","wrr","wrs","wru","wrv","wrw","wrx","wry","wrz","wsa","wsg","wsi","wsk","wsr","wss","wsu","wsv","wtf","wth","wti","wtk","wtm","wtw","wua","wub","wud","wuh","wul","wum","wun","wur","wut","wuu","wuv","wux","wuy","wwa","wwb","wwo","wwr","www","wxa","wxw","wya","wyb","wyi","wym","wyr","wyy","xaa","xab","xac","xad","xae","xag","xai","xaj","xak","xal","xam","xan","xao","xap","xaq","xar","xas","xat","xau","xav","xaw","xay","xba","xbb","xbc","xbd","xbe","xbg","xbi","xbj","xbm","xbn","xbo","xbp","xbr","xbw","xbx","xby","xcb","xcc","xce","xcg","xch","xcl","xcm","xcn","xco","xcr","xct","xcu","xcv","xcw","xcy","xda","xdc","xdk","xdm","xdo","xdy","xeb","xed","xeg","xel","xem","xep","xer","xes","xet","xeu","xfa","xga","xgb","xgd","xgf","xgg","xgi","xgl","xgm","xgn","xgr","xgu","xgw","xha","xhc","xhd","xhe","xhr","xht","xhu","xhv","xia","xib","xii","xil","xin","xip","xir","xis","xiv","xiy","xjb","xjt","xka","xkb","xkc","xkd","xke","xkf","xkg","xkh","xki","xkj","xkk","xkl","xkn","xko","xkp","xkq","xkr","xks","xkt","xku","xkv","xkw","xkx","xky","xkz","xla","xlb","xlc","xld","xle","xlg","xli","xln","xlo","xlp","xls","xlu","xly","xma","xmb","xmc","xmd","xme","xmf","xmg","xmh","xmj","xmk","xml","xmm","xmn","xmo","xmp","xmq","xmr","xms","xmt","xmu","xmv","xmw","xmx","xmy","xmz","xna","xnb","xnd","xng","xnh","xni","xnk","xnn","xno","xnr","xns","xnt","xnu","xny","xnz","xoc","xod","xog","xoi","xok","xom","xon","xoo","xop","xor","xow","xpa","xpc","xpe","xpg","xpi","xpj","xpk","xpm","xpn","xpo","xpp","xpq","xpr","xps","xpt","xpu","xpy","xqa","xqt","xra","xrb","xrd","xre","xrg","xri","xrm","xrn","xrq","xrr","xrt","xru","xrw","xsa","xsb","xsc","xsd","xse","xsh","xsi","xsj","xsl","xsm","xsn","xso","xsp","xsq","xsr","xss","xsu","xsv","xsy","xta","xtb","xtc","xtd","xte","xtg","xth","xti","xtj","xtl","xtm","xtn","xto","xtp","xtq","xtr","xts","xtt","xtu","xtv","xtw","xty","xtz","xua","xub","xud","xug","xuj","xul","xum","xun","xuo","xup","xur","xut","xuu","xve","xvi","xvn","xvo","xvs","xwa","xwc","xwd","xwe","xwg","xwj","xwk","xwl","xwo","xwr","xwt","xww","xxb","xxk","xxm","xxr","xxt","xya","xyb","xyj","xyk","xyl","xyt","xyy","xzh","xzm","xzp","yaa","yab","yac","yad","yae","yaf","yag","yah","yai","yaj","yak","yal","yam","yan","yao","yap","yaq","yar","yas","yat","yau","yav","yaw","yax","yay","yaz","yba","ybb","ybd","ybe","ybh","ybi","ybj","ybk","ybl","ybm","ybn","ybo","ybx","yby","ych","ycl","ycn","ycp","yda","ydd","yde","ydg","ydk","yds","yea","yec","yee","yei","yej","yel","yen","yer","yes","yet","yeu","yev","yey","yga","ygi","ygl","ygm","ygp","ygr","ygs","ygu","ygw","yha","yhd","yhl","yhs","yia","yif","yig","yih","yii","yij","yik","yil","yim","yin","yip","yiq","yir","yis","yit","yiu","yiv","yix","yiy","yiz","yka","ykg","yki","ykk","ykl","ykm","ykn","yko","ykr","ykt","yku","yky","yla","ylb","yle","ylg","yli","yll","ylm","yln","ylo","ylr","ylu","yly","yma","ymb","ymc","ymd","yme","ymg","ymh","ymi","ymk","yml","ymm","ymn","ymo","ymp","ymq","ymr","yms","ymt","ymx","ymz","yna","ynd","yne","yng","ynh","ynk","ynl","ynn","yno","ynq","yns","ynu","yob","yog","yoi","yok","yol","yom","yon","yos","yot","yox","yoy","ypa","ypb","ypg","yph","ypk","ypm","ypn","ypo","ypp","ypz","yra","yrb","yre","yri","yrk","yrl","yrm","yrn","yro","yrs","yrw","yry","ysc","ysd","ysg","ysl","ysn","yso","ysp","ysr","yss","ysy","yta","ytl","ytp","ytw","yty","yua","yub","yuc","yud","yue","yuf","yug","yui","yuj","yuk","yul","yum","yun","yup","yuq","yur","yut","yuu","yuw","yux","yuy","yuz","yva","yvt","ywa","ywg","ywl","ywn","ywq","ywr","ywt","ywu","yww","yxa","yxg","yxl","yxm","yxu","yxy","yyr","yyu","yyz","yzg","yzk","zaa","zab","zac","zad","zae","zaf","zag","zah","zai","zaj","zak","zal","zam","zao","zap","zaq","zar","zas","zat","zau","zav","zaw","zax","zay","zaz","zbc","zbe","zbl","zbt","zbw","zca","zch","zdj","zea","zeg","zeh","zen","zga","zgb","zgh","zgm","zgn","zgr","zhb","zhd","zhi","zhn","zhw","zhx","zia","zib","zik","zil","zim","zin","zir","ziw","ziz","zka","zkb","zkd","zkg","zkh","zkk","zkn","zko","zkp","zkr","zkt","zku","zkv","zkz","zle","zlj","zlm","zln","zlq","zls","zlw","zma","zmb","zmc","zmd","zme","zmf","zmg","zmh","zmi","zmj","zmk","zml","zmm","zmn","zmo","zmp","zmq","zmr","zms","zmt","zmu","zmv","zmw","zmx","zmy","zmz","zna","znd","zne","zng","znk","zns","zoc","zoh","zom","zoo","zoq","zor","zos","zpa","zpb","zpc","zpd","zpe","zpf","zpg","zph","zpi","zpj","zpk","zpl","zpm","zpn","zpo","zpp","zpq","zpr","zps","zpt","zpu","zpv","zpw","zpx","zpy","zpz","zqe","zra","zrg","zrn","zro","zrp","zrs","zsa","zsk","zsl","zsm","zsr","zsu","zte","ztg","ztl","ztm","ztn","ztp","ztq","zts","ztt","ztu","ztx","zty","zua","zuh","zum","zun","zuy","zwa","zxx","zyb","zyg","zyj","zyn","zyp","zza","zzj"];function he(e){return ye(e)||ge(e)||be()}function be(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function ge(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}function ye(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}function R(){return(R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function S(e){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}axe.utils.validLangs=function(){"use strict";return Ie},axe._load({data:{rules:{accesskeys:{description:"Ensures every accesskey attribute value is unique",help:"accesskey attribute value must be unique"},"area-alt":{description:"Ensures <area> elements of image maps have alternate text",help:"Active <area> elements must have alternate text"},"aria-allowed-attr":{description:"Ensures ARIA attributes are allowed for an element's role",help:"Elements must only use allowed ARIA attributes"},"aria-allowed-role":{description:"Ensures role attribute has an appropriate value for the element",help:"ARIA role must be appropriate for the element"},"aria-dpub-role-fallback":{description:"Ensures unsupported DPUB roles are only used on elements with implicit fallback roles",help:"Unsupported DPUB ARIA roles should be used on elements with implicit fallback roles"},"aria-hidden-body":{description:"Ensures aria-hidden='true' is not present on the document body.",help:"aria-hidden='true' must not be present on the document body"},"aria-hidden-focus":{description:"Ensures aria-hidden elements do not contain focusable elements",help:"ARIA hidden element must not contain focusable elements"},"aria-input-field-name":{description:"Ensures every ARIA input field has an accessible name",help:"ARIA input fields have an accessible name"},"aria-required-attr":{description:"Ensures elements with ARIA roles have all required ARIA attributes",help:"Required ARIA attributes must be provided"},"aria-required-children":{description:"Ensures elements with an ARIA role that require child roles contain them",help:"Certain ARIA roles must contain particular children"},"aria-required-parent":{description:"Ensures elements with an ARIA role that require parent roles are contained by them",help:"Certain ARIA roles must be contained by particular parents"},"aria-roles":{description:"Ensures all elements with a role attribute use a valid value",help:"ARIA roles used must conform to valid values"},"aria-toggle-field-name":{description:"Ensures every ARIA toggle field has an accessible name",help:"ARIA toggle fields have an accessible name"},"aria-valid-attr-value":{description:"Ensures all ARIA attributes have valid values",help:"ARIA attributes must conform to valid values"},"aria-valid-attr":{description:"Ensures attributes that begin with aria- are valid ARIA attributes",help:"ARIA attributes must conform to valid names"},"audio-caption":{description:"Ensures <audio> elements have captions",help:"<audio> elements must have a captions track"},"autocomplete-valid":{description:"Ensure the autocomplete attribute is correct and suitable for the form field",help:"autocomplete attribute must be used correctly"},"avoid-inline-spacing":{description:"Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",help:"Inline text spacing must be adjustable with custom stylesheets"},blink:{description:"Ensures <blink> elements are not used",help:"<blink> elements are deprecated and must not be used"},"button-name":{description:"Ensures buttons have discernible text",help:"Buttons must have discernible text"},bypass:{description:"Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content",help:"Page must have means to bypass repeated blocks"},checkboxgroup:{description:'Ensures related <input type="checkbox"> elements have a group and that the group designation is consistent',help:"Checkbox inputs with the same name attribute value must be part of a group"},"color-contrast":{description:"Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds",help:"Elements must have sufficient color contrast"},"css-orientation-lock":{description:"Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations",help:"CSS Media queries are not used to lock display orientation"},"definition-list":{description:"Ensures <dl> elements are structured correctly",help:"<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script> or <template> elements"},dlitem:{description:"Ensures <dt> and <dd> elements are contained by a <dl>",help:"<dt> and <dd> elements must be contained by a <dl>"},"document-title":{description:"Ensures each HTML document contains a non-empty <title> element",help:"Documents must have <title> element to aid in navigation"},"duplicate-id-active":{description:"Ensures every id attribute value of active elements is unique",help:"IDs of active elements must be unique"},"duplicate-id-aria":{description:"Ensures every id attribute value used in ARIA and in labels is unique",help:"IDs used in ARIA and labels must be unique"},"duplicate-id":{description:"Ensures every id attribute value is unique",help:"id attribute value must be unique"},"empty-heading":{description:"Ensures headings have discernible text",help:"Headings must not be empty"},"focus-order-semantics":{description:"Ensures elements in the focus order have an appropriate role",help:"Elements in the focus order need a role appropriate for interactive content"},"form-field-multiple-labels":{description:"Ensures form field does not have multiple label elements",help:"Form field must not have multiple label elements"},"frame-tested":{description:"Ensures <iframe> and <frame> elements contain the axe-core script",help:"Frames must be tested with axe-core"},"frame-title-unique":{description:"Ensures <iframe> and <frame> elements contain a unique title attribute",help:"Frames must have a unique title attribute"},"frame-title":{description:"Ensures <iframe> and <frame> elements contain a non-empty title attribute",help:"Frames must have title attribute"},"heading-order":{description:"Ensures the order of headings is semantically correct",help:"Heading levels should only increase by one"},"hidden-content":{description:"Informs users about hidden content.",help:"Hidden content on the page cannot be analyzed"},"html-has-lang":{description:"Ensures every HTML document has a lang attribute",help:"<html> element must have a lang attribute"},"html-lang-valid":{description:"Ensures the lang attribute of the <html> element has a valid value",help:"<html> element must have a valid value for the lang attribute"},"html-xml-lang-mismatch":{description:"Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",help:"HTML elements with lang and xml:lang must have the same base language"},"image-alt":{description:"Ensures <img> elements have alternate text or a role of none or presentation",help:"Images must have alternate text"},"image-redundant-alt":{description:"Ensure image alternative is not repeated as text",help:"Alternative text of images should not be repeated as text"},"input-button-name":{description:"Ensures input buttons have discernible text",help:"Input buttons must have discernible text"},"input-image-alt":{description:'Ensures <input type="image"> elements have alternate text',help:"Image buttons must have alternate text"},"label-content-name-mismatch":{description:"Ensures that elements labelled through their content must have their visible text as part of their accessible name",help:"Elements must have their visible text as part of their accessible name"},"label-title-only":{description:"Ensures that every form element is not solely labeled using the title or aria-describedby attributes",help:"Form elements should have a visible label"},label:{description:"Ensures every form element has a label",help:"Form elements must have labels"},"landmark-banner-is-top-level":{description:"Ensures the banner landmark is at top level",help:"Banner landmark must not be contained in another landmark"},"landmark-complementary-is-top-level":{description:"Ensures the complementary landmark or aside is at top level",help:"Aside must not be contained in another landmark"},"landmark-contentinfo-is-top-level":{description:"Ensures the contentinfo landmark is at top level",help:"Contentinfo landmark must not be contained in another landmark"},"landmark-main-is-top-level":{description:"Ensures the main landmark is at top level",help:"Main landmark must not be contained in another landmark"},"landmark-no-duplicate-banner":{description:"Ensures the document has at most one banner landmark",help:"Document must not have more than one banner landmark"},"landmark-no-duplicate-contentinfo":{description:"Ensures the document has at most one contentinfo landmark",help:"Document must not have more than one contentinfo landmark"},"landmark-one-main":{description:"Ensures the document has only one main landmark and each iframe in the page has at most one main landmark",help:"Document must have one main landmark"},"landmark-unique":{help:"Ensures landmarks are unique",description:"Landmarks must have a unique role or role/label/title (i.e. accessible name) combination"},"layout-table":{description:"Ensures presentational <table> elements do not use <th>, <caption> elements or the summary attribute",help:"Layout tables must not use data table elements"},"link-in-text-block":{description:"Links can be distinguished without relying on color",help:"Links must be distinguished from surrounding text in a way that does not rely on color"},"link-name":{description:"Ensures links have discernible text",help:"Links must have discernible text"},list:{description:"Ensures that lists are structured correctly",help:"<ul> and <ol> must only directly contain <li>, <script> or <template> elements"},listitem:{description:"Ensures <li> elements are used semantically",help:"<li> elements must be contained in a <ul> or <ol>"},marquee:{description:"Ensures <marquee> elements are not used",help:"<marquee> elements are deprecated and must not be used"},"meta-refresh":{description:'Ensures <meta http-equiv="refresh"> is not used',help:"Timed refresh must not exist"},"meta-viewport-large":{description:'Ensures <meta name="viewport"> can scale a significant amount',help:"Users should be able to zoom and scale the text up to 500%"},"meta-viewport":{description:'Ensures <meta name="viewport"> does not disable text scaling and zooming',help:"Zooming and scaling must not be disabled"},"object-alt":{description:"Ensures <object> elements have alternate text",help:"<object> elements must have alternate text"},"p-as-heading":{description:"Ensure p elements are not used to style headings",help:"Bold, italic text and font-size are not used to style p elements as a heading"},"page-has-heading-one":{description:"Ensure that the page, or at least one of its frames contains a level-one heading",help:"Page must contain a level-one heading"},radiogroup:{description:'Ensures related <input type="radio"> elements have a group and that the group designation is consistent',help:"Radio inputs with the same name attribute value must be part of a group"},region:{description:"Ensures all page content is contained by landmarks",help:"All page content must be contained by landmarks"},"role-img-alt":{description:"Ensures [role='img'] elements have alternate text",help:"[role='img'] elements have an alternative text"},"scope-attr-valid":{description:"Ensures the scope attribute is used correctly on tables",help:"scope attribute should be used correctly"},"scrollable-region-focusable":{description:"Elements that have scrollable content should be accessible by keyboard",help:"Ensure that scrollable region has keyboard access"},"server-side-image-map":{description:"Ensures that server-side image maps are not used",help:"Server-side image maps must not be used"},"skip-link":{description:"Ensure all skip links have a focusable target",help:"The skip-link target should exist and be focusable"},tabindex:{description:"Ensures tabindex attribute values are not greater than 0",help:"Elements should not have tabindex greater than zero"},"table-duplicate-name":{description:"Ensure that tables do not have the same summary and caption",help:"The <caption> element should not contain the same text as the summary attribute"},"table-fake-caption":{description:"Ensure that tables with a caption use the <caption> element.",help:"Data or header cells should not be used to give caption to a data table."},"td-has-header":{description:"Ensure that each non-empty data cell in a large table has one or more table headers",help:"All non-empty td element in table larger than 3 by 3 must have an associated table header"},"td-headers-attr":{description:"Ensure that each cell in a table using the headers refers to another cell in that table",help:"All cells in a table element that use the headers attribute must only refer to other cells of that same table"},"th-has-data-cells":{description:"Ensure that each table header in a data table refers to data cells",help:"All th elements and elements with role=columnheader/rowheader must have data cells they describe"},"valid-lang":{description:"Ensures lang attributes have valid values",help:"lang attribute must have a valid value"},"video-caption":{description:"Ensures <video> elements have captions",help:"<video> elements must have captions"},"video-description":{description:"Ensures <video> elements have audio descriptions",help:"<video> elements must have an audio description track"}},checks:{accesskeys:{impact:"serious",messages:{pass:function(e){return"Accesskey attribute value is unique"},fail:function(e){return"Document has multiple elements with the same accesskey"}}},"non-empty-alt":{impact:"critical",messages:{pass:function(e){return"Element has a non-empty alt attribute"},fail:function(e){return"Element has no alt attribute or the alt attribute is empty"}}},"non-empty-title":{impact:"serious",messages:{pass:function(e){return"Element has a title attribute"},fail:function(e){return"Element has no title attribute or the title attribute is empty"}}},"aria-label":{impact:"serious",messages:{pass:function(e){return"aria-label attribute exists and is not empty"},fail:function(e){return"aria-label attribute does not exist or is empty"}}},"aria-labelledby":{impact:"serious",messages:{pass:function(e){return"aria-labelledby attribute exists and references elements that are visible to screen readers"},fail:function(e){return"aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"}}},"aria-allowed-attr":{impact:"critical",messages:{pass:function(e){return"ARIA attributes are used correctly for the defined role"},fail:function(e){var t="ARIA attribute"+(e.data&&1<e.data.length?"s are":" is")+" not allowed:",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},"aria-unsupported-attr":{impact:"critical",messages:{pass:function(e){return"ARIA attribute is supported"},fail:function(e){var t="ARIA attribute is not widely supported in screen readers and assistive technologies: ",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},"aria-allowed-role":{impact:"minor",messages:{pass:function(e){return"ARIA role is allowed for given element"},fail:function(e){return"ARIA role"+(e.data&&1<e.data.length?"s":"")+" "+e.data.join(", ")+" "+(e.data&&1<e.data.length?"are":" is")+" not allowed for given element"},incomplete:function(e){return"ARIA role"+(e.data&&1<e.data.length?"s":"")+" "+e.data.join(", ")+" must be removed when the element is made visible, as "+(e.data&&1<e.data.length?"they are":"it is")+" not allowed for the element"}}},"implicit-role-fallback":{impact:"moderate",messages:{pass:function(e){return"Element’s implicit ARIA role is an appropriate fallback"},fail:function(e){return"Element’s implicit ARIA role is not a good fallback for the (unsupported) role"}}},"aria-hidden-body":{impact:"critical",messages:{pass:function(e){return"No aria-hidden attribute is present on document body"},fail:function(e){return"aria-hidden=true should not be present on the document body"}}},"focusable-disabled":{impact:"serious",messages:{pass:function(e){return"No focusable elements contained within element"},fail:function(e){return"Focusable content should be disabled or be removed from the DOM"}}},"focusable-not-tabbable":{impact:"serious",messages:{pass:function(e){return"No focusable elements contained within element"},fail:function(e){return"Focusable content should have tabindex='-1' or be removed from the DOM"}}},"no-implicit-explicit-label":{impact:"moderate",messages:{pass:function(e){return"There is no mismatch between a <label> and accessible name"},incomplete:function(e){return"Check that the <label> does not need be part of the ARIA "+e.data+" field's name"}}},"aria-required-attr":{impact:"critical",messages:{pass:function(e){return"All required ARIA attributes are present"},fail:function(e){var t="Required ARIA attribute"+(e.data&&1<e.data.length?"s":"")+" not present:",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},"aria-required-children":{impact:"critical",messages:{pass:function(e){return"Required ARIA children are present"},fail:function(e){var t="Required ARIA "+(e.data&&1<e.data.length?"children":"child")+" role not present:",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t},incomplete:function(e){var t="Expecting ARIA "+(e.data&&1<e.data.length?"children":"child")+" role to be added:",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},"aria-required-parent":{impact:"critical",messages:{pass:function(e){return"Required ARIA parent role present"},fail:function(e){var t="Required ARIA parent"+(e.data&&1<e.data.length?"s":"")+" role not present:",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},invalidrole:{impact:"critical",messages:{pass:function(e){return"ARIA role is valid"},fail:function(e){return"Role must be one of the valid ARIA roles"}}},abstractrole:{impact:"serious",messages:{pass:function(e){return"Abstract roles are not used"},fail:function(e){return"Abstract roles cannot be directly used"}}},unsupportedrole:{impact:"critical",messages:{pass:function(e){return"ARIA role is supported"},fail:function(e){var t="The role used is not widely supported in screen readers and assistive technologies: ",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},"has-visible-text":{impact:"minor",messages:{pass:function(e){return"Element has text that is visible to screen readers"},fail:function(e){return"Element does not have text that is visible to screen readers"}}},"aria-valid-attr-value":{impact:"critical",messages:{pass:function(e){return"ARIA attribute values are valid"},fail:function(e){var t="Invalid ARIA attribute value"+(e.data&&1<e.data.length?"s":"")+":",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t},incomplete:function(e){var t="ARIA attribute"+(e.data&&1<e.data.length?"s":"")+" element ID does not exist on the page:",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},"aria-errormessage":{impact:"critical",messages:{pass:function(e){return"Uses a supported aria-errormessage technique"},fail:function(e){var t="aria-errormessage value"+(e.data&&1<e.data.length?"s":"")+" ",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" `"+n[r+=1];return t+="` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)"}}},"aria-valid-attr":{impact:"critical",messages:{pass:function(e){return"ARIA attribute name"+(e.data&&1<e.data.length?"s":"")+" are valid"},fail:function(e){var t="Invalid ARIA attribute name"+(e.data&&1<e.data.length?"s":"")+":",n=e.data;if(n)for(var r=-1,a=n.length-1;r<a;)t+=" "+n[r+=1];return t}}},caption:{impact:"critical",messages:{pass:function(e){return"The multimedia element has a captions track"},incomplete:function(e){return"Check that captions is available for the element"}}},"autocomplete-valid":{impact:"serious",messages:{pass:function(e){return"the autocomplete attribute is correctly formatted"},fail:function(e){return"the autocomplete attribute is incorrectly formatted"}}},"autocomplete-appropriate":{impact:"serious",messages:{pass:function(e){return"the autocomplete value is on an appropriate element"},fail:function(e){return"the autocomplete value is inappropriate for this type of input"}}},"avoid-inline-spacing":{impact:"serious",messages:{pass:function(e){return"No inline styles with '!important' that affect text spacing has been specified"},fail:function(e){return"Remove '!important' from inline style"+(e.data&&1<e.data.length?"s":"")+" "+e.data.join(", ")+", as overriding this is not supported by most browsers"}}},"is-on-screen":{impact:"serious",messages:{pass:function(e){return"Element is not visible"},fail:function(e){return"Element is visible"}}},"button-has-visible-text":{impact:"critical",messages:{pass:function(e){return"Element has inner text that is visible to screen readers"},fail:function(e){return"Element does not have inner text that is visible to screen readers"}}},"role-presentation":{impact:"minor",messages:{pass:function(e){return'Element\'s default semantics were overriden with role="presentation"'},fail:function(e){return'Element\'s default semantics were not overridden with role="presentation"'}}},"role-none":{impact:"minor",messages:{pass:function(e){return'Element\'s default semantics were overriden with role="none"'},fail:function(e){return'Element\'s default semantics were not overridden with role="none"'}}},"internal-link-present":{impact:"serious",messages:{pass:function(e){return"Valid skip link found"},fail:function(e){return"No valid skip link found"}}},"header-present":{impact:"serious",messages:{pass:function(e){return"Page has a header"},fail:function(e){return"Page does not have a header"}}},landmark:{impact:"serious",messages:{pass:function(e){return"Page has a landmark region"},fail:function(e){return"Page does not have a landmark region"}}},"group-labelledby":{impact:"critical",messages:{pass:function(e){return'Elements with the name "'+e.data.name+'" have both a shared label, and a unique label, referenced through aria-labelledby'},fail:function(e){var t="",n=e.data&&e.data.failureCode;return t+='Elements with the name "'+e.data.name+'" do not all have ',t+="no-shared-label"===n?"a shared label":"no-unique-label"===n?"a unique label":"both a shared label, and a unique label",t+=", referenced through aria-labelledby"}}},fieldset:{impact:"critical",messages:{pass:function(e){return"Element is contained in a fieldset"},fail:function(e){var t="",n=e.data&&e.data.failureCode;return t+="no-legend"===n?"Fieldset does not have a legend as its first child":"empty-legend"===n?"Legend does not have text that is visible to screen readers":"mixed-inputs"===n?"Fieldset contains unrelated inputs":"no-group-label"===n?"ARIA group does not have aria-label or aria-labelledby":"group-mixed-inputs"===n?"ARIA group contains unrelated inputs":"Element does not have a containing fieldset or ARIA group"}}},"color-contrast":{impact:"serious",messages:{pass:function(e){return"Element has sufficient color contrast of "+e.data.contrastRatio},fail:function(e){return"Element has insufficient color contrast of "+e.data.contrastRatio+" (foreground color: "+e.data.fgColor+", background color: "+e.data.bgColor+", font size: "+e.data.fontSize+", font weight: "+e.data.fontWeight+"). Expected contrast ratio of "+e.data.expectedContrastRatio},incomplete:{bgImage:"Element's background color could not be determined due to a background image",bgGradient:"Element's background color could not be determined due to a background gradient",imgNode:"Element's background color could not be determined because element contains an image node",bgOverlap:"Element's background color could not be determined because it is overlapped by another element",fgAlpha:"Element's foreground color could not be determined because of alpha transparency",elmPartiallyObscured:"Element's background color could not be determined because it's partially obscured by another element",elmPartiallyObscuring:"Element's background color could not be determined because it partially overlaps other elements",outsideViewport:"Element's background color could not be determined because it's outside the viewport",equalRatio:"Element has a 1:1 contrast ratio with the background",shortTextContent:"Element content is too short to determine if it is actual text content",default:"Unable to determine contrast ratio"}}},"css-orientation-lock":{impact:"serious",messages:{pass:function(e){return"Display is operable, and orientation lock does not exist"},fail:function(e){return"CSS Orientation lock is applied, and makes display inoperable"},incomplete:function(e){return"CSS Orientation lock cannot be determined"}}},"structured-dlitems":{impact:"serious",messages:{pass:function(e){return"When not empty, element has both <dt> and <dd> elements"},fail:function(e){return"When not empty, element does not have at least one <dt> element followed by at least one <dd> element"}}},"only-dlitems":{impact:"serious",messages:{pass:function(e){return"List element only has direct children that are allowed inside <dt> or <dd> elements"},fail:function(e){return"List element has direct children that are not allowed inside <dt> or <dd> elements"}}},dlitem:{impact:"serious",messages:{pass:function(e){return"Description list item has a <dl> parent element"},fail:function(e){return"Description list item does not have a <dl> parent element"}}},"doc-has-title":{impact:"serious",messages:{pass:function(e){return"Document has a non-empty <title> element"},fail:function(e){return"Document does not have a non-empty <title> element"}}},"duplicate-id-active":{impact:"serious",messages:{pass:function(e){return"Document has no active elements that share the same id attribute"},fail:function(e){return"Document has active elements with the same id attribute: "+e.data}}},"duplicate-id-aria":{impact:"critical",messages:{pass:function(e){return"Document has no elements referenced with ARIA or labels that share the same id attribute"},fail:function(e){return"Document has multiple elements referenced with ARIA with the same id attribute: "+e.data}}},"duplicate-id":{impact:"minor",messages:{pass:function(e){return"Document has no static elements that share the same id attribute"},fail:function(e){return"Document has multiple static elements with the same id attribute"}}},"has-widget-role":{impact:"minor",messages:{pass:function(e){return"Element has a widget role."},fail:function(e){return"Element does not have a widget role."}}},"valid-scrollable-semantics":{impact:"minor",messages:{pass:function(e){return"Element has valid semantics for an element in the focus order."},fail:function(e){return"Element has invalid semantics for an element in the focus order."}}},"multiple-label":{impact:"moderate",messages:{pass:function(e){return"Form field does not have multiple label elements"},fail:function(e){return"Multiple label elements is not widely supported in assistive technologies"}}},"frame-tested":{impact:"critical",messages:{pass:function(e){return"The iframe was tested with axe-core"},fail:function(e){return"The iframe could not be tested with axe-core"},incomplete:function(e){return"The iframe still has to be tested with axe-core"}}},"unique-frame-title":{impact:"serious",messages:{pass:function(e){return"Element's title attribute is unique"},fail:function(e){return"Element's title attribute is not unique"}}},"heading-order":{impact:"moderate",messages:{pass:function(e){return"Heading order valid"},fail:function(e){return"Heading order invalid"}}},"hidden-content":{impact:"minor",messages:{pass:function(e){return"All content on the page has been analyzed."},fail:function(e){return"There were problems analyzing the content on this page."},incomplete:function(e){return"There is hidden content on the page that was not analyzed. You will need to trigger the display of this content in order to analyze it."}}},"has-lang":{impact:"serious",messages:{pass:function(e){return"The <html> element has a lang attribute"},fail:function(e){return"The <html> element does not have a lang attribute"}}},"valid-lang":{impact:"serious",messages:{pass:function(e){return"Value of lang attribute is included in the list of valid languages"},fail:function(e){return"Value of lang attribute not included in the list of valid languages"}}},"xml-lang-mismatch":{impact:"moderate",messages:{pass:function(e){return"Lang and xml:lang attributes have the same base language"},fail:function(e){return"Lang and xml:lang attributes do not have the same base language"}}},"has-alt":{impact:"critical",messages:{pass:function(e){return"Element has an alt attribute"},fail:function(e){return"Element does not have an alt attribute"}}},"alt-space-value":{impact:"critical",messages:{pass:function(e){return"Element has a valid alt attribute value"},fail:function(e){return"Element has an alt attribute containing only a space character, which is not ignored by all screen readers"}}},"duplicate-img-label":{impact:"minor",messages:{pass:function(e){return"Element does not duplicate existing text in <img> alt text"},fail:function(e){return"Element contains <img> element with alt text that duplicates existing text"}}},"non-empty-if-present":{impact:"critical",messages:{pass:function(e){var t="Element ";return e.data?t+="has a non-empty value attribute":t+="does not have a value attribute",t},fail:function(e){return"Element has a value attribute and the value attribute is empty"}}},"non-empty-value":{impact:"critical",messages:{pass:function(e){return"Element has a non-empty value attribute"},fail:function(e){return"Element has no value attribute or the value attribute is empty"}}},"label-content-name-mismatch":{impact:"serious",messages:{pass:function(e){return"Element contains visible text as part of it's accessible name"},fail:function(e){return"Text inside the element is not included in the accessible name"}}},"title-only":{impact:"serious",messages:{pass:function(e){return"Form element does not solely use title attribute for its label"},fail:function(e){return"Only title used to generate label for form element"}}},"implicit-label":{impact:"critical",messages:{pass:function(e){return"Form element has an implicit (wrapped) <label>"},fail:function(e){return"Form element does not have an implicit (wrapped) <label>"}}},"explicit-label":{impact:"critical",messages:{pass:function(e){return"Form element has an explicit <label>"},fail:function(e){return"Form element does not have an explicit <label>"}}},"help-same-as-label":{impact:"minor",messages:{pass:function(e){return"Help text (title or aria-describedby) does not duplicate label text"},fail:function(e){return"Help text (title or aria-describedby) text is the same as the label text"}}},"hidden-explicit-label":{impact:"critical",messages:{pass:function(e){return"Form element has a visible explicit <label>"},fail:function(e){return"Form element has explicit <label> that is hidden"}}},"landmark-is-top-level":{impact:"moderate",messages:{pass:function(e){return"The "+e.data.role+" landmark is at the top level."},fail:function(e){return"The "+e.data.role+" landmark is contained in another landmark."}}},"page-no-duplicate-banner":{impact:"moderate",messages:{pass:function(e){return"Document does not have more than one banner landmark"},fail:function(e){return"Document has more than one banner landmark"}}},"page-no-duplicate-contentinfo":{impact:"moderate",messages:{pass:function(e){return"Document does not have more than one contentinfo landmark"},fail:function(e){return"Document has more than one contentinfo landmark"}}},"page-has-main":{impact:"moderate",messages:{pass:function(e){return"Document has at least one main landmark"},fail:function(e){return"Document does not have a main landmark"}}},"page-no-duplicate-main":{impact:"moderate",messages:{pass:function(e){return"Document does not have more than one main landmark"},fail:function(e){return"Document has more than one main landmark"}}},"landmark-is-unique":{impact:"moderate",messages:{pass:function(e){return"Landmarks must have a unique role or role/label/title (i.e. accessible name) combination"},fail:function(e){return"The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable"}}},"has-th":{impact:"serious",messages:{pass:function(e){return"Layout table does not use <th> elements"},fail:function(e){return"Layout table uses <th> elements"}}},"has-caption":{impact:"serious",messages:{pass:function(e){return"Layout table does not use <caption> element"},fail:function(e){return"Layout table uses <caption> element"}}},"has-summary":{impact:"serious",messages:{pass:function(e){return"Layout table does not use summary attribute"},fail:function(e){return"Layout table uses summary attribute"}}},"link-in-text-block":{impact:"serious",messages:{pass:function(e){return"Links can be distinguished from surrounding text in some way other than by color"},fail:function(e){return"Links need to be distinguished from surrounding text in some way other than by color"},incomplete:{bgContrast:"Element's contrast ratio could not be determined. Check for a distinct hover/focus style",bgImage:"Element's contrast ratio could not be determined due to a background image",bgGradient:"Element's contrast ratio could not be determined due to a background gradient",imgNode:"Element's contrast ratio could not be determined because element contains an image node",bgOverlap:"Element's contrast ratio could not be determined because of element overlap",default:"Unable to determine contrast ratio"}}},"focusable-no-name":{impact:"serious",messages:{pass:function(e){return"Element is not in tab order or has accessible text"},fail:function(e){return"Element is in tab order and does not have accessible text"}}},"only-listitems":{impact:"serious",messages:{pass:function(e){return"List element only has direct children that are allowed inside <li> elements"},fail:function(e){return"List element has direct children that are not allowed inside <li> elements"}}},listitem:{impact:"serious",messages:{pass:function(e){return'List item has a <ul>, <ol> or role="list" parent element'},fail:function(e){return'List item does not have a <ul>, <ol> or role="list" parent element'}}},"meta-refresh":{impact:"critical",messages:{pass:function(e){return"<meta> tag does not immediately refresh the page"},fail:function(e){return"<meta> tag forces timed refresh of page"}}},"meta-viewport-large":{impact:"minor",messages:{pass:function(e){return"<meta> tag does not prevent significant zooming on mobile devices"},fail:function(e){return"<meta> tag limits zooming on mobile devices"}}},"meta-viewport":{impact:"critical",messages:{pass:function(e){return"<meta> tag does not disable zooming on mobile devices"},fail:function(e){return e.data+" on <meta> tag disables zooming on mobile devices"}}},"p-as-heading":{impact:"serious",messages:{pass:function(e){return"<p> elements are not styled as headings"},fail:function(e){return"Heading elements should be used instead of styled p elements"}}},"page-has-heading-one":{impact:"moderate",messages:{pass:function(e){return"Page has at least one level-one heading"},fail:function(e){return"Page must have a level-one heading"}}},region:{impact:"moderate",messages:{pass:function(e){return"All page content is contained by landmarks"},fail:function(e){return"Some page content is not contained by landmarks"}}},"html5-scope":{impact:"moderate",messages:{pass:function(e){return"Scope attribute is only used on table header elements (<th>)"},fail:function(e){return"In HTML 5, scope attributes may only be used on table header elements (<th>)"}}},"scope-value":{impact:"critical",messages:{pass:function(e){return"Scope attribute is used correctly"},fail:function(e){return"The value of the scope attribute may only be 'row' or 'col'"}}},"focusable-content":{impact:"moderate",messages:{pass:function(e){return"Element contains focusable elements"},fail:function(e){return"Element should have focusable content"}}},"focusable-element":{impact:"moderate",messages:{pass:function(e){return"Element is focusable"},fail:function(e){return"Element should be focusable"}}},exists:{impact:"minor",messages:{pass:function(e){return"Element does not exist"},fail:function(e){return"Element exists"}}},"skip-link":{impact:"moderate",messages:{pass:function(e){return"Skip link target exists"},incomplete:function(e){return"Skip link target should become visible on activation"},fail:function(e){return"No skip link target"}}},tabindex:{impact:"serious",messages:{pass:function(e){return"Element does not have a tabindex greater than 0"},fail:function(e){return"Element has a tabindex greater than 0"}}},"same-caption-summary":{impact:"minor",messages:{pass:function(e){return"Content of summary attribute and <caption> are not duplicated"},fail:function(e){return"Content of summary attribute and <caption> element are identical"}}},"caption-faked":{impact:"serious",messages:{pass:function(e){return"The first row of a table is not used as a caption"},fail:function(e){return"The first row of the table should be a caption instead of a table cell"}}},"td-has-header":{impact:"critical",messages:{pass:function(e){return"All non-empty data cells have table headers"},fail:function(e){return"Some non-empty data cells do not have table headers"}}},"td-headers-attr":{impact:"serious",messages:{pass:function(e){return"The headers attribute is exclusively used to refer to other cells in the table"},fail:function(e){return"The headers attribute is not exclusively used to refer to other cells in the table"}}},"th-has-data-cells":{impact:"serious",messages:{pass:function(e){return"All table header cells refer to data cells"},fail:function(e){return"Not all table header cells refer to data cells"},incomplete:function(e){return"Table data cells are missing or empty"}}},description:{impact:"critical",messages:{pass:function(e){return"The multimedia element has an audio description track"},incomplete:function(e){return"Check that audio description is available for the element"}}}},failureSummaries:{any:{failureMessage:function(e){var t="Fix any of the following:",n=e;if(n)for(var r=-1,a=n.length-1;r<a;)t+="\n  "+n[r+=1].split("\n").join("\n  ");return t}},none:{failureMessage:function(e){var t="Fix all of the following:",n=e;if(n)for(var r=-1,a=n.length-1;r<a;)t+="\n  "+n[r+=1].split("\n").join("\n  ");return t}}},incompleteFallbackMessage:function(e){return"axe couldn't tell the reason. Time to break out the element inspector!"}},rules:[{id:"accesskeys",selector:"[accesskey]",excludeHidden:!1,tags:["best-practice","cat.keyboard"],all:[],any:[],none:["accesskeys"]},{id:"area-alt",selector:"map area[href]",excludeHidden:!1,tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["non-empty-alt","non-empty-title","aria-label","aria-labelledby"],none:[]},{id:"aria-allowed-attr",matches:function(e,t,n){var r=/^aria-/;if(e.hasAttributes())for(var a=axe.utils.getNodeAttributes(e),o=0,i=a.length;o<i;o++)if(r.test(a[o].name))return!0;return!1},tags:["cat.aria","wcag2a","wcag412"],all:[],any:["aria-allowed-attr"],none:["aria-unsupported-attr"]},{id:"aria-allowed-role",excludeHidden:!1,selector:"[role]",matches:function(e,t,n){return null!==axe.commons.aria.getRole(e,{noImplicit:!0,dpub:!0,fallback:!0})},tags:["cat.aria","best-practice"],all:[],any:[{options:{allowImplicit:!0,ignoredTags:[]},id:"aria-allowed-role"}],none:[]},{id:"aria-dpub-role-fallback",selector:"[role]",matches:function(e,t,n){var r=e.getAttribute("role");return["doc-backlink","doc-biblioentry","doc-biblioref","doc-cover","doc-endnote","doc-glossref","doc-noteref"].includes(r)},tags:["cat.aria","wcag2a","wcag131"],all:["implicit-role-fallback"],any:[],none:[]},{id:"aria-hidden-body",selector:"body",excludeHidden:!1,tags:["cat.aria","wcag2a","wcag412"],all:[],any:["aria-hidden-body"],none:[]},{id:"aria-hidden-focus",selector:'[aria-hidden="true"]',matches:function(e,t,n){var r=axe.commons.dom.getComposedParent;return function e(t){return!t||"true"!==t.getAttribute("aria-hidden")&&e(r(t))}(r(e))},excludeHidden:!1,tags:["cat.name-role-value","wcag2a","wcag412","wcag131"],all:["focusable-disabled","focusable-not-tabbable"],any:[],none:[]},{id:"aria-input-field-name",selector:'[role="combobox"], [role="listbox"], [role="searchbox"], [role="slider"], [role="spinbutton"], [role="textbox"]',matches:function(e,t,n){var r=axe.commons.aria,a=e.nodeName.toUpperCase(),o=r.getRole(e,{noImplicit:!0});return("AREA"!==a||!e.getAttribute("href"))&&(!["INPUT","SELECT","TEXTAREA"].includes(a)&&("IMG"!==a&&("img"!==o||"SVG"===a)&&("BUTTON"!==a&&"button"!==o&&("combobox"!==o||!axe.utils.querySelectorAll(t,'input:not([type="hidden"])').length))))},tags:["wcag2a","wcag412"],all:[],any:["aria-label","aria-labelledby","non-empty-title"],none:["no-implicit-explicit-label"]},{id:"aria-required-attr",selector:"[role]",tags:["cat.aria","wcag2a","wcag412"],all:[],any:["aria-required-attr"],none:[]},{id:"aria-required-children",selector:"[role]",tags:["cat.aria","wcag2a","wcag131"],all:[],any:[{options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","table","tablist","tree","treegrid","rowgroup"]},id:"aria-required-children"}],none:[]},{id:"aria-required-parent",selector:"[role]",tags:["cat.aria","wcag2a","wcag131"],all:[],any:["aria-required-parent"],none:[]},{id:"aria-roles",selector:"[role]",tags:["cat.aria","wcag2a","wcag412"],all:[],any:[],none:["invalidrole","abstractrole","unsupportedrole"]},{id:"aria-toggle-field-name",selector:'[role="checkbox"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="radio"], [role="switch"]',matches:function(e,t,n){var r=axe.commons.aria,a=e.nodeName.toUpperCase(),o=r.getRole(e,{noImplicit:!0});return("AREA"!==a||!e.getAttribute("href"))&&(!["INPUT","SELECT","TEXTAREA"].includes(a)&&("IMG"!==a&&("img"!==o||"SVG"===a)&&("BUTTON"!==a&&"button"!==o&&("combobox"!==o||!axe.utils.querySelectorAll(t,'input:not([type="hidden"])').length))))},tags:["wcag2a","wcag412"],all:[],any:["aria-label","aria-labelledby","non-empty-title","has-visible-text"],none:["no-implicit-explicit-label"]},{id:"aria-valid-attr-value",matches:function(e,t,n){var r=/^aria-/;if(e.hasAttributes())for(var a=axe.utils.getNodeAttributes(e),o=0,i=a.length;o<i;o++)if(r.test(a[o].name))return!0;return!1},tags:["cat.aria","wcag2a","wcag412"],all:[{options:[],id:"aria-valid-attr-value"},"aria-errormessage"],any:[],none:[]},{id:"aria-valid-attr",matches:function(e,t,n){var r=/^aria-/;if(e.hasAttributes())for(var a=axe.utils.getNodeAttributes(e),o=0,i=a.length;o<i;o++)if(r.test(a[o].name))return!0;return!1},tags:["cat.aria","wcag2a","wcag412"],all:[],any:[{options:[],id:"aria-valid-attr"}],none:[]},{id:"audio-caption",selector:"audio",enabled:!1,excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag121","section508","section508.22.a"],all:[],any:[],none:["caption"]},{id:"autocomplete-valid",matches:function(e,t,n){var r=axe.commons,a=r.text,o=r.aria,i=r.dom,u=t.attr("autocomplete");if(!u||""===a.sanitize(u))return!1;var s=t.props.nodeName;if(!1===["textarea","input","select"].includes(s))return!1;if("input"===s&&["submit","reset","button","hidden"].includes(t.props.type))return!1;var l=t.attr("aria-disabled")||"false";if(t.hasAttr("disabled")||"true"===l.toLowerCase())return!1;var c=t.attr("role"),d=t.attr("tabindex");if("-1"===d&&c){var m=o.lookupTable.role[c];if(void 0===m||"widget"!==m.type)return!1}return!("-1"===d&&t.actualNode&&!i.isVisible(t.actualNode,!1)&&!i.isVisible(t.actualNode,!0))},tags:["cat.forms","wcag21aa","wcag135"],all:["autocomplete-valid","autocomplete-appropriate"],any:[],none:[]},{id:"avoid-inline-spacing",selector:"[style]",tags:["wcag21aa","wcag1412"],all:["avoid-inline-spacing"],any:[],none:[]},{id:"blink",selector:"blink",excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag222","section508","section508.22.j"],all:[],any:[],none:["is-on-screen"]},{id:"button-name",selector:'button, [role="button"]',tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a"],all:[],any:["button-has-visible-text","aria-label","aria-labelledby","role-presentation","role-none","non-empty-title"],none:[]},{id:"bypass",selector:"html",pageLevel:!0,matches:function(e,t,n){return!!e.querySelector("a[href]")},tags:["cat.keyboard","wcag2a","wcag241","section508","section508.22.o"],all:[],any:["internal-link-present","header-present","landmark"],none:[]},{id:"checkboxgroup",selector:"input[type=checkbox][name]",tags:["cat.forms","best-practice"],all:[],any:["group-labelledby","fieldset"],none:[]},{id:"color-contrast",matches:function(e,t,n){var r=e.nodeName.toUpperCase(),a=e.type;if("true"===e.getAttribute("aria-disabled")||axe.commons.dom.findUpVirtual(t,'[aria-disabled="true"]'))return!1;if("INPUT"===r)return-1===["hidden","range","color","checkbox","radio","image"].indexOf(a)&&!e.disabled;if("SELECT"===r)return!!e.options.length&&!e.disabled;if("TEXTAREA"===r)return!e.disabled;if("OPTION"===r)return!1;if("BUTTON"===r&&e.disabled||axe.commons.dom.findUpVirtual(t,"button[disabled]"))return!1;if("FIELDSET"===r&&e.disabled||axe.commons.dom.findUpVirtual(t,"fieldset[disabled]"))return!1;var o=axe.commons.dom.findUpVirtual(t,"label");if("LABEL"===r||o){var i=e,u=t;o&&(i=o,u=axe.utils.getNodeFromTree(o));var s=axe.commons.dom.getRootNode(i);if((l=i.htmlFor&&s.getElementById(i.htmlFor))&&l.disabled)return!1;if((l=axe.utils.querySelectorAll(u,'input:not([type="hidden"]):not([type="image"]):not([type="button"]):not([type="submit"]):not([type="reset"]), select, textarea')).length&&l[0].actualNode.disabled)return!1}if(e.getAttribute("id")){var l,c=axe.utils.escapeSelector(e.getAttribute("id"));if((l=axe.commons.dom.getRootNode(e).querySelector("[aria-labelledby~="+c+"]"))&&l.disabled)return!1}if(""===axe.commons.text.visibleVirtual(t,!1,!0))return!1;var d,m,p=document.createRange(),f=t.children,h=f.length;for(m=0;m<h;m++)3===(d=f[m]).actualNode.nodeType&&""!==axe.commons.text.sanitize(d.actualNode.nodeValue)&&p.selectNodeContents(d.actualNode);var b=p.getClientRects();for(h=b.length,m=0;m<h;m++)if(axe.commons.dom.visuallyOverlaps(b[m],e))return!0;return!1},excludeHidden:!1,options:{noScroll:!1},tags:["cat.color","wcag2aa","wcag143"],all:[],any:["color-contrast"],none:[]},{id:"css-orientation-lock",selector:"html",tags:["cat.structure","wcag134","wcag21aa","experimental"],all:["css-orientation-lock"],any:[],none:[],preload:!0},{id:"definition-list",selector:"dl",matches:function(e,t,n){return!e.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:["structured-dlitems","only-dlitems"]},{id:"dlitem",selector:"dd, dt",matches:function(e,t,n){return!e.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:["dlitem"],none:[]},{id:"document-title",selector:"html",matches:function(e,t,n){return e.ownerDocument.defaultView.self===e.ownerDocument.defaultView.top},tags:["cat.text-alternatives","wcag2a","wcag242"],all:[],any:["doc-has-title"],none:[]},{id:"duplicate-id-active",selector:"[id]",matches:function(e,t,n){var r=axe.commons,a=r.dom,o=r.aria,i=e.getAttribute("id").trim(),u='*[id="'.concat(axe.utils.escapeSelector(i),'"]');return Array.from(a.getRootNode(e).querySelectorAll(u)).some(a.isFocusable)&&!o.isAccessibleRef(e)},excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],all:[],any:["duplicate-id-active"],none:[]},{id:"duplicate-id-aria",selector:"[id]",matches:function(e,t,n){return axe.commons.aria.isAccessibleRef(e)},excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],all:[],any:["duplicate-id-aria"],none:[]},{id:"duplicate-id",selector:"[id]",matches:function(e,t,n){var r=axe.commons,a=r.dom,o=r.aria,i=e.getAttribute("id").trim(),u='*[id="'.concat(axe.utils.escapeSelector(i),'"]');return Array.from(a.getRootNode(e).querySelectorAll(u)).every(function(e){return!a.isFocusable(e)})&&!o.isAccessibleRef(e)},excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],all:[],any:["duplicate-id"],none:[]},{id:"empty-heading",selector:'h1, h2, h3, h4, h5, h6, [role="heading"]',matches:function(e,t,n){var r;return e.hasAttribute("role")&&(r=e.getAttribute("role").split(/\s+/i).filter(axe.commons.aria.isValidRole)),r&&0<r.length?r.includes("heading"):"heading"===axe.commons.aria.implicitRole(e)},tags:["cat.name-role-value","best-practice"],all:[],any:["has-visible-text"],none:[]},{id:"focus-order-semantics",selector:"div, h1, h2, h3, h4, h5, h6, [role=heading], p, span",matches:function(e,t,n){return axe.commons.dom.insertedIntoFocusOrder(e)},tags:["cat.keyboard","best-practice","experimental"],all:[],any:[{options:[],id:"has-widget-role"},{options:[],id:"valid-scrollable-semantics"}],none:[]},{id:"form-field-multiple-labels",selector:"input, select, textarea",matches:function(e,t,n){if("input"!==e.nodeName.toLowerCase()||!1===e.hasAttribute("type"))return!0;var r=e.getAttribute("type").toLowerCase();return!1===["hidden","image","button","submit","reset"].includes(r)},tags:["cat.forms","wcag2a","wcag332"],all:[],any:[],none:["multiple-label"]},{id:"frame-tested",selector:"frame, iframe",tags:["cat.structure","review-item","best-practice"],all:[{options:{isViolation:!1},id:"frame-tested"}],any:[],none:[]},{id:"frame-title-unique",selector:"frame[title], iframe[title]",matches:function(e,t,n){var r=e.getAttribute("title");return!(!r||!axe.commons.text.sanitize(r).trim())},tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:["unique-frame-title"]},{id:"frame-title",selector:"frame, iframe",tags:["cat.text-alternatives","wcag2a","wcag241","wcag412","section508","section508.22.i"],all:[],any:["aria-label","aria-labelledby","non-empty-title","role-presentation","role-none"],none:[]},{id:"heading-order",selector:"h1, h2, h3, h4, h5, h6, [role=heading]",matches:function(e,t,n){var r;return e.hasAttribute("role")&&(r=e.getAttribute("role").split(/\s+/i).filter(axe.commons.aria.isValidRole)),r&&0<r.length?r.includes("heading"):"heading"===axe.commons.aria.implicitRole(e)},tags:["cat.semantics","best-practice"],all:[],any:["heading-order"],none:[]},{id:"hidden-content",selector:"*",excludeHidden:!1,tags:["cat.structure","experimental","review-item","best-practice"],all:[],any:["hidden-content"],none:[]},{id:"html-has-lang",selector:"html",matches:function(e,t,n){return e.ownerDocument.defaultView.self===e.ownerDocument.defaultView.top},tags:["cat.language","wcag2a","wcag311"],all:[],any:["has-lang"],none:[]},{id:"html-lang-valid",selector:"html[lang], html[xml\\:lang]",tags:["cat.language","wcag2a","wcag311"],all:[],any:[],none:["valid-lang"]},{id:"html-xml-lang-mismatch",selector:"html[lang][xml\\:lang]",matches:function(e,t,n){var r=axe.utils.getBaseLang,a=r(e.getAttribute("lang")),o=r(e.getAttribute("xml:lang"));return axe.utils.validLangs().includes(a)&&axe.utils.validLangs().includes(o)},tags:["cat.language","wcag2a","wcag311"],all:["xml-lang-mismatch"],any:[],none:[]},{id:"image-alt",selector:"img",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["has-alt","aria-label","aria-labelledby","non-empty-title","role-presentation","role-none"],none:["alt-space-value"]},{id:"image-redundant-alt",selector:"img",tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:["duplicate-img-label"]},{id:"input-button-name",selector:'input[type="button"], input[type="submit"], input[type="reset"]',tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a"],all:[],any:["non-empty-if-present","non-empty-value","aria-label","aria-labelledby","role-presentation","role-none","non-empty-title"],none:[]},{id:"input-image-alt",selector:'input[type="image"]',tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["non-empty-alt","aria-label","aria-labelledby","non-empty-title"],none:[]},{id:"label-content-name-mismatch",matches:function(e,t,n){var r=axe.commons,a=r.aria,o=r.text,i=a.getRole(e);return!!i&&(!!a.lookupTable.rolesOfType.widget.includes(i)&&(!!a.getRolesWithNameFromContents().includes(i)&&(!(!o.sanitize(a.arialabelText(e))&&!o.sanitize(a.arialabelledbyText(e)))&&!!o.sanitize(o.visibleVirtual(t)))))},tags:["wcag21a","wcag253","experimental"],all:[],any:["label-content-name-mismatch"],none:[]},{id:"label-title-only",selector:"input, select, textarea",matches:function(e,t,n){if("input"!==e.nodeName.toLowerCase()||!1===e.hasAttribute("type"))return!0;var r=e.getAttribute("type").toLowerCase();return!1===["hidden","image","button","submit","reset"].includes(r)},tags:["cat.forms","best-practice"],all:[],any:[],none:["title-only"]},{id:"label",selector:"input, select, textarea",matches:function(e,t,n){if("input"!==e.nodeName.toLowerCase()||!1===e.hasAttribute("type"))return!0;var r=e.getAttribute("type").toLowerCase();return!1===["hidden","image","button","submit","reset"].includes(r)},tags:["cat.forms","wcag2a","wcag332","wcag131","section508","section508.22.n"],all:[],any:["aria-label","aria-labelledby","implicit-label","explicit-label","non-empty-title"],none:["help-same-as-label","hidden-explicit-label"]},{id:"landmark-banner-is-top-level",selector:"header:not([role]), [role=banner]",matches:function(e,t,n){return e.hasAttribute("role")||!axe.commons.dom.findUpVirtual(t,"article, aside, main, nav, section")},tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-complementary-is-top-level",selector:"aside:not([role]), [role=complementary]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-contentinfo-is-top-level",selector:"footer:not([role]), [role=contentinfo]",matches:function(e,t,n){return e.hasAttribute("role")||!axe.commons.dom.findUpVirtual(t,"article, aside, main, nav, section")},tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-main-is-top-level",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-no-duplicate-banner",selector:"html",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"header:not([role]), [role=banner]",nativeScopeFilter:"article, aside, main, nav, section"},id:"page-no-duplicate-banner"}],none:[]},{id:"landmark-no-duplicate-contentinfo",selector:"html",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"footer:not([role]), [role=contentinfo]",nativeScopeFilter:"article, aside, main, nav, section"},id:"page-no-duplicate-contentinfo"}],none:[]},{id:"landmark-one-main",selector:"html",tags:["cat.semantics","best-practice"],all:[{options:{selector:"main:not([role]), [role='main']"},id:"page-has-main"},{options:{selector:"main:not([role]), [role='main']"},id:"page-no-duplicate-main"}],any:[],none:[]},{id:"landmark-unique",selector:"[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section",tags:["cat.semantics","best-practice"],matches:function(e,t,n){var o=["article","aside","main","nav","section"].join(",");return function(e){var t=e.actualNode,n=axe.commons.aria.getRolesByType("landmark"),r=axe.commons.aria.getRole(t);if(!r)return!1;var a=t.nodeName.toUpperCase();return"HEADER"===a||"FOOTER"===a?function(e){return!axe.commons.dom.findUpVirtual(e,o)}(e):"SECTION"!==a&&"FORM"!==a?0<=n.indexOf(r)||"region"===r:!!axe.commons.text.accessibleTextVirtual(e)}(t)&&axe.commons.dom.isVisible(e,!0)},all:[],any:["landmark-is-unique"],none:[]},{id:"layout-table",selector:"table",matches:function(e,t,n){var r=(e.getAttribute("role")||"").toLowerCase();return!(("presentation"===r||"none"===r)&&!axe.commons.dom.isFocusable(e)||axe.commons.table.isDataTable(e))},tags:["cat.semantics","wcag2a","wcag131"],all:[],any:[],none:["has-th","has-caption","has-summary"]},{id:"link-in-text-block",selector:"a[href], [role=link]",matches:function(e,t,n){var r=axe.commons.text.sanitize(e.textContent),a=e.getAttribute("role");return(!a||"link"===a)&&(!!r&&(!!axe.commons.dom.isVisible(e,!1)&&axe.commons.dom.isInTextBlock(e)))},excludeHidden:!1,tags:["cat.color","experimental","wcag2a","wcag141"],all:["link-in-text-block"],any:[],none:[]},{id:"link-name",selector:"a[href], [role=link][href]",matches:function(e,t,n){return"button"!==e.getAttribute("role")},tags:["cat.name-role-value","wcag2a","wcag412","wcag244","section508","section508.22.a"],all:[],any:["has-visible-text","aria-label","aria-labelledby","role-presentation","role-none"],none:["focusable-no-name"]},{id:"list",selector:"ul, ol",matches:function(e,t,n){return!e.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:["only-listitems"]},{id:"listitem",selector:"li",matches:function(e,t,n){return!e.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:["listitem"],none:[]},{id:"marquee",selector:"marquee",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag222"],all:[],any:[],none:["is-on-screen"]},{id:"meta-refresh",selector:'meta[http-equiv="refresh"]',excludeHidden:!1,tags:["cat.time","wcag2a","wcag2aaa","wcag221","wcag224","wcag325"],all:[],any:["meta-refresh"],none:[]},{id:"meta-viewport-large",selector:'meta[name="viewport"]',excludeHidden:!1,tags:["cat.sensory-and-visual-cues","best-practice"],all:[],any:[{options:{scaleMinimum:5,lowerBound:2},id:"meta-viewport-large"}],none:[]},{id:"meta-viewport",selector:'meta[name="viewport"]',excludeHidden:!1,tags:["cat.sensory-and-visual-cues","wcag2aa","wcag144"],all:[],any:[{options:{scaleMinimum:2},id:"meta-viewport"}],none:[]},{id:"object-alt",selector:"object",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["has-visible-text","aria-label","aria-labelledby","non-empty-title","role-presentation","role-none"],none:[]},{id:"p-as-heading",selector:"p",matches:function(e,t,n){var r=Array.from(e.parentNode.childNodes),a=e.textContent.trim();return!(0===a.length||2<=(a.match(/[.!?:;](?![.!?:;])/g)||[]).length)&&0!==r.slice(r.indexOf(e)+1).filter(function(e){return"P"===e.nodeName.toUpperCase()&&""!==e.textContent.trim()}).length},tags:["cat.semantics","wcag2a","wcag131","experimental"],all:[{options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}]},id:"p-as-heading"}],any:[],none:[]},{id:"page-has-heading-one",selector:"html",tags:["cat.semantics","best-practice"],all:[{options:{selector:'h1:not([role]), [role="heading"][aria-level="1"]'},id:"page-has-heading-one"}],any:[],none:[]},{id:"radiogroup",selector:"input[type=radio][name]",tags:["cat.forms","best-practice"],all:[],any:["group-labelledby","fieldset"],none:[]},{id:"region",selector:"html",pageLevel:!0,tags:["cat.keyboard","best-practice"],all:[],any:["region"],none:[]},{id:"role-img-alt",selector:"[role='img']:not(svg):not(img):not(area):not(input):not(object)",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["aria-label","aria-labelledby","non-empty-title"],none:[]},{id:"scope-attr-valid",selector:"td[scope], th[scope]",tags:["cat.tables","best-practice"],all:["html5-scope","scope-value"],any:[],none:[]},{id:"scrollable-region-focusable",matches:function(e,t,n){var r=axe.utils.querySelectorAll,a=axe.commons.dom.hasContentVirtual;return!1!=!!axe.utils.getScroll(e,13)&&!!r(t,"*").some(function(e){return a(e,!0,!0)})},tags:["wcag2a","wcag211"],all:[],any:["focusable-content","focusable-element"],none:[]},{id:"server-side-image-map",selector:"img[ismap]",tags:["cat.text-alternatives","wcag2a","wcag211","section508","section508.22.f"],all:[],any:[],none:["exists"]},{id:"skip-link",selector:'a[href^="#"], a[href^="/#"]',matches:function(e,t,n){return axe.commons.dom.isSkipLink(e)},tags:["cat.keyboard","best-practice"],all:[],any:["skip-link"],none:[]},{id:"tabindex",selector:"[tabindex]",tags:["cat.keyboard","best-practice"],all:[],any:["tabindex"],none:[]},{id:"table-duplicate-name",selector:"table",tags:["cat.tables","best-practice"],all:[],any:[],none:["same-caption-summary"]},{id:"table-fake-caption",selector:"table",matches:function(e,t,n){return axe.commons.table.isDataTable(e)},tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g"],all:["caption-faked"],any:[],none:[]},{id:"td-has-header",selector:"table",matches:function(e,t,n){if(axe.commons.table.isDataTable(e)){var r=axe.commons.table.toArray(e);return 3<=r.length&&3<=r[0].length&&3<=r[1].length&&3<=r[2].length}return!1},tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g"],all:["td-has-header"],any:[],none:[]},{id:"td-headers-attr",selector:"table",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g"],all:["td-headers-attr"],any:[],none:[]},{id:"th-has-data-cells",selector:"table",matches:function(e,t,n){return axe.commons.table.isDataTable(e)},tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g"],all:["th-has-data-cells"],any:[],none:[]},{id:"valid-lang",selector:"[lang], [xml\\:lang]",matches:function(e,t,n){return"html"!==e.nodeName.toLowerCase()},tags:["cat.language","wcag2aa","wcag312"],all:[],any:[],none:["valid-lang"]},{id:"video-caption",selector:"video",excludeHidden:!1,tags:["cat.text-alternatives","wcag2a","wcag122","section508","section508.22.a"],all:[],any:[],none:["caption"]},{id:"video-description",selector:"video",excludeHidden:!1,tags:["cat.text-alternatives","wcag2aa","wcag125","section508","section508.22.b"],all:[],any:[],none:["description"]}],checks:[{id:"abstractrole",evaluate:function(e,t,n,r){return"abstract"===axe.commons.aria.getRoleType(e.getAttribute("role"))}},{id:"aria-allowed-attr",evaluate:function(e,t,n,r){t=t||{};var a,o,i,u=[],s=e.getAttribute("role"),l=axe.utils.getNodeAttributes(e);if(s=s||axe.commons.aria.implicitRole(e),i=axe.commons.aria.allowedAttr(s),Array.isArray(t[s])&&(i=axe.utils.uniqueArray(t[s].concat(i))),s&&i)for(var c=0,d=l.length;c<d;c++)o=(a=l[c]).name,axe.commons.aria.validateAttr(o)&&!i.includes(o)&&u.push(o+'="'+a.nodeValue+'"');return!u.length||(this.data(u),!1)}},{id:"aria-allowed-role",evaluate:function(e,t,n,r){var a=axe.commons.dom,o=t||{},i=o.allowImplicit,u=void 0===i||i,s=o.ignoredTags,l=void 0===s?[]:s,c=e.nodeName.toUpperCase();if(l.map(function(e){return e.toUpperCase()}).includes(c))return!0;var d=axe.commons.aria.getElementUnallowedRoles(e,u);if(d.length){if(this.data(d),!a.isVisible(e,!0))return;return!1}return!0},options:{allowImplicit:!0,ignoredTags:[]}},{id:"aria-hidden-body",evaluate:function(e,t,n,r){return"true"!==e.getAttribute("aria-hidden")}},{id:"aria-errormessage",evaluate:function(n,e,t,r){var a=axe.commons,o=a.aria,i=a.dom;e=Array.isArray(e)?e:[];var u=n.getAttribute("aria-errormessage"),s=n.hasAttribute("aria-errormessage"),l=i.getRootNode(n);return!(-1===e.indexOf(u)&&s&&!function(e){if(""===e.trim())return o.lookupTable.attributes["aria-errormessage"].allowEmpty;var t=e&&l.getElementById(e);return t?"alert"===t.getAttribute("role")||"assertive"===t.getAttribute("aria-live")||-1<axe.utils.tokenList(n.getAttribute("aria-describedby")||"").indexOf(e):void 0}(u))||(this.data(axe.utils.tokenList(u)),!1)}},{id:"has-widget-role",evaluate:function(e,t,n,r){var a=e.getAttribute("role");if(null===a)return!1;var o=axe.commons.aria.getRoleType(a);return"widget"===o||"composite"===o},options:[]},{id:"implicit-role-fallback",evaluate:function(e,t,n,r){var a=e.getAttribute("role");if(null===a||!axe.commons.aria.isValidRole(a))return!0;var o=axe.commons.aria.getRoleType(a);return axe.commons.aria.implicitRole(e)===o}},{id:"invalidrole",evaluate:function(e,t,n,r){return!axe.commons.aria.isValidRole(e.getAttribute("role"),{allowAbstract:!0})}},{id:"no-implicit-explicit-label",evaluate:function(e,t,n,r){var a=axe.commons,o=a.aria,i=a.text,u=o.getRole(e,{noImplicit:!0});this.data(u);var s=i.sanitize(i.labelText(n)).toLowerCase(),l=i.sanitize(i.accessibleText(e)).toLowerCase();return!(!l&&!s)&&(!((l||!s)&&l.includes(s))&&void 0)}},{id:"aria-required-attr",evaluate:function(e,t,n,r){t=t||{};var a=[],o=axe.commons.forms,i=o.isNativeTextbox,u=o.isNativeSelect,s=o.isAriaTextbox,l=o.isAriaListbox,c=o.isAriaCombobox,d=o.isAriaRange,m={"aria-valuenow":function(){return!(i(e)||u(e)||s(e)||l(e)||c(e)||d(e)&&e.hasAttribute("aria-valuenow"))}};if(e.hasAttributes()){var p=e.getAttribute("role"),f=axe.commons.aria.requiredAttr(p);if(Array.isArray(t[p])&&(f=axe.utils.uniqueArray(t[p],f)),p&&f)for(var h=0,b=f.length;h<b;h++){var g=f[h];e.getAttribute(g)||m[g]&&!m[g]()||a.push(g)}}return!a.length||(this.data(a),!1)}},{id:"aria-required-children",evaluate:function(e,t,m,n){var r=axe.commons.aria.requiredOwned,i=axe.commons.aria.implicitNodes,u=axe.utils.matchesSelector,p=axe.commons.dom.idrefs,a=t&&Array.isArray(t.reviewEmpty)?t.reviewEmpty:[];function f(e,t,n,r){if(null===e)return!1;var a=i(n),o=['[role="'+n+'"]'];return a&&(o=o.concat(a)),o=o.join(","),r&&u(e,o)||!!axe.utils.querySelectorAll(t,o)[0]}function h(e,t){var n,r;for(n=0,r=e.length;n<r;n++)if(null!==e[n]){var a=axe.utils.getNodeFromTree(e[n]);if(f(e[n],a,t,!0))return!0}return!1}var o=e.getAttribute("role"),s=r(o);if(!s)return!0;var l=!1,c=s.one;if(!c){l=!0;c=s.all}var d=function(e,t,n,r){var a,o=t.length,i=[],u=p(e,"aria-owns");for(a=0;a<o;a++){var s=t[a];if(f(e,m,s)||h(u,s)){if(!n)return null}else n&&i.push(s)}if("combobox"===r){var l=i.indexOf("textbox");0<=l&&"INPUT"===e.nodeName.toUpperCase()&&["text","search","email","url","tel"].includes(e.type)&&i.splice(l,1);var c=i.indexOf("listbox"),d=e.getAttribute("aria-expanded");0<=c&&(!d||"false"===d)&&i.splice(c,1)}return i.length?i:!n&&t.length?t:null}(e,c,l,o);return!d||(this.data(d),!(!a.includes(o)||0!==e.children.length||0!==p(e,"aria-owns").length)&&void 0)},options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","table","tablist","tree","treegrid","rowgroup"]}},{id:"aria-required-parent",evaluate:function(e,t,n,r){function u(e){return(axe.commons.aria.implicitNodes(e)||[]).concat('[role="'+e+'"]').join(",")}function a(e,t,n){var r,a,o=e.actualNode.getAttribute("role"),i=[];if(!(t=t||axe.commons.aria.requiredContext(o)))return null;for(r=0,a=t.length;r<a;r++){if(n&&axe.utils.matchesSelector(e.actualNode,u(t[r])))return null;if(axe.commons.dom.findUpVirtual(e,u(t[r])))return null;i.push(t[r])}return i}var o=a(n);if(!o)return!0;var i=function(e){for(var t=[],n=null;e;){if(e.getAttribute("id")){var r=axe.utils.escapeSelector(e.getAttribute("id"));(n=axe.commons.dom.getRootNode(e).querySelector("[aria-owns~=".concat(r,"]")))&&t.push(n)}e=e.parentElement}return t.length?t:null}(e);if(i)for(var s=0,l=i.length;s<l;s++)if(!(o=a(axe.utils.getNodeFromTree(i[s]),o,!0)))return!0;return this.data(o),!1}},{id:"aria-unsupported-attr",evaluate:function(o,e,t,n){var i=o.nodeName.toUpperCase(),u=axe.commons.aria.lookupTable,s=axe.commons.aria.getRole(o),r=Array.from(axe.utils.getNodeAttributes(o)).filter(function(e){var t=e.name,n=u.attributes[t];if(!axe.commons.aria.validateAttr(t))return!1;var r=n.unsupported;if("object"!==S(r))return!!r;var a=axe.commons.matches(o,r.exceptions);return Object.keys(u.evaluateRoleForElement).includes(i)?!u.evaluateRoleForElement[i]({node:o,role:s,out:a}):!a}).map(function(e){return e.name.toString()});return!!r.length&&(this.data(r),!0)}},{id:"unsupportedrole",evaluate:function(e,t,n,r){return axe.commons.aria.isUnsupportedRole(axe.commons.aria.getRole(e))}},{id:"aria-valid-attr-value",evaluate:function(e,t,n,r){t=Array.isArray(t)?t:[];for(var a=[],o=[],i=/^aria-/,u=axe.utils.getNodeAttributes(e),s=["aria-errormessage"],l={"aria-controls":function(){return"false"!==e.getAttribute("aria-expanded")&&"false"!==e.getAttribute("aria-selected")},"aria-owns":function(){return"false"!==e.getAttribute("aria-expanded")},"aria-describedby":function(){axe.commons.aria.validateAttrValue(e,"aria-describedby")||a.push('aria-describedby="'.concat(e.getAttribute("aria-describedby"),'"'))}},c=0,d=u.length;c<d;c++){var m=u[c],p=m.name;s.includes(p)||-1!==t.indexOf(p)||!i.test(p)||l[p]&&!l[p]()||axe.commons.aria.validateAttrValue(e,p)||o.push("".concat(p,'="').concat(m.nodeValue,'"'))}if(!a.length)return!o.length||(this.data(o),!1);this.data(a)},options:[]},{id:"aria-valid-attr",evaluate:function(e,t,n,r){t=Array.isArray(t)?t:[];for(var a,o=[],i=/^aria-/,u=axe.utils.getNodeAttributes(e),s=0,l=u.length;s<l;s++)a=u[s].name,-1===t.indexOf(a)&&i.test(a)&&!axe.commons.aria.validateAttr(a)&&o.push(a);return!o.length||(this.data(o),!1)},options:[]},{id:"valid-scrollable-semantics",evaluate:function(e,t,n,r){var a,o,i,u={ARTICLE:!0,ASIDE:!0,NAV:!0,SECTION:!0},s={application:!0,banner:!1,complementary:!0,contentinfo:!0,form:!0,main:!0,navigation:!0,region:!0,search:!1};return(o=(i=e).getAttribute("role"))&&s[o.toLowerCase()]||!1||(a=i.nodeName.toUpperCase(),u[a]||!1)},options:[]},{id:"color-contrast",evaluate:function(e,t,n,r){var a=axe.commons,o=a.dom,i=a.color,u=a.text;if(!o.isVisible(e,!1))return!0;var s,l=!!(t||{}).noScroll,c=[],d=i.getBackgroundColor(e,c,l),m=i.getForegroundColor(e,l),p=window.getComputedStyle(e),f=parseFloat(p.getPropertyValue("font-size")),h=p.getPropertyValue("font-weight"),b=-1!==["bold","bolder","600","700","800","900"].indexOf(h),g=i.hasValidContrastRatio(d,m,f,b),y=Math.floor(100*g.contrastRatio)/100;null===d&&(s=i.incompleteData.get("bgColor"));var v=1==y,D=1===u.visibleVirtual(n,!1,!0).length;v?s=i.incompleteData.set("bgColor","equalRatio"):D&&(s="shortTextContent");var w={fgColor:m?m.toHexString():void 0,bgColor:d?d.toHexString():void 0,contrastRatio:g?y:void 0,fontSize:"".concat((72*f/96).toFixed(1),"pt (").concat(f,"px)"),fontWeight:b?"bold":"normal",missingData:s,expectedContrastRatio:g.expectedContrastRatio+":1"};return this.data(w),null===m||null===d||v||D&&!g.isValid?(s=null,i.incompleteData.clear(),void this.relatedNodes(c)):(g.isValid||this.relatedNodes(c),g.isValid)}},{id:"link-in-text-block",evaluate:function(e,t,n,r){var a=axe.commons,o=a.color,i=a.dom;function u(e,t){var n=e.getRelativeLuminance(),r=t.getRelativeLuminance();return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}var s=["block","list-item","table","flex","grid","inline-block"];function l(e){var t=window.getComputedStyle(e).getPropertyValue("display");return-1!==s.indexOf(t)||"table-"===t.substr(0,6)}if(l(e))return!1;for(var c,d,m=i.getComposedParent(e);1===m.nodeType&&!l(m);)m=i.getComposedParent(m);if(this.relatedNodes([m]),o.elementIsDistinct(e,m))return!0;if(c=o.getForegroundColor(e),d=o.getForegroundColor(m),c&&d){var p,f=u(c,d);return 1===f||(3<=f?(axe.commons.color.incompleteData.set("fgColor","bgContrast"),this.data({missingData:axe.commons.color.incompleteData.get("fgColor")}),void axe.commons.color.incompleteData.clear()):(c=o.getBackgroundColor(e),d=o.getBackgroundColor(m),(!c||!d||3<=u(c,d))&&(p=c&&d?"bgContrast":axe.commons.color.incompleteData.get("bgColor"),axe.commons.color.incompleteData.set("fgColor",p),this.data({missingData:axe.commons.color.incompleteData.get("fgColor")}),void axe.commons.color.incompleteData.clear())))}}},{id:"autocomplete-appropriate",evaluate:function(e,t,n,r){if("input"!==n.props.nodeName)return!0;var a=["text","search","number"],o=["text","search","url"],i={bday:["text","search","date"],email:["text","search","email"],"cc-exp":["text","search","month"],"street-address":["text"],tel:["text","search","tel"],"cc-exp-month":a,"cc-exp-year":a,"transaction-amount":a,"bday-day":a,"bday-month":a,"bday-year":a,"new-password":["text","search","password"],"current-password":["text","search","password"],url:o,photo:o,impp:o};"object"===S(t)&&Object.keys(t).forEach(function(e){i[e]||(i[e]=[]),i[e]=i[e].concat(t[e])});var u=n.attr("autocomplete").split(/\s+/g).map(function(e){return e.toLowerCase()}),s=u[u.length-1];if(axe.commons.text.autocomplete.stateTerms.includes(s))return!0;var l=i[s],c=n.hasAttr("type")?axe.commons.text.sanitize(n.attr("type")).toLowerCase():"text";return c=axe.utils.validInputTypes().includes(c)?c:"text",void 0===l?"text"===c:l.includes(c)}},{id:"autocomplete-valid",evaluate:function(e,t,n,r){var a=n.attr("autocomplete")||"";return axe.commons.text.isValidAutocomplete(a,t)}},{id:"fieldset",evaluate:function(e,t,n,r){var o,i=this;function u(e,t){return axe.utils.toArray(e.querySelectorAll('select,textarea,button,input:not([name="'+t+'"]):not([type="hidden"])'))}var a={name:e.getAttribute("name"),type:e.getAttribute("type")},s=function(e){var t=axe.utils.escapeSelector(e.actualNode.name),n=axe.commons.dom.getRootNode(e.actualNode).querySelectorAll('input[type="'+axe.utils.escapeSelector(e.actualNode.type)+'"][name="'+t+'"]');if(n.length<2)return!0;var r=axe.commons.dom.findUpVirtual(e,"fieldset"),a=axe.commons.dom.findUpVirtual(e,'[role="group"]'+("radio"===e.actualNode.type?',[role="radiogroup"]':""));return a||r?r?function(e,t){var n=e.firstElementChild;if(!n||"LEGEND"!==n.nodeName.toUpperCase())return i.relatedNodes([e]),!(o="no-legend");if(!axe.commons.text.accessibleText(n))return i.relatedNodes([n]),!(o="empty-legend");var r=u(e,t);return!r.length||(i.relatedNodes(r),!(o="mixed-inputs"))}(r,t):function(e,t){var n=axe.commons.dom.idrefs(e,"aria-labelledby").some(function(e){return e&&axe.commons.text.accessibleText(e)}),r=e.getAttribute("aria-label");if(!(n||r&&axe.commons.text.sanitize(r)))return i.relatedNodes(e),!(o="no-group-label");var a=u(e,t);return!a.length||(i.relatedNodes(a),!(o="group-mixed-inputs"))}(a,t):(o="no-group",i.relatedNodes(function(e,t){return axe.utils.toArray(e).filter(function(e){return e!==t})}(n,e.actualNode)),!1)}(n);return s||(a.failureCode=o),this.data(a),s},after:function(e,t){var r={};return e.filter(function(e){if(e.result)return!0;var t=e.data;if(t){if(r[t.type]=r[t.type]||{},!r[t.type][t.name])return r[t.type][t.name]=[t],!0;var n=r[t.type][t.name].some(function(e){return e.failureCode===t.failureCode});return n||r[t.type][t.name].push(t),!n}return!1})}},{id:"group-labelledby",evaluate:function(n,e,t,r){var a=axe.commons,o=a.dom,i=a.text,u=axe.utils.escapeSelector(n.type),s=axe.utils.escapeSelector(n.name),l=o.getRootNode(n),c={name:n.name,type:n.type},d=Array.from(l.querySelectorAll('input[type="'.concat(u,'"][name="').concat(s,'"]')));if(d.length<=1)return this.data(c),!0;var m=o.idrefs(n,"aria-labelledby").filter(function(e){return!!e}),p=m.slice();d.forEach(function(e){if(e!==n){var t=o.idrefs(e,"aria-labelledby").filter(function(e){return e});m=m.filter(function(e){return t.includes(e)}),p=p.filter(function(e){return!t.includes(e)})}});var f={inLabelledByContext:!0};return p=p.filter(function(e){return i.accessibleText(e,f)}),m=m.filter(function(e){return i.accessibleText(e,f)}),0<p.length&&0<m.length?(this.data(c),!0):(0<p.length&&0===m.length?c.failureCode="no-shared-label":0===p.length&&0<m.length&&(c.failureCode="no-unique-label"),this.data(c),!1)},after:function(e,t){var n={};return e.filter(function(e){var t=e.data;return!(!t||(n[t.type]=n[t.type]||{},n[t.type][t.name]))&&(n[t.type][t.name]=!0)})}},{id:"accesskeys",evaluate:function(e,t,n,r){return axe.commons.dom.isVisible(e,!1)&&(this.data(e.getAttribute("accesskey")),this.relatedNodes([e])),!0},after:function(e,t){var n={};return e.filter(function(e){if(!e.data)return!1;var t=e.data.toUpperCase();return n[t]?(n[t].relatedNodes.push(e.relatedNodes[0]),!1):((n[t]=e).relatedNodes=[],!0)}).map(function(e){return e.result=!!e.relatedNodes.length,e})}},{id:"focusable-content",evaluate:function(e,t,n,r){var a=n.tabbableElements;return!!a&&0<a.filter(function(e){return e!==n}).length}},{id:"focusable-disabled",evaluate:function(e,t,n,r){var a=["BUTTON","FIELDSET","INPUT","SELECT","TEXTAREA"],o=n.tabbableElements;if(!o||!o.length)return!0;var i=o.reduce(function(e,t){var n=t.actualNode,r=n.nodeName.toUpperCase();return a.includes(r)&&e.push(n),e},[]);return this.relatedNodes(i),0===i.length}},{id:"focusable-element",evaluate:function(e,t,n,r){var a=n.isFocusable,o=parseInt(n.actualNode.getAttribute("tabindex"),10);return(o=isNaN(o)?null:o)?a&&0<=o:a}},{id:"focusable-no-name",evaluate:function(e,t,n,r){var a=e.getAttribute("tabindex");return!!(axe.commons.dom.isFocusable(e)&&-1<a)&&!axe.commons.text.accessibleTextVirtual(n)}},{id:"focusable-not-tabbable",evaluate:function(e,t,n,r){var a=["BUTTON","FIELDSET","INPUT","SELECT","TEXTAREA"],o=n.tabbableElements;if(!o||!o.length)return!0;var i=o.reduce(function(e,t){var n=t.actualNode,r=n.nodeName.toUpperCase();return a.includes(r)||e.push(n),e},[]);return this.relatedNodes(i),0===i.length}},{id:"landmark-is-top-level",evaluate:function(e,t,n,r){var a=axe.commons.aria.getRolesByType("landmark"),o=axe.commons.dom.getComposedParent(e);for(this.data({role:e.getAttribute("role")||axe.commons.aria.implicitRole(e)});o;){var i=o.getAttribute("role");if(i||"FORM"===o.nodeName.toUpperCase()||(i=axe.commons.aria.implicitRole(o)),i&&a.includes(i))return!1;o=axe.commons.dom.getComposedParent(o)}return!0}},{id:"page-has-heading-one",evaluate:function(e,t,n,r){if(!t||!t.selector||"string"!=typeof t.selector)throw new TypeError("visible-in-page requires options.selector to be a string");var a=axe.utils.querySelectorAll(n,t.selector);return this.relatedNodes(a.map(function(e){return e.actualNode})),0<a.length},after:function(e,t){return e.some(function(e){return!0===e.result})&&e.forEach(function(e){e.result=!0}),e},options:{selector:'h1:not([role]), [role="heading"][aria-level="1"]'}},{id:"page-has-main",evaluate:function(e,t,n,r){if(!t||!t.selector||"string"!=typeof t.selector)throw new TypeError("visible-in-page requires options.selector to be a string");var a=axe.utils.querySelectorAll(n,t.selector);return this.relatedNodes(a.map(function(e){return e.actualNode})),0<a.length},after:function(e,t){return e.some(function(e){return!0===e.result})&&e.forEach(function(e){e.result=!0}),e},options:{selector:"main:not([role]), [role='main']"}},{id:"page-no-duplicate-banner",evaluate:function(e,t,n,r){if(!t||!t.selector||"string"!=typeof t.selector)throw new TypeError("visible-in-page requires options.selector to be a string");var a=axe.utils.querySelectorAll(n,t.selector);return"string"==typeof t.nativeScopeFilter&&(a=a.filter(function(e){return e.actualNode.hasAttribute("role")||!axe.commons.dom.findUpVirtual(e,t.nativeScopeFilter)})),this.relatedNodes(a.map(function(e){return e.actualNode})),a.length<=1},options:{selector:"header:not([role]), [role=banner]",nativeScopeFilter:"article, aside, main, nav, section"}},{id:"page-no-duplicate-contentinfo",evaluate:function(e,t,n,r){if(!t||!t.selector||"string"!=typeof t.selector)throw new TypeError("visible-in-page requires options.selector to be a string");var a=axe.utils.querySelectorAll(n,t.selector);return"string"==typeof t.nativeScopeFilter&&(a=a.filter(function(e){return e.actualNode.hasAttribute("role")||!axe.commons.dom.findUpVirtual(e,t.nativeScopeFilter)})),this.relatedNodes(a.map(function(e){return e.actualNode})),a.length<=1},options:{selector:"footer:not([role]), [role=contentinfo]",nativeScopeFilter:"article, aside, main, nav, section"}},{id:"page-no-duplicate-main",evaluate:function(e,t,n,r){if(!t||!t.selector||"string"!=typeof t.selector)throw new TypeError("visible-in-page requires options.selector to be a string");var a=axe.utils.querySelectorAll(n,t.selector);return"string"==typeof t.nativeScopeFilter&&(a=a.filter(function(e){return e.actualNode.hasAttribute("role")||!axe.commons.dom.findUpVirtual(e,t.nativeScopeFilter)})),this.relatedNodes(a.map(function(e){return e.actualNode})),a.length<=1},options:{selector:"main:not([role]), [role='main']"}},{id:"tabindex",evaluate:function(e,t,n,r){return e.tabIndex<=0}},{id:"alt-space-value",evaluate:function(e,t,n,r){var a=/^\s+$/.test(e.getAttribute("alt"));return e.hasAttribute("alt")&&a}},{id:"duplicate-img-label",evaluate:function(e,t,n,r){var a=axe.commons,o=a.aria,i=a.text,u=a.dom;if(["none","presentation"].includes(o.getRole(e)))return!1;var s=u.findUpVirtual(n,'button, [role="button"], a[href], p, li, td, th');if(!s)return!1;var l=axe.utils.getNodeFromTree(s),c=i.visibleVirtual(l,!0).toLowerCase();return""!==c&&c===i.accessibleTextVirtual(n).toLowerCase()}},{id:"explicit-label",evaluate:function(e,t,n,r){if(e.getAttribute("id")){var a=axe.commons.dom.getRootNode(e),o=axe.utils.escapeSelector(e.getAttribute("id")),i=a.querySelector('label[for="'.concat(o,'"]'));if(i)return!axe.commons.dom.isVisible(i)||!!axe.commons.text.accessibleText(i)}return!1}},{id:"help-same-as-label",evaluate:function(e,t,n,r){var a=axe.commons.text.labelVirtual(n),o=e.getAttribute("title");if(!a)return!1;o||(o="",e.getAttribute("aria-describedby")&&(o=axe.commons.dom.idrefs(e,"aria-describedby").map(function(e){return e?axe.commons.text.accessibleText(e):""}).join("")));return axe.commons.text.sanitize(o)===axe.commons.text.sanitize(a)},enabled:!1},{id:"hidden-explicit-label",evaluate:function(e,t,n,r){if(e.getAttribute("id")){var a=axe.commons.dom.getRootNode(e),o=axe.utils.escapeSelector(e.getAttribute("id")),i=a.querySelector('label[for="'.concat(o,'"]'));if(i&&!axe.commons.dom.isVisible(i,!0))return""===axe.commons.text.accessibleTextVirtual(n).trim()}return!1}},{id:"implicit-label",evaluate:function(e,t,n,r){var a=axe.commons,o=a.dom,i=a.text,u=o.findUpVirtual(n,"label");return!!u&&!!i.accessibleText(u,{inControlContext:!0})}},{id:"label-content-name-mismatch",evaluate:function(e,t,n,r){var a=axe.commons.text,o=a.accessibleText(e).toLowerCase();if(!(a.isHumanInterpretable(o)<1)){var i=a.sanitize(a.visibleVirtual(n)).toLowerCase();return a.isHumanInterpretable(i)<1?!!u(i,o)||void 0:u(i,o)}function u(e,t){var n=s(t),r=s(e);return!(!n||!r)&&n.includes(r)}function s(e){var t=a.removeUnicode(e,{emoji:!0,nonBmp:!0,punctuations:!0});return a.sanitize(t)}}},{id:"multiple-label",evaluate:function(e,t,n,r){var a=axe.utils.escapeSelector(e.getAttribute("id")),o=e.parentNode,i=axe.commons.dom.getRootNode(e);i=i.documentElement||i;var u=Array.from(i.querySelectorAll('label[for="'.concat(a,'"]')));for(u.length&&(u=u.filter(function(e){return axe.commons.dom.isVisible(e)}));o;)"LABEL"===o.nodeName.toUpperCase()&&-1===u.indexOf(o)&&u.push(o),o=o.parentNode;if(this.relatedNodes(u),1<u.length){var s=u.filter(function(e){return axe.commons.dom.isVisible(e,!0)});return 1<s.length||!axe.commons.dom.idrefs(e,"aria-labelledby").includes(s[0])}return!1}},{id:"title-only",evaluate:function(e,t,n,r){return!(axe.commons.text.labelVirtual(n)||!e.getAttribute("title")&&!e.getAttribute("aria-describedby"))}},{id:"landmark-is-unique",evaluate:function(e,t,n,r){var a=axe.commons.aria.getRole(e),o=axe.commons.text.accessibleTextVirtual(n);return o=o?o.toLowerCase():null,this.data({role:a,accessibleText:o}),this.relatedNodes([e]),!0},after:function(e,t){var n=[];return e.filter(function(t){var e=n.find(function(e){return t.data.role===e.data.role&&t.data.accessibleText===e.data.accessibleText});return e?(e.result=!1,e.relatedNodes.push(t.relatedNodes[0]),!1):(n.push(t),t.relatedNodes=[],!0)})}},{id:"has-lang",evaluate:function(e,t,n,r){return!!(e.getAttribute("lang")||e.getAttribute("xml:lang")||"").trim()}},{id:"valid-lang",evaluate:function(a,e,t,n){var o,r;return o=(e||axe.utils.validLangs()).map(axe.utils.getBaseLang),!!(r=["lang","xml:lang"].reduce(function(e,t){var n=a.getAttribute(t);if("string"!=typeof n)return e;var r=axe.utils.getBaseLang(n);return""!==r&&-1===o.indexOf(r)&&e.push(t+'="'+a.getAttribute(t)+'"'),e},[])).length&&(this.data(r),!0)}},{id:"xml-lang-mismatch",evaluate:function(e,t,n,r){var a=axe.utils.getBaseLang;return a(e.getAttribute("lang"))===a(e.getAttribute("xml:lang"))}},{id:"dlitem",evaluate:function(e,t,n,r){var a=axe.commons.dom.getComposedParent(e),o=a.nodeName.toUpperCase(),i=axe.commons.aria.getRole(a,{noImplicit:!0});return"DIV"===o&&["presentation","none",null].includes(i)&&(o=(a=axe.commons.dom.getComposedParent(a)).nodeName.toUpperCase(),i=axe.commons.aria.getRole(a,{noImplicit:!0})),"DL"===o&&(!i||"list"===i)}},{id:"listitem",evaluate:function(e,t,n,r){var a=axe.commons.dom.getComposedParent(e);if(a){var o=a.nodeName.toUpperCase(),i=(a.getAttribute("role")||"").toLowerCase();return"list"===i||(!i||!axe.commons.aria.isValidRole(i))&&["UL","OL"].includes(o)}}},{id:"only-dlitems",evaluate:function(e,t,n,r){var a=axe.commons,o=a.dom,i=a.aria,u=["definition","term","list"],s=n.children.reduce(function(e,t){var n=t.actualNode;return"DIV"===n.nodeName.toUpperCase()&&null===i.getRole(n)?e.concat(t.children):e.concat(t)},[]).reduce(function(e,t){var n=t.actualNode,r=n.nodeName.toUpperCase();if(1===n.nodeType&&o.isVisible(n,!0,!1)){var a=i.getRole(n,{noImplicit:!0});("DT"!==r&&"DD"!==r||a)&&(u.includes(a)||e.badNodes.push(n))}else 3===n.nodeType&&""!==n.nodeValue.trim()&&(e.hasNonEmptyTextNode=!0);return e},{badNodes:[],hasNonEmptyTextNode:!1});return s.badNodes.length&&this.relatedNodes(s.badNodes),!!s.badNodes.length||s.hasNonEmptyTextNode}},{id:"only-listitems",evaluate:function(e,t,n,r){var o=axe.commons.dom,a=n.children.reduce(function(e,t){var n=t.actualNode,r=n.nodeName.toUpperCase();if(1===n.nodeType&&o.isVisible(n,!0,!1)){var a=function(e,t){return"listitem"===e||"LI"===t&&!e}((n.getAttribute("role")||"").toLowerCase(),r);e.hasListItem=function(e,t,n){return e||"LI"===t&&n||n}(e.hasListItem,r,a),a&&(e.isEmpty=!1),"LI"!==r||a||e.liItemsWithRole++,"LI"===r||a||e.badNodes.push(n)}return 3===n.nodeType&&""!==n.nodeValue.trim()&&(e.hasNonEmptyTextNode=!0),e},{badNodes:[],isEmpty:!0,hasNonEmptyTextNode:!1,hasListItem:!1,liItemsWithRole:0}),i=n.children.filter(function(e){return"LI"===e.actualNode.nodeName.toUpperCase()}),u=0<a.liItemsWithRole&&i.length===a.liItemsWithRole;return a.badNodes.length&&this.relatedNodes(a.badNodes),!(a.hasListItem||a.isEmpty&&!u)||!!a.badNodes.length||a.hasNonEmptyTextNode}},{id:"structured-dlitems",evaluate:function(e,t,n,r){var a=n.children;if(!a||!a.length)return!1;for(var o,i=!1,u=!1,s=0;s<a.length;s++){if("DT"===(o=a[s].actualNode.nodeName.toUpperCase())&&(i=!0),i&&"DD"===o)return!1;"DD"===o&&(u=!0)}return i||u}},{id:"caption",evaluate:function(e,t,n,r){return!axe.utils.querySelectorAll(n,"track").some(function(e){return"captions"===(e.actualNode.getAttribute("kind")||"").toLowerCase()})&&void 0}},{id:"description",evaluate:function(e,t,n,r){return!axe.utils.querySelectorAll(n,"track").some(function(e){return"descriptions"===(e.actualNode.getAttribute("kind")||"").toLowerCase()})&&void 0}},{id:"frame-tested",evaluate:function(e,t,n,r){var a=this.async(),o=Object.assign({isViolation:!1,timeout:500},t),i=o.isViolation,u=o.timeout,s=setTimeout(function(){s=setTimeout(function(){s=null,a(!i&&void 0)},0)},u);axe.utils.respondable(e.contentWindow,"axe.ping",null,void 0,function(){null!==s&&(clearTimeout(s),a(!0))})},options:{isViolation:!1}},{id:"css-orientation-lock",evaluate:function(e,t,n,r){var a=(r||{}).cssom,o=void 0===a?void 0:a;if(o&&o.length){var i=o.reduce(function(e,t){var n=t.sheet,r=t.root,a=t.shadowId,o=a||"topDocument";if(e[o]||(e[o]={root:r,rules:[]}),!n||!n.cssRules)return e;var i=Array.from(n.cssRules);return e[o].rules=e[o].rules.concat(i),e},{}),s=!1,l=[];return Object.keys(i).forEach(function(e){var t=i[e],u=t.root,n=t.rules.filter(function(e){return 4===e.type});if(n&&n.length){var r=n.filter(function(e){var t=e.cssText;return/orientation:\s*landscape/i.test(t)||/orientation:\s*portrait/i.test(t)});r&&r.length&&r.forEach(function(e){e.cssRules.length&&Array.from(e.cssRules).forEach(function(e){if(e.selectorText&&!(e.style.length<=0)){var t=e.style.transform||e.style.webkitTransform||e.style.msTransform||!1;if(t){var n=t.match(/rotate\(([^)]+)deg\)/),r=parseInt(n&&n[1]||0),a=r%90==0&&r%180!=0;if(a&&"HTML"!==e.selectorText.toUpperCase()){var o=e.selectorText,i=Array.from(u.querySelectorAll(o));i&&i.length&&(l=l.concat(i))}s=a}}})})}}),s?(l.length&&this.relatedNodes(l),!1):!0}}},{id:"meta-viewport-large",evaluate:function(e,t,n,r){t=t||{};for(var a,o=(e.getAttribute("content")||"").split(/[;,]/),i={},u=t.scaleMinimum||2,s=t.lowerBound||!1,l=0,c=o.length;l<c;l++){var d=(a=o[l].split("=")).shift().toLowerCase();d&&a.length&&(i[d.trim()]=a.shift().trim().toLowerCase())}return!!(s&&i["maximum-scale"]&&parseFloat(i["maximum-scale"])<s)||(s||"no"!==i["user-scalable"]?!(i["maximum-scale"]&&parseFloat(i["maximum-scale"])<u)||(this.data("maximum-scale"),!1):(this.data("user-scalable=no"),!1))},options:{scaleMinimum:5,lowerBound:2}},{id:"meta-viewport",evaluate:function(e,t,n,r){t=t||{};for(var a,o=(e.getAttribute("content")||"").split(/[;,]/),i={},u=t.scaleMinimum||2,s=t.lowerBound||!1,l=0,c=o.length;l<c;l++){var d=(a=o[l].split("=")).shift().toLowerCase();d&&a.length&&(i[d.trim()]=a.shift().trim().toLowerCase())}return!!(s&&i["maximum-scale"]&&parseFloat(i["maximum-scale"])<s)||(s||"no"!==i["user-scalable"]?!(i["maximum-scale"]&&parseFloat(i["maximum-scale"])<u)||(this.data("maximum-scale"),!1):(this.data("user-scalable=no"),!1))},options:{scaleMinimum:2}},{id:"header-present",evaluate:function(e,t,n,r){return!!axe.utils.querySelectorAll(n,'h1, h2, h3, h4, h5, h6, [role="heading"]')[0]}},{id:"heading-order",evaluate:function(e,t,n,r){var a=e.getAttribute("aria-level");if(null!==a)return this.data(parseInt(a,10)),!0;var o=e.nodeName.toUpperCase().match(/H(\d)/);return o&&this.data(parseInt(o[1],10)),!0},after:function(e,t){if(e.length<2)return e;for(var n=e[0].data,r=1;r<e.length;r++)e[r].result&&e[r].data>n+1&&(e[r].result=!1),n=e[r].data;return e}},{id:"internal-link-present",evaluate:function(e,t,n,r){return axe.utils.querySelectorAll(n,"a[href]").some(function(e){return/^#[^/!]/.test(e.actualNode.getAttribute("href"))})}},{id:"landmark",evaluate:function(e,t,n,r){return 0<axe.utils.querySelectorAll(n,'main, [role="main"]').length}},{id:"meta-refresh",evaluate:function(e,t,n,r){var a=e.getAttribute("content")||"",o=a.split(/[;,]/);return""===a||"0"===o[0]}},{id:"p-as-heading",evaluate:function(e,t,n,r){var a=Array.from(e.parentNode.children),o=a.indexOf(e),i=(t=t||{}).margins||[],u=a.slice(o+1).find(function(e){return"P"===e.nodeName.toUpperCase()}),s=a.slice(0,o).reverse().find(function(e){return"P"===e.nodeName.toUpperCase()});function l(e){var t=window.getComputedStyle(function(e){for(var t=e,n=e.textContent.trim(),r=n;r===n&&void 0!==t;){var a=-1;if(0===(e=t).children.length)return e;for(;a++,""===(r=e.children[a].textContent.trim())&&a+1<e.children.length;);t=e.children[a]}return e}(e));return{fontWeight:function(e){switch(e){case"lighter":return 100;case"normal":return 400;case"bold":return 700;case"bolder":return 900}return e=parseInt(e),isNaN(e)?400:e}(t.getPropertyValue("font-weight")),fontSize:parseInt(t.getPropertyValue("font-size")),isItalic:"italic"===t.getPropertyValue("font-style")}}function c(n,r,e){return e.reduce(function(e,t){return e||(!t.size||n.fontSize/t.size>r.fontSize)&&(!t.weight||n.fontWeight-t.weight>r.fontWeight)&&(!t.italic||n.isItalic&&!r.isItalic)},!1)}var d=l(e),m=u?l(u):null,p=s?l(s):null;if(!m||!c(d,m,i))return!0;var f=axe.commons.dom.findUpVirtual(n,"blockquote");return!!(f&&"BLOCKQUOTE"===f.nodeName.toUpperCase()||p&&!c(d,p,i))&&void 0},options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}]}},{id:"region",evaluate:function(e,t,n,r){var a=axe.commons,o=a.dom,i=a.aria,u=i.getRolesByType("landmark"),s=u.reduce(function(e,t){return e.concat(i.implicitNodes(t))},[]).filter(function(e){return null!==e});var l=function e(t){var n=t.actualNode;return function(a){var o=a.actualNode,e=axe.commons.aria.getRole(o,{noImplicit:!0}),t=(o.getAttribute("aria-live")||"").toLowerCase().trim();return e?"dialog"===e||u.includes(e):!!["assertive","polite"].includes(t)||s.some(function(e){var t=axe.utils.matchesSelector(o,e);if("FORM"!==o.nodeName.toUpperCase())return t;var n=o.getAttribute("title"),r=n&&""!==n.trim()?axe.commons.text.sanitize(n):null;return t&&(!!i.labelVirtual(a)||!!r)})}(t)||o.isSkipLink(t.actualNode)&&o.getElementByReference(t.actualNode,"href")||!o.isVisible(n,!0)?[]:o.hasContent(n,!0)?[n]:t.children.filter(function(e){return 1===e.actualNode.nodeType}).map(e).reduce(function(e,t){return e.concat(t)},[])}(n);return this.relatedNodes(l),0===l.length},after:function(e,t){return[e[0]]}},{id:"skip-link",evaluate:function(e,t,n,r){var a=axe.commons.dom.getElementByReference(e,"href");return!!a&&(axe.commons.dom.isVisible(a,!0)||void 0)}},{id:"unique-frame-title",evaluate:function(e,t,n,r){var a=axe.commons.text.sanitize(e.title).trim().toLowerCase();return this.data(a),!0},after:function(e,t){var n={};return e.forEach(function(e){n[e.data]=void 0!==n[e.data]?++n[e.data]:0}),e.forEach(function(e){e.result=!!n[e.data]}),e}},{id:"duplicate-id-active",evaluate:function(t,e,n,r){var a=t.getAttribute("id").trim();if(!a)return!0;var o=axe.commons.dom.getRootNode(t),i=Array.from(o.querySelectorAll('[id="'.concat(axe.utils.escapeSelector(a),'"]'))).filter(function(e){return e!==t});return i.length&&this.relatedNodes(i),this.data(a),0===i.length},after:function(e,t){var n=[];return e.filter(function(e){return-1===n.indexOf(e.data)&&(n.push(e.data),!0)})}},{id:"duplicate-id-aria",evaluate:function(t,e,n,r){var a=t.getAttribute("id").trim();if(!a)return!0;var o=axe.commons.dom.getRootNode(t),i=Array.from(o.querySelectorAll('[id="'.concat(axe.utils.escapeSelector(a),'"]'))).filter(function(e){return e!==t});return i.length&&this.relatedNodes(i),this.data(a),0===i.length},after:function(e,t){var n=[];return e.filter(function(e){return-1===n.indexOf(e.data)&&(n.push(e.data),!0)})}},{id:"duplicate-id",evaluate:function(t,e,n,r){var a=t.getAttribute("id").trim();if(!a)return!0;var o=axe.commons.dom.getRootNode(t),i=Array.from(o.querySelectorAll('[id="'.concat(axe.utils.escapeSelector(a),'"]'))).filter(function(e){return e!==t});return i.length&&this.relatedNodes(i),this.data(a),0===i.length},after:function(e,t){var n=[];return e.filter(function(e){return-1===n.indexOf(e.data)&&(n.push(e.data),!0)})}},{id:"aria-label",evaluate:function(e,t,n,r){var a=axe.commons,o=a.text,i=a.aria;return!!o.sanitize(i.arialabelText(e))}},{id:"aria-labelledby",evaluate:function(e,t,n,r){var a=axe.commons,o=a.text,i=a.aria;return!!o.sanitize(i.arialabelledbyText(e))}},{id:"avoid-inline-spacing",evaluate:function(t,e,n,r){var a=["line-height","letter-spacing","word-spacing"].filter(function(e){if("important"===t.style.getPropertyPriority(e))return e});return!(0<a.length)||(this.data(a),!1)}},{id:"button-has-visible-text",evaluate:function(e,t,n,r){var a,o=e.nodeName.toUpperCase(),i=e.getAttribute("role");return("BUTTON"===o||"button"===i&&"INPUT"!==o)&&(a=axe.commons.text.accessibleTextVirtual(n),this.data(a),!!a)}},{id:"doc-has-title",evaluate:function(e,t,n,r){var a=document.title;return!(!a||!axe.commons.text.sanitize(a).trim())}},{id:"exists",evaluate:function(e,t,n,r){return!0}},{id:"has-alt",evaluate:function(e,t,n,r){var a=e.nodeName.toLowerCase();return e.hasAttribute("alt")&&("img"===a||"input"===a||"area"===a)}},{id:"has-visible-text",evaluate:function(e,t,n,r){return 0<axe.commons.text.accessibleTextVirtual(n).length}},{id:"is-on-screen",evaluate:function(e,t,n,r){return axe.commons.dom.isVisible(e,!1)&&!axe.commons.dom.isOffscreen(e)}},{id:"non-empty-alt",evaluate:function(e,t,n,r){var a=e.getAttribute("alt");return!(!a||!axe.commons.text.sanitize(a).trim())}},{id:"non-empty-if-present",evaluate:function(e,t,n,r){var a=e.nodeName.toUpperCase(),o=(e.getAttribute("type")||"").toLowerCase(),i=e.getAttribute("value");return this.data(i),!("INPUT"!==a||!["submit","reset"].includes(o))&&null===i}},{id:"non-empty-title",evaluate:function(e,t,n,r){var a=axe.commons.text;return!!a.sanitize(a.titleText(e))}},{id:"non-empty-value",evaluate:function(e,t,n,r){var a=e.getAttribute("value");return!(!a||!axe.commons.text.sanitize(a).trim())}},{id:"role-none",evaluate:function(e,t,n,r){return"none"===e.getAttribute("role")}},{id:"role-presentation",evaluate:function(e,t,n,r){return"presentation"===e.getAttribute("role")}},{id:"caption-faked",evaluate:function(e,t,n,r){var a=axe.commons.table.toGrid(e),o=a[0];return a.length<=1||o.length<=1||e.rows.length<=1||o.reduce(function(e,t,n){return e||t!==o[n+1]&&void 0!==o[n+1]},!1)}},{id:"has-caption",evaluate:function(e,t,n,r){return!!e.caption}},{id:"has-summary",evaluate:function(e,t,n,r){return!!e.summary}},{id:"has-th",evaluate:function(e,t,n,r){for(var a,o,i=[],u=0,s=e.rows.length;u<s;u++)for(var l=0,c=(a=e.rows[u]).cells.length;l<c;l++)"TH"!==(o=a.cells[l]).nodeName.toUpperCase()&&-1===["rowheader","columnheader"].indexOf(o.getAttribute("role"))||i.push(o);return!!i.length&&(this.relatedNodes(i),!0)}},{id:"html5-scope",evaluate:function(e,t,n,r){return!axe.commons.dom.isHTML5(document)||"TH"===e.nodeName.toUpperCase()}},{id:"same-caption-summary",evaluate:function(e,t,n,r){return!(!e.summary||!e.caption)&&e.summary.toLowerCase()===axe.commons.text.accessibleText(e.caption).toLowerCase()}},{id:"scope-value",evaluate:function(e,t,n,r){var a=e.getAttribute("scope").toLowerCase();return-1!==["row","col","rowgroup","colgroup"].indexOf(a)}},{id:"td-has-header",evaluate:function(e,t,n,r){var a=axe.commons.table,o=[];return a.getAllCells(e).forEach(function(e){axe.commons.dom.hasContent(e)&&a.isDataCell(e)&&!axe.commons.aria.label(e)&&(a.getHeaders(e).some(function(e){return null!==e&&!!axe.commons.dom.hasContent(e)})||o.push(e))}),!o.length||(this.relatedNodes(o),!1)}},{id:"td-headers-attr",evaluate:function(e,t,n,r){for(var a=[],o=0,i=e.rows.length;o<i;o++)for(var u=e.rows[o],s=0,l=u.cells.length;s<l;s++)a.push(u.cells[s]);var c=a.reduce(function(e,t){return t.getAttribute("id")&&e.push(t.getAttribute("id")),e},[]),d=a.reduce(function(e,t){var n,r,a=(t.getAttribute("headers")||"").split(/\s/).reduce(function(e,t){return(t=t.trim())&&e.push(t),e},[]);return 0!==a.length&&(t.getAttribute("id")&&(n=-1!==a.indexOf(t.getAttribute("id").trim())),r=a.reduce(function(e,t){return e||-1===c.indexOf(t)},!1),(n||r)&&e.push(t)),e},[]);return!(0<d.length)||(this.relatedNodes(d),!1)}},{id:"th-has-data-cells",evaluate:function(e,t,n,r){var a=axe.commons.table,o=a.getAllCells(e),i=this,u=[];o.forEach(function(e){var t=e.getAttribute("headers");t&&(u=u.concat(t.split(/\s+/)));var n=e.getAttribute("aria-labelledby");n&&(u=u.concat(n.split(/\s+/)))});var s=o.filter(function(e){return""!==axe.commons.text.sanitize(e.textContent)&&("TH"===e.nodeName.toUpperCase()||-1!==["rowheader","columnheader"].indexOf(e.getAttribute("role")))}),l=a.toGrid(e),c=!0;return s.forEach(function(e){if(!e.getAttribute("id")||!u.includes(e.getAttribute("id"))){var t=a.getCellPosition(e,l),n=!1;a.isColumnHeader(e)&&(n=a.traverse("down",t,l).find(function(e){return!a.isColumnHeader(e)})),!n&&a.isRowHeader(e)&&(n=a.traverse("right",t,l).find(function(e){return!a.isRowHeader(e)})),n||i.relatedNodes(e),c=c&&n}}),!!c||void 0}},{id:"hidden-content",evaluate:function(e,t,n,r){if(!["SCRIPT","HEAD","TITLE","NOSCRIPT","STYLE","TEMPLATE"].includes(e.nodeName.toUpperCase())&&axe.commons.dom.hasContentVirtual(n)){var a=window.getComputedStyle(e);if("none"===a.getPropertyValue("display"))return;if("hidden"===a.getPropertyValue("visibility")){var o=axe.commons.dom.getComposedParent(e),i=o&&window.getComputedStyle(o);if(!i||"hidden"!==i.getPropertyValue("visibility"))return}}return!0}}],commons:function(){function e(e){return null===e}function t(e){return null!==e}var commons={},l=commons.aria={},n=l.lookupTable={};n.attributes={"aria-activedescendant":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-atomic":{type:"boolean",values:["true","false"],unsupported:!1},"aria-autocomplete":{type:"nmtoken",values:["inline","list","both","none"],unsupported:!1},"aria-busy":{type:"boolean",values:["true","false"],unsupported:!1},"aria-checked":{type:"nmtoken",values:["true","false","mixed","undefined"],unsupported:!1},"aria-colcount":{type:"int",unsupported:!1},"aria-colindex":{type:"int",unsupported:!1},"aria-colspan":{type:"int",unsupported:!1},"aria-controls":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-current":{type:"nmtoken",allowEmpty:!0,values:["page","step","location","date","time","true","false"],unsupported:!1},"aria-describedby":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-describedat":{unsupported:!0,unstandardized:!0},"aria-details":{unsupported:!0},"aria-disabled":{type:"boolean",values:["true","false"],unsupported:!1},"aria-dropeffect":{type:"nmtokens",values:["copy","move","reference","execute","popup","none"],unsupported:!1},"aria-errormessage":{type:"idref",allowEmpty:!0,unsupported:!1},"aria-expanded":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-flowto":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-grabbed":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-haspopup":{type:"nmtoken",allowEmpty:!0,values:["true","false","menu","listbox","tree","grid","dialog"],unsupported:!1},"aria-hidden":{type:"boolean",values:["true","false"],unsupported:!1},"aria-invalid":{type:"nmtoken",allowEmpty:!0,values:["true","false","spelling","grammar"],unsupported:!1},"aria-keyshortcuts":{type:"string",allowEmpty:!0,unsupported:!1},"aria-label":{type:"string",allowEmpty:!0,unsupported:!1},"aria-labelledby":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-level":{type:"int",unsupported:!1},"aria-live":{type:"nmtoken",values:["off","polite","assertive"],unsupported:!1},"aria-modal":{type:"boolean",values:["true","false"],unsupported:!1},"aria-multiline":{type:"boolean",values:["true","false"],unsupported:!1},"aria-multiselectable":{type:"boolean",values:["true","false"],unsupported:!1},"aria-orientation":{type:"nmtoken",values:["horizontal","vertical"],unsupported:!1},"aria-owns":{type:"idrefs",allowEmpty:!0,unsupported:!1},"aria-placeholder":{type:"string",allowEmpty:!0,unsupported:!1},"aria-posinset":{type:"int",unsupported:!1},"aria-pressed":{type:"nmtoken",values:["true","false","mixed","undefined"],unsupported:!1},"aria-readonly":{type:"boolean",values:["true","false"],unsupported:!1},"aria-relevant":{type:"nmtokens",values:["additions","removals","text","all"],unsupported:!1},"aria-required":{type:"boolean",values:["true","false"],unsupported:!1},"aria-roledescription":{type:"string",allowEmpty:!0,unsupported:{exceptions:["button",{nodeName:"input",properties:{type:["button","checkbox","image","radio","reset","submit"]}},"img","select","summary"]}},"aria-rowcount":{type:"int",unsupported:!1},"aria-rowindex":{type:"int",unsupported:!1},"aria-rowspan":{type:"int",unsupported:!1},"aria-selected":{type:"nmtoken",values:["true","false","undefined"],unsupported:!1},"aria-setsize":{type:"int",unsupported:!1},"aria-sort":{type:"nmtoken",values:["ascending","descending","other","none"],unsupported:!1},"aria-valuemax":{type:"decimal",unsupported:!1},"aria-valuemin":{type:"decimal",unsupported:!1},"aria-valuenow":{type:"decimal",unsupported:!1},"aria-valuetext":{type:"string",unsupported:!1}},n.globalAttributes=["aria-atomic","aria-busy","aria-controls","aria-current","aria-describedby","aria-disabled","aria-dropeffect","aria-flowto","aria-grabbed","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-live","aria-owns","aria-relevant","aria-roledescription"],n.role={alert:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},alertdialog:{type:"widget",attributes:{allowed:["aria-expanded","aria-modal","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["dialog","section"]},application:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["article","audio","embed","iframe","object","section","svg","video"]},article:{type:"structure",attributes:{allowed:["aria-expanded","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["article"],unsupported:!1},banner:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["header"],unsupported:!1,allowedElements:["section"]},button:{type:"widget",attributes:{allowed:["aria-expanded","aria-pressed","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["button",'input[type="button"]','input[type="image"]','input[type="reset"]','input[type="submit"]',"summary"],unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:t}}]},cell:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-rowindex","aria-rowspan","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"],unsupported:!1},checkbox:{type:"widget",attributes:{allowed:["aria-checked","aria-required","aria-readonly","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:['input[type="checkbox"]'],unsupported:!1,allowedElements:["button"]},columnheader:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-required","aria-readonly","aria-selected","aria-sort","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"],unsupported:!1},combobox:{type:"composite",attributes:{allowed:["aria-autocomplete","aria-required","aria-activedescendant","aria-orientation","aria-errormessage"],required:["aria-expanded"]},owned:{all:["listbox","textbox"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:"input",properties:{type:"text"}}]},command:{nameFrom:["author"],type:"abstract",unsupported:!1},complementary:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["aside"],unsupported:!1,allowedElements:["section"]},composite:{nameFrom:["author"],type:"abstract",unsupported:!1},contentinfo:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["footer"],unsupported:!1,allowedElements:["section"]},definition:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["dd","dfn"],unsupported:!1},dialog:{type:"widget",attributes:{allowed:["aria-expanded","aria-modal","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["dialog"],unsupported:!1,allowedElements:["section"]},directory:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:["ol","ul"]},document:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["body"],unsupported:!1,allowedElements:["article","embed","iframe","object","section","svg"]},"doc-abstract":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-acknowledgments":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-afterword":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-appendix":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-backlink":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:t}}]},"doc-biblioentry":{type:"listitem",attributes:{allowed:["aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author"],context:["doc-bibliography"],unsupported:!1,allowedElements:["li"]},"doc-bibliography":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["doc-biblioentry"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-biblioref":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:t}}]},"doc-chapter":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-colophon":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-conclusion":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-cover":{type:"img",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1},"doc-credit":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-credits":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-dedication":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-endnote":{type:"listitem",attributes:{allowed:["aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,namefrom:["author"],context:["doc-endnotes"],unsupported:!1,allowedElements:["li"]},"doc-endnotes":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["doc-endnote"]},namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-epigraph":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1},"doc-epilogue":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-errata":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-example":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","section"]},"doc-footnote":{type:"section",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","footer","header"]},"doc-foreword":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-glossary":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:["term","definition"],namefrom:["author"],context:null,unsupported:!1,allowedElements:["dl"]},"doc-glossref":{type:"link",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:t}}]},"doc-index":{type:"navigation",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},"doc-introduction":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-noteref":{type:"link",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author","contents"],context:null,unsupported:!1,allowedElements:[{nodeName:"a",attributes:{href:t}}]},"doc-notice":{type:"note",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-pagebreak":{type:"separator",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["hr"]},"doc-pagelist":{type:"navigation",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},"doc-part":{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-preface":{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-prologue":{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-pullquote":{type:"none",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside","section"]},"doc-qna":{type:"section",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},"doc-subtitle":{type:"sectionhead",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["h1","h2","h3","h4","h5","h6"]}},"doc-tip":{type:"note",attributes:{allowed:["aria-expanded"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["aside"]},"doc-toc":{type:"navigation",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,namefrom:["author"],context:null,unsupported:!1,allowedElements:["nav","section"]},feed:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{one:["article"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["article","aside","section"]},figure:{type:"structure",unsupported:!1},form:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["form"],unsupported:!1},grid:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-colcount","aria-level","aria-multiselectable","aria-readonly","aria-rowcount","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,implicit:["table"],unsupported:!1},gridcell:{type:"widget",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-selected","aria-readonly","aria-required","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"],unsupported:!1},group:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["details","optgroup"],unsupported:!1,allowedElements:["dl","figcaption","fieldset","figure","footer","header","ol","ul"]},heading:{type:"structure",attributes:{required:["aria-level"],allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["h1","h2","h3","h4","h5","h6"],unsupported:!1},img:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["img"],unsupported:!1,allowedElements:["embed","iframe","object","svg"]},input:{nameFrom:["author"],type:"abstract",unsupported:!1},landmark:{nameFrom:["author"],type:"abstract",unsupported:!1},link:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["a[href]"],unsupported:!1,allowedElements:["button",{nodeName:"input",properties:{type:["image","button"]}}]},list:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:{all:["listitem"]},nameFrom:["author"],context:null,implicit:["ol","ul","dl"],unsupported:!1},listbox:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-required","aria-expanded","aria-orientation","aria-errormessage"]},owned:{all:["option"]},nameFrom:["author"],context:null,implicit:["select"],unsupported:!1,allowedElements:["ol","ul"]},listitem:{type:"structure",attributes:{allowed:["aria-level","aria-posinset","aria-setsize","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["list"],implicit:["li","dt"],unsupported:!1},log:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},main:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["main"],unsupported:!1,allowedElements:["article","section"]},marquee:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},math:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["math"],unsupported:!1},menu:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:{one:["menuitem","menuitemradio","menuitemcheckbox"]},nameFrom:["author"],context:null,implicit:['menu[type="context"]'],unsupported:!1,allowedElements:["ol","ul"]},menubar:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:{one:["menuitem","menuitemradio","menuitemcheckbox"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},menuitem:{type:"widget",attributes:{allowed:["aria-posinset","aria-setsize","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="command"]'],unsupported:!1,allowedElements:["button","li",{nodeName:"iput",properties:{type:["image","button"]}},{nodeName:"a",attributes:{href:t}}]},menuitemcheckbox:{type:"widget",attributes:{allowed:["aria-checked","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="checkbox"]'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["checkbox","image","button"]}},{nodeName:"a",attributes:{href:t}}]},menuitemradio:{type:"widget",attributes:{allowed:["aria-checked","aria-selected","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="radio"]'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["image","button","radio"]}},{nodeName:"a",attributes:{href:t}}]},navigation:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["nav"],unsupported:!1,allowedElements:["section"]},none:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:["article","aside","dl","embed","figcaption","fieldset","figure","footer","form","h1","h2","h3","h4","h5","h6","header","iframe","li","ol","section","ul"]},{nodeName:"img",attributes:{alt:t}}]},note:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["aside"]},option:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize","aria-checked","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["listbox"],implicit:["option"],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["checkbox","button"]}},{nodeName:"a",attributes:{href:t}}]},presentation:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:[{nodeName:["article","aside","dl","embed","figcaption","fieldset","figure","footer","form","h1","h2","h3","h4","h5","h6","header","iframe","li","ol","section","ul"]},{nodeName:"img",attributes:{alt:t}}]},progressbar:{type:"widget",attributes:{allowed:["aria-valuetext","aria-valuenow","aria-valuemax","aria-valuemin","aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["progress"],unsupported:!1},radio:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize","aria-required","aria-errormessage","aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,implicit:['input[type="radio"]'],unsupported:!1,allowedElements:[{nodeName:["button","li"]},{nodeName:"input",properties:{type:["image","button"]}}]},radiogroup:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-required","aria-expanded","aria-readonly","aria-errormessage"]},owned:{all:["radio"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["ol","ul"]}},range:{nameFrom:["author"],type:"abstract",unsupported:!1},region:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["section[aria-label]","section[aria-labelledby]","section[title]"],unsupported:!1,allowedElements:{nodeName:["article","aside"]}},roletype:{type:"abstract",unsupported:!1},row:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-colindex","aria-expanded","aria-level","aria-selected","aria-rowindex","aria-errormessage"]},owned:{one:["cell","columnheader","rowheader","gridcell"]},nameFrom:["author","contents"],context:["rowgroup","grid","treegrid","table"],implicit:["tr"],unsupported:!1},rowgroup:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-errormessage"]},owned:{all:["row"]},nameFrom:["author","contents"],context:["grid","table","treegrid"],implicit:["tbody","thead","tfoot"],unsupported:!1},rowheader:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-expanded","aria-rowindex","aria-rowspan","aria-required","aria-readonly","aria-selected","aria-sort","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"],unsupported:!1},scrollbar:{type:"widget",attributes:{required:["aria-controls","aria-valuenow"],allowed:["aria-valuetext","aria-orientation","aria-errormessage","aria-valuemax","aria-valuemin"]},owned:null,nameFrom:["author"],context:null,unsupported:!1},search:{type:"landmark",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:{nodeName:["aside","form","section"]}},searchbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required","aria-placeholder","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="search"]'],unsupported:!1,allowedElements:{nodeName:"input",properties:{type:"text"}}},section:{nameFrom:["author","contents"],type:"abstract",unsupported:!1},sectionhead:{nameFrom:["author","contents"],type:"abstract",unsupported:!1},select:{nameFrom:["author"],type:"abstract",unsupported:!1},separator:{type:"structure",attributes:{allowed:["aria-expanded","aria-orientation","aria-valuenow","aria-valuemax","aria-valuemin","aria-valuetext","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["hr"],unsupported:!1,allowedElements:["li"]},slider:{type:"widget",attributes:{allowed:["aria-valuetext","aria-orientation","aria-readonly","aria-errormessage","aria-valuemax","aria-valuemin"],required:["aria-valuenow"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="range"]'],unsupported:!1},spinbutton:{type:"widget",attributes:{allowed:["aria-valuetext","aria-required","aria-readonly","aria-errormessage","aria-valuemax","aria-valuemin"],required:["aria-valuenow"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="number"]'],unsupported:!1,allowedElements:{nodeName:"input",properties:{type:"text"}}},status:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:["output"],unsupported:!1,allowedElements:["section"]},structure:{type:"abstract",unsupported:!1},switch:{type:"widget",attributes:{allowed:["aria-errormessage"],required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1,allowedElements:["button",{nodeName:"input",properties:{type:["checkbox","image","button"]}},{nodeName:"a",attributes:{href:t}}]},tab:{type:"widget",attributes:{allowed:["aria-selected","aria-expanded","aria-setsize","aria-posinset","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["tablist"],unsupported:!1,allowedElements:[{nodeName:["button","h1","h2","h3","h4","h5","h6","li"]},{nodeName:"input",properties:{type:"button"}},{nodeName:"a",attributes:{href:t}}]},table:{type:"structure",attributes:{allowed:["aria-colcount","aria-rowcount","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,implicit:["table"],unsupported:!1},tablist:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-level","aria-multiselectable","aria-orientation","aria-errormessage"]},owned:{all:["tab"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},tabpanel:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1,allowedElements:["section"]},term:{type:"structure",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["dt"],unsupported:!1},textbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required","aria-placeholder","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="text"]','input[type="email"]','input[type="password"]','input[type="tel"]','input[type="url"]',"input:not([type])","textarea"],unsupported:!1},timer:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,unsupported:!1},toolbar:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-orientation","aria-errormessage"]},owned:null,nameFrom:["author"],context:null,implicit:['menu[type="toolbar"]'],unsupported:!1,allowedElements:["ol","ul"]},tooltip:{type:"widget",attributes:{allowed:["aria-expanded","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:null,unsupported:!1},tree:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-required","aria-expanded","aria-orientation","aria-errormessage"]},owned:{all:["treeitem"]},nameFrom:["author"],context:null,unsupported:!1,allowedElements:["ol","ul"]},treegrid:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-colcount","aria-expanded","aria-level","aria-multiselectable","aria-readonly","aria-required","aria-rowcount","aria-orientation","aria-errormessage"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,unsupported:!1},treeitem:{type:"widget",attributes:{allowed:["aria-checked","aria-selected","aria-expanded","aria-level","aria-posinset","aria-setsize","aria-errormessage"]},owned:null,nameFrom:["author","contents"],context:["group","tree"],unsupported:!1,allowedElements:["li",{nodeName:"a",attributes:{href:t}}]},widget:{type:"abstract",unsupported:!1},window:{nameFrom:["author"],type:"abstract",unsupported:!1}},n.elementsAllowedNoRole=[{nodeName:["base","body","caption","col","colgroup","datalist","dd","details","dt","head","html","keygen","label","legend","main","map","math","meta","meter","noscript","optgroup","param","picture","progress","script","source","style","template","textarea","title","track"]},{nodeName:"area",attributes:{href:t}},{nodeName:"input",properties:{type:["color","data","datatime","file","hidden","month","number","password","range","reset","submit","time","week"]}},{nodeName:"input",attributes:{list:e},properties:{type:["email","search","tel","url"]}},{nodeName:"link",attributes:{href:t}},{nodeName:"menu",attributes:{type:"context"}},{nodeName:"menuitem",attributes:{type:["command","checkbox","radio"]}},{nodeName:"select",condition:function(e){return 1<Number(e.getAttribute("size"))},properties:{multiple:!0}},{nodeName:["clippath","cursor","defs","desc","feblend","fecolormatrix","fecomponenttransfer","fecomposite","feconvolvematrix","fediffuselighting","fedisplacementmap","fedistantlight","fedropshadow","feflood","fefunca","fefuncb","fefuncg","fefuncr","fegaussianblur","feimage","femerge","femergenode","femorphology","feoffset","fepointlight","fespecularlighting","fespotlight","fetile","feturbulence","filter","hatch","hatchpath","lineargradient","marker","mask","meshgradient","meshpatch","meshrow","metadata","mpath","pattern","radialgradient","solidcolor","stop","switch","view"]}],n.elementsAllowedAnyRole=[{nodeName:"a",attributes:{href:e}},{nodeName:["abbr","address","canvas","div","p","pre","blockquote","ins","del","output","span","table","tbody","thead","tfoot","td","em","strong","small","s","cite","q","dfn","abbr","time","code","var","samp","kbd","sub","sup","i","b","u","mark","ruby","rt","rp","bdi","bdo","br","wbr","th","tr"]}],n.evaluateRoleForElement={A:function(e){var t=e.node,n=e.out;return"http://www.w3.org/2000/svg"===t.namespaceURI||(!t.href.length||n)},AREA:function(e){return!e.node.href},BUTTON:function(e){var t=e.node,n=e.role,r=e.out;return"menu"===t.getAttribute("type")?"menuitem"===n:r},IMG:function(e){var t=e.node,n=e.out;return t.alt?!n:n},INPUT:function(e){var t=e.node,n=e.role,r=e.out;switch(t.type){case"button":case"image":return r;case"checkbox":return!("button"!==n||!t.hasAttribute("aria-pressed"))||r;case"radio":return"menuitemradio"===n;case"text":return"combobox"===n||"searchbox"===n||"spinbutton"===n;default:return!1}},LI:function(e){var t=e.node,n=e.out;return!axe.utils.matchesSelector(t,"ol li, ul li")||n},MENU:function(e){return"context"!==e.node.getAttribute("type")},OPTION:function(e){var t=e.node;return!axe.utils.matchesSelector(t,"select > option, datalist > option, optgroup > option")},SELECT:function(e){var t=e.node,n=e.role;return!t.multiple&&t.size<=1&&"menu"===n},SVG:function(e){var t=e.node,n=e.out;return!(!t.parentNode||"http://www.w3.org/2000/svg"!==t.parentNode.namespaceURI)||n}},n.rolesOfType={widget:["button","checkbox","dialog","gridcell","heading","link","log","marquee","menuitem","menuitemcheckbox","menuitemradio","option","progressbar","radio","scrollbar","slider","spinbutton","status","switch","tab","tabpanel","textbox","timer","tooltip","tree","treeitem"]};var s={};commons.color=s;var h=commons.dom={},r={};function i(e,t){return i.fromDefinition(e,t)}commons.forms=r,commons.matches=i;var o=commons.table={},g=commons.text={EdgeFormDefaults:{}};commons.utils=axe.utils;l.arialabelText=function(e){return 1!==(e=e.actualNode||e).nodeType?"":e.getAttribute("aria-label")||""},l.arialabelledbyText=function(r,e){var a=1<arguments.length&&void 0!==e?e:{};return 1!==(r=r.actualNode||r).nodeType||a.inLabelledByContext||a.inControlContext?"":h.idrefs(r,"aria-labelledby").filter(function(e){return e}).reduce(function(e,t){var n=g.accessibleText(t,R({inLabelledByContext:!0,startNode:a.startNode||r},a));return e?"".concat(e," ").concat(n):n},"")},l.requiredAttr=function(e){var t=l.lookupTable.role[e];return t&&t.attributes&&t.attributes.required||[]},l.allowedAttr=function(e){var t=l.lookupTable.role[e],n=t&&t.attributes&&t.attributes.allowed||[],r=t&&t.attributes&&t.attributes.required||[];return n.concat(l.lookupTable.globalAttributes).concat(r)},l.validateAttr=function(e){return!!l.lookupTable.attributes[e]},l.getElementUnallowedRoles=function(t,e){var n=!(1<arguments.length&&void 0!==e)||e,r=t.nodeName.toUpperCase();if(!axe.utils.isHtmlElement(t))return[];var a=function(e){var t=[];if(!e)return t;if(e.hasAttribute("role")){var n=axe.utils.tokenList(e.getAttribute("role").toLowerCase());t=t.concat(n)}if(e.hasAttributeNS("http://www.idpf.org/2007/ops","type")){var r=axe.utils.tokenList(e.getAttributeNS("http://www.idpf.org/2007/ops","type").toLowerCase()).map(function(e){return"doc-".concat(e)});t=t.concat(r)}return t=t.filter(function(e){return axe.commons.aria.isValidRole(e)})}(t),o=axe.commons.aria.implicitRole(t);return a.filter(function(e){return(!n||e!==o)&&(!(n||"row"===e&&"TR"===r&&axe.utils.matchesSelector(t,'table[role="grid"] > tr'))||!l.isAriaRoleAllowedOnElement(t,e))})},l.getOwnedVirtual=function(e){var t=e.actualNode,n=e.children;if(!t||!n)throw new Error("getOwnedVirtual requires a virtual node");return h.idrefs(t,"aria-owns").reduce(function(e,t){if(t){var n=axe.utils.getNodeFromTree(t);e.push(n)}return e},n)},l.getRole=function(e,t){var n=1<arguments.length&&void 0!==t?t:{},r=n.noImplicit,a=n.fallback,o=n.abstracts,i=n.dpub;if(1!==(e=e.actualNode||e).nodeType)return null;var u=(e.getAttribute("role")||"").trim().toLowerCase(),s=(a?axe.utils.tokenList(u):[u]).filter(function(e){return!(!i&&"doc-"===e.substr(0,4))&&l.isValidRole(e,{allowAbstract:o})})[0];return s||r?s||null:l.implicitRole(e)};var a,u=/^idrefs?$/;function c(e){return e.getPropertyValue("font-family").split(/[,;]/g).map(function(e){return e.trim().toLowerCase()})}function d(e,t){var n=t.nodeName.toUpperCase(),r={TD:["TR","THEAD","TBODY","TFOOT"],TH:["TR","THEAD","TBODY","TFOOT"],INPUT:["LABEL"]},a=e.map(function(e){return e.nodeName.toUpperCase()}),o=e;for(var i in r)if(a.includes(i))for(var u=0;u<r[i].length;u++){var s=axe.commons.dom.findUp(t,r[i][u]);if(s&&-1===e.indexOf(s))axe.commons.dom.visuallyOverlaps(t.getBoundingClientRect(),s)&&o.splice(a.indexOf(i)+1,0,s);n===r[i][u]&&-1===a.indexOf(n)&&o.splice(a.indexOf(i)+1,0,t)}return o}function m(e,t){var n=e.getClientRects()[0],r=h.shadowElementsFromPoint(n.left,n.top);if(r)for(var a=0;a<r.length;a++)if(r[a]!==e&&r[a]===t)return!0;return!1}l.isAccessibleRef=function(e){e=e.actualNode||e;var t=h.getRootNode(e);t=t.documentElement||t;var n=e.id;axe._cache.get("idRefs")||(axe._cache.set("idRefs",{}),function e(n,t){n.hasAttribute&&("LABEL"===n.nodeName.toUpperCase()&&n.hasAttribute("for")&&(axe._cache.get("idRefs")[n.getAttribute("for")]=!0),t.filter(function(e){return n.hasAttribute(e)}).forEach(function(e){var t=n.getAttribute(e);axe.utils.tokenList(t).forEach(function(e){axe._cache.get("idRefs")[e]=!0})}));for(var r=0;r<n.children.length;r++)e(n.children[r],t)}(t,Object.keys(l.lookupTable.attributes).filter(function(e){var t=l.lookupTable.attributes[e].type;return u.test(t)})));return!0===axe._cache.get("idRefs")[n]},l.isAriaRoleAllowedOnElement=function(e,t){var n=e.nodeName.toUpperCase(),r=axe.commons.aria.lookupTable;if(i(e,r.elementsAllowedNoRole))return!1;if(i(e,r.elementsAllowedAnyRole))return!0;var a=r.role[t];if(!a||!a.allowedElements)return!1;var o=i(e,a.allowedElements);return Object.keys(r.evaluateRoleForElement).includes(n)?r.evaluateRoleForElement[n]({node:e,role:t,out:o}):o},l.isUnsupportedRole=function(e){var t=l.lookupTable.role[e];return!!t&&t.unsupported},l.labelVirtual=function(e){var t,n=e.actualNode;return n.getAttribute("aria-labelledby")&&(t=h.idrefs(n,"aria-labelledby").map(function(e){var t=axe.utils.getNodeFromTree(e);return t?g.visibleVirtual(t,!0):""}).join(" ").trim())?t:(t=(t=n.getAttribute("aria-label"))&&g.sanitize(t).trim())?t:null},l.label=function(e){return e=axe.utils.getNodeFromTree(e),l.labelVirtual(e)},l.namedFromContents=function(e,t){var n=(1<arguments.length&&void 0!==t?t:{}).strict;if(1!==(e=e.actualNode||e).nodeType)return!1;var r=l.getRole(e),a=l.lookupTable.role[r];return!!(a&&a.nameFrom.includes("contents")||"TABLE"===e.nodeName.toUpperCase())||!n&&(!a||["presentation","none"].includes(r))},l.isValidRole=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=t.allowAbstract,r=t.flagUnsupported,a=void 0!==r&&r,o=l.lookupTable.role[e],i=!!o&&o.unsupported;return!(!o||a&&i)&&(!!n||"abstract"!==o.type)},l.getRolesWithNameFromContents=function(){return Object.keys(l.lookupTable.role).filter(function(e){return l.lookupTable.role[e].nameFrom&&-1!==l.lookupTable.role[e].nameFrom.indexOf("contents")})},l.getRolesByType=function(t){return Object.keys(l.lookupTable.role).filter(function(e){return l.lookupTable.role[e].type===t})},l.getRoleType=function(e){var t=l.lookupTable.role[e];return t&&t.type||null},l.requiredOwned=function(e){"use strict";var t=null,n=l.lookupTable.role[e];return n&&(t=axe.utils.clone(n.owned)),t},l.requiredContext=function(e){"use strict";var t=null,n=l.lookupTable.role[e];return n&&(t=axe.utils.clone(n.context)),t},l.implicitNodes=function(e){"use strict";var t=null,n=l.lookupTable.role[e];return n&&n.implicit&&(t=axe.utils.clone(n.implicit)),t},l.implicitRole=function(n){"use strict";var e=Object.keys(l.lookupTable.role).map(function(e){var t=l.lookupTable.role[e];return{name:e,implicit:t&&t.implicit}}).reduce(function(e,t){return t.implicit&&t.implicit.some(function(e){return axe.utils.matchesSelector(n,e)})&&e.push(t.name),e},[]);if(!e.length)return null;for(var r,t=axe.utils.getNodeAttributes(n),a=[],o=0,i=t.length;o<i;o++){var u=t[o];u.name.match(/^aria-/)&&a.push(u.name)}return(r=a,e.map(function(e){return{score:function(e){return l.allowedAttr(e).reduce(function(e,t){return e+(-1<r.indexOf(t)?1:0)},0)}(e),name:e}}).sort(function(e,t){return t.score-e.score}).map(function(e){return e.name})).shift()},l.validateAttrValue=function(e,t){"use strict";var n,r,a=e.getAttribute(t),o=l.lookupTable.attributes[t],i=h.getRootNode(e);if(!o)return!0;if(o.allowEmpty&&(!a||""===a.trim()))return!0;switch(o.type){case"boolean":case"nmtoken":return"string"==typeof a&&o.values.includes(a.toLowerCase());case"nmtokens":return(r=axe.utils.tokenList(a)).reduce(function(e,t){return e&&o.values.includes(t)},0!==r.length);case"idref":return!(!a||!i.getElementById(a));case"idrefs":return(r=axe.utils.tokenList(a)).some(function(e){return i.getElementById(e)});case"string":return""!==a.trim();case"decimal":return!(!(n=a.match(/^[-+]?([0-9]*)\.?([0-9]*)$/))||!n[1]&&!n[2]);case"int":return/^[-+]?[0-9]+$/.test(a)}},s.centerPointOfRect=function(e){if(!(e.left>window.innerWidth)&&!(e.top>window.innerHeight))return{x:Math.min(Math.ceil(e.left+e.width/2),window.innerWidth-1),y:Math.min(Math.ceil(e.top+e.height/2),window.innerHeight-1)}},s.Color=function(e,t,n,r){this.red=e,this.green=t,this.blue=n,this.alpha=r,this.toHexString=function(){var e=Math.round(this.red).toString(16),t=Math.round(this.green).toString(16),n=Math.round(this.blue).toString(16);return"#"+(15.5<this.red?e:"0"+e)+(15.5<this.green?t:"0"+t)+(15.5<this.blue?n:"0"+n)};var a=/^rgb\((\d+), (\d+), (\d+)\)$/,o=/^rgba\((\d+), (\d+), (\d+), (\d*(\.\d+)?)\)/;this.parseRgbString=function(e){if("transparent"===e)return this.red=0,this.green=0,this.blue=0,void(this.alpha=0);var t=e.match(a);return t?(this.red=parseInt(t[1],10),this.green=parseInt(t[2],10),this.blue=parseInt(t[3],10),void(this.alpha=1)):(t=e.match(o))?(this.red=parseInt(t[1],10),this.green=parseInt(t[2],10),this.blue=parseInt(t[3],10),void(this.alpha=Math.round(100*parseFloat(t[4]))/100)):void 0},this.getRelativeLuminance=function(){var e=this.red/255,t=this.green/255,n=this.blue/255;return.2126*(e<=.03928?e/12.92:Math.pow((.055+e)/1.055,2.4))+.7152*(t<=.03928?t/12.92:Math.pow((.055+t)/1.055,2.4))+.0722*(n<=.03928?n/12.92:Math.pow((.055+n)/1.055,2.4))}},s.flattenColors=function(e,t){var n=e.alpha,r=(1-n)*t.red+n*e.red,a=(1-n)*t.green+n*e.green,o=(1-n)*t.blue+n*e.blue,i=e.alpha+t.alpha*(1-e.alpha);return new s.Color(r,a,o,i)},s.getContrast=function(e,t){if(!t||!e)return null;t.alpha<1&&(t=s.flattenColors(t,e));var n=e.getRelativeLuminance(),r=t.getRelativeLuminance();return(Math.max(r,n)+.05)/(Math.min(r,n)+.05)},s.hasValidContrastRatio=function(e,t,n,r){var a=s.getContrast(e,t),o=r&&Math.ceil(72*n)/96<14||!r&&Math.ceil(72*n)/96<18?4.5:3;return{isValid:o<a,contrastRatio:a,expectedContrastRatio:o}},s.elementHasImage=function(e,t){var n=e.nodeName.toUpperCase();if(["IMG","CANVAS","OBJECT","IFRAME","VIDEO","SVG"].includes(n))return axe.commons.color.incompleteData.set("bgColor","imgNode"),!0;var r=(t=t||window.getComputedStyle(e)).getPropertyValue("background-image"),a="none"!==r;if(a){var o=/gradient/.test(r);axe.commons.color.incompleteData.set("bgColor",o?"bgGradient":"bgImage")}return a},s.elementIsDistinct=function(e,t){var r=window.getComputedStyle(e);if("none"!==r.getPropertyValue("background-image"))return!0;if(["border-bottom","border-top","outline"].reduce(function(e,t){var n=new s.Color;return n.parseRgbString(r.getPropertyValue(t+"-color")),e||"none"!==r.getPropertyValue(t+"-style")&&0<parseFloat(r.getPropertyValue(t+"-width"))&&0!==n.alpha},!1))return!0;var n=window.getComputedStyle(t);if(c(r)[0]!==c(n)[0])return!0;var a=["text-decoration-line","text-decoration-style","font-weight","font-style","font-size"].reduce(function(e,t){return e||r.getPropertyValue(t)!==n.getPropertyValue(t)},!1),o=r.getPropertyValue("text-decoration");return o.split(" ").length<3&&(a=a||o!==n.getPropertyValue("text-decoration")),a},s.getBackgroundColor=function(r,e,t){var a=1<arguments.length&&void 0!==e?e:[];if(!0!==(2<arguments.length&&void 0!==t&&t)){var n=r.getBoundingClientRect().height-2>=2*window.innerHeight;r.scrollIntoView(n)}var o=[],i=s.getBackgroundStack(r);return(i||[]).some(function(e){var t=window.getComputedStyle(e),n=s.getOwnBackgroundColor(t);return function(e,t,n){var r=e!==t&&!h.visuallyContains(e,t)&&0!==n.alpha;r&&axe.commons.color.incompleteData.set("bgColor","elmPartiallyObscured");return r}(r,e,n)||s.elementHasImage(e,t)?(o=null,a.push(e),!0):0!==n.alpha&&(a.push(e),o.push(n),1===n.alpha)}),null===o||null===i?null:(o.push(new s.Color(255,255,255,1)),o.reduce(s.flattenColors))},s.getBackgroundStack=function(e){var t=s.filteredRectStack(e);if(null===t)return null;t=d(t,e);var n=(t=function(e){var t=e.indexOf(document.body),n=e;(1<t||-1===t)&&!s.elementHasImage(document.documentElement)&&0===s.getOwnBackgroundColor(window.getComputedStyle(document.documentElement)).alpha&&(1<t&&n.splice(t,1),n.splice(e.indexOf(document.documentElement),1),n.push(document.body));return n}(t=h.reduceToElementsBelowFloating(t,e))).indexOf(e);return function(e,t,n){if(0<e)for(var r=e-1;0<=r;r--){var a=t[r];if(m(n,a))return!0;t.splice(r,1)}return!1}(n,t,e)?(axe.commons.color.incompleteData.set("bgColor","bgOverlap"),null):-1!==n?t:null},s.filteredRectStack=function(a){var o=s.getRectStack(a);if(o&&1===o.length)return o[0];if(o&&1<o.length){var i,u=o.shift();return d(u,a),o.forEach(function(e,t){if(0!==t){var n=o[t-1],r=o[t];i=n.every(function(e,t){return e===r[t]})||u.includes(a)}}),i?o[0]:(axe.commons.color.incompleteData.set("bgColor","elmPartiallyObscuring"),null)}return axe.commons.color.incompleteData.set("bgColor","outsideViewport"),null},s.getRectStack=function(e){var t=axe.commons.color.centerPointOfRect(e.getBoundingClientRect());if(!t)return null;var n=h.shadowElementsFromPoint(t.x,t.y),r=Array.from(e.getClientRects());if(!r||r.length<=1)return[n];var a=r.filter(function(e){return e.width&&0<e.width}).map(function(e){var t=axe.commons.color.centerPointOfRect(e);if(t)return h.shadowElementsFromPoint(t.x,t.y)});return a.some(function(e){return void 0===e})?null:(a.splice(0,0,n),a)},h.isOpaque=function(e){var t=window.getComputedStyle(e);return s.elementHasImage(e,t)||1===s.getOwnBackgroundColor(t).alpha},s.getForegroundColor=function(e,t){var n=window.getComputedStyle(e),r=new s.Color;r.parseRgbString(n.getPropertyValue("color"));var a=n.getPropertyValue("opacity");if(r.alpha=r.alpha*a,1===r.alpha)return r;var o=s.getBackgroundColor(e,[],t);if(null!==o)return s.flattenColors(r,o);var i=axe.commons.color.incompleteData.get("bgColor");return axe.commons.color.incompleteData.set("fgColor",i),null},s.getOwnBackgroundColor=function(e){var t=new s.Color;if(t.parseRgbString(e.getPropertyValue("background-color")),0!==t.alpha){var n=e.getPropertyValue("opacity");t.alpha=t.alpha*n}return t},s.incompleteData=(a={},{set:function(e,t){if("string"!=typeof e)throw new Error("Incomplete data: key must be a string");return t&&(a[e]=t),a[e]},get:function(e){return a[e]},clear:function(){a={}}}),h.reduceToElementsBelowFloating=function(e,t){var n,r,a,o=["fixed","sticky"],i=[],u=!1;for(n=0;n<e.length;++n)(r=e[n])===t&&(u=!0),a=window.getComputedStyle(r),u||-1===o.indexOf(a.position)?i.push(r):i=[];return i},h.findElmsInContext=function(e){var t,n=e.context,r=e.value,a=e.attr,o=e.elm,i=void 0===o?"":o,u=axe.utils.escapeSelector(r);return t=9===n.nodeType||11===n.nodeType?n:h.getRootNode(n),Array.from(t.querySelectorAll(i+"["+a+"="+u+"]"))},h.findUp=function(e,t){return h.findUpVirtual(axe.utils.getNodeFromTree(e),t)},h.findUpVirtual=function(e,t){var n;if(n=e.actualNode,!e.shadowId&&"function"==typeof e.actualNode.closest){var r=e.actualNode.closest(t);return r||null}for(;(n=n.assignedSlot?n.assignedSlot:n.parentNode)&&11===n.nodeType&&(n=n.host),n&&!axe.utils.matchesSelector(n,t)&&n!==document.documentElement;);return n&&axe.utils.matchesSelector(n,t)?n:null},h.getComposedParent=function e(t){if(t.assignedSlot)return e(t.assignedSlot);if(t.parentNode){var n=t.parentNode;if(1===n.nodeType)return n;if(n.host)return n.host}return null},h.getElementByReference=function(e,t){var n=e.getAttribute(t);if(!n)return null;"#"===n.charAt(0)?n=decodeURIComponent(n.substring(1)):"/#"===n.substr(0,2)&&(n=decodeURIComponent(n.substring(2)));var r=document.getElementById(n);return r||((r=document.getElementsByName(n)).length?r[0]:null)},h.getElementCoordinates=function(e){"use strict";var t=h.getScrollOffset(document),n=t.left,r=t.top,a=e.getBoundingClientRect();return{top:a.top+r,right:a.right+n,bottom:a.bottom+r,left:a.left+n,width:a.right-a.left,height:a.bottom-a.top}},h.getRootNode=axe.utils.getRootNode,h.getScrollOffset=function(e){"use strict";if(!e.nodeType&&e.document&&(e=e.document),9!==e.nodeType)return{left:e.scrollLeft,top:e.scrollTop};var t=e.documentElement,n=e.body;return{left:t&&t.scrollLeft||n&&n.scrollLeft||0,top:t&&t.scrollTop||n&&n.scrollTop||0}},h.getTabbableElements=function(e){return axe.utils.querySelectorAll(e,"*").filter(function(e){var t=e.isFocusable,n=e.actualNode.getAttribute("tabindex");return(n=n&&!isNaN(parseInt(n,10))?parseInt(n):null)?t&&0<=n:t})},h.getViewportSize=function(e){"use strict";var t,n=e.document,r=n.documentElement;return e.innerWidth?{width:e.innerWidth,height:e.innerHeight}:r?{width:r.clientWidth,height:r.clientHeight}:{width:(t=n.body).clientWidth,height:t.clientHeight}};var p=["HEAD","TITLE","TEMPLATE","SCRIPT","STYLE","IFRAME","OBJECT","VIDEO","AUDIO","NOSCRIPT"];function f(e){return e.disabled||h.isHiddenWithCSS(e)&&"AREA"!==e.nodeName.toUpperCase()}h.hasContentVirtual=function(e,t,n){return function(e){if(!p.includes(e.actualNode.nodeName.toUpperCase()))return e.children.some(function(e){var t=e.actualNode;return 3===t.nodeType&&t.nodeValue.trim()})}(e)||h.isVisualContent(e.actualNode)||!!n||!!l.labelVirtual(e)||!t&&e.children.some(function(e){return 1===e.actualNode.nodeType&&h.hasContentVirtual(e)})},h.hasContent=function(e,t,n){return e=axe.utils.getNodeFromTree(e),h.hasContentVirtual(e,t,n)},h.idrefs=function(e,t){"use strict";var n,r,a=h.getRootNode(e),o=[],i=e.getAttribute(t);if(i)for(n=0,r=(i=axe.utils.tokenList(i)).length;n<r;n++)o.push(a.getElementById(i[n]));return o},h.isFocusable=function(e){"use strict";if(f(e))return!1;if(h.isNativelyFocusable(e))return!0;var t=e.getAttribute("tabindex");return!(!t||isNaN(parseInt(t,10)))},h.isNativelyFocusable=function(e){"use strict";if(!e||f(e))return!1;switch(e.nodeName.toUpperCase()){case"A":case"AREA":if(e.href)return!0;break;case"INPUT":return"hidden"!==e.type;case"TEXTAREA":case"SELECT":case"DETAILS":case"BUTTON":return!0}return!1},h.insertedIntoFocusOrder=function(e){return-1<e.tabIndex&&h.isFocusable(e)&&!h.isNativelyFocusable(e)},h.isHiddenWithCSS=function(e,t){if(9===e.nodeType)return!1;if(11===e.nodeType&&(e=e.host),["STYLE","SCRIPT"].includes(e.nodeName.toUpperCase()))return!1;var n=window.getComputedStyle(e,null);if(!n)throw new Error("Style does not exist for the given element.");if("none"===n.getPropertyValue("display"))return!0;var r=["hidden","collapse"],a=n.getPropertyValue("visibility");if(r.includes(a)&&!t)return!0;if(r.includes(a)&&t&&r.includes(t))return!0;var o=h.getComposedParent(e);return!(!o||r.includes(a))&&h.isHiddenWithCSS(o,a)},h.isHTML5=function(e){var t=e.doctype;return null!==t&&("html"===t.name&&!t.publicId&&!t.systemId)};var b=["block","list-item","table","flex","grid","inline-block"];function y(e){var t=window.getComputedStyle(e).getPropertyValue("display");return b.includes(t)||"table-"===t.substr(0,6)}h.isInTextBlock=function(n){if(y(n))return!1;var e=function(e){for(var t=h.getComposedParent(e);t&&!y(t);)t=h.getComposedParent(t);return axe.utils.getNodeFromTree(t)}(n),r="",a="",o=0;return function t(e,n){!1!==n(e.actualNode)&&e.children.forEach(function(e){return t(e,n)})}(e,function(e){if(2===o)return!1;if(3===e.nodeType&&(r+=e.nodeValue),1===e.nodeType){var t=(e.nodeName||"").toUpperCase();if(["BR","HR"].includes(t))0===o?a=r="":o=2;else{if("none"===e.style.display||"hidden"===e.style.overflow||!["",null,"none"].includes(e.style.float)||!["",null,"relative"].includes(e.style.position))return!1;if("A"===t&&e.href||"link"===(e.getAttribute("role")||"").toLowerCase())return e===n&&(o=1),a+=e.textContent,!1}}}),r=axe.commons.text.sanitize(r),a=axe.commons.text.sanitize(a),r.length>a.length},h.isNode=function(e){"use strict";return e instanceof Node},h.isOffscreen=function(e){var t,n=document.documentElement,r=window.getComputedStyle(e),a=window.getComputedStyle(document.body||n).getPropertyValue("direction"),o=h.getElementCoordinates(e);if(o.bottom<0&&(function(e,t){for(e=h.getComposedParent(e);e&&"html"!==e.nodeName.toLowerCase();){if(e.scrollTop&&0<=(t+=e.scrollTop))return!1;e=h.getComposedParent(e)}return!0}(e,o.bottom)||"absolute"===r.position))return!0;if(0===o.left&&0===o.right)return!1;if("ltr"===a){if(o.right<=0)return!0}else if(t=Math.max(n.scrollWidth,h.getViewportSize(window).width),o.left>=t)return!0;return!1};var v=/^\/?#[^/!]/;h.isSkipLink=function(e){return!!v.test(e.getAttribute("href"))&&(void 0!==axe._cache.get("firstPageLink")?t=axe._cache.get("firstPageLink"):(t=axe.utils.querySelectorAll(axe._tree,'a:not([href^="#"]):not([href^="/#"]):not([href^="javascript"])')[0],axe._cache.set("firstPageLink",t||null)),!t||e.compareDocumentPosition(t.actualNode)===e.DOCUMENT_POSITION_FOLLOWING);var t},h.isVisible=function(e,t,n){"use strict";var r=axe.utils.getNodeFromTree(e),a="_isVisible"+(t?"ScreenReader":"");if(9===e.nodeType)return!0;if(11===e.nodeType&&(e=e.host),r&&void 0!==r[a])return r[a];var o=window.getComputedStyle(e,null);if(null===o)return!1;var i=e.nodeName.toUpperCase();if("none"===o.getPropertyValue("display")||["STYLE","SCRIPT","NOSCRIPT","TEMPLATE"].includes(i)||!t&&function(e){"use strict";var t=e.match(/rect\s*\(([0-9]+)px,?\s*([0-9]+)px,?\s*([0-9]+)px,?\s*([0-9]+)px\s*\)/);return!(!t||5!==t.length)&&(t[3]-t[1]<=0&&t[2]-t[4]<=0)}(o.getPropertyValue("clip"))||!n&&("hidden"===o.getPropertyValue("visibility")||!t&&h.isOffscreen(e))||t&&"true"===e.getAttribute("aria-hidden"))return!1;var u=e.assignedSlot?e.assignedSlot:e.parentNode,s=!1;return u&&(s=h.isVisible(u,t,!0)),r&&(r[a]=s),s};var D=["checkbox","img","radio","range","slider","spinbutton","textbox"];h.isVisualContent=function(e){var t=e.getAttribute("role");if(t)return-1!==D.indexOf(t);switch(e.nodeName.toUpperCase()){case"IMG":case"IFRAME":case"OBJECT":case"VIDEO":case"AUDIO":case"CANVAS":case"SVG":case"MATH":case"BUTTON":case"SELECT":case"TEXTAREA":case"KEYGEN":case"PROGRESS":case"METER":return!0;case"INPUT":return"hidden"!==e.type;default:return!1}},h.shadowElementsFromPoint=function(r,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:document,o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0;if(999<o)throw new Error("Infinite loop detected");return Array.from(t.elementsFromPoint(r,a)).filter(function(e){return h.getRootNode(e)===t}).reduce(function(e,t){if(axe.utils.isShadowRoot(t)){var n=h.shadowElementsFromPoint(r,a,t.shadowRoot,o+1);(e=e.concat(n)).length&&axe.commons.dom.visuallyContains(e[0],t)&&e.push(t)}else e.push(t);return e},[])},h.visuallyContains=function(e,t){var n=e.getBoundingClientRect(),r=n.top+.01,a=n.bottom-.01,o=n.left+.01,i=n.right-.01,u=t.getBoundingClientRect(),s=u.top,l=u.left,c=s-t.scrollTop,d=s-t.scrollTop+t.scrollHeight,m=l-t.scrollLeft,p=l-t.scrollLeft+t.scrollWidth,f=window.getComputedStyle(t);return"inline"===f.getPropertyValue("display")||!(o<m&&o<u.left||r<c&&r<u.top||p<i&&i>u.right||d<a&&a>u.bottom)&&(!(i>u.right||a>u.bottom)||("scroll"===f.overflow||"auto"===f.overflow||"hidden"===f.overflow||t instanceof HTMLBodyElement||t instanceof HTMLHtmlElement))},h.visuallyOverlaps=function(e,t){var n=t.getBoundingClientRect(),r=n.top,a=n.left,o=r-t.scrollTop,i=r-t.scrollTop+t.scrollHeight,u=a-t.scrollLeft,s=a-t.scrollLeft+t.scrollWidth;if(e.left>s&&e.left>n.right||e.top>i&&e.top>n.bottom||e.right<u&&e.right<n.left||e.bottom<o&&e.bottom<n.top)return!1;var l=window.getComputedStyle(t);return!(e.left>n.right||e.top>n.bottom)||("scroll"===l.overflow||"auto"===l.overflow||t instanceof HTMLBodyElement||t instanceof HTMLHtmlElement)},r.isAriaCombobox=function(e){return"combobox"===axe.commons.aria.getRole(e,{noImplicit:!0})},r.isAriaListbox=function(e){return"listbox"===axe.commons.aria.getRole(e,{noImplicit:!0})};var w=["progressbar","scrollbar","slider","spinbutton"];r.isAriaRange=function(e){var t=axe.commons.aria.getRole(e,{noImplicit:!0});return w.includes(t)},r.isAriaTextbox=function(e){return"textbox"===axe.commons.aria.getRole(e,{noImplicit:!0})},r.isNativeSelect=function(e){return"SELECT"===e.nodeName.toUpperCase()};var k=["button","checkbox","color","file","hidden","image","password","radio","reset","submit"];r.isNativeTextbox=function(e){var t=e.nodeName.toUpperCase();return"TEXTAREA"===t||"INPUT"===t&&!k.includes(e.type)},i.attributes=function(t,e){return t=t.actualNode||t,i.fromFunction(function(e){return t.getAttribute(e)},e)},i.condition=function(e,t){return!!t(e)};var x,E=["nodeName","attributes","properties","condition"];function C(e){var t=e.actualNode;return 3!==t.nodeType?"":t.textContent}i.fromDefinition=function(r,a){return r=r.actualNode||r,Array.isArray(a)?a.some(function(e){return i(r,e)}):"string"==typeof a?axe.utils.matchesSelector(r,a):Object.keys(a).every(function(e){if(!E.includes(e))throw new Error('Unknown matcher type "'.concat(e,'"'));var t=i[e],n=a[e];return t(r,n)})},i.fromFunction=function(t,n){if("object"!==S(n)||Array.isArray(n)||n instanceof RegExp)throw new Error("Expect matcher to be an object");return Object.keys(n).every(function(e){return i.fromPrimative(t(e),n[e])})},i.fromPrimative=function(e,t){var n=S(t);return Array.isArray(t)&&void 0!==e?t.includes(e):"function"===n?!!t(e):t instanceof RegExp?t.test(e):t===e},i.nodeName=function(e,t,n){var r=(2<arguments.length&&void 0!==n?n:{}).isXHTML;if(e=e.actualNode||e,void 0===r){if("string"==typeof t)return axe.utils.matchesSelector(e,t);void 0===x&&(x=axe.utils.isXHTML(e.ownerDocument)),r=x}var a=r?e.nodeName:e.nodeName.toLowerCase();return i.fromPrimative(a,t)},i.properties=function(t,e){return t=t.actualNode||t,i.fromFunction(function(e){return t[e]},e)},o.getAllCells=function(e){var t,n,r,a,o=[];for(t=0,r=e.rows.length;t<r;t++)for(n=0,a=e.rows[t].cells.length;n<a;n++)o.push(e.rows[t].cells[n]);return o},o.getCellPosition=function(e,t){var n,r;for(t=t||o.toGrid(h.findUp(e,"table")),n=0;n<t.length;n++)if(t[n]&&-1!==(r=t[n].indexOf(e)))return{x:r,y:n}},o.getHeaders=function(e){if(e.hasAttribute("headers"))return commons.dom.idrefs(e,"headers");var t=commons.table.toGrid(commons.dom.findUp(e,"table")),n=commons.table.getCellPosition(e,t),r=o.traverse("left",n,t).filter(function(e){return o.isRowHeader(e)}),a=o.traverse("up",n,t).filter(function(e){return o.isColumnHeader(e)});return[].concat(r,a).reverse()},o.getScope=function(e){var t=e.getAttribute("scope"),n=e.getAttribute("role");if(e instanceof Element==!1||-1===["TD","TH"].indexOf(e.nodeName.toUpperCase()))throw new TypeError("Expected TD or TH element");if("columnheader"===n)return"col";if("rowheader"===n)return"row";if("col"===t||"row"===t)return t;if("TH"!==e.nodeName.toUpperCase())return!1;var r=o.toGrid(h.findUp(e,"table")),a=o.getCellPosition(e);return r[a.y].reduce(function(e,t){return e&&"TH"===t.nodeName.toUpperCase()},!0)?"col":r.map(function(e){return e[a.x]}).reduce(function(e,t){return e&&t&&"TH"===t.nodeName.toUpperCase()},!0)?"row":"auto"},o.isColumnHeader=function(e){return-1!==["col","auto"].indexOf(o.getScope(e))},o.isDataCell=function(e){if(!e.children.length&&!e.textContent.trim())return!1;var t=e.getAttribute("role");return axe.commons.aria.isValidRole(t)?["cell","gridcell"].includes(t):"TD"===e.nodeName.toUpperCase()},o.isDataTable=function(e){var t=(e.getAttribute("role")||"").toLowerCase();if(("presentation"===t||"none"===t)&&!h.isFocusable(e))return!1;if("true"===e.getAttribute("contenteditable")||h.findUp(e,'[contenteditable="true"]'))return!0;if("grid"===t||"treegrid"===t||"table"===t)return!0;if("landmark"===commons.aria.getRoleType(t))return!0;if("0"===e.getAttribute("datatable"))return!1;if(e.getAttribute("summary"))return!0;if(e.tHead||e.tFoot||e.caption)return!0;for(var n=0,r=e.children.length;n<r;n++)if("COLGROUP"===e.children[n].nodeName.toUpperCase())return!0;for(var a,o,i=0,u=e.rows.length,s=!1,l=0;l<u;l++)for(var c=0,d=(a=e.rows[l]).cells.length;c<d;c++){if("TH"===(o=a.cells[c]).nodeName.toUpperCase())return!0;if(s||o.offsetWidth===o.clientWidth&&o.offsetHeight===o.clientHeight||(s=!0),o.getAttribute("scope")||o.getAttribute("headers")||o.getAttribute("abbr"))return!0;if(["columnheader","rowheader"].includes((o.getAttribute("role")||"").toLowerCase()))return!0;if(1===o.children.length&&"ABBR"===o.children[0].nodeName.toUpperCase())return!0;i++}if(e.getElementsByTagName("table").length)return!1;if(u<2)return!1;var m,p,f=e.rows[Math.ceil(u/2)];if(1===f.cells.length&&1===f.cells[0].colSpan)return!1;if(5<=f.cells.length)return!0;if(s)return!0;for(l=0;l<u;l++){if(a=e.rows[l],m&&m!==window.getComputedStyle(a).getPropertyValue("background-color"))return!0;if(m=window.getComputedStyle(a).getPropertyValue("background-color"),p&&p!==window.getComputedStyle(a).getPropertyValue("background-image"))return!0;p=window.getComputedStyle(a).getPropertyValue("background-image")}return 20<=u||!(h.getElementCoordinates(e).width>.95*h.getViewportSize(window).width)&&(!(i<10)&&!e.querySelector("object, embed, iframe, applet"))},o.isHeader=function(e){if(o.isColumnHeader(e)||o.isRowHeader(e))return!0;if(e.getAttribute("id")){var t=axe.utils.escapeSelector(e.getAttribute("id"));return!!document.querySelector('[headers~="'.concat(t,'"]'))}return!1},o.isRowHeader=function(e){return["row","auto"].includes(o.getScope(e))},o.toGrid=function(e){for(var t=[],n=e.rows,r=0,a=n.length;r<a;r++){var o=n[r].cells;t[r]=t[r]||[];for(var i=0,u=0,s=o.length;u<s;u++)for(var l=0;l<o[u].colSpan;l++){for(var c=0;c<o[u].rowSpan;c++){for(t[r+c]=t[r+c]||[];t[r+c][i];)i++;t[r+c][i]=o[u]}i++}}return t},o.toArray=o.toGrid,o.traverse=function(e,t,n,r){if(Array.isArray(t)&&(r=n,n=t,t={x:0,y:0}),"string"==typeof e)switch(e){case"left":e={x:-1,y:0};break;case"up":e={x:0,y:-1};break;case"right":e={x:1,y:0};break;case"down":e={x:0,y:1}}return function e(t,n,r,a){var o,i=r[n.y]?r[n.y][n.x]:void 0;return i?"function"==typeof a&&!0===(o=a(i,n,r))?[i]:((o=e(t,{x:n.x+t.x,y:n.y+t.y},r,a)).unshift(i),o):[]}(e,{x:t.x+e.x,y:t.y+e.y},n,r)},g.accessibleText=function(e,t){var n=axe.utils.getNodeFromTree(e);return g.accessibleTextVirtual(n,t)},g.accessibleTextVirtual=function(n,e){var r=1<arguments.length&&void 0!==e?e:{},t=n.actualNode;if(r=function(e,t){var n=e.actualNode;t.startNode||(t=R({startNode:e},t));1===n.nodeType&&t.inLabelledByContext&&void 0===t.includeHidden&&(t=R({includeHidden:!h.isVisible(n,!0)},t));return t}(n,r),function(e,t){var n=e.actualNode;if(1!==n.nodeType||t.includeHidden)return!1;return!h.isVisible(n,!0)}(n,r))return"";var a=[l.arialabelledbyText,l.arialabelText,g.nativeTextAlternative,g.formControlValue,g.subtreeText,C,g.titleText].reduce(function(e,t){return r.startNode===n&&(e=g.sanitize(e)),""!==e?e:t(n,r)},"");return r.debug&&axe.log(a||"{empty-value}",t,r),a},g.accessibleTextVirtual.alreadyProcessed=function(e,t){return t.processed=t.processed||[],!!t.processed.includes(e)||(t.processed.push(e),!1)};var A=["textbox","progressbar","scrollbar","slider","spinbutton","combobox","listbox"];g.formControlValueMethods={nativeTextboxValue:function(e){if(e=e.actualNode||e,axe.commons.forms.isNativeTextbox(e))return e.value||"";return""},nativeSelectValue:function(e){return e=e.actualNode||e,axe.commons.forms.isNativeSelect(e)&&Array.from(e.options).filter(function(e){return e.selected}).map(function(e){return e.text}).join(" ")||""},ariaTextboxValue:function(e){var t=e.actualNode;if(!axe.commons.forms.isAriaTextbox(t))return"";return h.isHiddenWithCSS(t)?t.textContent:g.visibleVirtual(e,!0)},ariaListboxValue:function(e,t){var n=e.actualNode;if(!axe.commons.forms.isAriaListbox(n))return"";var r=l.getOwnedVirtual(e).filter(function(e){return"option"===l.getRole(e)&&"true"===e.actualNode.getAttribute("aria-selected")});return 0!==r.length?axe.commons.text.accessibleTextVirtual(r[0],t):""},ariaComboboxValue:function(e,t){var n,r=e.actualNode;return axe.commons.forms.isAriaCombobox(r)&&(n=l.getOwnedVirtual(e).filter(function(e){return"listbox"===l.getRole(e)})[0])?g.formControlValueMethods.ariaListboxValue(n,t):""},ariaRangeValue:function(e){if(e=e.actualNode||e,!axe.commons.forms.isAriaRange(e)||!e.hasAttribute("aria-valuenow"))return"";var t=+e.getAttribute("aria-valuenow");return isNaN(t)?"0":String(t)}},g.formControlValue=function(n,e){var r=1<arguments.length&&void 0!==e?e:{},t=n.actualNode,a=g.unsupported.accessibleNameFromFieldValue||[],o=l.getRole(t);if(r.startNode===n||!A.includes(o)||a.includes(o))return"";var i=Object.keys(g.formControlValueMethods).map(function(e){return g.formControlValueMethods[e]}).reduce(function(e,t){return e||t(n,r)},"");return r.debug&&axe.log(i||"{empty-value}",t,r),i},g.isHumanInterpretable=function(e){if(!e.length)return 0;if(["x","i"].includes(e))return 0;var t=g.removeUnicode(e,{emoji:!0,nonBmp:!0,punctuations:!0});return g.sanitize(t)?1:0};g.autocomplete={stateTerms:["on","off"],standaloneTerms:["name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","username","new-password","current-password","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","url","photo"],qualifiers:["home","work","mobile","fax","pager"],qualifiedTerms:["tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-local-prefix","tel-local-suffix","tel-extension","email","impp"],locations:["billing","shipping"]},g.isValidAutocomplete=function(e,t){var n=1<arguments.length&&void 0!==t?t:{},r=n.looseTyped,a=void 0!==r&&r,o=n.stateTerms,i=void 0===o?[]:o,u=n.locations,s=void 0===u?[]:u,l=n.qualifiers,c=void 0===l?[]:l,d=n.standaloneTerms,m=void 0===d?[]:d,p=n.qualifiedTerms,f=void 0===p?[]:p;if(e=e.toLowerCase().trim(),(i=i.concat(g.autocomplete.stateTerms)).includes(e)||""===e)return!0;c=c.concat(g.autocomplete.qualifiers),s=s.concat(g.autocomplete.locations),m=m.concat(g.autocomplete.standaloneTerms),f=f.concat(g.autocomplete.qualifiedTerms);var h=e.split(/\s+/g);if(!a&&(8<h[0].length&&"section-"===h[0].substr(0,8)&&h.shift(),s.includes(h[0])&&h.shift(),c.includes(h[0])&&(h.shift(),m=[]),1!==h.length))return!1;var b=h[h.length-1];return m.includes(b)||f.includes(b)},g.labelText=function(e,t){var n=1<arguments.length&&void 0!==t?t:{},r=g.accessibleTextVirtual.alreadyProcessed;if(n.inControlContext||n.inLabelledByContext||r(e,n))return"";n.startNode||(n.startNode=e);var a,o=R({inControlContext:!0},n),i=function(e){var t=e.actualNode;return t.id?h.findElmsInContext({elm:"label",attr:"for",value:t.id,context:t}):[]}(e),u=h.findUpVirtual(e,"label");return u?(a=[].concat(he(i),[u])).sort(axe.utils.nodeSorter):a=i,a.map(function(e){return g.accessibleText(e,o)}).filter(function(e){return""!==e}).join(" ")},g.labelVirtual=function(e){var t,n;if(n=l.labelVirtual(e))return n;if(e.actualNode.id){var r=axe.utils.escapeSelector(e.actualNode.getAttribute("id"));if(n=(t=axe.commons.dom.getRootNode(e.actualNode).querySelector('label[for="'+r+'"]'))&&g.visible(t,!0))return n}return(n=(t=h.findUpVirtual(e,"label"))&&g.visible(t,!0))||null},g.label=function(e){return e=axe.utils.getNodeFromTree(e),g.labelVirtual(e)},g.nativeElementType=[{matches:[{nodeName:"textarea"},{nodeName:"input",properties:{type:["text","password","search","tel","email","url"]}}],namingMethods:"labelText"},{matches:{nodeName:"input",properties:{type:["button","submit","reset"]}},namingMethods:["valueText","titleText","buttonDefaultText"]},{matches:{nodeName:"input",properties:{type:"image"}},namingMethods:["altText","valueText","labelText","titleText","buttonDefaultText"]},{matches:"button",namingMethods:"subtreeText"},{matches:"fieldset",namingMethods:"fieldsetLegendText"},{matches:"OUTPUT",namingMethods:"subtreeText"},{matches:[{nodeName:"select"},{nodeName:"input",properties:{type:/^(?!text|password|search|tel|email|url|button|submit|reset)/}}],namingMethods:"labelText"},{matches:"summary",namingMethods:"subtreeText"},{matches:"figure",namingMethods:["figureText","titleText"]},{matches:"img",namingMethods:"altText"},{matches:"table",namingMethods:["tableCaptionText","tableSummaryText"]},{matches:["hr","br"],namingMethods:["titleText","singleSpace"]}],g.nativeTextAlternative=function(n,e){var r=1<arguments.length&&void 0!==e?e:{},t=n.actualNode;if(1!==t.nodeType||["presentation","none"].includes(l.getRole(t)))return"";var a=function(n){var e=g.nativeElementType,t=g.nativeTextMethods,r=e.find(function(e){var t=e.matches;return axe.commons.matches(n,t)});return(r?[].concat(r.namingMethods):[]).map(function(e){return t[e]})}(n).reduce(function(e,t){return e||t(n,r)},"");return r.debug&&axe.log(a||"{empty-value}",t,r),a};var F={submit:"Submit",image:"Submit",reset:"Reset",button:""};function j(e,t){return t.actualNode.getAttribute(e)||""}function z(e,t,n){var r=t.actualNode,a=[e=e.toLowerCase(),r.nodeName.toLowerCase()].join(","),o=r.querySelector(a);return o&&o.nodeName.toLowerCase()===e?g.accessibleText(o,n):""}g.nativeTextMethods={valueText:function(e){return e.actualNode.value||""},buttonDefaultText:function(e){var t=e.actualNode;return F[t.type]||""},tableCaptionText:z.bind(null,"caption"),figureText:z.bind(null,"figcaption"),fieldsetLegendText:z.bind(null,"legend"),altText:j.bind(null,"alt"),tableSummaryText:j.bind(null,"summary"),titleText:function(e,t){return g.titleText(e,t)},subtreeText:function(e,t){return g.subtreeText(e,t)},labelText:function(e,t){return g.labelText(e,t)},singleSpace:function(){return" "}},g.sanitize=function(e){"use strict";return e.replace(/\r\n/g,"\n").replace(/\u00A0/g," ").replace(/[\s]{2,}/g," ").trim()},g.subtreeText=function(e,t){var n=1<arguments.length&&void 0!==t?t:{},r=g.accessibleTextVirtual.alreadyProcessed;n.startNode=n.startNode||e;var a=n.strict;return r(e,n)||!l.namedFromContents(e,{strict:a})?"":l.getOwnedVirtual(e).reduce(function(e,t){return function(e,t,n){var r=t.actualNode.nodeName.toUpperCase(),a=g.accessibleTextVirtual(t,n);if(!a)return e;q.includes(r)||(" "!==a[0]&&(a+=" "),e&&" "!==e[e.length-1]&&(a=" "+a));return e+a}(e,t,n)},"")};var q=["A","EM","STRONG","SMALL","MARK","ABBR","DFN","I","B","S","U","CODE","VAR","SAMP","KBD","SUP","SUB","Q","CITE","SPAN","BDO","BDI","WBR","INS","DEL","MAP","AREA","NOSCRIPT","RUBY","BUTTON","LABEL","OUTPUT","DATALIST","KEYGEN","PROGRESS","COMMAND","CANVAS","TIME","METER","#TEXT"];var N=["button","iframe","a[href]",{nodeName:"input",properties:{type:"button"}}];function T(){return new RegExp("[ᴀ-ᵿᶀ-ᶿ᷀-᷿₠-⃏⃐-⃿℀-⅏⅐-↏←-⇿∀-⋿⌀-⏿␀-␿⑀-⑟①-⓿─-╿▀-▟■-◿☀-⛿✀-➿]")}return g.titleText=function(e){return 1===(e=e.actualNode||e).nodeType&&e.hasAttribute("title")?!axe.commons.matches(e,N)&&["none","presentation"].includes(l.getRole(e))?"":e.getAttribute("title"):""},g.hasUnicode=function(e,t){var n=t.emoji,r=t.nonBmp,a=t.punctuations;return n?axe.imports.emojiRegexText().test(e):r?T().test(e):!!a&&/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g.test(e)},g.removeUnicode=function(e,t){var n=t.emoji,r=t.nonBmp,a=t.punctuations;return n&&(e=e.replace(axe.imports.emojiRegexText(),"")),r&&(e=e.replace(T(),"")),a&&(e=e.replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g,"")),e},g.unsupported={accessibleNameFromFieldValue:["combobox","listbox","progressbar"]},g.visibleVirtual=function(n,r,a){var e=n.children.map(function(e){if(3===e.actualNode.nodeType){var t=e.actualNode.nodeValue;if(t&&h.isVisible(n.actualNode,r))return t}else if(!a)return g.visibleVirtual(e,r)}).join("");return g.sanitize(e)},g.visible=function(e,t,n){return e=axe.utils.getNodeFromTree(e),g.visibleVirtual(e,t,n)},commons}()})}("object"==typeof window?window:this);
\ No newline at end of file
+!function a(window){function b(a){this.name="SupportError",this.cause=a.cause,this.message="`"+a.cause+"` - feature unsupported in your environment.",a.ruleId&&(this.ruleId=a.ruleId,this.message+=" Skipping "+this.ruleId+" rule."),this.stack=(new Error).stack}function c(a){"use strict";var b;return a?(b=axe.utils.clone(a),b.commons=a.commons):b={},b.reporter=b.reporter||null,b.rules=b.rules||[],b.checks=b.checks||[],b.data=Object.assign({checks:{},rules:{}},b.data),b}function d(a,b,c){"use strict";var d,e;for(d=0,e=a.length;d<e;d++)b[c](a[d])}function e(a){this.brand="axe",this.application="axeAPI",this.tagExclude=["experimental"],this.defaultConfig=a,this._init()}function f(a,b,c){var d=a.brand,e=a.application;return axe.constants.helpUrlBase+d+"/"+(c||axe.version.substring(0,axe.version.lastIndexOf(".")))+"/"+b+"?application="+e}function g(a){"use strict";this.id=a.id,this.data=null,this.relatedNodes=[],this.result=null}function h(a){"use strict";return"string"==typeof a?new Function("return "+a+";")():a}function i(a){a&&(this.id=a.id,this.configure(a))}function j(a,b){"use strict";if(!axe.utils.isHidden(b)){axe.utils.findBy(a,"node",b)||a.push({node:b,include:[],exclude:[]})}}function k(a,b,c){"use strict";a.frames=a.frames||[];var d,e,f=document.querySelectorAll(c.shift());a:for(var g=0,h=f.length;g<h;g++){e=f[g];for(var i=0,j=a.frames.length;i<j;i++)if(a.frames[i].node===e){a.frames[i][b].push(c);break a}d={node:e,include:[],exclude:[]},c&&d[b].push(c),a.frames.push(d)}}function l(a){"use strict";if(a&&"object"===(void 0===a?"undefined":ta(a))||a instanceof NodeList){if(a instanceof Node)return{include:[a],exclude:[]};if(a.hasOwnProperty("include")||a.hasOwnProperty("exclude"))return{include:a.include&&+a.include.length?a.include:[document],exclude:a.exclude||[]};if(a.length===+a.length)return{include:a,exclude:[]}}return"string"==typeof a?{include:[a],exclude:[]}:{include:[document],exclude:[]}}function m(a,b){"use strict";for(var c,d,e=[],f=0,g=a[b].length;f<g;f++){if("string"==typeof(c=a[b][f])){d=Array.from(document.querySelectorAll(c)),e=e.concat(d.map(function(a){return axe.utils.getFlattenedTree(a)[0]}));break}!c||!c.length||c instanceof Node?c instanceof Node&&e.push(axe.utils.getFlattenedTree(c)[0]):c.length>1?k(a,b,c):(d=Array.from(document.querySelectorAll(c[0])),e=e.concat(d.map(function(a){return axe.utils.getFlattenedTree(a)[0]})))}return e.filter(function(a){return a})}function n(a){"use strict";if(0===a.include.length){if(0===a.frames.length){var b=axe.utils.respondable.isInFrame()?"frame":"page";return new Error("No elements found for include in "+b+" Context")}a.frames.forEach(function(a,b){if(0===a.include.length)return new Error("No elements found for include in Context of frame "+b)})}}function o(a){"use strict";var b=this;this.frames=[],this.initiator=!a||"boolean"!=typeof a.initiator||a.initiator,this.page=!1,a=l(a),this.exclude=a.exclude,this.include=a.include,this.include=m(this,"include"),this.exclude=m(this,"exclude"),axe.utils.select("frame, iframe",this).forEach(function(a){ra(a,b)&&j(b.frames,a.actualNode)}),1===this.include.length&&this.include[0].actualNode===document.documentElement&&(this.page=!0);var c=n(this);if(c instanceof Error)throw c}function p(a){"use strict";this.id=a.id,this.result=axe.constants.NA,this.pageLevel=a.pageLevel,this.impact=null,this.nodes=[]}function q(a,b){"use strict";this._audit=b,this.id=a.id,this.selector=a.selector||"*",this.excludeHidden="boolean"!=typeof a.excludeHidden||a.excludeHidden,this.enabled="boolean"!=typeof a.enabled||a.enabled,this.pageLevel="boolean"==typeof a.pageLevel&&a.pageLevel,this.any=a.any||[],this.all=a.all||[],this.none=a.none||[],this.tags=a.tags||[],a.matches&&(this.matches=h(a.matches))}function r(a){"use strict";return axe.utils.getAllChecks(a).map(function(b){var c=a._audit.checks[b.id||b];return c&&"function"==typeof c.after?c:null}).filter(Boolean)}function s(a,b){"use strict";var c=[];return a.forEach(function(a){axe.utils.getAllChecks(a).forEach(function(a){a.id===b&&c.push(a)})}),c}function t(a){"use strict";return a.filter(function(a){return!0!==a.filtered})}function u(a){"use strict";var b=["any","all","none"],c=a.nodes.filter(function(a){var c=0;return b.forEach(function(b){a[b]=t(a[b]),c+=a[b].length}),c>0});return a.pageLevel&&c.length&&(c=[c.reduce(function(a,c){if(a)return b.forEach(function(b){a[b].push.apply(a[b],c[b])}),a})]),c}function v(a,b){"use strict";if(!axe._audit)throw new Error("No audit configured");var c=axe.utils.queue(),d=[];Object.keys(axe.plugins).forEach(function(a){c.defer(function(b){var c=function(a){d.push(a),b()};try{axe.plugins[a].cleanup(b,c)}catch(a){c(a)}})}),axe.utils.toArray(document.querySelectorAll("frame, iframe")).forEach(function(a){c.defer(function(b,c){return axe.utils.sendCommandToFrame(a,{command:"cleanup-plugin"},b,c)})}),c.then(function(c){0===d.length?a(c):b(d)}).catch(b)}function w(a){"use strict";var b;if(!(b=axe._audit))throw new Error("No audit configured");a.reporter&&("function"==typeof a.reporter||wa[a.reporter])&&(b.reporter=a.reporter),a.checks&&a.checks.forEach(function(a){b.addCheck(a)}),a.rules&&a.rules.forEach(function(a){b.addRule(a)}),void 0!==a.branding?b.setBranding(a.branding):b._constructHelpUrls(),a.tagExclude&&(b.tagExclude=a.tagExclude)}function x(a,b,c){"use strict";var d=c,e=function(a){a instanceof Error==!1&&(a=new Error(a)),c(a)},f=a&&a.context||{};f.include&&!f.include.length&&(f.include=[document]);var g=a&&a.options||{};switch(a.command){case"rules":return A(f,g,d,e);case"cleanup-plugin":return v(d,e);default:if(axe._audit&&axe._audit.commands&&axe._audit.commands[a.command])return axe._audit.commands[a.command](a,c)}}function y(a){"use strict";this._run=a.run,this._collect=a.collect,this._registry={},a.commands.forEach(function(a){axe._audit.registerCommand(a)})}function z(){"use strict";var a=axe._audit;if(!a)throw new Error("No audit configured");a.resetRulesAndChecks()}function A(a,b,c,d){"use strict";try{a=new o(a)}catch(a){return d(a)}var e=axe.utils.queue(),f=axe._audit;b.performanceTimer&&axe.utils.performanceTimer.auditStart(),a.frames.length&&!1!==b.iframes&&e.defer(function(c,d){axe.utils.collectResultsFromFrames(a,b,"rules",null,c,d)}),e.defer(function(c,d){if(b.restoreScroll){var e=axe.utils.getScrollState();f.run(a,b,c,d),axe.utils.setScrollState(e)}else f.run(a,b,c,d)}),e.then(function(e){try{b.performanceTimer&&axe.utils.performanceTimer.auditEnd();var g=axe.utils.mergeResults(e.map(function(a){return{results:a}}));a.initiator&&(g=f.after(g,b),g.forEach(axe.utils.publishMetaData),g=g.map(axe.utils.finalizeRuleResult));try{c(g)}catch(a){axe.log(a)}}catch(a){d(a)}}).catch(d)}function B(a){"use strict";switch(!0){case"string"==typeof a:case Array.isArray(a):case Node&&a instanceof Node:case NodeList&&a instanceof NodeList:return!0;case"object"!==(void 0===a?"undefined":ta(a)):return!1;case void 0!==a.include:case void 0!==a.exclude:case"number"==typeof a.length:return!0;default:return!1}}function C(a,b,c){"use strict";var d=new TypeError("axe.run arguments are invalid");if(!B(a)){if(void 0!==c)throw d;c=b,b=a,a=document}if("object"!==(void 0===b?"undefined":ta(b))){if(void 0!==c)throw d;c=b,b={}}if("function"!=typeof c&&void 0!==c)throw d;return{context:a,options:b,callback:c||xa}}function D(a,b){"use strict";["any","all","none"].forEach(function(c){Array.isArray(a[c])&&a[c].filter(function(a){return Array.isArray(a.relatedNodes)}).forEach(function(a){a.relatedNodes=a.relatedNodes.map(function(a){var c={html:a.source};return b.elementRef&&!a.fromFrame&&(c.element=a.element),(!1!==b.selectors||a.fromFrame)&&(c.target=a.selector),b.xpath&&(c.xpath=a.xpath),c})})})}function E(a,b){return Aa.reduce(function(c,d){return c[d]=(a[d]||[]).map(function(a){return b(a,d)}),c},{})}function F(a,b,c){var d=Object.assign({},b);d.nodes=(d[c]||[]).concat(),axe.constants.resultGroups.forEach(function(a){delete d[a]}),a[c].push(d)}function G(a,b,c){"use strict";var d=window.getComputedStyle(a,null),e=!1;return!!d&&(b.forEach(function(a){d.getPropertyValue(a.property)===a.value&&(e=!0)}),!!e||!(a.nodeName.toUpperCase()===c.toUpperCase()||!a.parentNode)&&G(a.parentNode,b,c))}function H(a,b){"use strict";return new Error(a+": "+axe.utils.getSelector(b))}function I(a,b,c,d,e,f){"use strict";var g=axe.utils.queue();a.frames.forEach(function(e){var f={options:b,command:c,parameter:d,context:{initiator:!1,page:a.page,include:e.include||[],exclude:e.exclude||[]}};g.defer(function(a,b){var c=e.node;axe.utils.sendCommandToFrame(c,f,function(b){if(b)return a({results:b,frameElement:c,frame:axe.utils.getSelector(c)});a(null)},b)})}),g.then(function(a){e(axe.utils.mergeResults(a,b))}).catch(f)}function J(a,b){if(b=b||300,a.length>b){var c=a.indexOf(">");a=a.substring(0,c+1)}return a}function K(a){var b=a.outerHTML;return b||"function"!=typeof XMLSerializer||(b=(new XMLSerializer).serializeToString(a)),J(b||"")}function L(a,b,c){this._fromFrame=!!c,this.spec=c||{},b&&b.absolutePaths&&(this._options={toRoot:!0}),this.source=void 0!==this.spec.source?this.spec.source:K(a),this._element=a}function M(a,b){return{shadowId:b,children:[],actualNode:a}}function N(a){var b=[];for(a=a.firstChild;a;)b.push(a),a=a.nextSibling;return b}function O(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return 0!==a.length&&(a.match(/[0-9]/g)||"").length>=a.length/2}function P(a,b){return[a.substring(0,b),a.substring(b)]}function Q(a){var b=a,c="",d="",e="",f="",g="",h="";if(a.includes("#")){var i=P(a,a.indexOf("#")),j=Ba(i,2);a=j[0],h=j[1]}if(a.includes("?")){var k=P(a,a.indexOf("?")),l=Ba(k,2);a=l[0],g=l[1]}if(a.includes("://")){var m=a.split("://"),n=Ba(m,2);c=n[0],a=n[1];var o=P(a,a.indexOf("/")),p=Ba(o,2);d=p[0],a=p[1]}else if("//"===a.substr(0,2)){a=a.substr(2);var q=P(a,a.indexOf("/")),r=Ba(q,2);d=r[0],a=r[1]}if("www."===d.substr(0,4)&&(d=d.substr(4)),d&&d.includes(":")){var s=P(d,d.indexOf(":")),t=Ba(s,2);d=t[0],e=t[1]}return f=a,{original:b,protocol:c,domain:d,port:e,path:f,query:g,hash:h}}function R(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++)c[b]=a[b];return c}return Array.from(a)}function S(a){return!["focus","hover","hidden","visible","dirty","touched","valid","disable","enable","active","col-"].find(function(b){return a.includes(b)})}function T(a){return a.classList&&0!==a.classList.length?(a.parentNode&&Array.from(a.parentNode.children||"")||[]).reduce(function(b,c){return a===c?b:b.filter(function(a){return!c.classList.contains(a)})},Array.from(a.classList).filter(S)):[]}function U(a,b){var c=a.parentNode&&Array.from(a.parentNode.children||"")||[];if(c.find(function(c){return c!==a&&axe.utils.matchesSelector(c,b)}))return":nth-child("+(1+c.indexOf(a))+")";return""}function V(a,b){var c=a.nodeName.toLowerCase(),d=Array.from(a.classList)||[],e={nodeName:c,classList:d,isCustomElm:c.includes("-"),isCommonElm:Da.includes(c),distinctClassList:T(a)};return[Ea.getCustomElm,Ea.getElmRoleProp,Ea.getUncommonElm,Ea.getElmNameProp,Ea.getDistinctClass,Ea.getFileRefProp,Ea.getCommonName].reduce(function(c,d){if(c.length===b)return c;var f=d(a,e);return f&&(f[0].match(/[a-z]/)?c.unshift(f):c.push(f)),c},[])}function W(a,b,c){var d=void 0,e=void 0,f=b.isUnique,g=void 0!==f&&f,h=Ea.getElmId(a),i=b.featureCount,j=void 0===i?2:i,k=b.minDepth,l=void 0===k?1:k,m=b.toRoot,n=void 0!==m&&m,o=b.childSelectors,p=void 0===o?[]:o;h?(d=h,g=!0):(d=V(a,j).join(""),d+=U(a,d),g=b.isUnique||1===c.querySelectorAll(d).length,g||a!==document.documentElement||(d+=":root"),e=0!==l||!g);var q=[d].concat(R(p));return a.parentElement&&11!==a.parentElement.nodeType&&(n||e)?W(a.parentNode,{toRoot:n,isUnique:g,childSelectors:q,featureCount:1,minDepth:l-1},c):q.join(" > ")}function X(a,b){var c,d;if(!a)return[];if(!b&&9===a.nodeType)return b=[{str:"html"}];if(b=b||[],a.parentNode&&a.parentNode!==a&&(b=X(a.parentNode,b)),a.previousSibling){d=1,c=a.previousSibling;do{1===c.nodeType&&c.nodeName===a.nodeName&&d++,c=c.previousSibling}while(c);1===d&&(d=null)}else if(a.nextSibling){c=a.nextSibling;do{1===c.nodeType&&c.nodeName===a.nodeName?(d=1,c=null):(d=null,c=c.previousSibling)}while(c)}if(1===a.nodeType){var e={};e.str=a.nodeName.toLowerCase();var f=a.getAttribute&&axe.utils.escapeSelector(a.getAttribute("id"));f&&1===a.ownerDocument.querySelectorAll("#"+f).length&&(e.id=a.getAttribute("id")),d>1&&(e.count=d),b.push(e)}return b}function Y(a){return a.reduce(function(a,b){return b.id?"/"+b.str+"[@id='"+b.id+"']":a+"/"+b.str+(b.count>0?"["+b.count+"]":"")},"")}function Z(a){"use strict";if(Fa&&Fa.parentNode)return void 0===Fa.styleSheet?Fa.appendChild(document.createTextNode(a)):Fa.styleSheet.cssText+=a,Fa;if(a){var b=document.head||document.getElementsByTagName("head")[0];return Fa=document.createElement("style"),Fa.type="text/css",void 0===Fa.styleSheet?Fa.appendChild(document.createTextNode(a)):Fa.styleSheet.cssText=a,b.appendChild(Fa),Fa}}function $(a,b,c,d){"use strict";var e=axe.utils.getXpath(c),f={element:c,selector:d,xpath:e};a.forEach(function(a){a.node=axe.utils.DqElement.fromFrame(a.node,b,f);var c=axe.utils.getAllChecks(a);c.length&&c.forEach(function(a){a.relatedNodes=a.relatedNodes.map(function(a){return axe.utils.DqElement.fromFrame(a,b,f)})})})}function _(a,b){"use strict";for(var c,d,e=b[0].node,f=0,g=a.length;f<g;f++)if(d=a[f].node,(c=axe.utils.nodeSorter({actualNode:d.element},{actualNode:e.element}))>0||0===c&&e.selector.length<d.selector.length)return void a.splice.apply(a,[f,0].concat(b));a.push.apply(a,b)}function aa(a){"use strict";return a&&a.results?Array.isArray(a.results)?a.results.length?a.results:null:[a.results]:null}function ba(a,b){function c(a){return a.incomplete&&a.incomplete.default?a.incomplete.default:ua.incompleteFallbackMessage()}if(!a||!a.missingData)return c(b);try{var d=b.incomplete[a.missingData[0].reason];if(!d)throw new Error;return d}catch(d){return"string"==typeof a.missingData?b.incomplete[a.missingData]:c(b)}}function ca(a,b){"use strict";return function(c){var d=a[c.id]||{},e=d.messages||{},f=Object.assign({},d);delete f.messages,void 0===c.result?"object"===ta(e.incomplete)?f.message=function(){return ba(c.data,e)}:f.message=e.incomplete:f.message=c.result===b?e.pass:e.fail,axe.utils.extendMetaData(c,f)}}function da(a,b){return 1===a.nodeType&&("*"===b.tag||a.nodeName.toLowerCase()===b.tag)}function ea(a,b){return!b.classes||b.classes.reduce(function(b,c){return b&&a.className&&a.className.match(c.regexp)},!0)}function fa(a,b){return!b.attributes||b.attributes.reduce(function(b,c){var d=a.getAttribute(c.key);return b&&null!==d&&(!c.value||c.test(d))},!0)}function ga(a,b){return!b.id||a.id===b.id}function ha(a,b){return!(b.pseudos&&!b.pseudos.reduce(function(b,c){if("not"===c.name)return b&&!Ha([a],c.expressions,!1).length;throw new Error("the pseudo selector "+c.name+" has not yet been implemented")},!0))}function ia(a,b,c){var d=[];return a=Array.isArray(a)?a:[a],a.forEach(function(a){da(a.actualNode,b)&&ea(a.actualNode,b)&&fa(a.actualNode,b)&&ga(a.actualNode,b)&&ha(a,b)&&d.push(a),c&&(d=d.concat(ia(a.children.filter(function(c){return!b.id||c.shadowId===a.shadowId}),b,c)))}),d}function ja(a){/*! Credit Mootools Copyright Mootools, MIT License */
+if(a)return a.map(function(a){var b,c,d=a.name.replace(Ja,""),e=(a.value||"").replace(Ja,"");switch(a.operator){case"^=":c=new RegExp("^"+Ia(e));break;case"$=":c=new RegExp(Ia(e)+"$");break;case"~=":c=new RegExp("(^|\\s)"+Ia(e)+"(\\s|$)");break;case"|=":c=new RegExp("^"+Ia(e)+"(-|$)");break;case"=":b=function(a){return e===a};break;case"*=":b=function(a){return a&&a.indexOf(e)>-1};break;case"!=":b=function(a){return e!==a};break;default:b=function(a){return!!a}}return""===e&&/^[*$^]=$/.test(a.operator)&&(b=function(){return!1}),b||(b=function(a){return a&&c.test(a)}),{key:d,value:e,test:b}})}function ka(a){if(a)return a.map(function(a){return a=a.replace(Ja,""),{value:a,regexp:new RegExp("(^|\\s)"+Ia(a)+"(\\s|$)")}})}function la(a){if(a)return a.map(function(a){var b;return"not"===a.name&&(b=axe.utils.cssParser.parse(a.value),b=b.selectors?b.selectors:[b],b=Ga(b)),{name:a.name,expressions:b,value:a.value}})}function ma(a,b){"use strict";var c,d,e=axe._audit&&axe._audit.tagExclude?axe._audit.tagExclude:[];return b.include||b.exclude?(c=b.include||[],c=Array.isArray(c)?c:[c],d=b.exclude||[],d=Array.isArray(d)?d:[d],d=d.concat(e.filter(function(a){return-1===c.indexOf(a)}))):(c=Array.isArray(b)?b:[b],d=e.filter(function(a){return-1===c.indexOf(a)})),!!(c.some(function(b){return-1!==a.tags.indexOf(b)})||0===c.length&&!1!==a.enabled)&&d.every(function(b){return-1===a.tags.indexOf(b)})}function na(a){var b=window.getComputedStyle(a),c="visible"===b.getPropertyValue("overflow-y"),d="visible"===b.getPropertyValue("overflow-x");if(!c&&a.scrollHeight>a.clientHeight||!d&&a.scrollWidth>a.clientWidth)return{elm:a,top:a.scrollTop,left:a.scrollLeft}}function oa(a,b,c){if(a===window)return a.scroll(b,c);a.scrollTop=b,a.scrollLeft=c}function pa(a){return Array.from(a.children).reduce(function(a,b){var c=na(b);return c&&a.push(c),a.concat(pa(b))},[])}function qa(a){"use strict";return a.sort(function(a,b){return axe.utils.contains(a,b)?1:-1})[0]}function ra(a,b){"use strict";var c=b.include&&qa(b.include.filter(function(b){return axe.utils.contains(b,a)})),d=b.exclude&&qa(b.exclude.filter(function(b){return axe.utils.contains(b,a)}));return!!(!d&&c||d&&axe.utils.contains(d,c))}function sa(a,b,c){"use strict";for(var d=0,e=b.length;d<e;d++)!a.find(function(a){return a.actualNode===b[d].actualNode})&&ra(b[d],c)&&a.push(b[d])}var document=window.document,ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},axe=axe||{};axe.version="3.0.0-alpha-1","function"==typeof define&&define.amd&&define([],function(){"use strict";return axe}),"object"===("undefined"==typeof module?"undefined":ta(module))&&module.exports&&"function"==typeof a.toString&&(axe.source="("+a.toString()+')(typeof window === "object" ? window : this);',module.exports=axe),"function"==typeof window.getComputedStyle&&(window.axe=axe);var commons;b.prototype=Object.create(Error.prototype),b.prototype.constructor=b;var utils=axe.utils={},ua={},ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};e.prototype._init=function(){var a=c(this.defaultConfig);axe.commons=commons=a.commons,this.reporter=a.reporter,this.commands={},this.rules=[],this.checks={},d(a.rules,this,"addRule"),d(a.checks,this,"addCheck"),this.data={},this.data.checks=a.data&&a.data.checks||{},this.data.rules=a.data&&a.data.rules||{},this.data.failureSummaries=a.data&&a.data.failureSummaries||{},this.data.incompleteFallbackMessage=a.data&&a.data.incompleteFallbackMessage||"",this._constructHelpUrls()},e.prototype.registerCommand=function(a){"use strict";this.commands[a.id]=a.callback},e.prototype.addRule=function(a){"use strict";a.metadata&&(this.data.rules[a.id]=a.metadata);var b=this.getRule(a.id);b?b.configure(a):this.rules.push(new q(a,this))},e.prototype.addCheck=function(a){"use strict";var b=a.metadata;"object"===(void 0===b?"undefined":ta(b))&&(this.data.checks[a.id]=b,"object"===ta(b.messages)&&Object.keys(b.messages).filter(function(a){return b.messages.hasOwnProperty(a)&&"string"==typeof b.messages[a]}).forEach(function(a){0===b.messages[a].indexOf("function")&&(b.messages[a]=new Function("return "+b.messages[a]+";")())})),this.checks[a.id]?this.checks[a.id].configure(a):this.checks[a.id]=new i(a)},e.prototype.run=function(a,b,c,d){"use strict";this.validateOptions(b),axe._tree=axe.utils.getFlattenedTree(document.documentElement);var e=axe.utils.queue();this.rules.forEach(function(c){if(axe.utils.ruleShouldRun(c,a,b)){if(b.performanceTimer){var d="mark_rule_end_"+c.id,f="mark_rule_start_"+c.id;axe.utils.performanceTimer.mark(f)}e.defer(function(e,g){c.run(a,b,function(a){b.performanceTimer&&(axe.utils.performanceTimer.mark(d),axe.utils.performanceTimer.measure("rule_"+c.id,f,d)),e(a)},function(a){if(b.debug)g(a);else{var d=Object.assign(new p(c),{result:axe.constants.CANTTELL,description:"An error occured while running this rule",message:a.message,stack:a.stack,error:a});e(d)}})})}}),e.then(function(a){axe._tree=void 0,c(a.filter(function(a){return!!a}))}).catch(d)},e.prototype.after=function(a,b){"use strict";var c=this.rules;return a.map(function(a){return axe.utils.findBy(c,"id",a.id).after(a,b)})},e.prototype.getRule=function(a){return this.rules.find(function(b){return b.id===a})},e.prototype.validateOptions=function(a){"use strict";var b=this;if("object"===ta(a.runOnly)){var c=a.runOnly;if("rule"===c.type&&Array.isArray(c.value))c.value.forEach(function(a){if(!b.getRule(a))throw new Error("unknown rule `"+a+"` in options.runOnly")});else if(Array.isArray(c.value)&&c.value.length>0){var d=[].concat(c.value);if(b.rules.forEach(function(a){var b,c,e;if(d)for(c=0,e=a.tags.length;c<e;c++)-1!==(b=d.indexOf(a.tags[c]))&&d.splice(b,1)}),0!==d.length)throw new Error("could not find tags `"+d.join("`, `")+"`")}}return"object"===ta(a.rules)&&Object.keys(a.rules).forEach(function(a){if(!b.getRule(a))throw new Error("unknown rule `"+a+"` in options.rules")}),a},e.prototype.setBranding=function(a){"use strict";var b={brand:this.brand,application:this.application};a&&a.hasOwnProperty("brand")&&a.brand&&"string"==typeof a.brand&&(this.brand=a.brand),a&&a.hasOwnProperty("application")&&a.application&&"string"==typeof a.application&&(this.application=a.application),this._constructHelpUrls(b)},e.prototype._constructHelpUrls=function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,c=axe.version.substring(0,axe.version.lastIndexOf("."));this.rules.forEach(function(d){a.data.rules[d.id]||(a.data.rules[d.id]={});var e=a.data.rules[d.id];("string"!=typeof e.helpUrl||b&&e.helpUrl===f(b,d.id,c))&&(e.helpUrl=f(a,d.id,c))})},e.prototype.resetRulesAndChecks=function(){"use strict";this._init()},i.prototype.enabled=!0,i.prototype.run=function(a,b,c,d){"use strict";b=b||{};var e=b.hasOwnProperty("enabled")?b.enabled:this.enabled,f=b.options||this.options;if(e){var h,i=new g(this),j=axe.utils.checkHelper(i,b,c,d);try{h=this.evaluate.call(j,a.actualNode,f,a)}catch(a){return void d(a)}j.isAsync||(i.result=h,setTimeout(function(){c(i)},0))}else c(null)},i.prototype.configure=function(a){var b=this;["options","enabled"].filter(function(b){return a.hasOwnProperty(b)}).forEach(function(c){return b[c]=a[c]}),["evaluate","after"].filter(function(b){return a.hasOwnProperty(b)}).forEach(function(c){return b[c]=h(a[c])})};var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};q.prototype.matches=function(){"use strict";return!0},q.prototype.gather=function(a){"use strict";var b=axe.utils.select(this.selector,a);return this.excludeHidden?b.filter(function(a){return!axe.utils.isHidden(a.actualNode)}):b},q.prototype.runChecks=function(a,b,c,d,e){"use strict";var f=this,g=axe.utils.queue();this[a].forEach(function(a){var d=f._audit.checks[a.id||a],e=axe.utils.getCheckOption(d,f.id,c);g.defer(function(a,c){d.run(b,e,a,c)})}),g.then(function(b){b=b.filter(function(a){return a}),d({type:a,results:b})}).catch(e)},q.prototype.run=function(a,c,d,e){var f=this,g=axe.utils.queue(),h=new p(this),i=void 0;try{i=this.gather(a).filter(function(a){return f.matches(a.actualNode,a)})}catch(a){return void e(new b({cause:a,ruleId:this.id}))}c.performanceTimer&&axe.log("gather (",i.length,"):",axe.utils.performanceTimer.timeElapsed()+"ms"),i.forEach(function(a){g.defer(function(b,d){var e=axe.utils.queue();e.defer(function(b,d){f.runChecks("any",a,c,b,d)}),e.defer(function(b,d){f.runChecks("all",a,c,b,d)}),e.defer(function(b,d){f.runChecks("none",a,c,b,d)}),e.then(function(d){if(d.length){var e=!1,f={};d.forEach(function(a){var b=a.results.filter(function(a){return a});f[a.type]=b,b.length&&(e=!0)}),e&&(f.node=new axe.utils.DqElement(a.actualNode,c),h.nodes.push(f))}b()}).catch(function(a){return d(a)})})}),g.then(function(){return d(h)}).catch(function(a){return e(a)})},q.prototype.after=function(a,b){"use strict";var c=r(this),d=this.id;return c.forEach(function(c){var e=s(a.nodes,c.id),f=axe.utils.getCheckOption(c,d,b),g=c.after(e,f);e.forEach(function(a){-1===g.indexOf(a)&&(a.filtered=!0)})}),a.nodes=u(a),a},q.prototype.configure=function(a){"use strict";a.hasOwnProperty("selector")&&(this.selector=a.selector),a.hasOwnProperty("excludeHidden")&&(this.excludeHidden="boolean"!=typeof a.excludeHidden||a.excludeHidden),a.hasOwnProperty("enabled")&&(this.enabled="boolean"!=typeof a.enabled||a.enabled),a.hasOwnProperty("pageLevel")&&(this.pageLevel="boolean"==typeof a.pageLevel&&a.pageLevel),a.hasOwnProperty("any")&&(this.any=a.any),a.hasOwnProperty("all")&&(this.all=a.all),a.hasOwnProperty("none")&&(this.none=a.none),a.hasOwnProperty("tags")&&(this.tags=a.tags),a.hasOwnProperty("matches")&&("string"==typeof a.matches?this.matches=new Function("return "+a.matches+";")():this.matches=a.matches)},function(axe){var a=[{name:"NA",value:"inapplicable",priority:0,group:"inapplicable"},{name:"PASS",value:"passed",priority:1,group:"passes"},{name:"CANTTELL",value:"cantTell",priority:2,group:"incomplete"},{name:"FAIL",value:"failed",priority:3,group:"violations"}],b={helpUrlBase:"https://dequeuniversity.com/rules/",results:[],resultGroups:[],resultGroupMap:{},impact:Object.freeze(["minor","moderate","serious","critical"])};a.forEach(function(a){var c=a.name,d=a.value,e=a.priority,f=a.group;b[c]=d,b[c+"_PRIO"]=e,b[c+"_GROUP"]=f,b.results[e]=d,b.resultGroups[e]=f,b.resultGroupMap[d]=f}),Object.freeze(b.results),Object.freeze(b.resultGroups),Object.freeze(b.resultGroupMap),Object.freeze(b),Object.defineProperty(axe,"constants",{value:b,enumerable:!0,configurable:!1,writable:!1})}(axe);var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};axe.log=function(){"use strict";"object"===("undefined"==typeof console?"undefined":ta(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)};var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};axe.a11yCheck=function(a,b,c){"use strict";"function"==typeof b&&(c=b,b={}),b&&"object"===(void 0===b?"undefined":ta(b))||(b={});var d=axe._audit;if(!d)throw new Error("No audit configured");b.reporter=b.reporter||d.reporter||"v2",b.performanceTimer&&axe.utils.performanceTimer.start();var e=axe.getReporter(b.reporter);axe._runRules(a,b,function(a){var d=e(a,b,c);void 0!==d&&(b.performanceTimer&&axe.utils.performanceTimer.end(),c(d))},axe.log)},axe.cleanup=v,axe.configure=w,axe.getRules=function(a){"use strict";a=a||[];var b=a.length?axe._audit.rules.filter(function(b){return!!a.filter(function(a){return-1!==b.tags.indexOf(a)}).length}):axe._audit.rules,c=axe._audit.data.rules||{};return b.map(function(a){var b=c[a.id]||{};return{ruleId:a.id,description:b.description,help:b.help,helpUrl:b.helpUrl,tags:a.tags}})},axe._load=function(a){"use strict";axe.utils.respondable.subscribe("axe.ping",function(a,b,c){c({axe:!0})}),axe.utils.respondable.subscribe("axe.start",x),axe._audit=new e(a)};var axe=axe||{};axe.plugins={},y.prototype.run=function(){"use strict";return this._run.apply(this,arguments)},y.prototype.collect=function(){"use strict";return this._collect.apply(this,arguments)},y.prototype.cleanup=function(a){"use strict";var b=axe.utils.queue(),c=this;Object.keys(this._registry).forEach(function(a){b.defer(function(b){c._registry[a].cleanup(b)})}),b.then(function(){a()})},y.prototype.add=function(a){"use strict";this._registry[a.id]=a},axe.registerPlugin=function(a){"use strict";axe.plugins[a.id]=new y(a)};var va,wa={};axe.getReporter=function(a){"use strict";return"string"==typeof a&&wa[a]?wa[a]:"function"==typeof a?a:va},axe.addReporter=function(a,b,c){"use strict";wa[a]=b,c&&(va=b)},axe.reset=z,axe._runRules=A;var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},xa=function(){};axe.run=function(a,b,c){"use strict";if(!axe._audit)throw new Error("No audit configured");var d=C(a,b,c);a=d.context,b=d.options,c=d.callback,b.reporter=b.reporter||axe._audit.reporter||"v1",b.performanceTimer&&axe.utils.performanceTimer.start();var e=void 0,f=xa,g=xa;return window.Promise&&c===xa&&(e=new Promise(function(a,b){f=b,g=a})),axe._runRules(a,b,function(a){var d=function(a){try{c(null,a)}catch(a){axe.log(a)}g(a)};b.performanceTimer&&axe.utils.performanceTimer.end();try{var e=axe.getReporter(b.reporter),h=e(a,b,d);void 0!==h&&d(h)}catch(a){c(a),f(a)}},function(a){c(a),f(a)}),e},ua.failureSummary=function(a){"use strict";var b={};return b.none=a.none.concat(a.all),b.any=a.any,Object.keys(b).map(function(a){if(b[a].length){var c=axe._audit.data.failureSummaries[a];return c&&"function"==typeof c.failureMessage?c.failureMessage(b[a].map(function(a){return a.message||""})):void 0}}).filter(function(a){return void 0!==a}).join("\n\n")},ua.incompleteFallbackMessage=function(){"use strict";return axe._audit.data.incompleteFallbackMessage()};var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},ya=axe.constants.resultGroups;ua.processAggregate=function(a,b){var c=axe.utils.aggregateResult(a);return c.timestamp=(new Date).toISOString(),c.url=window.location.href,ya.forEach(function(a){c[a]=(c[a]||[]).map(function(a){return a=Object.assign({},a),Array.isArray(a.nodes)&&a.nodes.length>0&&(a.nodes=a.nodes.map(function(a){return"object"===ta(a.node)&&(a.html=a.node.source,b.elementRef&&!a.node.fromFrame&&(a.element=a.node.element),(!1!==b.selectors||a.node.fromFrame)&&(a.target=a.node.selector),b.xpath&&(a.xpath=a.node.xpath)),delete a.result,delete a.node,D(a,b),a})),ya.forEach(function(b){return delete a[b]}),delete a.pageLevel,delete a.result,a})}),c},axe.addReporter("na",function(a,b,c){"use strict";"function"==typeof b&&(c=b,b={});var d=ua.processAggregate(a,b);c({violations:d.violations,passes:d.passes,incomplete:d.incomplete,inapplicable:d.inapplicable,timestamp:d.timestamp,url:d.url})}),axe.addReporter("no-passes",function(a,b,c){"use strict";"function"==typeof b&&(c=b,b={});var d=ua.processAggregate(a,b);c({violations:d.violations,timestamp:d.timestamp,url:d.url})}),axe.addReporter("raw",function(a,b,c){"use strict";"function"==typeof b&&(c=b,b={}),c(a)}),axe.addReporter("v1",function(a,b,c){"use strict";"function"==typeof b&&(c=b,b={});var d=ua.processAggregate(a,b);d.violations.forEach(function(a){return a.nodes.forEach(function(a){a.failureSummary=ua.failureSummary(a)})}),c({violations:d.violations,passes:d.passes,incomplete:d.incomplete,inapplicable:d.inapplicable,timestamp:d.timestamp,url:d.url})}),axe.addReporter("v2",function(a,b,c){"use strict";"function"==typeof b&&(c=b,b={});var d=ua.processAggregate(a,b);c({violations:d.violations,passes:d.passes,incomplete:d.incomplete,inapplicable:d.inapplicable,timestamp:d.timestamp,url:d.url})},!0),axe.utils.aggregate=function(a,b,c){b=b.slice(),c&&b.push(c);var d=b.map(function(b){return a.indexOf(b)}).sort();return a[d.pop()]};var za=[];za[axe.constants.PASS_PRIO]=!0,za[axe.constants.CANTTELL_PRIO]=null,za[axe.constants.FAIL_PRIO]=!1;var Aa=["any","all","none"];axe.utils.aggregateChecks=function(a){var b=Object.assign({},a);E(b,function(a,b){var c=za.indexOf(a.result);a.priority=-1!==c?c:axe.constants.CANTTELL_PRIO,"none"===b&&(a.priority=4-a.priority)});var c=E(b,function(a){return a.priority});b.priority=Math.max(c.all.reduce(function(a,b){return Math.max(a,b)},0),c.none.reduce(function(a,b){return Math.max(a,b)},0),c.any.reduce(function(a,b){return Math.min(a,b)},4)%4);var d=[];return Aa.forEach(function(a){b[a]=b[a].filter(function(a){return a.priority===b.priority}),b[a].forEach(function(a){return d.push(a.impact)})}),b.priority===axe.constants.FAIL_PRIO?b.impact=axe.utils.aggregate(axe.constants.impact,d):b.impact=null,E(b,function(a){delete a.result,delete a.priority}),b.result=axe.constants.results[b.priority],delete b.priority,b},axe.utils.aggregateResult=function(a){var b={};return axe.constants.resultGroups.forEach(function(a){return b[a]=[]}),a.forEach(function(a){a.error?F(b,a,axe.constants.CANTTELL_GROUP):a.result===axe.constants.NA?F(b,a,axe.constants.NA_GROUP):axe.constants.resultGroups.forEach(function(c){Array.isArray(a[c])&&a[c].length>0&&F(b,a,c)})}),b},function(){axe.utils.aggregateRule=function(a){var b={};a=a.map(function(a){if(a.any&&a.all&&a.none)return axe.utils.aggregateChecks(a);if(Array.isArray(a.node))return axe.utils.finalizeRuleResult(a);throw new TypeError("Invalid Result type")});var c=a.map(function(a){return a.result});b.result=axe.utils.aggregate(axe.constants.results,c,b.result),axe.constants.resultGroups.forEach(function(a){return b[a]=[]}),a.forEach(function(a){var c=axe.constants.resultGroupMap[a.result];b[c].push(a)});var d=axe.constants.FAIL_GROUP;if(b[d].length>0){var e=b[d].map(function(a){return a.impact});b.impact=axe.utils.aggregate(axe.constants.impact,e)||null}else b.impact=null;return b}}(),axe.utils.areStylesSet=G,axe.utils.checkHelper=function(a,b,c,d){"use strict";return{isAsync:!1,async:function(){return this.isAsync=!0,function(b){b instanceof Error==!1?(a.value=b,c(a)):d(b)}},data:function(b){a.data=b},relatedNodes:function(c){c=c instanceof Node?[c]:axe.utils.toArray(c),a.relatedNodes=c.map(function(a){return new axe.utils.DqElement(a,b)})}}};var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};axe.utils.clone=function(a){"use strict";var b,c,d=a;if(null!==a&&"object"===(void 0===a?"undefined":ta(a)))if(Array.isArray(a))for(d=[],b=0,c=a.length;b<c;b++)d[b]=axe.utils.clone(a[b]);else{d={};for(b in a)d[b]=axe.utils.clone(a[b])}return d},axe.utils.sendCommandToFrame=function(a,b,c,d){"use strict";var e=a.contentWindow;if(!e)return axe.log("Frame does not have a content window",a),void c(null);var f=setTimeout(function(){f=setTimeout(function(){var e=H("No response from frame",a);b.debug?d(e):(axe.log(e),c(null))},0)},500);axe.utils.respondable(e,"axe.ping",null,void 0,function(){clearTimeout(f),f=setTimeout(function(){d(H("Axe in frame timed out",a))},3e4),axe.utils.respondable(e,"axe.start",b,void 0,function(a){clearTimeout(f),a instanceof Error==!1?c(a):d(a)})})},axe.utils.collectResultsFromFrames=I,axe.utils.contains=function(a,b){"use strict";function c(a,b){return a.shadowId===b.shadowId||!!a.children.find(function(a){return c(a,b)})}return a.shadowId||b.shadowId?c(a,b):"function"==typeof a.actualNode.contains?a.actualNode.contains(b.actualNode):!!(16&a.actualNode.compareDocumentPosition(b.actualNode))},function(axe){/*!
+  * The copyright below covers the code within this function block only
+  *
+  * Copyright (c) 2013 Dulin Marat
+  * 
+  * Permission is hereby granted, free of charge, to any person obtaining a copy
+  * of this software and associated documentation files (the "Software"), to deal
+  * in the Software without restriction, including without limitation the rights
+  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  * copies of the Software, and to permit persons to whom the Software is
+  * furnished to do so, subject to the following conditions:
+  * 
+  * The above copyright notice and this permission notice shall be included in
+  * all copies or substantial portions of the Software.
+  * 
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  * THE SOFTWARE.
+  */
+function a(){this.pseudos={},this.attrEqualityMods={},this.ruleNestingOperators={},this.substitutesEnabled=!1}function b(a){return a>="a"&&a<="z"||a>="A"&&a<="Z"||"-"===a||"_"===a}function c(a){return a>="a"&&a<="z"||a>="A"&&a<="Z"||a>="0"&&a<="9"||"-"===a||"_"===a}function d(a){return a>="a"&&a<="f"||a>="A"&&a<="F"||a>="0"&&a<="9"}function e(a,e,g,j,k,l){var m,n,o,p,q;return p=a.length,m=null,o=function(b,c){var f,g,h;for(h="",e++,m=a.charAt(e);e<p;){if(m===b)return e++,h;if("\\"===m)if(e++,(m=a.charAt(e))===b)h+=b;else if(f=c[m])h+=f;else{if(d(m)){for(g=m,e++,m=a.charAt(e);d(m);)g+=m,e++,m=a.charAt(e);" "===m&&(e++,m=a.charAt(e)),h+=String.fromCharCode(parseInt(g,16));continue}h+=m}else h+=m;e++,m=a.charAt(e)}return h},n=function(){var b="";for(m=a.charAt(e);e<p;){if(c(m))b+=m;else{if("\\"!==m)return b;if(++e>=p)throw Error("Expected symbol but end of file reached.");if(m=a.charAt(e),f[m])b+=m;else{if(d(m)){var g=m;for(e++,m=a.charAt(e);d(m);)g+=m,e++,m=a.charAt(e);" "===m&&(e++,m=a.charAt(e)),b+=String.fromCharCode(parseInt(g,16));continue}b+=m}}e++,m=a.charAt(e)}return b},q=function(){m=a.charAt(e);for(var b=!1;" "===m||"\t"===m||"\n"===m||"\r"===m||"\f"===m;)b=!0,e++,m=a.charAt(e);return b},this.parse=function(){var b=this.parseSelector();if(e<p)throw Error('Rule expected but "'+a.charAt(e)+'" found.');return b},this.parseSelector=function(){var b,c=b=this.parseSingleSelector();for(m=a.charAt(e);","===m;){if(e++,q(),"selectors"!==b.type&&(b={type:"selectors",selectors:[c]}),!(c=this.parseSingleSelector()))throw Error('Rule expected after ",".');b.selectors.push(c)}return b},this.parseSingleSelector=function(){q();var b={type:"ruleSet"},c=this.parseRule();if(!c)return null;for(var d=b;c&&(c.type="rule",d.rule=c,d=c,q(),m=a.charAt(e),!(e>=p||","===m||")"===m));)if(k[m]){var f=m;if(e++,q(),!(c=this.parseRule()))throw Error('Rule expected after "'+f+'".');c.nestingOperator=f}else(c=this.parseRule())&&(c.nestingOperator=null);return b},this.parseRule=function(){for(var c=null;e<p;)if("*"===(m=a.charAt(e)))e++,(c=c||{}).tagName="*";else if(b(m)||"\\"===m)(c=c||{}).tagName=n();else if("."===m)e++,c=c||{},(c.classNames=c.classNames||[]).push(n());else if("#"===m)e++,(c=c||{}).id=n();else if("["===m){e++,q();var d={name:n()};if(q(),"]"===m)e++;else{var f="";if(j[m]&&(f=m,e++,m=a.charAt(e)),e>=p)throw Error('Expected "=" but end of file reached.');if("="!==m)throw Error('Expected "=" but "'+m+'" found.');d.operator=f+"=",e++,q();var k="";if(d.valueType="string",'"'===m)k=o('"',i);else if("'"===m)k=o("'",h);else if(l&&"$"===m)e++,k=n(),d.valueType="substitute";else{for(;e<p&&"]"!==m;)k+=m,e++,m=a.charAt(e);k=k.trim()}if(q(),e>=p)throw Error('Expected "]" but end of file reached.');if("]"!==m)throw Error('Expected "]" but "'+m+'" found.');e++,d.value=k}c=c||{},(c.attrs=c.attrs||[]).push(d)}else{if(":"!==m)break;e++;var r=n(),s={name:r};if("("===m){e++;var t="";if(q(),"selector"===g[r])s.valueType="selector",t=this.parseSelector();else{if(s.valueType=g[r]||"string",'"'===m)t=o('"',i);else if("'"===m)t=o("'",h);else if(l&&"$"===m)e++,t=n(),s.valueType="substitute";else{for(;e<p&&")"!==m;)t+=m,e++,m=a.charAt(e);t=t.trim()}q()}if(e>=p)throw Error('Expected ")" but end of file reached.');if(")"!==m)throw Error('Expected ")" but "'+m+'" found.');e++,s.value=t}c=c||{},(c.pseudos=c.pseudos||[]).push(s)}return c},this}a.prototype.registerSelectorPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.pseudos[a]="selector";return this},a.prototype.unregisterSelectorPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.pseudos[a];return this},a.prototype.registerNumericPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.pseudos[a]="numeric";return this},a.prototype.unregisterNumericPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.pseudos[a];return this},a.prototype.registerNestingOperators=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.ruleNestingOperators[a]=!0;return this},a.prototype.unregisterNestingOperators=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.ruleNestingOperators[a];return this},a.prototype.registerAttrEqualityMods=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.attrEqualityMods[a]=!0;return this},a.prototype.unregisterAttrEqualityMods=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.attrEqualityMods[a];return this},a.prototype.enableSubstitutes=function(){return this.substitutesEnabled=!0,this},a.prototype.disableSubstitutes=function(){return this.substitutesEnabled=!1,this};var f={"!":!0,'"':!0,"#":!0,$:!0,"%":!0,"&":!0,"'":!0,"(":!0,")":!0,"*":!0,"+":!0,",":!0,".":!0,"/":!0,";":!0,"<":!0,"=":!0,">":!0,"?":!0,"@":!0,"[":!0,"\\":!0,"]":!0,"^":!0,"`":!0,"{":!0,"|":!0,"}":!0,"~":!0},g={"\n":"\\n","\r":"\\r","\t":"\\t","\f":"\\f","\v":"\\v"},h={n:"\n",r:"\r",t:"\t",f:"\f","\\":"\\","'":"'"},i={n:"\n",r:"\r",t:"\t",f:"\f","\\":"\\",'"':'"'};a.prototype.parse=function(a){return new e(a,0,this.pseudos,this.attrEqualityMods,this.ruleNestingOperators,this.substitutesEnabled).parse()},a.prototype.escapeIdentifier=function(a){for(var b="",c=0,d=a.length;c<d;){var e=a.charAt(c);if(f[e])b+="\\"+e;else if("_"===e||"-"===e||e>="A"&&e<="Z"||e>="a"&&e<="z"||0!==c&&e>="0"&&e<="9")b+=e;else{var g=e.charCodeAt(0);if(55296==(63488&g)){var h=a.charCodeAt(c++);if(55296!=(64512&g)||56320!=(64512&h))throw Error("UCS-2(decode): illegal sequence");g=((1023&g)<<10)+(1023&h)+65536}b+="\\"+g.toString(16)+" "}c++}return b},a.prototype.escapeStr=function(a){for(var b,c,d="",e=0,f=a.length;e<f;)b=a.charAt(e),'"'===b?b='\\"':"\\"===b?b="\\\\":(c=g[b])&&(b=c),d+=b,e++;return'"'+d+'"'},a.prototype.render=function(a){return this._renderEntity(a).trim()},a.prototype._renderEntity=function(a){var b,c,d;switch(d="",a.type){case"ruleSet":for(b=a.rule,c=[];b;)b.nestingOperator&&c.push(b.nestingOperator),c.push(this._renderEntity(b)),b=b.rule;d=c.join(" ");break;case"selectors":d=a.selectors.map(this._renderEntity,this).join(", ");break;case"rule":a.tagName&&(d="*"===a.tagName?"*":this.escapeIdentifier(a.tagName)),a.id&&(d+="#"+this.escapeIdentifier(a.id)),a.classNames&&(d+=a.classNames.map(function(a){return"."+this.escapeIdentifier(a)},this).join("")),a.attrs&&(d+=a.attrs.map(function(a){return a.operator?"substitute"===a.valueType?"["+this.escapeIdentifier(a.name)+a.operator+"$"+a.value+"]":"["+this.escapeIdentifier(a.name)+a.operator+this.escapeStr(a.value)+"]":"["+this.escapeIdentifier(a.name)+"]"},this).join("")),a.pseudos&&(d+=a.pseudos.map(function(a){return a.valueType?"selector"===a.valueType?":"+this.escapeIdentifier(a.name)+"("+this._renderEntity(a.value)+")":"substitute"===a.valueType?":"+this.escapeIdentifier(a.name)+"($"+a.value+")":"numeric"===a.valueType?":"+this.escapeIdentifier(a.name)+"("+a.value+")":":"+this.escapeIdentifier(a.name)+"("+this.escapeIdentifier(a.value)+")":":"+this.escapeIdentifier(a.name)},this).join(""));break;default:throw Error('Unknown entity type: "'+a.type(NaN))}return d};var j=new a;j.registerNestingOperators(">"),axe.utils.cssParser=j}(axe),L.prototype={get selector(){return this.spec.selector||[axe.utils.getSelector(this.element,this._options)]},get xpath(){return this.spec.xpath||[axe.utils.getXpath(this.element)]},get element(){return this._element},get fromFrame(){return this._fromFrame},toJSON:function(){"use strict";return{selector:this.selector,source:this.source,xpath:this.xpath}}},L.fromFrame=function(a,b,c){return a.selector.unshift(c.selector),a.xpath.unshift(c.xpath),new axe.utils.DqElement(c.element,b,a)},axe.utils.DqElement=L,axe.utils.matchesSelector=function(){"use strict";function a(a){var b,c,d=a.Element.prototype,e=["matches","matchesSelector","mozMatchesSelector","webkitMatchesSelector","msMatchesSelector"],f=e.length;for(b=0;b<f;b++)if(c=e[b],d[c])return c}var b;return function(c,d){return b&&c[b]||(b=a(c.ownerDocument.defaultView)),c[b](d)}}(),axe.utils.escapeSelector=function(a){"use strict";for(var b,c=String(a),d=c.length,e=-1,f="",g=c.charCodeAt(0);++e<d;){if(0==(b=c.charCodeAt(e)))throw new Error("INVALID_CHARACTER_ERR");b>=1&&b<=31||b>=127&&b<=159||0==e&&b>=48&&b<=57||1==e&&b>=48&&b<=57&&45==g?f+="\\"+b.toString(16)+" ":f+=(1!=e||45!=b||45!=g)&&(b>=128||45==b||95==b||b>=48&&b<=57||b>=65&&b<=90||b>=97&&b<=122)?c.charAt(e):"\\"+c.charAt(e)}return f},axe.utils.extendMetaData=function(a,b){Object.assign(a,b),Object.keys(b).filter(function(a){return"function"==typeof b[a]}).forEach(function(c){a[c]=null;try{a[c]=b[c](a)}catch(a){}})},axe.utils.finalizeRuleResult=function(a){return Object.assign(a,axe.utils.aggregateRule(a.nodes)),delete a.nodes,a};var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};axe.utils.findBy=function(a,b,c){if(Array.isArray(a))return a.find(function(a){return"object"===(void 0===a?"undefined":ta(a))&&a[b]===c})};var axe=axe||{utils:{}};axe.utils.getFlattenedTree=function(a,b){function c(a,c){var d=axe.utils.getFlattenedTree(c,b);return d&&(a=a.concat(d)),a}var d,e,f;if(a.documentElement&&(a=a.documentElement),f=a.nodeName.toLowerCase(),a.shadowRoot&&"marquee"!==f)return d=M(a,b),b="a"+Math.random().toString().substring(2),e=Array.from(a.shadowRoot.childNodes),d.children=e.reduce(c,[]),[d];if("content"===f)return e=Array.from(a.getDistributedNodes()),e.reduce(c,[]);if("slot"===f){e=Array.from(a.assignedNodes()),e.length||(e=N(a));window.getComputedStyle(a);return e.reduce(c,[])}return 1===a.nodeType?(d=M(a,b),e=Array.from(a.childNodes),d.children=e.reduce(c,[]),[d]):3===a.nodeType?[M(a)]:void 0},axe.utils.getNodeFromTree=function(a,b){var c;return a.actualNode===b?a:(a.children.forEach(function(a){var d;a.actualNode===b?c=a:(d=axe.utils.getNodeFromTree(a,b))&&(c=d)}),c)},axe.utils.getAllChecks=function(a){"use strict";return[].concat(a.any||[]).concat(a.all||[]).concat(a.none||[])},axe.utils.getCheckOption=function(a,b,c){var d=((c.rules&&c.rules[b]||{}).checks||{})[a.id],e=(c.checks||{})[a.id],f=a.enabled,g=a.options;return e&&(e.hasOwnProperty("enabled")&&(f=e.enabled),e.hasOwnProperty("options")&&(g=e.options)),d&&(d.hasOwnProperty("enabled")&&(f=d.enabled),d.hasOwnProperty("options")&&(g=d.options)),{enabled:f,options:g,absolutePaths:c.absolutePaths}};var Ba=function(){function a(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!b||c.length!==b);d=!0);}catch(a){e=!0,f=a}finally{try{!d&&h.return&&h.return()}finally{if(e)throw f}}return c}return function(b,c){if(Array.isArray(b))return b;if(Symbol.iterator in Object(b))return a(b,c);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();axe.utils.getFriendlyUriEnd=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(a.length<=1||"data:"===a.substr(0,5)||"javascript:"===a.substr(0,11)||a.includes("?"))){var c=b.currentDomain,d=b.maxLength,e=void 0===d?25:d,f=Q(a),g=f.path,h=f.domain,i=f.hash,j=g.substr(g.substr(0,g.length-2).lastIndexOf("/")+1);if(i)return j&&(j+i).length<=e?j+i:j.length<2&&i.length>2&&i.length<=e?i:void 0;if(h&&h.length<e&&g.length<=1)return h+g;if(g==="/"+j&&h&&c&&h!==c&&(h+g).length<=e)return h+g;var k=j.lastIndexOf(".");return(-1===k||k>1)&&(-1!==k||j.length>2)&&j.length<=e&&!j.match(/index(\.[a-zA-Z]{2-4})?/)&&!O(j)?j:void 0}};var Ca=axe.utils.escapeSelector,Da=["div","span","p","b","i","u","strong","em","h2","h3"],Ea={getElmId:function(a){if(a.getAttribute("id")){var b=a.getRootNode&&a.getRootNode()||document,c="#"+Ca(a.getAttribute("id")||"");return c.match(/player_uid_/)||1!==b.querySelectorAll(c).length?void 0:c}},getCustomElm:function(a,b){var c=b.isCustomElm,d=b.nodeName;if(c)return d},getElmRoleProp:function(a){if(a.hasAttribute("role"))return'[role="'+Ca(a.getAttribute("role"))+'"]'},getUncommonElm:function(a,b){var c=b.isCommonElm,d=b.isCustomElm,e=b.nodeName;if(!c&&!d)return e=Ca(e),"input"===e&&a.hasAttribute("type")&&(e+='[type="'+a.type+'"]'),e},getElmNameProp:function(a){if(!a.hasAttribute("id")&&a.name)return'[name="'+Ca(a.name)+'"]'},getDistinctClass:function(a,b){var c=b.distinctClassList;if(c.length>0&&c.length<3)return"."+c.map(Ca).join(".")},getFileRefProp:function(a){var b=void 0;if(a.hasAttribute("href"))b="href";else{if(!a.hasAttribute("src"))return;b="src"}var c=axe.utils.getFriendlyUriEnd(a.getAttribute(b));if(c)return"["+b+'$="'+encodeURI(c)+'"]'},getCommonName:function(a,b){var c=b.nodeName;if(b.isCommonElm)return c}};axe.utils.getSelector=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!a)return"";var c=a.getRootNode&&a.getRootNode()||document;if(11===c.nodeType){for(var d=[];11===c.nodeType;)d.push({elm:a,doc:c}),a=c.host,c=a.getRootNode();return d.push({elm:a,doc:c}),d.reverse().map(function(a){return W(a.elm,b,a.doc)})}return W(a,b,c)},axe.utils.getXpath=function(a){return Y(X(a))};var Fa;axe.utils.injectStyle=Z,axe.utils.isHidden=function(a,b){"use strict";var c;if(9===a.nodeType)return!1;11===a.nodeType&&(a=a.host);var d=window.getComputedStyle(a,null);return!d||!a.parentNode||"none"===d.getPropertyValue("display")||!b&&"hidden"===d.getPropertyValue("visibility")||"true"===a.getAttribute("aria-hidden")||(c=a.assignedSlot?a.assignedSlot:a.parentNode,axe.utils.isHidden(c,!0))},axe.utils.mergeResults=function(a,b){"use strict";var c=[];return a.forEach(function(a){var d=aa(a);d&&d.length&&d.forEach(function(d){d.nodes&&a.frame&&$(d.nodes,b,a.frameElement,a.frame);var e=axe.utils.findBy(c,"id",d.id);e?d.nodes.length&&_(e.nodes,d.nodes):c.push(d)})}),c},axe.utils.nodeSorter=function(a,b){"use strict";return a.actualNode===b.actualNode?0:4&a.actualNode.compareDocumentPosition(b.actualNode)?-1:1},utils.performanceTimer=function(){"use strict";function a(){if(window.performance&&window.performance)return window.performance.now()}var b=null,c=a();return{start:function(){this.mark("mark_axe_start")},end:function(){this.mark("mark_axe_end"),this.measure("axe","mark_axe_start","mark_axe_end"),this.logMeasures("axe")},auditStart:function(){this.mark("mark_audit_start")},auditEnd:function(){this.mark("mark_audit_end"),this.measure("audit_start_to_end","mark_audit_start","mark_audit_end"),this.logMeasures()},mark:function(a){window.performance&&void 0!==window.performance.mark&&window.performance.mark(a)},measure:function(a,b,c){window.performance&&void 0!==window.performance.measure&&window.performance.measure(a,b,c)},logMeasures:function(a){function b(a){axe.log("Measure "+a.name+" took "+a.duration+"ms")}if(window.performance&&void 0!==window.performance.getEntriesByType)for(var c=window.performance.getEntriesByType("measure"),d=0;d<c.length;++d){var e=c[d];if(e.name===a)return void b(e);b(e)}},timeElapsed:function(){return a()-c},reset:function(){b||(b=a()),c=a()}}}(),"function"!=typeof Object.assign&&function(){Object.assign=function(a){"use strict";if(void 0===a||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=Object(a),c=1;c<arguments.length;c++){var d=arguments[c];if(void 0!==d&&null!==d)for(var e in d)d.hasOwnProperty(e)&&(b[e]=d[e])}return b}}(),Array.prototype.find||(Array.prototype.find=function(a){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof a)throw new TypeError("predicate must be a function");for(var b,c=Object(this),d=c.length>>>0,e=arguments[1],f=0;f<d;f++)if(b=c[f],a.call(e,b,f,c))return b}),axe.utils.pollyfillElementsFromPoint=function(){if(document.elementsFromPoint)return document.elementsFromPoint;if(document.msElementsFromPoint)return document.msElementsFromPoint;var a=function(){var a=document.createElement("x");return a.style.cssText="pointer-events:auto","auto"===a.style.pointerEvents}(),b=a?"pointer-events":"visibility",c=a?"none":"hidden",d=document.createElement("style");return d.innerHTML=a?"* { pointer-events: all }":"* { visibility: visible }",function(a,e){var f,g,h,i=[],j=[];for(document.head.appendChild(d);(f=document.elementFromPoint(a,e))&&-1===i.indexOf(f);)i.push(f),j.push({value:f.style.getPropertyValue(b),priority:f.style.getPropertyPriority(b)}),f.style.setProperty(b,c,"important");for(g=j.length;h=j[--g];)i[g].style.setProperty(b,h.value?h.value:"",h.priority);return document.head.removeChild(d),i}},"function"==typeof window.addEventListener&&(document.elementsFromPoint=axe.utils.pollyfillElementsFromPoint()),Array.prototype.includes||(Array.prototype.includes=function(a){"use strict";var b=Object(this),c=parseInt(b.length,10)||0;if(0===c)return!1;var d,e=parseInt(arguments[1],10)||0;e>=0?d=e:(d=c+e)<0&&(d=0);for(var f;d<c;){if(f=b[d],a===f||a!==a&&f!==f)return!0;d++}return!1}),Array.prototype.some||(Array.prototype.some=function(a){"use strict";if(null==this)throw new TypeError("Array.prototype.some called on null or undefined");if("function"!=typeof a)throw new TypeError;for(var b=Object(this),c=b.length>>>0,d=arguments.length>=2?arguments[1]:void 0,e=0;e<c;e++)if(e in b&&a.call(d,b[e],e,b))return!0;return!1}),Array.from||(Array.from=function(){var a=Object.prototype.toString,b=function(b){return"function"==typeof b||"[object Function]"===a.call(b)},c=function(a){var b=Number(a);return isNaN(b)?0:0!==b&&isFinite(b)?(b>0?1:-1)*Math.floor(Math.abs(b)):b},d=Math.pow(2,53)-1,e=function(a){var b=c(a);return Math.min(Math.max(b,0),d)};return function(a){var c=this,d=Object(a);if(null==a)throw new TypeError("Array.from requires an array-like object - not null or undefined");var f,g=arguments.length>1?arguments[1]:void 0;if(void 0!==g){if(!b(g))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(f=arguments[2])}for(var h,i=e(d.length),j=b(c)?Object(new c(i)):new Array(i),k=0;k<i;)h=d[k],j[k]=g?void 0===f?g(h,k):g.call(f,h,k):h,k+=1;return j.length=i,j}}()),String.prototype.includes||(String.prototype.includes=function(a,b){return"number"!=typeof b&&(b=0),!(b+a.length>this.length)&&-1!==this.indexOf(a,b)});var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};axe.utils.publishMetaData=function(a){"use strict";var b=axe._audit.data.checks||{},c=axe._audit.data.rules||{},d=axe.utils.findBy(axe._audit.rules,"id",a.id)||{};a.tags=axe.utils.clone(d.tags||[]);var e=ca(b,!0),f=ca(b,!1);a.nodes.forEach(function(a){a.any.forEach(e),a.all.forEach(e),a.none.forEach(f)}),axe.utils.extendMetaData(a,axe.utils.clone(c[a.id]||{}))};var Ga=function(){},Ha=function(){},Ia=function(){/*! Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan <http://stevenlevithan.com/regex/xregexp/> MIT License */
+var a=/(?=[\-\[\]{}()*+?.\\\^$|,#\s])/g;return function(b){return b.replace(a,"\\")}}(),Ja=/\\/g;Ga=function(a){return a.map(function(a){for(var b=[],c=a.rule;c;)b.push({tag:c.tagName?c.tagName.toLowerCase():"*",combinator:c.nestingOperator?c.nestingOperator:" ",id:c.id,attributes:ja(c.attrs),classes:ka(c.classNames),pseudos:la(c.pseudos)}),c=c.rule;return b})},Ha=function(a,b,c){return b.reduce(function(b,d){var e=a;return d.forEach(function(a,b){if(c=">"!==a.combinator&&c,-1===[" ",">"].indexOf(a.combinator))throw new Error("axe.utils.querySelectorAll does not support the combinator: "+a.combinator);e=e.reduce(function(d,e){return d.concat(ia(b?e.children:e,a,c))},[])}),b.concat(e)},[])},axe.utils.querySelectorAll=function(a,b){a=Array.isArray(a)?a:[a];var c=axe.utils.cssParser.parse(b);return c=c.selectors?c.selectors:[c],c=Ga(c),Ha(a,c,!0)};var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};!function(){"use strict";function a(){}function b(a){if("function"!=typeof a)throw new TypeError("Queue methods require functions as arguments")}function c(){function c(b){return function(c){g[b]=c,(i-=1)||j===a||(k=!0,j(g))}}function d(b){return j=a,m(b),g}function e(){for(var a=g.length;h<a;h++){var b=g[h];try{b.call(null,c(h),d)}catch(a){d(a)}}}var f,g=[],h=0,i=0,j=a,k=!1,l=function(a){f=a,setTimeout(function(){void 0!==f&&null!==f&&axe.log("Uncaught error (of queue)",f)},1)},m=l,n={defer:function(a){if("object"===(void 0===a?"undefined":ta(a))&&a.then&&a.catch){var c=a;a=function(a,b){c.then(a).catch(b)}}if(b(a),void 0===f){if(k)throw new Error("Queue already completed");return g.push(a),++i,e(),n}},then:function(c){if(b(c),j!==a)throw new Error("queue `then` already set");return f||(j=c,i||(k=!0,j(g))),n},catch:function(a){if(b(a),m!==l)throw new Error("queue `catch` already set");return f?(a(f),f=null):m=a,n},abort:d};return n}axe.utils.queue=c}();var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};!function(a){"use strict";function b(){var a="axe",b="";return void 0!==axe&&axe._audit&&!axe._audit.application&&(a=axe._audit.application),void 0!==axe&&(b=axe.version),a+"."+b}function c(a){if("object"===(void 0===a?"undefined":ta(a))&&"string"==typeof a.uuid&&!0===a._respondable){var c=b();return a._source===c||"axe.x.y.z"===a._source||"axe.x.y.z"===c}return!1}function d(a,c,d,e,f,g){var h;d instanceof Error&&(h={name:d.name,message:d.message,stack:d.stack},d=void 0);var i={uuid:e,topic:c,message:d,error:h,_respondable:!0,_source:b(),_keepalive:f};"function"==typeof g&&(j[e]=g),a.postMessage(JSON.stringify(i),"*")}function e(a,b,c,e,f){d(a,b,c,Ka.v1(),e,f)}function f(a,b,c){return function(e,f,g){d(a,b,e,c,f,g)}}function g(a,b,c){var d=b.topic,e=k[d];if(e){var g=f(a,null,b.uuid);e(b.message,c,g)}}function h(a){var b=a.message||"Unknown error occurred",c=window[a.name]||Error;return a.stack&&(b+="\n"+a.stack.replace(a.message,"")),new c(b)}function i(a){var b;if("string"==typeof a){try{b=JSON.parse(a)}catch(a){}if(c(b))return"object"===ta(b.error)?b.error=h(b.error):b.error=void 0,b}}var j={},k={};e.subscribe=function(a,b){k[a]=b},e.isInFrame=function(a){return a=a||window,!!a.frameElement},"function"==typeof window.addEventListener&&window.addEventListener("message",function(a){var b=i(a.data);if(b){var c=b.uuid,e=b._keepalive,h=j[c];if(h){h(b.error||b.message,e,f(a.source,b.topic,c)),e||delete j[c]}if(!b.error)try{g(a.source,b,e)}catch(e){d(a.source,b.topic,e,c,!1)}}},!1),a.respondable=e}(utils),axe.utils.ruleShouldRun=function(a,b,c){"use strict";var d=c.runOnly||{},e=(c.rules||{})[a.id];return!(a.pageLevel&&!b.page)&&("rule"===d.type?-1!==d.values.indexOf(a.id):e&&"boolean"==typeof e.enabled?e.enabled:"tag"===d.type&&d.values?ma(a,d.values):ma(a,[]))},axe.utils.getScrollState=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window,b=a.document.documentElement;return[void 0!==a.pageXOffset?{elm:a,top:a.pageYOffset,left:a.pageXOffset}:{elm:b,top:b.scrollTop,left:b.scrollLeft}].concat(pa(document.body))},axe.utils.setScrollState=function(a){a.forEach(function(a){return oa(a.elm,a.top,a.left)})},axe.utils.select=function(a,b){"use strict";for(var c,d=[],e=0,f=b.include.length;e<f;e++)c=b.include[e],c.actualNode.nodeType===c.actualNode.ELEMENT_NODE&&axe.utils.matchesSelector(c.actualNode,a)&&sa(d,[c],b),sa(d,axe.utils.querySelectorAll(c,a),b);return d.sort(axe.utils.nodeSorter)},axe.utils.toArray=function(a){"use strict";return Array.prototype.slice.call(a)};var Ka;!function(a){function b(a,b,c){var d=b&&c||0,e=0;for(b=b||[],a.toLowerCase().replace(/[0-9a-f]{2}/g,function(a){e<16&&(b[d+e++]=l[a])});e<16;)b[d+e++]=0;return b}function c(a,b){var c=b||0,d=k;return d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]}function d(a,b,d){var e=b&&d||0,f=b||[];a=a||{};var g=null!=a.clockseq?a.clockseq:p,h=null!=a.msecs?a.msecs:(new Date).getTime(),i=null!=a.nsecs?a.nsecs:r+1,j=h-q+(i-r)/1e4;if(j<0&&null==a.clockseq&&(g=g+1&16383),(j<0||h>q)&&null==a.nsecs&&(i=0),i>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");q=h,r=i,p=g,h+=122192928e5;var k=(1e4*(268435455&h)+i)%4294967296;f[e++]=k>>>24&255,f[e++]=k>>>16&255,f[e++]=k>>>8&255,f[e++]=255&k;var l=h/4294967296*1e4&268435455;f[e++]=l>>>8&255,f[e++]=255&l,f[e++]=l>>>24&15|16,f[e++]=l>>>16&255,f[e++]=g>>>8|128,f[e++]=255&g;for(var m=a.node||o,n=0;n<6;n++)f[e+n]=m[n];return b||c(f)}function e(a,b,d){var e=b&&d||0;"string"==typeof a&&(b="binary"==a?new j(16):null,a=null),a=a||{};var g=a.random||(a.rng||f)();if(g[6]=15&g[6]|64,g[8]=63&g[8]|128,b)for(var h=0;h<16;h++)b[e+h]=g[h];return b||c(g)}var f,g=a.crypto||a.msCrypto;if(!f&&g&&g.getRandomValues){var h=new Uint8Array(16);f=function(){return g.getRandomValues(h),h}}if(!f){var i=new Array(16);f=function(){for(var a,b=0;b<16;b++)0==(3&b)&&(a=4294967296*Math.random()),i[b]=a>>>((3&b)<<3)&255;return i}}for(var j="function"==typeof a.Buffer?a.Buffer:Array,k=[],l={},m=0;m<256;m++)k[m]=(m+256).toString(16).substr(1),l[k[m]]=m;var n=f(),o=[1|n[0],n[1],n[2],n[3],n[4],n[5]],p=16383&(n[6]<<8|n[7]),q=0,r=0;Ka=e,Ka.v1=d,Ka.v4=e,Ka.parse=b,Ka.unparse=c,Ka.BufferClass=j}(window),axe._load({data:{rules:{accesskeys:{description:"Ensures every accesskey attribute value is unique",help:"accesskey attribute value must be unique"},"area-alt":{description:"Ensures <area> elements of image maps have alternate text",help:"Active <area> elements must have alternate text"},"aria-allowed-attr":{description:"Ensures ARIA attributes are allowed for an element's role",help:"Elements must only use allowed ARIA attributes"},"aria-hidden-body":{description:"Ensures aria-hidden='true' is not present on the document body.",help:"aria-hidden='true' must not be present on the document body"},"aria-required-attr":{description:"Ensures elements with ARIA roles have all required ARIA attributes",help:"Required ARIA attributes must be provided"},"aria-required-children":{description:"Ensures elements with an ARIA role that require child roles contain them",help:"Certain ARIA roles must contain particular children"},"aria-required-parent":{description:"Ensures elements with an ARIA role that require parent roles are contained by them",help:"Certain ARIA roles must be contained by particular parents"},"aria-roles":{description:"Ensures all elements with a role attribute use a valid value",help:"ARIA roles used must conform to valid values"},"aria-valid-attr-value":{description:"Ensures all ARIA attributes have valid values",help:"ARIA attributes must conform to valid values"},"aria-valid-attr":{description:"Ensures attributes that begin with aria- are valid ARIA attributes",help:"ARIA attributes must conform to valid names"},"audio-caption":{description:"Ensures <audio> elements have captions",help:"<audio> elements must have a captions track"},blink:{description:"Ensures <blink> elements are not used",help:"<blink> elements are deprecated and must not be used"},"button-name":{description:"Ensures buttons have discernible text",help:"Buttons must have discernible text"},bypass:{description:"Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content",help:"Page must have means to bypass repeated blocks"},checkboxgroup:{description:'Ensures related <input type="checkbox"> elements have a group and that that group designation is consistent',help:"Checkbox inputs with the same name attribute value must be part of a group"},"color-contrast":{description:"Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds",help:"Elements must have sufficient color contrast"},"definition-list":{description:"Ensures <dl> elements are structured correctly",help:"<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script> or <template> elements"},dlitem:{description:"Ensures <dt> and <dd> elements are contained by a <dl>",help:"<dt> and <dd> elements must be contained by a <dl>"},"document-title":{description:"Ensures each HTML document contains a non-empty <title> element",help:"Documents must have <title> element to aid in navigation"},"duplicate-id":{description:"Ensures every id attribute value is unique",help:"id attribute value must be unique"},"empty-heading":{description:"Ensures headings have discernible text",help:"Headings must not be empty"},"frame-title-unique":{description:"Ensures <iframe> and <frame> elements contain a unique title attribute",help:"Frames must have a unique title attribute"},"frame-title":{description:"Ensures <iframe> and <frame> elements contain a non-empty title attribute",help:"Frames must have title attribute"},"heading-order":{description:"Ensures the order of headings is semantically correct",help:"Heading levels should only increase by one"},"hidden-content":{description:"Informs users about hidden content.",help:"Hidden content on the page cannot be analyzed"},"href-no-hash":{description:"Ensures that href values are valid link references to promote only using anchors as links",help:"Anchors must only be used as links with valid URLs or URL fragments"},"html-has-lang":{description:"Ensures every HTML document has a lang attribute",help:"<html> element must have a lang attribute"},"html-lang-valid":{description:"Ensures the lang attribute of the <html> element has a valid value",help:"<html> element must have a valid value for the lang attribute"},"image-alt":{description:"Ensures <img> elements have alternate text or a role of none or presentation",help:"Images must have alternate text"},"image-redundant-alt":{description:"Ensure button and link text is not repeated as image alternative",help:"Text of buttons and links should not be repeated in the image alternative"},"input-image-alt":{description:'Ensures <input type="image"> elements have alternate text',help:"Image buttons must have alternate text"},"label-title-only":{description:"Ensures that every form element is not solely labeled using the title or aria-describedby attributes",help:"Form elements should have a visible label"},label:{description:"Ensures every form element has a label",help:"Form elements must have labels"},"layout-table":{description:"Ensures presentational <table> elements do not use <th>, <caption> elements or the summary attribute",help:"Layout tables must not use data table elements"},"link-in-text-block":{description:"Links can be distinguished without relying on color",help:"Links must be distinguished from surrounding text in a way that does not rely on color"},"link-name":{description:"Ensures links have discernible text",help:"Links must have discernible text"},list:{description:"Ensures that lists are structured correctly",help:"<ul> and <ol> must only directly contain <li>, <script> or <template> elements"},listitem:{description:"Ensures <li> elements are used semantically",help:"<li> elements must be contained in a <ul> or <ol>"},marquee:{description:"Ensures <marquee> elements are not used",help:"<marquee> elements are deprecated and must not be used"},"meta-refresh":{description:'Ensures <meta http-equiv="refresh"> is not used',help:"Timed refresh must not exist"},"meta-viewport-large":{description:'Ensures <meta name="viewport"> can scale a significant amount',help:"Users should be able to zoom and scale the text up to 500%"},"meta-viewport":{description:'Ensures <meta name="viewport"> does not disable text scaling and zooming',help:"Zooming and scaling must not be disabled"},"object-alt":{description:"Ensures <object> elements have alternate text",help:"<object> elements must have alternate text"},"p-as-heading":{description:"Ensure p elements are not used to style headings",help:"Bold, italic text and font-size are not used to style p elements as a heading"},radiogroup:{description:'Ensures related <input type="radio"> elements have a group and that the group designation is consistent',help:"Radio inputs with the same name attribute value must be part of a group"},region:{description:"Ensures all content is contained within a landmark region",help:"Content should be contained in a landmark region"},"scope-attr-valid":{description:"Ensures the scope attribute is used correctly on tables",help:"scope attribute should be used correctly"},"server-side-image-map":{description:"Ensures that server-side image maps are not used",help:"Server-side image maps must not be used"},"skip-link":{description:"Ensures the first link on the page is a skip link",help:"The page should have a skip link as its first link"},tabindex:{description:"Ensures tabindex attribute values are not greater than 0",help:"Elements should not have tabindex greater than zero"},"table-duplicate-name":{description:"Ensure that tables do not have the same summary and caption",help:"The <caption> element should not contain the same text as the summary attribute"},"table-fake-caption":{description:"Ensure that tables with a caption use the <caption> element.",help:"Data or header cells should not be used to give caption to a data table."},"td-has-header":{description:"Ensure that each non-empty data cell in a large table has one or more table headers",help:"All non-empty td element in table larger than 3 by 3 must have an associated table header"},"td-headers-attr":{description:"Ensure that each cell in a table using the headers refers to another cell in that table",help:"All cells in a table element that use the headers attribute must only refer to other cells of that same table"},"th-has-data-cells":{description:"Ensure that each table header in a data table refers to data cells",help:"All th element and elements with role=columnheader/rowheader must data cells which it describes"},"valid-lang":{description:"Ensures lang attributes have valid values",help:"lang attribute must have a valid value"},"video-caption":{description:"Ensures <video> elements have captions",help:"<video> elements must have captions"},"video-description":{description:"Ensures <video> elements have audio descriptions",help:"<video> elements must have an audio description track"}},checks:{accesskeys:{impact:"serious",messages:{pass:function(a){return"Accesskey attribute value is unique"},fail:function(a){return"Document has multiple elements with the same accesskey"}}},"non-empty-alt":{impact:"critical",messages:{pass:function(a){return"Element has a non-empty alt attribute"},fail:function(a){return"Element has no alt attribute or the alt attribute is empty"}}},"non-empty-title":{impact:"serious",messages:{pass:function(a){return"Element has a title attribute"},fail:function(a){return"Element has no title attribute or the title attribute is empty"}}},"aria-label":{impact:"serious",messages:{pass:function(a){return"aria-label attribute exists and is not empty"},fail:function(a){return"aria-label attribute does not exist or is empty"}}},"aria-labelledby":{impact:"serious",messages:{pass:function(a){return"aria-labelledby attribute exists and references elements that are visible to screen readers"},fail:function(a){return"aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty or not visible"}}},"aria-allowed-attr":{impact:"critical",messages:{pass:function(a){return"ARIA attributes are used correctly for the defined role"},fail:function(a){var b="ARIA attribute"+(a.data&&a.data.length>1?"s are":" is")+" not allowed:",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=" "+d;return b}}},"aria-hidden-body":{impact:"critical",messages:{pass:function(a){return"No aria-hidden attribute is present on document body"},fail:function(a){return"aria-hidden=true should not be present on the document body"}}},"aria-required-attr":{impact:"critical",messages:{pass:function(a){return"All required ARIA attributes are present"},fail:function(a){var b="Required ARIA attribute"+(a.data&&a.data.length>1?"s":"")+" not present:",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=" "+d;return b}}},"aria-required-children":{impact:"critical",messages:{pass:function(a){return"Required ARIA children are present"},fail:function(a){var b="Required ARIA "+(a.data&&a.data.length>1?"children":"child")+" role not present:",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=" "+d;return b}}},"aria-required-parent":{impact:"critical",messages:{pass:function(a){return"Required ARIA parent role present"},fail:function(a){var b="Required ARIA parent"+(a.data&&a.data.length>1?"s":"")+" role not present:",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=" "+d;return b}}},invalidrole:{impact:"critical",messages:{pass:function(a){return"ARIA role is valid"},fail:function(a){return"Role must be one of the valid ARIA roles"}}},abstractrole:{impact:"serious",messages:{pass:function(a){return"Abstract roles are not used"},fail:function(a){return"Abstract roles cannot be directly used"}}},"aria-valid-attr-value":{impact:"critical",messages:{pass:function(a){return"ARIA attribute values are valid"},fail:function(a){var b="Invalid ARIA attribute value"+(a.data&&a.data.length>1?"s":"")+":",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=" "+d;return b}}},"aria-valid-attr":{impact:"critical",messages:{pass:function(a){return"ARIA attribute name"+(a.data&&a.data.length>1?"s":"")+" are valid"},fail:function(a){var b="Invalid ARIA attribute name"+(a.data&&a.data.length>1?"s":"")+":",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=" "+d;return b}}},caption:{impact:"critical",messages:{pass:function(a){return"The multimedia element has a captions track"},fail:function(a){return"The multimedia element does not have a captions track"},incomplete:function(a){return"A captions track for this element could not be found"}}},"is-on-screen":{impact:"serious",messages:{pass:function(a){return"Element is not visible"},fail:function(a){return"Element is visible"}}},"non-empty-if-present":{impact:"critical",messages:{pass:function(a){var b="Element ";return a.data?b+="has a non-empty value attribute":b+="does not have a value attribute",b},fail:function(a){return"Element has a value attribute and the value attribute is empty"}}},"non-empty-value":{impact:"critical",messages:{pass:function(a){return"Element has a non-empty value attribute"},fail:function(a){return"Element has no value attribute or the value attribute is empty"}}},"button-has-visible-text":{impact:"critical",messages:{pass:function(a){return"Element has inner text that is visible to screen readers"},fail:function(a){return"Element does not have inner text that is visible to screen readers"}}},"role-presentation":{impact:"minor",messages:{pass:function(a){return'Element\'s default semantics were overriden with role="presentation"'},fail:function(a){return'Element\'s default semantics were not overridden with role="presentation"'}}},"role-none":{impact:"minor",messages:{pass:function(a){return'Element\'s default semantics were overriden with role="none"'},fail:function(a){return'Element\'s default semantics were not overridden with role="none"'}}},"focusable-no-name":{impact:"serious",messages:{pass:function(a){return"Element is not in tab order or has accessible text"},fail:function(a){return"Element is in tab order and does not have accessible text"}}},"internal-link-present":{impact:"serious",messages:{pass:function(a){return"Valid skip link found"},fail:function(a){return"No valid skip link found"}}},"header-present":{impact:"serious",messages:{pass:function(a){return"Page has a header"},fail:function(a){return"Page does not have a header"}}},landmark:{impact:"serious",messages:{pass:function(a){return"Page has a landmark region"},fail:function(a){return"Page does not have a landmark region"}}},"group-labelledby":{impact:"critical",messages:{pass:function(a){return'All elements with the name "'+a.data.name+'" reference the same element with aria-labelledby'},fail:function(a){return'All elements with the name "'+a.data.name+'" do not reference the same element with aria-labelledby'}}},fieldset:{impact:"critical",messages:{pass:function(a){return"Element is contained in a fieldset"},fail:function(a){var b="",c=a.data&&a.data.failureCode;return b+="no-legend"===c?"Fieldset does not have a legend as its first child":"empty-legend"===c?"Legend does not have text that is visible to screen readers":"mixed-inputs"===c?"Fieldset contains unrelated inputs":"no-group-label"===c?"ARIA group does not have aria-label or aria-labelledby":"group-mixed-inputs"===c?"ARIA group contains unrelated inputs":"Element does not have a containing fieldset or ARIA group"}}},"color-contrast":{impact:"serious",messages:{pass:function(a){return"Element has sufficient color contrast of "+a.data.contrastRatio},fail:function(a){return"Element has insufficient color contrast of "+a.data.contrastRatio+" (foreground color: "+a.data.fgColor+", background color: "+a.data.bgColor+", font size: "+a.data.fontSize+", font weight: "+a.data.fontWeight+")"},incomplete:{bgImage:"Element's background color could not be determined due to a background image",bgGradient:"Element's background color could not be determined due to a background gradient",imgNode:"Element's background color could not be determined because element contains an image node",bgOverlap:"Element's background color could not be determined because it is overlapped by another element",fgAlpha:"Element's foreground color could not be determined because of alpha transparency",elmPartiallyObscured:"Element's background color could not be determined because it's partially obscured by another element",equalRatio:"Element has a 1:1 contrast ratio with the background",default:"Unable to determine contrast ratio"}}},"structured-dlitems":{impact:"serious",messages:{pass:function(a){return"When not empty, element has both <dt> and <dd> elements"},fail:function(a){return"When not empty, element does not have at least one <dt> element followed by at least one <dd> element"}}},"only-dlitems":{impact:"serious",messages:{pass:function(a){return"List element only has direct children that are allowed inside <dt> or <dd> elements"},fail:function(a){return"List element has direct children that are not allowed inside <dt> or <dd> elements"}}},dlitem:{impact:"serious",messages:{pass:function(a){return"Description list item has a <dl> parent element"},fail:function(a){return"Description list item does not have a <dl> parent element"}}},"doc-has-title":{impact:"serious",messages:{pass:function(a){return"Document has a non-empty <title> element"},fail:function(a){return"Document does not have a non-empty <title> element"}}},"duplicate-id":{impact:"moderate",messages:{pass:function(a){return"Document has no elements that share the same id attribute"},fail:function(a){return"Document has multiple elements with the same id attribute: "+a.data}}},"has-visible-text":{impact:"minor",messages:{pass:function(a){return"Element has text that is visible to screen readers"},fail:function(a){return"Element does not have text that is visible to screen readers"}}},"unique-frame-title":{impact:"serious",messages:{pass:function(a){return"Element's title attribute is unique"},fail:function(a){return"Element's title attribute is not unique"}}},"heading-order":{impact:"moderate",messages:{pass:function(a){return"Heading order valid"},fail:function(a){return"Heading order invalid"}}},"hidden-content":{impact:"minor",messages:{pass:function(a){return"All content on the page has been analyzed."},fail:function(a){return"There were problems analyzing the content on this page."},incomplete:function(a){return"There is hidden content on the page that was not analyzed. You will need to trigger the display of this content in order to analyze it."}}},"href-no-hash":{impact:"moderate",messages:{pass:function(a){return"Anchor does not have an href value of #"},fail:function(a){return"Anchor has an href value of #"}}},"has-lang":{impact:"serious",messages:{pass:function(a){return"The <html> element has a lang attribute"},fail:function(a){return"The <html> element does not have a lang attribute"}}},"valid-lang":{impact:"serious",messages:{pass:function(a){return"Value of lang attribute is included in the list of valid languages"},fail:function(a){return"Value of lang attribute not included in the list of valid languages"}}},"has-alt":{impact:"critical",messages:{pass:function(a){return"Element has an alt attribute"},fail:function(a){return"Element does not have an alt attribute"}}},"duplicate-img-label":{impact:"minor",messages:{pass:function(a){return"Element does not duplicate existing text in <img> alt text"},fail:function(a){return"Element contains <img> element with alt text that duplicates existing text"}}},"title-only":{impact:"serious",messages:{pass:function(a){return"Form element does not solely use title attribute for its label"},fail:function(a){return"Only title used to generate label for form element"}}},"implicit-label":{impact:"critical",messages:{pass:function(a){return"Form element has an implicit (wrapped) <label>"},fail:function(a){return"Form element does not have an implicit (wrapped) <label>"}}},"explicit-label":{impact:"critical",messages:{pass:function(a){return"Form element has an explicit <label>"},fail:function(a){return"Form element does not have an explicit <label>"}}},"help-same-as-label":{impact:"minor",messages:{pass:function(a){return"Help text (title or aria-describedby) does not duplicate label text"},fail:function(a){return"Help text (title or aria-describedby) text is the same as the label text"}}},"multiple-label":{impact:"serious",messages:{pass:function(a){return"Form element does not have multiple <label> elements"},fail:function(a){return"Form element has multiple <label> elements"}}},"has-th":{impact:"serious",messages:{pass:function(a){return"Layout table does not use <th> elements"},fail:function(a){return"Layout table uses <th> elements"}}},"has-caption":{impact:"serious",messages:{pass:function(a){return"Layout table does not use <caption> element"},fail:function(a){return"Layout table uses <caption> element"}}},"has-summary":{impact:"serious",messages:{pass:function(a){return"Layout table does not use summary attribute"},fail:function(a){return"Layout table uses summary attribute"}}},"link-in-text-block":{impact:"serious",messages:{pass:function(a){return"Links can be distinguished from surrounding text in a way that does not rely on color"},fail:function(a){return"Links can not be distinguished from surrounding text in a way that does not rely on color"},incomplete:{bgContrast:"Element's contrast ratio could not be determined. Check for a distinct hover/focus style",bgImage:"Element's contrast ratio could not be determined due to a background image",bgGradient:"Element's contrast ratio could not be determined due to a background gradient",imgNode:"Element's contrast ratio could not be determined because element contains an image node",bgOverlap:"Element's contrast ratio could not be determined because of element overlap",default:"Unable to determine contrast ratio"}}},"only-listitems":{impact:"serious",messages:{pass:function(a){return"List element only has direct children that are allowed inside <li> elements"},fail:function(a){return"List element has direct children that are not allowed inside <li> elements"}}},listitem:{impact:"serious",messages:{pass:function(a){return'List item has a <ul>, <ol> or role="list" parent element'},fail:function(a){return'List item does not have a <ul>, <ol> or role="list" parent element'}}},"meta-refresh":{impact:"critical",messages:{pass:function(a){return"<meta> tag does not immediately refresh the page"},fail:function(a){return"<meta> tag forces timed refresh of page"}}},"meta-viewport-large":{impact:"minor",messages:{pass:function(a){return"<meta> tag does not prevent significant zooming on mobile devices"},fail:function(a){return"<meta> tag limits zooming on mobile devices"}}},"meta-viewport":{impact:"critical",messages:{pass:function(a){return"<meta> tag does not disable zooming on mobile devices"},fail:function(a){return"<meta> tag disables zooming on mobile devices"}}},"p-as-heading":{impact:"serious",messages:{pass:function(a){return"<p> elements are not styled as headings"},fail:function(a){return"Heading elements should be used instead of styled p elements"}}},region:{impact:"moderate",messages:{pass:function(a){return"Content contained by ARIA landmark"},fail:function(a){return"Content not contained by an ARIA landmark"}}},"html5-scope":{impact:"moderate",messages:{pass:function(a){return"Scope attribute is only used on table header elements (<th>)"},fail:function(a){return"In HTML 5, scope attributes may only be used on table header elements (<th>)"}}},"scope-value":{impact:"critical",messages:{pass:function(a){return"Scope attribute is used correctly"},fail:function(a){return"The value of the scope attribute may only be 'row' or 'col'"}}},exists:{impact:"minor",messages:{pass:function(a){return"Element does not exist"},fail:function(a){return"Element exists"}}},"skip-link":{impact:"moderate",messages:{pass:function(a){return"Valid skip link found"},fail:function(a){return"No valid skip link found"}}},tabindex:{impact:"serious",messages:{pass:function(a){return"Element does not have a tabindex greater than 0"},fail:function(a){return"Element has a tabindex greater than 0"}}},"same-caption-summary":{impact:"minor",messages:{pass:function(a){return"Content of summary attribute and <caption> are not duplicated"},fail:function(a){return"Content of summary attribute and <caption> element are identical"}}},"caption-faked":{impact:"serious",messages:{pass:function(a){return"The first row of a table is not used as a caption"},fail:function(a){return"The first row of the table should be a caption instead of a table cell"}}},"td-has-header":{impact:"critical",messages:{pass:function(a){return"All non-empty data cells have table headers"},fail:function(a){return"Some non-empty data cells do not have table headers"}}},"td-headers-attr":{impact:"serious",messages:{pass:function(a){return"The headers attribute is exclusively used to refer to other cells in the table"},fail:function(a){return"The headers attribute is not exclusively used to refer to other cells in the table"}}},"th-has-data-cells":{impact:"serious",messages:{pass:function(a){return"All table header cells refer to data cells"},fail:function(a){return"Not all table header cells refer to data cells"},incomplete:function(a){return"Table data cells are missing or empty"}}},description:{impact:"critical",messages:{pass:function(a){
+return"The multimedia element has an audio description track"},fail:function(a){return"The multimedia element does not have an audio description track"},incomplete:function(a){return"An audio description track for this element could not be found"}}}},failureSummaries:{any:{failureMessage:function(a){var b="Fix any of the following:",c=a;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+="\n  "+d.split("\n").join("\n  ");return b}},none:{failureMessage:function(a){var b="Fix all of the following:",c=a;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+="\n  "+d.split("\n").join("\n  ");return b}}},incompleteFallbackMessage:function(a){return"aXe couldn't tell the reason. Time to break out the element inspector!"}},rules:[{id:"accesskeys",selector:"[accesskey]",excludeHidden:!1,tags:["wcag2a","wcag211","cat.keyboard"],all:[],any:[],none:["accesskeys"]},{id:"area-alt",selector:"map area[href]",excludeHidden:!1,tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["non-empty-alt","non-empty-title","aria-label","aria-labelledby"],none:[]},{id:"aria-allowed-attr",matches:function(a,b){var c=a.getAttribute("role");c||(c=axe.commons.aria.implicitRole(a));var d=axe.commons.aria.allowedAttr(c);if(c&&d){var e=/^aria-/;if(a.hasAttributes())for(var f=a.attributes,g=0,h=f.length;g<h;g++)if(e.test(f[g].name))return!0}return!1},tags:["cat.aria","wcag2a","wcag411","wcag412"],all:[],any:["aria-allowed-attr"],none:[]},{id:"aria-hidden-body",selector:"body",excludeHidden:!1,tags:["cat.aria","wcag2a","wcag412"],all:[],any:["aria-hidden-body"],none:[]},{id:"aria-required-attr",selector:"[role]",tags:["cat.aria","wcag2a","wcag411","wcag412"],all:[],any:["aria-required-attr"],none:[]},{id:"aria-required-children",selector:"[role]",tags:["cat.aria","wcag2a","wcag131"],all:[],any:["aria-required-children"],none:[]},{id:"aria-required-parent",selector:"[role]",tags:["cat.aria","wcag2a","wcag131"],all:[],any:["aria-required-parent"],none:[]},{id:"aria-roles",selector:"[role]",tags:["cat.aria","wcag2a","wcag131","wcag411","wcag412"],all:[],any:[],none:["invalidrole","abstractrole"]},{id:"aria-valid-attr-value",matches:function(a,b){var c=/^aria-/;if(a.hasAttributes())for(var d=a.attributes,e=0,f=d.length;e<f;e++)if(c.test(d[e].name))return!0;return!1},tags:["cat.aria","wcag2a","wcag131","wcag411","wcag412"],all:[],any:[{options:[],id:"aria-valid-attr-value"}],none:[]},{id:"aria-valid-attr",matches:function(a,b){var c=/^aria-/;if(a.hasAttributes())for(var d=a.attributes,e=0,f=d.length;e<f;e++)if(c.test(d[e].name))return!0;return!1},tags:["cat.aria","wcag2a","wcag411"],all:[],any:[{options:[],id:"aria-valid-attr"}],none:[]},{id:"audio-caption",selector:"audio",excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag122","section508","section508.22.a"],all:[],any:[],none:["caption"]},{id:"blink",selector:"blink",excludeHidden:!1,tags:["cat.time-and-media","wcag2a","wcag222","section508","section508.22.j"],all:[],any:[],none:["is-on-screen"]},{id:"button-name",selector:'button, [role="button"], input[type="button"], input[type="submit"], input[type="reset"]',tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a"],all:[],any:["non-empty-if-present","non-empty-value","button-has-visible-text","aria-label","aria-labelledby","role-presentation","role-none"],none:["focusable-no-name"]},{id:"bypass",selector:"html",pageLevel:!0,matches:function(a,b){return!!a.querySelector("a[href]")},tags:["cat.keyboard","wcag2a","wcag241","section508","section508.22.o"],all:[],any:["internal-link-present","header-present","landmark"],none:[]},{id:"checkboxgroup",selector:"input[type=checkbox][name]",tags:["cat.forms","best-practice"],all:[],any:["group-labelledby","fieldset"],none:[]},{id:"color-contrast",matches:function(a,b){var c=a.nodeName.toUpperCase(),d=a.type;if("true"===a.getAttribute("aria-disabled")||axe.commons.dom.findUp(a,'[aria-disabled="true"]'))return!1;if("INPUT"===c)return-1===["hidden","range","color","checkbox","radio","image"].indexOf(d)&&!a.disabled;if("SELECT"===c)return!!a.options.length&&!a.disabled;if("TEXTAREA"===c)return!a.disabled;if("OPTION"===c)return!1;if("BUTTON"===c&&a.disabled||axe.commons.dom.findUp(a,"button[disabled]"))return!1;if("FIELDSET"===c&&a.disabled||axe.commons.dom.findUp(a,"fieldset[disabled]"))return!1;var e=axe.commons.dom.findUp(a,"label");if("LABEL"===c||e){var f=a;e&&(f=e);var g=axe.commons.dom.getRootNode(f),h=f.htmlFor&&g.getElementById(f.htmlFor);if(h&&h.disabled)return!1;var h=axe.utils.querySelectorAll(b,'input:not([type="hidden"]):not([type="image"]):not([type="button"]):not([type="submit"]):not([type="reset"]), select, textarea');if(h.length&&h[0].actualNode.disabled)return!1}if(a.getAttribute("id")){var i=axe.commons.utils.escapeSelector(a.getAttribute("id")),j=axe.commons.dom.getRootNode(a),h=j.querySelector("[aria-labelledby~="+i+"]");if(h&&h.disabled)return!1}if(""===axe.commons.text.visible(b,!1,!0))return!1;var k,l,m=document.createRange(),n=b.children,o=n.length;for(l=0;l<o;l++)k=n[l],3===k.actualNode.nodeType&&""!==axe.commons.text.sanitize(k.actualNode.nodeValue)&&m.selectNodeContents(k.actualNode);var p=m.getClientRects();for(o=p.length,l=0;l<o;l++)if(axe.commons.dom.visuallyOverlaps(p[l],a))return!0;return!1},excludeHidden:!1,options:{noScroll:!1},tags:["cat.color","wcag2aa","wcag143"],all:[],any:["color-contrast"],none:[]},{id:"definition-list",selector:"dl",matches:function(a,b){return!a.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:["structured-dlitems","only-dlitems"]},{id:"dlitem",selector:"dd, dt",matches:function(a,b){return!a.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:["dlitem"],none:[]},{id:"document-title",selector:"html",matches:function(a,b){return a.ownerDocument.defaultView.self===a.ownerDocument.defaultView.top},tags:["cat.text-alternatives","wcag2a","wcag242"],all:[],any:["doc-has-title"],none:[]},{id:"duplicate-id",selector:"[id]",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag411"],all:[],any:["duplicate-id"],none:[]},{id:"empty-heading",selector:'h1, h2, h3, h4, h5, h6, [role="heading"]',enabled:!0,tags:["cat.name-role-value","best-practice"],all:[],any:["has-visible-text","role-presentation","role-none"],none:[]},{id:"frame-title-unique",selector:"frame[title], iframe[title]",matches:function(a,b){var c=a.getAttribute("title");return!!(c?axe.commons.text.sanitize(c).trim():"")},tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:["unique-frame-title"]},{id:"frame-title",selector:"frame, iframe",tags:["cat.text-alternatives","wcag2a","wcag241","section508","section508.22.i"],all:[],any:["aria-label","aria-labelledby","non-empty-title","role-presentation","role-none"],none:[]},{id:"heading-order",selector:"h1,h2,h3,h4,h5,h6,[role=heading]",enabled:!1,tags:["cat.semantics","best-practice"],all:[],any:["heading-order"],none:[]},{id:"hidden-content",selector:"*",excludeHidden:!1,tags:["experimental","review-item"],all:[],any:["hidden-content"],none:[],enabled:!1},{id:"href-no-hash",selector:"a[href]",enabled:!1,tags:["cat.semantics","best-practice"],all:[],any:["href-no-hash"],none:[]},{id:"html-has-lang",selector:"html",tags:["cat.language","wcag2a","wcag311"],all:[],any:["has-lang"],none:[]},{id:"html-lang-valid",selector:"html[lang]",tags:["cat.language","wcag2a","wcag311"],all:[],any:[],none:["valid-lang"]},{id:"image-alt",selector:"img, [role='img']",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["has-alt","aria-label","aria-labelledby","non-empty-title","role-presentation","role-none"],none:[]},{id:"image-redundant-alt",selector:'button, [role="button"], a[href], p, li, td, th',tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:["duplicate-img-label"]},{id:"input-image-alt",selector:'input[type="image"]',tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["non-empty-alt","aria-label","aria-labelledby","non-empty-title"],none:[]},{id:"label-title-only",selector:"input, select, textarea",matches:function(a,b){if("input"!==a.nodeName.toLowerCase())return!0;var c=a.getAttribute("type").toLowerCase();return"hidden"!==c&&"image"!==c&&"button"!==c&&"submit"!==c&&"reset"!==c},enabled:!1,tags:["cat.forms","best-practice"],all:[],any:[],none:["title-only"]},{id:"label",selector:"input, select, textarea",matches:function(a,b){if("input"!==a.nodeName.toLowerCase())return!0;var c=a.getAttribute("type").toLowerCase();return"hidden"!==c&&"image"!==c&&"button"!==c&&"submit"!==c&&"reset"!==c},tags:["cat.forms","wcag2a","wcag332","wcag131","section508","section508.22.n"],all:[],any:["aria-label","aria-labelledby","implicit-label","explicit-label","non-empty-title"],none:["help-same-as-label","multiple-label"]},{id:"layout-table",selector:"table",matches:function(a,b){return!axe.commons.table.isDataTable(a)},tags:["cat.semantics","wcag2a","wcag131"],all:[],any:[],none:["has-th","has-caption","has-summary"]},{id:"link-in-text-block",selector:"a[href], *[role=link]",matches:function(a,b){var c=axe.commons.text.sanitize(a.textContent),d=a.getAttribute("role");return(!d||"link"===d)&&(!!c&&(!!axe.commons.dom.isVisible(a,!1)&&axe.commons.dom.isInTextBlock(a)))},excludeHidden:!1,tags:["cat.color","experimental","wcag2a","wcag141"],all:["link-in-text-block"],any:[],none:[]},{id:"link-name",selector:"a[href], [role=link][href]",matches:function(a,b){return"button"!==a.getAttribute("role")},tags:["cat.name-role-value","wcag2a","wcag111","wcag412","wcag244","section508","section508.22.a"],all:[],any:["has-visible-text","aria-label","aria-labelledby","role-presentation","role-none"],none:["focusable-no-name"]},{id:"list",selector:"ul, ol",matches:function(a,b){return!a.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:[],none:["only-listitems"]},{id:"listitem",selector:"li",matches:function(a,b){return!a.getAttribute("role")},tags:["cat.structure","wcag2a","wcag131"],all:[],any:["listitem"],none:[]},{id:"marquee",selector:"marquee",excludeHidden:!1,tags:["cat.parsing","wcag2a","wcag222"],all:[],any:[],none:["is-on-screen"]},{id:"meta-refresh",selector:'meta[http-equiv="refresh"]',excludeHidden:!1,tags:["cat.time","wcag2a","wcag2aaa","wcag221","wcag224","wcag325"],all:[],any:["meta-refresh"],none:[]},{id:"meta-viewport-large",selector:'meta[name="viewport"]',excludeHidden:!1,tags:["cat.sensory-and-visual-cues","best-practice"],all:[],any:[{options:{scaleMinimum:5,lowerBound:2},id:"meta-viewport-large"}],none:[]},{id:"meta-viewport",selector:'meta[name="viewport"]',excludeHidden:!1,tags:["cat.sensory-and-visual-cues","wcag2aa","wcag144"],all:[],any:[{options:{scaleMinimum:2},id:"meta-viewport"}],none:[]},{id:"object-alt",selector:"object",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],all:[],any:["has-visible-text","aria-label","aria-labelledby","non-empty-title"],none:[]},{id:"p-as-heading",selector:"p",matches:function(a,b){var c=Array.from(a.parentNode.childNodes),d=a.textContent.trim(),e=/[.!?:;](?![.!?:;])/g;return!(0===d.length||(d.match(e)||[]).length>=2)&&0!==c.slice(c.indexOf(a)+1).filter(function(a){return"P"===a.nodeName.toUpperCase()&&""!==a.textContent.trim()}).length},tags:["cat.semantics","wcag2a","wcag131","experimental"],all:[{options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}]},id:"p-as-heading"}],any:[],none:[]},{id:"radiogroup",selector:"input[type=radio][name]",tags:["cat.forms","best-practice"],all:[],any:["group-labelledby","fieldset"],none:[]},{id:"region",selector:"html",pageLevel:!0,enabled:!1,tags:["cat.keyboard","best-practice"],all:[],any:["region"],none:[]},{id:"scope-attr-valid",selector:"td[scope], th[scope]",enabled:!0,tags:["cat.tables","best-practice"],all:["html5-scope","scope-value"],any:[],none:[]},{id:"server-side-image-map",selector:"img[ismap]",tags:["cat.text-alternatives","wcag2a","wcag211","section508","section508.22.f"],all:[],any:[],none:["exists"]},{id:"skip-link",selector:"a[href]",pageLevel:!0,enabled:!1,tags:["cat.keyboard","best-practice"],all:[],any:["skip-link"],none:[]},{id:"tabindex",selector:"[tabindex]",tags:["cat.keyboard","best-practice"],all:[],any:["tabindex"],none:[]},{id:"table-duplicate-name",selector:"table",tags:["cat.tables","best-practice"],all:[],any:[],none:["same-caption-summary"]},{id:"table-fake-caption",selector:"table",matches:function(a,b){return axe.commons.table.isDataTable(a)},tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g"],all:["caption-faked"],any:[],none:[]},{id:"td-has-header",selector:"table",matches:function(a,b){if(axe.commons.table.isDataTable(a)){var c=axe.commons.table.toArray(a);return c.length>=3&&c[0].length>=3&&c[1].length>=3&&c[2].length>=3}return!1},tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g"],all:["td-has-header"],any:[],none:[]},{id:"td-headers-attr",selector:"table",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g"],all:["td-headers-attr"],any:[],none:[]},{id:"th-has-data-cells",selector:"table",matches:function(a,b){return axe.commons.table.isDataTable(a)},tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g"],all:["th-has-data-cells"],any:[],none:[]},{id:"valid-lang",selector:"[lang], [xml\\:lang]",matches:function(a,b){return"html"!==a.nodeName.toLowerCase()},tags:["cat.language","wcag2aa","wcag312"],all:[],any:[],none:["valid-lang"]},{id:"video-caption",selector:"video",excludeHidden:!1,tags:["cat.text-alternatives","wcag2a","wcag122","wcag123","section508","section508.22.a"],all:[],any:[],none:["caption"]},{id:"video-description",selector:"video",excludeHidden:!1,tags:["cat.text-alternatives","wcag2aa","wcag125","section508","section508.22.b"],all:[],any:[],none:["description"]}],checks:[{id:"abstractrole",evaluate:function(a,b,c){return"abstract"===axe.commons.aria.getRoleType(a.getAttribute("role"))}},{id:"aria-allowed-attr",evaluate:function(a,b,c){var d,e,f,g=[],h=a.getAttribute("role"),i=a.attributes;if(h||(h=axe.commons.aria.implicitRole(a)),f=axe.commons.aria.allowedAttr(h),h&&f)for(var j=0,k=i.length;j<k;j++)d=i[j],e=d.name,axe.commons.aria.validateAttr(e)&&-1===f.indexOf(e)&&g.push(e+'="'+d.nodeValue+'"');return!g.length||(this.data(g),!1)}},{id:"aria-hidden-body",evaluate:function(a,b,c){return"true"!==a.getAttribute("aria-hidden")}},{id:"invalidrole",evaluate:function(a,b,c){return!axe.commons.aria.isValidRole(a.getAttribute("role"))}},{id:"aria-required-attr",evaluate:function(a,b,c){var d=[];if(a.hasAttributes()){var e,f=a.getAttribute("role"),g=axe.commons.aria.requiredAttr(f);if(f&&g)for(var h=0,i=g.length;h<i;h++)e=g[h],a.getAttribute(e)||d.push(e)}return!d.length||(this.data(d),!1)}},{id:"aria-required-children",evaluate:function(a,b,c){function d(a,b,c,d){if(null===a)return!1;var e=g(c),f=['[role="'+c+'"]'];return e&&(f=f.concat(e)),f=f.join(","),d?h(a,f)||!!axe.utils.querySelectorAll(b,f)[0]:!!axe.utils.querySelectorAll(b,f)[0]}function e(a,b){var c,e;for(c=0,e=a.length;c<e;c++)if(null!==a[c]){var f=axe.utils.getNodeFromTree(axe._tree[0],a[c]);if(d(a[c],f,b,!0))return!0}return!1}var f=axe.commons.aria.requiredOwned,g=axe.commons.aria.implicitNodes,h=axe.commons.utils.matchesSelector,i=axe.commons.dom.idrefs,j=a.getAttribute("role"),k=f(j);if(!k)return!0;var l=!1,m=k.one;if(!m){var l=!0;m=k.all}var n=function(a,b,f){var g,h=b.length,j=[],k=i(a,"aria-owns");for(g=0;g<h;g++){var l=b[g];if(d(a,c,l)||e(k,l)){if(!f)return null}else f&&j.push(l)}return j.length?j:!f&&b.length?b:null}(a,m,l);return!n||(this.data(n),!1)}},{id:"aria-required-parent",evaluate:function(a,b,c){function d(a){return(axe.commons.aria.implicitNodes(a)||[]).concat('[role="'+a+'"]').join(",")}function e(a,b,c){var e,f,g=a.getAttribute("role"),h=[];if(b||(b=axe.commons.aria.requiredContext(g)),!b)return null;for(e=0,f=b.length;e<f;e++){if(c&&axe.utils.matchesSelector(a,d(b[e])))return null;if(axe.commons.dom.findUp(a,d(b[e])))return null;h.push(b[e])}return h}var f=e(a);if(!f)return!0;var g=function(a){for(var b=[],c=null;a;){if(a.getAttribute("id")){var d=axe.commons.utils.escapeSelector(a.getAttribute("id"));c=axe.commons.dom.getRootNode(a).querySelector("[aria-owns~="+d+"]"),c&&b.push(c)}a=a.parentElement}return b.length?b:null}(a);if(g)for(var h=0,i=g.length;h<i;h++)if(!(f=e(g[h],f,!0)))return!0;return this.data(f),!1}},{id:"aria-valid-attr-value",evaluate:function(a,b,c){b=Array.isArray(b)?b:[];for(var d,e,f=[],g=/^aria-/,h=a.attributes,i=0,j=h.length;i<j;i++)d=h[i],e=d.name,-1===b.indexOf(e)&&g.test(e)&&!axe.commons.aria.validateAttrValue(a,e)&&f.push(e+'="'+d.nodeValue+'"');return!f.length||(this.data(f),!1)},options:[]},{id:"aria-valid-attr",evaluate:function(a,b,c){b=Array.isArray(b)?b:[];for(var d,e=[],f=/^aria-/,g=a.attributes,h=0,i=g.length;h<i;h++)d=g[h].name,-1===b.indexOf(d)&&f.test(d)&&!axe.commons.aria.validateAttr(d)&&e.push(d);return!e.length||(this.data(e),!1)},options:[]},{id:"color-contrast",evaluate:function(a,b,c){if(!axe.commons.dom.isVisible(a,!1))return!0;var d,e=!!(b||{}).noScroll,f=[],g=axe.commons.color.getBackgroundColor(a,f,e),h=axe.commons.color.getForegroundColor(a,e),i=window.getComputedStyle(a),j=parseFloat(i.getPropertyValue("font-size")),k=i.getPropertyValue("font-weight"),l=-1!==["bold","bolder","600","700","800","900"].indexOf(k),m=axe.commons.color.hasValidContrastRatio(g,h,j,l),n=Math.floor(100*m.contrastRatio)/100;null===g&&(d=axe.commons.color.incompleteData.get("bgColor"));var o=!1;1===n&&(o=!0,d=axe.commons.color.incompleteData.set("bgColor","equalRatio"));var p={fgColor:h?h.toHexString():void 0,bgColor:g?g.toHexString():void 0,contrastRatio:m?n:void 0,fontSize:(72*j/96).toFixed(1)+"pt",fontWeight:l?"bold":"normal",missingData:d};return this.data(p),null===h||null===g||o?(d=null,axe.commons.color.incompleteData.clear(),void this.relatedNodes(f)):(m.isValid||this.relatedNodes(f),m.isValid)}},{id:"link-in-text-block",evaluate:function(a,b,c){function d(a,b){var c=a.getRelativeLuminance(),d=b.getRelativeLuminance();return(Math.max(c,d)+.05)/(Math.min(c,d)+.05)}function e(a){var b=window.getComputedStyle(a).getPropertyValue("display");return-1!==i.indexOf(b)||"table-"===b.substr(0,6)}var f=axe.commons,g=f.color,h=f.dom,i=["block","list-item","table","flex","grid","inline-block"];if(e(a))return!1;for(var j=h.getComposedParent(a);1===j.nodeType&&!e(j);)j=h.getComposedParent(j);if(this.relatedNodes([j]),g.elementIsDistinct(a,j))return!0;var k,l;if(k=g.getForegroundColor(a),l=g.getForegroundColor(j),k&&l){var m=d(k,l);if(1===m)return!0;if(m>=3)return axe.commons.color.incompleteData.set("fgColor","bgContrast"),this.data({missingData:axe.commons.color.incompleteData.get("fgColor")}),void axe.commons.color.incompleteData.clear();if(k=g.getBackgroundColor(a),l=g.getBackgroundColor(j),!k||!l||d(k,l)>=3){var n=void 0;return n=k&&l?"bgContrast":axe.commons.color.incompleteData.get("bgColor"),axe.commons.color.incompleteData.set("fgColor",n),this.data({missingData:axe.commons.color.incompleteData.get("fgColor")}),void axe.commons.color.incompleteData.clear()}return!1}}},{id:"fieldset",evaluate:function(a,b,c){function d(a,b){return axe.commons.utils.toArray(a.querySelectorAll('select,textarea,button,input:not([name="'+b+'"]):not([type="hidden"])'))}function e(a,b){var c=a.firstElementChild;if(!c||"LEGEND"!==c.nodeName.toUpperCase())return i.relatedNodes([a]),h="no-legend",!1;if(!axe.commons.text.accessibleText(c))return i.relatedNodes([c]),h="empty-legend",!1;var e=d(a,b);return!e.length||(i.relatedNodes(e),h="mixed-inputs",!1)}function f(a,b){var c=axe.commons.dom.idrefs(a,"aria-labelledby").some(function(a){return a&&axe.commons.text.accessibleText(a)}),e=a.getAttribute("aria-label");if(!(c||e&&axe.commons.text.sanitize(e)))return i.relatedNodes(a),h="no-group-label",!1;var f=d(a,b);return!f.length||(i.relatedNodes(f),h="group-mixed-inputs",!1)}function g(a,b){return axe.commons.utils.toArray(a).filter(function(a){return a!==b})}var h,i=this,j={name:a.getAttribute("name"),type:a.getAttribute("type")},k=function(b){var c=axe.commons.utils.escapeSelector(a.name),d=axe.commons.dom.getRootNode(a),j=d.querySelectorAll('input[type="'+axe.commons.utils.escapeSelector(a.type)+'"][name="'+c+'"]');if(j.length<2)return!0;var k=axe.commons.dom.findUp(b,"fieldset"),l=axe.commons.dom.findUp(b,'[role="group"]'+("radio"===a.type?',[role="radiogroup"]':""));return l||k?k?e(k,c):f(l,c):(h="no-group",i.relatedNodes(g(j,b)),!1)}(a);return k||(j.failureCode=h),this.data(j),k},after:function(a,b){var c={};return a.filter(function(a){if(a.result)return!0;var b=a.data;if(b){if(c[b.type]=c[b.type]||{},!c[b.type][b.name])return c[b.type][b.name]=[b],!0;var d=c[b.type][b.name].some(function(a){return a.failureCode===b.failureCode});return d||c[b.type][b.name].push(b),!d}return!1})}},{id:"group-labelledby",evaluate:function(a,b,c){this.data({name:a.getAttribute("name"),type:a.getAttribute("type")});var d=axe.commons.dom.getRootNode(a),e=d.querySelectorAll('input[type="'+axe.commons.utils.escapeSelector(a.type)+'"][name="'+axe.commons.utils.escapeSelector(a.name)+'"]');return e.length<=1||0!==[].map.call(e,function(a){var b=a.getAttribute("aria-labelledby");return b?b.split(/\s+/):[]}).reduce(function(a,b){return a.filter(function(a){return b.includes(a)})}).filter(function(a){var b=d.getElementById(a);return b&&axe.commons.text.accessibleText(b)}).length},after:function(a,b){var c={};return a.filter(function(a){var b=a.data;return!(!b||(c[b.type]=c[b.type]||{},c[b.type][b.name]))&&(c[b.type][b.name]=!0,!0)})}},{id:"accesskeys",evaluate:function(a,b,c){return axe.commons.dom.isVisible(a,!1)&&(this.data(a.getAttribute("accesskey")),this.relatedNodes([a])),!0},after:function(a,b){var c={};return a.filter(function(a){if(!a.data)return!1;var b=a.data.toUpperCase();return c[b]?(c[b].relatedNodes.push(a.relatedNodes[0]),!1):(c[b]=a,a.relatedNodes=[],!0)}).map(function(a){return a.result=!!a.relatedNodes.length,a})}},{id:"focusable-no-name",evaluate:function(a,b,c){var d=a.getAttribute("tabindex");return!!(axe.commons.dom.isFocusable(a)&&d>-1)&&!axe.commons.text.accessibleText(a)}},{id:"tabindex",evaluate:function(a,b,c){return a.tabIndex<=0}},{id:"duplicate-img-label",evaluate:function(a,b,c){var d=axe.commons.text.visible(c,!0).toLowerCase();return""!==d&&axe.utils.querySelectorAll(c,"img").filter(function(a){var b=a.actualNode;return axe.commons.dom.isVisible(b)&&!["none","presentation"].includes(b.getAttribute("role"))}).some(function(a){return d===axe.commons.text.accessibleText(a).toLowerCase()})}},{id:"explicit-label",evaluate:function(a,b,c){if(a.getAttribute("id")){var d=axe.commons.dom.getRootNode(a),e=axe.commons.utils.escapeSelector(a.getAttribute("id")),f=d.querySelector('label[for="'+e+'"]');if(f)return!!axe.commons.text.accessibleText(f)}return!1}},{id:"help-same-as-label",evaluate:function(a,b,c){var d=axe.commons.text.label(c),e=a.getAttribute("title");if(!d)return!1;if(!e&&(e="",a.getAttribute("aria-describedby"))){e=axe.commons.dom.idrefs(a,"aria-describedby").map(function(a){return a?axe.commons.text.accessibleText(a):""}).join("")}return axe.commons.text.sanitize(e)===axe.commons.text.sanitize(d)},enabled:!1},{id:"implicit-label",evaluate:function(a,b,c){var d=axe.commons.dom.findUp(a,"label");return!!d&&!!axe.commons.text.accessibleText(d)}},{id:"multiple-label",evaluate:function(a,b,c){var d=axe.commons.utils.escapeSelector(a.getAttribute("id")),e=Array.from(document.querySelectorAll('label[for="'+d+'"]')),f=a.parentNode;for(e.length&&(e=e.filter(function(a,b){if(0===b&&!axe.commons.dom.isVisible(a,!0)||axe.commons.dom.isVisible(a,!0))return a}));f;)"LABEL"===f.tagName&&-1===e.indexOf(f)&&e.push(f),f=f.parentNode;return this.relatedNodes(e),e.length>1}},{id:"title-only",evaluate:function(a,b,c){return!(axe.commons.text.label(c)||!a.getAttribute("title")&&!a.getAttribute("aria-describedby"))}},{id:"has-lang",evaluate:function(a,b,c){return!!(a.getAttribute("lang")||a.getAttribute("xml:lang")||"").trim()}},{id:"valid-lang",evaluate:function(a,b,c){function d(a){return a.trim().split("-")[0].toLowerCase()}var e,f;return e=(b||axe.commons.utils.validLangs()).map(d),f=["lang","xml:lang"].reduce(function(b,c){var f=a.getAttribute(c);if("string"!=typeof f)return b;var g=d(f);return""!==g&&-1===e.indexOf(g)&&b.push(c+'="'+a.getAttribute(c)+'"'),b},[]),!!f.length&&(this.data(f),!0)}},{id:"dlitem",evaluate:function(a,b,c){return"DL"===axe.commons.dom.getComposedParent(a).nodeName.toUpperCase()}},{id:"has-listitem",evaluate:function(a,b,c){return c.children.every(function(a){return"LI"!==a.actualNode.nodeName.toUpperCase()})}},{id:"listitem",evaluate:function(a,b,c){var d=axe.commons.dom.getComposedParent(a);return["UL","OL"].includes(d.nodeName.toUpperCase())||"list"===(d.getAttribute("role")||"").toLowerCase()}},{id:"only-dlitems",evaluate:function(a,b,c){var d=[],e=["STYLE","META","LINK","MAP","AREA","SCRIPT","DATALIST","TEMPLATE"],f=!1;return c.children.forEach(function(a){var b=a.actualNode,c=b.nodeName.toUpperCase();1===b.nodeType&&"DT"!==c&&"DD"!==c&&-1===e.indexOf(c)?d.push(b):3===b.nodeType&&""!==b.nodeValue.trim()&&(f=!0)}),d.length&&this.relatedNodes(d),!!d.length||f}},{id:"only-listitems",evaluate:function(a,b,c){var d=[],e=["STYLE","META","LINK","MAP","AREA","SCRIPT","DATALIST","TEMPLATE"],f=!1;return c.children.forEach(function(a){var b=a.actualNode,c=b.nodeName.toUpperCase();1===b.nodeType&&"LI"!==c&&-1===e.indexOf(c)?d.push(b):3===b.nodeType&&""!==b.nodeValue.trim()&&(f=!0)}),d.length&&this.relatedNodes(d),!!d.length||f}},{id:"structured-dlitems",evaluate:function(a,b,c){var d=c.children;if(!d||!d.length)return!1;for(var e,f=!1,g=!1,h=0;h<d.length;h++){if(e=d[h].actualNode.nodeName.toUpperCase(),"DT"===e&&(f=!0),f&&"DD"===e)return!1;"DD"===e&&(g=!0)}return f||g}},{id:"caption",evaluate:function(a,b,c){var d=axe.utils.querySelectorAll(c,"track");if(d.length)return!d.some(function(a){return"captions"===(a.actualNode.getAttribute("kind")||"").toLowerCase()})}},{id:"description",evaluate:function(a,b,c){var d=axe.utils.querySelectorAll(c,"track");if(d.length){var e=!d.some(function(a){return"descriptions"===(a.actualNode.getAttribute("kind")||"").toLowerCase()});return axe.log(d.map(function(a){return a.actualNode.getAttribute("kind")}),e),e}}},{id:"meta-viewport-large",evaluate:function(a,b,c){b=b||{};for(var d,e=a.getAttribute("content")||"",f=e.split(/[;,]/),g={},h=b.scaleMinimum||2,i=b.lowerBound||!1,j=0,k=f.length;j<k;j++){d=f[j].split("=");var l=d.shift().toLowerCase();l&&d.length&&(g[l.trim()]=d.shift().trim().toLowerCase())}return!!(i&&g["maximum-scale"]&&parseFloat(g["maximum-scale"])<i)||!(!i&&"no"===g["user-scalable"])&&!(g["maximum-scale"]&&parseFloat(g["maximum-scale"])<h)},options:{scaleMinimum:5,lowerBound:2}},{id:"meta-viewport",evaluate:function(a,b,c){b=b||{};for(var d,e=a.getAttribute("content")||"",f=e.split(/[;,]/),g={},h=b.scaleMinimum||2,i=b.lowerBound||!1,j=0,k=f.length;j<k;j++){d=f[j].split("=");var l=d.shift().toLowerCase();l&&d.length&&(g[l.trim()]=d.shift().trim().toLowerCase())}return!!(i&&g["maximum-scale"]&&parseFloat(g["maximum-scale"])<i)||!(!i&&"no"===g["user-scalable"])&&!(g["maximum-scale"]&&parseFloat(g["maximum-scale"])<h)},options:{scaleMinimum:2}},{id:"header-present",evaluate:function(a,b,c){return!!a.querySelector('h1, h2, h3, h4, h5, h6, [role="heading"]')}},{id:"heading-order",evaluate:function(a,b,c){var d=a.getAttribute("aria-level");if(null!==d)return this.data(parseInt(d,10)),!0;var e=a.tagName.match(/H(\d)/);return!e||(this.data(parseInt(e[1],10)),!0)},after:function(a,b){if(a.length<2)return a;for(var c=a[0].data,d=1;d<a.length;d++)a[d].result&&a[d].data>c+1&&(a[d].result=!1),c=a[d].data;return a}},{id:"href-no-hash",evaluate:function(a,b,c){return"#"!==a.getAttribute("href")}},{id:"internal-link-present",evaluate:function(a,b,c){return!!a.querySelector('a[href^="#"]')}},{id:"landmark",evaluate:function(a,b,c){return axe.utils.querySelectorAll(c,'main, [role="main"]').length>0}},{id:"meta-refresh",evaluate:function(a,b,c){var d=a.getAttribute("content")||"",e=d.split(/[;,]/);return""===d||"0"===e[0]}},{id:"p-as-heading",evaluate:function(a,b,c){function d(a){for(var b=a,c=a.textContent.trim(),d=c;d===c&&void 0!==b;){var e=-1;if(a=b,0===a.children.length)return a;do{e++,d=a.children[e].textContent.trim()}while(""===d&&e+1<a.children.length);b=a.children[e]}return a}function e(a){switch(a){case"lighter":return 100;case"normal":return 400;case"bold":return 700;case"bolder":return 900}return a=parseInt(a),isNaN(a)?400:a}function f(a){var b=window.getComputedStyle(d(a));return{fontWeight:e(b.getPropertyValue("font-weight")),fontSize:parseInt(b.getPropertyValue("font-size")),isItalic:"italic"===b.getPropertyValue("font-style")}}function g(a,b,c){return c.reduce(function(c,d){return c||(!d.size||a.fontSize/d.size>b.fontSize)&&(!d.weight||a.fontWeight-d.weight>b.fontWeight)&&(!d.italic||a.isItalic&&!b.isItalic)},!1)}var h=Array.from(a.parentNode.children),i=h.indexOf(a);b=b||{};var j=b.margins||[],k=h.slice(i+1).find(function(a){return"P"===a.nodeName.toUpperCase()}),l=h.slice(0,i).reverse().find(function(a){return"P"===a.nodeName.toUpperCase()}),m=f(a),n=k?f(k):null,o=l?f(l):null;if(!n||!g(m,n,j))return!0;var p=axe.commons.dom.findUp(a,"blockquote");return!!(p&&"BLOCKQUOTE"===p.nodeName.toUpperCase()||o&&!g(m,o,j))&&void 0},options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}]}},{id:"region",evaluate:function(a,b,c){function d(a){return j&&j===a}function e(a){return a.hasAttribute("role")?k.includes(a.getAttribute("role").toLowerCase()):l.includes(a.nodeName.toUpperCase())}function f(a){var b=a.actualNode;return e(b)||d(b)||!h.isVisible(b,!0)?[]:h.hasContent(b,!0)?[b]:a.children.filter(function(a){return 1===a.actualNode.nodeType}).map(f).reduce(function(a,b){return a.concat(b)},[])}var g=axe.commons,h=g.dom,i=g.aria,j=function(a){var b=axe.utils.querySelectorAll(a,"a[href]")[0];if(b&&axe.commons.dom.getElementByReference(b.actualNode,"href"))return b.actualNode}(c),k=i.getRolesByType("landmark"),l=k.reduce(function(a,b){return a.concat(i.implicitNodes(b))},[]).filter(function(a){return null!==a}).map(function(a){return a.toUpperCase()}),m=f(c);return this.relatedNodes(m),0===m.length},after:function(a,b){return[a[0]]}},{id:"skip-link",evaluate:function(a,b,c){return axe.commons.dom.isFocusable(axe.commons.dom.getElementByReference(a,"href"))},after:function(a,b){return[a[0]]}},{id:"unique-frame-title",evaluate:function(a,b,c){var d=axe.commons.text.sanitize(a.title).trim().toLowerCase();return this.data(d),!0},after:function(a,b){var c={};return a.forEach(function(a){c[a.data]=void 0!==c[a.data]?++c[a.data]:0}),a.forEach(function(a){a.result=!!c[a.data]}),a}},{id:"aria-label",evaluate:function(a,b,c){var d=a.getAttribute("aria-label");return!!(d?axe.commons.text.sanitize(d).trim():"")}},{id:"aria-labelledby",evaluate:function(a,b,c){return(0,axe.commons.dom.idrefs)(a,"aria-labelledby").some(function(a){return a&&axe.commons.text.accessibleText(a,!0)})}},{id:"button-has-visible-text",evaluate:function(a,b,c){var d=a.nodeName.toUpperCase(),e=a.getAttribute("role"),f=void 0;return("BUTTON"===d||"button"===e&&"INPUT"!==d)&&(f=axe.commons.text.accessibleText(a),this.data(f),!!f)}},{id:"doc-has-title",evaluate:function(a,b,c){var d=document.title;return!!(d?axe.commons.text.sanitize(d).trim():"")}},{id:"duplicate-id",evaluate:function(a,b,c){if(!a.getAttribute("id").trim())return!0;for(var d=axe.commons.utils.escapeSelector(a.getAttribute("id")),e=document.querySelectorAll('[id="'+d+'"]'),f=[],g=0;g<e.length;g++)e[g]!==a&&f.push(e[g]);return f.length&&this.relatedNodes(f),this.data(a.getAttribute("id")),e.length<=1},after:function(a,b){var c=[];return a.filter(function(a){return-1===c.indexOf(a.data)&&(c.push(a.data),!0)})}},{
+id:"exists",evaluate:function(a,b,c){return!0}},{id:"has-alt",evaluate:function(a,b,c){var d=a.nodeName.toLowerCase();return a.hasAttribute("alt")&&("img"===d||"input"===d||"area"===d)}},{id:"has-visible-text",evaluate:function(a,b,c){return axe.commons.text.accessibleText(a).length>0}},{id:"is-on-screen",evaluate:function(a,b,c){return axe.commons.dom.isVisible(a,!1)&&!axe.commons.dom.isOffscreen(a)}},{id:"non-empty-alt",evaluate:function(a,b,c){var d=a.getAttribute("alt");return!!(d?axe.commons.text.sanitize(d).trim():"")}},{id:"non-empty-if-present",evaluate:function(a,b,c){var d=a.nodeName.toUpperCase(),e=(a.getAttribute("type")||"").toLowerCase(),f=a.getAttribute("value");return this.data(f),"INPUT"===d&&-1!==["submit","reset"].indexOf(e)&&null===f}},{id:"non-empty-title",evaluate:function(a,b,c){var d=a.getAttribute("title");return!!(d?axe.commons.text.sanitize(d).trim():"")}},{id:"non-empty-value",evaluate:function(a,b,c){var d=a.getAttribute("value");return!!(d?axe.commons.text.sanitize(d).trim():"")}},{id:"role-none",evaluate:function(a,b,c){return"none"===a.getAttribute("role")}},{id:"role-presentation",evaluate:function(a,b,c){return"presentation"===a.getAttribute("role")}},{id:"caption-faked",evaluate:function(a,b,c){var d=axe.commons.table.toGrid(a),e=d[0];return d.length<=1||e.length<=1||a.rows.length<=1||e.reduce(function(a,b,c){return a||b!==e[c+1]&&void 0!==e[c+1]},!1)}},{id:"has-caption",evaluate:function(a,b,c){return!!a.caption}},{id:"has-summary",evaluate:function(a,b,c){return!!a.summary}},{id:"has-th",evaluate:function(a,b,c){for(var d,e,f=[],g=0,h=a.rows.length;g<h;g++){d=a.rows[g];for(var i=0,j=d.cells.length;i<j;i++)e=d.cells[i],"TH"!==e.nodeName.toUpperCase()&&-1===["rowheader","columnheader"].indexOf(e.getAttribute("role"))||f.push(e)}return!!f.length&&(this.relatedNodes(f),!0)}},{id:"html5-scope",evaluate:function(a,b,c){return!axe.commons.dom.isHTML5(document)||"TH"===a.nodeName.toUpperCase()}},{id:"same-caption-summary",evaluate:function(a,b,c){return!(!a.summary||!a.caption)&&a.summary===axe.commons.text.accessibleText(a.caption)}},{id:"scope-value",evaluate:function(a,b,c){b=b||{};var d=a.getAttribute("scope").toLowerCase();return-1!==(["row","col","rowgroup","colgroup"]||b.values).indexOf(d)}},{id:"td-has-header",evaluate:function(a,b,c){var d=axe.commons.table,e=[];return d.getAllCells(a).forEach(function(a){if(axe.commons.dom.hasContent(a)&&d.isDataCell(a)&&!axe.commons.aria.label(a)){var b=d.getHeaders(a);(b=b.reduce(function(a,b){return a||null!==b&&!!axe.commons.dom.hasContent(b)},!1))||e.push(a)}}),!e.length||(this.relatedNodes(e),!1)}},{id:"td-headers-attr",evaluate:function(a,b,c){for(var d=[],e=0,f=a.rows.length;e<f;e++)for(var g=a.rows[e],h=0,i=g.cells.length;h<i;h++)d.push(g.cells[h]);var j=d.reduce(function(a,b){return b.getAttribute("id")&&a.push(b.getAttribute("id")),a},[]),k=d.reduce(function(a,b){var c,d,e=(b.getAttribute("headers")||"").split(/\s/).reduce(function(a,b){return b=b.trim(),b&&a.push(b),a},[]);return 0!==e.length&&(b.getAttribute("id")&&(c=-1!==e.indexOf(b.getAttribute("id").trim())),d=e.reduce(function(a,b){return a||-1===j.indexOf(b)},!1),(c||d)&&a.push(b)),a},[]);return!(k.length>0)||(this.relatedNodes(k),!1)}},{id:"th-has-data-cells",evaluate:function(a,b,c){var d=axe.commons.table,e=d.getAllCells(a),f=this,g=[];e.forEach(function(a){var b=a.getAttribute("headers");b&&(g=g.concat(b.split(/\s+/)));var c=a.getAttribute("aria-labelledby");c&&(g=g.concat(c.split(/\s+/)))});var h=e.filter(function(a){return""!==axe.commons.text.sanitize(a.textContent)&&("TH"===a.nodeName.toUpperCase()||-1!==["rowheader","columnheader"].indexOf(a.getAttribute("role")))}),i=d.toGrid(a);return!!h.reduce(function(a,b){if(b.getAttribute("id")&&g.includes(b.getAttribute("id")))return!!a||a;var c=!1,e=d.getCellPosition(b,i);return d.isColumnHeader(b)&&(c=d.traverse("down",e,i).reduce(function(a,b){return a||axe.commons.dom.hasContent(b)&&!d.isColumnHeader(b)},!1)),!c&&d.isRowHeader(b)&&(c=d.traverse("right",e,i).reduce(function(a,b){return a||axe.commons.dom.hasContent(b)&&!d.isRowHeader(b)},!1)),c||f.relatedNodes(b),a&&c},!0)||void 0}},{id:"hidden-content",evaluate:function(a,b,c){if(!["SCRIPT","HEAD","TITLE","NOSCRIPT","STYLE","TEMPLATE"].includes(a.tagName.toUpperCase())&&axe.commons.dom.hasContent(c)){var d=window.getComputedStyle(a);if("none"===d.getPropertyValue("display"))return;if("hidden"===d.getPropertyValue("visibility")){var e=axe.commons.dom.getComposedParent(a),f=e&&window.getComputedStyle(e);if(!f||"hidden"!==f.getPropertyValue("visibility"))return}}return!0}}],commons:function(){function a(a){return a.getPropertyValue("font-family").split(/[,;]/g).map(function(a){return a.trim().toLowerCase()})}function b(b,c){var d=window.getComputedStyle(b);if("none"!==d.getPropertyValue("background-image"))return!0;if(["border-bottom","border-top","outline"].reduce(function(a,b){var c=new A.Color;return c.parseRgbString(d.getPropertyValue(b+"-color")),a||"none"!==d.getPropertyValue(b+"-style")&&parseFloat(d.getPropertyValue(b+"-width"))>0&&0!==c.alpha},!1))return!0;var e=window.getComputedStyle(c);if(a(d)[0]!==a(e)[0])return!0;var f=["text-decoration-line","text-decoration-style","font-weight","font-style","font-size"].reduce(function(a,b){return a||d.getPropertyValue(b)!==e.getPropertyValue(b)},!1),g=d.getPropertyValue("text-decoration");return g.split(" ").length<3&&(f=f||g!==e.getPropertyValue("text-decoration")),f}function c(a,b){var c=a.nodeName.toUpperCase();if(E.includes(c))return axe.commons.color.incompleteData.set("bgColor","imgNode"),!0;b=b||window.getComputedStyle(a);var d=b.getPropertyValue("background-image"),e="none"!==d;if(e){var f=/gradient/.test(d);axe.commons.color.incompleteData.set("bgColor",f?"bgGradient":"bgImage")}return e}function d(a,b){b=b||window.getComputedStyle(a);var c=new A.Color;if(c.parseRgbString(b.getPropertyValue("background-color")),0!==c.alpha){var d=b.getPropertyValue("opacity");c.alpha=c.alpha*d}return c}function e(a,b){var c=a.getClientRects()[0],d=document.elementsFromPoint(c.left,c.top);if(d)for(var e=0;e<d.length;e++)if(d[e]!==a&&d[e]===b)return!0;return!1}function f(a,b,c){var f=0;if(a>0)for(var g=a-1;g>=0;g--){var h=b[g],i=window.getComputedStyle(h),j=d(h,i);j.alpha&&e(c,h)?f+=j.alpha:b.splice(g,1)}return f}function g(a,b,c){var d=a!==b&&!B.visuallyContains(a,b)&&0!==c.alpha;return d&&axe.commons.color.incompleteData.set("bgColor","elmPartiallyObscured"),d}function h(a,b){var c={TD:"TR",INPUT:"LABEL"},d=a.map(function(a){return a.tagName}),e=a;for(var f in c)if(c.hasOwnProperty(f)){if(b.tagName===f){var g=axe.commons.dom.findUp(b,c[f]);if(g&&-1===a.indexOf(g)){var h=axe.commons.dom.visuallyOverlaps(b.getBoundingClientRect(),g);h&&e.splice(a.indexOf(b)+1,0,g)}}b.tagName===c[f]&&-1===d.indexOf(b.tagName)&&e.splice(d.indexOf(f)+1,0,b)}return e}function i(a){var b=a.indexOf(document.body),e=a;return b>1&&!c(document.documentElement)&&0===d(document.documentElement).alpha&&(e.splice(b,1),e.splice(a.indexOf(document.documentElement),1),e.push(document.body)),e}function j(a){if(!F.includes(a.actualNode.nodeName.toUpperCase()))return a.children.some(function(a){var b=a.actualNode;return 3===b.nodeType&&b.nodeValue.trim()})}function k(a,b){!1!==b(a.actualNode)&&a.children.forEach(function(a){return k(a,b)})}function l(a){var b=window.getComputedStyle(a).getPropertyValue("display");return G.includes(b)||"table-"===b.substr(0,6)}function m(a){for(var b=B.getComposedParent(a);b&&!l(b);)b=B.getComposedParent(b);return axe.utils.getNodeFromTree(axe._tree[0],b)}function n(a){"use strict";var b=a.match(/rect\s*\(([0-9]+)px,?\s*([0-9]+)px,?\s*([0-9]+)px,?\s*([0-9]+)px\s*\)/);return!(!b||5!==b.length)&&(b[3]-b[1]<=0&&b[2]-b[4]<=0)}function o(a){var b=a.actualNode,c=void 0;return c=b.id?B.findElmsInContext({elm:"label",attr:"for",value:b.id,context:b})[0]:B.findUp(b,"label"),axe.utils.getNodeFromTree(axe._tree[0],c)}function p(a){return["button","reset","submit"].includes(a.actualNode.type.toLowerCase())}function q(a){var b=a.actualNode,c=b.nodeName.toUpperCase();return"TEXTAREA"===c||"SELECT"===c||"INPUT"===c&&"hidden"!==b.type.toLowerCase()}function r(a){return["BUTTON","SUMMARY","A"].includes(a.actualNode.nodeName.toUpperCase())}function s(a){return["TABLE","FIGURE"].includes(a.actualNode.nodeName.toUpperCase())}function t(a){var b=a.actualNode,c=b.nodeName.toUpperCase();if("INPUT"===c)return!b.hasAttribute("type")||J.includes(b.type.toLowerCase())?b.value:"";if("SELECT"===c){var d=b.options;if(d&&d.length){for(var e="",f=0;f<d.length;f++)d[f].selected&&(e+=" "+d[f].text);return D.sanitize(e)}return""}return"TEXTAREA"===c&&b.value?b.value:""}function u(a,b){var c=a.actualNode,d=c.querySelector(b.toLowerCase());return d?D.accessibleText(d):""}function v(a){if(!a)return!1;var b=a.actualNode;switch(b.nodeName.toUpperCase()){case"SELECT":case"TEXTAREA":return!0;case"INPUT":return!b.hasAttribute("type")||J.includes(b.getAttribute("type").toLowerCase());default:return!1}}function w(a){var b=a.actualNode,c=b.nodeName.toUpperCase();return["IMG","APPLET","AREA"].includes(c)||"INPUT"===c&&"image"===b.type.toLowerCase()}function x(a){return!!D.sanitize(a)}var commons={},y=commons.aria={},z=y._lut={};z.attributes={"aria-activedescendant":{type:"idref"},"aria-atomic":{type:"boolean",values:["true","false"]},"aria-autocomplete":{type:"nmtoken",values:["inline","list","both","none"]},"aria-busy":{type:"boolean",values:["true","false"]},"aria-checked":{type:"nmtoken",values:["true","false","mixed","undefined"]},"aria-colcount":{type:"int"},"aria-colindex":{type:"int"},"aria-colspan":{type:"int"},"aria-controls":{type:"idrefs"},"aria-current":{type:"nmtoken",values:["page","step","location","date","time","true","false"]},"aria-describedby":{type:"idrefs"},"aria-disabled":{type:"boolean",values:["true","false"]},"aria-dropeffect":{type:"nmtokens",values:["copy","move","reference","execute","popup","none"]},"aria-expanded":{type:"nmtoken",values:["true","false","undefined"]},"aria-flowto":{type:"idrefs"},"aria-grabbed":{type:"nmtoken",values:["true","false","undefined"]},"aria-haspopup":{type:"boolean",values:["true","false"]},"aria-hidden":{type:"boolean",values:["true","false"]},"aria-invalid":{type:"nmtoken",values:["true","false","spelling","grammar"]},"aria-label":{type:"string"},"aria-labelledby":{type:"idrefs"},"aria-level":{type:"int"},"aria-live":{type:"nmtoken",values:["off","polite","assertive"]},"aria-multiline":{type:"boolean",values:["true","false"]},"aria-multiselectable":{type:"boolean",values:["true","false"]},"aria-orientation":{type:"nmtoken",values:["horizontal","vertical"]},"aria-owns":{type:"idrefs"},"aria-posinset":{type:"int"},"aria-pressed":{type:"nmtoken",values:["true","false","mixed","undefined"]},"aria-readonly":{type:"boolean",values:["true","false"]},"aria-relevant":{type:"nmtokens",values:["additions","removals","text","all"]},"aria-required":{type:"boolean",values:["true","false"]},"aria-rowcount":{type:"int"},"aria-rowindex":{type:"int"},"aria-rowspan":{type:"int"},"aria-selected":{type:"nmtoken",values:["true","false","undefined"]},"aria-setsize":{type:"int"},"aria-sort":{type:"nmtoken",values:["ascending","descending","other","none"]},"aria-valuemax":{type:"decimal"},"aria-valuemin":{type:"decimal"},"aria-valuenow":{type:"decimal"},"aria-valuetext":{type:"string"}},z.globalAttributes=["aria-atomic","aria-busy","aria-controls","aria-current","aria-describedby","aria-disabled","aria-dropeffect","aria-flowto","aria-grabbed","aria-haspopup","aria-hidden","aria-invalid","aria-label","aria-labelledby","aria-live","aria-owns","aria-relevant"],z.role={alert:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},alertdialog:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},application:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},article:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["article"]},banner:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["header"]},button:{type:"widget",attributes:{allowed:["aria-expanded","aria-pressed"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["button",'input[type="button"]','input[type="image"]','input[type="reset"]','input[type="submit"]',"summary"]},cell:{type:"structure",attributes:{allowed:["aria-colindex","aria-colspan","aria-rowindex","aria-rowspan"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"]},checkbox:{type:"widget",attributes:{required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,implicit:['input[type="checkbox"]']},columnheader:{type:"structure",attributes:{allowed:["aria-expanded","aria-sort","aria-readonly","aria-selected","aria-required"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"]},combobox:{type:"composite",attributes:{required:["aria-expanded"],allowed:["aria-autocomplete","aria-required","aria-activedescendant"]},owned:{all:["listbox","textbox"]},nameFrom:["author"],context:null},command:{nameFrom:["author"],type:"abstract"},complementary:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["aside"]},composite:{nameFrom:["author"],type:"abstract"},contentinfo:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["footer"]},definition:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["dd"]},dialog:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["dialog"]},directory:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author","contents"],context:null},document:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["body"]},form:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["form"]},grid:{type:"composite",attributes:{allowed:["aria-level","aria-multiselectable","aria-readonly","aria-activedescendant","aria-expanded"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,implicit:["table"]},gridcell:{type:"widget",attributes:{allowed:["aria-selected","aria-readonly","aria-expanded","aria-required"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["td","th"]},group:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["details","optgroup"]},heading:{type:"structure",attributes:{allowed:["aria-level","aria-expanded"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["h1","h2","h3","h4","h5","h6"]},img:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["img"]},input:{nameFrom:["author"],type:"abstract"},landmark:{nameFrom:["author"],type:"abstract"},link:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author","contents"],context:null,implicit:["a[href]"]},list:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:{all:["listitem"]},nameFrom:["author"],context:null,implicit:["ol","ul","dl"]},listbox:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-required","aria-expanded"]},owned:{all:["option"]},nameFrom:["author"],context:null,implicit:["select"]},listitem:{type:"structure",attributes:{allowed:["aria-level","aria-posinset","aria-setsize","aria-expanded"]},owned:null,nameFrom:["author","contents"],context:["list"],implicit:["li","dt"]},log:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},main:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["main"]},marquee:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},math:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["math"]},menu:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded"]},owned:{one:["menuitem","menuitemradio","menuitemcheckbox"]},nameFrom:["author"],context:null,implicit:['menu[type="context"]']},menubar:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded"]},owned:null,nameFrom:["author"],context:null},menuitem:{type:"widget",attributes:null,owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="command"]']},menuitemcheckbox:{type:"widget",attributes:{required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="checkbox"]']},menuitemradio:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize"],required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:["menu","menubar"],implicit:['menuitem[type="radio"]']},navigation:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["nav"]},none:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null},note:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},option:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize","aria-checked"]},owned:null,nameFrom:["author","contents"],context:["listbox"],implicit:["option"]},presentation:{type:"structure",attributes:null,owned:null,nameFrom:["author"],context:null},progressbar:{type:"widget",attributes:{allowed:["aria-valuetext","aria-valuenow","aria-valuemax","aria-valuemin"]},owned:null,nameFrom:["author"],context:null,implicit:["progress"]},radio:{type:"widget",attributes:{allowed:["aria-selected","aria-posinset","aria-setsize"],required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:null,implicit:['input[type="radio"]']},radiogroup:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-required","aria-expanded"]},owned:{all:["radio"]},nameFrom:["author"],context:null},range:{nameFrom:["author"],type:"abstract"},region:{type:"structure",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["section"]},roletype:{type:"abstract"},row:{type:"structure",attributes:{allowed:["aria-level","aria-selected","aria-activedescendant","aria-expanded"]},owned:{one:["cell","columnheader","rowheader","gridcell"]},nameFrom:["author","contents"],context:["rowgroup","grid","treegrid","table"],implicit:["tr"]},rowgroup:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded"]},owned:{all:["row"]},nameFrom:["author","contents"],context:["grid","table"],implicit:["tbody","thead","tfoot"]},rowheader:{type:"structure",attributes:{allowed:["aria-sort","aria-required","aria-readonly","aria-expanded","aria-selected"]},owned:null,nameFrom:["author","contents"],context:["row"],implicit:["th"]},scrollbar:{type:"widget",attributes:{required:["aria-controls","aria-orientation","aria-valuenow","aria-valuemax","aria-valuemin"],allowed:["aria-valuetext"]},owned:null,nameFrom:["author"],context:null},search:{type:"landmark",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},searchbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="search"]']},section:{nameFrom:["author","contents"],type:"abstract"},sectionhead:{nameFrom:["author","contents"],type:"abstract"},select:{nameFrom:["author"],type:"abstract"},separator:{type:"structure",attributes:{allowed:["aria-expanded","aria-orientation"]},owned:null,nameFrom:["author"],context:null,implicit:["hr"]},slider:{type:"widget",attributes:{allowed:["aria-valuetext","aria-orientation"],required:["aria-valuenow","aria-valuemax","aria-valuemin"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="range"]']},spinbutton:{type:"widget",attributes:{allowed:["aria-valuetext","aria-required"],required:["aria-valuenow","aria-valuemax","aria-valuemin"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="number"]']},status:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:["output"]},structure:{type:"abstract"},switch:{type:"widget",attributes:{required:["aria-checked"]},owned:null,nameFrom:["author","contents"],context:null},tab:{type:"widget",attributes:{allowed:["aria-selected","aria-expanded"]},owned:null,nameFrom:["author","contents"],context:["tablist"]},table:{type:"structure",attributes:{allowed:["aria-colcount","aria-rowcount"]},owned:{one:["rowgroup","row"]},nameFrom:["author"],context:null,implicit:["table"]},tablist:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-level","aria-multiselectable"]},owned:{all:["tab"]},nameFrom:["author"],context:null},tabpanel:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},text:{type:"structure",owned:null,nameFrom:["author","contents"],context:null},textbox:{type:"widget",attributes:{allowed:["aria-activedescendant","aria-autocomplete","aria-multiline","aria-readonly","aria-required"]},owned:null,nameFrom:["author"],context:null,implicit:['input[type="text"]','input[type="email"]','input[type="password"]','input[type="tel"]','input[type="url"]',"input:not([type])","textarea"]},timer:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author"],context:null},toolbar:{type:"structure",attributes:{allowed:["aria-activedescendant","aria-expanded"]},owned:null,nameFrom:["author"],context:null,implicit:['menu[type="toolbar"]']},tooltip:{type:"widget",attributes:{allowed:["aria-expanded"]},owned:null,nameFrom:["author","contents"],context:null},tree:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-multiselectable","aria-required","aria-expanded"]},owned:{all:["treeitem"]},nameFrom:["author"],context:null},treegrid:{type:"composite",attributes:{allowed:["aria-activedescendant","aria-expanded","aria-level","aria-multiselectable","aria-readonly","aria-required"]},owned:{all:["treeitem"]},nameFrom:["author"],context:null},treeitem:{type:"widget",attributes:{allowed:["aria-checked","aria-selected","aria-expanded","aria-level","aria-posinset","aria-setsize"]},owned:null,nameFrom:["author","contents"],context:["treegrid","tree"]},widget:{type:"abstract"},window:{nameFrom:["author"],type:"abstract"}};var A={};commons.color=A;var B=commons.dom={},C=commons.table={},D=commons.text={};commons.utils=axe.utils;y.requiredAttr=function(a){"use strict";var b=z.role[a];return b&&b.attributes&&b.attributes.required||[]},y.allowedAttr=function(a){"use strict";var b=z.role[a],c=b&&b.attributes&&b.attributes.allowed||[],d=b&&b.attributes&&b.attributes.required||[];return c.concat(z.globalAttributes).concat(d)},y.validateAttr=function(a){"use strict";return!!z.attributes[a]},y.validateAttrValue=function(a,b){"use strict";var c,d,e=a.getAttribute(b),f=z.attributes[b],g=B.getRootNode(a);if(!f)return!0;switch(f.type){case"boolean":case"nmtoken":return"string"==typeof e&&-1!==f.values.indexOf(e.toLowerCase());case"nmtokens":return d=axe.utils.tokenList(e),d.reduce(function(a,b){return a&&-1!==f.values.indexOf(b)},0!==d.length);case"idref":return!(!e||!g.getElementById(e));case"idrefs":return d=axe.utils.tokenList(e),d.reduce(function(a,b){return!(!a||!g.getElementById(b))},0!==d.length);case"string":return!0;case"decimal":return!(!(c=e.match(/^[-+]?([0-9]*)\.?([0-9]*)$/))||!c[1]&&!c[2]);case"int":return/^[-+]?[0-9]+$/.test(e)}},y.label=function(a){var b,c;return a.actualNode instanceof Node==!1&&(a=axe.utils.getNodeFromTree(axe._tree[0],a)),a.actualNode.getAttribute("aria-labelledby")&&(b=B.idrefs(a.actualNode,"aria-labelledby"),c=b.map(function(a){var b=axe.utils.getNodeFromTree(axe._tree[0],a);return b?D.visible(b,!0):""}).join(" ").trim())?c:(c=a.actualNode.getAttribute("aria-label"),c&&(c=D.sanitize(c).trim())?c:null)},y.isValidRole=function(a){"use strict";return!!z.role[a]},y.getRolesWithNameFromContents=function(){return Object.keys(z.role).filter(function(a){return z.role[a].nameFrom&&-1!==z.role[a].nameFrom.indexOf("contents")})},y.getRolesByType=function(a){return Object.keys(z.role).filter(function(b){return z.role[b].type===a})},y.getRoleType=function(a){var b=z.role[a];return b&&b.type||null},y.requiredOwned=function(a){"use strict";var b=null,c=z.role[a];return c&&(b=axe.utils.clone(c.owned)),b},y.requiredContext=function(a){"use strict";var b=null,c=z.role[a];return c&&(b=axe.utils.clone(c.context)),b},y.implicitNodes=function(a){"use strict";var b=null,c=z.role[a];return c&&c.implicit&&(b=axe.utils.clone(c.implicit)),b},y.implicitRole=function(a){"use strict";var b=function(b,c){var d=function(b){return axe.utils.matchesSelector(a,b)};return c.implicit&&c.implicit.some(d)&&b.push(c.name),b},c=Object.keys(z.role).map(function(a){var b=z.role[a];return{name:a,implicit:b&&b.implicit}}),d=c.reduce(b,[]);if(!d.length)return null;for(var e=a.attributes,f=[],g=0,h=e.length;g<h;g++){var i=e[g];i.name.match(/^aria-/)&&f.push(i.name)}return function(a,b){var c=function(a){return y.allowedAttr(a).reduce(function(a,c){return a+(b.indexOf(c)>-1?1:0)},0)};return a.map(function(a){return{score:c(a),name:a}}).sort(function(a,b){return b.score-a.score}).map(function(a){return a.name})}(d,f).shift()},A.Color=function(a,b,c,d){this.red=a,this.green=b,this.blue=c,this.alpha=d,this.toHexString=function(){var a=Math.round(this.red).toString(16),b=Math.round(this.green).toString(16),c=Math.round(this.blue).toString(16);return"#"+(this.red>15.5?a:"0"+a)+(this.green>15.5?b:"0"+b)+(this.blue>15.5?c:"0"+c)};var e=/^rgb\((\d+), (\d+), (\d+)\)$/,f=/^rgba\((\d+), (\d+), (\d+), (\d*(\.\d+)?)\)/;this.parseRgbString=function(a){if("transparent"===a)return this.red=0,this.green=0,this.blue=0,void(this.alpha=0);var b=a.match(e);return b?(this.red=parseInt(b[1],10),this.green=parseInt(b[2],10),this.blue=parseInt(b[3],10),void(this.alpha=1)):(b=a.match(f),b?(this.red=parseInt(b[1],10),this.green=parseInt(b[2],10),this.blue=parseInt(b[3],10),void(this.alpha=parseFloat(b[4]))):void 0)},this.getRelativeLuminance=function(){var a=this.red/255,b=this.green/255,c=this.blue/255;return.2126*(a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))+.7152*(b<=.03928?b/12.92:Math.pow((b+.055)/1.055,2.4))+.0722*(c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4))}},A.flattenColors=function(a,b){var c=a.alpha,d=(1-c)*b.red+c*a.red,e=(1-c)*b.green+c*a.green,f=(1-c)*b.blue+c*a.blue,g=a.alpha+b.alpha*(1-a.alpha);return new A.Color(d,e,f,g)},A.getContrast=function(a,b){if(!b||!a)return null;b.alpha<1&&(b=A.flattenColors(b,a));var c=a.getRelativeLuminance(),d=b.getRelativeLuminance();return(Math.max(d,c)+.05)/(Math.min(d,c)+.05)},A.hasValidContrastRatio=function(a,b,c,d){var e=A.getContrast(a,b),f=d&&Math.ceil(72*c)/96<14||!d&&Math.ceil(72*c)/96<18;return{isValid:f&&e>=4.5||!f&&e>=3,contrastRatio:e}},A.elementIsDistinct=b;var E=["IMG","CANVAS","OBJECT","IFRAME","VIDEO","SVG"];A.getBackgroundStack=function(a){var b=a.getBoundingClientRect(),c=void 0,d=void 0;if(!(b.left>window.innerWidth||b.top>window.innerHeight)){c=Math.min(Math.ceil(b.left+b.width/2),window.innerWidth-1),d=Math.min(Math.ceil(b.top+b.height/2),window.innerHeight-1);var e=document.elementsFromPoint(c,d);e=h(e,a),e=B.reduceToElementsBelowFloating(e,a),e=i(e);var g=e.indexOf(a);return f(g,e,a)>=.99?(axe.commons.color.incompleteData.set("bgColor","bgOverlap"),null):-1!==g?e:null}},A.getBackgroundColor=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!0!==(arguments.length>2&&void 0!==arguments[2]&&arguments[2])){var e=a.clientHeight-2>=2*window.innerHeight;a.scrollIntoView(e)}var f=[],h=A.getBackgroundStack(a);if((h||[]).some(function(e){var h=window.getComputedStyle(e),i=d(e,h);return g(a,e,i)||c(e,h)?(f=null,b.push(e),!0):0!==i.alpha&&(b.push(e),f.push(i),1===i.alpha)}),null!==f&&null!==h){f.push(new A.Color(255,255,255,1));return f.reduce(A.flattenColors)}return null},B.isOpaque=function(a){var b=window.getComputedStyle(a);return c(a,b)||1===d(a,b).alpha},A.getForegroundColor=function(a,b){var c=window.getComputedStyle(a),d=new A.Color;d.parseRgbString(c.getPropertyValue("color"));var e=c.getPropertyValue("opacity");if(d.alpha=d.alpha*e,1===d.alpha)return d;var f=A.getBackgroundColor(a,[],b);if(null===f){var g=axe.commons.color.incompleteData.get("bgColor");return axe.commons.color.incompleteData.set("fgColor",g),null}return A.flattenColors(d,f)},A.incompleteData=function(){var a={};return{set:function(b,c){if("string"!=typeof b)throw new Error("Incomplete data: key must be a string");return c&&(a[b]=c),a[b]},get:function(b){return a[b]},clear:function(){a={}}}}(),B.reduceToElementsBelowFloating=function(a,b){var c,d,e,f=["fixed","sticky"],g=[],h=!1;for(c=0;c<a.length;++c)d=a[c],d===b&&(h=!0),e=window.getComputedStyle(d),h||-1===f.indexOf(e.position)?g.push(d):g=[];return g},B.findElmsInContext=function(a){var b=a.context,c=a.value,d=a.attr,e=a.elm,f=void 0===e?"":e,g=void 0;b=b.actualNode||b;var h=axe.utils.escapeSelector(c);return g=9===b.nodeType||11===b.nodeType?b:B.getRootNode(b),Array.from(g.querySelectorAll(f+"["+d+"="+h+"]"))},B.findUp=function(a,b){var c=void 0,d=void 0,e=a;do{if(e=e.assignedSlot?e.assignedSlot:e.parentNode,e&&11===e.nodeType&&(d=null,e=e.host),!d&&(c=axe.commons.dom.getRootNode(e),d=c.querySelectorAll(b),d=axe.utils.toArray(d),c===document&&!d.length))return null}while(e&&!d.includes(e));return e},B.getComposedParent=function a(b){if(b.assignedSlot)return a(b.assignedSlot);if(b.parentNode){var c=b.parentNode;if(1===c.nodeType)return c;if(c.host)return c.host}return null},B.getElementByReference=function(a,b){var c=a.getAttribute(b);if(c&&"#"===c.charAt(0)){c=c.substring(1);var d=document.getElementById(c);if(d)return d;if(d=document.getElementsByName(c),d.length)return d[0]}return null},B.getElementCoordinates=function(a){"use strict";var b=B.getScrollOffset(document),c=b.left,d=b.top,e=a.getBoundingClientRect();return{top:e.top+d,right:e.right+c,bottom:e.bottom+d,left:e.left+c,width:e.right-e.left,height:e.bottom-e.top}},B.getRootNode=function(a){var b=a.getRootNode&&a.getRootNode()||document;return b===a&&(b=document),b},B.getScrollOffset=function(a){"use strict";if(!a.nodeType&&a.document&&(a=a.document),9===a.nodeType){var b=a.documentElement,c=a.body;return{left:b&&b.scrollLeft||c&&c.scrollLeft||0,top:b&&b.scrollTop||c&&c.scrollTop||0}}return{left:a.scrollLeft,top:a.scrollTop}},B.getViewportSize=function(a){"use strict";var b,c=a.document,d=c.documentElement;return a.innerWidth?{width:a.innerWidth,height:a.innerHeight}:d?{width:d.clientWidth,height:d.clientHeight}:(b=c.body,{width:b.clientWidth,height:b.clientHeight})};var F=["HEAD","TITLE","TEMPLATE","SCRIPT","STYLE","IFRAME","OBJECT","VIDEO","AUDIO","NOSCRIPT"];B.hasContent=function(a,b){return a.actualNode||(a=axe.utils.getNodeFromTree(axe._tree[0],a)),j(a)||B.isVisualContent(a.actualNode)||!!y.label(a)||!b&&a.children.some(function(a){return 1===a.actualNode.nodeType&&B.hasContent(a)})},B.idrefs=function(a,b){"use strict";var c,d,e=B.getRootNode(a),f=[],g=a.getAttribute(b);if(g)for(g=axe.utils.tokenList(g),c=0,d=g.length;c<d;c++)f.push(e.getElementById(g[c]));return f},B.isFocusable=function(a){"use strict";if(!a||a.disabled||!B.isVisible(a)&&"AREA"!==a.nodeName.toUpperCase())return!1;switch(a.nodeName.toUpperCase()){case"A":case"AREA":if(a.href)return!0;break;case"INPUT":return"hidden"!==a.type
+;case"TEXTAREA":case"SELECT":case"DETAILS":case"BUTTON":return!0}var b=a.getAttribute("tabindex");return!(!b||isNaN(parseInt(b,10)))},B.isHTML5=function(a){var b=a.doctype;return null!==b&&("html"===b.name&&!b.publicId&&!b.systemId)};var G=["block","list-item","table","flex","grid","inline-block"];B.isInTextBlock=function(a){if(l(a))return!1;var b=m(a),c="",d="",e=0;return k(b,function(b){if(2===e)return!1;if(3===b.nodeType&&(c+=b.nodeValue),1===b.nodeType){var f=(b.nodeName||"").toUpperCase();if(["BR","HR"].includes(f))0===e?(c="",d=""):e=2;else{if("none"===b.style.display||"hidden"===b.style.overflow||!["",null,"none"].includes(b.style.float)||!["",null,"relative"].includes(b.style.position))return!1;if("A"===f&&b.href||"link"===(b.getAttribute("role")||"").toLowerCase())return b===a&&(e=1),d+=b.textContent,!1}}}),c=axe.commons.text.sanitize(c),d=axe.commons.text.sanitize(d),c.length>d.length},B.isNode=function(a){"use strict";return a instanceof Node},B.isOffscreen=function(a){"use strict";var b,c=document.documentElement,d=window.getComputedStyle(a),e=window.getComputedStyle(document.body||c).getPropertyValue("direction"),f=B.getElementCoordinates(a);if(f.bottom<0&&(function(a,b){for(a=a.parentNode;"html"!==a.nodeName.toLowerCase();){if(a.scrollTop&&(b+=a.scrollTop)>=0)return!1;a=a.parentNode}return!0}(a,f.bottom)||"absolute"===d.position))return!0;if(0===f.left&&0===f.right)return!1;if("ltr"===e){if(f.right<=0)return!0}else if(b=Math.max(c.scrollWidth,B.getViewportSize(window).width),f.left>=b)return!0;return!1},B.isVisible=function(a,b,c){"use strict";var d,e,f;return 9===a.nodeType||(11===a.nodeType&&(a=a.host),null!==(d=window.getComputedStyle(a,null))&&(e=a.nodeName.toUpperCase(),!("none"===d.getPropertyValue("display")||"STYLE"===e.toUpperCase()||"SCRIPT"===e.toUpperCase()||!b&&n(d.getPropertyValue("clip"))||!c&&("hidden"===d.getPropertyValue("visibility")||!b&&B.isOffscreen(a))||b&&"true"===a.getAttribute("aria-hidden"))&&(!!(f=a.assignedSlot?a.assignedSlot:a.parentNode)&&B.isVisible(f,b,!0))))};var H=["checkbox","img","radio","range","slider","spinbutton","textbox"];B.isVisualContent=function(a){var b=a.getAttribute("role");if(b)return-1!==H.indexOf(b);switch(a.tagName.toUpperCase()){case"IMG":case"IFRAME":case"OBJECT":case"VIDEO":case"AUDIO":case"CANVAS":case"SVG":case"MATH":case"BUTTON":case"SELECT":case"TEXTAREA":case"KEYGEN":case"PROGRESS":case"METER":return!0;case"INPUT":return"hidden"!==a.type;default:return!1}},B.visuallyContains=function(a,b){var c=a.getBoundingClientRect(),d={top:c.top+.01,bottom:c.bottom-.01,left:c.left+.01,right:c.right-.01},e=b.getBoundingClientRect(),f=e.top,g=e.left,h={top:f-b.scrollTop,bottom:f-b.scrollTop+b.scrollHeight,left:g-b.scrollLeft,right:g-b.scrollLeft+b.scrollWidth},i=window.getComputedStyle(b);return"inline"===i.getPropertyValue("display")||!(d.left<h.left&&d.left<e.left||d.top<h.top&&d.top<e.top||d.right>h.right&&d.right>e.right||d.bottom>h.bottom&&d.bottom>e.bottom)&&(!(d.right>e.right||d.bottom>e.bottom)||("scroll"===i.overflow||"auto"===i.overflow||"hidden"===i.overflow||b instanceof HTMLBodyElement||b instanceof HTMLHtmlElement))},B.visuallyOverlaps=function(a,b){var c=b.getBoundingClientRect(),d=c.top,e=c.left,f={top:d-b.scrollTop,bottom:d-b.scrollTop+b.scrollHeight,left:e-b.scrollLeft,right:e-b.scrollLeft+b.scrollWidth};if(a.left>f.right&&a.left>c.right||a.top>f.bottom&&a.top>c.bottom||a.right<f.left&&a.right<c.left||a.bottom<f.top&&a.bottom<c.top)return!1;var g=window.getComputedStyle(b);return!(a.left>c.right||a.top>c.bottom)||("scroll"===g.overflow||"auto"===g.overflow||b instanceof HTMLBodyElement||b instanceof HTMLHtmlElement)},C.getAllCells=function(a){var b,c,d,e,f=[];for(b=0,d=a.rows.length;b<d;b++)for(c=0,e=a.rows[b].cells.length;c<e;c++)f.push(a.rows[b].cells[c]);return f},C.getCellPosition=function(a,b){var c,d;for(b||(b=C.toGrid(B.findUp(a,"table"))),c=0;c<b.length;c++)if(b[c]&&-1!==(d=b[c].indexOf(a)))return{x:d,y:c}},C.getHeaders=function(a){if(a.hasAttribute("headers"))return commons.dom.idrefs(a,"headers");var b=commons.table.toGrid(commons.dom.findUp(a,"table")),c=commons.table.getCellPosition(a,b);return[].concat(C.traverse("left",c,b).filter(function(a){return C.isRowHeader(a)}),C.traverse("up",c,b).filter(function(a){return C.isColumnHeader(a)})).reverse()},C.getScope=function(a){var b=a.getAttribute("scope"),c=a.getAttribute("role");if(a instanceof Element==!1||-1===["TD","TH"].indexOf(a.nodeName.toUpperCase()))throw new TypeError("Expected TD or TH element");if("columnheader"===c)return"col";if("rowheader"===c)return"row";if("col"===b||"row"===b)return b;if("TH"!==a.nodeName.toUpperCase())return!1;var d=C.toGrid(B.findUp(a,"table")),e=C.getCellPosition(a);return d[e.y].reduce(function(a,b){return a&&"TH"===b.nodeName.toUpperCase()},!0)?"col":d.map(function(a){return a[e.x]}).reduce(function(a,b){return a&&"TH"===b.nodeName.toUpperCase()},!0)?"row":"auto"},C.isColumnHeader=function(a){return-1!==["col","auto"].indexOf(C.getScope(a))},C.isDataCell=function(a){return!(!a.children.length&&!a.textContent.trim())&&"TD"===a.nodeName.toUpperCase()},C.isDataTable=function(a){var b=a.getAttribute("role");if(("presentation"===b||"none"===b)&&!B.isFocusable(a))return!1;if("true"===a.getAttribute("contenteditable")||B.findUp(a,'[contenteditable="true"]'))return!0;if("grid"===b||"treegrid"===b||"table"===b)return!0;if("landmark"===commons.aria.getRoleType(b))return!0;if("0"===a.getAttribute("datatable"))return!1;if(a.getAttribute("summary"))return!0;if(a.tHead||a.tFoot||a.caption)return!0;for(var c=0,d=a.children.length;c<d;c++)if("COLGROUP"===a.children[c].nodeName.toUpperCase())return!0;for(var e,f,g=0,h=a.rows.length,i=!1,j=0;j<h;j++){e=a.rows[j];for(var k=0,l=e.cells.length;k<l;k++){if(f=e.cells[k],"TH"===f.nodeName.toUpperCase())return!0;if(i||f.offsetWidth===f.clientWidth&&f.offsetHeight===f.clientHeight||(i=!0),f.getAttribute("scope")||f.getAttribute("headers")||f.getAttribute("abbr"))return!0;if(-1!==["columnheader","rowheader"].indexOf(f.getAttribute("role")))return!0;if(1===f.children.length&&"ABBR"===f.children[0].nodeName.toUpperCase())return!0;g++}}if(a.getElementsByTagName("table").length)return!1;if(h<2)return!1;var m=a.rows[Math.ceil(h/2)];if(1===m.cells.length&&1===m.cells[0].colSpan)return!1;if(m.cells.length>=5)return!0;if(i)return!0;var n,o;for(j=0;j<h;j++){if(e=a.rows[j],n&&n!==window.getComputedStyle(e).getPropertyValue("background-color"))return!0;if(n=window.getComputedStyle(e).getPropertyValue("background-color"),o&&o!==window.getComputedStyle(e).getPropertyValue("background-image"))return!0;o=window.getComputedStyle(e).getPropertyValue("background-image")}return h>=20||!(B.getElementCoordinates(a).width>.95*B.getViewportSize(window).width)&&(!(g<10)&&!a.querySelector("object, embed, iframe, applet"))},C.isHeader=function(a){if(C.isColumnHeader(a)||C.isRowHeader(a))return!0;if(a.getAttribute("id")){var b=axe.utils.escapeSelector(a.getAttribute("id"));return!!document.querySelector('[headers~="'+b+'"]')}return!1},C.isRowHeader=function(a){return-1!==["row","auto"].indexOf(C.getScope(a))},C.toGrid=function(a){for(var b=[],c=a.rows,d=0,e=c.length;d<e;d++){var f=c[d].cells;b[d]=b[d]||[];for(var g=0,h=0,i=f.length;h<i;h++)for(var j=0;j<f[h].colSpan;j++){for(var k=0;k<f[h].rowSpan;k++){for(b[d+k]=b[d+k]||[];b[d+k][g];)g++;b[d+k][g]=f[h]}g++}}return b},C.toArray=C.toGrid,function(a){var b=function a(b,c,d,e){var f,g=d[c.y]?d[c.y][c.x]:void 0;return g?"function"==typeof e&&!0===(f=e(g,c,d))?[g]:(f=a(b,{x:c.x+b.x,y:c.y+b.y},d,e),f.unshift(g),f):[]};a.traverse=function(a,c,d,e){if(Array.isArray(c)&&(e=d,d=c,c={x:0,y:0}),"string"==typeof a)switch(a){case"left":a={x:-1,y:0};break;case"up":a={x:0,y:-1};break;case"right":a={x:1,y:0};break;case"down":a={x:0,y:1}}return b(a,{x:c.x+a.x,y:c.y+a.y},d,e)}}(C);var I={submit:"Submit",reset:"Reset"},J=["text","search","tel","url","email","date","time","number","range","color"],K=["A","EM","STRONG","SMALL","MARK","ABBR","DFN","I","B","S","U","CODE","VAR","SAMP","KBD","SUP","SUB","Q","CITE","SPAN","BDO","BDI","BR","WBR","INS","DEL","IMG","EMBED","OBJECT","IFRAME","MAP","AREA","SCRIPT","NOSCRIPT","RUBY","VIDEO","AUDIO","INPUT","TEXTAREA","SELECT","BUTTON","LABEL","OUTPUT","DATALIST","KEYGEN","PROGRESS","COMMAND","CANVAS","TIME","METER"];D.accessibleText=function(a,b){function c(a,b,c){return a.children.reduce(function(a,d){var e=d.actualNode;return 3===e.nodeType?a+=e.nodeValue:1===e.nodeType&&(K.includes(e.nodeName.toUpperCase())||(a+=" "),a+=f(d,b,c)),a},"")}function d(a,b,d){var e="",g=a.actualNode,h=g.nodeName.toUpperCase();if(r(a)&&(e=c(a,!1,!1)||"",x(e)))return e;if("FIGURE"===h&&(e=u(a,"figcaption"),x(e)))return e;if("TABLE"===h){if(e=u(a,"caption"),x(e))return e;if(e=g.getAttribute("title")||g.getAttribute("summary")||"",x(e))return e}if(w(a))return g.getAttribute("alt")||"";if(q(a)&&!d){if(p(a))return g.value||g.title||I[g.type]||"";var i=o(a);if(i)return f(i,b,!0)}return""}function e(a,b,c){var d="",e=a.actualNode;return!b&&e.hasAttribute("aria-labelledby")&&(d=D.sanitize(B.idrefs(e,"aria-labelledby").map(function(a){if(null!==a){e===a&&g.pop();var b=axe.utils.getNodeFromTree(axe._tree[0],a);return f(b,!0,e!==a)}return""}).join(" "))),d||c&&v(a)||!e.hasAttribute("aria-label")?d:D.sanitize(e.getAttribute("aria-label"))}var f=void 0,g=[];return a instanceof Node&&(a=axe.utils.getNodeFromTree(axe._tree[0],a)),f=function(a,b,f){var h=void 0;if(!a||g.includes(a))return"";if(null!==a&&a.actualNode instanceof Node!=!0)throw new Error("Invalid argument. Virtual Node must be provided");if(!b&&!B.isVisible(a.actualNode,!0))return"";g.push(a);var i=a.actualNode.getAttribute("role");return h=e(a,b,f),x(h)?h:(h=d(a,b,f),x(h)?h:f&&(h=t(a),x(h))?h:s(a)||i&&-1===y.getRolesWithNameFromContents().indexOf(i)||(h=c(a,b,f),!x(h))?a.actualNode.hasAttribute("title")?a.actualNode.getAttribute("title"):"":h)},D.sanitize(f(a,b))},D.label=function(a){var b,c,d;if(c=y.label(a))return c;if(a.actualNode.id){var e=axe.commons.utils.escapeSelector(a.actualNode.getAttribute("id"));if(d=axe.commons.dom.getRootNode(a.actualNode),b=d.querySelector('label[for="'+e+'"]'),b=axe.utils.getNodeFromTree(axe._tree[0],b),c=b&&D.visible(b,!0))return c}return b=B.findUp(a.actualNode,"label"),b=axe.utils.getNodeFromTree(axe._tree[0],b),(c=b&&D.visible(b,!0))||null},D.sanitize=function(a){"use strict";return a.replace(/\r\n/g,"\n").replace(/\u00A0/g," ").replace(/[\s]{2,}/g," ").trim()},D.visible=function(a,b,c){"use strict";var d,e,f,g=a.children,h=g.length,i="";for(d=0;d<h;d++)e=g[d],3===e.actualNode.nodeType?(f=e.actualNode.nodeValue)&&B.isVisible(a.actualNode,b)&&(i+=f):c||(i+=D.visible(e,b));return D.sanitize(i)},axe.utils.toArray=function(a){"use strict";return Array.prototype.slice.call(a)},axe.utils.tokenList=function(a){"use strict";return a.trim().replace(/\s{2,}/g," ").split(" ")}
+;var L=["aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","id","ie","ig","ii","ik","in","io","is","it","iu","iw","ja","ji","jv","jw","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mo","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","sh","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","aaa","aab","aac","aad","aae","aaf","aag","aah","aai","aak","aal","aam","aan","aao","aap","aaq","aas","aat","aau","aav","aaw","aax","aaz","aba","abb","abc","abd","abe","abf","abg","abh","abi","abj","abl","abm","abn","abo","abp","abq","abr","abs","abt","abu","abv","abw","abx","aby","abz","aca","acb","acd","ace","acf","ach","aci","ack","acl","acm","acn","acp","acq","acr","acs","act","acu","acv","acw","acx","acy","acz","ada","adb","add","ade","adf","adg","adh","adi","adj","adl","adn","ado","adp","adq","adr","ads","adt","adu","adw","adx","ady","adz","aea","aeb","aec","aed","aee","aek","ael","aem","aen","aeq","aer","aes","aeu","aew","aey","aez","afa","afb","afd","afe","afg","afh","afi","afk","afn","afo","afp","afs","aft","afu","afz","aga","agb","agc","agd","age","agf","agg","agh","agi","agj","agk","agl","agm","agn","ago","agp","agq","agr","ags","agt","agu","agv","agw","agx","agy","agz","aha","ahb","ahg","ahh","ahi","ahk","ahl","ahm","ahn","aho","ahp","ahr","ahs","aht","aia","aib","aic","aid","aie","aif","aig","aih","aii","aij","aik","ail","aim","ain","aio","aip","aiq","air","ais","ait","aiw","aix","aiy","aja","ajg","aji","ajn","ajp","ajt","aju","ajw","ajz","akb","akc","akd","ake","akf","akg","akh","aki","akj","akk","akl","akm","ako","akp","akq","akr","aks","akt","aku","akv","akw","akx","aky","akz","ala","alc","ald","ale","alf","alg","alh","ali","alj","alk","all","alm","aln","alo","alp","alq","alr","als","alt","alu","alv","alw","alx","aly","alz","ama","amb","amc","ame","amf","amg","ami","amj","amk","aml","amm","amn","amo","amp","amq","amr","ams","amt","amu","amv","amw","amx","amy","amz","ana","anb","anc","and","ane","anf","ang","anh","ani","anj","ank","anl","anm","ann","ano","anp","anq","anr","ans","ant","anu","anv","anw","anx","any","anz","aoa","aob","aoc","aod","aoe","aof","aog","aoh","aoi","aoj","aok","aol","aom","aon","aor","aos","aot","aou","aox","aoz","apa","apb","apc","apd","ape","apf","apg","aph","api","apj","apk","apl","apm","apn","apo","app","apq","apr","aps","apt","apu","apv","apw","apx","apy","apz","aqa","aqc","aqd","aqg","aql","aqm","aqn","aqp","aqr","aqt","aqz","arb","arc","ard","are","arh","ari","arj","ark","arl","arn","aro","arp","arq","arr","ars","art","aru","arv","arw","arx","ary","arz","asa","asb","asc","asd","ase","asf","asg","ash","asi","asj","ask","asl","asn","aso","asp","asq","asr","ass","ast","asu","asv","asw","asx","asy","asz","ata","atb","atc","atd","ate","atg","ath","ati","atj","atk","atl","atm","atn","ato","atp","atq","atr","ats","att","atu","atv","atw","atx","aty","atz","aua","aub","auc","aud","aue","auf","aug","auh","aui","auj","auk","aul","aum","aun","auo","aup","auq","aur","aus","aut","auu","auw","aux","auy","auz","avb","avd","avi","avk","avl","avm","avn","avo","avs","avt","avu","avv","awa","awb","awc","awd","awe","awg","awh","awi","awk","awm","awn","awo","awr","aws","awt","awu","awv","aww","awx","awy","axb","axe","axg","axk","axl","axm","axx","aya","ayb","ayc","ayd","aye","ayg","ayh","ayi","ayk","ayl","ayn","ayo","ayp","ayq","ayr","ays","ayt","ayu","ayx","ayy","ayz","aza","azb","azc","azd","azg","azj","azm","azn","azo","azt","azz","baa","bab","bac","bad","bae","baf","bag","bah","bai","baj","bal","ban","bao","bap","bar","bas","bat","bau","bav","baw","bax","bay","baz","bba","bbb","bbc","bbd","bbe","bbf","bbg","bbh","bbi","bbj","bbk","bbl","bbm","bbn","bbo","bbp","bbq","bbr","bbs","bbt","bbu","bbv","bbw","bbx","bby","bbz","bca","bcb","bcc","bcd","bce","bcf","bcg","bch","bci","bcj","bck","bcl","bcm","bcn","bco","bcp","bcq","bcr","bcs","bct","bcu","bcv","bcw","bcy","bcz","bda","bdb","bdc","bdd","bde","bdf","bdg","bdh","bdi","bdj","bdk","bdl","bdm","bdn","bdo","bdp","bdq","bdr","bds","bdt","bdu","bdv","bdw","bdx","bdy","bdz","bea","beb","bec","bed","bee","bef","beg","beh","bei","bej","bek","bem","beo","bep","beq","ber","bes","bet","beu","bev","bew","bex","bey","bez","bfa","bfb","bfc","bfd","bfe","bff","bfg","bfh","bfi","bfj","bfk","bfl","bfm","bfn","bfo","bfp","bfq","bfr","bfs","bft","bfu","bfw","bfx","bfy","bfz","bga","bgb","bgc","bgd","bge","bgf","bgg","bgi","bgj","bgk","bgl","bgm","bgn","bgo","bgp","bgq","bgr","bgs","bgt","bgu","bgv","bgw","bgx","bgy","bgz","bha","bhb","bhc","bhd","bhe","bhf","bhg","bhh","bhi","bhj","bhk","bhl","bhm","bhn","bho","bhp","bhq","bhr","bhs","bht","bhu","bhv","bhw","bhx","bhy","bhz","bia","bib","bic","bid","bie","bif","big","bij","bik","bil","bim","bin","bio","bip","biq","bir","bit","biu","biv","biw","bix","biy","biz","bja","bjb","bjc","bjd","bje","bjf","bjg","bjh","bji","bjj","bjk","bjl","bjm","bjn","bjo","bjp","bjq","bjr","bjs","bjt","bju","bjv","bjw","bjx","bjy","bjz","bka","bkb","bkc","bkd","bkf","bkg","bkh","bki","bkj","bkk","bkl","bkm","bkn","bko","bkp","bkq","bkr","bks","bkt","bku","bkv","bkw","bkx","bky","bkz","bla","blb","blc","bld","ble","blf","blg","blh","bli","blj","blk","bll","blm","bln","blo","blp","blq","blr","bls","blt","blv","blw","blx","bly","blz","bma","bmb","bmc","bmd","bme","bmf","bmg","bmh","bmi","bmj","bmk","bml","bmm","bmn","bmo","bmp","bmq","bmr","bms","bmt","bmu","bmv","bmw","bmx","bmy","bmz","bna","bnb","bnc","bnd","bne","bnf","bng","bni","bnj","bnk","bnl","bnm","bnn","bno","bnp","bnq","bnr","bns","bnt","bnu","bnv","bnw","bnx","bny","bnz","boa","bob","boe","bof","bog","boh","boi","boj","bok","bol","bom","bon","boo","bop","boq","bor","bot","bou","bov","bow","box","boy","boz","bpa","bpb","bpd","bpg","bph","bpi","bpj","bpk","bpl","bpm","bpn","bpo","bpp","bpq","bpr","bps","bpt","bpu","bpv","bpw","bpx","bpy","bpz","bqa","bqb","bqc","bqd","bqf","bqg","bqh","bqi","bqj","bqk","bql","bqm","bqn","bqo","bqp","bqq","bqr","bqs","bqt","bqu","bqv","bqw","bqx","bqy","bqz","bra","brb","brc","brd","brf","brg","brh","bri","brj","brk","brl","brm","brn","bro","brp","brq","brr","brs","brt","bru","brv","brw","brx","bry","brz","bsa","bsb","bsc","bse","bsf","bsg","bsh","bsi","bsj","bsk","bsl","bsm","bsn","bso","bsp","bsq","bsr","bss","bst","bsu","bsv","bsw","bsx","bsy","bta","btb","btc","btd","bte","btf","btg","bth","bti","btj","btk","btl","btm","btn","bto","btp","btq","btr","bts","btt","btu","btv","btw","btx","bty","btz","bua","bub","buc","bud","bue","buf","bug","buh","bui","buj","buk","bum","bun","buo","bup","buq","bus","but","buu","buv","buw","bux","buy","buz","bva","bvb","bvc","bvd","bve","bvf","bvg","bvh","bvi","bvj","bvk","bvl","bvm","bvn","bvo","bvp","bvq","bvr","bvt","bvu","bvv","bvw","bvx","bvy","bvz","bwa","bwb","bwc","bwd","bwe","bwf","bwg","bwh","bwi","bwj","bwk","bwl","bwm","bwn","bwo","bwp","bwq","bwr","bws","bwt","bwu","bww","bwx","bwy","bwz","bxa","bxb","bxc","bxd","bxe","bxf","bxg","bxh","bxi","bxj","bxk","bxl","bxm","bxn","bxo","bxp","bxq","bxr","bxs","bxu","bxv","bxw","bxx","bxz","bya","byb","byc","byd","bye","byf","byg","byh","byi","byj","byk","byl","bym","byn","byo","byp","byq","byr","bys","byt","byv","byw","byx","byy","byz","bza","bzb","bzc","bzd","bze","bzf","bzg","bzh","bzi","bzj","bzk","bzl","bzm","bzn","bzo","bzp","bzq","bzr","bzs","bzt","bzu","bzv","bzw","bzx","bzy","bzz","caa","cab","cac","cad","cae","caf","cag","cah","cai","caj","cak","cal","cam","can","cao","cap","caq","car","cas","cau","cav","caw","cax","cay","caz","cba","cbb","cbc","cbd","cbe","cbg","cbh","cbi","cbj","cbk","cbl","cbn","cbo","cbq","cbr","cbs","cbt","cbu","cbv","cbw","cby","cca","ccc","ccd","cce","ccg","cch","ccj","ccl","ccm","ccn","cco","ccp","ccq","ccr","ccs","cda","cdc","cdd","cde","cdf","cdg","cdh","cdi","cdj","cdm","cdn","cdo","cdr","cds","cdy","cdz","cea","ceb","ceg","cek","cel","cen","cet","cfa","cfd","cfg","cfm","cga","cgc","cgg","cgk","chb","chc","chd","chf","chg","chh","chj","chk","chl","chm","chn","cho","chp","chq","chr","cht","chw","chx","chy","chz","cia","cib","cic","cid","cie","cih","cik","cim","cin","cip","cir","ciw","ciy","cja","cje","cjh","cji","cjk","cjm","cjn","cjo","cjp","cjr","cjs","cjv","cjy","cka","ckb","ckh","ckl","ckn","cko","ckq","ckr","cks","ckt","cku","ckv","ckx","cky","ckz","cla","clc","cld","cle","clh","cli","clj","clk","cll","clm","clo","clt","clu","clw","cly","cma","cmc","cme","cmg","cmi","cmk","cml","cmm","cmn","cmo","cmr","cms","cmt","cna","cnb","cnc","cng","cnh","cni","cnk","cnl","cno","cns","cnt","cnu","cnw","cnx","coa","cob","coc","cod","coe","cof","cog","coh","coj","cok","col","com","con","coo","cop","coq","cot","cou","cov","cow","cox","coy","coz","cpa","cpb","cpc","cpe","cpf","cpg","cpi","cpn","cpo","cpp","cps","cpu","cpx","cpy","cqd","cqu","cra","crb","crc","crd","crf","crg","crh","cri","crj","crk","crl","crm","crn","cro","crp","crq","crr","crs","crt","crv","crw","crx","cry","crz","csa","csb","csc","csd","cse","csf","csg","csh","csi","csj","csk","csl","csm","csn","cso","csq","csr","css","cst","csu","csv","csw","csy","csz","cta","ctc","ctd","cte","ctg","cth","ctl","ctm","ctn","cto","ctp","cts","ctt","ctu","ctz","cua","cub","cuc","cug","cuh","cui","cuj","cuk","cul","cum","cuo","cup","cuq","cur","cus","cut","cuu","cuv","cuw","cux","cvg","cvn","cwa","cwb","cwd","cwe","cwg","cwt","cya","cyb","cyo","czh","czk","czn","czo","czt","daa","dac","dad","dae","daf","dag","dah","dai","daj","dak","dal","dam","dao","dap","daq","dar","das","dau","dav","daw","dax","day","daz","dba","dbb","dbd","dbe","dbf","dbg","dbi","dbj","dbl","dbm","dbn","dbo","dbp","dbq","dbr","dbt","dbu","dbv","dbw","dby","dcc","dcr","dda","ddd","dde","ddg","ddi","ddj","ddn","ddo","ddr","dds","ddw","dec","ded","dee","def","deg","deh","dei","dek","del","dem","den","dep","deq","der","des","dev","dez","dga","dgb","dgc","dgd","dge","dgg","dgh","dgi","dgk","dgl","dgn","dgo","dgr","dgs","dgt","dgu","dgw","dgx","dgz","dha","dhd","dhg","dhi","dhl","dhm","dhn","dho","dhr","dhs","dhu","dhv","dhw","dhx","dia","dib","dic","did","dif","dig","dih","dii","dij","dik","dil","dim","din","dio","dip","diq","dir","dis","dit","diu","diw","dix","diy","diz","dja","djb","djc","djd","dje","djf","dji","djj","djk","djl","djm","djn","djo","djr","dju","djw","dka","dkk","dkl","dkr","dks","dkx","dlg","dlk","dlm","dln","dma","dmb","dmc","dmd","dme","dmg","dmk","dml","dmm","dmn","dmo","dmr","dms","dmu","dmv","dmw","dmx","dmy","dna","dnd","dne","dng","dni","dnj","dnk","dnn","dnr","dnt","dnu","dnv","dnw","dny","doa","dob","doc","doe","dof","doh","doi","dok","dol","don","doo","dop","doq","dor","dos","dot","dov","dow","dox","doy","doz","dpp","dra","drb","drc","drd","dre","drg","drh","dri","drl","drn","dro","drq","drr","drs","drt","dru","drw","dry","dsb","dse","dsh","dsi","dsl","dsn","dso","dsq","dta","dtb","dtd","dth","dti","dtk","dtm","dtn","dto","dtp","dtr","dts","dtt","dtu","dty","dua","dub","duc","dud","due","duf","dug","duh","dui","duj","duk","dul","dum","dun","duo","dup","duq","dur","dus","duu","duv","duw","dux","duy","duz","dva","dwa","dwl","dwr","dws","dwu","dww","dwy","dya","dyb","dyd","dyg","dyi","dym","dyn","dyo","dyu","dyy","dza","dzd","dze","dzg","dzl","dzn","eaa","ebg","ebk","ebo","ebr","ebu","ecr","ecs","ecy","eee","efa","efe","efi","ega","egl","ego","egx","egy","ehu","eip","eit","eiv","eja","eka","ekc","eke","ekg","eki","ekk","ekl","ekm","eko","ekp","ekr","eky","ele","elh","eli","elk","elm","elo","elp","elu","elx","ema","emb","eme","emg","emi","emk","emm","emn","emo","emp","ems","emu","emw","emx","emy","ena","enb","enc","end","enf","enh","enl","enm","enn","eno","enq","enr","enu","env","enw","enx","eot","epi","era","erg","erh","eri","erk","ero","err","ers","ert","erw","ese","esg","esh","esi","esk","esl","esm","esn","eso","esq","ess","esu","esx","esy","etb","etc","eth","etn","eto","etr","ets","ett","etu","etx","etz","euq","eve","evh","evn","ewo","ext","eya","eyo","eza","eze","faa","fab","fad","faf","fag","fah","fai","faj","fak","fal","fam","fan","fap","far","fat","fau","fax","fay","faz","fbl","fcs","fer","ffi","ffm","fgr","fia","fie","fil","fip","fir","fit","fiu","fiw","fkk","fkv","fla","flh","fli","fll","fln","flr","fly","fmp","fmu","fnb","fng","fni","fod","foi","fom","fon","for","fos","fox","fpe","fqs","frc","frd","frk","frm","fro","frp","frq","frr","frs","frt","fse","fsl","fss","fub","fuc","fud","fue","fuf","fuh","fui","fuj","fum","fun","fuq","fur","fut","fuu","fuv","fuy","fvr","fwa","fwe","gaa","gab","gac","gad","gae","gaf","gag","gah","gai","gaj","gak","gal","gam","gan","gao","gap","gaq","gar","gas","gat","gau","gav","gaw","gax","gay","gaz","gba","gbb","gbc","gbd","gbe","gbf","gbg","gbh","gbi","gbj","gbk","gbl","gbm","gbn","gbo","gbp","gbq","gbr","gbs","gbu","gbv","gbw","gbx","gby","gbz","gcc","gcd","gce","gcf","gcl","gcn","gcr","gct","gda","gdb","gdc","gdd","gde","gdf","gdg","gdh","gdi","gdj","gdk","gdl","gdm","gdn","gdo","gdq","gdr","gds","gdt","gdu","gdx","gea","geb","gec","ged","geg","geh","gei","gej","gek","gel","gem","geq","ges","gev","gew","gex","gey","gez","gfk","gft","gfx","gga","ggb","ggd","gge","ggg","ggk","ggl","ggn","ggo","ggr","ggt","ggu","ggw","gha","ghc","ghe","ghh","ghk","ghl","ghn","gho","ghr","ghs","ght","gia","gib","gic","gid","gie","gig","gih","gil","gim","gin","gio","gip","giq","gir","gis","git","giu","giw","gix","giy","giz","gji","gjk","gjm","gjn","gjr","gju","gka","gke","gkn","gko","gkp","gku","glc","gld","glh","gli","glj","glk","gll","glo","glr","glu","glw","gly","gma","gmb","gmd","gme","gmg","gmh","gml","gmm","gmn","gmq","gmu","gmv","gmw","gmx","gmy","gmz","gna","gnb","gnc","gnd","gne","gng","gnh","gni","gnk","gnl","gnm","gnn","gno","gnq","gnr","gnt","gnu","gnw","gnz","goa","gob","goc","god","goe","gof","gog","goh","goi","goj","gok","gol","gom","gon","goo","gop","goq","gor","gos","got","gou","gow","gox","goy","goz","gpa","gpe","gpn","gqa","gqi","gqn","gqr","gqu","gra","grb","grc","grd","grg","grh","gri","grj","grk","grm","gro","grq","grr","grs","grt","gru","grv","grw","grx","gry","grz","gse","gsg","gsl","gsm","gsn","gso","gsp","gss","gsw","gta","gti","gtu","gua","gub","guc","gud","gue","guf","gug","guh","gui","guk","gul","gum","gun","guo","gup","guq","gur","gus","gut","guu","guv","guw","gux","guz","gva","gvc","gve","gvf","gvj","gvl","gvm","gvn","gvo","gvp","gvr","gvs","gvy","gwa","gwb","gwc","gwd","gwe","gwf","gwg","gwi","gwj","gwm","gwn","gwr","gwt","gwu","gww","gwx","gxx","gya","gyb","gyd","gye","gyf","gyg","gyi","gyl","gym","gyn","gyr","gyy","gza","gzi","gzn","haa","hab","hac","had","hae","haf","hag","hah","hai","haj","hak","hal","ham","han","hao","hap","haq","har","has","hav","haw","hax","hay","haz","hba","hbb","hbn","hbo","hbu","hca","hch","hdn","hds","hdy","hea","hed","heg","heh","hei","hem","hgm","hgw","hhi","hhr","hhy","hia","hib","hid","hif","hig","hih","hii","hij","hik","hil","him","hio","hir","hit","hiw","hix","hji","hka","hke","hkk","hks","hla","hlb","hld","hle","hlt","hlu","hma","hmb","hmc","hmd","hme","hmf","hmg","hmh","hmi","hmj","hmk","hml","hmm","hmn","hmp","hmq","hmr","hms","hmt","hmu","hmv","hmw","hmx","hmy","hmz","hna","hnd","hne","hnh","hni","hnj","hnn","hno","hns","hnu","hoa","hob","hoc","hod","hoe","hoh","hoi","hoj","hok","hol","hom","hoo","hop","hor","hos","hot","hov","how","hoy","hoz","hpo","hps","hra","hrc","hre","hrk","hrm","hro","hrp","hrr","hrt","hru","hrw","hrx","hrz","hsb","hsh","hsl","hsn","hss","hti","hto","hts","htu","htx","hub","huc","hud","hue","huf","hug","huh","hui","huj","huk","hul","hum","huo","hup","huq","hur","hus","hut","huu","huv","huw","hux","huy","huz","hvc","hve","hvk","hvn","hvv","hwa","hwc","hwo","hya","hyx","iai","ian","iap","iar","iba","ibb","ibd","ibe","ibg","ibh","ibi","ibl","ibm","ibn","ibr","ibu","iby","ica","ich","icl","icr","ida","idb","idc","idd","ide","idi","idr","ids","idt","idu","ifa","ifb","ife","iff","ifk","ifm","ifu","ify","igb","ige","igg","igl","igm","ign","igo","igs","igw","ihb","ihi","ihp","ihw","iin","iir","ijc","ije","ijj","ijn","ijo","ijs","ike","iki","ikk","ikl","iko","ikp","ikr","iks","ikt","ikv","ikw","ikx","ikz","ila","ilb","ilg","ili","ilk","ill","ilm","ilo","ilp","ils","ilu","ilv","ilw","ima","ime","imi","iml","imn","imo","imr","ims","imy","inb","inc","ine","ing","inh","inj","inl","inm","inn","ino","inp","ins","int","inz","ior","iou","iow","ipi","ipo","iqu","iqw","ira","ire","irh","iri","irk","irn","iro","irr","iru","irx","iry","isa","isc","isd","ise","isg","ish","isi","isk","ism","isn","iso","isr","ist","isu","itb","itc","itd","ite","iti","itk","itl","itm","ito","itr","its","itt","itv","itw","itx","ity","itz","ium","ivb","ivv","iwk","iwm","iwo","iws","ixc","ixl","iya","iyo","iyx","izh","izi","izr","izz","jaa","jab","jac","jad","jae","jaf","jah","jaj","jak","jal","jam","jan","jao","jaq","jar","jas","jat","jau","jax","jay","jaz","jbe","jbi","jbj","jbk","jbn","jbo","jbr","jbt","jbu","jbw","jcs","jct","jda","jdg","jdt","jeb","jee","jeg","jeh","jei","jek","jel","jen","jer","jet","jeu","jgb","jge","jgk","jgo","jhi","jhs","jia","jib","jic","jid","jie","jig","jih","jii","jil","jim","jio","jiq","jit","jiu","jiv","jiy","jje","jjr","jka","jkm","jko","jkp","jkr","jku","jle","jls","jma","jmb","jmc","jmd","jmi","jml","jmn","jmr","jms","jmw","jmx","jna","jnd","jng","jni","jnj","jnl","jns","job","jod","jog","jor","jos","jow","jpa","jpr","jpx","jqr","jra","jrb","jrr","jrt","jru","jsl","jua","jub","juc","jud","juh","jui","juk","jul","jum","jun","juo","jup","jur","jus","jut","juu","juw","juy","jvd","jvn","jwi","jya","jye","jyy","kaa","kab","kac","kad","kae","kaf","kag","kah","kai","kaj","kak","kam","kao","kap","kaq","kar","kav","kaw","kax","kay","kba","kbb","kbc","kbd","kbe","kbf","kbg","kbh","kbi","kbj","kbk","kbl","kbm","kbn","kbo","kbp","kbq","kbr","kbs","kbt","kbu","kbv","kbw","kbx","kby","kbz","kca","kcb","kcc","kcd","kce","kcf","kcg","kch","kci","kcj","kck","kcl","kcm","kcn","kco","kcp","kcq","kcr","kcs","kct","kcu","kcv","kcw","kcx","kcy","kcz","kda","kdc","kdd","kde","kdf","kdg","kdh","kdi","kdj","kdk","kdl","kdm","kdn","kdo","kdp","kdq","kdr","kdt","kdu","kdv","kdw","kdx","kdy","kdz","kea","keb","kec","ked","kee","kef","keg","keh","kei","kej","kek","kel","kem","ken","keo","kep","keq","ker","kes","ket","keu","kev","kew","kex","key","kez","kfa","kfb","kfc","kfd","kfe","kff","kfg","kfh","kfi","kfj","kfk","kfl","kfm","kfn","kfo","kfp","kfq","kfr","kfs","kft","kfu","kfv","kfw","kfx","kfy","kfz","kga","kgb","kgc","kgd","kge","kgf","kgg","kgh","kgi","kgj","kgk","kgl","kgm","kgn","kgo","kgp","kgq","kgr","kgs","kgt","kgu","kgv","kgw","kgx","kgy","kha","khb","khc","khd","khe","khf","khg","khh","khi","khj","khk","khl","khn","kho","khp","khq","khr","khs","kht","khu","khv","khw","khx","khy","khz","kia","kib","kic","kid","kie","kif","kig","kih","kii","kij","kil","kim","kio","kip","kiq","kis","kit","kiu","kiv","kiw","kix","kiy","kiz","kja","kjb","kjc","kjd","kje","kjf","kjg","kjh","kji","kjj","kjk","kjl","kjm","kjn","kjo","kjp","kjq","kjr","kjs","kjt","kju","kjv","kjx","kjy","kjz","kka","kkb","kkc","kkd","kke","kkf","kkg","kkh","kki","kkj","kkk","kkl","kkm","kkn","kko","kkp","kkq","kkr","kks","kkt","kku","kkv","kkw","kkx","kky","kkz","kla","klb","klc","kld","kle","klf","klg","klh","kli","klj","klk","kll","klm","kln","klo","klp","klq","klr","kls","klt","klu","klv","klw","klx","kly","klz","kma","kmb","kmc","kmd","kme","kmf","kmg","kmh","kmi","kmj","kmk","kml","kmm","kmn","kmo","kmp","kmq","kmr","kms","kmt","kmu","kmv","kmw","kmx","kmy","kmz","kna","knb","knc","knd","kne","knf","kng","kni","knj","knk","knl","knm","knn","kno","knp","knq","knr","kns","knt","knu","knv","knw","knx","kny","knz","koa","koc","kod","koe","kof","kog","koh","koi","koj","kok","kol","koo","kop","koq","kos","kot","kou","kov","kow","kox","koy","koz","kpa","kpb","kpc","kpd","kpe","kpf","kpg","kph","kpi","kpj","kpk","kpl","kpm","kpn","kpo","kpp","kpq","kpr","kps","kpt","kpu","kpv","kpw","kpx","kpy","kpz","kqa","kqb","kqc","kqd","kqe","kqf","kqg","kqh","kqi","kqj","kqk","kql","kqm","kqn","kqo","kqp","kqq","kqr","kqs","kqt","kqu","kqv","kqw","kqx","kqy","kqz","kra","krb","krc","krd","kre","krf","krh","kri","krj","krk","krl","krm","krn","kro","krp","krr","krs","krt","kru","krv","krw","krx","kry","krz","ksa","ksb","ksc","ksd","kse","ksf","ksg","ksh","ksi","ksj","ksk","ksl","ksm","ksn","kso","ksp","ksq","ksr","kss","kst","ksu","ksv","ksw","ksx","ksy","ksz","kta","ktb","ktc","ktd","kte","ktf","ktg","kth","kti","ktj","ktk","ktl","ktm","ktn","kto","ktp","ktq","ktr","kts","ktt","ktu","ktv","ktw","ktx","kty","ktz","kub","kuc","kud","kue","kuf","kug","kuh","kui","kuj","kuk","kul","kum","kun","kuo","kup","kuq","kus","kut","kuu","kuv","kuw","kux","kuy","kuz","kva","kvb","kvc","kvd","kve","kvf","kvg","kvh","kvi","kvj","kvk","kvl","kvm","kvn","kvo","kvp","kvq","kvr","kvs","kvt","kvu","kvv","kvw","kvx","kvy","kvz","kwa","kwb","kwc","kwd","kwe","kwf","kwg","kwh","kwi","kwj","kwk","kwl","kwm","kwn","kwo","kwp","kwq","kwr","kws","kwt","kwu","kwv","kww","kwx","kwy","kwz","kxa","kxb","kxc","kxd","kxe","kxf","kxh","kxi","kxj","kxk","kxl","kxm","kxn","kxo","kxp","kxq","kxr","kxs","kxt","kxu","kxv","kxw","kxx","kxy","kxz","kya","kyb","kyc","kyd","kye","kyf","kyg","kyh","kyi","kyj","kyk","kyl","kym","kyn","kyo","kyp","kyq","kyr","kys","kyt","kyu","kyv","kyw","kyx","kyy","kyz","kza","kzb","kzc","kzd","kze","kzf","kzg","kzh","kzi","kzj","kzk","kzl","kzm","kzn","kzo","kzp","kzq","kzr","kzs","kzt","kzu","kzv","kzw","kzx","kzy","kzz","laa","lab","lac","lad","lae","laf","lag","lah","lai","laj","lak","lal","lam","lan","lap","laq","lar","las","lau","law","lax","lay","laz","lba","lbb","lbc","lbe","lbf","lbg","lbi","lbj","lbk","lbl","lbm","lbn","lbo","lbq","lbr","lbs","lbt","lbu","lbv","lbw","lbx","lby","lbz","lcc","lcd","lce","lcf","lch","lcl","lcm","lcp","lcq","lcs","lda","ldb","ldd","ldg","ldh","ldi","ldj","ldk","ldl","ldm","ldn","ldo","ldp","ldq","lea","leb","lec","led","lee","lef","leg","leh","lei","lej","lek","lel","lem","len","leo","lep","leq","ler","les","let","leu","lev","lew","lex","ley","lez","lfa","lfn","lga","lgb","lgg","lgh","lgi","lgk","lgl","lgm","lgn","lgq","lgr","lgt","lgu","lgz","lha","lhh","lhi","lhl","lhm","lhn","lhp","lhs","lht","lhu","lia","lib","lic","lid","lie","lif","lig","lih","lii","lij","lik","lil","lio","lip","liq","lir","lis","liu","liv","liw","lix","liy","liz","lja","lje","lji","ljl","ljp","ljw","ljx","lka","lkb","lkc","lkd","lke","lkh","lki","lkj","lkl","lkm","lkn","lko","lkr","lks","lkt","lku","lky","lla","llb","llc","lld","lle","llf","llg","llh","lli","llj","llk","lll","llm","lln","llo","llp","llq","lls","llu","llx","lma","lmb","lmc","lmd","lme","lmf","lmg","lmh","lmi","lmj","lmk","lml","lmm","lmn","lmo","lmp","lmq","lmr","lmu","lmv","lmw","lmx","lmy","lmz","lna","lnb","lnd","lng","lnh","lni","lnj","lnl","lnm","lnn","lno","lns","lnu","lnw","lnz","loa","lob","loc","loe","lof","log","loh","loi","loj","lok","lol","lom","lon","loo","lop","loq","lor","los","lot","lou","lov","low","lox","loy","loz","lpa","lpe","lpn","lpo","lpx","lra","lrc","lre","lrg","lri","lrk","lrl","lrm","lrn","lro","lrr","lrt","lrv","lrz","lsa","lsd","lse","lsg","lsh","lsi","lsl","lsm","lso","lsp","lsr","lss","lst","lsy","ltc","ltg","lth","lti","ltn","lto","lts","ltu","lua","luc","lud","lue","luf","lui","luj","luk","lul","lum","lun","luo","lup","luq","lur","lus","lut","luu","luv","luw","luy","luz","lva","lvk","lvs","lvu","lwa","lwe","lwg","lwh","lwl","lwm","lwo","lwt","lwu","lww","lya","lyg","lyn","lzh","lzl","lzn","lzz","maa","mab","mad","mae","maf","mag","mai","maj","mak","mam","man","map","maq","mas","mat","mau","mav","maw","max","maz","mba","mbb","mbc","mbd","mbe","mbf","mbh","mbi","mbj","mbk","mbl","mbm","mbn","mbo","mbp","mbq","mbr","mbs","mbt","mbu","mbv","mbw","mbx","mby","mbz","mca","mcb","mcc","mcd","mce","mcf","mcg","mch","mci","mcj","mck","mcl","mcm","mcn","mco","mcp","mcq","mcr","mcs","mct","mcu","mcv","mcw","mcx","mcy","mcz","mda","mdb","mdc","mdd","mde","mdf","mdg","mdh","mdi","mdj","mdk","mdl","mdm","mdn","mdp","mdq","mdr","mds","mdt","mdu","mdv","mdw","mdx","mdy","mdz","mea","meb","mec","med","mee","mef","meg","meh","mei","mej","mek","mel","mem","men","meo","mep","meq","mer","mes","met","meu","mev","mew","mey","mez","mfa","mfb","mfc","mfd","mfe","mff","mfg","mfh","mfi","mfj","mfk","mfl","mfm","mfn","mfo","mfp","mfq","mfr","mfs","mft","mfu","mfv","mfw","mfx","mfy","mfz","mga","mgb","mgc","mgd","mge","mgf","mgg","mgh","mgi","mgj","mgk","mgl","mgm","mgn","mgo","mgp","mgq","mgr","mgs","mgt","mgu","mgv","mgw","mgx","mgy","mgz","mha","mhb","mhc","mhd","mhe","mhf","mhg","mhh","mhi","mhj","mhk","mhl","mhm","mhn","mho","mhp","mhq","mhr","mhs","mht","mhu","mhw","mhx","mhy","mhz","mia","mib","mic","mid","mie","mif","mig","mih","mii","mij","mik","mil","mim","min","mio","mip","miq","mir","mis","mit","miu","miw","mix","miy","miz","mja","mjb","mjc","mjd","mje","mjg","mjh","mji","mjj","mjk","mjl","mjm","mjn","mjo","mjp","mjq","mjr","mjs","mjt","mju","mjv","mjw","mjx","mjy","mjz","mka","mkb","mkc","mke","mkf","mkg","mkh","mki","mkj","mkk","mkl","mkm","mkn","mko","mkp","mkq","mkr","mks","mkt","mku","mkv","mkw","mkx","mky","mkz","mla","mlb","mlc","mld","mle","mlf","mlh","mli","mlj","mlk","mll","mlm","mln","mlo","mlp","mlq","mlr","mls","mlu","mlv","mlw","mlx","mlz","mma","mmb","mmc","mmd","mme","mmf","mmg","mmh","mmi","mmj","mmk","mml","mmm","mmn","mmo","mmp","mmq","mmr","mmt","mmu","mmv","mmw","mmx","mmy","mmz","mna","mnb","mnc","mnd","mne","mnf","mng","mnh","mni","mnj","mnk","mnl","mnm","mnn","mno","mnp","mnq","mnr","mns","mnt","mnu","mnv","mnw","mnx","mny","mnz","moa","moc","mod","moe","mof","mog","moh","moi","moj","mok","mom","moo","mop","moq","mor","mos","mot","mou","mov","mow","mox","moy","moz","mpa","mpb","mpc","mpd","mpe","mpg","mph","mpi","mpj","mpk","mpl","mpm","mpn","mpo","mpp","mpq","mpr","mps","mpt","mpu","mpv","mpw","mpx","mpy","mpz","mqa","mqb","mqc","mqe","mqf","mqg","mqh","mqi","mqj","mqk","mql","mqm","mqn","mqo","mqp","mqq","mqr","mqs","mqt","mqu","mqv","mqw","mqx","mqy","mqz","mra","mrb","mrc","mrd","mre","mrf","mrg","mrh","mrj","mrk","mrl","mrm","mrn","mro","mrp","mrq","mrr","mrs","mrt","mru","mrv","mrw","mrx","mry","mrz","msb","msc","msd","mse","msf","msg","msh","msi","msj","msk","msl","msm","msn","mso","msp","msq","msr","mss","mst","msu","msv","msw","msx","msy","msz","mta","mtb","mtc","mtd","mte","mtf","mtg","mth","mti","mtj","mtk","mtl","mtm","mtn","mto","mtp","mtq","mtr","mts","mtt","mtu","mtv","mtw","mtx","mty","mua","mub","muc","mud","mue","mug","muh","mui","muj","muk","mul","mum","mun","muo","mup","muq","mur","mus","mut","muu","muv","mux","muy","muz","mva","mvb","mvd","mve","mvf","mvg","mvh","mvi","mvk","mvl","mvm","mvn","mvo","mvp","mvq","mvr","mvs","mvt","mvu","mvv","mvw","mvx","mvy","mvz","mwa","mwb","mwc","mwd","mwe","mwf","mwg","mwh","mwi","mwj","mwk","mwl","mwm","mwn","mwo","mwp","mwq","mwr","mws","mwt","mwu","mwv","mww","mwx","mwy","mwz","mxa","mxb","mxc","mxd","mxe","mxf","mxg","mxh","mxi","mxj","mxk","mxl","mxm","mxn","mxo","mxp","mxq","mxr","mxs","mxt","mxu","mxv","mxw","mxx","mxy","mxz","myb","myc","myd","mye","myf","myg","myh","myi","myj","myk","myl","mym","myn","myo","myp","myq","myr","mys","myt","myu","myv","myw","myx","myy","myz","mza","mzb","mzc","mzd","mze","mzg","mzh","mzi","mzj","mzk","mzl","mzm","mzn","mzo","mzp","mzq","mzr","mzs","mzt","mzu","mzv","mzw","mzx","mzy","mzz","naa","nab","nac","nad","nae","naf","nag","nah","nai","naj","nak","nal","nam","nan","nao","nap","naq","nar","nas","nat","naw","nax","nay","naz","nba","nbb","nbc","nbd","nbe","nbf","nbg","nbh","nbi","nbj","nbk","nbm","nbn","nbo","nbp","nbq","nbr","nbs","nbt","nbu","nbv","nbw","nbx","nby","nca","ncb","ncc","ncd","nce","ncf","ncg","nch","nci","ncj","nck","ncl","ncm","ncn","nco","ncp","ncq","ncr","ncs","nct","ncu","ncx","ncz","nda","ndb","ndc","ndd","ndf","ndg","ndh","ndi","ndj","ndk","ndl","ndm","ndn","ndp","ndq","ndr","nds","ndt","ndu","ndv","ndw","ndx","ndy","ndz","nea","neb","nec","ned","nee","nef","neg","neh","nei","nej","nek","nem","nen","neo","neq","ner","nes","net","neu","nev","new","nex","ney","nez","nfa","nfd","nfl","nfr","nfu","nga","ngb","ngc","ngd","nge","ngf","ngg","ngh","ngi","ngj","ngk","ngl","ngm","ngn","ngo","ngp","ngq","ngr","ngs","ngt","ngu","ngv","ngw","ngx","ngy","ngz","nha","nhb","nhc","nhd","nhe","nhf","nhg","nhh","nhi","nhk","nhm","nhn","nho","nhp","nhq","nhr","nht","nhu","nhv","nhw","nhx","nhy","nhz","nia","nib","nic","nid","nie","nif","nig","nih","nii","nij","nik","nil","nim","nin","nio","niq","nir","nis","nit","niu","niv","niw","nix","niy","niz","nja","njb","njd","njh","nji","njj","njl","njm","njn","njo","njr","njs","njt","nju","njx","njy","njz","nka","nkb","nkc","nkd","nke","nkf","nkg","nkh","nki","nkj","nkk","nkm","nkn","nko","nkp","nkq","nkr","nks","nkt","nku","nkv","nkw","nkx","nkz","nla","nlc","nle","nlg","nli","nlj","nlk","nll","nln","nlo","nlq","nlr","nlu","nlv","nlw","nlx","nly","nlz","nma","nmb","nmc","nmd","nme","nmf","nmg","nmh","nmi","nmj","nmk","nml","nmm","nmn","nmo","nmp","nmq","nmr","nms","nmt","nmu","nmv","nmw","nmx","nmy","nmz","nna","nnb","nnc","nnd","nne","nnf","nng","nnh","nni","nnj","nnk","nnl","nnm","nnn","nnp","nnq","nnr","nns","nnt","nnu","nnv","nnw","nnx","nny","nnz","noa","noc","nod","noe","nof","nog","noh","noi","noj","nok","nol","nom","non","noo","nop","noq","nos","not","nou","nov","now","noy","noz","npa","npb","npg","nph","npi","npl","npn","npo","nps","npu","npx","npy","nqg","nqk","nql","nqm","nqn","nqo","nqq","nqy","nra","nrb","nrc","nre","nrf","nrg","nri","nrk","nrl","nrm","nrn","nrp","nrr","nrt","nru","nrx","nrz","nsa","nsc","nsd","nse","nsf","nsg","nsh","nsi","nsk","nsl","nsm","nsn","nso","nsp","nsq","nsr","nss","nst","nsu","nsv","nsw","nsx","nsy","nsz","ntd","nte","ntg","nti","ntj","ntk","ntm","nto","ntp","ntr","nts","ntu","ntw","ntx","nty","ntz","nua","nub","nuc","nud","nue","nuf","nug","nuh","nui","nuj","nuk","nul","num","nun","nuo","nup","nuq","nur","nus","nut","nuu","nuv","nuw","nux","nuy","nuz","nvh","nvm","nvo","nwa","nwb","nwc","nwe","nwg","nwi","nwm","nwo","nwr","nwx","nwy","nxa","nxd","nxe","nxg","nxi","nxk","nxl","nxm","nxn","nxo","nxq","nxr","nxu","nxx","nyb","nyc","nyd","nye","nyf","nyg","nyh","nyi","nyj","nyk","nyl","nym","nyn","nyo","nyp","nyq","nyr","nys","nyt","nyu","nyv","nyw","nyx","nyy","nza","nzb","nzi","nzk","nzm","nzs","nzu","nzy","nzz","oaa","oac","oar","oav","obi","obk","obl","obm","obo","obr","obt","obu","oca","och","oco","ocu","oda","odk","odt","odu","ofo","ofs","ofu","ogb","ogc","oge","ogg","ogo","ogu","oht","ohu","oia","oin","ojb","ojc","ojg","ojp","ojs","ojv","ojw","oka","okb","okd","oke","okg","okh","oki","okj","okk","okl","okm","okn","oko","okr","oks","oku","okv","okx","ola","old","ole","olk","olm","olo","olr","olt","olu","oma","omb","omc","ome","omg","omi","omk","oml","omn","omo","omp","omq","omr","omt","omu","omv","omw","omx","ona","onb","one","ong","oni","onj","onk","onn","ono","onp","onr","ons","ont","onu","onw","onx","ood","oog","oon","oor","oos","opa","opk","opm","opo","opt","opy","ora","orc","ore","org","orh","orn","oro","orr","ors","ort","oru","orv","orw","orx","ory","orz","osa","osc","osi","oso","osp","ost","osu","osx","ota","otb","otd","ote","oti","otk","otl","otm","otn","oto","otq","otr","ots","ott","otu","otw","otx","oty","otz","oua","oub","oue","oui","oum","oun","ovd","owi","owl","oyb","oyd","oym","oyy","ozm","paa","pab","pac","pad","pae","paf","pag","pah","pai","pak","pal","pam","pao","pap","paq","par","pas","pat","pau","pav","paw","pax","pay","paz","pbb","pbc","pbe","pbf","pbg","pbh","pbi","pbl","pbn","pbo","pbp","pbr","pbs","pbt","pbu","pbv","pby","pbz","pca","pcb","pcc","pcd","pce","pcf","pcg","pch","pci","pcj","pck","pcl","pcm","pcn","pcp","pcr","pcw","pda","pdc","pdi","pdn","pdo","pdt","pdu","pea","peb","ped","pee","pef","peg","peh","pei","pej","pek","pel","pem","peo","pep","peq","pes","pev","pex","pey","pez","pfa","pfe","pfl","pga","pgd","pgg","pgi","pgk","pgl","pgn","pgs","pgu","pgy","pgz","pha","phd","phg","phh","phi","phk","phl","phm","phn","pho","phq","phr","pht","phu","phv","phw","pia","pib","pic","pid","pie","pif","pig","pih","pii","pij","pil","pim","pin","pio","pip","pir","pis","pit","piu","piv","piw","pix","piy","piz","pjt","pka","pkb","pkc","pkg","pkh","pkn","pko","pkp","pkr","pks","pkt","pku","pla","plb","plc","pld","ple","plf","plg","plh","plj","plk","pll","pln","plo","plp","plq","plr","pls","plt","plu","plv","plw","ply","plz","pma","pmb","pmc","pmd","pme","pmf","pmh","pmi","pmj","pmk","pml","pmm","pmn","pmo","pmq","pmr","pms","pmt","pmu","pmw","pmx","pmy","pmz","pna","pnb","pnc","pne","png","pnh","pni","pnj","pnk","pnl","pnm","pnn","pno","pnp","pnq","pnr","pns","pnt","pnu","pnv","pnw","pnx","pny","pnz","poc","pod","poe","pof","pog","poh","poi","pok","pom","pon","poo","pop","poq","pos","pot","pov","pow","pox","poy","poz","ppa","ppe","ppi","ppk","ppl","ppm","ppn","ppo","ppp","ppq","ppr","pps","ppt","ppu","pqa","pqe","pqm","pqw","pra","prb","prc","prd","pre","prf","prg","prh","pri","prk","prl","prm","prn","pro","prp","prq","prr","prs","prt","pru","prw","prx","pry","prz","psa","psc","psd","pse","psg","psh","psi","psl","psm","psn","pso","psp","psq","psr","pss","pst","psu","psw","psy","pta","pth","pti","ptn","pto","ptp","ptq","ptr","ptt","ptu","ptv","ptw","pty","pua","pub","puc","pud","pue","puf","pug","pui","puj","puk","pum","puo","pup","puq","pur","put","puu","puw","pux","puy","puz","pwa","pwb","pwg","pwi","pwm","pwn","pwo","pwr","pww","pxm","pye","pym","pyn","pys","pyu","pyx","pyy","pzn","qaa..qtz","qua","qub","quc","qud","quf","qug","quh","qui","quk","qul","qum","qun","qup","quq","qur","qus","quv","quw","qux","quy","quz","qva","qvc","qve","qvh","qvi","qvj","qvl","qvm","qvn","qvo","qvp","qvs","qvw","qvy","qvz","qwa","qwc","qwe","qwh","qwm","qws","qwt","qxa","qxc","qxh","qxl","qxn","qxo","qxp","qxq","qxr","qxs","qxt","qxu","qxw","qya","qyp","raa","rab","rac","rad","raf","rag","rah","rai","raj","rak","ral","ram","ran","rao","rap","raq","rar","ras","rat","rau","rav","raw","rax","ray","raz","rbb","rbk","rbl","rbp","rcf","rdb","rea","reb","ree","reg","rei","rej","rel","rem","ren","rer","res","ret","rey","rga","rge","rgk","rgn","rgr","rgs","rgu","rhg","rhp","ria","rie","rif","ril","rim","rin","rir","rit","riu","rjg","rji","rjs","rka","rkb","rkh","rki","rkm","rkt","rkw","rma","rmb","rmc","rmd","rme","rmf","rmg","rmh","rmi","rmk","rml","rmm","rmn","rmo","rmp","rmq","rmr","rms","rmt","rmu","rmv","rmw","rmx","rmy","rmz","rna","rnd","rng","rnl","rnn","rnp","rnr","rnw","roa","rob","roc","rod","roe","rof","rog","rol","rom","roo","rop","ror","rou","row","rpn","rpt","rri","rro","rrt","rsb","rsi","rsl","rsm","rtc","rth","rtm","rts","rtw","rub","ruc","rue","ruf","rug","ruh","rui","ruk","ruo","rup","ruq","rut","ruu","ruy","ruz","rwa","rwk","rwm","rwo","rwr","rxd","rxw","ryn","rys","ryu","rzh","saa","sab","sac","sad","sae","saf","sah","sai","saj","sak","sal","sam","sao","sap","saq","sar","sas","sat","sau","sav","saw","sax","say","saz","sba","sbb","sbc","sbd","sbe","sbf","sbg","sbh","sbi","sbj","sbk","sbl","sbm","sbn","sbo","sbp","sbq","sbr","sbs","sbt","sbu","sbv","sbw","sbx","sby","sbz","sca","scb","sce","scf","scg","sch","sci","sck","scl","scn","sco","scp","scq","scs","sct","scu","scv","scw","scx","sda","sdb","sdc","sde","sdf","sdg","sdh","sdj","sdk","sdl","sdm","sdn","sdo","sdp","sdr","sds","sdt","sdu","sdv","sdx","sdz","sea","seb","sec","sed","see","sef","seg","seh","sei","sej","sek","sel","sem","sen","seo","sep","seq","ser","ses","set","seu","sev","sew","sey","sez","sfb","sfe","sfm","sfs","sfw","sga","sgb","sgc","sgd","sge","sgg","sgh","sgi","sgj","sgk","sgl","sgm","sgn","sgo","sgp","sgr","sgs","sgt","sgu","sgw","sgx","sgy","sgz","sha","shb","shc","shd","she","shg","shh","shi","shj","shk","shl","shm","shn","sho","shp","shq","shr","shs","sht","shu","shv","shw","shx","shy","shz","sia","sib","sid","sie","sif","sig","sih","sii","sij","sik","sil","sim","sio","sip","siq","sir","sis","sit","siu","siv","siw","six","siy","siz","sja","sjb","sjd","sje","sjg","sjk","sjl","sjm","sjn","sjo","sjp","sjr","sjs","sjt","sju","sjw","ska","skb","skc","skd","ske","skf","skg","skh","ski","skj","skk","skm","skn","sko","skp","skq","skr","sks","skt","sku","skv","skw","skx","sky","skz","sla","slc","sld","sle","slf","slg","slh","sli","slj","sll","slm","sln","slp","slq","slr","sls","slt","slu","slw","slx","sly","slz","sma","smb","smc","smd","smf","smg","smh","smi","smj","smk","sml","smm","smn","smp","smq","smr","sms","smt","smu","smv","smw","smx","smy","smz","snb","snc","sne","snf","sng","snh","sni","snj","snk","snl","snm","snn","sno","snp","snq","snr","sns","snu","snv","snw","snx","sny","snz","soa","sob","soc","sod","soe","sog","soh","soi","soj","sok","sol","son","soo","sop","soq","sor","sos","sou","sov","sow","sox","soy","soz","spb","spc","spd","spe","spg","spi","spk","spl","spm","spn","spo","spp","spq","spr","sps","spt","spu","spv","spx","spy","sqa","sqh","sqj","sqk","sqm","sqn","sqo","sqq","sqr","sqs","sqt","squ","sra","srb","src","sre","srf","srg","srh","sri","srk","srl","srm","srn","sro","srq","srr","srs","srt","sru","srv","srw","srx","sry","srz","ssa","ssb","ssc","ssd","sse","ssf","ssg","ssh","ssi","ssj","ssk","ssl","ssm","ssn","sso","ssp","ssq","ssr","sss","sst","ssu","ssv","ssx","ssy","ssz","sta","stb","std","ste","stf","stg","sth","sti","stj","stk","stl","stm","stn","sto","stp","stq","str","sts","stt","stu","stv","stw","sty","sua","sub","suc","sue","sug","sui","suj","suk","sul","sum","suq","sur","sus","sut","suv","suw","sux","suy","suz","sva","svb","svc","sve","svk","svm","svr","svs","svx","swb","swc","swf","swg","swh","swi","swj","swk","swl","swm","swn","swo","swp","swq","swr","sws","swt","swu","swv","sww","swx","swy","sxb","sxc","sxe","sxg","sxk","sxl","sxm","sxn","sxo","sxr","sxs","sxu","sxw","sya","syb","syc","syd","syi","syk","syl","sym","syn","syo","syr","sys","syw","syx","syy","sza","szb","szc","szd","sze","szg","szl","szn","szp","szs","szv","szw","taa","tab","tac","tad","tae","taf","tag","tai","taj","tak","tal","tan","tao","tap","taq","tar","tas","tau","tav","taw","tax","tay","taz","tba","tbb","tbc","tbd","tbe","tbf","tbg","tbh","tbi","tbj","tbk","tbl","tbm","tbn","tbo","tbp","tbq","tbr","tbs","tbt","tbu","tbv","tbw","tbx","tby","tbz","tca","tcb","tcc","tcd","tce","tcf","tcg","tch","tci","tck","tcl","tcm","tcn","tco","tcp","tcq","tcs","tct","tcu","tcw","tcx","tcy","tcz","tda","tdb","tdc","tdd","tde","tdf","tdg","tdh","tdi","tdj","tdk","tdl","tdm","tdn","tdo","tdq","tdr","tds","tdt","tdu","tdv","tdx","tdy","tea","teb","tec","ted","tee","tef","teg","teh","tei","tek","tem","ten","teo","tep","teq","ter","tes","tet","teu","tev","tew","tex","tey","tfi","tfn","tfo","tfr","tft","tga","tgb","tgc","tgd","tge","tgf","tgg","tgh","tgi","tgj","tgn","tgo","tgp","tgq","tgr","tgs","tgt","tgu","tgv","tgw","tgx","tgy","tgz","thc","thd","the","thf","thh","thi","thk","thl","thm","thn","thp","thq","thr","ths","tht","thu","thv","thw","thx","thy","thz","tia","tic","tid","tie","tif","tig","tih","tii","tij","tik","til","tim","tin","tio","tip","tiq","tis","tit","tiu","tiv","tiw","tix","tiy","tiz","tja","tjg","tji","tjl","tjm","tjn","tjo","tjs","tju","tjw","tka","tkb","tkd","tke","tkf","tkg","tkk","tkl","tkm","tkn","tkp","tkq","tkr","tks","tkt","tku","tkv","tkw","tkx","tkz","tla","tlb","tlc","tld","tlf","tlg","tlh","tli","tlj","tlk","tll","tlm","tln","tlo","tlp","tlq","tlr","tls","tlt","tlu","tlv","tlw","tlx","tly","tma","tmb","tmc","tmd","tme","tmf","tmg","tmh","tmi","tmj","tmk","tml","tmm","tmn","tmo","tmp","tmq","tmr","tms","tmt","tmu","tmv","tmw","tmy","tmz","tna","tnb","tnc","tnd","tne","tnf","tng","tnh","tni","tnk","tnl","tnm","tnn","tno","tnp","tnq","tnr","tns","tnt","tnu","tnv","tnw","tnx","tny","tnz","tob","toc","tod","toe","tof","tog","toh","toi","toj","tol","tom","too","top","toq","tor","tos","tou","tov","tow","tox","toy","toz","tpa","tpc","tpe","tpf","tpg","tpi","tpj","tpk","tpl","tpm","tpn","tpo","tpp","tpq","tpr","tpt","tpu","tpv","tpw","tpx","tpy","tpz","tqb","tql","tqm","tqn","tqo","tqp","tqq","tqr","tqt","tqu","tqw","tra","trb","trc","trd","tre","trf","trg","trh","tri","trj","trk","trl","trm","trn","tro","trp","trq","trr","trs","trt","tru","trv","trw","trx","try","trz","tsa","tsb","tsc","tsd","tse","tsf","tsg","tsh","tsi","tsj","tsk","tsl","tsm","tsp","tsq","tsr","tss","tst","tsu","tsv","tsw","tsx","tsy","tsz","tta","ttb","ttc","ttd","tte","ttf","ttg","tth","tti","ttj","ttk","ttl","ttm","ttn","tto","ttp","ttq","ttr","tts","ttt","ttu","ttv","ttw","tty","ttz","tua","tub","tuc","tud","tue","tuf","tug","tuh","tui","tuj","tul","tum","tun","tuo","tup","tuq","tus","tut","tuu","tuv","tuw","tux","tuy","tuz","tva","tvd","tve","tvk","tvl","tvm","tvn","tvo","tvs","tvt","tvu","tvw","tvy","twa","twb","twc","twd","twe","twf","twg","twh","twl","twm","twn","two","twp","twq","twr","twt","twu","tww","twx","twy","txa","txb","txc","txe","txg","txh","txi","txj","txm","txn","txo","txq","txr","txs","txt","txu","txx","txy","tya","tye","tyh","tyi","tyj","tyl","tyn","typ","tyr","tys","tyt","tyu","tyv","tyx","tyz","tza","tzh","tzj","tzl","tzm","tzn","tzo","tzx","uam","uan","uar","uba","ubi","ubl","ubr","ubu","uby","uda","ude","udg","udi","udj","udl","udm","udu","ues","ufi","uga","ugb","uge","ugn","ugo","ugy","uha","uhn","uis","uiv","uji","uka","ukg","ukh","ukk","ukl","ukp","ukq","uks","uku","ukw","uky","ula","ulb","ulc","ule","ulf","uli","ulk","ull","ulm","uln","ulu","ulw","uma","umb","umc","umd","umg","umi","umm","umn","umo","ump","umr","ums","umu","una","und","une","ung","unk","unm","unn","unp","unr","unu","unx","unz","uok","upi","upv","ura","urb","urc","ure","urf","urg","urh","uri","urj","urk","url","urm","urn","uro","urp","urr","urt","uru","urv","urw","urx","ury","urz","usa","ush","usi","usk","usp","usu","uta","ute","utp","utr","utu","uum","uun","uur","uuu","uve","uvh","uvl","uwa","uya","uzn","uzs","vaa","vae","vaf","vag","vah","vai","vaj","val","vam","van","vao","vap","var","vas","vau","vav","vay","vbb","vbk","vec","ved","vel","vem","veo","vep","ver","vgr","vgt","vic","vid","vif","vig","vil","vin","vis","vit","viv","vka","vki","vkj","vkk","vkl","vkm","vko","vkp","vkt","vku","vlp","vls","vma","vmb","vmc","vmd","vme","vmf","vmg","vmh","vmi","vmj","vmk","vml","vmm","vmp","vmq","vmr","vms","vmu","vmv","vmw","vmx","vmy","vmz","vnk","vnm","vnp","vor","vot","vra","vro","vrs","vrt","vsi","vsl","vsv","vto","vum","vun","vut","vwa","waa","wab","wac","wad","wae","waf","wag","wah","wai","waj","wak","wal","wam","wan","wao","wap","waq","war","was","wat","wau","wav","waw","wax","way","waz","wba","wbb","wbe","wbf","wbh","wbi","wbj","wbk","wbl","wbm","wbp","wbq","wbr","wbs","wbt","wbv","wbw","wca","wci","wdd","wdg","wdj","wdk","wdu","wdy","wea","wec","wed","weg","weh","wei","wem","wen","weo","wep","wer","wes","wet","weu","wew","wfg","wga","wgb","wgg","wgi","wgo","wgu","wgw","wgy","wha","whg","whk","whu","wib","wic","wie","wif","wig","wih","wii","wij","wik","wil","wim","win","wir","wit","wiu","wiv","wiw","wiy","wja","wji","wka","wkb","wkd","wkl","wku","wkw","wky","wla","wlc","wle","wlg","wli","wlk","wll","wlm","wlo","wlr","wls","wlu","wlv","wlw","wlx","wly","wma","wmb","wmc","wmd","wme","wmh","wmi","wmm","wmn","wmo","wms","wmt","wmw","wmx","wnb","wnc","wnd","wne","wng","wni","wnk","wnm","wnn","wno","wnp","wnu","wnw","wny","woa","wob","woc","wod","woe","wof","wog","woi","wok","wom","won","woo","wor","wos","wow","woy","wpc","wra","wrb","wrd","wrg","wrh","wri","wrk","wrl","wrm","wrn","wro","wrp","wrr","wrs","wru","wrv","wrw","wrx","wry","wrz","wsa","wsg","wsi","wsk","wsr","wss","wsu","wsv","wtf","wth","wti","wtk","wtm","wtw","wua","wub","wud","wuh","wul","wum","wun","wur","wut","wuu","wuv","wux","wuy","wwa","wwb","wwo","wwr","www","wxa","wxw","wya","wyb","wyi","wym","wyr","wyy","xaa","xab","xac","xad","xae","xag","xai","xaj","xak","xal","xam","xan","xao","xap","xaq","xar","xas","xat","xau","xav","xaw","xay","xba","xbb","xbc","xbd","xbe","xbg","xbi","xbj","xbm","xbn","xbo","xbp","xbr","xbw","xbx","xby","xcb","xcc","xce","xcg","xch","xcl","xcm","xcn","xco","xcr","xct","xcu","xcv","xcw","xcy","xda","xdc","xdk","xdm","xdo","xdy","xeb","xed","xeg","xel","xem","xep","xer","xes","xet","xeu","xfa","xga","xgb","xgd","xgf","xgg","xgi","xgl","xgm","xgn","xgr","xgu","xgw","xha","xhc","xhd","xhe","xhr","xht","xhu","xhv","xia","xib","xii","xil","xin","xip","xir","xis","xiv","xiy","xjb","xjt","xka","xkb","xkc","xkd","xke","xkf","xkg","xkh","xki","xkj","xkk","xkl","xkn","xko","xkp","xkq","xkr","xks","xkt","xku","xkv","xkw","xkx","xky","xkz","xla","xlb","xlc","xld","xle","xlg","xli","xln","xlo","xlp","xls","xlu","xly","xma","xmb","xmc","xmd","xme","xmf","xmg","xmh","xmj","xmk","xml","xmm","xmn","xmo","xmp","xmq","xmr","xms","xmt","xmu","xmv","xmw","xmx","xmy","xmz","xna","xnb","xnd","xng","xnh","xni","xnk","xnn","xno","xnr","xns","xnt","xnu","xny","xnz","xoc","xod","xog","xoi","xok","xom","xon","xoo","xop","xor","xow","xpa","xpc","xpe","xpg","xpi","xpj","xpk","xpm","xpn","xpo","xpp","xpq","xpr","xps","xpt","xpu","xpy","xqa","xqt","xra","xrb","xrd","xre","xrg","xri","xrm","xrn","xrq","xrr","xrt","xru","xrw","xsa","xsb","xsc","xsd","xse","xsh","xsi","xsj","xsl","xsm","xsn","xso","xsp","xsq","xsr","xss","xsu","xsv","xsy","xta","xtb","xtc","xtd","xte","xtg","xth","xti","xtj","xtl","xtm","xtn","xto","xtp","xtq","xtr","xts","xtt","xtu","xtv","xtw","xty","xtz","xua","xub","xud","xug","xuj","xul","xum","xun","xuo","xup","xur","xut","xuu","xve","xvi","xvn","xvo","xvs","xwa","xwc","xwd","xwe","xwg","xwj","xwk","xwl","xwo","xwr","xwt","xww","xxb","xxk","xxm","xxr","xxt","xya","xyb","xyj","xyk","xyl","xyt","xyy","xzh","xzm","xzp","yaa","yab","yac","yad","yae","yaf","yag","yah","yai","yaj","yak","yal","yam","yan","yao","yap","yaq","yar","yas","yat","yau","yav","yaw","yax","yay","yaz","yba","ybb","ybd","ybe","ybh","ybi","ybj","ybk","ybl","ybm","ybn","ybo","ybx","yby","ych","ycl","ycn","ycp","yda","ydd","yde","ydg","ydk","yds","yea","yec","yee","yei","yej","yel","yen","yer","yes","yet","yeu","yev","yey","yga","ygi","ygl","ygm","ygp","ygr","ygs","ygu","ygw","yha","yhd","yhl","yhs","yia","yif","yig","yih","yii","yij","yik","yil","yim","yin","yip","yiq","yir","yis","yit","yiu","yiv","yix","yiy","yiz","yka","ykg","yki","ykk","ykl","ykm","ykn","yko","ykr","ykt","yku","yky","yla","ylb","yle","ylg","yli","yll","ylm","yln","ylo","ylr","ylu","yly","yma","ymb","ymc","ymd","yme","ymg","ymh","ymi","ymk","yml","ymm","ymn","ymo","ymp","ymq","ymr","yms","ymt","ymx","ymz","yna","ynd","yne","yng","ynh","ynk","ynl","ynn","yno","ynq","yns","ynu","yob","yog","yoi","yok","yol","yom","yon","yos","yot","yox","yoy","ypa","ypb","ypg","yph","ypk","ypm","ypn","ypo","ypp","ypz","yra","yrb","yre","yri","yrk","yrl","yrm","yrn","yro","yrs","yrw","yry","ysc","ysd","ysg","ysl","ysn","yso","ysp","ysr","yss","ysy","yta","ytl","ytp","ytw","yty","yua","yub","yuc","yud","yue","yuf","yug","yui","yuj","yuk","yul","yum","yun","yup","yuq","yur","yut","yuu","yuw","yux","yuy","yuz","yva","yvt","ywa","ywg","ywl","ywn","ywq","ywr","ywt","ywu","yww","yxa","yxg","yxl","yxm","yxu","yxy","yyr","yyu","yyz","yzg","yzk","zaa","zab","zac","zad","zae","zaf","zag","zah","zai","zaj","zak","zal","zam","zao","zap","zaq","zar","zas","zat","zau","zav","zaw","zax","zay","zaz","zbc","zbe","zbl","zbt","zbw","zca","zch","zdj","zea","zeg","zeh","zen","zga","zgb","zgh","zgm","zgn","zgr","zhb","zhd","zhi","zhn","zhw","zhx","zia","zib","zik","zil","zim","zin","zir","ziw","ziz","zka","zkb","zkd","zkg","zkh","zkk","zkn","zko","zkp","zkr","zkt","zku","zkv","zkz","zle","zlj","zlm","zln","zlq","zls","zlw","zma","zmb","zmc","zmd","zme","zmf","zmg","zmh","zmi","zmj","zmk","zml","zmm","zmn","zmo","zmp","zmq","zmr","zms","zmt","zmu","zmv","zmw","zmx","zmy","zmz","zna","znd","zne","zng","znk","zns","zoc","zoh","zom","zoo","zoq","zor","zos","zpa","zpb","zpc","zpd","zpe","zpf","zpg","zph","zpi","zpj","zpk","zpl","zpm","zpn","zpo","zpp","zpq","zpr","zps","zpt","zpu","zpv","zpw","zpx","zpy","zpz","zqe","zra","zrg","zrn","zro","zrp","zrs","zsa","zsk","zsl","zsm","zsr","zsu","zte","ztg","ztl","ztm","ztn","ztp","ztq","zts","ztt","ztu","ztx","zty","zua","zuh","zum","zun","zuy","zwa","zxx","zyb","zyg","zyj","zyn","zyp","zza","zzj"]
+;return axe.utils.validLangs=function(){"use strict";return L},commons}()})}("object"==typeof window?window:this);
\ No newline at end of file
diff --git a/third_party/blink/public/mojom/leak_detector/leak_detector.mojom b/third_party/blink/public/mojom/leak_detector/leak_detector.mojom
index bdfb0082..1120c12b 100644
--- a/third_party/blink/public/mojom/leak_detector/leak_detector.mojom
+++ b/third_party/blink/public/mojom/leak_detector/leak_detector.mojom
@@ -12,6 +12,7 @@
   uint32 number_of_live_layout_objects;
   uint32 number_of_live_resources;
   uint32 number_of_live_context_lifecycle_state_observers;
+  uint32 number_of_live_script_promises;
   uint32 number_of_live_frames;
   uint32 number_of_live_v8_per_context_data;
   uint32 number_of_worker_global_scopes;
diff --git a/third_party/blink/renderer/bindings/core/v8/iterable.h b/third_party/blink/renderer/bindings/core/v8/iterable.h
index 109a120..0d89cfa 100644
--- a/third_party/blink/renderer/bindings/core/v8/iterable.h
+++ b/third_party/blink/renderer/bindings/core/v8/iterable.h
@@ -120,14 +120,14 @@
   };
   struct EntrySelector {
     STATIC_ONLY(EntrySelector);
-    static HeapVector<ScriptValue, 2> Select(ScriptState* script_state,
-                                             const KeyType& key,
-                                             const ValueType& value) {
+    static Vector<ScriptValue, 2> Select(ScriptState* script_state,
+                                         const KeyType& key,
+                                         const ValueType& value) {
       v8::Local<v8::Object> creation_context =
           script_state->GetContext()->Global();
       v8::Isolate* isolate = script_state->GetIsolate();
 
-      HeapVector<ScriptValue, 2> entry;
+      Vector<ScriptValue, 2> entry;
       entry.push_back(
           ScriptValue(script_state, ToV8(key, creation_context, isolate)));
       entry.push_back(
diff --git a/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc b/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc
index 8e525d16..6d8b70d 100644
--- a/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc
+++ b/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc
@@ -88,7 +88,7 @@
   //   If an exception gets thrown by the callback, end these steps and allow
   //   the exception to propagate. (It will propagate to the DOM event dispatch
   //   logic, which will then report the exception.)
-  HeapVector<ScriptValue> arguments;
+  Vector<ScriptValue> arguments;
   ScriptState* script_state_of_listener =
       event_handler_->CallbackRelevantScriptState();
 
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc
index 7ea955c..4004a72 100644
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc
@@ -259,7 +259,7 @@
         EvaluateScriptForArray(scope, "['Vini, vidi, vici.', 65535, 0.125]");
 
     NonThrowableExceptionState exception_state;
-    HeapVector<ScriptValue> script_value_vector =
+    Vector<ScriptValue> script_value_vector =
         NativeValueTraits<IDLSequence<ScriptValue>>::NativeValue(
             scope.GetIsolate(), v8_array, exception_state);
     EXPECT_EQ(3U, script_value_vector.size());
diff --git a/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc b/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc
index 843cb14..cb096bd2 100644
--- a/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc
+++ b/third_party/blink/renderer/bindings/core/v8/scheduled_action.cc
@@ -51,11 +51,10 @@
 
 namespace blink {
 
-ScheduledAction* ScheduledAction::Create(
-    ScriptState* script_state,
-    ExecutionContext* target,
-    V8Function* handler,
-    const HeapVector<ScriptValue>& arguments) {
+ScheduledAction* ScheduledAction::Create(ScriptState* script_state,
+                                         ExecutionContext* target,
+                                         V8Function* handler,
+                                         const Vector<ScriptValue>& arguments) {
   if (!script_state->World().IsWorkerWorld()) {
     if (!BindingSecurity::ShouldAllowAccessToFrame(
             EnteredDOMWindow(script_state->GetIsolate()),
@@ -86,7 +85,7 @@
 
 ScheduledAction::ScheduledAction(ScriptState* script_state,
                                  V8Function* function,
-                                 const HeapVector<ScriptValue>& arguments)
+                                 const Vector<ScriptValue>& arguments)
     : script_state_(
           MakeGarbageCollected<ScriptStateProtectingContext>(script_state)),
       function_(function),
@@ -158,7 +157,6 @@
 void ScheduledAction::Trace(blink::Visitor* visitor) {
   visitor->Trace(script_state_);
   visitor->Trace(function_);
-  visitor->Trace(arguments_);
 }
 
 void ScheduledAction::Execute(LocalFrame* frame) {
diff --git a/third_party/blink/renderer/bindings/core/v8/scheduled_action.h b/third_party/blink/renderer/bindings/core/v8/scheduled_action.h
index e494d92..5c6de14 100644
--- a/third_party/blink/renderer/bindings/core/v8/scheduled_action.h
+++ b/third_party/blink/renderer/bindings/core/v8/scheduled_action.h
@@ -55,14 +55,14 @@
   static ScheduledAction* Create(ScriptState*,
                                  ExecutionContext* target,
                                  V8Function* handler,
-                                 const HeapVector<ScriptValue>& arguments);
+                                 const Vector<ScriptValue>& arguments);
   static ScheduledAction* Create(ScriptState*,
                                  ExecutionContext* target,
                                  const String& handler);
 
   explicit ScheduledAction(ScriptState*,
                            V8Function* handler,
-                           const HeapVector<ScriptValue>& arguments);
+                           const Vector<ScriptValue>& arguments);
   explicit ScheduledAction(ScriptState*, const String& handler);
   // Creates an empty ScheduledAction.
   explicit ScheduledAction(ScriptState*);
@@ -83,7 +83,7 @@
 
   Member<ScriptStateProtectingContext> script_state_;
   Member<V8Function> function_;
-  HeapVector<ScriptValue> arguments_;
+  Vector<ScriptValue> arguments_;
   String code_;
 };
 
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise.cc b/third_party/blink/renderer/bindings/core/v8/script_promise.cc
index b6b6929e..b031ff084 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_promise.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_promise.cc
@@ -36,6 +36,7 @@
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h"
+#include "third_party/blink/renderer/platform/instrumentation/instance_counters.h"
 #include "v8/include/v8.h"
 
 namespace blink {
@@ -46,7 +47,7 @@
     : public GarbageCollectedFinalized<PromiseAllHandler> {
  public:
   static ScriptPromise All(ScriptState* script_state,
-                           const HeapVector<ScriptPromise>& promises) {
+                           const Vector<ScriptPromise>& promises) {
     if (promises.IsEmpty())
       return ScriptPromise::Cast(script_state,
                                  v8::Array::New(script_state->GetIsolate()));
@@ -54,8 +55,7 @@
         ->resolver_.Promise();
   }
 
-  PromiseAllHandler(ScriptState* script_state,
-                    HeapVector<ScriptPromise> promises)
+  PromiseAllHandler(ScriptState* script_state, Vector<ScriptPromise> promises)
       : number_of_pending_promises_(promises.size()), resolver_(script_state) {
     DCHECK(!promises.IsEmpty());
     values_.resize(promises.size());
@@ -65,10 +65,7 @@
     }
   }
 
-  virtual void Trace(blink::Visitor* visitor) {
-    visitor->Trace(resolver_);
-    visitor->Trace(values_);
-  }
+  virtual void Trace(blink::Visitor* visitor) { visitor->Trace(resolver_); }
 
  private:
   class AdapterFunction : public ScriptFunction {
@@ -160,7 +157,7 @@
 
   // This is cleared when owners of this handler, that is, given promises are
   // settled.
-  HeapVector<ScriptValue> values_;
+  Vector<ScriptValue> values_;
 
   DISALLOW_COPY_AND_ASSIGN(PromiseAllHandler);
 };
@@ -213,9 +210,15 @@
   Clear();
 }
 
+ScriptPromise::ScriptPromise() {
+  IncreaseInstanceCount();
+}
+
 ScriptPromise::ScriptPromise(ScriptState* script_state,
                              v8::Local<v8::Value> value)
     : script_state_(script_state) {
+  IncreaseInstanceCount();
+
   if (value.IsEmpty())
     return;
 
@@ -229,10 +232,16 @@
 }
 
 ScriptPromise::ScriptPromise(const ScriptPromise& other) {
+  IncreaseInstanceCount();
+
   this->script_state_ = other.script_state_;
   this->promise_ = other.promise_;
 }
 
+ScriptPromise::~ScriptPromise() {
+  DecreaseInstanceCount();
+}
+
 ScriptPromise ScriptPromise::Then(v8::Local<v8::Function> on_fulfilled,
                                   v8::Local<v8::Function> on_rejected) {
   if (promise_.IsEmpty())
@@ -341,8 +350,16 @@
 }
 
 ScriptPromise ScriptPromise::All(ScriptState* script_state,
-                                 const HeapVector<ScriptPromise>& promises) {
+                                 const Vector<ScriptPromise>& promises) {
   return PromiseAllHandler::All(script_state, promises);
 }
 
+void ScriptPromise::IncreaseInstanceCount() {
+  InstanceCounters::IncrementCounter(InstanceCounters::kScriptPromiseCounter);
+}
+
+void ScriptPromise::DecreaseInstanceCount() {
+  InstanceCounters::DecrementCounter(InstanceCounters::kScriptPromiseCounter);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise.h b/third_party/blink/renderer/bindings/core/v8/script_promise.h
index fde92c9..555de6a 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_promise.h
+++ b/third_party/blink/renderer/bindings/core/v8/script_promise.h
@@ -57,7 +57,7 @@
 
  public:
   // Constructs an empty promise.
-  ScriptPromise() = default;
+  ScriptPromise();
 
   // Constructs a ScriptPromise from |promise|.
   // If |promise| is not a Promise object, throws a v8 TypeError.
@@ -65,7 +65,7 @@
 
   ScriptPromise(const ScriptPromise&);
 
-  ~ScriptPromise() = default;
+  ~ScriptPromise();
 
   ScriptPromise Then(v8::Local<v8::Function> on_fulfilled,
                      v8::Local<v8::Function> on_rejected = {});
@@ -121,13 +121,7 @@
   // Constructs and returns a ScriptPromise to be resolved when all |promises|
   // are resolved. If one of |promises| is rejected, the returned
   // ScriptPromise is rejected.
-  static ScriptPromise All(ScriptState*,
-                           const HeapVector<ScriptPromise>& promises);
-
-  void Trace(Visitor* visitor) {
-    visitor->Trace(promise_);
-    visitor->Trace(script_state_);
-  }
+  static ScriptPromise All(ScriptState*, const Vector<ScriptPromise>& promises);
 
   // This is a utility class intended to be used internally.
   // ScriptPromiseResolver is for general purpose.
@@ -142,10 +136,7 @@
     void Reject(v8::Local<v8::Value>);
     void Clear() { resolver_.Clear(); }
     ScriptState* GetScriptState() const { return script_state_; }
-    void Trace(blink::Visitor* visitor) {
-      visitor->Trace(script_state_);
-      visitor->Trace(resolver_);
-    }
+    void Trace(blink::Visitor* visitor) { visitor->Trace(script_state_); }
 
    private:
     Member<ScriptState> script_state_;
@@ -156,21 +147,12 @@
   static void IncreaseInstanceCount();
   static void DecreaseInstanceCount();
 
-  Member<ScriptState> script_state_;
+  // TODO(peria): Move ScriptPromise to Oilpan heap.
+  GC_PLUGIN_IGNORE("813731")
+  Persistent<ScriptState> script_state_;
   ScriptValue promise_;
 };
 
 }  // namespace blink
 
-namespace WTF {
-
-template <>
-struct VectorTraits<blink::ScriptPromise>
-    : VectorTraitsBase<blink::ScriptPromise> {
-  STATIC_ONLY(VectorTraits);
-  static constexpr bool kCanClearUnusedSlotsWithMemset = true;
-};
-
-}  // namespace WTF
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SCRIPT_PROMISE_H_
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc b/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc
index 288848e..49e6343 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc
@@ -371,7 +371,7 @@
   ScriptValue on_fulfilled, on_rejected;
 
   ScriptPromise promise =
-      ScriptPromise::All(scope.GetScriptState(), HeapVector<ScriptPromise>());
+      ScriptPromise::All(scope.GetScriptState(), Vector<ScriptPromise>());
   ASSERT_FALSE(promise.IsEmpty());
 
   promise.Then(FunctionForScriptPromiseTest::CreateFunction(
@@ -393,7 +393,7 @@
   V8TestingScope scope;
   ScriptValue on_fulfilled, on_rejected;
 
-  HeapVector<ScriptPromise> promises;
+  Vector<ScriptPromise> promises;
   promises.push_back(ScriptPromise::Cast(
       scope.GetScriptState(), V8String(scope.GetIsolate(), "hello")));
   promises.push_back(ScriptPromise::Cast(
@@ -423,7 +423,7 @@
   V8TestingScope scope;
   ScriptValue on_fulfilled, on_rejected;
 
-  HeapVector<ScriptPromise> promises;
+  Vector<ScriptPromise> promises;
   promises.push_back(ScriptPromise::Cast(
       scope.GetScriptState(), V8String(scope.GetIsolate(), "hello")));
   promises.push_back(ScriptPromise::Reject(
diff --git a/third_party/blink/renderer/bindings/core/v8/script_value.h b/third_party/blink/renderer/bindings/core/v8/script_value.h
index 5076538..3027b1c9 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_value.h
+++ b/third_party/blink/renderer/bindings/core/v8/script_value.h
@@ -164,10 +164,10 @@
 
   static ScriptValue CreateNull(ScriptState*);
 
-  void Trace(Visitor* visitor) { visitor->Trace(script_state_); }
-
  private:
-  Member<ScriptState> script_state_;
+  // TODO(peria): Move ScriptValue to Oilpan heap.
+  GC_PLUGIN_IGNORE("813731")
+  Persistent<ScriptState> script_state_;
   scoped_refptr<SharedPersistent<v8::Value>> value_;
 };
 
@@ -183,14 +183,4 @@
 
 }  // namespace blink
 
-namespace WTF {
-
-template <>
-struct VectorTraits<blink::ScriptValue> : VectorTraitsBase<blink::ScriptValue> {
-  STATIC_ONLY(VectorTraits);
-  static constexpr bool kCanClearUnusedSlotsWithMemset = true;
-};
-
-}  // namespace WTF
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SCRIPT_VALUE_H_
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
index 90a3540..4f40801 100644
--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
+++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
@@ -517,7 +517,7 @@
   if (value.IsEmpty() || value->IsUndefined())
     return true;
 
-  const HeapVector<ScriptValue>& transferable_array =
+  const Vector<ScriptValue>& transferable_array =
       NativeValueTraits<IDLSequence<ScriptValue>>::NativeValue(isolate, value,
                                                                exception_state);
   if (exception_state.HadException())
@@ -529,7 +529,7 @@
 
 bool SerializedScriptValue::ExtractTransferables(
     v8::Isolate* isolate,
-    const HeapVector<ScriptValue>& object_sequence,
+    const Vector<ScriptValue>& object_sequence,
     Transferables& transferables,
     ExceptionState& exception_state) {
   // Validate the passed array of transferables.
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h
index 58c8eb2..d1edfe7 100644
--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h
+++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h
@@ -205,7 +205,7 @@
                                    Transferables&,
                                    ExceptionState&);
   static bool ExtractTransferables(v8::Isolate*,
-                                   const HeapVector<ScriptValue>&,
+                                   const Vector<ScriptValue>&,
                                    Transferables&,
                                    ExceptionState&);
 
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc
index a6518b84..de2d7f680 100644
--- a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc
@@ -1850,8 +1850,7 @@
 
   auto* rs = ReadableStream::Create(script_state, ASSERT_NO_EXCEPTION);
   v8::Local<v8::Value> wrapper = ToV8(rs, script_state);
-  HeapVector<ScriptValue> transferable_array = {
-      ScriptValue(script_state, wrapper)};
+  Vector<ScriptValue> transferable_array = {ScriptValue(script_state, wrapper)};
   Transferables transferables;
   ASSERT_TRUE(SerializedScriptValue::ExtractTransferables(
       isolate, transferable_array, transferables, ASSERT_NO_EXCEPTION));
diff --git a/third_party/blink/renderer/bindings/scripts/v8_callback_function.py b/third_party/blink/renderer/bindings/scripts/v8_callback_function.py
index bdd5965..fee066f 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_callback_function.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_callback_function.py
@@ -91,10 +91,7 @@
     def argument_cpp_type(argument):
         cpp_type = argument.idl_type.callback_cpp_type
         if argument.is_variadic:
-            if argument.idl_type.is_traceable:
-                return 'const HeapVector<%s>&' % cpp_type
-            else:
-                return 'const Vector<%s>&' % cpp_type
+            return 'const Vector<%s>&' % cpp_type
         else:
             return cpp_type
 
diff --git a/third_party/blink/renderer/bindings/scripts/v8_types.py b/third_party/blink/renderer/bindings/scripts/v8_types.py
index f14420c..3226f36 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_types.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_types.py
@@ -209,7 +209,7 @@
     else:
         native_array_element_type = idl_type.native_array_element_type
     if native_array_element_type:
-        vector_type = cpp_ptr_type('Vector', 'HeapVector', native_array_element_type.is_traceable)
+        vector_type = cpp_ptr_type('Vector', 'HeapVector', native_array_element_type.is_gc_type)
         vector_template_type = cpp_template_type(vector_type, native_array_element_type.cpp_type_args(used_in_cpp_sequence=True))
         if used_as_rvalue_type:
             return 'const %s&' % vector_template_type
@@ -217,7 +217,7 @@
 
     # Record types.
     if idl_type.is_record_type:
-        vector_type = cpp_ptr_type('Vector', 'HeapVector', idl_type.value_type.is_traceable)
+        vector_type = cpp_ptr_type('Vector', 'HeapVector', idl_type.value_type.is_gc_type)
         value_type = idl_type.value_type.cpp_type_args(used_in_cpp_sequence=True)
         vector_template_type = cpp_template_type(vector_type,
                                                  'std::pair<String, %s>' % value_type)
@@ -382,7 +382,7 @@
 
 
 def is_traceable(idl_type):
-    return idl_type.is_garbage_collected or idl_type.is_callback_function or idl_type.cpp_type in ('ScriptValue', 'ScriptPromise')
+    return idl_type.is_garbage_collected or idl_type.is_callback_function
 
 IdlTypeBase.is_traceable = property(is_traceable)
 IdlUnionType.is_traceable = property(lambda self: True)
diff --git a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.cc b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.cc
index 67e69154..52c3616 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.cc
@@ -35,7 +35,7 @@
 
 TestDictionary::~TestDictionary() = default;
 
-void TestDictionary::setAnyInRecordMember(const HeapVector<std::pair<String, ScriptValue>>& value) {
+void TestDictionary::setAnyInRecordMember(const Vector<std::pair<String, ScriptValue>>& value) {
   any_in_record_member_ = value;
   has_any_in_record_member_ = true;
 }
@@ -203,8 +203,6 @@
 }
 
 void TestDictionary::Trace(blink::Visitor* visitor) {
-  visitor->Trace(any_in_record_member_);
-  visitor->Trace(any_member_);
   visitor->Trace(callback_function_member_);
   visitor->Trace(double_or_null_or_double_or_null_sequence_member_);
   visitor->Trace(double_or_string_member_);
@@ -215,8 +213,6 @@
   visitor->Trace(event_target_member_);
   visitor->Trace(garbage_collected_record_member_);
   visitor->Trace(internal_dictionary_sequence_member_);
-  visitor->Trace(object_member_);
-  visitor->Trace(object_or_null_member_);
   visitor->Trace(other_double_or_string_member_);
   visitor->Trace(required_callback_function_member_);
   visitor->Trace(test_enum_or_null_or_test_enum_sequence_member_);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h
index 39b10c6..3a16af6 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h
@@ -49,11 +49,11 @@
   virtual ~TestDictionary();
 
   bool hasAnyInRecordMember() const { return has_any_in_record_member_; }
-  const HeapVector<std::pair<String, ScriptValue>>& anyInRecordMember() const {
+  const Vector<std::pair<String, ScriptValue>>& anyInRecordMember() const {
     DCHECK(has_any_in_record_member_);
     return any_in_record_member_;
   }
-  void setAnyInRecordMember(const HeapVector<std::pair<String, ScriptValue>>&);
+  void setAnyInRecordMember(const Vector<std::pair<String, ScriptValue>>&);
 
   bool hasAnyMember() const { return !(any_member_.IsEmpty() || any_member_.IsUndefined()); }
   ScriptValue anyMember() const {
@@ -492,7 +492,7 @@
   bool has_union_or_null_sequence_member_ = false;
   bool has_unrestricted_double_member_ = false;
 
-  HeapVector<std::pair<String, ScriptValue>> any_in_record_member_;
+  Vector<std::pair<String, ScriptValue>> any_in_record_member_;
   ScriptValue any_member_;
   int32_t applicable_to_type_long_member_;
   String applicable_to_type_string_member_;
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.cc
index 3fa176cc..58501416 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.cc
@@ -28,7 +28,7 @@
   return "V8AnyCallbackFunctionVariadicAnyArgs";
 }
 
-v8::Maybe<ScriptValue> V8AnyCallbackFunctionVariadicAnyArgs::Invoke(bindings::V8ValueOrScriptWrappableAdapter callback_this_value, const HeapVector<ScriptValue>& arguments) {
+v8::Maybe<ScriptValue> V8AnyCallbackFunctionVariadicAnyArgs::Invoke(bindings::V8ValueOrScriptWrappableAdapter callback_this_value, const Vector<ScriptValue>& arguments) {
   ScriptState* callback_relevant_script_state =
       CallbackRelevantScriptStateOrThrowException(
           "AnyCallbackFunctionVariadicAnyArgs",
@@ -133,7 +133,7 @@
   }
 }
 
-v8::Maybe<ScriptValue> V8AnyCallbackFunctionVariadicAnyArgs::Construct(const HeapVector<ScriptValue>& arguments) {
+v8::Maybe<ScriptValue> V8AnyCallbackFunctionVariadicAnyArgs::Construct(const Vector<ScriptValue>& arguments) {
   ScriptState* callback_relevant_script_state =
       CallbackRelevantScriptStateOrThrowException(
           "AnyCallbackFunctionVariadicAnyArgs",
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.h b/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.h
index 8b0c012..0d90338 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_any_callback_function_variadic_any_args.h
@@ -33,11 +33,11 @@
 
   // Performs "invoke".
   // https://heycam.github.io/webidl/#es-invoking-callback-functions
-  v8::Maybe<ScriptValue> Invoke(bindings::V8ValueOrScriptWrappableAdapter callback_this_value, const HeapVector<ScriptValue>& arguments) WARN_UNUSED_RESULT;
+  v8::Maybe<ScriptValue> Invoke(bindings::V8ValueOrScriptWrappableAdapter callback_this_value, const Vector<ScriptValue>& arguments) WARN_UNUSED_RESULT;
 
   // Performs "construct".
   // https://heycam.github.io/webidl/#construct-a-callback-function
-  v8::Maybe<ScriptValue> Construct(const HeapVector<ScriptValue>& arguments) WARN_UNUSED_RESULT;
+  v8::Maybe<ScriptValue> Construct(const Vector<ScriptValue>& arguments) WARN_UNUSED_RESULT;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc
index ae1a93b1..b8dec3df 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc
@@ -129,7 +129,7 @@
   if (any_in_record_member_value.IsEmpty() || any_in_record_member_value->IsUndefined()) {
     // Do nothing.
   } else {
-    HeapVector<std::pair<String, ScriptValue>> any_in_record_member_cpp_value = NativeValueTraits<IDLRecord<IDLString, ScriptValue>>::NativeValue(isolate, any_in_record_member_value, exception_state);
+    Vector<std::pair<String, ScriptValue>> any_in_record_member_cpp_value = NativeValueTraits<IDLRecord<IDLString, ScriptValue>>::NativeValue(isolate, any_in_record_member_value, exception_state);
     if (exception_state.HadException())
       return;
     impl->setAnyInRecordMember(any_in_record_member_cpp_value);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
index bd9cbc8e..3aab30ca 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
@@ -7225,7 +7225,7 @@
   TestObject* impl = V8TestObject::ToImpl(info.Holder());
 
   int32_t long_arg;
-  HeapVector<ScriptValue> rest_args;
+  Vector<ScriptValue> rest_args;
   long_arg = NativeValueTraits<IDLLong>::NativeValue(info.GetIsolate(), info[0], exception_state);
   if (exception_state.HadException())
     return;
@@ -7243,7 +7243,7 @@
   TestObject* impl = V8TestObject::ToImpl(info.Holder());
 
   V8StringResource<> string_arg;
-  HeapVector<ScriptValue> rest_args;
+  Vector<ScriptValue> rest_args;
   string_arg = info[0];
   if (!string_arg.Prepare())
     return;
diff --git a/third_party/blink/renderer/controller/blink_leak_detector.cc b/third_party/blink/renderer/controller/blink_leak_detector.cc
index d35880b..16d7fdf 100644
--- a/third_party/blink/renderer/controller/blink_leak_detector.cc
+++ b/third_party/blink/renderer/controller/blink_leak_detector.cc
@@ -127,6 +127,8 @@
   result->number_of_live_context_lifecycle_state_observers =
       InstanceCounters::CounterValue(
           InstanceCounters::kContextLifecycleStateObserverCounter);
+  result->number_of_live_script_promises =
+      InstanceCounters::CounterValue(InstanceCounters::kScriptPromiseCounter);
   result->number_of_live_frames =
       InstanceCounters::CounterValue(InstanceCounters::kFrameCounter);
   result->number_of_live_v8_per_context_data = InstanceCounters::CounterValue(
diff --git a/third_party/blink/renderer/core/animation/effect_input_test.cc b/third_party/blink/renderer/core/animation/effect_input_test.cc
index bdfac8f9..3ca4bd2f 100644
--- a/third_party/blink/renderer/core/animation/effect_input_test.cc
+++ b/third_party/blink/renderer/core/animation/effect_input_test.cc
@@ -28,14 +28,14 @@
   V8TestingScope scope;
   ScriptState* script_state = scope.GetScriptState();
 
-  HeapVector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
-                                                 .AddString("width", "100px")
-                                                 .AddString("offset", "0")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("width", "0px")
-                                                 .AddString("offset", "1")
-                                                 .GetScriptValue()};
+  Vector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
+                                             .AddString("width", "100px")
+                                             .AddString("offset", "0")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("width", "0px")
+                                             .AddString("offset", "1")
+                                             .GetScriptValue()};
 
   ScriptValue js_keyframes(
       script_state,
@@ -53,14 +53,14 @@
   V8TestingScope scope;
   ScriptState* script_state = scope.GetScriptState();
 
-  HeapVector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
-                                                 .AddString("width", "0px")
-                                                 .AddString("offset", "1")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("width", "100px")
-                                                 .AddString("offset", "0")
-                                                 .GetScriptValue()};
+  Vector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
+                                             .AddString("width", "0px")
+                                             .AddString("offset", "1")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("width", "100px")
+                                             .AddString("offset", "0")
+                                             .GetScriptValue()};
 
   ScriptValue js_keyframes(
       script_state,
@@ -78,17 +78,17 @@
   V8TestingScope scope;
   ScriptState* script_state = scope.GetScriptState();
 
-  HeapVector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
-                                                 .AddString("width", "100px")
-                                                 .AddString("offset", "0")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("width", "200px")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("width", "0px")
-                                                 .AddString("offset", "1")
-                                                 .GetScriptValue()};
+  Vector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
+                                             .AddString("width", "100px")
+                                             .AddString("offset", "0")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("width", "200px")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("width", "0px")
+                                             .AddString("offset", "1")
+                                             .GetScriptValue()};
 
   ScriptValue js_keyframes(
       script_state,
@@ -106,21 +106,21 @@
   V8TestingScope scope;
   ScriptState* script_state = scope.GetScriptState();
 
-  HeapVector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
-                                                 .AddString("height", "100px")
-                                                 .AddString("offset", "0.5")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("height", "150px")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("height", "200px")
-                                                 .AddString("offset", "0")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("height", "300px")
-                                                 .AddString("offset", "1")
-                                                 .GetScriptValue()};
+  Vector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
+                                             .AddString("height", "100px")
+                                             .AddString("offset", "0.5")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("height", "150px")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("height", "200px")
+                                             .AddString("offset", "0")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("height", "300px")
+                                             .AddString("offset", "1")
+                                             .GetScriptValue()};
 
   ScriptValue js_keyframes(
       script_state,
@@ -137,17 +137,17 @@
   ScriptState* script_state = scope.GetScriptState();
 
   // Not loosely sorted by offset, and there exists a keyframe with null offset.
-  HeapVector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
-                                                 .AddString("width", "0px")
-                                                 .AddString("offset", "1")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("width", "200px")
-                                                 .GetScriptValue(),
-                                             V8ObjectBuilder(script_state)
-                                                 .AddString("width", "200px")
-                                                 .AddString("offset", "0")
-                                                 .GetScriptValue()};
+  Vector<ScriptValue> blink_keyframes = {V8ObjectBuilder(script_state)
+                                             .AddString("width", "0px")
+                                             .AddString("offset", "1")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("width", "200px")
+                                             .GetScriptValue(),
+                                         V8ObjectBuilder(script_state)
+                                             .AddString("width", "200px")
+                                             .AddString("offset", "0")
+                                             .GetScriptValue()};
 
   ScriptValue js_keyframes(
       script_state,
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.cc b/third_party/blink/renderer/core/animation/keyframe_effect.cc
index 4b4150c..dbfe7b42 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect.cc
+++ b/third_party/blink/renderer/core/animation/keyframe_effect.cc
@@ -142,9 +142,8 @@
       EffectModel::StringToCompositeOperation(composite_string).value());
 }
 
-HeapVector<ScriptValue> KeyframeEffect::getKeyframes(
-    ScriptState* script_state) {
-  HeapVector<ScriptValue> computed_keyframes;
+Vector<ScriptValue> KeyframeEffect::getKeyframes(ScriptState* script_state) {
+  Vector<ScriptValue> computed_keyframes;
   if (!model_->HasFrames())
     return computed_keyframes;
 
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.h b/third_party/blink/renderer/core/animation/keyframe_effect.h
index f70caded..5d43efc2 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect.h
+++ b/third_party/blink/renderer/core/animation/keyframe_effect.h
@@ -81,7 +81,7 @@
   void setTarget(Element*);
   String composite() const;
   void setComposite(String);
-  HeapVector<ScriptValue> getKeyframes(ScriptState*);
+  Vector<ScriptValue> getKeyframes(ScriptState*);
   void setKeyframes(ScriptState*,
                     const ScriptValue& keyframes,
                     ExceptionState&);
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_test.cc b/third_party/blink/renderer/core/animation/keyframe_effect_test.cc
index 21c16ad6..d9428716 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect_test.cc
+++ b/third_party/blink/renderer/core/animation/keyframe_effect_test.cc
@@ -110,7 +110,7 @@
   ScriptState* script_state = scope.GetScriptState();
   NonThrowableExceptionState exception_state;
 
-  HeapVector<ScriptValue> blink_keyframes = {
+  Vector<ScriptValue> blink_keyframes = {
       V8ObjectBuilder(script_state)
           .AddString("width", "100px")
           .AddString("offset", "0")
@@ -194,7 +194,7 @@
                                   effect_options_dictionary, exception_state);
   EXPECT_FALSE(exception_state.HadException());
 
-  HeapVector<ScriptValue> blink_keyframes = {
+  Vector<ScriptValue> blink_keyframes = {
       V8ObjectBuilder(script_state)
           .AddString("width", "100px")
           .AddString("composite", "replace")
@@ -347,7 +347,7 @@
 
   // But if we then setKeyframes with CSS-targeting keyframes, the composite
   // should fallback to 'replace'.
-  HeapVector<ScriptValue> blink_keyframes = {
+  Vector<ScriptValue> blink_keyframes = {
       V8ObjectBuilder(script_state).AddString("width", "10px").GetScriptValue(),
       V8ObjectBuilder(script_state).AddString("width", "0px").GetScriptValue()};
   ScriptValue new_js_keyframes(
diff --git a/third_party/blink/renderer/core/css/css_to_length_conversion_data.cc b/third_party/blink/renderer/core/css/css_to_length_conversion_data.cc
index 5cd917a..233df4a4 100644
--- a/third_party/blink/renderer/core/css/css_to_length_conversion_data.cc
+++ b/third_party/blink/renderer/core/css/css_to_length_conversion_data.cc
@@ -47,8 +47,8 @@
 
 CSSToLengthConversionData::FontSizes::FontSizes(const ComputedStyle* style,
                                                 const ComputedStyle* root_style)
-    : FontSizes(style->SpecifiedFontSize(),
-                root_style ? root_style->SpecifiedFontSize() : 1.0f,
+    : FontSizes(style->ComputedFontSize(),
+                root_style ? root_style->ComputedFontSize() : 1.0f,
                 &style->GetFont(),
                 style->EffectiveZoom()) {}
 
@@ -175,13 +175,13 @@
     // as well as enforcing the implicit "smart minimum."
     case CSSPrimitiveValue::UnitType::kEms:
     case CSSPrimitiveValue::UnitType::kQuirkyEms:
-      return value * EmFontSize() * Zoom();
+      return value * EmFontSize();
 
     case CSSPrimitiveValue::UnitType::kExs:
       return value * ExFontSize();
 
     case CSSPrimitiveValue::UnitType::kRems:
-      return value * RemFontSize() * Zoom();
+      return value * RemFontSize();
 
     case CSSPrimitiveValue::UnitType::kChs:
       return value * ChFontSize();
diff --git a/third_party/blink/renderer/core/dom/global_event_handlers.h b/third_party/blink/renderer/core/dom/global_event_handlers.h
index 13c7cf669..8c77525 100644
--- a/third_party/blink/renderer/core/dom/global_event_handlers.h
+++ b/third_party/blink/renderer/core/dom/global_event_handlers.h
@@ -117,7 +117,10 @@
   DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(stalled, kStalled)
   DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(submit, kSubmit)
   DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(suspend, kSuspend)
+  DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(transitionrun, kTransitionrun)
+  DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(transitionstart, kTransitionstart)
   DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(transitionend, kTransitionend)
+  DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(transitioncancel, kTransitioncancel)
   DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(timeupdate, kTimeupdate)
   DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(toggle, kToggle)
   DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(touchcancel, kTouchcancel)
diff --git a/third_party/blink/renderer/core/dom/global_event_handlers.idl b/third_party/blink/renderer/core/dom/global_event_handlers.idl
index 05630ca8..2af48204 100644
--- a/third_party/blink/renderer/core/dom/global_event_handlers.idl
+++ b/third_party/blink/renderer/core/dom/global_event_handlers.idl
@@ -138,5 +138,8 @@
 
     // CSS Transitions
     // https://drafts.csswg.org/css-transitions/#interface-globaleventhandlers-idl
+    attribute EventHandler ontransitionrun;
+    attribute EventHandler ontransitionstart;
     attribute EventHandler ontransitionend;
+    attribute EventHandler ontransitioncancel;
 };
diff --git a/third_party/blink/renderer/core/frame/dom_window.cc b/third_party/blink/renderer/core/frame/dom_window.cc
index ecc5d4e..82753c7 100644
--- a/third_party/blink/renderer/core/frame/dom_window.cc
+++ b/third_party/blink/renderer/core/frame/dom_window.cc
@@ -118,7 +118,7 @@
 void DOMWindow::postMessage(v8::Isolate* isolate,
                             const ScriptValue& message,
                             const String& target_origin,
-                            HeapVector<ScriptValue>& transfer,
+                            Vector<ScriptValue>& transfer,
                             ExceptionState& exception_state) {
   WindowPostMessageOptions* options = WindowPostMessageOptions::Create();
   options->setTargetOrigin(target_origin);
diff --git a/third_party/blink/renderer/core/frame/dom_window.h b/third_party/blink/renderer/core/frame/dom_window.h
index fc9782c6..76237d7 100644
--- a/third_party/blink/renderer/core/frame/dom_window.h
+++ b/third_party/blink/renderer/core/frame/dom_window.h
@@ -98,7 +98,7 @@
   void postMessage(v8::Isolate*,
                    const ScriptValue& message,
                    const String& target_origin,
-                   HeapVector<ScriptValue>& transfer,
+                   Vector<ScriptValue>& transfer,
                    ExceptionState&);
 
   void postMessage(v8::Isolate*,
diff --git a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc
index e65c733..51e3b0f 100644
--- a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc
@@ -134,7 +134,7 @@
     EventTarget& event_target,
     V8Function* handler,
     int timeout,
-    const HeapVector<ScriptValue>& arguments) {
+    const Vector<ScriptValue>& arguments) {
   ExecutionContext* execution_context = event_target.GetExecutionContext();
   if (!IsAllowed(script_state, execution_context, false, g_empty_string))
     return 0;
@@ -154,7 +154,7 @@
     EventTarget& event_target,
     const StringOrTrustedScript& string_or_trusted_script,
     int timeout,
-    const HeapVector<ScriptValue>& arguments,
+    const Vector<ScriptValue>& arguments,
     ExceptionState& exception_state) {
   ExecutionContext* execution_context = event_target.GetExecutionContext();
   Document* document = execution_context->IsDocument()
@@ -173,7 +173,7 @@
     EventTarget& event_target,
     const String& handler,
     int timeout,
-    const HeapVector<ScriptValue>&) {
+    const Vector<ScriptValue>&) {
   ExecutionContext* execution_context = event_target.GetExecutionContext();
   if (!IsAllowed(script_state, execution_context, true, handler))
     return 0;
@@ -197,7 +197,7 @@
     EventTarget& event_target,
     V8Function* handler,
     int timeout,
-    const HeapVector<ScriptValue>& arguments) {
+    const Vector<ScriptValue>& arguments) {
   ExecutionContext* execution_context = event_target.GetExecutionContext();
   if (!IsAllowed(script_state, execution_context, false, g_empty_string))
     return 0;
@@ -212,7 +212,7 @@
     EventTarget& event_target,
     const StringOrTrustedScript& string_or_trusted_script,
     int timeout,
-    const HeapVector<ScriptValue>& arguments,
+    const Vector<ScriptValue>& arguments,
     ExceptionState& exception_state) {
   ExecutionContext* execution_context = event_target.GetExecutionContext();
   Document* document = execution_context->IsDocument()
@@ -231,7 +231,7 @@
     EventTarget& event_target,
     const String& handler,
     int timeout,
-    const HeapVector<ScriptValue>&) {
+    const Vector<ScriptValue>&) {
   ExecutionContext* execution_context = event_target.GetExecutionContext();
   if (!IsAllowed(script_state, execution_context, true, handler))
     return 0;
diff --git a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h
index b378abf..e3e7a41a 100644
--- a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h
+++ b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h
@@ -67,34 +67,34 @@
                         EventTarget&,
                         V8Function* handler,
                         int timeout,
-                        const HeapVector<ScriptValue>& arguments);
+                        const Vector<ScriptValue>& arguments);
   static int setTimeout(ScriptState*,
                         EventTarget&,
                         const StringOrTrustedScript&,
                         int timeout,
-                        const HeapVector<ScriptValue>&,
+                        const Vector<ScriptValue>&,
                         ExceptionState&);
   static int setTimeoutFromString(ScriptState*,
                                   EventTarget&,
                                   const String& handler,
                                   int timeout,
-                                  const HeapVector<ScriptValue>&);
+                                  const Vector<ScriptValue>&);
   static int setInterval(ScriptState*,
                          EventTarget&,
                          V8Function* handler,
                          int timeout,
-                         const HeapVector<ScriptValue>&);
+                         const Vector<ScriptValue>&);
   static int setInterval(ScriptState*,
                          EventTarget&,
                          const StringOrTrustedScript&,
                          int timeout,
-                         const HeapVector<ScriptValue>&,
+                         const Vector<ScriptValue>&,
                          ExceptionState&);
   static int setIntervalFromString(ScriptState*,
                                    EventTarget&,
                                    const String& handler,
                                    int timeout,
-                                   const HeapVector<ScriptValue>&);
+                                   const Vector<ScriptValue>&);
   static void clearTimeout(EventTarget&, int timeout_id);
   static void clearInterval(EventTarget&, int timeout_id);
 
diff --git a/third_party/blink/renderer/core/html/portal/html_portal_element.cc b/third_party/blink/renderer/core/html/portal/html_portal_element.cc
index 25aeeba1..72c9e28 100644
--- a/third_party/blink/renderer/core/html/portal/html_portal_element.cc
+++ b/third_party/blink/renderer/core/html/portal/html_portal_element.cc
@@ -202,7 +202,7 @@
 void HTMLPortalElement::postMessage(ScriptState* script_state,
                                     const ScriptValue& message,
                                     const String& target_origin,
-                                    const HeapVector<ScriptValue>& transfer,
+                                    const Vector<ScriptValue>& transfer,
                                     ExceptionState& exception_state) {
   WindowPostMessageOptions* options = WindowPostMessageOptions::Create();
   options->setTargetOrigin(target_origin);
diff --git a/third_party/blink/renderer/core/html/portal/html_portal_element.h b/third_party/blink/renderer/core/html/portal/html_portal_element.h
index 3d328f37..04d7756 100644
--- a/third_party/blink/renderer/core/html/portal/html_portal_element.h
+++ b/third_party/blink/renderer/core/html/portal/html_portal_element.h
@@ -47,7 +47,7 @@
   void postMessage(ScriptState* script_state,
                    const ScriptValue& message,
                    const String& target_origin,
-                   const HeapVector<ScriptValue>& transfer,
+                   const Vector<ScriptValue>& transfer,
                    ExceptionState& exception_state);
   void postMessage(ScriptState* script_state,
                    const ScriptValue& message,
diff --git a/third_party/blink/renderer/core/html/portal/portal_host.cc b/third_party/blink/renderer/core/html/portal/portal_host.cc
index 42b6924..706104f 100644
--- a/third_party/blink/renderer/core/html/portal/portal_host.cc
+++ b/third_party/blink/renderer/core/html/portal/portal_host.cc
@@ -65,7 +65,7 @@
 void PortalHost::postMessage(ScriptState* script_state,
                              const ScriptValue& message,
                              const String& target_origin,
-                             HeapVector<ScriptValue>& transfer,
+                             Vector<ScriptValue>& transfer,
                              ExceptionState& exception_state) {
   WindowPostMessageOptions* options = WindowPostMessageOptions::Create();
   options->setTargetOrigin(target_origin);
diff --git a/third_party/blink/renderer/core/html/portal/portal_host.h b/third_party/blink/renderer/core/html/portal/portal_host.h
index b23977c..24fa31c5 100644
--- a/third_party/blink/renderer/core/html/portal/portal_host.h
+++ b/third_party/blink/renderer/core/html/portal/portal_host.h
@@ -48,7 +48,7 @@
   void postMessage(ScriptState* script_state,
                    const ScriptValue& message,
                    const String& target_origin,
-                   HeapVector<ScriptValue>& transfer,
+                   Vector<ScriptValue>& transfer,
                    ExceptionState& exception_state);
   void postMessage(ScriptState* script_state,
                    const ScriptValue& message,
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
index 2d718d8..44cc69b 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -324,6 +324,10 @@
   position_ = line_info->TextIndent();
 
   overflow_item_index_ = 0;
+
+#if DCHECK_IS_ON()
+  last_rewind_from_item_index_ = last_rewind_to_item_index_ = 0;
+#endif
 }
 
 void NGLineBreaker::NextLine(
@@ -1687,6 +1691,9 @@
       Rewind(0, line_info);
     state_ = LineBreakState::kContinue;
     overflow_item_index_ = 0;
+#if DCHECK_IS_ON()
+    last_rewind_from_item_index_ = last_rewind_to_item_index_ = 0;
+#endif
     return;
   }
 
@@ -1709,6 +1716,15 @@
 }
 
 void NGLineBreaker::Rewind(unsigned new_end, NGLineInfo* line_info) {
+#if DCHECK_IS_ON()
+  // Detect rewind-loop. If we're trying to rewind to the same index twice,
+  // we're in the infinite loop.
+  DCHECK(item_index_ != last_rewind_from_item_index_ ||
+         new_end != last_rewind_to_item_index_);
+  last_rewind_from_item_index_ = item_index_;
+  last_rewind_to_item_index_ = new_end;
+#endif
+
   NGInlineItemResults& item_results = *line_info->MutableResults();
   DCHECK_LT(new_end, item_results.size());
 
@@ -1809,26 +1825,26 @@
 
   if (auto_wrap_) {
     LineBreakType line_break_type;
-    switch (style.WordBreak()) {
+    EWordBreak word_break = style.WordBreak();
+    switch (word_break) {
       case EWordBreak::kNormal:
-        break_anywhere_if_overflow_ =
-            style.OverflowWrap() == EOverflowWrap::kBreakWord &&
-            mode_ == NGLineBreakerMode::kContent;
         line_break_type = LineBreakType::kNormal;
         break;
       case EWordBreak::kBreakAll:
-        break_anywhere_if_overflow_ = false;
         line_break_type = LineBreakType::kBreakAll;
         break;
       case EWordBreak::kBreakWord:
-        break_anywhere_if_overflow_ = true;
         line_break_type = LineBreakType::kNormal;
         break;
       case EWordBreak::kKeepAll:
-        break_anywhere_if_overflow_ = false;
         line_break_type = LineBreakType::kKeepAll;
         break;
     }
+    break_anywhere_if_overflow_ =
+        word_break == EWordBreak::kBreakWord ||
+        // `overflow-/word-wrap: break-word` affects layout but not min-content.
+        (style.OverflowWrap() == EOverflowWrap::kBreakWord &&
+         mode_ == NGLineBreakerMode::kContent);
     if (UNLIKELY((override_break_anywhere_ && break_anywhere_if_overflow_) ||
                  style.GetLineBreak() == LineBreak::kAnywhere)) {
       line_break_type = LineBreakType::kBreakCharacter;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
index 4e91fb5..f01a802 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
@@ -289,6 +289,12 @@
   // This is copied from NGInlineNode, then updated after each forced line break
   // if 'unicode-bidi: plaintext'.
   TextDirection base_direction_;
+
+#if DCHECK_IS_ON()
+  // These fields are to detect rewind-loop.
+  unsigned last_rewind_from_item_index_ = 0;
+  unsigned last_rewind_to_item_index_ = 0;
+#endif
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc
index d71cc25..3dee380 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_absolute_utils.cc
@@ -113,9 +113,7 @@
   if (!inset_end_length.IsAuto()) {
     inset_end = MinimumValueForLength(inset_end_length, available_size);
   }
-#if DCHECK_IS_ON()
-  bool values_might_be_saturated = false;
-#endif
+
   // Solving the equation:
   // |inset_start| + |margin_start| + |size| + |margin_end| + |inset_end| =
   // |available_size|
@@ -147,9 +145,6 @@
     // Compute margins.
     LayoutUnit margin_space =
         available_size - *inset_start - *inset_end - *size;
-#if DCHECK_IS_ON()
-    values_might_be_saturated |= margin_space.MightBeSaturated();
-#endif
 
     if (!margin_start && !margin_end) {
       // When both margins are auto.
@@ -173,9 +168,6 @@
     } else {
       // Are the values over-constrained?
       LayoutUnit margin_extra = margin_space - *margin_start - *margin_end;
-#if DCHECK_IS_ON()
-      values_might_be_saturated |= margin_extra.MightBeSaturated();
-#endif
       if (margin_extra) {
         // Relax the end.
         if (is_start_dominant)
@@ -234,18 +226,6 @@
            *margin_end;
   }
 
-#if DCHECK_IS_ON()
-  values_might_be_saturated |=
-      inset_start->MightBeSaturated() || inset_end->MightBeSaturated() ||
-      size->MightBeSaturated() || margin_start->MightBeSaturated() ||
-      margin_end->MightBeSaturated() || available_size.MightBeSaturated();
-  // The DCHECK is useful, but only holds true if the values aren't saturated.
-  if (!values_might_be_saturated) {
-    DCHECK_EQ(available_size,
-              *inset_start + *inset_end + *margin_start + *margin_end + *size);
-  }
-#endif  // #if DCHECK_IS_ON()
-
   // If calculated |size| is outside of min/max constraints, rerun the
   // algorithm with the constrained |size|.
   LayoutUnit constrained_size = ConstrainByMinMax(*size, min_size, max_size);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
index ea60853..2c496989 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -203,6 +203,45 @@
   return space.PercentageResolutionBlockSize();
 }
 
+void SetupBoxLayoutExtraInput(const NGConstraintSpace& space,
+                              const LayoutBox& box,
+                              BoxLayoutExtraInput* input) {
+  input->containing_block_content_inline_size =
+      CalculateAvailableInlineSizeForLegacy(box, space);
+  input->containing_block_content_block_size =
+      CalculateAvailableBlockSizeForLegacy(box, space);
+
+  WritingMode writing_mode = box.StyleRef().GetWritingMode();
+  if (LayoutObject* containing_block = box.ContainingBlock()) {
+    if (!IsParallelWritingMode(containing_block->StyleRef().GetWritingMode(),
+                               writing_mode)) {
+      // The sizes should be in the containing block writing mode.
+      std::swap(input->containing_block_content_block_size,
+                input->containing_block_content_inline_size);
+
+      // We cannot lay out without a definite containing block inline-size. We
+      // end up here if we're performing a measure pass (as part of resolving
+      // the intrinsic min/max inline-size of some ancestor, for instance).
+      // Legacy layout has a tendency of clamping negative sizes to 0 anyway,
+      // but this is missing when it comes to resolving percentage-based
+      // padding, for instance.
+      if (input->containing_block_content_inline_size == kIndefiniteSize)
+        input->containing_block_content_inline_size = LayoutUnit();
+    }
+  }
+
+  // We need a definite containing block inline-size, or we'd be unable to
+  // resolve percentages.
+  DCHECK_GE(input->containing_block_content_inline_size, LayoutUnit());
+
+  input->available_inline_size = space.AvailableSize().inline_size;
+
+  if (space.IsFixedInlineSize())
+    input->override_inline_size = space.AvailableSize().inline_size;
+  if (space.IsFixedBlockSize())
+    input->override_block_size = space.AvailableSize().block_size;
+}
+
 }  // namespace
 
 scoped_refptr<const NGLayoutResult> NGBlockNode::Layout(
@@ -796,6 +835,9 @@
                                         physical_fragment);
     }
 
+    BoxLayoutExtraInput input(*block);
+    SetupBoxLayoutExtraInput(constraint_space, *block, &input);
+
     // |ComputeOverflow()| below calls |AddVisualOverflowFromChildren()|, which
     // computes visual overflow from |RootInlineBox| if |ChildrenInline()|
     block->SetNeedsOverflowRecalc();
@@ -1089,42 +1131,9 @@
 
   if (box_->NeedsLayout() || !layout_result || needs_force_relayout) {
     BoxLayoutExtraInput input(*box_);
-    input.containing_block_content_inline_size =
-        CalculateAvailableInlineSizeForLegacy(*box_, constraint_space);
-    input.containing_block_content_block_size =
-        CalculateAvailableBlockSizeForLegacy(*box_, constraint_space);
-
     WritingMode writing_mode = Style().GetWritingMode();
-    if (LayoutObject* containing_block = box_->ContainingBlock()) {
-      if (!IsParallelWritingMode(containing_block->StyleRef().GetWritingMode(),
-                                 writing_mode)) {
-        // The sizes should be in the containing block writing mode.
-        std::swap(input.containing_block_content_block_size,
-                  input.containing_block_content_inline_size);
 
-        // We cannot lay out without a definite containing block inline-size. We
-        // end up here if we're performing a measure pass (as part of resolving
-        // the intrinsic min/max inline-size of some ancestor, for instance).
-        // Legacy layout has a tendency of clamping negative sizes to 0 anyway,
-        // but this is missing when it comes to resolving percentage-based
-        // padding, for instance.
-        if (input.containing_block_content_inline_size == kIndefiniteSize) {
-          DCHECK(constraint_space.IsIntermediateLayout());
-          input.containing_block_content_inline_size = LayoutUnit();
-        }
-      }
-    }
-
-    // We need a definite containing block inline-size, or we'd be unable to
-    // resolve percentages.
-    DCHECK_GE(input.containing_block_content_inline_size, LayoutUnit());
-
-    input.available_inline_size = constraint_space.AvailableSize().inline_size;
-
-    if (constraint_space.IsFixedInlineSize())
-      input.override_inline_size = constraint_space.AvailableSize().inline_size;
-    if (constraint_space.IsFixedBlockSize())
-      input.override_block_size = constraint_space.AvailableSize().block_size;
+    SetupBoxLayoutExtraInput(constraint_space, *box_, &input);
     box_->ComputeAndSetBlockDirectionMargins(box_->ContainingBlock());
 
     // Using |LayoutObject::LayoutIfNeeded| save us a little bit of overhead,
diff --git a/third_party/blink/renderer/core/messaging/message_port.cc b/third_party/blink/renderer/core/messaging/message_port.cc
index 253da24..62ca430 100644
--- a/third_party/blink/renderer/core/messaging/message_port.cc
+++ b/third_party/blink/renderer/core/messaging/message_port.cc
@@ -65,7 +65,7 @@
 
 void MessagePort::postMessage(ScriptState* script_state,
                               const ScriptValue& message,
-                              HeapVector<ScriptValue>& transfer,
+                              Vector<ScriptValue>& transfer,
                               ExceptionState& exception_state) {
   PostMessageOptions* options = PostMessageOptions::Create();
   if (!transfer.IsEmpty())
diff --git a/third_party/blink/renderer/core/messaging/message_port.h b/third_party/blink/renderer/core/messaging/message_port.h
index b6ae50f..1f9f0b4 100644
--- a/third_party/blink/renderer/core/messaging/message_port.h
+++ b/third_party/blink/renderer/core/messaging/message_port.h
@@ -62,7 +62,7 @@
 
   void postMessage(ScriptState*,
                    const ScriptValue& message,
-                   HeapVector<ScriptValue>& transfer,
+                   Vector<ScriptValue>& transfer,
                    ExceptionState&);
   void postMessage(ScriptState*,
                    const ScriptValue& message,
diff --git a/third_party/blink/renderer/core/script/resources/layered_api/elements/virtual-scroller/visibility-manager.mjs b/third_party/blink/renderer/core/script/resources/layered_api/elements/virtual-scroller/visibility-manager.mjs
index 00ccd5ae..2d520284 100644
--- a/third_party/blink/renderer/core/script/resources/layered_api/elements/virtual-scroller/visibility-manager.mjs
+++ b/third_party/blink/renderer/core/script/resources/layered_api/elements/virtual-scroller/visibility-manager.mjs
@@ -189,9 +189,8 @@
         // This should include all of the elements to be revealed and
         // also 1 element above and below those (if such elements
         // exist).
-        const newObserved = new Set();
+        const newObserved = new Set(newRevealed);
         if (newRevealed.size !== 0) {
-          newObserved.add(...newRevealed);
           const p = newBounds.low.previousElementSibling;
           if (p) {
             newObserved.add(p);
diff --git a/third_party/blink/renderer/core/svg/BUILD.gn b/third_party/blink/renderer/core/svg/BUILD.gn
index 3fd476d..69d9ddc 100644
--- a/third_party/blink/renderer/core/svg/BUILD.gn
+++ b/third_party/blink/renderer/core/svg/BUILD.gn
@@ -16,6 +16,7 @@
   sources = [
     "animation/smil_animation_sandwich.cc",
     "animation/smil_animation_sandwich.h",
+    "animation/smil_repeat_count.h",
     "animation/smil_time.cc",
     "animation/smil_time.h",
     "animation/smil_time_container.cc",
diff --git a/third_party/blink/renderer/core/svg/animation/smil_repeat_count.h b/third_party/blink/renderer/core/svg/animation/smil_repeat_count.h
new file mode 100644
index 0000000..23d1f48
--- /dev/null
+++ b/third_party/blink/renderer/core/svg/animation/smil_repeat_count.h
@@ -0,0 +1,63 @@
+// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SMIL_REPEAT_COUNT_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SMIL_REPEAT_COUNT_H_
+
+#include <cmath>
+#include <limits>
+
+#include "base/logging.h"
+
+namespace blink {
+
+// Representation of the value from the 'repeatCount' SMIL attribute.
+//
+// "Unspecified" is used to indicate that the attribute is not specified.
+// "Invalid" is used to indicate that the attribute may have changed and needs
+// to be reparsed.
+class SMILRepeatCount {
+ public:
+  static SMILRepeatCount Unspecified() {
+    return SMILRepeatCount(std::numeric_limits<double>::quiet_NaN());
+  }
+  static SMILRepeatCount Indefinite() {
+    return SMILRepeatCount(std::numeric_limits<double>::infinity());
+  }
+  static SMILRepeatCount Numeric(double value) {
+    DCHECK(std::isfinite(value));
+    DCHECK_GT(value, 0);
+    return SMILRepeatCount(value);
+  }
+  static SMILRepeatCount Invalid() {
+    return SMILRepeatCount(-std::numeric_limits<double>::infinity());
+  }
+
+  bool IsValid() const {
+    return value_ != -std::numeric_limits<double>::infinity();
+  }
+  bool IsUnspecified() const {
+    DCHECK(IsValid());
+    return std::isnan(value_);
+  }
+  bool IsIndefinite() const {
+    DCHECK(IsValid());
+    return std::isinf(value_);
+  }
+  double NumericValue() const {
+    DCHECK(!IsUnspecified());
+    DCHECK(!IsIndefinite());
+    DCHECK(IsValid());
+    return value_;
+  }
+
+ private:
+  explicit SMILRepeatCount(double value) : value_(value) {}
+
+  double value_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SMIL_REPEAT_COUNT_H_
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time.cc b/third_party/blink/renderer/core/svg/animation/smil_time.cc
index f27cc3c..ce16f595 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_time.cc
+++ b/third_party/blink/renderer/core/svg/animation/smil_time.cc
@@ -25,16 +25,15 @@
 
 #include "third_party/blink/renderer/core/svg/animation/smil_time.h"
 
-#include <float.h>
+#include "third_party/blink/renderer/core/svg/animation/smil_repeat_count.h"
 
 namespace blink {
 
-SMILTime SMILTime::operator*(SMILTime other) const {
-  // Equal operators have to be used instead of negation here to make NaN work
-  // as well.
-  if (time_ == 0 || other.time_ == 0)
-    return SMILTime(0);
-  return time_ * other.time_;
+SMILTime SMILTime::Repeat(SMILRepeatCount repeat_count) const {
+  DCHECK(repeat_count.IsValid());
+  if (repeat_count.IsIndefinite() || repeat_count.IsUnspecified())
+    return SMILTime::Indefinite();
+  return SMILTime(time_ * repeat_count.NumericValue());
 }
 
 std::ostream& operator<<(std::ostream& os, SMILTime time) {
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time.h b/third_party/blink/renderer/core/svg/animation/smil_time.h
index 4d70f29..27597502 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_time.h
+++ b/third_party/blink/renderer/core/svg/animation/smil_time.h
@@ -36,6 +36,7 @@
 
 namespace blink {
 
+class SMILRepeatCount;
 struct SMILInterval;
 
 class SMILTime {
@@ -43,7 +44,6 @@
 
  public:
   constexpr SMILTime() : time_(0) {}
-  constexpr SMILTime(double time) : time_(time) {}
 
   static constexpr SMILTime Unresolved() {
     return std::numeric_limits<double>::quiet_NaN();
@@ -54,6 +54,13 @@
   static constexpr SMILTime Earliest() {
     return -std::numeric_limits<double>::infinity();
   }
+  static constexpr SMILTime FromSecondsD(double seconds) {
+    return SMILTime(seconds);
+  }
+  static constexpr SMILTime FromMicroseconds(int64_t us) {
+    return SMILTime(static_cast<double>(us) /
+                    base::Time::kMicrosecondsPerSecond);
+  }
 
   // Used for computing progress. Don't use for anything else.
   double InternalValueAsDouble() const { return time_; }
@@ -66,13 +73,13 @@
   bool IsIndefinite() const { return std::isinf(time_); }
   bool IsUnresolved() const { return std::isnan(time_); }
 
+  SMILTime Repeat(SMILRepeatCount repeat_count) const;
+
   SMILTime operator+(SMILTime other) const { return time_ + other.time_; }
   SMILTime operator-(SMILTime other) const { return time_ - other.time_; }
-  // So multiplying times does not make too much sense but SMIL defines it for
-  // duration * repeatCount
-  SMILTime operator*(SMILTime other) const;
-  // Similarly for divisions/modulo. (Used primarily for computing interval
-  // progress/repeats.)
+  SMILTime operator-() const { return SMILTime(-time_); }
+  // Division and /modulo are used primarily for computing interval
+  // progress/repeats.
   int64_t operator/(SMILTime other) const {
     return int64_t(time_ / other.time_);
   }
@@ -106,6 +113,8 @@
   friend bool operator!=(const SMILInterval& a, const SMILInterval& b);
   friend struct SMILTimeHash;
 
+  constexpr SMILTime(double time) : time_(time) {}
+
   double time_;
 };
 
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
index c9ec115..be38c814 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
+++ b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
@@ -44,9 +44,7 @@
     base::TimeDelta::FromSeconds(3);
 
 SMILTimeContainer::SMILTimeContainer(SVGSVGElement& owner)
-    : presentation_time_(0),
-      latest_update_time_(0),
-      frame_scheduling_state_(kIdle),
+    : frame_scheduling_state_(kIdle),
       started_(false),
       paused_(false),
       document_order_indexes_dirty_(false),
@@ -150,7 +148,7 @@
 
 SMILTime SMILTimeContainer::Elapsed() const {
   if (!IsStarted())
-    return 0;
+    return SMILTime();
 
   if (IsPaused())
     return presentation_time_;
@@ -160,8 +158,9 @@
           base::TimeDelta()) -
       reference_time_;
   DCHECK_GE(time_offset, base::TimeDelta());
-  SMILTime elapsed = presentation_time_ + time_offset.InSecondsF();
-  DCHECK_GE(elapsed, 0.0);
+  SMILTime elapsed = presentation_time_ +
+                     SMILTime::FromMicroseconds(time_offset.InMicroseconds());
+  DCHECK_GE(elapsed, SMILTime());
   return elapsed;
 }
 
@@ -271,7 +270,7 @@
   prevent_scheduled_animations_changes_ = false;
 #endif
   intervals_dirty_ = true;
-  latest_update_time_ = 0;
+  latest_update_time_ = SMILTime();
   UpdateAnimationsAndScheduleFrameIfNeeded(elapsed);
 }
 
@@ -437,7 +436,7 @@
 // A helper function to fetch the next interesting time after document_time
 SMILTime SMILTimeContainer::NextInterestingTime(
     SMILTime presentation_time) const {
-  DCHECK_GE(presentation_time, 0);
+  DCHECK_GE(presentation_time, SMILTime());
   SMILTime next_interesting_time = SMILTime::Indefinite();
   for (const auto& sandwich : scheduled_animations_) {
     next_interesting_time =
@@ -461,7 +460,7 @@
 
 void SMILTimeContainer::UpdateIntervals(SMILTime document_time) {
   DCHECK(document_time.IsFinite());
-  DCHECK(document_time >= 0.0);
+  DCHECK_GE(document_time, SMILTime());
   do {
     intervals_dirty_ = false;
 
@@ -549,7 +548,7 @@
 }
 
 void SMILTimeContainer::AdvanceFrameForTesting() {
-  const SMILTime kFrameDuration = 0.025;
+  const SMILTime kFrameDuration = SMILTime::FromSecondsD(0.025);
   SetElapsed(Elapsed() + kFrameDuration);
 }
 
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
index c97802f..12df1fd 100644
--- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
+++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
@@ -222,7 +222,7 @@
       document_order_index_(0),
       cached_dur_(kInvalidCachedTime),
       cached_repeat_dur_(kInvalidCachedTime),
-      cached_repeat_count_(kInvalidCachedTime),
+      cached_repeat_count_(SMILRepeatCount::Invalid()),
       cached_min_(kInvalidCachedTime),
       cached_max_(kInvalidCachedTime),
       interval_has_changed_(false) {
@@ -359,9 +359,12 @@
     result = parse.Left(parse.length() - 1).ToDouble(&ok);
   else
     result = parse.ToDouble(&ok);
-  if (!ok || !SMILTime(result).IsFinite())
+  if (!ok)
     return SMILTime::Unresolved();
-  return result;
+  SMILTime offset_value = SMILTime::FromSecondsD(result);
+  if (!offset_value.IsFinite())
+    return SMILTime::Unresolved();
+  return offset_value;
 }
 
 SMILTime SVGSMILElement::ParseClockValue(const String& data) {
@@ -392,28 +395,31 @@
     if (!ok)
       return SMILTime::Unresolved();
     result += parse.Substring(3).ToDouble(&ok);
-  } else
+  } else {
     return ParseOffsetValue(parse);
+  }
 
-  if (!ok || !SMILTime(result).IsFinite())
+  if (!ok)
     return SMILTime::Unresolved();
-  return result;
+  SMILTime clock_value = SMILTime::FromSecondsD(result);
+  if (!clock_value.IsFinite())
+    return SMILTime::Unresolved();
+  return clock_value;
 }
 
 bool SVGSMILElement::ParseCondition(const String& value,
                                     BeginOrEnd begin_or_end) {
   String parse_string = value.StripWhiteSpace();
 
-  double sign = 1.;
+  bool is_negated = false;
   bool ok;
   wtf_size_t pos = parse_string.find('+');
   if (pos == kNotFound) {
     pos = parse_string.find('-');
-    if (pos != kNotFound)
-      sign = -1.;
+    is_negated = pos != kNotFound;
   }
   String condition_string;
-  SMILTime offset = 0;
+  SMILTime offset;
   if (pos == kNotFound)
     condition_string = parse_string;
   else {
@@ -422,7 +428,8 @@
     offset = ParseOffsetValue(offset_string);
     if (offset.IsUnresolved())
       return false;
-    offset = offset * sign;
+    if (is_negated)
+      offset = -offset;
   }
   if (condition_string.IsEmpty())
     return false;
@@ -553,7 +560,7 @@
   } else if (attr_name == svg_names::kRepeatDurAttr) {
     cached_repeat_dur_ = kInvalidCachedTime;
   } else if (attr_name == svg_names::kRepeatCountAttr) {
-    cached_repeat_count_ = kInvalidCachedTime;
+    cached_repeat_count_ = SMILRepeatCount::Invalid();
   } else if (attr_name == svg_names::kMinAttr) {
     cached_min_ = kInvalidCachedTime;
   } else if (attr_name == svg_names::kMaxAttr) {
@@ -629,7 +636,7 @@
 }
 
 SMILTime SVGSMILElement::Elapsed() const {
-  return time_container_ ? time_container_->Elapsed() : 0;
+  return time_container_ ? time_container_->Elapsed() : SMILTime();
 }
 
 SMILTime SVGSMILElement::BeginTimeForPrioritization(
@@ -646,7 +653,8 @@
     return cached_dur_;
   const AtomicString& value = FastGetAttribute(svg_names::kDurAttr);
   SMILTime clock_value = ParseClockValue(value);
-  return cached_dur_ = clock_value <= 0 ? SMILTime::Unresolved() : clock_value;
+  return cached_dur_ =
+             clock_value <= SMILTime() ? SMILTime::Unresolved() : clock_value;
 }
 
 SMILTime SVGSMILElement::RepeatDur() const {
@@ -654,28 +662,29 @@
     return cached_repeat_dur_;
   const AtomicString& value = FastGetAttribute(svg_names::kRepeatDurAttr);
   SMILTime clock_value = ParseClockValue(value);
-  cached_repeat_dur_ = clock_value <= 0 ? SMILTime::Unresolved() : clock_value;
+  cached_repeat_dur_ =
+      clock_value <= SMILTime() ? SMILTime::Unresolved() : clock_value;
   return cached_repeat_dur_;
 }
 
-// So a count is not really a time but let just all pretend we did not notice.
-SMILTime SVGSMILElement::RepeatCount() const {
-  if (cached_repeat_count_ != kInvalidCachedTime)
-    return cached_repeat_count_;
-  SMILTime computed_repeat_count = SMILTime::Unresolved();
-  const AtomicString& value = FastGetAttribute(svg_names::kRepeatCountAttr);
-  if (!value.IsNull()) {
-    DEFINE_STATIC_LOCAL(const AtomicString, indefinite_value, ("indefinite"));
-    if (value == indefinite_value) {
-      computed_repeat_count = SMILTime::Indefinite();
-    } else {
-      bool ok;
-      double result = value.ToDouble(&ok);
-      if (ok && result > 0)
-        computed_repeat_count = result;
-    }
+static SMILRepeatCount ParseRepeatCount(const AtomicString& value) {
+  if (value.IsNull())
+    return SMILRepeatCount::Unspecified();
+  if (value == "indefinite")
+    return SMILRepeatCount::Indefinite();
+  bool ok;
+  double result = value.ToDouble(&ok);
+  if (ok && result > 0)
+    return SMILRepeatCount::Numeric(result);
+  return SMILRepeatCount::Unspecified();
+}
+
+SMILRepeatCount SVGSMILElement::RepeatCount() const {
+  if (!cached_repeat_count_.IsValid()) {
+    cached_repeat_count_ =
+        ParseRepeatCount(FastGetAttribute(svg_names::kRepeatCountAttr));
   }
-  cached_repeat_count_ = computed_repeat_count;
+  DCHECK(cached_repeat_count_.IsValid());
   return cached_repeat_count_;
 }
 
@@ -684,7 +693,7 @@
     return cached_max_;
   const AtomicString& value = FastGetAttribute(svg_names::kMaxAttr);
   SMILTime result = ParseClockValue(value);
-  return cached_max_ = (result.IsUnresolved() || result <= 0)
+  return cached_max_ = (result.IsUnresolved() || result <= SMILTime())
                            ? SMILTime::Indefinite()
                            : result;
 }
@@ -694,7 +703,9 @@
     return cached_min_;
   const AtomicString& value = FastGetAttribute(svg_names::kMinAttr);
   SMILTime result = ParseClockValue(value);
-  return cached_min_ = (result.IsUnresolved() || result < 0) ? 0 : result;
+  return cached_min_ = (result.IsUnresolved() || result < SMILTime())
+                           ? SMILTime()
+                           : result;
 }
 
 SMILTime SVGSMILElement::SimpleDuration() const {
@@ -720,7 +731,7 @@
                                      SMILTime time,
                                      SMILTimeWithOrigin::Origin origin) {
   SMILTime current_presentation_time =
-      time_container_ ? time_container_->CurrentDocumentTime() : 0;
+      time_container_ ? time_container_->CurrentDocumentTime() : SMILTime();
   DCHECK(!current_presentation_time.IsUnresolved());
   SMILTimeWithOrigin time_with_origin(time, origin);
   // Ignore new instance times for 'end' if the element is not active
@@ -770,14 +781,14 @@
 SMILTime SVGSMILElement::RepeatingDuration() const {
   // Computing the active duration
   // http://www.w3.org/TR/SMIL2/smil-timing.html#Timing-ComputingActiveDur
-  SMILTime repeat_count = RepeatCount();
+  SMILRepeatCount repeat_count = RepeatCount();
   SMILTime repeat_dur = RepeatDur();
   SMILTime simple_duration = SimpleDuration();
   if (!simple_duration ||
-      (repeat_dur.IsUnresolved() && repeat_count.IsUnresolved()))
+      (repeat_dur.IsUnresolved() && repeat_count.IsUnspecified()))
     return simple_duration;
   repeat_dur = std::min(repeat_dur, SMILTime::Indefinite());
-  SMILTime repeat_count_duration = simple_duration * repeat_count;
+  SMILTime repeat_count_duration = simple_duration.Repeat(repeat_count);
   if (!repeat_count_duration.IsUnresolved())
     return std::min(repeat_dur, repeat_count_duration);
   return repeat_dur;
@@ -789,7 +800,7 @@
   // http://www.w3.org/TR/SMIL2/smil-timing.html#Timing-ComputingActiveDur
   SMILTime preliminary_active_duration;
   if (!resolved_end.IsUnresolved() && Dur().IsUnresolved() &&
-      RepeatDur().IsUnresolved() && RepeatCount().IsUnresolved())
+      RepeatDur().IsUnresolved() && RepeatCount().IsUnspecified())
     preliminary_active_duration = resolved_end - resolved_begin;
   else if (!resolved_end.IsFinite())
     preliminary_active_duration = RepeatingDuration();
@@ -802,7 +813,7 @@
   if (min_value > max_value) {
     // Ignore both.
     // http://www.w3.org/TR/2001/REC-smil-animation-20010904/#MinMax
-    min_value = 0;
+    min_value = SMILTime();
     max_value = SMILTime::Indefinite();
   }
   return resolved_begin +
@@ -836,7 +847,7 @@
       }
       temp_end = ResolveActiveEnd(temp_begin, temp_end);
     }
-    if (!first || (temp_end > 0 || (!temp_begin && !temp_end)))
+    if (!first || (temp_end > SMILTime() || (!temp_begin && !temp_end)))
       return SMILInterval(temp_begin, temp_end);
 
     begin_after = temp_end;
@@ -871,7 +882,7 @@
 }
 
 SMILTime SVGSMILElement::NextInterestingTime(SMILTime presentation_time) const {
-  DCHECK_GE(presentation_time, 0);
+  DCHECK_GE(presentation_time, SMILTime());
   SMILTime next_interesting_interval_time = SMILTime::Indefinite();
   if (interval_.BeginsAfter(presentation_time)) {
     next_interesting_interval_time = interval_.begin;
@@ -902,7 +913,7 @@
   // These break because the updates land ON THE SAME TIMES as the
   // instance times. And the animation cannot then get a new interval
   // from that instance time.
-  const float half_ms = 0.0005;
+  const SMILTime half_ms = SMILTime::FromSecondsD(0.0005);
   const SMILTime instance_time =
       FindInstanceTime(kBegin, presentation_time, false) - half_ms;
   if (presentation_time < instance_time)
@@ -1208,8 +1219,9 @@
           // If the STAPIT algorithm works, the current document
           // time will be accurate. So this event should be sent
           // correctly.
-          SMILTime base_time =
-              time_container_ ? time_container_->CurrentDocumentTime() : 0;
+          SMILTime base_time = time_container_
+                                   ? time_container_->CurrentDocumentTime()
+                                   : SMILTime();
           time = base_time + condition->Offset();
         }
       }
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
index 9cae94d4..f7b4b62 100644
--- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
+++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
@@ -27,6 +27,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SVG_SMIL_ELEMENT_H_
 
 #include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/svg/animation/smil_repeat_count.h"
 #include "third_party/blink/renderer/core/svg/animation/smil_time.h"
 #include "third_party/blink/renderer/core/svg/svg_element.h"
 #include "third_party/blink/renderer/core/svg/svg_tests.h"
@@ -74,7 +75,7 @@
 
   SMILTime Dur() const;
   SMILTime RepeatDur() const;
-  SMILTime RepeatCount() const;
+  SMILRepeatCount RepeatCount() const;
   SMILTime MaxValue() const;
   SMILTime MinValue() const;
 
@@ -143,8 +144,8 @@
   enum BeginOrEnd { kBegin, kEnd };
 
   void IntervalIsDirty() {
-    interval_.begin = 0.0;
-    interval_.end = 0.0;
+    interval_.begin = SMILTime();
+    interval_.end = SMILTime();
   }
 
   void AddInstanceTime(
@@ -292,7 +293,7 @@
 
   mutable SMILTime cached_dur_;
   mutable SMILTime cached_repeat_dur_;
-  mutable SMILTime cached_repeat_count_;
+  mutable SMILRepeatCount cached_repeat_count_;
   mutable SMILTime cached_min_;
   mutable SMILTime cached_max_;
 
diff --git a/third_party/blink/renderer/core/svg/svg_animation_element.cc b/third_party/blink/renderer/core/svg/svg_animation_element.cc
index 0cf6b8da..e945e159 100644
--- a/third_party/blink/renderer/core/svg/svg_animation_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_animation_element.cc
@@ -261,13 +261,14 @@
 
 void SVGAnimationElement::beginElementAt(float offset) {
   DCHECK(std::isfinite(offset));
-  AddInstanceTime(kBegin, Elapsed() + offset,
+  AddInstanceTime(kBegin, Elapsed() + SMILTime::FromSecondsD(offset),
                   SMILTimeWithOrigin::kScriptOrigin);
 }
 
 void SVGAnimationElement::endElementAt(float offset) {
   DCHECK(std::isfinite(offset));
-  AddInstanceTime(kEnd, Elapsed() + offset, SMILTimeWithOrigin::kScriptOrigin);
+  AddInstanceTime(kEnd, Elapsed() + SMILTime::FromSecondsD(offset),
+                  SMILTimeWithOrigin::kScriptOrigin);
 }
 
 void SVGAnimationElement::UpdateAnimationMode() {
@@ -400,7 +401,7 @@
   gfx::CubicBezier bezier = key_splines_[spline_index];
   SMILTime duration = SimpleDuration();
   if (!duration.IsFinite())
-    duration = 100.0;
+    duration = SMILTime::FromSecondsD(100.0);
   return clampTo<float>(
       bezier.SolveWithEpsilon(percent, SolveEpsilon(duration.InSecondsF())));
 }
diff --git a/third_party/blink/renderer/core/svg/svg_svg_element.cc b/third_party/blink/renderer/core/svg/svg_svg_element.cc
index 85d095b..3326341 100644
--- a/third_party/blink/renderer/core/svg/svg_svg_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_svg_element.cc
@@ -564,8 +564,7 @@
 
 void SVGSVGElement::setCurrentTime(float seconds) {
   DCHECK(std::isfinite(seconds));
-  seconds = max(seconds, 0.0f);
-  time_container_->SetElapsed(seconds);
+  time_container_->SetElapsed(SMILTime::FromSecondsD(std::max(seconds, 0.0f)));
 }
 
 bool SVGSVGElement::SelfHasRelativeLengths() const {
diff --git a/third_party/blink/renderer/core/testing/dictionary_test.cc b/third_party/blink/renderer/core/testing/dictionary_test.cc
index c702490..368c08dd 100644
--- a/third_party/blink/renderer/core/testing/dictionary_test.cc
+++ b/third_party/blink/renderer/core/testing/dictionary_test.cc
@@ -297,11 +297,8 @@
 void DictionaryTest::Trace(blink::Visitor* visitor) {
   visitor->Trace(element_member_);
   visitor->Trace(element_or_null_member_);
-  visitor->Trace(object_member_);
-  visitor->Trace(object_or_null_member_with_default_);
   visitor->Trace(double_or_string_sequence_member_);
   visitor->Trace(event_target_or_null_member_);
-  visitor->Trace(any_member_);
   visitor->Trace(callback_function_member_);
   ScriptWrappable::Trace(visitor);
 }
diff --git a/third_party/blink/renderer/core/timing/performance_long_task_timing.cc b/third_party/blink/renderer/core/timing/performance_long_task_timing.cc
index 73d7f79..06d932d 100644
--- a/third_party/blink/renderer/core/timing/performance_long_task_timing.cc
+++ b/third_party/blink/renderer/core/timing/performance_long_task_timing.cc
@@ -56,7 +56,7 @@
 
 void PerformanceLongTaskTiming::BuildJSONValue(V8ObjectBuilder& builder) const {
   PerformanceEntry::BuildJSONValue(builder);
-  HeapVector<ScriptValue> attribution;
+  Vector<ScriptValue> attribution;
   for (unsigned i = 0; i < attribution_.size(); i++) {
     attribution.push_back(
         attribution_[i]->toJSONForBinding(builder.GetScriptState()));
diff --git a/third_party/blink/renderer/core/timing/performance_resource_timing.cc b/third_party/blink/renderer/core/timing/performance_resource_timing.cc
index e503a92..2ffba14 100644
--- a/third_party/blink/renderer/core/timing/performance_resource_timing.cc
+++ b/third_party/blink/renderer/core/timing/performance_resource_timing.cc
@@ -358,7 +358,7 @@
   builder.AddNumber("encodedBodySize", encodedBodySize());
   builder.AddNumber("decodedBodySize", decodedBodySize());
 
-  HeapVector<ScriptValue> server_timing;
+  Vector<ScriptValue> server_timing;
   server_timing.ReserveCapacity(server_timing_.size());
   for (unsigned i = 0; i < server_timing_.size(); i++) {
     server_timing.push_back(
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index 1d63c7a..eabed31 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -172,7 +172,7 @@
 
 void DedicatedWorker::postMessage(ScriptState* script_state,
                                   const ScriptValue& message,
-                                  HeapVector<ScriptValue>& transfer,
+                                  Vector<ScriptValue>& transfer,
                                   ExceptionState& exception_state) {
   PostMessageOptions* options = PostMessageOptions::Create();
   if (!transfer.IsEmpty())
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_party/blink/renderer/core/workers/dedicated_worker.h
index 6b80c553..4e56d500 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.h
@@ -66,7 +66,7 @@
 
   void postMessage(ScriptState*,
                    const ScriptValue& message,
-                   HeapVector<ScriptValue>& transfer,
+                   Vector<ScriptValue>& transfer,
                    ExceptionState&);
   void postMessage(ScriptState*,
                    const ScriptValue& message,
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
index fedd0a71..515a989 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
@@ -217,7 +217,7 @@
 
 void DedicatedWorkerGlobalScope::postMessage(ScriptState* script_state,
                                              const ScriptValue& message,
-                                             HeapVector<ScriptValue>& transfer,
+                                             Vector<ScriptValue>& transfer,
                                              ExceptionState& exception_state) {
   PostMessageOptions* options = PostMessageOptions::Create();
   if (!transfer.IsEmpty())
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
index 9aa91ebc..ef1d837 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
@@ -97,7 +97,7 @@
   const String name() const;
   void postMessage(ScriptState*,
                    const ScriptValue& message,
-                   HeapVector<ScriptValue>& transfer,
+                   Vector<ScriptValue>& transfer,
                    ExceptionState&);
   void postMessage(ScriptState*,
                    const ScriptValue& message,
diff --git a/third_party/blink/renderer/devtools/front_end/audits/AuditsProtocolService.js b/third_party/blink/renderer/devtools/front_end/audits/AuditsProtocolService.js
index 67f7f9e..f2e677f0 100644
--- a/third_party/blink/renderer/devtools/front_end/audits/AuditsProtocolService.js
+++ b/third_party/blink/renderer/devtools/front_end/audits/AuditsProtocolService.js
@@ -54,7 +54,7 @@
   }
 
   /**
-   * @param {!Object} message
+   * @param {(!Object|string)} message
    */
   _dispatchProtocolMessage(message) {
     this._send('dispatchProtocolMessage', {message: JSON.stringify(message)});
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js
index 44c4d83..d74e9e1 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js
@@ -274,7 +274,6 @@
   }
 
   /**
-   * @override
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @param {number} lineNumber
    * @return {boolean}
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js b/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js
index 2128eca..d3023d81 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js
@@ -215,7 +215,7 @@
   /**
    * @override
    */
-  close() {
+  async close() {
     this._closed = true;
     if (this._writeCallbacks.length)
       return;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js
index c26e274..e3c7e75 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js
@@ -389,7 +389,7 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {
     return this._resources.firstValue().requestContent();
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js
index 1b8877aa..a6cca5be 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js
@@ -325,7 +325,7 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {
     return this._headers.firstValue().originalContentProvider().requestContent();
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js b/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js
index 9d74521..f6cba35 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js
@@ -82,7 +82,7 @@
       Common.console.error('Failed to read from temp file: ' + error.message);
     }
 
-    return reader.result;
+    return /** @type {?string} */ (reader.result);
   }
 
   /**
diff --git a/third_party/blink/renderer/devtools/front_end/common/ContentProvider.js b/third_party/blink/renderer/devtools/front_end/common/ContentProvider.js
index b5fdf23..349adfe 100644
--- a/third_party/blink/renderer/devtools/front_end/common/ContentProvider.js
+++ b/third_party/blink/renderer/devtools/front_end/common/ContentProvider.js
@@ -49,7 +49,7 @@
   contentEncoded() {},
 
   /**
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {},
 
diff --git a/third_party/blink/renderer/devtools/front_end/common/ModuleExtensionInterfaces.js b/third_party/blink/renderer/devtools/front_end/common/ModuleExtensionInterfaces.js
index ce14692c..5120202 100644
--- a/third_party/blink/renderer/devtools/front_end/common/ModuleExtensionInterfaces.js
+++ b/third_party/blink/renderer/devtools/front_end/common/ModuleExtensionInterfaces.js
@@ -91,6 +91,9 @@
 Common.Runnable = function() {};
 
 Common.Runnable.prototype = {
+  /**
+   * @return {!Promise}
+   */
   run() {}
 };
 
diff --git a/third_party/blink/renderer/devtools/front_end/common/Object.js b/third_party/blink/renderer/devtools/front_end/common/Object.js
index 2156cf68..9f5e522 100644
--- a/third_party/blink/renderer/devtools/front_end/common/Object.js
+++ b/third_party/blink/renderer/devtools/front_end/common/Object.js
@@ -29,13 +29,13 @@
  */
 Common.Object = class {
   constructor() {
-    /** @type {(!Map<symbol, !Array<!Common.Object._listenerCallbackTuple>>|undefined)} */
+    /** @type {(!Map<string|symbol, !Array<!Common.Object._listenerCallbackTuple>>|undefined)} */
     this._listeners;
   }
 
   /**
    * @override
-   * @param {symbol} eventType
+   * @param {string|symbol} eventType
    * @param {function(!Common.Event)} listener
    * @param {!Object=} thisObject
    * @return {!Common.EventTarget.EventDescriptor}
@@ -69,7 +69,7 @@
 
   /**
    * @override
-   * @param {symbol} eventType
+   * @param {string|symbol} eventType
    * @param {function(!Common.Event)} listener
    * @param {!Object=} thisObject
    */
@@ -92,7 +92,7 @@
 
   /**
    * @override
-   * @param {symbol} eventType
+   * @param {string|symbol} eventType
    * @return {boolean}
    */
   hasEventListeners(eventType) {
@@ -101,7 +101,7 @@
 
   /**
    * @override
-   * @param {symbol} eventType
+   * @param {string|symbol} eventType
    * @param {*=} eventData
    */
   dispatchEventToListeners(eventType, eventData) {
@@ -133,7 +133,7 @@
 Common.EventTarget = function() {};
 
 /**
- * @typedef {!{eventTarget: !Common.EventTarget, eventType: symbol, thisObject: (!Object|undefined), listener: function(!Common.Event)}}
+ * @typedef {!{eventTarget: !Common.EventTarget, eventType: (string|symbol), thisObject: (!Object|undefined), listener: function(!Common.Event)}}
  */
 Common.EventTarget.EventDescriptor;
 
@@ -163,7 +163,7 @@
   once(eventType) {},
 
   /**
-   * @param {symbol} eventType
+   * @param {string|symbol} eventType
    * @param {function(!Common.Event)} listener
    * @param {!Object=} thisObject
    */
diff --git a/third_party/blink/renderer/devtools/front_end/common/OutputStream.js b/third_party/blink/renderer/devtools/front_end/common/OutputStream.js
index a4fa83b2..1e72025 100644
--- a/third_party/blink/renderer/devtools/front_end/common/OutputStream.js
+++ b/third_party/blink/renderer/devtools/front_end/common/OutputStream.js
@@ -14,6 +14,9 @@
    */
   write(data) {},
 
+  /**
+   * @return {!Promise}
+   */
   close() {}
 };
 
diff --git a/third_party/blink/renderer/devtools/front_end/common/ParsedURL.js b/third_party/blink/renderer/devtools/front_end/common/ParsedURL.js
index eea78c5..9bdc4692 100644
--- a/third_party/blink/renderer/devtools/front_end/common/ParsedURL.js
+++ b/third_party/blink/renderer/devtools/front_end/common/ParsedURL.js
@@ -329,7 +329,7 @@
       return this._dataURLDisplayName;
     if (!this.isDataURL())
       return '';
-    this._dataURLDisplayName = this.url.trimEnd(20);
+    this._dataURLDisplayName = this.url.trimEndWithMaxLength(20);
     return this._dataURLDisplayName;
   }
 
diff --git a/third_party/blink/renderer/devtools/front_end/common/StaticContentProvider.js b/third_party/blink/renderer/devtools/front_end/common/StaticContentProvider.js
index f871b5b3..96fd157 100644
--- a/third_party/blink/renderer/devtools/front_end/common/StaticContentProvider.js
+++ b/third_party/blink/renderer/devtools/front_end/common/StaticContentProvider.js
@@ -9,7 +9,7 @@
   /**
    * @param {string} contentURL
    * @param {!Common.ResourceType} contentType
-   * @param {function():!Promise<?string>} lazyContent
+   * @param {function():!Promise<string>} lazyContent
    */
   constructor(contentURL, contentType, lazyContent) {
     this._contentURL = contentURL;
@@ -54,7 +54,7 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {
     return this._lazyContent();
diff --git a/third_party/blink/renderer/devtools/front_end/console/ConsoleContextSelector.js b/third_party/blink/renderer/devtools/front_end/console/ConsoleContextSelector.js
index 8252942..d21cf5a 100644
--- a/third_party/blink/renderer/devtools/front_end/console/ConsoleContextSelector.js
+++ b/third_party/blink/renderer/devtools/front_end/console/ConsoleContextSelector.js
@@ -248,7 +248,7 @@
     const element = createElementWithClass('div');
     const shadowRoot = UI.createShadowRootWithCoreStyles(element, 'console/consoleContextSelector.css');
     const title = shadowRoot.createChild('div', 'title');
-    title.createTextChild(this.titleFor(item).trimEnd(100));
+    title.createTextChild(this.titleFor(item).trimEndWithMaxLength(100));
     const subTitle = shadowRoot.createChild('div', 'subtitle');
     const badgeElement = this._badgeFor(item);
     if (badgeElement) {
diff --git a/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js b/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js
index 7367b02..0db3def 100644
--- a/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js
+++ b/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js
@@ -259,7 +259,7 @@
     this._lastNode = node || null;
 
     const isError = result && result.exceptionDetails && !SDK.RuntimeModel.isSideEffectFailure(result);
-    this._pinElement.classList.toggle('error-level', isError);
+    this._pinElement.classList.toggle('error-level', !!isError);
   }
 };
 
diff --git a/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js b/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js
index bc60825..a6e2c496 100644
--- a/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js
+++ b/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js
@@ -798,7 +798,7 @@
           if (type === 'string' || subtype === 'regexp')
             description = object.description.trimMiddle(maxLength);
           else
-            description = object.description.trimEnd(maxLength);
+            description = object.description.trimEndWithMaxLength(maxLength);
         }
         rootElement.appendChild(this._previewFormatter.renderPropertyPreview(type, subtype, description));
       }
diff --git a/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js b/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js
index 298d756..35ac3d9 100644
--- a/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js
+++ b/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js
@@ -546,7 +546,7 @@
     if (this._blockedReasons) {
       for (const blockedReason of this._blockedReasons) {
         const attributeMatches = blockedReason.attribute === /** @type {!SDK.Cookie.Attributes} */ (columnId);
-        const useNameColumn = !blockedReason.attribute && columnId === SDK.Cookie.Attribute.Name;
+        const useNameColumn = !blockedReason.attribute && columnId === SDK.Cookie.Attributes.Name;
         if (attributeMatches || useNameColumn) {
           if (blockedReasonString)
             blockedReasonString += '\n';
diff --git a/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js b/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js
index 5f02ea2..b0cb4c0 100644
--- a/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js
+++ b/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js
@@ -151,8 +151,9 @@
         for (const range of func.ranges)
           ranges.push(range);
       }
-      const subentry =
-          this._addCoverage(script, script.contentLength, script.lineOffset, script.columnOffset, ranges, type);
+      const subentry = this._addCoverage(
+          script, script.contentLength, script.lineOffset, script.columnOffset, ranges,
+          /** @type {!Coverage.CoverageType} */ (type));
       if (subentry)
         updatedEntries.push(subentry);
     }
diff --git a/third_party/blink/renderer/devtools/front_end/coverage/coverageListView.css b/third_party/blink/renderer/devtools/front_end/coverage/coverageListView.css
index 3b915e2..438c240 100644
--- a/third_party/blink/renderer/devtools/front_end/coverage/coverageListView.css
+++ b/third_party/blink/renderer/devtools/front_end/coverage/coverageListView.css
@@ -43,11 +43,11 @@
 }
 
 .data-grid td .bar-unused-size {
-  background-color: #E57373;
+  background-color: #EE442F;
 }
 
 .data-grid td .bar-used-size {
-  background-color: #81C784;
+  background-color: #63ACBE;
 }
 
 .data-grid td .percent-value {
diff --git a/third_party/blink/renderer/devtools/front_end/data_grid/DataGrid.js b/third_party/blink/renderer/devtools/front_end/data_grid/DataGrid.js
index 33af6eb..f0dbc4b 100644
--- a/third_party/blink/renderer/devtools/front_end/data_grid/DataGrid.js
+++ b/third_party/blink/renderer/devtools/front_end/data_grid/DataGrid.js
@@ -131,7 +131,7 @@
    */
   static setElementText(element, newText, longText) {
     if (longText && newText.length > 1000) {
-      element.textContent = newText.trimEnd(1000);
+      element.textContent = newText.trimEndWithMaxLength(1000);
       element.title = newText;
       element[DataGrid.DataGrid._longTextSymbol] = newText;
     } else {
@@ -1290,7 +1290,7 @@
     super();
     /** @type {?Element} */
     this._element = null;
-    /** @type {boolean} */
+    /** @protected @type {boolean} @suppress {accessControls} */
     this._expanded = false;
     /** @type {boolean} */
     this._selected = false;
@@ -2095,4 +2095,4 @@
       this.element.removeChild(dataGrid.element);
     this._dataGrids = [];
   }
-};
+};
\ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/data_grid/ViewportDataGrid.js b/third_party/blink/renderer/devtools/front_end/data_grid/ViewportDataGrid.js
index 90a0ed1..d60f61f 100644
--- a/third_party/blink/renderer/devtools/front_end/data_grid/ViewportDataGrid.js
+++ b/third_party/blink/renderer/devtools/front_end/data_grid/ViewportDataGrid.js
@@ -17,10 +17,13 @@
     super(columnsArray, editCallback, deleteCallback, refreshCallback);
 
     this._onScrollBound = this._onScroll.bind(this);
-    this._scrollContainer.addEventListener('scroll', this._onScrollBound, true);
+    this.scrollContainer.addEventListener('scroll', this._onScrollBound, true);
 
     /** @type {!Array.<!DataGrid.ViewportDataGridNode>} */
     this._visibleNodes = [];
+    /**
+     * @type {boolean}
+     */
     this._inline = false;
 
     this._stickToBottom = false;
@@ -58,9 +61,12 @@
    * @param {!Element} scrollContainer
    */
   setScrollContainer(scrollContainer) {
-    this._scrollContainer.removeEventListener('scroll', this._onScrollBound, true);
+    this.scrollContainer.removeEventListener('scroll', this._onScrollBound, true);
+    /**
+     * @suppress {accessControls}
+     */
     this._scrollContainer = scrollContainer;
-    this._scrollContainer.addEventListener('scroll', this._onScrollBound, true);
+    this.scrollContainer.addEventListener('scroll', this._onScrollBound, true);
   }
 
   /**
@@ -68,7 +74,7 @@
    */
   onResize() {
     if (this._stickToBottom)
-      this._scrollContainer.scrollTop = this._scrollContainer.scrollHeight - this._scrollContainer.clientHeight;
+      this.scrollContainer.scrollTop = this.scrollContainer.scrollHeight - this.scrollContainer.clientHeight;
     this.scheduleUpdate();
     super.onResize();
   }
@@ -84,8 +90,8 @@
    * @param {?Event} event
    */
   _onScroll(event) {
-    this._stickToBottom = this._scrollContainer.isScrolledToBottom();
-    if (this._lastScrollTop !== this._scrollContainer.scrollTop)
+    this._stickToBottom = this.scrollContainer.isScrolledToBottom();
+    if (this._lastScrollTop !== this.scrollContainer.scrollTop)
       this.scheduleUpdate(true);
   }
 
@@ -101,7 +107,7 @@
    */
   scheduleUpdate(isFromUser) {
     if (this._stickToBottom && isFromUser)
-      this._stickToBottom = this._scrollContainer.isScrolledToBottom();
+      this._stickToBottom = this.scrollContainer.isScrolledToBottom();
     this._updateIsFromUser = this._updateIsFromUser || isFromUser;
     if (this._updateAnimationFrameId)
       return;
@@ -177,8 +183,8 @@
       delete this._updateAnimationFrameId;
     }
 
-    const clientHeight = this._scrollContainer.clientHeight;
-    let scrollTop = this._scrollContainer.scrollTop;
+    const clientHeight = this.scrollContainer.clientHeight;
+    let scrollTop = this.scrollContainer.scrollTop;
     const currentScrollTop = scrollTop;
     const maxScrollTop = Math.max(0, this._contentHeight() - clientHeight);
     if (!this._updateIsFromUser && this._stickToBottom)
@@ -225,7 +231,7 @@
     this.setVerticalPadding(viewportState.topPadding, viewportState.bottomPadding);
     this._lastScrollTop = scrollTop;
     if (scrollTop !== currentScrollTop)
-      this._scrollContainer.scrollTop = scrollTop;
+      this.scrollContainer.scrollTop = scrollTop;
     const contentFits =
         viewportState.contentHeight <= clientHeight && viewportState.topPadding + viewportState.bottomPadding === 0;
     if (contentFits !== this.element.classList.contains('data-grid-fits-viewport')) {
@@ -249,17 +255,20 @@
       fromY += nodes[i].nodeSelfHeight();
     const toY = fromY + node.nodeSelfHeight();
 
-    let scrollTop = this._scrollContainer.scrollTop;
+    let scrollTop = this.scrollContainer.scrollTop;
     if (scrollTop > fromY) {
       scrollTop = fromY;
       this._stickToBottom = false;
-    } else if (scrollTop + this._scrollContainer.offsetHeight < toY) {
-      scrollTop = toY - this._scrollContainer.offsetHeight;
+    } else if (scrollTop + this.scrollContainer.offsetHeight < toY) {
+      scrollTop = toY - this.scrollContainer.offsetHeight;
     }
-    this._scrollContainer.scrollTop = scrollTop;
+    this.scrollContainer.scrollTop = scrollTop;
   }
 };
 
+/**
+ * @override @suppress {checkPrototypalTypes} @enum {symbol}
+ */
 DataGrid.ViewportDataGrid.Events = {
   ViewportCalculated: Symbol('ViewportCalculated')
 };
@@ -342,7 +351,7 @@
       }
       const node = children[depth][counters[depth]++];
       flatNodes.push(node);
-      if (node._expanded && node.children.length) {
+      if (node.expanded && node.children.length) {
         depth++;
         children[depth] = node.children;
         counters[depth] = 0;
@@ -376,7 +385,7 @@
       this.setHasChildren(true);
     this.children.splice(index, 0, child);
     child.recalculateSiblings(index);
-    if (this._expanded)
+    if (this.expanded)
       this.dataGrid.scheduleUpdateStructure();
   }
 
@@ -400,7 +409,7 @@
 
     if (!this.children.length)
       this.setHasChildren(false);
-    if (this._expanded)
+    if (this.expanded)
       this.dataGrid.scheduleUpdateStructure();
   }
 
@@ -415,7 +424,7 @@
       this.children[i]._unlink();
     this.children = [];
 
-    if (this._expanded)
+    if (this.expanded)
       this.dataGrid.scheduleUpdateStructure();
   }
 
@@ -429,9 +438,12 @@
    * @override
    */
   collapse() {
-    if (!this._expanded)
+    if (!this.expanded)
       return;
     this.clearFlatNodes();
+    /**
+     * @suppress {accessControls}
+     */
     this._expanded = false;
     if (this.existingElement())
       this.existingElement().classList.remove('expanded');
@@ -442,7 +454,7 @@
    * @override
    */
   expand() {
-    if (this._expanded)
+    if (this.expanded)
       return;
     this.dataGrid._stickToBottom = false;
     this.clearFlatNodes();
diff --git a/third_party/blink/renderer/devtools/front_end/devtools_compatibility.js b/third_party/blink/renderer/devtools/front_end/devtools_compatibility.js
index ff6cc6df..434e8605 100644
--- a/third_party/blink/renderer/devtools/front_end/devtools_compatibility.js
+++ b/third_party/blink/renderer/devtools/front_end/devtools_compatibility.js
@@ -1256,14 +1256,6 @@
         }
       });
 
-      // Document.prototype.createElementWithClass is a DevTools method, so we
-      // need to wait for DOMContentLoaded in order to override it.
-      if (window.document.head &&
-          (window.document.readyState === 'complete' || window.document.readyState === 'interactive'))
-        overrideCreateElementWithClass();
-      else
-        window.addEventListener('DOMContentLoaded', overrideCreateElementWithClass);
-
       function overrideCreateElementWithClass() {
         window.removeEventListener('DOMContentLoaded', overrideCreateElementWithClass);
 
@@ -1277,10 +1269,18 @@
           return element;
         };
       }
+
+      // Document.prototype.createElementWithClass is a DevTools method, so we
+      // need to wait for DOMContentLoaded in order to override it.
+      if (window.document.head &&
+          (window.document.readyState === 'complete' || window.document.readyState === 'interactive'))
+        overrideCreateElementWithClass();
+      else
+        window.addEventListener('DOMContentLoaded', overrideCreateElementWithClass);
     }
 
     // Custom Elements V0 polyfill
-    if (majorVersion <= 73 && !Document.prototype.registerElement) {
+    if (majorVersion <= 73 && !Document.prototype.hasOwnProperty('registerElement')) {
       const fakeRegistry = new Map();
       Document.prototype.registerElement = function(typeExtension, options) {
         const {prototype, extends: localName} = options;
diff --git a/third_party/blink/renderer/devtools/front_end/elements/ComputedStyleWidget.js b/third_party/blink/renderer/devtools/front_end/elements/ComputedStyleWidget.js
index 43d8b22..b0cd17b4 100644
--- a/third_party/blink/renderer/devtools/front_end/elements/ComputedStyleWidget.js
+++ b/third_party/blink/renderer/devtools/front_end/elements/ComputedStyleWidget.js
@@ -359,7 +359,7 @@
       child.hidden = !matched;
       hasMatch |= matched;
     }
-    this._noMatchesElement.classList.toggle('hidden', hasMatch);
+    this._noMatchesElement.classList.toggle('hidden', !!hasMatch);
   }
 };
 
diff --git a/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeElement.js b/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeElement.js
index 7cb30775..2f51fb3 100644
--- a/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeElement.js
+++ b/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeElement.js
@@ -511,7 +511,7 @@
 
     // Place it here so that all "Copy"-ing items stick together.
     const copyMenu = contextMenu.clipboardSection().appendSubMenuItem(Common.UIString('Copy'));
-    const createShortcut = UI.KeyboardShortcut.shortcutToString;
+    const createShortcut = UI.KeyboardShortcut.shortcutToString.bind(null);
     const modifier = UI.KeyboardShortcut.Modifiers.CtrlOrMeta;
     const treeOutline = this.treeOutline;
     let menuItem;
diff --git a/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js b/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js
index 9380824a..113e9577 100644
--- a/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js
+++ b/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js
@@ -1445,7 +1445,7 @@
 /** @typedef {{node: !SDK.DOMNode, isCut: boolean}} */
 Elements.ElementsTreeOutline.ClipboardData;
 
-/** @enum {symbol} */
+/** @override @suppress {checkPrototypalTypes} @enum {symbol} */
 Elements.ElementsTreeOutline.Events = {
   SelectedNodeChanged: Symbol('SelectedNodeChanged'),
   ElementsTreeUpdated: Symbol('ElementsTreeUpdated')
diff --git a/third_party/blink/renderer/devtools/front_end/elements/StylesSidebarPane.js b/third_party/blink/renderer/devtools/front_end/elements/StylesSidebarPane.js
index ff86ecbd..7ddc0a9 100644
--- a/third_party/blink/renderer/devtools/front_end/elements/StylesSidebarPane.js
+++ b/third_party/blink/renderer/devtools/front_end/elements/StylesSidebarPane.js
@@ -634,7 +634,7 @@
     let hasAnyVisibleBlock = false;
     for (const block of this._sectionBlocks)
       hasAnyVisibleBlock |= block.updateFilter();
-    this._noMatchesElement.classList.toggle('hidden', hasAnyVisibleBlock);
+    this._noMatchesElement.classList.toggle('hidden', !!hasAnyVisibleBlock);
   }
 
   /**
@@ -806,7 +806,7 @@
       hasAnyVisibleSection |= section._updateFilter();
     if (this._titleElement)
       this._titleElement.classList.toggle('hidden', !hasAnyVisibleSection);
-    return hasAnyVisibleSection;
+    return !!hasAnyVisibleSection;
   }
 
   /**
diff --git a/third_party/blink/renderer/devtools/front_end/elements/elementsTreeOutline.css b/third_party/blink/renderer/devtools/front_end/elements/elementsTreeOutline.css
index 6f81f43..d4dd6839 100644
--- a/third_party/blink/renderer/devtools/front_end/elements/elementsTreeOutline.css
+++ b/third_party/blink/renderer/devtools/front_end/elements/elementsTreeOutline.css
@@ -18,7 +18,7 @@
     word-wrap: break-word;
     position: relative;
     min-height: 15px;
-    line-height: 15px;
+    line-height: 1.36;
 }
 
 .elements-disclosure li.parent {
diff --git a/third_party/blink/renderer/devtools/front_end/emulation/DeviceModeWrapper.js b/third_party/blink/renderer/devtools/front_end/emulation/DeviceModeWrapper.js
index 742d0e1..dc0b3e7d 100644
--- a/third_party/blink/renderer/devtools/front_end/emulation/DeviceModeWrapper.js
+++ b/third_party/blink/renderer/devtools/front_end/emulation/DeviceModeWrapper.js
@@ -117,7 +117,8 @@
                 scale: 1
               });
             });
-            const clip = /** @type {!Protocol.Page.Viewport} */ (JSON.parse(result.object.value));
+            const clip =
+                /** @type {!Protocol.Page.Viewport} */ (JSON.parse(/** @type {string} */ (result.object.value)));
             const response = await node.domModel().target().pageAgent().invoke_getLayoutMetrics({});
             const page_zoom = !response[Protocol.Error] && response.visualViewport.zoom || 1;
             clip.x *= page_zoom;
diff --git a/third_party/blink/renderer/devtools/front_end/event_listeners/EventListenersUtils.js b/third_party/blink/renderer/devtools/front_end/event_listeners/EventListenersUtils.js
index b74ba91..1c43ba0 100644
--- a/third_party/blink/renderer/devtools/front_end/event_listeners/EventListenersUtils.js
+++ b/third_party/blink/renderer/devtools/front_end/event_listeners/EventListenersUtils.js
@@ -189,7 +189,7 @@
   function convertToInternalHandlers(pageInternalHandlersObject) {
     return SDK.RemoteArray.objectAsArray(pageInternalHandlersObject)
         .map(toTargetFunction)
-        .then(SDK.RemoteArray.createFromRemoteObjects);
+        .then(SDK.RemoteArray.createFromRemoteObjects.bind(null));
   }
 
   /**
diff --git a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionAPI.js b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionAPI.js
index 0d3b2ad2..367c4285 100644
--- a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionAPI.js
+++ b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionAPI.js
@@ -240,7 +240,7 @@
       return panels[name];
     }
     for (const panel in panels)
-      this.__defineGetter__(panel, panelGetter.bind(null, panel));
+      Object.defineProperty(this, panel, {get: panelGetter.bind(null, panel), enumerable: true});
     this.applyStyleSheet = function(styleSheet) {
       extensionServer.sendRequest({command: commands.ApplyStyleSheet, styleSheet: styleSheet});
     };
@@ -361,31 +361,27 @@
   const EventSink = declareInterfaceClass(EventSinkImpl);
   const ExtensionPanel = declareInterfaceClass(ExtensionPanelImpl);
   const ExtensionSidebarPane = declareInterfaceClass(ExtensionSidebarPaneImpl);
-  const PanelWithSidebar = declareInterfaceClass(PanelWithSidebarImpl);
+  /**
+   * @constructor
+   * @param {string} hostPanelName
+   */
+  const PanelWithSidebarClass = declareInterfaceClass(PanelWithSidebarImpl);
   const Request = declareInterfaceClass(RequestImpl);
   const Resource = declareInterfaceClass(ResourceImpl);
   const TraceSession = declareInterfaceClass(TraceSessionImpl);
 
-  /**
-   * @constructor
-   * @extends {PanelWithSidebar}
-   */
-  function ElementsPanel() {
-    PanelWithSidebar.call(this, 'elements');
+  class ElementsPanel extends PanelWithSidebarClass {
+    constructor() {
+      super('elements');
+    }
   }
 
-  ElementsPanel.prototype = {__proto__: PanelWithSidebar.prototype};
-
-  /**
-   * @constructor
-   * @extends {PanelWithSidebar}
-   */
-  function SourcesPanel() {
-    PanelWithSidebar.call(this, 'sources');
+  class SourcesPanel extends PanelWithSidebarClass {
+    constructor() {
+      super('sources');
+    }
   }
 
-  SourcesPanel.prototype = {__proto__: PanelWithSidebar.prototype};
-
   /**
    * @constructor
    * @extends {ExtensionViewImpl}
@@ -779,7 +775,7 @@
 
   // Only expose tabId on chrome.devtools.inspectedWindow, not webInspector.inspectedWindow.
   chrome.devtools.inspectedWindow = {};
-  chrome.devtools.inspectedWindow.__defineGetter__('tabId', getTabId);
+  Object.defineProperty(chrome.devtools.inspectedWindow, 'tabId', {get: getTabId});
   chrome.devtools.inspectedWindow.__proto__ = coreAPI.inspectedWindow;
   chrome.devtools.network = coreAPI.network;
   chrome.devtools.panels = coreAPI.panels;
diff --git a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js
index 290f1256..5953633 100644
--- a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js
+++ b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js
@@ -737,7 +737,7 @@
   /**
    * @param {string} eventTopic
    * @param {!Object} eventTarget
-   * @param {string} frontendEventType
+   * @param {symbol} frontendEventType
    * @param {function(!Common.Event)} handler
    */
   _registerAutosubscriptionHandler(eventTopic, eventTarget, frontendEventType, handler) {
@@ -749,7 +749,7 @@
   /**
    * @param {string} eventTopic
    * @param {!Function} modelClass
-   * @param {string} frontendEventType
+   * @param {symbol} frontendEventType
    * @param {function(!Common.Event)} handler
    */
   _registerAutosubscriptionTargetManagerHandler(eventTopic, modelClass, frontendEventType, handler) {
diff --git a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionView.js b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionView.js
index f1ec73e..48c5594 100644
--- a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionView.js
+++ b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionView.js
@@ -76,7 +76,7 @@
   }
 
   _onLoad() {
-    const frames = /** @type {!Array.<!Window>} */ (window.frames);
+    const frames = window.frames;
     this._frameIndex = Array.prototype.indexOf.call(frames, this._iframe.contentWindow);
     if (this.isShowing())
       this._server.notifyViewShown(this._id, this._frameIndex);
diff --git a/third_party/blink/renderer/devtools/front_end/externs.js b/third_party/blink/renderer/devtools/front_end/externs.js
index 3c8daa5..48017b8 100644
--- a/third_party/blink/renderer/devtools/front_end/externs.js
+++ b/third_party/blink/renderer/devtools/front_end/externs.js
@@ -653,56 +653,6 @@
 /** @type {boolean} */
 window.dispatchStandaloneTestRunnerMessages;
 
-/**
- * Inserts the given HTML Element into the node at the location.
- * @param {string} where Where to insert the HTML text, one of 'beforeBegin',
- *     'afterBegin', 'beforeEnd', 'afterEnd'.
- * @param {!Element} element DOM Element to insert.
- * @return {?Element} The element that was inserted, or null, if the
- *     insertion failed.
- * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement
- */
-Node.prototype.insertAdjacentElement = function(where, element) {};
-
-/**
- * @param {Array.<Object>} keyframes
- * @param {number|Object} timing
- * @return {Object}
- */
-Element.prototype.animate = function(keyframes, timing) {};
-
-/**
- * @param {...!Node} nodes
- * @return {undefined}
- * @see https://dom.spec.whatwg.org/#dom-parentnode-append
- */
-Element.prototype.append = function(nodes) {};
-
-/**
- * @param {...!Node} nodes
- * @return {undefined}
- * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend
- */
-Element.prototype.prepend = function(nodes) {};
-
-/**
- * @override
- * @param {string} type
- * @param {(!EventListener|!function (!Event): (boolean|undefined)|null)} listener
- * @param {(boolean|!{capture: (boolean|undefined), once: (boolean|undefined), passive: (boolean|undefined)})=} options
- * @this {EventTarget}
- */
-Element.prototype.addEventListener = function(type, listener, options) {};
-
-/**
- * @override
- * @param {string} type
- * @param {(!EventListener|!function (!Event): (boolean|undefined)|null)} listener
- * @param {(boolean|!{capture: (boolean|undefined), once: (boolean|undefined), passive: (boolean|undefined)})=} options
- * @this {EventTarget}
- */
-Element.prototype.removeEventListener = function(type, listener, options) {};
-
 const acorn = {
   /**
    * @param {string} text
@@ -1141,7 +1091,8 @@
  * @typedef {{
  *     lhr: !ReportRenderer.ReportJSON,
  *     artifacts: ReportRenderer.RunnerResultArtifacts,
- *     report: string
+ *     report: string,
+ *     stack: string
  * }}
  */
 ReportRenderer.RunnerResult;
@@ -1197,20 +1148,6 @@
  */
 DetailsRenderer.OpportunitySummary;
 
-
-// Clipboard API
-
-/** @constructor */
-const Clipboard = function() {};
-/**
- * @param {string} data
- * @return {!Promise}
- */
-Clipboard.prototype.writeText = function(data) {};
-
-/** @type {Clipboard} */
-Navigator.prototype.clipboard;
-
 const Lighthouse = {};
 
 Lighthouse.ReportGenerator = {};
diff --git a/third_party/blink/renderer/devtools/front_end/help/Help.js b/third_party/blink/renderer/devtools/front_end/help/Help.js
index dedbb7b..0153f10 100644
--- a/third_party/blink/renderer/devtools/front_end/help/Help.js
+++ b/third_party/blink/renderer/devtools/front_end/help/Help.js
@@ -59,7 +59,7 @@
   /**
    * @override
    */
-  run() {
+  async run() {
     if (!Host.isUnderTest())
       Help._showReleaseNoteIfNeeded();
   }
diff --git a/third_party/blink/renderer/devtools/front_end/layer_viewer/Layers3DView.js b/third_party/blink/renderer/devtools/front_end/layer_viewer/Layers3DView.js
index 3a56560..b6747f9f 100644
--- a/third_party/blink/renderer/devtools/front_end/layer_viewer/Layers3DView.js
+++ b/third_party/blink/renderer/devtools/front_end/layer_viewer/Layers3DView.js
@@ -1180,7 +1180,7 @@
     this._gl = glContext;
     this.scale = scale;
     const imageURL = await this.snapshot.replay(scale);
-    const image = imageURL && await UI.loadImage(imageURL);
-    this.texture = image && LayerViewer.LayerTextureManager._createTextureForImage(glContext, image);
+    const image = imageURL ? await UI.loadImage(imageURL) : null;
+    this.texture = image ? LayerViewer.LayerTextureManager._createTextureForImage(glContext, image) : null;
   }
 };
diff --git a/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js b/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js
index 485d8fd..287f391 100644
--- a/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js
+++ b/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js
@@ -1224,6 +1224,25 @@
       const manager = SDK.multitargetNetworkManager;
       let patterns = manager.blockedPatterns();
 
+      /**
+       * @param {string} url
+       */
+      function addBlockedURL(url) {
+        patterns.push({enabled: true, url: url});
+        manager.setBlockedPatterns(patterns);
+        manager.setBlockingEnabled(true);
+        UI.viewManager.showView('network.blocked-urls');
+      }
+
+      /**
+       * @param {string} url
+       */
+      function removeBlockedURL(url) {
+        patterns = patterns.filter(pattern => pattern.url !== url);
+        manager.setBlockedPatterns(patterns);
+        UI.viewManager.showView('network.blocked-urls');
+      }
+
       const urlWithoutScheme = request.parsedURL.urlWithoutScheme();
       if (urlWithoutScheme && !patterns.find(pattern => pattern.url === urlWithoutScheme)) {
         contextMenu.debugSection().appendItem(
@@ -1248,25 +1267,6 @@
         contextMenu.debugSection().appendItem(
             Common.UIString('Replay XHR'), SDK.NetworkManager.replayRequest.bind(null, request));
       }
-
-      /**
-       * @param {string} url
-       */
-      function addBlockedURL(url) {
-        patterns.push({enabled: true, url: url});
-        manager.setBlockedPatterns(patterns);
-        manager.setBlockingEnabled(true);
-        UI.viewManager.showView('network.blocked-urls');
-      }
-
-      /**
-       * @param {string} url
-       */
-      function removeBlockedURL(url) {
-        patterns = patterns.filter(pattern => pattern.url !== url);
-        manager.setBlockedPatterns(patterns);
-        UI.viewManager.showView('network.blocked-urls');
-      }
     }
   }
 
diff --git a/third_party/blink/renderer/devtools/front_end/network/RequestPreviewView.js b/third_party/blink/renderer/devtools/front_end/network/RequestPreviewView.js
index ae4dd41..d63c7f8 100644
--- a/third_party/blink/renderer/devtools/front_end/network/RequestPreviewView.js
+++ b/third_party/blink/renderer/devtools/front_end/network/RequestPreviewView.js
@@ -63,7 +63,8 @@
     if (!whitelist.has(this.request.mimeType))
       return null;
 
-    const content = contentData.encoded ? window.atob(contentData.content) : contentData.content;
+    const content = contentData.encoded ? window.atob(/** @type {string} */ (contentData.content)) :
+                                          /** @type {string} */ (contentData.content);
 
     // http://crbug.com/767393 - DevTools should recognize JSON regardless of the content type
     const jsonView = await SourceFrame.JSONView.createView(content);
diff --git a/third_party/blink/renderer/devtools/front_end/network/RequestResponseView.js b/third_party/blink/renderer/devtools/front_end/network/RequestResponseView.js
index 56050b0..7160865 100644
--- a/third_party/blink/renderer/devtools/front_end/network/RequestResponseView.js
+++ b/third_party/blink/renderer/devtools/front_end/network/RequestResponseView.js
@@ -65,7 +65,7 @@
   /**
    * @protected
    * @param {!SDK.NetworkRequest} request
-   * @return {!Promise<?UI.SearchableView>}
+   * @return {!Promise<?UI.Widget>}
    */
   static async sourceViewForRequest(request) {
     let sourceView = request[Network.RequestResponseView._sourceViewSymbol];
diff --git a/third_party/blink/renderer/devtools/front_end/network/networkLogView.css b/third_party/blink/renderer/devtools/front_end/network/networkLogView.css
index 92379f5..b42f2ab9 100644
--- a/third_party/blink/renderer/devtools/front_end/network/networkLogView.css
+++ b/third_party/blink/renderer/devtools/front_end/network/networkLogView.css
@@ -131,7 +131,10 @@
 }
 
 .network-error-row,
-.network-error-row .network-cell-subtitle {
+.network-error-row .network-cell-subtitle ,
+.network-log-grid.data-grid tr.selected.network-error-row,
+.network-log-grid.data-grid tr.selected.network-error-row .network-cell-subtitle,
+.network-log-grid.data-grid tr.selected.network-error-row .network-dim-cell {
     color: rgb(230, 0, 0);
 }
 
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
index 4707e5d..b5c644e 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
@@ -34,7 +34,7 @@
 
   /**
    * @param {string} fullText
-   * @return {!Promise<?{args: !Array<!Array<string>>, argumentIndex: number}>}
+   * @return {!Promise<?{args: !Array<!Array<string>>, argumentIndex: number}|undefined>}
    */
   async argumentsHint(fullText) {
     const functionCall = await Formatter.formatterWorkerPool().findLastFunctionCall(fullText);
@@ -73,7 +73,7 @@
             timeout: functionCall.possibleSideEffects ? 500 : undefined
           },
           /* userGesture */ false, /* awaitPromise */ false);
-      return (result && !result.exceptionDetails) ? result.object : null;
+      return (result && !result.exceptionDetails && result.object) ? result.object : null;
     }, functionCall.functionName);
     executionContext.runtimeModel.releaseObjectGroup('argumentsHint');
     if (!args.length || (args.length === 1 && !args[0].length))
@@ -157,7 +157,7 @@
             result[result.length] = object.constructor.name;
         }
         return result;
-      });
+      }, []);
     }
     for (const proto of protoNames) {
       const instanceSignatures = javaScriptMetadata.signaturesForInstanceMethod(name, proto);
@@ -363,7 +363,7 @@
             /* userGesture */ false,
             /* awaitPromise */ false);
         if (evaluateResult.object && !evaluateResult.exceptionDetails)
-          completions = evaluateResult.object.value || [];
+          completions = /** @type {!Iterable} */ (evaluateResult.object.value) || [];
       }
       executionContext.runtimeModel.releaseObjectGroup('completion');
 
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptREPL.js b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptREPL.js
index f0b73e6..60adc898 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptREPL.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptREPL.js
@@ -93,7 +93,7 @@
     if (preview && type === 'object' && subtype !== 'node') {
       formatter.appendObjectPreview(fragment, preview, false /* isEntry */);
     } else {
-      const nonObjectPreview = formatter.renderPropertyPreview(type, subtype, description.trimEnd(400));
+      const nonObjectPreview = formatter.renderPropertyPreview(type, subtype, description.trimEndWithMaxLength(400));
       fragment.appendChild(nonObjectPreview);
     }
     return fragment;
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPopoverHelper.js b/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPopoverHelper.js
index 44b1ee9..29c68f1 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPopoverHelper.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPopoverHelper.js
@@ -51,7 +51,7 @@
    * @return {!Promise<?ObjectUI.ObjectPopoverHelper>}
    */
   static async buildObjectPopover(result, popover) {
-    const description = result.description.trimEnd(ObjectUI.ObjectPopoverHelper.MaxPopoverTextLength);
+    const description = result.description.trimEndWithMaxLength(ObjectUI.ObjectPopoverHelper.MaxPopoverTextLength);
     let popoverContentElement = null;
     if (result.type === 'object') {
       let linkifier = null;
@@ -115,7 +115,8 @@
     let linkifier = null;
     if (sourceURL) {
       linkifier = new Components.Linkifier();
-      linkContainer.appendChild(linkifier.linkifyRawLocation(rawLocation, sourceURL));
+      linkContainer.appendChild(
+          linkifier.linkifyRawLocation(/** @type {!SDK.DebuggerModel.Location} */ (rawLocation), sourceURL));
     }
     container.appendChild(popoverContentElement);
     popover.contentElement.appendChild(container);
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js b/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js
index 1dbd573..6710b555 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js
@@ -193,7 +193,7 @@
     } else {
       addElements('\u0192', text, nameAndArguments(text));
     }
-    valueElement.title = description.trimEnd(500);
+    valueElement.title = description.trimEndWithMaxLength(500);
     return valueElement;
 
     /**
@@ -221,7 +221,7 @@
       if (prefix.length)
         valueElement.createChild('span', 'object-value-function-prefix').textContent = prefix + ' ';
       if (includePreview)
-        valueElement.createTextChild(body.trim().trimEnd(maxFunctionBodyLength));
+        valueElement.createTextChild(body.trim().trimEndWithMaxLength(maxFunctionBodyLength));
       else
         valueElement.createTextChild(abbreviation.replace(/\n/g, ' '));
     }
diff --git a/third_party/blink/renderer/devtools/front_end/perf_ui/FilmStripView.js b/third_party/blink/renderer/devtools/front_end/perf_ui/FilmStripView.js
index 3b120e7..182cd3b 100644
--- a/third_party/blink/renderer/devtools/front_end/perf_ui/FilmStripView.js
+++ b/third_party/blink/renderer/devtools/front_end/perf_ui/FilmStripView.js
@@ -161,7 +161,7 @@
   }
 
   /**
-   * @param {string} eventName
+   * @param {string|symbol} eventName
    * @param {number} timestamp
    */
   _onMouseEvent(eventName, timestamp) {
diff --git a/third_party/blink/renderer/devtools/front_end/persistence/FileSystemWorkspaceBinding.js b/third_party/blink/renderer/devtools/front_end/persistence/FileSystemWorkspaceBinding.js
index bbf6ce7..a84c3f2 100644
--- a/third_party/blink/renderer/devtools/front_end/persistence/FileSystemWorkspaceBinding.js
+++ b/third_party/blink/renderer/devtools/front_end/persistence/FileSystemWorkspaceBinding.js
@@ -299,7 +299,7 @@
   /**
    * @override
    * @param {!Workspace.UISourceCode} uiSourceCode
-   * @param {function(?string, boolean)} callback
+   * @param {function(?string,boolean)} callback
    */
   requestFileContent(uiSourceCode, callback) {
     const filePath = this._filePathForUISourceCode(uiSourceCode);
diff --git a/third_party/blink/renderer/devtools/front_end/persistence/IsolatedFileSystem.js b/third_party/blink/renderer/devtools/front_end/persistence/IsolatedFileSystem.js
index 5756f749..0bd71813 100644
--- a/third_party/blink/renderer/devtools/front_end/persistence/IsolatedFileSystem.js
+++ b/third_party/blink/renderer/devtools/front_end/persistence/IsolatedFileSystem.js
@@ -357,7 +357,7 @@
       }
       let result;
       try {
-        result = reader.result;
+        result = /** @type {string} */ (reader.result);
       } catch (e) {
         result = null;
         console.error('Can\'t read file: ' + path + ': ' + e);
diff --git a/third_party/blink/renderer/devtools/front_end/platform/utilities.js b/third_party/blink/renderer/devtools/front_end/platform/utilities.js
index 1ae145f0..c94bb3d 100644
--- a/third_party/blink/renderer/devtools/front_end/platform/utilities.js
+++ b/third_party/blink/renderer/devtools/front_end/platform/utilities.js
@@ -218,7 +218,7 @@
  * @param {number} maxLength
  * @return {string}
  */
-String.prototype.trimEnd = function(maxLength) {
+String.prototype.trimEndWithMaxLength = function(maxLength) {
   if (this.length <= maxLength)
     return String(this);
   return this.substr(0, maxLength - 1) + '\u2026';
diff --git a/third_party/blink/renderer/devtools/front_end/product_registry/badge.css b/third_party/blink/renderer/devtools/front_end/product_registry/badge.css
index 10c9e53..3b22927 100644
--- a/third_party/blink/renderer/devtools/front_end/product_registry/badge.css
+++ b/third_party/blink/renderer/devtools/front_end/product_registry/badge.css
@@ -21,6 +21,10 @@
   display: none;
 }
 
+:host-context(.-theme-with-dark-background) .product-registry-badge::before {
+  color: #000;
+}
+
 .product-registry-badge-title {
   padding-left: 4px;
-}
\ No newline at end of file
+}
diff --git a/third_party/blink/renderer/devtools/front_end/profiler/CPUProfileView.js b/third_party/blink/renderer/devtools/front_end/profiler/CPUProfileView.js
index 7c98db12..2df9fb9 100644
--- a/third_party/blink/renderer/devtools/front_end/profiler/CPUProfileView.js
+++ b/third_party/blink/renderer/devtools/front_end/profiler/CPUProfileView.js
@@ -113,6 +113,9 @@
     return '.cpuprofile';
   }
 
+  /**
+   * @override
+   */
   get buttonTooltip() {
     return this._recording ? Common.UIString('Stop CPU profiling') : Common.UIString('Start CPU profiling');
   }
@@ -131,10 +134,16 @@
     }
   }
 
+  /**
+   * @override
+   */
   get treeItemTitle() {
     return Common.UIString('CPU PROFILES');
   }
 
+  /**
+   * @override
+   */
   get description() {
     return Common.UIString('CPU profiles show where the execution time is spent in your page\'s JavaScript functions.');
   }
diff --git a/third_party/blink/renderer/devtools/front_end/profiler/HeapProfileView.js b/third_party/blink/renderer/devtools/front_end/profiler/HeapProfileView.js
index 4d614775..3ea629a 100644
--- a/third_party/blink/renderer/devtools/front_end/profiler/HeapProfileView.js
+++ b/third_party/blink/renderer/devtools/front_end/profiler/HeapProfileView.js
@@ -248,6 +248,9 @@
     return '.heapprofile';
   }
 
+  /**
+   * @override
+   */
   get buttonTooltip() {
     return this._recording ? ls`Stop heap profiling` : ls`Start heap profiling`;
   }
@@ -338,10 +341,16 @@
     this._updateIntervalMs = 200;
   }
 
+  /**
+   * @override
+   */
   get treeItemTitle() {
     return ls`SAMPLING PROFILES`;
   }
 
+  /**
+   * @override
+   */
   get description() {
     return ls`Record memory allocations using sampling method.
               This profile type has minimal performance overhead and can be used for long running operations.
@@ -387,7 +396,7 @@
 
 Profiler.SamplingHeapProfileType.TypeId = 'SamplingHeap';
 
-/** @enum {symbol} */
+/** @override @suppress {checkPrototypalTypes} @enum {symbol} */
 Profiler.SamplingHeapProfileType.Events = {
   RecordingStopped: Symbol('RecordingStopped'),
   StatsUpdate: Symbol('StatsUpdate')
@@ -402,10 +411,16 @@
     Profiler.SamplingNativeHeapProfileType.instance = this;
   }
 
+  /**
+   * @override
+   */
   get treeItemTitle() {
     return ls`NATIVE SAMPLING PROFILES`;
   }
 
+  /**
+   * @override
+   */
   get description() {
     return ls`Allocation profiles show sampled native memory allocations from the renderer process.`;
   }
@@ -447,10 +462,16 @@
     return true;
   }
 
+  /**
+   * @override
+   */
   get treeItemTitle() {
     return ls`NATIVE SNAPSHOTS`;
   }
 
+  /**
+   * @override
+   */
   get description() {
     return ls`Native memory snapshots show sampled native allocations in the renderer process since start up.
               Chrome has to be started with --memlog=all flag. Check flags at chrome://flags`;
@@ -485,7 +506,7 @@
     const recordedProfile = this.profileBeingRecorded();
     if (recordedProfile) {
       console.assert(protocolProfile);
-      recordedProfile.setProtocolProfile(protocolProfile);
+      recordedProfile.setProtocolProfile(/** @type {!Protocol.Profiler.Profile} */ (protocolProfile));
       recordedProfile.updateStatus('');
       this.setProfileBeingRecorded(null);
     }
diff --git a/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotDataGrids.js b/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotDataGrids.js
index 51e47f2..fef1ec31 100644
--- a/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotDataGrids.js
+++ b/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotDataGrids.js
@@ -287,7 +287,7 @@
   }
 };
 
-/** @enum {symbol} */
+/** @override @suppress {checkPrototypalTypes} @enum {symbol} */
 Profiler.HeapSnapshotSortableDataGrid.Events = {
   ContentShown: Symbol('ContentShown'),
   SortingComplete: Symbol('SortingComplete')
@@ -666,7 +666,7 @@
   }
 };
 
-/** @enum {symbol} */
+/** @override @suppress {checkPrototypalTypes} @enum {symbol} */
 Profiler.HeapSnapshotRetainmentDataGrid.Events = {
   ExpandRetainersComplete: Symbol('ExpandRetainersComplete')
 };
diff --git a/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotView.js b/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotView.js
index 0945c50..5ca2aea 100644
--- a/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotView.js
+++ b/third_party/blink/renderer/devtools/front_end/profiler/HeapSnapshotView.js
@@ -1043,6 +1043,9 @@
     return '.heapsnapshot';
   }
 
+  /**
+   * @override
+   */
   get buttonTooltip() {
     return Common.UIString('Take heap snapshot');
   }
@@ -1065,10 +1068,16 @@
     return false;
   }
 
+  /**
+   * @override
+   */
   get treeItemTitle() {
     return Common.UIString('HEAP SNAPSHOTS');
   }
 
+  /**
+   * @override
+   */
   get description() {
     return Common.UIString(
         'Heap snapshot profiles show memory distribution among your page\'s JavaScript objects and related DOM nodes.');
@@ -1225,6 +1234,9 @@
     return true;
   }
 
+  /**
+   * @override
+   */
   get buttonTooltip() {
     return this._recording ? ls`Stop recording heap profile` : ls`Start recording heap profile`;
   }
@@ -1322,10 +1334,16 @@
     return '.heaptimeline';
   }
 
+  /**
+   * @override
+   */
   get treeItemTitle() {
     return ls`ALLOCATION TIMELINES`;
   }
 
+  /**
+   * @override
+   */
   get description() {
     return ls`
         Allocation timelines show instrumented JavaScript memory allocations over time.
@@ -1357,6 +1375,9 @@
   }
 };
 
+/**
+ * @override
+ */
 Profiler.TrackingHeapSnapshotProfileType.TypeId = 'HEAP-RECORD';
 
 Profiler.TrackingHeapSnapshotProfileType.HeapStatsUpdate = 'HeapStatsUpdate';
@@ -1590,7 +1611,7 @@
   /**
    * @override
    * @param {!File} file
-   * @return {!Promise<?Error>}
+   * @return {!Promise<?FileError>}
    */
   async loadFromFile(file) {
     this.updateStatus(Common.UIString('Loading\u2026'), true);
diff --git a/third_party/blink/renderer/devtools/front_end/profiler/ProfileHeader.js b/third_party/blink/renderer/devtools/front_end/profiler/ProfileHeader.js
index 8498fbe..a63cc2d 100644
--- a/third_party/blink/renderer/devtools/front_end/profiler/ProfileHeader.js
+++ b/third_party/blink/renderer/devtools/front_end/profiler/ProfileHeader.js
@@ -80,7 +80,7 @@
 
   /**
    * @param {!File} file
-   * @return {!Promise<?Error>}
+   * @return {!Promise<?Error|?FileError>}
    */
   loadFromFile(file) {
     throw new Error('Not implemented');
diff --git a/third_party/blink/renderer/devtools/front_end/profiler/ProfileType.js b/third_party/blink/renderer/devtools/front_end/profiler/ProfileType.js
index 9bba187..6960d35 100644
--- a/third_party/blink/renderer/devtools/front_end/profiler/ProfileType.js
+++ b/third_party/blink/renderer/devtools/front_end/profiler/ProfileType.js
@@ -143,7 +143,7 @@
 
   /**
    * @param {!File} file
-   * @return {!Promise<?Error>}
+   * @return {!Promise<?Error|?FileError>}
    */
   loadFromFile(file) {
     let name = file.name;
diff --git a/third_party/blink/renderer/devtools/front_end/profiler/ProfilesPanel.js b/third_party/blink/renderer/devtools/front_end/profiler/ProfilesPanel.js
index 17c999b..62ed453 100644
--- a/third_party/blink/renderer/devtools/front_end/profiler/ProfilesPanel.js
+++ b/third_party/blink/renderer/devtools/front_end/profiler/ProfilesPanel.js
@@ -597,10 +597,10 @@
     this._iconElement = createElementWithClass('div', 'icon');
     this._titlesElement = createElementWithClass('div', 'titles no-subtitle');
     this._titleContainer = this._titlesElement.createChild('span', 'title-container');
-    this._titleElement = this._titleContainer.createChild('span', 'title');
+    this.titleElement = this._titleContainer.createChild('span', 'title');
     this._subtitleElement = this._titlesElement.createChild('span', 'subtitle');
 
-    this._titleElement.textContent = profile.title;
+    this.titleElement.textContent = profile.title;
     this._className = className;
     this._small = false;
     this._dataDisplayDelegate = dataDisplayDelegate;
@@ -738,7 +738,7 @@
    * @param {string} title
    */
   setMainTitle(title) {
-    this._titleElement.textContent = title;
+    this.titleElement.textContent = title;
   }
 };
 
diff --git a/third_party/blink/renderer/devtools/front_end/protocol_monitor/ProtocolMonitor.js b/third_party/blink/renderer/devtools/front_end/protocol_monitor/ProtocolMonitor.js
index cb0f436..2e32fc1 100644
--- a/third_party/blink/renderer/devtools/front_end/protocol_monitor/ProtocolMonitor.js
+++ b/third_party/blink/renderer/devtools/front_end/protocol_monitor/ProtocolMonitor.js
@@ -243,7 +243,7 @@
       case 'request': {
         const cell = this.createTD(columnId);
         const obj = SDK.RemoteObject.fromLocalObject(this.data[columnId]);
-        cell.textContent = obj.description.trimEnd(50);
+        cell.textContent = obj.description.trimEndWithMaxLength(50);
         cell.classList.add('source-code');
         return cell;
       }
diff --git a/third_party/blink/renderer/devtools/front_end/resources/AppManifestView.js b/third_party/blink/renderer/devtools/front_end/resources/AppManifestView.js
index ac759917..44d12696 100644
--- a/third_party/blink/renderer/devtools/front_end/resources/AppManifestView.js
+++ b/third_party/blink/renderer/devtools/front_end/resources/AppManifestView.js
@@ -184,7 +184,7 @@
 
   /**
    * @param {?string} url
-   * @return {!Promise<?Image>}
+   * @return {!Promise<?Element>}
    */
   async _loadImage(url) {
     const image = createElement('img');
diff --git a/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js b/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js
index 036398d..3f29507d 100644
--- a/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js
+++ b/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js
@@ -175,7 +175,7 @@
       else
         section._section.hideWidget();
     }
-    this.contentElement.classList.toggle('service-worker-has-current', hasThis);
+    this.contentElement.classList.toggle('service-worker-has-current', !!hasThis);
     this._otherWorkers.classList.toggle('hidden', !hasOthers);
     this._updateListVisibility();
   }
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/CSSModel.js b/third_party/blink/renderer/devtools/front_end/sdk/CSSModel.js
index 755da8e..f600a65 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/CSSModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/CSSModel.js
@@ -648,7 +648,7 @@
 /** @typedef {!{range: !Protocol.CSS.SourceRange, styleSheetId: !Protocol.CSS.StyleSheetId, wasUsed: boolean}} */
 SDK.CSSModel.RuleUsage;
 
-/** @typedef {{backgroundColors: ?Array<string>, computedFontSize: string, computedFontWeights: string}} */
+/** @typedef {{backgroundColors: ?Array<string>, computedFontSize: string, computedFontWeight: string}} */
 SDK.CSSModel.ContrastInfo;
 
 /** @enum {symbol} */
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/CSSStyleSheetHeader.js b/third_party/blink/renderer/devtools/front_end/sdk/CSSStyleSheetHeader.js
index 7219fc6..12c950a 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/CSSStyleSheetHeader.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/CSSStyleSheetHeader.js
@@ -35,7 +35,7 @@
     if (!this._originalContentProvider) {
       const lazyContent = this._cssModel.originalStyleSheetText.bind(this._cssModel, this);
       this._originalContentProvider = new Common.StaticContentProvider(
-          this.contentURL(), this.contentType(), /** @type {function():!Promise<?string>} */ (lazyContent));
+          this.contentURL(), this.contentType(), /** @type {function():!Promise<string>} */ (lazyContent));
     }
     return this._originalContentProvider;
   }
@@ -125,10 +125,10 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {
-    return this._cssModel.getStyleSheetText(this.id);
+    return /** @type {!Promise<string>} */ (this._cssModel.getStyleSheetText(this.id));
   }
 
   /**
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js b/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js
index 15bb50c5..a89ac32 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/ChildTargetManager.js
@@ -185,7 +185,7 @@
   }
 
   /**
-   * @param {function(!Object)} onMessage
+   * @param {function((!Object|string))} onMessage
    * @return {!Promise<!Protocol.Connection>}
    */
   async createParallelConnection(onMessage) {
@@ -207,7 +207,7 @@
   async _createParallelConnectionAndSessionForTarget(target, targetId) {
     const targetAgent = target.targetAgent();
     const targetRouter = target.router();
-    const sessionId = await targetAgent.attachToTarget(targetId, true /* flatten */);
+    const sessionId = /** @type {string} */ (await targetAgent.attachToTarget(targetId, true /* flatten */));
     const connection = new SDK.ParallelConnection(targetRouter.connection(), sessionId);
     targetRouter.registerSession(target, sessionId, connection);
     connection.setOnDisconnect(async () => {
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/ContentProviders.js b/third_party/blink/renderer/devtools/front_end/sdk/ContentProviders.js
index 5cd03c9f..45bbc89 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/ContentProviders.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/ContentProviders.js
@@ -67,7 +67,7 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {
     let callback;
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js b/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js
index ef298de..c2e44d11 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/DOMModel.js
@@ -1190,7 +1190,7 @@
   }
 
   /**
-   * @return {!Promise<!SDK.DOMDocument>}
+   * @return {!Promise<?SDK.DOMDocument>}
    */
   async _requestDocument() {
     const documentPayload = await this._agent.getDocument();
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js b/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js
index 79cef91..7f173189 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/DebuggerModel.js
@@ -286,7 +286,7 @@
     });
     if (response[Protocol.Error])
       return {locations: [], breakpointId: null};
-    let locations;
+    let locations = [];
     if (response.locations)
       locations = response.locations.map(payload => SDK.DebuggerModel.Location.fromPayload(this, payload));
     return {locations: locations, breakpointId: response.breakpointId};
@@ -310,7 +310,7 @@
         return {locations: [], breakpointId: null};
       return this._setBreakpointBySourceId(scriptId, lineNumber, columnNumber, condition);
     }
-    let locations;
+    let locations = [];
     if (response.locations)
       locations = response.locations.map(payload => SDK.DebuggerModel.Location.fromPayload(this, payload));
     return {locations: locations, breakpointId: response.breakpointId};
@@ -1170,6 +1170,7 @@
   }
 
   /**
+   * @override
    * @param {!SDK.DebuggerModel} debuggerModel
    * @param {!Protocol.Debugger.BreakLocation} payload
    * @return {!SDK.DebuggerModel.BreakLocation}
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js b/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js
index 21fa0e7..e0b139a 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/HARLog.js
@@ -329,7 +329,7 @@
   }
 
   /**
-   * @return {!Promise<!Object>}
+   * @return {!Promise<?Object>}
    */
   async _buildPostData() {
     const postData = await this._request.requestFormData();
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js b/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js
index 6919fa7..d37fd39 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/HeapProfilerModel.js
@@ -74,7 +74,7 @@
    * @return {!Promise<!SDK.HeapProfilerModel.NativeHeapProfile>}
    */
   async stopNativeSampling() {
-    const rawProfile = await this._memoryAgent.getSamplingProfile();
+    const rawProfile = /** @type {!Protocol.Memory.SamplingProfile} */ (await this._memoryAgent.getSamplingProfile());
     this._memoryAgent.stopSampling();
     return this._convertNativeProfile(rawProfile);
   }
@@ -83,7 +83,8 @@
    * @return {!Promise<!SDK.HeapProfilerModel.NativeHeapProfile>}
    */
   async takeNativeSnapshot() {
-    const rawProfile = await this._memoryAgent.getAllTimeSamplingProfile();
+    const rawProfile =
+        /** @type {!Protocol.Memory.SamplingProfile} */ (await this._memoryAgent.getAllTimeSamplingProfile());
     return this._convertNativeProfile(rawProfile);
   }
 
@@ -91,7 +92,8 @@
    * @return {!Promise<!SDK.HeapProfilerModel.NativeHeapProfile>}
    */
   async takeNativeBrowserSnapshot() {
-    const rawProfile = await this._memoryAgent.getBrowserSamplingProfile();
+    const rawProfile =
+        /** @type {!Protocol.Memory.SamplingProfile} */ (await this._memoryAgent.getBrowserSamplingProfile());
     return this._convertNativeProfile(rawProfile);
   }
 
@@ -235,6 +237,7 @@
 };
 
 /**
+ * @implements {Protocol.Profiler.Profile}
  * @extends {Protocol.HeapProfiler.SamplingHeapProfile}
  */
 SDK.HeapProfilerModel.NativeHeapProfile = class {
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js b/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js
index 6c4cb1d..bde14a34 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js
@@ -1093,10 +1093,10 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   async requestContent() {
-    return (await this.contentData()).content;
+    return /** @type {string} */ ((await this.contentData()).content);
   }
 
   /**
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/PaintProfiler.js b/third_party/blink/renderer/devtools/front_end/sdk/PaintProfiler.js
index c4371d5..61e3208 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/PaintProfiler.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/PaintProfiler.js
@@ -117,7 +117,9 @@
    */
   async commandLog() {
     const log = await this._paintProfilerModel._layerTreeAgent.snapshotCommandLog(this._id);
-    return log && log.map((entry, index) => new SDK.PaintProfilerLogItem(entry, index));
+    return log &&
+        log.map(
+            (entry, index) => new SDK.PaintProfilerLogItem(/** @type {!SDK.RawPaintProfilerLogItem} */ (entry), index));
   }
 };
 
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/Resource.js b/third_party/blink/renderer/devtools/front_end/sdk/Resource.js
index 10a26572..50fd5a45 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/Resource.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/Resource.js
@@ -188,11 +188,11 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {
     if (typeof this._content !== 'undefined')
-      return Promise.resolve(this._content);
+      return Promise.resolve(/** @type {string} */ (this._content));
 
     let callback;
     const promise = new Promise(fulfill => callback = fulfill);
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/ResourceTreeModel.js b/third_party/blink/renderer/devtools/front_end/sdk/ResourceTreeModel.js
index f465d82f..915594c 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/ResourceTreeModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/ResourceTreeModel.js
@@ -386,7 +386,7 @@
   }
 
   /**
-   * @return {!Promise<?{currentIndex: number, entries: !Protocol.Page.NavigationEntry}>}
+   * @return {!Promise<?{currentIndex: number, entries: !Array<!Protocol.Page.NavigationEntry>}>}
    */
   async navigationHistory() {
     const response = await this._agent.invoke_getNavigationHistory({});
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js b/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js
index b37799397..f26799a 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js
@@ -55,6 +55,7 @@
 
   /**
    * @param {!SDK.RuntimeModel.EvaluationResult} response
+   * @return {boolean}
    */
   static isSideEffectFailure(response) {
     const exceptionDetails = !response[Protocol.Error] && response.exceptionDetails;
@@ -239,7 +240,7 @@
    * @param {string} sourceURL
    * @param {boolean} persistScript
    * @param {number} executionContextId
-   * @return {?Promise<!SDK.RuntimeModel.CompileScriptResult>}
+   * @return {!Promise<?SDK.RuntimeModel.CompileScriptResult>}
    */
   async compileScript(expression, sourceURL, persistScript, executionContextId) {
     const response = await this._agent.invoke_compileScript({
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/Script.js b/third_party/blink/renderer/devtools/front_end/sdk/Script.js
index 14c5d7d..7800098 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/Script.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/Script.js
@@ -135,7 +135,7 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   async requestContent() {
     if (this._source)
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/TracingModel.js b/third_party/blink/renderer/devtools/front_end/sdk/TracingModel.js
index 7ec290a..276dd21 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/TracingModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/TracingModel.js
@@ -534,6 +534,7 @@
   }
 
   /**
+   * @this {null}
    * @param {!SDK.TracingManager.EventPayload} payload
    * @param {!SDK.TracingModel.Thread} thread
    * @return {!SDK.TracingModel.Event}
@@ -643,6 +644,8 @@
   }
 
   /**
+   * @override
+   * @this {null}
    * @param {!SDK.TracingManager.EventPayload} payload
    * @param {!SDK.TracingModel.Thread} thread
    * @return {!SDK.TracingModel.ObjectSnapshot}
diff --git a/third_party/blink/renderer/devtools/front_end/security/SecurityPanel.js b/third_party/blink/renderer/devtools/front_end/security/SecurityPanel.js
index fdcc33cb..865d130 100644
--- a/third_party/blink/renderer/devtools/front_end/security/SecurityPanel.js
+++ b/third_party/blink/renderer/devtools/front_end/security/SecurityPanel.js
@@ -510,7 +510,7 @@
   }
 };
 
-/** @enum */
+/** @enum {symbol} */
 Security.SecurityPanelSidebarTree.OriginGroup = {
   MainOrigin: Symbol('MainOrigin'),
   NonSecure: Symbol('NonSecure'),
diff --git a/third_party/blink/renderer/devtools/front_end/source_frame/BinaryResourceViewFactory.js b/third_party/blink/renderer/devtools/front_end/source_frame/BinaryResourceViewFactory.js
index 855bc2ad..343ab16 100644
--- a/third_party/blink/renderer/devtools/front_end/source_frame/BinaryResourceViewFactory.js
+++ b/third_party/blink/renderer/devtools/front_end/source_frame/BinaryResourceViewFactory.js
@@ -92,7 +92,7 @@
    * @return {!SourceFrame.ResourceSourceFrame}
    */
   createUtf8View() {
-    const utf8fn = /** @type {function():!Promise<?string>} */ (this.utf8.bind(this));
+    const utf8fn = this.utf8.bind(this);
     const utf8ContentProvider = new Common.StaticContentProvider(this._contentUrl, this._resourceType, utf8fn);
     return new SourceFrame.ResourceSourceFrame(
         utf8ContentProvider,
diff --git a/third_party/blink/renderer/devtools/front_end/source_frame/SourceFrame.js b/third_party/blink/renderer/devtools/front_end/source_frame/SourceFrame.js
index 7b7e662..7010818 100644
--- a/third_party/blink/renderer/devtools/front_end/source_frame/SourceFrame.js
+++ b/third_party/blink/renderer/devtools/front_end/source_frame/SourceFrame.js
@@ -35,7 +35,7 @@
  */
 SourceFrame.SourceFrame = class extends UI.SimpleView {
   /**
-   * @param {function(): !Promise<?string>} lazyContent
+   * @param {function(): !Promise<string>} lazyContent
    * @param {!UI.TextEditor.Options=} codeMirrorOptions
    */
   constructor(lazyContent, codeMirrorOptions) {
diff --git a/third_party/blink/renderer/devtools/front_end/sources/GutterDiffPlugin.js b/third_party/blink/renderer/devtools/front_end/sources/GutterDiffPlugin.js
index 4ce4277..064be73671 100644
--- a/third_party/blink/renderer/devtools/front_end/sources/GutterDiffPlugin.js
+++ b/third_party/blink/renderer/devtools/front_end/sources/GutterDiffPlugin.js
@@ -21,6 +21,7 @@
   }
 
   /**
+   * @override
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @return {boolean}
    */
diff --git a/third_party/blink/renderer/devtools/front_end/sources/JavaScriptBreakpointsSidebarPane.js b/third_party/blink/renderer/devtools/front_end/sources/JavaScriptBreakpointsSidebarPane.js
index 6eff15b7..44f19e1 100644
--- a/third_party/blink/renderer/devtools/front_end/sources/JavaScriptBreakpointsSidebarPane.js
+++ b/third_party/blink/renderer/devtools/front_end/sources/JavaScriptBreakpointsSidebarPane.js
@@ -134,7 +134,7 @@
       const lineText = text.lineAt(lineNumber);
       const maxSnippetLength = 200;
       snippetElement.textContent =
-          lineText.substring(showColumn ? uiLocation.columnNumber : 0).trimEnd(maxSnippetLength);
+          lineText.substring(showColumn ? uiLocation.columnNumber : 0).trimEndWithMaxLength(maxSnippetLength);
     }
   }
 
diff --git a/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js b/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js
index b9b0edaf..8c846ad8e 100644
--- a/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js
+++ b/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js
@@ -889,7 +889,9 @@
     const vbox = new UI.VBox();
     vbox.element.appendChild(this._debugToolbar.element);
     vbox.element.appendChild(this._debugToolbarDrawer);
-    vbox.setMinimumAndPreferredSizes(25, 25, Sources.SourcesPanel.minToolbarWidth, 100);
+
+    vbox.setMinimumAndPreferredSizes(
+        Sources.SourcesPanel.minToolbarWidth, 25, Sources.SourcesPanel.minToolbarWidth, 100);
     this._sidebarPaneStack = UI.viewManager.createStackLocation(this._revealDebuggerSidebar.bind(this));
     this._sidebarPaneStack.widget().element.classList.add('overflow-auto');
     this._sidebarPaneStack.widget().show(vbox.element);
diff --git a/third_party/blink/renderer/devtools/front_end/sources/SourcesSearchScope.js b/third_party/blink/renderer/devtools/front_end/sources/SourcesSearchScope.js
index 3d19de6..7dadf6c 100644
--- a/third_party/blink/renderer/devtools/front_end/sources/SourcesSearchScope.js
+++ b/third_party/blink/renderer/devtools/front_end/sources/SourcesSearchScope.js
@@ -344,7 +344,7 @@
    */
   matchRevealable(index) {
     const match = this._searchMatches[index];
-    return this._uiSourceCode.uiLocation(match.lineNumber, match.columnNumber);
+    return this._uiSourceCode.uiLocation(match.lineNumber, undefined);
   }
 
   /**
diff --git a/third_party/blink/renderer/devtools/front_end/sources/UISourceCodeFrame.js b/third_party/blink/renderer/devtools/front_end/sources/UISourceCodeFrame.js
index 727fe808..e4702d4 100644
--- a/third_party/blink/renderer/devtools/front_end/sources/UISourceCodeFrame.js
+++ b/third_party/blink/renderer/devtools/front_end/sources/UISourceCodeFrame.js
@@ -74,11 +74,11 @@
     this._initializeUISourceCode();
 
     /**
-     * @return {!Promise<?string>}
+     * @return {!Promise<string>}
      */
     function workingCopy() {
       if (uiSourceCode.isDirty())
-        return /** @type {!Promise<?string>} */ (Promise.resolve(uiSourceCode.workingCopy()));
+        return Promise.resolve(uiSourceCode.workingCopy());
       return uiSourceCode.requestContent();
     }
   }
diff --git a/third_party/blink/renderer/devtools/front_end/test_runner/TestRunner.js b/third_party/blink/renderer/devtools/front_end/test_runner/TestRunner.js
index abb4457f..99a452c 100644
--- a/third_party/blink/renderer/devtools/front_end/test_runner/TestRunner.js
+++ b/third_party/blink/renderer/devtools/front_end/test_runner/TestRunner.js
@@ -407,7 +407,7 @@
 
 /**
  * @param {string} code
- * @return {!Promise<{response: !SDK.RemoteObject,
+ * @return {!Promise<undefined|{response: (!SDK.RemoteObject|undefined),
  *   exceptionDetails: (!Protocol.Runtime.ExceptionDetails|undefined)}>}
  */
 TestRunner._evaluateInPage = async function(code) {
@@ -877,17 +877,17 @@
 };
 
 /**
- * @param {symbol} event
+ * @param {symbol} eventName
  * @param {!Common.Object} obj
  * @param {function(?):boolean=} condition
  * @return {!Promise}
  */
-TestRunner.waitForEvent = function(event, obj, condition) {
+TestRunner.waitForEvent = function(eventName, obj, condition) {
   condition = condition || function() {
     return true;
   };
   return new Promise(resolve => {
-    obj.addEventListener(event, onEventFired);
+    obj.addEventListener(eventName, onEventFired);
 
     /**
      * @param {!Common.Event} event
@@ -895,7 +895,7 @@
     function onEventFired(event) {
       if (!condition(event.data))
         return;
-      obj.removeEventListener(event, onEventFired);
+      obj.removeEventListener(eventName, onEventFired);
       resolve(event.data);
     }
   });
diff --git a/third_party/blink/renderer/devtools/front_end/text_editor/CodeMirrorTextEditor.js b/third_party/blink/renderer/devtools/front_end/text_editor/CodeMirrorTextEditor.js
index f3c027c2..8762d86b 100644
--- a/third_party/blink/renderer/devtools/front_end/text_editor/CodeMirrorTextEditor.js
+++ b/third_party/blink/renderer/devtools/front_end/text_editor/CodeMirrorTextEditor.js
@@ -42,6 +42,9 @@
     this.registerRequiredCSS('cm/codemirror.css');
     this.registerRequiredCSS('text_editor/cmdevtools.css');
 
+    const {indentWithTabs, indentUnit} =
+        TextEditor.CodeMirrorTextEditor._getIndentation(Common.moduleSetting('textEditorIndent').get());
+
     this._codeMirror = new CodeMirror(this.element, {
       devtoolsAccessibleName: options.devtoolsAccessibleName,
       lineNumbers: options.lineNumbers,
@@ -50,7 +53,8 @@
       styleSelectedText: true,
       electricChars: true,
       styleActiveLine: true,
-      indentUnit: 4,
+      indentUnit,
+      indentWithTabs,
       lineWrapping: options.lineWrapping,
       lineWiseCopyCut: false,
       tabIndex: 0,
@@ -61,6 +65,8 @@
 
     this._codeMirror._codeMirrorTextEditor = this;
 
+    Common.moduleSetting('textEditorIndent').addChangeListener(this._updateIndentSize.bind(this));
+
     CodeMirror.keyMap['devtools-common'] = {
       'Left': 'goCharLeft',
       'Right': 'goCharRight',
@@ -72,7 +78,7 @@
       'PageDown': 'goSmartPageDown',
       'Delete': 'delCharAfter',
       'Backspace': 'delCharBefore',
-      'Tab': 'defaultTab',
+      'Tab': 'UserIndent',
       'Shift-Tab': 'indentLessOrPass',
       'Enter': 'newlineAndIndent',
       'Ctrl-Space': 'autocomplete',
@@ -234,6 +240,15 @@
   }
 
   /**
+   * @param {string} indentationValue
+   */
+  static _getIndentation(indentationValue) {
+    const indentWithTabs = /\t/.test(indentationValue);
+    const indentUnit = indentWithTabs ? 4 : indentationValue.length;
+    return {indentWithTabs, indentUnit};
+  }
+
+  /**
    * @param {string} modeName
    * @param {string} tokenPrefix
    */
@@ -689,6 +704,17 @@
   }
 
   /**
+   * @param {!{data: *}} updatedValue
+   */
+  _updateIndentSize(updatedValue) {
+    const {indentWithTabs, indentUnit} =
+        TextEditor.CodeMirrorTextEditor._getIndentation(/** @type {string} */ (updatedValue.data));
+
+    this._codeMirror.setOption('indentUnit', indentUnit);
+    this._codeMirror.setOption('indentWithTabs', indentWithTabs);
+  }
+
+  /**
    * @param {string} mimeType
    */
   setMimeType(mimeType) {
@@ -1347,6 +1373,23 @@
 
 /**
  * @param {!CodeMirror} codeMirror
+ */
+CodeMirror.commands.UserIndent = function(codeMirror) {
+  const ranges = codeMirror.listSelections();
+  if (ranges.length === 0)
+    return;
+
+  if (codeMirror.somethingSelected()) {
+    codeMirror.indentSelection('add');
+    return;
+  }
+
+  const indentation = Common.moduleSetting('textEditorIndent').get();
+  codeMirror.replaceSelection(indentation);
+};
+
+/**
+ * @param {!CodeMirror} codeMirror
  * @return {!Object|undefined}
  */
 CodeMirror.commands.indentLessOrPass = function(codeMirror) {
diff --git a/third_party/blink/renderer/devtools/front_end/text_editor/TextEditorAutocompleteController.js b/third_party/blink/renderer/devtools/front_end/text_editor/TextEditorAutocompleteController.js
index 531c5fb..e9df519 100644
--- a/third_party/blink/renderer/devtools/front_end/text_editor/TextEditorAutocompleteController.js
+++ b/third_party/blink/renderer/devtools/front_end/text_editor/TextEditorAutocompleteController.js
@@ -291,7 +291,7 @@
       return;
     }
     const suffix = hint.substring(query.length).split('\n')[0];
-    this._hintElement.textContent = suffix.trimEnd(10000);
+    this._hintElement.textContent = suffix.trimEndWithMaxLength(10000);
     const cursor = this._codeMirror.getCursor('to');
     if (this._hintMarker) {
       const position = this._hintMarker.position();
diff --git a/third_party/blink/renderer/devtools/front_end/text_editor/cmdevtools.css b/third_party/blink/renderer/devtools/front_end/text_editor/cmdevtools.css
index 0fad537..28d1496 100644
--- a/third_party/blink/renderer/devtools/front_end/text_editor/cmdevtools.css
+++ b/third_party/blink/renderer/devtools/front_end/text_editor/cmdevtools.css
@@ -437,7 +437,7 @@
 .CodeMirror .text-editor-coverage-unused-marker {
     text-align: right;
     padding-right: 2px;
-    background-color: #E57373;
+    background-color: #EE442F;
 }
 
 .CodeMirror .text-editor-coverage-unused-marker::after {
@@ -447,7 +447,7 @@
 .CodeMirror .text-editor-coverage-used-marker {
     text-align: right;
     padding-right: 2px;
-    background-color: #81C784;
+    background-color: #63ACBE;
 }
 
 .CodeMirror .text-editor-coverage-used-marker::after {
diff --git a/third_party/blink/renderer/devtools/front_end/timeline/TimelineController.js b/third_party/blink/renderer/devtools/front_end/timeline/TimelineController.js
index f3b0863..002dabe6 100644
--- a/third_party/blink/renderer/devtools/front_end/timeline/TimelineController.js
+++ b/third_party/blink/renderer/devtools/front_end/timeline/TimelineController.js
@@ -181,7 +181,7 @@
   /**
    * @param {string} categories
    * @param {boolean=} enableJSSampling
-   * @return {!Promise<!Object>}
+   * @return {!Promise<!Object|undefined>}
    */
   async _startRecordingWithCategories(categories, enableJSSampling) {
     // There might be a significant delay in the beginning of timeline recording
diff --git a/third_party/blink/renderer/devtools/front_end/timeline/TimelineLoader.js b/third_party/blink/renderer/devtools/front_end/timeline/TimelineLoader.js
index 65bf6f9..c1027192 100644
--- a/third_party/blink/renderer/devtools/front_end/timeline/TimelineLoader.js
+++ b/third_party/blink/renderer/devtools/front_end/timeline/TimelineLoader.js
@@ -40,7 +40,7 @@
     loader._totalSize = file.size;
     fileReader.read(loader).then(success => {
       if (!success)
-        this._reportErrorAndCancelLoading(fileReader.error().message);
+        loader._reportErrorAndCancelLoading(fileReader.error().message);
     });
     return loader;
   }
@@ -198,7 +198,7 @@
   /**
    * @override
    */
-  close() {
+  async close() {
     if (!this._client)
       return;
     this._client.processingStarted();
diff --git a/third_party/blink/renderer/devtools/front_end/timeline/TimelinePanel.js b/third_party/blink/renderer/devtools/front_end/timeline/TimelinePanel.js
index 2448593..1182538 100644
--- a/third_party/blink/renderer/devtools/front_end/timeline/TimelinePanel.js
+++ b/third_party/blink/renderer/devtools/front_end/timeline/TimelinePanel.js
@@ -337,6 +337,9 @@
     contextMenu.show();
   }
 
+  /**
+   * @suppress {deprecated}
+   */
   async _saveToFile() {
     if (this._state !== Timeline.TimelinePanel.State.Idle)
       return;
diff --git a/third_party/blink/renderer/devtools/front_end/timeline/TimelineTreeView.js b/third_party/blink/renderer/devtools/front_end/timeline/TimelineTreeView.js
index 376ada7..7f93e22 100644
--- a/third_party/blink/renderer/devtools/front_end/timeline/TimelineTreeView.js
+++ b/third_party/blink/renderer/devtools/front_end/timeline/TimelineTreeView.js
@@ -701,15 +701,17 @@
                           categories['other'].color;
     const unattributed = Common.UIString('[unattributed]');
 
+    const id = typeof node.id === 'symbol' ? undefined : node.id;
+
     switch (this._groupBySetting.get()) {
       case Timeline.AggregatedTimelineTreeView.GroupBy.Category: {
-        const category = categories[node.id] || categories['other'];
+        const category = id ? categories[id] || categories['other'] : unattributed;
         return {name: category.title, color: category.color};
       }
 
       case Timeline.AggregatedTimelineTreeView.GroupBy.Domain:
       case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain: {
-        let domainName = this._beautifyDomainName(node.id);
+        let domainName = id ? this._beautifyDomainName(id) : undefined;
         if (domainName) {
           const productName = this._productByEvent(/** @type {!SDK.TracingModel.Event} */ (node.event));
           if (productName)
@@ -742,7 +744,7 @@
         break;
 
       case Timeline.AggregatedTimelineTreeView.GroupBy.Frame: {
-        const frame = this._model.timelineModel().pageFrameById(node.id);
+        const frame = id ? this._model.timelineModel().pageFrameById(id) : undefined;
         const frameName = frame ? Timeline.TimelineUIUtils.displayNameForFrame(frame, 80) : Common.UIString('Page');
         return {name: frameName, color: color};
       }
@@ -750,7 +752,7 @@
       default:
         console.assert(false, 'Unexpected grouping type');
     }
-    return {name: node.id || unattributed, color: color};
+    return {name: id || unattributed, color: color};
   }
 
   /**
@@ -919,7 +921,7 @@
       return;
     if (!node.isGroupNode())
       return;
-    const frame = this._model.timelineModel().pageFrameById(node.id);
+    const frame = this._model.timelineModel().pageFrameById(/** @type {string} */ (node.id));
     if (!frame || !frame.ownerNode)
       return;
     contextMenu.appendApplicableItems(frame.ownerNode);
diff --git a/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js b/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js
index 0bd19b5..c2303ec 100644
--- a/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js
+++ b/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js
@@ -1932,7 +1932,7 @@
 
   /**
    * @param {!Array.<string>=} types
-   * @return {!Iterator.<!TimelineModel.InvalidationTrackingEvent>}
+   * @return {!Generator<!TimelineModel.InvalidationTrackingEvent>}
    */
   _invalidationsOfTypes(types) {
     const invalidations = this._invalidations;
diff --git a/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineProfileTree.js b/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineProfileTree.js
index 22e1c88..d16b466 100644
--- a/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineProfileTree.js
+++ b/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineProfileTree.js
@@ -5,11 +5,16 @@
 TimelineModel.TimelineProfileTree = {};
 
 /**
+ * @typedef {Map<string|symbol, !TimelineModel.TimelineProfileTree.Node>}
+ */
+TimelineModel.TimelineProfileTree.ChildrenCache;
+
+/**
  * @unrestricted
  */
 TimelineModel.TimelineProfileTree.Node = class {
   /**
-   * @param {string} id
+   * @param {string|symbol} id
    * @param {?SDK.TracingModel.Event} event
    */
   constructor(id, event) {
@@ -17,7 +22,7 @@
     this.totalTime = 0;
     /** @type {number} */
     this.selfTime = 0;
-    /** @type {string} */
+    /** @type {string|symbol} */
     this.id = id;
     /** @type {?SDK.TracingModel.Event} */
     this.event = event;
@@ -44,7 +49,7 @@
   }
 
   /**
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   children() {
     throw 'Not implemented';
@@ -67,7 +72,7 @@
 
 TimelineModel.TimelineProfileTree.TopDownNode = class extends TimelineModel.TimelineProfileTree.Node {
   /**
-   * @param {string} id
+   * @param {string|symbol} id
    * @param {?SDK.TracingModel.Event} event
    * @param {?TimelineModel.TimelineProfileTree.TopDownNode} parent
    */
@@ -90,14 +95,14 @@
 
   /**
    * @override
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   children() {
     return this._children || this._buildChildren();
   }
 
   /**
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   _buildChildren() {
     /** @type {!Array<!TimelineModel.TimelineProfileTree.TopDownNode>} */
@@ -105,7 +110,7 @@
     for (let node = this; node.parent && !node._isGroupNode; node = node.parent)
       path.push(/** @type {!TimelineModel.TimelineProfileTree.TopDownNode} */ (node));
     path.reverse();
-    /** @type {!Map<string, !TimelineModel.TimelineProfileTree.Node>} */
+    /** @type {!TimelineModel.TimelineProfileTree.ChildrenCache} */
     const children = new Map();
     const self = this;
     const root = this._root;
@@ -239,14 +244,14 @@
 
   /**
    * @override
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   children() {
     return this._children || this._grouppedTopNodes();
   }
 
   /**
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   _grouppedTopNodes() {
     const flatNodes = super.children();
@@ -281,7 +286,7 @@
    */
   constructor(events, textFilter, filters, startTime, endTime, eventGroupIdCallback) {
     super('', null);
-    /** @type {?Map<string, !TimelineModel.TimelineProfileTree.Node>} */
+    /** @type {?TimelineModel.TimelineProfileTree.ChildrenCache} */
     this._children = null;
     this._events = events;
     this._textFilter = textFilter;
@@ -301,20 +306,20 @@
   }
 
   /**
-   * @param {!Map<string, !TimelineModel.TimelineProfileTree.Node>} children
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @param {!TimelineModel.TimelineProfileTree.ChildrenCache} children
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   _filterChildren(children) {
     for (const [id, child] of children) {
       if (child.event && !this._textFilter.accept(child.event))
-        children.delete(/** @type {string} */ (id));
+        children.delete(/** @type {string|symbol} */ (id));
     }
     return children;
   }
 
   /**
    * @override
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   children() {
     if (!this._children)
@@ -323,13 +328,13 @@
   }
 
   /**
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   _ungrouppedTopNodes() {
     const root = this;
     const startTime = this._startTime;
     const endTime = this._endTime;
-    /** @type {!Map<string, !TimelineModel.TimelineProfileTree.Node>} */
+    /** @type {!TimelineModel.TimelineProfileTree.ChildrenCache} */
     const nodeById = new Map();
     /** @type {!Array<number>} */
     const selfTimeStack = [endTime - startTime];
@@ -382,7 +387,7 @@
   }
 
   /**
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   _grouppedTopNodes() {
     const flatNodes = this._ungrouppedTopNodes();
@@ -438,7 +443,7 @@
 
   /**
    * @override
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   children() {
     return this._children;
@@ -458,7 +463,7 @@
     this.parent = parent;
     this._root = root;
     this._depth = (parent._depth || 0) + 1;
-    /** @type {?Map<string, !TimelineModel.TimelineProfileTree.Node>} */
+    /** @type {?TimelineModel.TimelineProfileTree.ChildrenCache} */
     this._cachedChildren = null;
     this._hasChildren = hasChildren;
   }
@@ -477,7 +482,7 @@
 
   /**
    * @override
-   * @return {!Map<string, !TimelineModel.TimelineProfileTree.Node>}
+   * @return {!TimelineModel.TimelineProfileTree.ChildrenCache}
    */
   children() {
     if (this._cachedChildren)
@@ -488,7 +493,7 @@
     const eventIdStack = [];
     /** @type {!Array<!SDK.TracingModel.Event>} */
     const eventStack = [];
-    /** @type {!Map<string, !TimelineModel.TimelineProfileTree.Node>} */
+    /** @type {!TimelineModel.TimelineProfileTree.ChildrenCache} */
     const nodeById = new Map();
     const startTime = this._root._startTime;
     const endTime = this._root._endTime;
diff --git a/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js b/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js
index 4eac502..39f467a 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js
@@ -431,7 +431,7 @@
     alertElement.setAttribute('aria-atomic', 'true');
     document[UI.ARIAUtils.AlertElementSymbol] = alertElement;
   }
-  document[UI.ARIAUtils.AlertElementSymbol].textContent = message.trimEnd(10000);
+  document[UI.ARIAUtils.AlertElementSymbol].textContent = message.trimEndWithMaxLength(10000);
 };
 
 UI.ARIAUtils.AlertElementSymbol = Symbol('AlertElementSybmol');
diff --git a/third_party/blink/renderer/devtools/front_end/ui/GlassPane.js b/third_party/blink/renderer/devtools/front_end/ui/GlassPane.js
index f6b61de..6c06f67e 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/GlassPane.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/GlassPane.js
@@ -119,7 +119,7 @@
   }
 
   /**
-   * @param {boolean} behavior
+   * @param {!UI.GlassPane.MarginBehavior} behavior
    */
   setMarginBehavior(behavior) {
     this._marginBehavior = behavior;
diff --git a/third_party/blink/renderer/devtools/front_end/ui/Icon.js b/third_party/blink/renderer/devtools/front_end/ui/Icon.js
index 41046de4..a7ef018 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/Icon.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/Icon.js
@@ -90,7 +90,7 @@
 
 UI.Icon._positionRegex = /^[a-z][1-9][0-9]*$/;
 
-/** @typedef {{position: string, spritesheet: string, isMask: (boolean|undefined)}} */
+/** @typedef {{position: string, spritesheet: string, isMask: (boolean|undefined), coordinates: ({x: number, y: number}|undefined), invert: (boolean|undefined)}} */
 UI.Icon.Descriptor;
 
 /** @typedef {{cellWidth: number, cellHeight: number, padding: number}} */
diff --git a/third_party/blink/renderer/devtools/front_end/ui/SuggestBox.js b/third_party/blink/renderer/devtools/front_end/ui/SuggestBox.js
index f460d14..4af9055 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/SuggestBox.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/SuggestBox.js
@@ -199,7 +199,7 @@
       element.classList.add('secondary');
     element.tabIndex = -1;
     const maxTextLength = 50 + query.length;
-    const displayText = (item.title || item.text).trim().trimEnd(maxTextLength).replace(/\n/g, '\u21B5');
+    const displayText = (item.title || item.text).trim().trimEndWithMaxLength(maxTextLength).replace(/\n/g, '\u21B5');
 
     const titleElement = element.createChild('span', 'suggestion-title');
     const index = displayText.toLowerCase().indexOf(query.toLowerCase());
@@ -215,7 +215,7 @@
       element.appendChild(subtitleElement);
     } else if (item.subtitle) {
       const subtitleElement = element.createChild('span', 'suggestion-subtitle');
-      subtitleElement.textContent = item.subtitle.trimEnd(maxTextLength - displayText.length);
+      subtitleElement.textContent = item.subtitle.trimEndWithMaxLength(maxTextLength - displayText.length);
     }
     return element;
   }
diff --git a/third_party/blink/renderer/devtools/front_end/ui/UIUtils.js b/third_party/blink/renderer/devtools/front_end/ui/UIUtils.js
index 6495a8bc1..43588894 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/UIUtils.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/UIUtils.js
@@ -1618,7 +1618,7 @@
  * @return {string}
  */
 UI.trimTextEnd = function(context, text, maxWidth) {
-  return UI.trimText(context, text, maxWidth, (text, width) => text.trimEnd(width));
+  return UI.trimText(context, text, maxWidth, (text, width) => text.trimEndWithMaxLength(width));
 };
 
 /**
@@ -1828,7 +1828,7 @@
     output.push(':');
     const items = value.replace(Common.Color.Regex, '\0$1\0').split('\0');
     for (let i = 0; i < items.length; ++i)
-      output.push(this.patchColorText(items[i], colorUsage));
+      output.push(this.patchColorText(items[i], /** @type {!UI.ThemeSupport.ColorUsage} */ (colorUsage)));
     if (style.getPropertyPriority(name))
       output.push(' !important');
     output.push(';');
diff --git a/third_party/blink/renderer/devtools/front_end/ui/View.js b/third_party/blink/renderer/devtools/front_end/ui/View.js
index 4dbf3413..691eb919a 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/View.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/View.js
@@ -37,6 +37,9 @@
    */
   widget() {},
 
+  /**
+   * @return {!Promise|undefined}
+   */
   disposeView() {}
 };
 
diff --git a/third_party/blink/renderer/devtools/front_end/ui/XElement.js b/third_party/blink/renderer/devtools/front_end/ui/XElement.js
index 09d340a..189e9fe2 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/XElement.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/XElement.js
@@ -6,6 +6,9 @@
  * @extends {HTMLElement}
  */
 UI.XElement = class extends HTMLElement {
+  /**
+   * @override
+   */
   static get observedAttributes() {
     return [
       'flex',          'padding',     'padding-top',      'padding-bottom', 'padding-left',
@@ -61,9 +64,11 @@
     this.style.setProperty('justify-content', 'flex-start');
   }
 
+  /**
+   * @override
+   */
   static get observedAttributes() {
-    // TODO(dgozman): should be super.observedAttributes, but does not compile.
-    return UI.XElement.observedAttributes.concat(['x-start', 'x-center', 'x-stretch', 'x-baseline', 'justify-content']);
+    return super.observedAttributes.concat(['x-start', 'x-center', 'x-stretch', 'x-baseline', 'justify-content']);
   }
 
   /**
diff --git a/third_party/blink/renderer/devtools/front_end/ui/XLink.js b/third_party/blink/renderer/devtools/front_end/ui/XLink.js
index 6f1aa1a..880060c 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/XLink.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/XLink.js
@@ -50,6 +50,7 @@
   }
 
   /**
+   * @override
    * @return {!Array<string>}
    */
   static get observedAttributes() {
diff --git a/third_party/blink/renderer/devtools/front_end/ui/inspectorCommon.css b/third_party/blink/renderer/devtools/front_end/ui/inspectorCommon.css
index a18ab33..6a8e5fdc 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/inspectorCommon.css
+++ b/third_party/blink/renderer/devtools/front_end/ui/inspectorCommon.css
@@ -166,7 +166,7 @@
     color: inherit;
 }
 
-:host-context(.-theme-with-dark-background) input[type="checkbox"]::not(.-theme-preserve) {
+:host-context(.-theme-with-dark-background) input[type="checkbox"]:not(.-theme-preserve) {
     -webkit-filter: invert(80%);
 }
 
diff --git a/third_party/blink/renderer/devtools/front_end/ui/treeoutline.js b/third_party/blink/renderer/devtools/front_end/ui/treeoutline.js
index ea294c5..d95edee 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/treeoutline.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/treeoutline.js
@@ -377,7 +377,8 @@
     this._boundOnBlur = this._onBlur.bind(this);
 
     this._listItemNode = createElement('li');
-    this._titleElement = this._listItemNode.createChild('span', 'tree-element-title');
+    /** @protected */
+    this.titleElement = this._listItemNode.createChild('span', 'tree-element-title');
     this._listItemNode.treeElement = this;
     if (title)
       this.title = title;
@@ -628,13 +629,6 @@
     return this._listItemNode;
   }
 
-  /**
-   * @return {!Element}
-   */
-  titleElement() {
-    return this._titleElement;
-  }
-
   get childrenListElement() {
     return this._childrenListNode;
   }
@@ -655,17 +649,17 @@
     this._title = x;
 
     if (typeof x === 'string') {
-      this._titleElement.textContent = x;
+      this.titleElement.textContent = x;
       this.tooltip = x;
     } else {
-      this._titleElement = x;
+      this.titleElement = x;
       this.tooltip = '';
     }
 
     this._listItemNode.removeChildren();
     if (this._leadingIconsElement)
       this._listItemNode.appendChild(this._leadingIconsElement);
-    this._listItemNode.appendChild(this._titleElement);
+    this._listItemNode.appendChild(this.titleElement);
     if (this._trailingIconsElement)
       this._listItemNode.appendChild(this._trailingIconsElement);
     this._ensureSelection();
@@ -686,8 +680,8 @@
    * @param {!UI.InplaceEditor.Config} editingConfig
    */
   startEditingTitle(editingConfig) {
-    UI.InplaceEditor.startEditing(this._titleElement, editingConfig);
-    this.treeOutline._shadowRoot.getSelection().selectAllChildren(this._titleElement);
+    UI.InplaceEditor.startEditing(/** @type {!Element} */ (this.titleElement), editingConfig);
+    this.treeOutline._shadowRoot.getSelection().selectAllChildren(this.titleElement);
   }
 
   /**
@@ -699,7 +693,7 @@
     if (!this._leadingIconsElement) {
       this._leadingIconsElement = createElementWithClass('div', 'leading-icons');
       this._leadingIconsElement.classList.add('icons-container');
-      this._listItemNode.insertBefore(this._leadingIconsElement, this._titleElement);
+      this._listItemNode.insertBefore(this._leadingIconsElement, this.titleElement);
       this._ensureSelection();
     }
     this._leadingIconsElement.removeChildren();
diff --git a/third_party/blink/renderer/devtools/front_end/web_audio/AudioContextSelector.js b/third_party/blink/renderer/devtools/front_end/web_audio/AudioContextSelector.js
index 7fc659d..4ccc3c7 100644
--- a/third_party/blink/renderer/devtools/front_end/web_audio/AudioContextSelector.js
+++ b/third_party/blink/renderer/devtools/front_end/web_audio/AudioContextSelector.js
@@ -78,7 +78,7 @@
     const element = createElementWithClass('div');
     const shadowRoot = UI.createShadowRootWithCoreStyles(element, 'web_audio/audioContextSelector.css');
     const title = shadowRoot.createChild('div', 'title');
-    title.createTextChild(this.titleFor(item).trimEnd(100));
+    title.createTextChild(this.titleFor(item).trimEndWithMaxLength(100));
     return element;
   }
 
diff --git a/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js b/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js
index d4724e77..50e5b31 100644
--- a/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js
+++ b/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js
@@ -56,7 +56,7 @@
     }
 
     this._contentType = contentType;
-    /** @type {?Promise<?string>} */
+    /** @type {?Promise<string>} */
     this._requestContentPromise = null;
     /** @type {?Multimap<string, !Workspace.UISourceCode.LineMarker>} */
     this._decorations = null;
@@ -142,7 +142,7 @@
         name = decodeURI(name);
     } catch (e) {
     }
-    return skipTrim ? name : name.trimEnd(100);
+    return skipTrim ? name : name.trimEndWithMaxLength(100);
   }
 
   /**
@@ -235,14 +235,14 @@
 
   /**
    * @override
-   * @return {!Promise<?string>}
+   * @return {!Promise<string>}
    */
   requestContent() {
     if (this._requestContentPromise)
       return this._requestContentPromise;
 
     if (this._contentLoaded) {
-      this._requestContentPromise = Promise.resolve(this._content);
+      this._requestContentPromise = Promise.resolve(this._content || '');
     } else {
       let fulfill;
       this._requestContentPromise = new Promise(x => fulfill = x);
diff --git a/third_party/blink/renderer/devtools/karma.conf.js b/third_party/blink/renderer/devtools/karma.conf.js
new file mode 100644
index 0000000..ceafc53
--- /dev/null
+++ b/third_party/blink/renderer/devtools/karma.conf.js
@@ -0,0 +1,59 @@
+// Copyright 2019 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.
+
+module.exports = function(config) {
+  const options = {
+    basePath: "",
+
+    files: [{
+      pattern: 'front_end/**/*.js',
+      included: false,
+      served: true
+    },{
+      pattern: 'tests/**/*.ts',
+      type: 'module'
+    }],
+
+    reporters: ["dots"],
+
+    preprocessors: {
+      './tests/**/*.ts': ['karma-typescript']
+    },
+
+    browsers: ["ChromeHeadless"],
+
+    frameworks: ["mocha", "chai", "karma-typescript"],
+
+    karmaTypescriptConfig: {
+      compilerOptions: {
+        target: "esnext",
+        module: "esnext",
+        typeRoots: ["./third_party/devtools-node-modules/third_party/node_modules/@types"]
+      },
+      coverageOptions: {
+        instrumentation: false
+      },
+      bundlerOptions: {
+        resolve: {
+          directories: ["./third_party/devtools-node-modules/third_party/node_modules"]
+        }
+      }
+    },
+
+    proxies: {
+      '/front_end': '/base/front_end',
+    },
+
+    plugins: [
+      "karma-chrome-launcher",
+      "karma-mocha",
+      "karma-chai",
+      "karma-typescript"
+    ],
+
+    singleRun: true
+  };
+
+  config.set(options);
+};
diff --git a/third_party/blink/renderer/devtools/readme.md b/third_party/blink/renderer/devtools/readme.md
index 3e49169b9..7c64659 100644
--- a/third_party/blink/renderer/devtools/readme.md
+++ b/third_party/blink/renderer/devtools/readme.md
@@ -61,11 +61,11 @@
 npm run setup-dtrun
 ```
 
-Now, you can use any of the following commands by simply doing: `dtrun test`. 
+Now, you can use any of the following commands by simply doing: `dtrun test`.
 
 In addition, you no longer need to pass double dashes (e.g. `--`) before you pass in the flags. So you can do: `dtrun test -d inspector/test.html`.
 
-#### `npm run format` 
+#### `npm run format`
 Formats your code using clang-format
 
 ### `npm run format-py`
@@ -85,8 +85,8 @@
 
 # debug a specific test. Any one of:
 npm run debug-test inspector/cookie-resource-match.html
-npm test -- --debug-devtools inspector/cookie-resource-match.html 
-npm test -- -d inspector/cookie-resource-match.html 
+npm test -- --debug-devtools inspector/cookie-resource-match.html
+npm test -- -d inspector/cookie-resource-match.html
 
 # pass in additional flags to the test harness
 npm test -- -f --child-processes=16
@@ -99,15 +99,15 @@
 
 #### `--fetch-content-shell`
 ```
-# If you're using a full chromium checkout and have a compiled content shell, 
-# this will fetch a pre-compiled content shell. This is useful if you 
+# If you're using a full chromium checkout and have a compiled content shell,
+# this will fetch a pre-compiled content shell. This is useful if you
 # haven't compiled your content shell recently
 npm test -- --fetch-content-shell
 ```
 
 #### `--target=SUB_DIRECTORY_NAME`
 ```
-# If you're using a build sub-directory that's not out/Release, 
+# If you're using a build sub-directory that's not out/Release,
 # such as out/Default, then use --target=SUB_DIRECTORY_NAME
 npm test -- --target=Default
 ```
@@ -127,3 +127,17 @@
   [@ChromeDevTools]: http://twitter.com/ChromeDevTools
   [@DevToolsCommits]: http://twitter.com/DevToolsCommits
   [all open DevTools tickets]: https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3APlatform%3EDevTools&sort=&groupby=&colspec=ID+Stars+Owner+Summary+Modified+Opened
+
+### Tests
+The tests are run through Karma.
+
+```
+python scripts/run_tests.py
+```
+
+You can also specify with which Chrome binary to run tests by setting the
+`chrome-binary` variable.
+
+```
+python scripts/run_tests.py --chrome-binary=/path/to/chromium/build/chromium
+```
diff --git a/third_party/blink/renderer/devtools/scripts/closure/README.md b/third_party/blink/renderer/devtools/scripts/closure/README.md
index 83f5621..95935cd 100644
--- a/third_party/blink/renderer/devtools/scripts/closure/README.md
+++ b/third_party/blink/renderer/devtools/scripts/closure/README.md
@@ -1,53 +1,80 @@
 # [Google Closure Compiler](https://developers.google.com/closure/compiler/)
 
 [![Build Status](https://travis-ci.org/google/closure-compiler.svg?branch=master)](https://travis-ci.org/google/closure-compiler)
+[![Open Source Helpers](https://www.codetriage.com/google/closure-compiler/badges/users.svg)](https://www.codetriage.com/google/closure-compiler)
 
 The [Closure Compiler](https://developers.google.com/closure/compiler/) is a tool for making JavaScript download and run faster. It is a true compiler for JavaScript. Instead of compiling from a source language to machine code, it compiles from JavaScript to better JavaScript. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls.
 
 ## Getting Started
- * [Download the latest version](http://dl.google.com/closure-compiler/compiler-latest.zip) ([Release details here](https://github.com/google/closure-compiler/wiki/Releases))
- * [Download a specific version](https://github.com/google/closure-compiler/wiki/Binary-Downloads)
+ * [Download the latest version](https://dl.google.com/closure-compiler/compiler-latest.zip) ([Release details here](https://github.com/google/closure-compiler/wiki/Releases))
+ * [Download a specific version](https://github.com/google/closure-compiler/wiki/Binary-Downloads). Also available via:
+   - [Maven](https://github.com/google/closure-compiler/wiki/Maven)
+   - [NPM](https://www.npmjs.com/package/google-closure-compiler) - includes java, native and javascript versions.
  * See the [Google Developers Site](https://developers.google.com/closure/compiler/docs/gettingstarted_app) for documentation including instructions for running the compiler from the command line.
 
 ## Options for Getting Help
-1. Post in the [Closure Compiler Discuss Group](https://groups.google.com/forum/#!forum/closure-compiler-discuss)
-2. Ask a question on [Stack Overflow](http://stackoverflow.com/questions/tagged/google-closure-compiler)
-3. Consult the [FAQ](https://github.com/google/closure-compiler/wiki/FAQ)
+1. Post in the [Closure Compiler Discuss Group](https://groups.google.com/forum/#!forum/closure-compiler-discuss).
+2. Ask a question on [Stack Overflow](https://stackoverflow.com/questions/tagged/google-closure-compiler).
+3. Consult the [FAQ](https://github.com/google/closure-compiler/wiki/FAQ).
 
 ## Building it Yourself
 
-Note: The Closure Compiler requires [Java 7 or higher](http://www.java.com/).
+Note: The Closure Compiler requires [Java 8 or higher](https://www.java.com/).
 
-### Using [Ant](http://ant.apache.org/)
+### Using [Maven](https://maven.apache.org/)
 
-1. Download the [Ant build tool](http://ant.apache.org/bindownload.cgi).
+1. Download [Maven](https://maven.apache.org/download.cgi).
 
-2. At the root of the source tree, there is an Ant file named ```build.xml```.
-   To use it, navigate to the same directory and type the command
+2. Add sonatype snapshots repository to `~/.m2/settings.xml`:
+   ```xml
+   <profile>
+     <id>allow-snapshots</id>
+        <activation><activeByDefault>true</activeByDefault></activation>
+     <repositories>
+       <repository>
+         <id>snapshots-repo</id>
+         <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+         <releases><enabled>false</enabled></releases>
+         <snapshots><enabled>true</enabled></snapshots>
+       </repository>
+     </repositories>
+   </profile>
+   ```
 
-    ```
-    ant jar
-    ```
+3. On the command line, at the root of this project, run `mvn -DskipTests` (omit the `-DskipTests` if you want to run all the
+unit tests too).
 
-    This will produce a jar file called ```build/compiler.jar```.
+    This will produce a jar file called `target/closure-compiler-1.0-SNAPSHOT.jar`. You can run this jar
+    as per the [Running section](#running) of this Readme. If you want to depend on the compiler via
+    Maven in another Java project, use the `com.google.javascript/closure-compiler-unshaded` artifact.
 
-### Using [Eclipse](http://www.eclipse.org/)
+    Running `mvn -DskipTests -pl externs/pom.xml,pom-main.xml,pom-main-shaded.xml`
+    will skip building the GWT version of the compiler. This can speed up the build process significantly.
 
-1. Download and open the [Eclipse IDE](http://www.eclipse.org/).
-2. Navigate to ```File > New > Project ...``` and create a Java Project. Give
-   the project a name.
-3. Select ```Create project from existing source``` and choose the root of the
-   checked-out source tree as the existing directory.
-3. Navigate to the ```build.xml``` file. You will see all the build rules in
-   the Outline pane. Run the ```jar``` rule to build the compiler in
-   ```build/compiler.jar```.
+### Using [Eclipse](https://www.eclipse.org/)
+
+1. Download and open [Eclipse IDE](https://www.eclipse.org/). Disable `Project > Build automatically` during this process.
+2. On the command line, at the root of this project, run `mvn eclipse:eclipse -DdownloadSources=true` to download JARs and build Eclipse project configuration.
+3. Run `mvn clean` and `mvn -DskipTests` to ensure AutoValues are generated and updated.
+4. In Eclipse, navigate to `File > Import > Maven > Existing Maven Projects` and browse to closure-compiler.
+5. Import both closure-compiler and the nested externs project.
+6. Disregard the warnings about maven-antrun-plugin and build errors.
+7. Configure the project to use the [Google Eclipse style guide](https://github.com/google/styleguide/blob/gh-pages/eclipse-java-google-style.xml)
+8. Edit `.classpath` in closure-compiler-parent. Delete the `<classpathentry ... kind="src" path="src" ... />` line, then add:
+   ```xml
+   <classpathentry excluding="com/google/debugging/sourcemap/super/**|com/google/javascript/jscomp/debugger/gwt/DebuggerGwtMain.java|com/google/javascript/jscomp/gwt/|com/google/javascript/jscomp/resources/super-gwt/**" kind="src" path="src"/>
+   <classpathentry kind="src" path="target/generated-sources/annotations"/>
+   ```
+9. Ensure the Eclipse project settings specify 1.8 compliance level in "Java Compiler".
+10. Build project in Eclipse (right click on the project `closure-compiler-parent` and select `Build Project`).
+11. See *Using Maven* above to build the JAR.
 
 ## Running
 
 On the command line, at the root of this project, type
 
 ```
-java -jar build/compiler.jar
+java -jar target/closure-compiler-1.0-SNAPSHOT.jar
 ```
 
 This starts the compiler in interactive mode. Type
@@ -72,7 +99,15 @@
 ```
 
 More detailed information about running the Closure Compiler is available in the
-[documentation](http://code.google.com/closure/compiler/docs/gettingstarted_app.html).
+[documentation](https://developers.google.com/closure/compiler/docs/gettingstarted_app).
+
+
+### Run using Eclipse
+
+1. Open the class `src/com/google/javascript/jscomp/CommandLineRunner.java` or create your own extended version of the class.
+2. Run the class in Eclipse.
+3. See the instructions above on how to use the interactive mode - but beware of the [bug](https://stackoverflow.com/questions/4711098/passing-end-of-transmission-ctrl-d-character-in-eclipse-cdt-console) regarding passing "End of Transmission" in the Eclipse console.
+
 
 ## Compiling Multiple Scripts
 
@@ -89,7 +124,7 @@
 # Recursively include all js files in subdirs
 java -jar compiler.jar --js_output_file=out.js 'src/**.js'
 
-# Recursively include all js files in subdirs, exclusing test files.
+# Recursively include all js files in subdirs, excluding test files.
 # Use single-quotes, so that bash doesn't try to expand the '!'
 java -jar compiler.jar --js_output_file=out.js 'src/**.js' '!**_test.js'
 ```
@@ -108,7 +143,8 @@
 1. First make sure that it is really a bug and not simply the way that Closure Compiler works (especially true for ADVANCED_OPTIMIZATIONS).
  * Check the [official documentation](https://developers.google.com/closure/compiler/)
  * Consult the [FAQ](https://github.com/google/closure-compiler/wiki/FAQ)
- * Search on [Stack Overflow](http://stackoverflow.com/questions/tagged/google-closure-compiler) and in the [Closure Compiler Discuss Group](https://groups.google.com/forum/#!forum/closure-compiler-discuss)
+ * Search on [Stack Overflow](https://stackoverflow.com/questions/tagged/google-closure-compiler) and in the [Closure Compiler Discuss Group](https://groups.google.com/forum/#!forum/closure-compiler-discuss)
+ * Look through the list of [compiler assumptions](https://github.com/google/closure-compiler/wiki/Compiler-Assumptions).
 2. If you still think you have found a bug, make sure someone hasn't already reported it. See the list of [known issues](https://github.com/google/closure-compiler/issues).
 3. If it hasn't been reported yet, post a new issue. Make sure to add enough detail so that the bug can be recreated. The smaller the reproduction code, the better.
 
@@ -116,13 +152,26 @@
 1. Consult the [FAQ](https://github.com/google/closure-compiler/wiki/FAQ) to make sure that the behaviour you would like isn't specifically excluded (such as string inlining).
 2. Make sure someone hasn't requested the same thing. See the list of [known issues](https://github.com/google/closure-compiler/issues).
 3. Read up on [what type of feature requests are accepted](https://github.com/google/closure-compiler/wiki/FAQ#how-do-i-submit-a-feature-request-for-a-new-type-of-optimization).
-4. Submit your reqest as an issue.
+4. Submit your request as an issue.
 
 ### Submitting patches
-1. All contributors must sign a contributor license agreement. See the [CONTRIBUTORS](https://raw.githubusercontent.com/google/closure-compiler/master/CONTRIBUTORS) file for details.
+1. All contributors must sign a contributor license agreement (CLA).
+   A CLA basically says that you own the rights to any code you contribute,
+   and that you give us permission to use that code in Closure Compiler.
+   You maintain the copyright on that code.
+   If you own all the rights to your code, you can fill out an
+   [individual CLA](https://code.google.com/legal/individual-cla-v1.0.html).
+   If your employer has any rights to your code, then they also need to fill out
+   a [corporate CLA](https://code.google.com/legal/corporate-cla-v1.0.html).
+   If you don't know if your employer has any rights to your code, you should
+   ask before signing anything.
+   By default, anyone with an @google.com email address already has a CLA
+   signed for them.
 2. To make sure your changes are of the type that will be accepted, ask about your patch on the [Closure Compiler Discuss Group](https://groups.google.com/forum/#!forum/closure-compiler-discuss)
 3. Fork the repository.
-4. Make your changes.
+4. Make your changes. Check out our
+   [coding conventions](https://github.com/google/closure-compiler/wiki/Contributors#coding-conventions)
+   for details on making sure your code is in correct style.
 5. Submit a pull request for your changes. A project developer will review your work and then merge your request into the project.
 
 ## Closure Compiler License
@@ -153,7 +202,7 @@
 
   <tr>
     <td>URL</td>
-    <td>http://www.mozilla.org/rhino</td>
+    <td>https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino</td>
   </tr>
 
   <tr>
@@ -186,18 +235,13 @@
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td><code>lib/args4j.jar</code></td>
-  </tr>
-
-  <tr>
     <td>URL</td>
-    <td>https://args4j.dev.java.net/</td>
+    <td>http://args4j.kohsuke.org/</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>2.0.26</td>
+    <td>2.33</td>
   </tr>
 
   <tr>
@@ -221,18 +265,13 @@
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td><code>lib/guava.jar</code></td>
-  </tr>
-
-  <tr>
     <td>URL</td>
     <td>https://github.com/google/guava</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>18.0</td>
+    <td>20.0</td>
   </tr>
 
   <tr>
@@ -255,18 +294,13 @@
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td><code>lib/jsr305.jar</code></td>
-  </tr>
-
-  <tr>
     <td>URL</td>
-    <td>http://code.google.com/p/jsr-305/</td>
+    <td>https://github.com/findbugsproject/findbugs</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>svn revision 47</td>
+    <td>3.0.1</td>
   </tr>
 
   <tr>
@@ -289,18 +323,13 @@
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td><code>lib/junit.jar</code></td>
-  </tr>
-
-  <tr>
     <td>URL</td>
-    <td>http://sourceforge.net/projects/junit/</td>
+    <td>http://junit.org/junit4/</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>4.11</td>
+    <td>4.12</td>
   </tr>
 
   <tr>
@@ -323,18 +352,13 @@
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td><code>lib/protobuf-java.jar</code></td>
-  </tr>
-
-  <tr>
     <td>URL</td>
-    <td>http://code.google.com/p/protobuf/</td>
+    <td>https://github.com/google/protobuf</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>2.5.0</td>
+    <td>3.0.2</td>
   </tr>
 
   <tr>
@@ -354,22 +378,46 @@
   </tr>
 </table>
 
-### Truth
+### RE2/J
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td><code>lib/truth.jar</code></td>
+    <td>URL</td>
+    <td>https://github.com/google/re2j</td>
   </tr>
 
   <tr>
+    <td>Version</td>
+    <td>1.3</td>
+  </tr>
+
+  <tr>
+    <td>License</td>
+    <td>New BSD License</td>
+  </tr>
+
+  <tr>
+    <td>Description</td>
+    <td>Linear time regular expression matching in Java.</td>
+  </tr>
+
+  <tr>
+    <td>Local Modifications</td>
+    <td>None</td>
+  </tr>
+</table>
+
+### Truth
+
+<table>
+  <tr>
     <td>URL</td>
     <td>https://github.com/google/truth</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>0.24</td>
+    <td>0.32</td>
   </tr>
 
   <tr>
@@ -392,20 +440,13 @@
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td>
-      <code>lib/ant.jar</code>, <code>lib/ant-launcher.jar</code>
-    </td>
-  </tr>
-
-  <tr>
     <td>URL</td>
-    <td>http://ant.apache.org/bindownload.cgi</td>
+    <td>https://ant.apache.org/bindownload.cgi</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>1.8.1</td>
+    <td>1.9.7</td>
   </tr>
 
   <tr>
@@ -429,18 +470,13 @@
 
 <table>
   <tr>
-    <td>Code Path</td>
-    <td><code>lib/gson.jar</code></td>
-  </tr>
-
-  <tr>
     <td>URL</td>
-    <td>https://code.google.com/p/google-gson/</td>
+    <td>https://github.com/google/gson</td>
   </tr>
 
   <tr>
     <td>Version</td>
-    <td>2.2.4</td>
+    <td>2.7</td>
   </tr>
 
   <tr>
diff --git a/third_party/blink/renderer/devtools/scripts/closure/closure_runner/build_compiler_runner_jar.py b/third_party/blink/renderer/devtools/scripts/closure/closure_runner/build_compiler_runner_jar.py
index 7be1449..cc1e9e4 100755
--- a/third_party/blink/renderer/devtools/scripts/closure/closure_runner/build_compiler_runner_jar.py
+++ b/third_party/blink/renderer/devtools/scripts/closure/closure_runner/build_compiler_runner_jar.py
@@ -44,7 +44,7 @@
         manifest_file.write('Class-Path: %s\n' % closure_jar_relpath)
         manifest_file.close()
         javac_path = os.path.join(java_bin_path, 'javac')
-        javac_command = '%s -target 7 -source 7 -d %s -cp %s %s' % (javac_path, bin_path, rel_to_abs(closure_jar_relpath),
+        javac_command = '%s -target 8 -source 8 -d %s -cp %s %s' % (javac_path, bin_path, rel_to_abs(closure_jar_relpath),
                                                                     ' '.join(java_files))
         run_and_communicate(javac_command, 'Error: javac returned %d')
 
diff --git a/third_party/blink/renderer/devtools/scripts/closure/closure_runner/closure_runner.jar b/third_party/blink/renderer/devtools/scripts/closure/closure_runner/closure_runner.jar
index 8559612d..300f752 100644
--- a/third_party/blink/renderer/devtools/scripts/closure/closure_runner/closure_runner.jar
+++ b/third_party/blink/renderer/devtools/scripts/closure/closure_runner/closure_runner.jar
Binary files differ
diff --git a/third_party/blink/renderer/devtools/scripts/closure/compiler.jar b/third_party/blink/renderer/devtools/scripts/closure/compiler.jar
index ca4eec4..e555293 100644
--- a/third_party/blink/renderer/devtools/scripts/closure/compiler.jar
+++ b/third_party/blink/renderer/devtools/scripts/closure/compiler.jar
Binary files differ
diff --git a/third_party/blink/renderer/devtools/scripts/compile_frontend.py b/third_party/blink/renderer/devtools/scripts/compile_frontend.py
index 2b80a77..53ad724f 100755
--- a/third_party/blink/renderer/devtools/scripts/compile_frontend.py
+++ b/third_party/blink/renderer/devtools/scripts/compile_frontend.py
@@ -251,7 +251,6 @@
     '--extra_annotation_name',
     'suppressGlobalPropertiesCheck',
     '--checks-only',
-    '--allow_method_call_decomposing',
 ]
 
 
diff --git a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/hashes b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/hashes
index 3f1964e..3b0af456 100644
--- a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/hashes
+++ b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/hashes
@@ -1,2 +1,2 @@
-e9e1827178cd3cbef994fca9d1abdb91157ea3ee3f8c1484bfe6611b106df24d jsdoc_validator.jar
-7dc86cebcd4d0e7251458410fdcfeea8c26ed2f00c0a06ee4484e4dd37f67e89 src
+14e6f313ee99ea6291a268a120e9e0367282a62d03e4fb6fb51f0cb0bf76cc7a jsdoc_validator.jar
+f8235688d050fa2ac061a3c7ff841e145efb38dfe29dbaae103126ec21063770 src
diff --git a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/jsdoc_validator.jar b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/jsdoc_validator.jar
index 67671149..7b11d90 100644
--- a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/jsdoc_validator.jar
+++ b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/jsdoc_validator.jar
Binary files differ
diff --git a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/FileCheckerCallable.java b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/FileCheckerCallable.java
index 44e46764..5c293c6 100644
--- a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/FileCheckerCallable.java
+++ b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/FileCheckerCallable.java
@@ -41,7 +41,8 @@
             ValidatorContext context = new ValidatorContext(readScriptText(), fileName);
             ValidationCheckDispatcher dispatcher = new ValidationCheckDispatcher(context);
             dispatcher.registerCheck(new ContextTrackingValidationCheck());
-            NodeTraversal.traverseEs6ScopeRoots(new Compiler(), parseScript(context), null, dispatcher, true);
+            NodeTraversal.traverseScopeRoots(
+                    new Compiler(), parseScript(context), null, dispatcher, true);
             return context;
         } catch (FileNotFoundException e) {
             logError("File not found: " + fileName);
diff --git a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java
index 4d5deea6..221faea 100644
--- a/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java
+++ b/third_party/blink/renderer/devtools/scripts/jsdoc_validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java
@@ -59,6 +59,13 @@
         Set<String> formalParamNames = new HashSet<>();
         for (int i = 0; i < function.parameterNames.size(); ++i) {
             String paramName = function.parameterNames.get(i);
+            /**
+             * Varargs can be specified as `...varargs`, but will be named as
+             * `varargs` in the JSDoc
+             */
+            if (paramName.startsWith("...")) {
+                paramName = paramName.substring(3);
+            }
             if (!formalParamNames.add(paramName)) {
                 reportErrorAtNodeStart(function.functionNode,
                         String.format("Duplicate function argument name: %s", paramName));
diff --git a/third_party/blink/renderer/devtools/scripts/local_node.py b/third_party/blink/renderer/devtools/scripts/local_node.py
index 35ad2c9..25a378c 100644
--- a/third_party/blink/renderer/devtools/scripts/local_node.py
+++ b/third_party/blink/renderer/devtools/scripts/local_node.py
@@ -12,6 +12,8 @@
 THIRD_PARTY_PATH = path.join(SCRIPTS_PATH, '..', '..', '..', '..')
 NODE_PATH = path.join(THIRD_PARTY_PATH, 'node')
 ESLINT_PATH = path.join(THIRD_PARTY_PATH, 'devtools-node-modules', 'third_party', 'node_modules', 'eslint', 'bin', 'eslint.js')
+KARMA_PATH = path.join(THIRD_PARTY_PATH, 'devtools-node-modules', 'third_party', 'node_modules', 'karma', 'bin', 'karma')
+NODE_MODULES_PATH = path.join(THIRD_PARTY_PATH, 'devtools-node-modules', 'third_party', 'node_modules')
 
 try:
     old_sys_path = sys.path[:]
@@ -27,3 +29,11 @@
 
 def eslint_path():
     return ESLINT_PATH
+
+
+def karma_path():
+    return KARMA_PATH
+
+
+def node_modules_path():
+    return NODE_MODULES_PATH
diff --git a/third_party/blink/renderer/devtools/scripts/run_tests.py b/third_party/blink/renderer/devtools/scripts/run_tests.py
new file mode 100755
index 0000000..5289dcd4
--- /dev/null
+++ b/third_party/blink/renderer/devtools/scripts/run_tests.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 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.
+
+import os
+import re
+import subprocess
+import sys
+
+import local_node
+
+is_cygwin = sys.platform == "cygwin"
+chrome_binary = None
+
+if len(sys.argv) >= 2:
+    chrome_binary = re.sub(r"^\-\-chrome-binary=(.*)", "\\1", sys.argv[1])
+    is_executable = os.path.exists(chrome_binary) and os.path.isfile(chrome_binary) and os.access(chrome_binary, os.X_OK)
+    if not is_executable:
+        print("Unable to find a Chrome binary at \"%s\"" % chrome_binary)
+        sys.exit(1)
+
+
+def popen(arguments, cwd=None, env=None):
+    return subprocess.Popen(arguments, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
+
+
+def to_platform_path_exact(filepath):
+    if not is_cygwin:
+        return filepath
+    output, _ = popen(["cygpath", "-w", filepath]).communicate()
+    # pylint: disable=E1103
+    return output.strip().replace("\\", "\\\\")
+
+
+scripts_path = os.path.dirname(os.path.abspath(__file__))
+devtools_path = os.path.dirname(scripts_path)
+
+print("Running tests with Karma...")
+if (chrome_binary is not None):
+    print("Using custom Chrome Binary (%s)\n" % chrome_binary)
+else:
+    print("Using system Chrome")
+
+
+def run_tests():
+    karma_errors_found = False
+
+    karmaconfig_path = os.path.join(devtools_path, "karma.conf.js")
+    exec_command = [local_node.node_path(), local_node.karma_path(), "start", to_platform_path_exact(karmaconfig_path)]
+
+    env = {'NODE_PATH': local_node.node_modules_path()}
+    if (chrome_binary is not None):
+        env['CHROME_BIN'] = chrome_binary
+
+    karma_proc = popen(exec_command, cwd=devtools_path, env=env)
+
+    (karma_proc_out, _) = karma_proc.communicate()
+    if karma_proc.returncode != 0:
+        karma_errors_found = True
+    else:
+        print("Karma exited successfully")
+
+    print(karma_proc_out)
+    return karma_errors_found
+
+
+errors_found = run_tests()
+
+if errors_found:
+    print("ERRORS DETECTED")
+    sys.exit(1)
diff --git a/third_party/blink/renderer/devtools/tests/front_end/platform/utilities.ts b/third_party/blink/renderer/devtools/tests/front_end/platform/utilities.ts
new file mode 100644
index 0000000..e7f68e4
--- /dev/null
+++ b/third_party/blink/renderer/devtools/tests/front_end/platform/utilities.ts
@@ -0,0 +1,305 @@
+// Copyright 2019 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.
+
+const { assert } = chai;
+
+// FIXME: Convert to pure functions as these utilities have side effects.
+import '../../../front_end/platform/utilities.js';
+
+declare global {
+  interface Array<T> {
+    remove(value: T, firstOnly: boolean): boolean;
+    mergeOrdered(array: T[], comparator: (a: T, b: T) => number): T[];
+    intersectOrdered(array: T[], comparator: (a: T, b: T) => number): T[];
+    upperBound(value: T, comparator?: (a: T, b: T) => number): number;
+    lowerBound(value: T, comparator?: (a: T, b: T) => number): number;
+    binaryIndexOf(value: T, comparator: (a: T, b: T) => number): number;
+    qselect(idx: number): number;
+    sortRange(comparator: (a: T, b: T) => number, leftBound: number, rightBound: number, sortWindowLeft: number, sortWindowRight: number): T[];
+  }
+
+  interface String {
+    trimURL(base: string): string;
+    toBase64(): string;
+    trimMiddle(maxLength: number): string;
+    repeat(length: number): string;
+  }
+
+  interface StringConstructor {
+    hashCode(value: string): number;
+    naturalOrderComparator(a: string, b: string): number;
+  }
+}
+
+describe('Utilities', () => {
+  it('removes values', () => {
+    const testArrays = [
+      [], [], [], [1], [1], [1], [1, 2, 3, 4, 5, 4, 3, 2, 1], [1, 3, 4, 5, 4, 3, 2, 1], [1, 3, 4, 5, 4, 3, 1],
+      [2, 2, 2, 2, 2], [2, 2, 2, 2], [], [2, 2, 2, 1, 2, 2, 3, 2], [2, 2, 1, 2, 2, 3, 2], [1, 3]
+    ];
+
+    for (let i = 0; i < testArrays.length; i += 3) {
+      let actual = testArrays[i].slice(0);
+      let expected = testArrays[i + 1];
+      actual.remove(2, true);
+      assert.deepStrictEqual(expected, actual, 'Removing firstOnly (true) failed');
+
+      actual = testArrays[i].slice(0);
+      expected = testArrays[i + 2];
+      actual.remove(2, false);
+      assert.deepStrictEqual(expected, actual, 'Removing firstOnly (false) failed');
+    }
+  });
+
+  it('orders merge intersect', () => {
+    function comparator(a: number, b: number) {
+      return a - b;
+    }
+
+    function count(a: number[], x: number) {
+      return a.upperBound(x) - a.lowerBound(x);
+    }
+
+    function testAll(a: number[], b: number[]) {
+      testOperation(a, b, a.mergeOrdered(b, comparator), Math.max, 'U');
+      testOperation(a, b, a.intersectOrdered(b, comparator), Math.min, 'x');
+    }
+
+    function testOperation(a: number[], b: number[], actual: number[], checkOperation: (...values: number[]) => number, opName: string) {
+      const allValues = a.concat(b).concat(actual);
+      let expectedCount: number;
+      let actualCount: number;
+
+      for (let i = 0; i < allValues.length; ++i) {
+        let value = allValues[i];
+        expectedCount = checkOperation(count(a, value), count(b, value));
+        actualCount = count(actual, value);
+        assert.equal(expectedCount, actualCount,
+            'Incorrect result for value: ' + value + ' at [' + a + '] ' + opName + ' [' + b + '] -> [' + actual +
+                ']');
+      }
+
+      // FIXME: This appears to be a no-op given the fact that sort works in-place.
+      assert.deepStrictEqual(actual.sort(), actual, 'Result array is ordered');
+    }
+
+    const testArrays = [
+      [], [], [1], [], [1, 2, 2, 2, 3], [], [4, 5, 5, 8, 8], [1, 1, 1, 2, 6], [1, 2, 2, 2, 2, 3, 3, 4],
+      [2, 2, 2, 3, 3, 3, 3], [1, 2, 3, 4, 5], [1, 2, 3]
+    ];
+
+    for (let i = 0; i < testArrays.length; i += 2) {
+      testAll(testArrays[i], testArrays[i + 1]);
+      testAll(testArrays[i + 1], testArrays[i]);
+    }
+  });
+
+  it('calculates the binary index', () => {
+    const testArrays = [
+      [], [1], [1, 10], [1, 10, 11, 12, 13, 14, 100], [-100, -50, 0, 50, 100], [-100, -14, -13, -12, -11, -10, -1]
+    ];
+
+    function testArray(array: number[]) {
+      function comparator(a: number, b: number) {
+        return a < b ? -1 : (a > b ? 1 : 0);
+      }
+
+      for (let i = -100; i <= 100; ++i) {
+        let reference = array.indexOf(i);
+        let actual = array.binaryIndexOf(i, comparator);
+        assert.deepStrictEqual(reference, actual);
+      }
+      return true;
+    }
+
+    for (let i = 0, l = testArrays.length; i < l; ++i) {
+      testArray(testArrays[i]);
+    }
+  });
+
+  it('calculates the lower bound', () => {
+    const testArrays = [[], [1], [-1, -1, 0, 0, 0, 0, 2, 3, 4, 4, 4, 7, 9, 9, 9]];
+
+    function testArray(array: number[], useComparator: boolean) {
+      function comparator(a: number, b: number) {
+        return a < b ? -1 : (a > b ? 1 : 0);
+      }
+
+      for (let value = -2; value <= 12; ++value) {
+        let index = useComparator ? array.lowerBound(value, comparator) : array.lowerBound(value);
+        assert.isTrue(0 <= index && index <= array.length, 'index is not within bounds');
+        assert.isTrue(index === 0 || array[index - 1] < value, 'array[index - 1] >= value');
+        assert.isTrue(index === array.length || array[index] >= value, 'array[index] < value');
+      }
+    }
+
+    for (let i = 0, l = testArrays.length; i < l; ++i) {
+      testArray(testArrays[i], false);
+      testArray(testArrays[i], true);
+    }
+  });
+
+  it('calculates the upper bound', () => {
+    const testArrays = [[], [1], [-1, -1, 0, 0, 0, 0, 2, 3, 4, 4, 4, 7, 9, 9, 9]];
+
+    function testArray(array: number[], useComparator: boolean) {
+      function comparator(a: number, b: number) {
+        return a < b ? -1 : (a > b ? 1 : 0);
+      }
+
+      for (let value = -2; value <= 12; ++value) {
+        let index = useComparator ? array.upperBound(value, comparator) : array.upperBound(value);
+        assert.isTrue(0 <= index && index <= array.length, 'index is out of bounds');
+        assert.isTrue(index === 0 || array[index - 1] <= value, 'array[index - 1] > value');
+        assert.isTrue(index === array.length || array[index] > value, 'array[index] <= value');
+      }
+    }
+
+    for (let i = 0, l = testArrays.length; i < l; ++i) {
+      testArray(testArrays[i], false);
+      testArray(testArrays[i], true);
+    }
+  });
+
+  it('q selects', () => {
+    let testArrays =
+        [[], [0], [0, 0, 0, 0, 0, 0, 0, 0], [4, 3, 2, 1], [1, 2, 3, 4, 5], [-1, 3, 2, 7, 7, 7, 10, 12, 3, 4, -1, 2]];
+
+    function testArray(array: number[]) {
+      function compare(a: number, b: number) {
+        return a - b;
+      }
+      const sorted = array.slice(0).sort(compare);
+      const reference = {min: sorted[0], median: sorted[Math.floor(sorted.length / 2)], max: sorted[sorted.length - 1]};
+      const actual = {
+        min: array.slice(0).qselect(0),
+        median: array.slice(0).qselect(Math.floor(array.length / 2)),
+        max: array.slice(0).qselect(array.length - 1)
+      };
+
+      assert.deepStrictEqual(reference, actual);
+    }
+    for (let i = 0, l = testArrays.length; i < l; ++i)
+      testArray(testArrays[i]);
+  });
+
+  it('sorts ranges', () => {
+    const testArrays = [[], [1], [2, 1], [6, 4, 2, 7, 10, 15, 1], [10, 44, 3, 6, 56, 66, 10, 55, 32, 56, 2, 5]];
+
+    function testArray(array: number[]) {
+      function comparator(a: number, b: number) {
+        return a < b ? -1 : (a > b ? 1 : 0);
+      }
+
+      for (let left = 0, l = array.length - 1; left < l; ++left) {
+        for (let right = left, r = array.length; right < r; ++right) {
+          for (let first = left; first <= right; ++first) {
+            for (let count = 1, k = right - first + 1; count <= k; ++count) {
+              let actual = array.slice(0);
+              actual.sortRange(comparator, left, right, first, first + count - 1);
+              assert.deepStrictEqual(array.slice(0, left), actual.slice(0, left), 'left ' + left + ' ' + right + ' ' + count);
+              assert.deepStrictEqual(
+                  array.slice(right + 1), actual.slice(right + 1), 'right ' + left + ' ' + right + ' ' + count);
+
+              let middle = array.slice(left, right + 1);
+              middle.sort(comparator);
+              assert.deepStrictEqual(
+                  middle.slice(first - left, first - left + count), actual.slice(first, first + count),
+                  'sorted ' + left + ' ' + right + ' ' + first + ' ' + count);
+
+              const actualRest = actual.slice(first + count, right + 1);
+              actualRest.sort(comparator);
+              assert.deepStrictEqual(
+                  middle.slice(first - left + count), actualRest,
+                  'unsorted ' + left + ' ' + right + ' ' + first + ' ' + count);
+            }
+          }
+        }
+      }
+    }
+
+    for (let i = 0, len = testArrays.length; i < len; ++i) {
+      testArray(testArrays[i]);
+    }
+  });
+
+  it('sorts natural order', () => {
+    const testArray = [
+      'dup', 'a1',   'a4222',  'a91',       'a07',      'dup', 'a7',        'a007',      'abc00',     'abc0',
+      'abc', 'abcd', 'abc000', 'x10y20z30', 'x9y19z29', 'dup', 'x09y19z29', 'x10y22z23', 'x10y19z43', '1',
+      '10',  '11',   'dup',    '2',         '2',        '2',   '555555',    '5',         '5555',      'dup',
+    ];
+
+    for (let i = 0, n = testArray.length; i < n; ++i) {
+      assert.equal(0, String.naturalOrderComparator(testArray[i], testArray[i]), 'comparing equal strings');
+    }
+
+    testArray.sort(String.naturalOrderComparator);
+
+    // Check comparator's transitivity.
+    for (let i = 0, n = testArray.length; i < n; ++i) {
+      for (let j = 0; j < n; ++j) {
+        const a = testArray[i];
+        const b = testArray[j];
+        const diff = String.naturalOrderComparator(a, b);
+        if (diff === 0)
+          assert.equal(a, b, 'zero diff');
+        else if (diff < 0)
+          assert.isTrue(i < j);
+        else
+          assert.isTrue(i > j);
+      }
+    }
+  });
+
+  it('hashes strings', () => {
+    const stringA = ' '.repeat(10000);
+    const stringB = stringA + ' ';
+    const hashA = String.hashCode(stringA);
+    assert.isTrue(hashA !== String.hashCode(stringB));
+    assert.isTrue(isFinite(hashA));
+    assert.isTrue(hashA + 1 !== hashA);
+  });
+
+  it('trims URLs', () => {
+    const baseURLDomain = 'www.chromium.org';
+    const testArray = [
+      'http://www.chromium.org/foo/bar',
+      '/foo/bar',
+      'https://www.CHromium.ORG/BAZ/zoo',
+      '/BAZ/zoo',
+      'https://example.com/foo[]',
+      'example.com/foo[]',
+    ];
+    for (let i = 0; i < testArray.length; i += 2) {
+      const url = testArray[i];
+      const expected = testArray[i + 1];
+      assert.equal(expected, url.trimURL(baseURLDomain), url);
+    }
+  });
+
+  it('converts to base64', () => {
+    const testArray = [
+      '', '', 'a', 'YQ==', 'bc', 'YmM=', 'def', 'ZGVm', 'ghij', 'Z2hpag==', 'klmno', 'a2xtbm8=', 'pqrstu', 'cHFyc3R1',
+      String.fromCharCode(0x444, 0x5555, 0x66666, 0x777777), '0YTllZXmmabnnbc='
+    ];
+    for (let i = 0; i < testArray.length; i += 2) {
+      const string = testArray[i];
+      const encodedString = testArray[i + 1];
+      assert.equal(encodedString, string.toBase64());
+    }
+  });
+
+  it('trims the middle of strings', () => {
+    const testArray = [
+      '', '!', '\uD83D\uDE48A\uD83D\uDE48L\uD83D\uDE48I\uD83D\uDE48N\uD83D\uDE48A\uD83D\uDE48\uD83D\uDE48', 'test'
+    ];
+    for (let string of testArray) {
+      for (let maxLength = string.length + 1; maxLength > 0; --maxLength) {
+        const trimmed = string.trimMiddle(maxLength);
+        assert.isTrue(trimmed.length <= maxLength);
+      }
+    }
+  });
+});
diff --git a/third_party/blink/renderer/devtools/tsconfig.json b/third_party/blink/renderer/devtools/tsconfig.json
new file mode 100644
index 0000000..1dbc1cc
--- /dev/null
+++ b/third_party/blink/renderer/devtools/tsconfig.json
@@ -0,0 +1,5 @@
+{
+  "compilerOptions": {
+    "typeRoots": ["../../../devtools-node-modules/third_party/node_modules/@types"]
+  }
+}
diff --git a/third_party/blink/renderer/modules/badging/badge.cc b/third_party/blink/renderer/modules/badging/badge.cc
index 8471c03..10eb5ec 100644
--- a/third_party/blink/renderer/modules/badging/badge.cc
+++ b/third_party/blink/renderer/modules/badging/badge.cc
@@ -37,7 +37,8 @@
                 const BadgeOptions* options,
                 ExceptionState& exception_state) {
   BadgeFromState(script_state)
-      ->SetBadge(options->scope(), mojom::blink::BadgeValue::NewFlag(0));
+      ->SetBadge(options->scope(), mojom::blink::BadgeValue::NewFlag(0),
+                 exception_state);
 }
 
 // static
@@ -53,28 +54,38 @@
                 const BadgeOptions* options,
                 ExceptionState& exception_state) {
   if (content == 0) {
-    Badge::clear(script_state, options);
+    Badge::clear(script_state, options, exception_state);
   } else {
     BadgeFromState(script_state)
         ->SetBadge(options->scope(),
-                   mojom::blink::BadgeValue::NewNumber(content));
+                   mojom::blink::BadgeValue::NewNumber(content),
+                   exception_state);
   }
 }
 
 // static
-void Badge::clear(ScriptState* script_state, const BadgeOptions* options) {
-  BadgeFromState(script_state)->ClearBadge(options->scope());
+void Badge::clear(ScriptState* script_state,
+                  const BadgeOptions* options,
+                  ExceptionState& exception_state) {
+  BadgeFromState(script_state)->ClearBadge(options->scope(), exception_state);
 }
 
-void Badge::SetBadge(WTF::String scope, mojom::blink::BadgeValuePtr value) {
-  // Resolve |scope| against the URL of the current document/worker.
-  KURL scope_url = KURL(execution_context_->Url(), scope);
-  badge_service_->SetBadge(scope_url, std::move(value));
+void Badge::SetBadge(WTF::String scope,
+                     mojom::blink::BadgeValuePtr value,
+                     ExceptionState& exception_state) {
+  base::Optional<KURL> scope_url = ScopeStringToURL(scope, exception_state);
+  if (!scope_url)
+    return;
+
+  badge_service_->SetBadge(*scope_url, std::move(value));
 }
 
-void Badge::ClearBadge(WTF::String scope) {
-  // Resolve |scope| against the URL of the current document/worker.
-  badge_service_->ClearBadge(KURL(execution_context_->Url(), scope));
+void Badge::ClearBadge(WTF::String scope, ExceptionState& exception_state) {
+  base::Optional<KURL> scope_url = ScopeStringToURL(scope, exception_state);
+  if (!scope_url)
+    return;
+
+  badge_service_->ClearBadge(*scope_url);
 }
 
 void Badge::Trace(blink::Visitor* visitor) {
@@ -95,4 +106,22 @@
   return Badge::From(ExecutionContext::From(script_state));
 }
 
+base::Optional<KURL> Badge::ScopeStringToURL(WTF::String& scope,
+                                             ExceptionState& exception_state) {
+  // Resolve |scope| against the URL of the current document/worker.
+  KURL scope_url = KURL(execution_context_->Url(), scope);
+
+  if (!scope_url.IsValid()) {
+    exception_state.ThrowTypeError("Invalid scope URL");
+    return base::nullopt;
+  }
+
+  // TODO(mgiuca): Check that URL is same-origin as the execution context. If
+  // not, fail with SecurityError (https://crbug.com/1001404). (This is not a
+  // security bug, since the same-origin check is currently done on the browser
+  // side, but we still want to report the failure as an exception.)
+
+  return base::Optional<KURL>(scope_url);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/badging/badge.h b/third_party/blink/renderer/modules/badging/badge.h
index 0265885..ee62f443c 100644
--- a/third_party/blink/renderer/modules/badging/badge.h
+++ b/third_party/blink/renderer/modules/badging/badge.h
@@ -5,10 +5,12 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_BADGING_BADGE_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_BADGING_BADGE_H_
 
+#include "base/optional.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/blink/public/mojom/badging/badging.mojom-blink.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/supplementable.h"
+#include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
@@ -39,16 +41,22 @@
                   ExceptionState&);
   static void set(ScriptState*, ExceptionState&);
   static void set(ScriptState*, uint64_t content, ExceptionState&);
-  static void clear(ScriptState*, const BadgeOptions*);
+  static void clear(ScriptState*, const BadgeOptions*, ExceptionState&);
 
-  void SetBadge(WTF::String scope, mojom::blink::BadgeValuePtr value);
-  void ClearBadge(WTF::String scope);
+  void SetBadge(WTF::String scope,
+                mojom::blink::BadgeValuePtr value,
+                ExceptionState&);
+  void ClearBadge(WTF::String scope, ExceptionState&);
 
   void Trace(blink::Visitor*) override;
 
  private:
   static Badge* BadgeFromState(ScriptState* script_state);
 
+  // If the URL is invalid, sets an exception and returns nullopt, which callers
+  // should check for and stop doing work.
+  base::Optional<KURL> ScopeStringToURL(WTF::String& scope, ExceptionState&);
+
   mojo::Remote<blink::mojom::blink::BadgeService> badge_service_;
   Member<ExecutionContext> execution_context_;
 };
diff --git a/third_party/blink/renderer/modules/badging/experimental_badge.idl b/third_party/blink/renderer/modules/badging/experimental_badge.idl
index 3e84590f..1273bcc 100644
--- a/third_party/blink/renderer/modules/badging/experimental_badge.idl
+++ b/third_party/blink/renderer/modules/badging/experimental_badge.idl
@@ -13,5 +13,5 @@
 ] interface ExperimentalBadge {
   [CallWith=ScriptState, RaisesException, MeasureAs=BadgeSet]
   static void set(optional [EnforceRange] unsigned long long contents, optional BadgeOptions options);
-  [CallWith=ScriptState, MeasureAs=BadgeClear] static void clear(optional BadgeOptions options);
+  [CallWith=ScriptState, RaisesException, MeasureAs=BadgeClear] static void clear(optional BadgeOptions options);
 };
diff --git a/third_party/blink/renderer/modules/cache_storage/cache.cc b/third_party/blink/renderer/modules/cache_storage/cache.cc
index 0dab4a126..844223a 100644
--- a/third_party/blink/renderer/modules/cache_storage/cache.cc
+++ b/third_party/blink/renderer/modules/cache_storage/cache.cc
@@ -865,7 +865,7 @@
 
   HeapVector<RequestInfo> request_infos;
   request_infos.resize(requests.size());
-  HeapVector<ScriptPromise> promises;
+  Vector<ScriptPromise> promises;
   promises.resize(requests.size());
   for (wtf_size_t i = 0; i < requests.size(); ++i) {
     if (!requests[i]->url().ProtocolIsInHTTPFamily()) {
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_transaction.idl b/third_party/blink/renderer/modules/indexeddb/idb_transaction.idl
index 4a09acb..5e68ee6 100644
--- a/third_party/blink/renderer/modules/indexeddb/idb_transaction.idl
+++ b/third_party/blink/renderer/modules/indexeddb/idb_transaction.idl
@@ -47,10 +47,7 @@
 
     // Methods
     [RaisesException] IDBObjectStore objectStore(DOMString name);
-    [
-      RaisesException,
-      RuntimeEnabled=IDBTransactionCommit
-    ] void commit();
+    [RaisesException] void commit();
     [RaisesException] void abort();
 
     // Events
diff --git a/third_party/blink/renderer/modules/mediastream/media_devices_test.cc b/third_party/blink/renderer/modules/mediastream/media_devices_test.cc
index 28727631..0147fb81 100644
--- a/third_party/blink/renderer/modules/mediastream/media_devices_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_devices_test.cc
@@ -179,7 +179,6 @@
   bool isFulfilled() { return is_fulfilled_; }
   bool isRejected() { return is_rejected_; }
   ScriptValue argument() { return saved_arg_; }
-  void Trace(blink::Visitor* visitor) { visitor->Trace(saved_arg_); }
 
  private:
   class MyScriptFunction : public ScriptFunction {
diff --git a/third_party/blink/renderer/modules/nfc/BUILD.gn b/third_party/blink/renderer/modules/nfc/BUILD.gn
index bb11190..2ee6df3b 100644
--- a/third_party/blink/renderer/modules/nfc/BUILD.gn
+++ b/third_party/blink/renderer/modules/nfc/BUILD.gn
@@ -10,8 +10,6 @@
     "ndef_message.h",
     "ndef_record.cc",
     "ndef_record.h",
-    "nfc_constants.cc",
-    "nfc_constants.h",
     "nfc_error_event.cc",
     "nfc_error_event.h",
     "nfc_proxy.cc",
diff --git a/third_party/blink/renderer/modules/nfc/ndef_record.cc b/third_party/blink/renderer/modules/nfc/ndef_record.cc
index 9628789f..a4cedf4 100644
--- a/third_party/blink/renderer/modules/nfc/ndef_record.cc
+++ b/third_party/blink/renderer/modules/nfc/ndef_record.cc
@@ -31,7 +31,8 @@
                                     ExceptionState& exception_state) {
   // https://w3c.github.io/web-nfc/#mapping-string-to-ndef
   if (data.IsEmpty() || !data.V8Value()->IsString()) {
-    exception_state.ThrowTypeError(kNfcTextRecordTypeError);
+    exception_state.ThrowTypeError(
+        "The data for 'text' NDEFRecords must be a String.");
     return nullptr;
   }
 
@@ -43,10 +44,10 @@
   // always uses "lang=en-US;charset=UTF-8" when pushing the record to a NFC
   // tag.
   if (mime_type.IsEmpty()) {
-    mime_type = kNfcPlainTextMimeType;
-  } else if (!mime_type.StartsWithIgnoringASCIICase(kNfcPlainTextMimePrefix)) {
+    mime_type = "text/plain";
+  } else if (!mime_type.StartsWithIgnoringASCIICase("text/")) {
     exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
-                                      kNfcTextRecordMediaTypeError);
+                                      "Invalid media type for 'text' record.");
     return nullptr;
   }
 
@@ -60,7 +61,8 @@
                                    ExceptionState& exception_state) {
   // https://w3c.github.io/web-nfc/#mapping-url-to-ndef
   if (data.IsEmpty() || !data.V8Value()->IsString()) {
-    exception_state.ThrowTypeError(kNfcUrlRecordTypeError);
+    exception_state.ThrowTypeError(
+        "The data for 'url' NDEFRecord must be a String.");
     return nullptr;
   }
 
@@ -68,7 +70,7 @@
   String url = ToCoreString(data.V8Value().As<v8::String>());
   if (!KURL(NullURL(), url).IsValid()) {
     exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
-                                      kNfcUrlRecordParseError);
+                                      "Cannot parse data for 'url' record.");
     return nullptr;
   }
   return MakeGarbageCollected<NDEFRecord>("url", media_type,
@@ -80,22 +82,22 @@
                                     ExceptionState& exception_state) {
   // https://w3c.github.io/web-nfc/#mapping-json-to-ndef
   if (data.IsEmpty()) {
-    exception_state.ThrowTypeError(kNfcJsonRecordNoDataError);
+    exception_state.ThrowTypeError(
+        "The data for 'json' NDEFRecord is missing.");
     return nullptr;
   }
 
   // ExtractMIMETypeFromMediaType() ignores parameters of the MIME type.
   String mime_type = ExtractMIMETypeFromMediaType(AtomicString(media_type));
   if (mime_type.IsEmpty()) {
-    mime_type = kNfcJsonMimeType;
-  } else if (mime_type != kNfcJsonMimeType &&
-             mime_type != kNfcJsonTextMimeType &&
-             !mime_type.EndsWithIgnoringASCIICase(kNfcJsonMimePostfix)) {
+    mime_type = "application/json";
+  } else if (mime_type != "application/json" && mime_type != "text/json" &&
+             !mime_type.EndsWithIgnoringASCIICase("+json")) {
     // According to https://mimesniff.spec.whatwg.org/#json-mime-type, a JSON
     // MIME type is any MIME type whose subtype ends in "+json" or whose
     // essence is "application/json" or "text/json".
     exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
-                                      kNfcJsonRecordMediaTypeError);
+                                      "Invalid media type for 'json' record.");
     return nullptr;
   }
 
@@ -120,14 +122,15 @@
                                       ExceptionState& exception_state) {
   // https://w3c.github.io/web-nfc/#mapping-binary-data-to-ndef
   if (data.IsEmpty() || !data.V8Value()->IsArrayBuffer()) {
-    exception_state.ThrowTypeError(kNfcOpaqueRecordTypeError);
+    exception_state.ThrowTypeError(
+        "The data for 'opaque' NDEFRecord must be an ArrayBuffer.");
     return nullptr;
   }
 
   // ExtractMIMETypeFromMediaType() ignores parameters of the MIME type.
   String mime_type = ExtractMIMETypeFromMediaType(AtomicString(media_type));
   if (mime_type.IsEmpty()) {
-    mime_type = kNfcOpaqueMimeType;
+    mime_type = "application/octet-stream";
   }
   DOMArrayBuffer* array_buffer =
       V8ArrayBuffer::ToImpl(data.V8Value().As<v8::Object>());
@@ -178,7 +181,7 @@
   } else {
     // TODO(https://crbug.com/520391): Support creating smart-poster and
     // external type records.
-    exception_state.ThrowTypeError(kNfcRecordTypeError);
+    exception_state.ThrowTypeError("Unknown NDEFRecord type.");
     return nullptr;
   }
 }
@@ -192,11 +195,11 @@
 
 NDEFRecord::NDEFRecord(const String& text)
     : record_type_("text"),
-      media_type_(StringView(kNfcPlainTextMimeType) + kNfcCharSetUTF8),
+      media_type_("text/plain;charset=UTF-8"),
       data_(GetUTF8DataFromString(text)) {}
 
 NDEFRecord::NDEFRecord(DOMArrayBuffer* array_buffer)
-    : record_type_("opaque"), media_type_(kNfcOpaqueMimeType) {
+    : record_type_("opaque"), media_type_("application/octet-stream") {
   data_.Append(static_cast<uint8_t*>(array_buffer->Data()),
                array_buffer->ByteLength());
 }
diff --git a/third_party/blink/renderer/modules/nfc/nfc_constants.cc b/third_party/blink/renderer/modules/nfc/nfc_constants.cc
deleted file mode 100644
index 6961e4a..0000000
--- a/third_party/blink/renderer/modules/nfc/nfc_constants.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2019 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 "third_party/blink/renderer/modules/nfc/nfc_constants.h"
-
-namespace blink {
-
-const char kNfcJsonMimePostfix[] = "+json";
-const char kNfcJsonMimePrefix[] = "application/";
-const char kNfcJsonMimeType[] = "application/json";
-const char kNfcJsonTextMimeType[] = "text/json";
-const char kNfcOpaqueMimeType[] = "application/octet-stream";
-const char kNfcPlainTextMimeType[] = "text/plain";
-const char kNfcPlainTextMimePrefix[] = "text/";
-const char kNfcProtocolHttps[] = "https";
-const char kNfcCharSetUTF8[] = ";charset=UTF-8";
-
-// Error messages.
-const char kNfcNotAllowed[] = "NFC operation not allowed.";
-const char kNfcNotSupported[] =
-    "No NFC adapter or cannot establish connection.";
-const char kNfcNotReadable[] = "NFC is not enabled.";
-const char kNfcTextRecordTypeError[] =
-    "The data for 'text' NDEFRecords must be of String.";
-const char kNfcSetIdError[] = "Cannot set WebNFC Id.";
-const char kNfcTextRecordMediaTypeError[] =
-    "Invalid media type for 'text' record.";
-const char kNfcUrlRecordTypeError[] =
-    "The data for 'url' NDEFRecord must be of String type.";
-const char kNfcUrlRecordParseError[] = "Cannot parse data for 'url' record.";
-const char kNfcJsonRecordNoDataError[] =
-    "The data for 'json' NDEFRecord is missing.";
-const char kNfcJsonRecordStringifyError[] =
-    "Cannot stringify data for 'json' record.";
-const char kNfcJsonRecordMediaTypeError[] =
-    "Invalid media type for 'json' record.";
-const char kNfcOpaqueRecordTypeError[] =
-    "The data for 'opaque' NDEFRecord must be of ArrayBuffer type.";
-const char kNfcRecordTypeError[] = "Unknown NDEFRecord type.";
-const char kNfcRecordDataError[] = "Nonempty NDEFRecord must have data.";
-const char kNfcRecordError[] = "Invalid NDEFRecordType was provided.";
-const char kNfcMsgTypeError[] = "Invalid NDEFMessageSource type was provided.";
-const char kNfcEmptyMsg[] = "Empty NDEFMessage was provided.";
-const char kNfcInvalidMsg[] = "Invalid NFC message was provided.";
-const char kNfcMsgConvertError[] = "Cannot convert NDEFMessage.";
-const char kNfcMsgMaxSizeError[] =
-    "NDEFMessage exceeds maximum supported size.";
-const char kNfcUrlPatternError[] = "Invalid URL pattern was provided.";
-const char kNfcInvalidPushTimeout[] =
-    "Invalid NFCPushOptions.timeout value was provided.";
-const char kNfcWatchIdNotFound[] = "Provided watch id cannot be found.";
-const char kNfcAccessInNonTopFrame[] =
-    "NFC interfaces are only avaliable in a top-level browsing context";
-const char kNfcCancelled[] = "The NFC operation was cancelled.";
-const char kNfcTimeout[] = "NFC operation has timed out.";
-const char kNfcUnknownError[] = "An unknown NFC error has occurred.";
-const char kNfcDataTransferError[] = "NFC data transfer error has occurred.";
-const char kNfcNoModificationAllowed[] = "NFC operation cannot be cancelled.";
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/modules/nfc/nfc_constants.h b/third_party/blink/renderer/modules/nfc/nfc_constants.h
deleted file mode 100644
index 8196666..0000000
--- a/third_party/blink/renderer/modules/nfc/nfc_constants.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_CONSTANTS_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_CONSTANTS_H_
-
-
-namespace blink {
-
-extern const char kNfcJsonMimePostfix[];
-extern const char kNfcJsonMimePrefix[];
-extern const char kNfcJsonMimeType[];
-extern const char kNfcJsonTextMimeType[];
-extern const char kNfcOpaqueMimeType[];
-extern const char kNfcPlainTextMimeType[];
-extern const char kNfcPlainTextMimePrefix[];
-extern const char kNfcProtocolHttps[];
-extern const char kNfcCharSetUTF8[];
-
-// Error messages.
-extern const char kNfcNotAllowed[];
-extern const char kNfcNotSupported[];
-extern const char kNfcNotReadable[];
-extern const char kNfcTextRecordTypeError[];
-extern const char kNfcSetIdError[];
-extern const char kNfcTextRecordMediaTypeError[];
-extern const char kNfcUrlRecordTypeError[];
-extern const char kNfcUrlRecordParseError[];
-extern const char kNfcJsonRecordNoDataError[];
-extern const char kNfcJsonRecordStringifyError[];
-extern const char kNfcJsonRecordMediaTypeError[];
-extern const char kNfcOpaqueRecordTypeError[];
-extern const char kNfcRecordTypeError[];
-extern const char kNfcRecordDataError[];
-extern const char kNfcRecordError[];
-extern const char kNfcMsgTypeError[];
-extern const char kNfcEmptyMsg[];
-extern const char kNfcInvalidMsg[];
-extern const char kNfcMsgConvertError[];
-extern const char kNfcMsgMaxSizeError[];
-extern const char kNfcUrlPatternError[];
-extern const char kNfcInvalidPushTimeout[];
-extern const char kNfcWatchIdNotFound[];
-extern const char kNfcAccessInNonTopFrame[];
-extern const char kNfcCancelled[];
-extern const char kNfcTimeout[];
-extern const char kNfcUnknownError[];
-extern const char kNfcDataTransferError[];
-extern const char kNfcNoModificationAllowed[];
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_CONSTANTS_H_
diff --git a/third_party/blink/renderer/modules/nfc/nfc_reader.cc b/third_party/blink/renderer/modules/nfc/nfc_reader.cc
index d2aec42..5fbab481 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_reader.cc
+++ b/third_party/blink/renderer/modules/nfc/nfc_reader.cc
@@ -10,7 +10,6 @@
 #include "third_party/blink/renderer/core/dom/abort_signal.h"
 #include "third_party/blink/renderer/modules/event_target_modules.h"
 #include "third_party/blink/renderer/modules/nfc/ndef_message.h"
-#include "third_party/blink/renderer/modules/nfc/nfc_constants.h"
 #include "third_party/blink/renderer/modules/nfc/nfc_error_event.h"
 #include "third_party/blink/renderer/modules/nfc/nfc_proxy.h"
 #include "third_party/blink/renderer/modules/nfc/nfc_reading_event.h"
@@ -67,11 +66,11 @@
   // pattern, fire a NFCErrorEvent with "SyntaxError" DOMException, then return.
   if (options->hasURL() && !options->url().IsEmpty()) {
     KURL pattern_url(options->url());
-    if (!pattern_url.IsValid() || pattern_url.Protocol() != kNfcProtocolHttps) {
+    if (!pattern_url.IsValid() || pattern_url.Protocol() != "https") {
       DispatchEvent(*MakeGarbageCollected<NFCErrorEvent>(
-          event_type_names::kError,
-          MakeGarbageCollected<DOMException>(DOMExceptionCode::kSyntaxError,
-                                             kNfcUrlPatternError)));
+          event_type_names::kError, MakeGarbageCollected<DOMException>(
+                                        DOMExceptionCode::kSyntaxError,
+                                        "Invalid URL pattern was provided.")));
       return;
     }
   }
@@ -116,7 +115,8 @@
     DispatchEvent(*MakeGarbageCollected<NFCErrorEvent>(
         event_type_names::kError,
         MakeGarbageCollected<DOMException>(DOMExceptionCode::kNotAllowedError,
-                                           kNfcAccessInNonTopFrame)));
+                                           "NFC interfaces are only avaliable "
+                                           "in a top-level browsing context")));
     return false;
   }
   return true;
diff --git a/third_party/blink/renderer/modules/nfc/nfc_utils.cc b/third_party/blink/renderer/modules/nfc/nfc_utils.cc
index ffcb60f..8a5c809 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_utils.cc
+++ b/third_party/blink/renderer/modules/nfc/nfc_utils.cc
@@ -9,7 +9,6 @@
 
 #include "services/device/public/mojom/nfc.mojom-blink.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
-#include "third_party/blink/renderer/modules/nfc/nfc_constants.h"
 #include "third_party/blink/renderer/modules/nfc/nfc_type_converters.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
@@ -69,32 +68,35 @@
   switch (error_type) {
     case device::mojom::blink::NFCErrorType::NOT_ALLOWED:
       return MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kNotAllowedError, kNfcNotAllowed);
+          DOMExceptionCode::kNotAllowedError, "NFC operation not allowed.");
     case device::mojom::blink::NFCErrorType::NOT_SUPPORTED:
       return MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kNotSupportedError, kNfcNotSupported);
+          DOMExceptionCode::kNotSupportedError,
+          "No NFC adapter or cannot establish connection.");
     case device::mojom::blink::NFCErrorType::NOT_READABLE:
       return MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kNotReadableError, kNfcNotReadable);
+          DOMExceptionCode::kNotReadableError, "NFC is not enabled.");
     case device::mojom::blink::NFCErrorType::NOT_FOUND:
       return MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kNotFoundError, kNfcWatchIdNotFound);
+          DOMExceptionCode::kNotFoundError,
+          "Provided watch id cannot be found.");
     case device::mojom::blink::NFCErrorType::INVALID_MESSAGE:
-      return MakeGarbageCollected<DOMException>(DOMExceptionCode::kSyntaxError,
-                                                kNfcInvalidMsg);
+      return MakeGarbageCollected<DOMException>(
+          DOMExceptionCode::kSyntaxError, "Invalid NFC message was provided.");
     case device::mojom::blink::NFCErrorType::OPERATION_CANCELLED:
-      return MakeGarbageCollected<DOMException>(DOMExceptionCode::kAbortError,
-                                                kNfcCancelled);
+      return MakeGarbageCollected<DOMException>(
+          DOMExceptionCode::kAbortError, "The NFC operation was cancelled.");
     case device::mojom::blink::NFCErrorType::TIMER_EXPIRED:
       return MakeGarbageCollected<DOMException>(DOMExceptionCode::kTimeoutError,
-                                                kNfcTimeout);
+                                                "NFC operation has timed out.");
     case device::mojom::blink::NFCErrorType::CANNOT_CANCEL:
       return MakeGarbageCollected<DOMException>(
           DOMExceptionCode::kNoModificationAllowedError,
-          kNfcNoModificationAllowed);
+          "NFC operation cannot be cancelled.");
     case device::mojom::blink::NFCErrorType::IO_ERROR:
-      return MakeGarbageCollected<DOMException>(DOMExceptionCode::kNetworkError,
-                                                kNfcDataTransferError);
+      return MakeGarbageCollected<DOMException>(
+          DOMExceptionCode::kNetworkError,
+          "NFC data transfer error has occurred.");
   }
   NOTREACHED();
   // Don't need to handle the case after a NOTREACHED().
diff --git a/third_party/blink/renderer/modules/nfc/nfc_utils.h b/third_party/blink/renderer/modules/nfc/nfc_utils.h
index 5acd979..76c0ed4 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_utils.h
+++ b/third_party/blink/renderer/modules/nfc/nfc_utils.h
@@ -9,7 +9,6 @@
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/modules/nfc/ndef_message.h"
 #include "third_party/blink/renderer/modules/nfc/ndef_record.h"
-#include "third_party/blink/renderer/modules/nfc/nfc_constants.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/modules/nfc/nfc_writer.cc b/third_party/blink/renderer/modules/nfc/nfc_writer.cc
index 8b974d6..a69c3e2 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_writer.cc
+++ b/third_party/blink/renderer/modules/nfc/nfc_writer.cc
@@ -45,15 +45,17 @@
     return ScriptPromise::RejectWithDOMException(
         script_state,
         MakeGarbageCollected<DOMException>(DOMExceptionCode::kNotAllowedError,
-                                           kNfcAccessInNonTopFrame));
+                                           "NFC interfaces are only avaliable "
+                                           "in a top-level browsing context"));
   }
 
   if (options->hasSignal() && options->signal()->aborted()) {
     // If signal’s aborted flag is set, then reject p with an "AbortError"
     // DOMException and return p.
     return ScriptPromise::RejectWithDOMException(
-        script_state, MakeGarbageCollected<DOMException>(
-                          DOMExceptionCode::kAbortError, kNfcCancelled));
+        script_state,
+        MakeGarbageCollected<DOMException>(DOMExceptionCode::kAbortError,
+                                           "The NFC operation was cancelled."));
   }
 
   // 9. If timeout value is NaN or negative, reject promise with "TypeError"
@@ -61,8 +63,10 @@
   if (options->hasTimeout() &&
       (std::isnan(options->timeout()) || options->timeout() < 0)) {
     return ScriptPromise::Reject(
-        script_state, V8ThrowException::CreateTypeError(
-                          script_state->GetIsolate(), kNfcInvalidPushTimeout));
+        script_state,
+        V8ThrowException::CreateTypeError(
+            script_state->GetIsolate(),
+            "Invalid NFCPushOptions.timeout value was provided."));
   }
 
   // Step 10.8: Run "create Web NFC message", if this throws an exception,
@@ -75,9 +79,10 @@
 
   // If NDEFMessage.records is empty, reject promise with TypeError
   if (ndef_message->records().size() == 0) {
-    return ScriptPromise::Reject(script_state,
-                                 V8ThrowException::CreateTypeError(
-                                     script_state->GetIsolate(), kNfcEmptyMsg));
+    return ScriptPromise::Reject(
+        script_state,
+        V8ThrowException::CreateTypeError(script_state->GetIsolate(),
+                                          "Empty NDEFMessage was provided."));
   }
 
   auto message = device::mojom::blink::NDEFMessage::From(ndef_message);
@@ -86,16 +91,17 @@
   if (!SetNDEFMessageURL(execution_context->GetSecurityOrigin()->ToString(),
                          message.get())) {
     return ScriptPromise::RejectWithDOMException(
-        script_state, MakeGarbageCollected<DOMException>(
-                          DOMExceptionCode::kSyntaxError, kNfcSetIdError));
+        script_state,
+        MakeGarbageCollected<DOMException>(DOMExceptionCode::kSyntaxError,
+                                           "Cannot set WebNFC Id."));
   }
 
   if (GetNDEFMessageSize(*message) >
       device::mojom::blink::NDEFMessage::kMaxSize) {
     return ScriptPromise::RejectWithDOMException(
-        script_state,
-        MakeGarbageCollected<DOMException>(DOMExceptionCode::kNotSupportedError,
-                                           kNfcMsgMaxSizeError));
+        script_state, MakeGarbageCollected<DOMException>(
+                          DOMExceptionCode::kNotSupportedError,
+                          "NDEFMessage exceeds maximum supported size."));
   }
 
   auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
diff --git a/third_party/blink/renderer/modules/nfc/nfc_writer.h b/third_party/blink/renderer/modules/nfc/nfc_writer.h
index 1c80c29..9a3ad66 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_writer.h
+++ b/third_party/blink/renderer/modules/nfc/nfc_writer.h
@@ -7,7 +7,6 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h"
-#include "third_party/blink/renderer/modules/nfc/nfc_constants.h"
 #include "third_party/blink/renderer/modules/nfc/nfc_proxy.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/heap_allocator.h"
diff --git a/third_party/blink/renderer/modules/payments/payment_instruments.cc b/third_party/blink/renderer/modules/payments/payment_instruments.cc
index 2e30013c0..533f068d 100644
--- a/third_party/blink/renderer/modules/payments/payment_instruments.cc
+++ b/third_party/blink/renderer/modules/payments/payment_instruments.cc
@@ -124,10 +124,7 @@
   bool has_name() const { return has_name_; }
   const String& name() const { return name_; }
 
-  void Trace(blink::Visitor* visitor) {
-    visitor->Trace(icons_);
-    visitor->Trace(capabilities_);
-  }
+  void Trace(blink::Visitor* visitor) { visitor->Trace(icons_); }
 
  private:
   bool has_icons_;
diff --git a/third_party/blink/renderer/modules/payments/payment_response_test.cc b/third_party/blink/renderer/modules/payments/payment_response_test.cc
index 899d01b..38928418 100644
--- a/third_party/blink/renderer/modules/payments/payment_response_test.cc
+++ b/third_party/blink/renderer/modules/payments/payment_response_test.cc
@@ -42,9 +42,7 @@
                ScriptPromise(ScriptState*,
                              const PaymentValidationErrors* errorFields));
 
-  void Trace(blink::Visitor* visitor) override {
-    visitor->Trace(dummy_promise_);
-  }
+  void Trace(blink::Visitor* visitor) override {}
 
  private:
   ScriptPromise dummy_promise_;
diff --git a/third_party/blink/renderer/modules/permissions/permissions.cc b/third_party/blink/renderer/modules/permissions/permissions.cc
index b4e475b..535c3d8d 100644
--- a/third_party/blink/renderer/modules/permissions/permissions.cc
+++ b/third_party/blink/renderer/modules/permissions/permissions.cc
@@ -249,7 +249,7 @@
 
 ScriptPromise Permissions::requestAll(
     ScriptState* script_state,
-    const HeapVector<ScriptValue>& raw_permissions,
+    const Vector<ScriptValue>& raw_permissions,
     ExceptionState& exception_state) {
   Vector<PermissionDescriptorPtr> internal_permissions;
   Vector<int> caller_index_to_internal_index;
diff --git a/third_party/blink/renderer/modules/permissions/permissions.h b/third_party/blink/renderer/modules/permissions/permissions.h
index 66260d0..d17ffd9 100644
--- a/third_party/blink/renderer/modules/permissions/permissions.h
+++ b/third_party/blink/renderer/modules/permissions/permissions.h
@@ -26,7 +26,7 @@
   ScriptPromise request(ScriptState*, const ScriptValue&, ExceptionState&);
   ScriptPromise revoke(ScriptState*, const ScriptValue&, ExceptionState&);
   ScriptPromise requestAll(ScriptState*,
-                           const HeapVector<ScriptValue>&,
+                           const Vector<ScriptValue>&,
                            ExceptionState&);
 
  private:
diff --git a/third_party/blink/renderer/modules/scheduler/dom_scheduler.cc b/third_party/blink/renderer/modules/scheduler/dom_scheduler.cc
index d324ded..e67625f 100644
--- a/third_party/blink/renderer/modules/scheduler/dom_scheduler.cc
+++ b/third_party/blink/renderer/modules/scheduler/dom_scheduler.cc
@@ -80,7 +80,7 @@
 
 DOMTask* DOMScheduler::postTask(V8Function* callback_function,
                                 SchedulerPostTaskOptions* options,
-                                const HeapVector<ScriptValue>& args) {
+                                const Vector<ScriptValue>& args) {
   DOMTaskQueue* task_queue = getTaskQueue(AtomicString(options->priority()));
   if (!task_queue)
     return nullptr;
diff --git a/third_party/blink/renderer/modules/scheduler/dom_scheduler.h b/third_party/blink/renderer/modules/scheduler/dom_scheduler.h
index 3453fee0..e58c1e0 100644
--- a/third_party/blink/renderer/modules/scheduler/dom_scheduler.h
+++ b/third_party/blink/renderer/modules/scheduler/dom_scheduler.h
@@ -51,7 +51,7 @@
   // documents, this returns nullptr.
   DOMTask* postTask(V8Function*,
                     SchedulerPostTaskOptions*,
-                    const HeapVector<ScriptValue>& args);
+                    const Vector<ScriptValue>& args);
 
   // Callbacks invoked by DOMTaskQueues when they run scheduled tasks.
   void OnTaskStarted(DOMTaskQueue*, DOMTask*);
diff --git a/third_party/blink/renderer/modules/scheduler/dom_task.cc b/third_party/blink/renderer/modules/scheduler/dom_task.cc
index 5d5707a..48858b8 100644
--- a/third_party/blink/renderer/modules/scheduler/dom_task.cc
+++ b/third_party/blink/renderer/modules/scheduler/dom_task.cc
@@ -20,7 +20,7 @@
 DOMTask::DOMTask(DOMTaskQueue* task_queue,
                  ExecutionContext* context,
                  V8Function* callback,
-                 const HeapVector<ScriptValue>& args,
+                 const Vector<ScriptValue>& args,
                  base::TimeDelta delay)
     : ContextLifecycleObserver(context),
       status_(Status::kPending),
@@ -39,7 +39,6 @@
 void DOMTask::Trace(Visitor* visitor) {
   visitor->Trace(task_queue_);
   visitor->Trace(callback_);
-  visitor->Trace(arguments_);
   visitor->Trace(result_value_);
   visitor->Trace(result_promise_);
   visitor->Trace(exception_);
diff --git a/third_party/blink/renderer/modules/scheduler/dom_task.h b/third_party/blink/renderer/modules/scheduler/dom_task.h
index e76fc73..edcfa41 100644
--- a/third_party/blink/renderer/modules/scheduler/dom_task.h
+++ b/third_party/blink/renderer/modules/scheduler/dom_task.h
@@ -33,7 +33,7 @@
   DOMTask(DOMTaskQueue*,
           ExecutionContext*,
           V8Function*,
-          const HeapVector<ScriptValue>& args,
+          const Vector<ScriptValue>& args,
           base::TimeDelta delay);
 
   // Task IDL Interface.
@@ -85,7 +85,7 @@
   TaskHandle task_handle_;
   Member<DOMTaskQueue> task_queue_;
   Member<V8Function> callback_;
-  HeapVector<ScriptValue> arguments_;
+  Vector<ScriptValue> arguments_;
   const base::TimeDelta delay_;
   // Only set if |delay_| > 0 since Now() can be somewhat expensive. This
   // optimizes the case where there is no delay, which we expect to be the
diff --git a/third_party/blink/renderer/modules/scheduler/dom_task_queue.cc b/third_party/blink/renderer/modules/scheduler/dom_task_queue.cc
index 54d1400..43a7d717 100644
--- a/third_party/blink/renderer/modules/scheduler/dom_task_queue.cc
+++ b/third_party/blink/renderer/modules/scheduler/dom_task_queue.cc
@@ -54,7 +54,7 @@
 
 DOMTask* DOMTaskQueue::postTask(V8Function* function,
                                 TaskQueuePostTaskOptions* options,
-                                const HeapVector<ScriptValue>& args) {
+                                const Vector<ScriptValue>& args) {
   // |task_runner_| will be nullptr when the context is destroyed, which
   // prevents us from scheduling tasks for detached documents.
   if (!task_runner_)
diff --git a/third_party/blink/renderer/modules/scheduler/dom_task_queue.h b/third_party/blink/renderer/modules/scheduler/dom_task_queue.h
index 55b0d54..23826c15 100644
--- a/third_party/blink/renderer/modules/scheduler/dom_task_queue.h
+++ b/third_party/blink/renderer/modules/scheduler/dom_task_queue.h
@@ -51,7 +51,7 @@
   // documents, this returns nullptr.
   DOMTask* postTask(V8Function*,
                     TaskQueuePostTaskOptions*,
-                    const HeapVector<ScriptValue>& args);
+                    const Vector<ScriptValue>& args);
 
   // Move the task from its current DOMTaskQueue to this one. For pending
   // non-delayed tasks, the task is enqueued at the end of this DOMTaskQueue.
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker.cc b/third_party/blink/renderer/modules/service_worker/service_worker.cc
index 501bb44..66703e1 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker.cc
@@ -56,7 +56,7 @@
 
 void ServiceWorker::postMessage(ScriptState* script_state,
                                 const ScriptValue& message,
-                                HeapVector<ScriptValue>& transfer,
+                                Vector<ScriptValue>& transfer,
                                 ExceptionState& exception_state) {
   PostMessageOptions* options = PostMessageOptions::Create();
   if (!transfer.IsEmpty())
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker.h b/third_party/blink/renderer/modules/service_worker/service_worker.h
index 4d6385e..8b7fe0f3 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker.h
@@ -80,7 +80,7 @@
 
   void postMessage(ScriptState*,
                    const ScriptValue& message,
-                   HeapVector<ScriptValue>& transfer,
+                   Vector<ScriptValue>& transfer,
                    ExceptionState&);
   void postMessage(ScriptState*,
                    const ScriptValue& message,
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_client.cc b/third_party/blink/renderer/modules/service_worker/service_worker_client.cc
index 297f47b..8a8e121d 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_client.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_client.cc
@@ -86,7 +86,7 @@
 
 void ServiceWorkerClient::postMessage(ScriptState* script_state,
                                       const ScriptValue& message,
-                                      HeapVector<ScriptValue>& transfer,
+                                      Vector<ScriptValue>& transfer,
                                       ExceptionState& exception_state) {
   PostMessageOptions* options = PostMessageOptions::Create();
   if (!transfer.IsEmpty())
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_client.h b/third_party/blink/renderer/modules/service_worker/service_worker_client.h
index b44ef1c..0a148390 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_client.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_client.h
@@ -36,7 +36,7 @@
   String lifecycleState() const;
   void postMessage(ScriptState*,
                    const ScriptValue& message,
-                   HeapVector<ScriptValue>& transfer,
+                   Vector<ScriptValue>& transfer,
                    ExceptionState&);
   void postMessage(ScriptState*,
                    const ScriptValue& message,
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc b/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc
index a89c3e2..4fff53a 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc
@@ -46,7 +46,6 @@
 
   size_t CallCount() { return call_count_; }
   ScriptValue Arg() { return arg_; }
-  void Trace(blink::Visitor* visitor) { visitor->Trace(arg_); }
 
  private:
   size_t call_count_;
diff --git a/third_party/blink/renderer/modules/webdatabase/sql_transaction.cc b/third_party/blink/renderer/modules/webdatabase/sql_transaction.cc
index 776d50e..d8d85d1 100644
--- a/third_party/blink/renderer/modules/webdatabase/sql_transaction.cc
+++ b/third_party/blink/renderer/modules/webdatabase/sql_transaction.cc
@@ -347,7 +347,7 @@
 void SQLTransaction::executeSql(
     ScriptState* script_state,
     const String& sql_statement,
-    const base::Optional<HeapVector<ScriptValue>>& arguments,
+    const base::Optional<Vector<ScriptValue>>& arguments,
     V8SQLStatementCallback* callback,
     V8SQLStatementErrorCallback* callback_error,
     ExceptionState& exception_state) {
diff --git a/third_party/blink/renderer/modules/webdatabase/sql_transaction.h b/third_party/blink/renderer/modules/webdatabase/sql_transaction.h
index 040e059..916d3f1 100644
--- a/third_party/blink/renderer/modules/webdatabase/sql_transaction.h
+++ b/third_party/blink/renderer/modules/webdatabase/sql_transaction.h
@@ -161,7 +161,7 @@
   void executeSql(ScriptState*, const String& sql_statement, ExceptionState&);
   void executeSql(ScriptState*,
                   const String& sql_statement,
-                  const base::Optional<HeapVector<ScriptValue>>& arguments,
+                  const base::Optional<Vector<ScriptValue>>& arguments,
                   V8SQLStatementCallback*,
                   V8SQLStatementErrorCallback*,
                   ExceptionState&);
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.cc
index f6533df..00e91fcb 100644
--- a/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.cc
@@ -164,7 +164,7 @@
   return String(name.get(), static_cast<uint32_t>(length));
 }
 
-base::Optional<HeapVector<ScriptValue>>
+base::Optional<Vector<ScriptValue>>
 WebGL2ComputeRenderingContextBase::getProgramResource(
     ScriptState* script_state,
     WebGLProgram* program,
@@ -229,7 +229,7 @@
 
   // Interpret the returned values and construct the result array. The type of
   // each array element is the natural type for the requested property.
-  HeapVector<ScriptValue> result;
+  Vector<ScriptValue> result;
   wtf_size_t auxiliary_param_index = 0;
   wtf_size_t extended_param_index = auxiliary_params.size();
   for (GLenum prop : props) {
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.h
index 3af9eee..c120a67 100644
--- a/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.h
+++ b/third_party/blink/renderer/modules/webgl/webgl2_compute_rendering_context_base.h
@@ -32,7 +32,7 @@
   String getProgramResourceName(WebGLProgram*,
                                 GLenum program_interface,
                                 GLuint index);
-  base::Optional<HeapVector<ScriptValue>> getProgramResource(
+  base::Optional<Vector<ScriptValue>> getProgramResource(
       ScriptState*,
       WebGLProgram*,
       GLenum program_interface,
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.cc b/third_party/blink/renderer/modules/webgpu/gpu_device.cc
index 87bfcf4..7d6a0eb 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_device.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_device.cc
@@ -103,7 +103,7 @@
   return GPUBuffer::Create(this, descriptor);
 }
 
-HeapVector<ScriptValue> GPUDevice::createBufferMapped(
+WTF::Vector<ScriptValue> GPUDevice::createBufferMapped(
     ScriptState* script_state,
     const GPUBufferDescriptor* descriptor,
     ExceptionState& exception_state) {
@@ -115,7 +115,7 @@
   v8::Isolate* isolate = script_state->GetIsolate();
   v8::Local<v8::Object> creation_context = script_state->GetContext()->Global();
 
-  return HeapVector<ScriptValue>({
+  return WTF::Vector<ScriptValue>({
       ScriptValue(script_state, ToV8(gpu_buffer, creation_context, isolate)),
       ScriptValue(script_state, ToV8(array_buffer, creation_context, isolate)),
   });
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.h b/third_party/blink/renderer/modules/webgpu/gpu_device.h
index 48836ea6..436c03c 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_device.h
+++ b/third_party/blink/renderer/modules/webgpu/gpu_device.h
@@ -68,7 +68,7 @@
   GPUAdapter* adapter() const;
 
   GPUBuffer* createBuffer(const GPUBufferDescriptor* descriptor);
-  HeapVector<ScriptValue> createBufferMapped(
+  WTF::Vector<ScriptValue> createBufferMapped(
       ScriptState* script_state,
       const GPUBufferDescriptor* descriptor,
       ExceptionState& exception_state);
diff --git a/third_party/blink/renderer/modules/xr/xr.cc b/third_party/blink/renderer/modules/xr/xr.cc
index f869a3d..7a66e50 100644
--- a/third_party/blink/renderer/modules/xr/xr.cc
+++ b/third_party/blink/renderer/modules/xr/xr.cc
@@ -129,7 +129,7 @@
 
 template <typename Fn>
 XRSessionFeatureSet ParseRequestedFeatures(
-    const HeapVector<ScriptValue>& features,
+    const WTF::Vector<ScriptValue>& features,
     XRSession::SessionMode session_mode,
     Fn&& error_fn) {
   XRSessionFeatureSet result;
diff --git a/third_party/blink/renderer/platform/heap/heap_allocator.cc b/third_party/blink/renderer/platform/heap/heap_allocator.cc
index 74bdb07..034f753 100644
--- a/third_party/blink/renderer/platform/heap/heap_allocator.cc
+++ b/third_party/blink/renderer/platform/heap/heap_allocator.cc
@@ -97,7 +97,8 @@
   bool succeed = arena->ExpandObject(header, new_size);
   if (succeed) {
     state->Heap().AllocationPointAdjusted(arena->ArenaIndex());
-    if (header->IsMarked() && state->IsMarkingInProgress()) {
+    if (header->IsMarked<HeapObjectHeader::AccessMode::kAtomic>() &&
+        state->IsMarkingInProgress()) {
       state->CurrentVisitor()->AdjustMarkedBytes(header, old_size);
     }
   }
diff --git a/third_party/blink/renderer/platform/heap/heap_page.cc b/third_party/blink/renderer/platform/heap/heap_page.cc
index 3431db4..7c4ac6d 100644
--- a/third_party/blink/renderer/platform/heap/heap_page.cc
+++ b/third_party/blink/renderer/platform/heap/heap_page.cc
@@ -724,10 +724,7 @@
           ->ClearBit(address);
       return;
     }
-    // The object may be on a page that has not been swept yet and requires
-    // manual unmarking.
-    if (header->IsMarked())
-      header->Unmark();
+    DCHECK(!header->IsMarked());
     PromptlyFreeObjectInFreeList(header, size);
   }
 }
diff --git a/third_party/blink/renderer/platform/heap/heap_page.h b/third_party/blink/renderer/platform/heap/heap_page.h
index 2a07cdc..644ea9a 100644
--- a/third_party/blink/renderer/platform/heap/heap_page.h
+++ b/third_party/blink/renderer/platform/heap/heap_page.h
@@ -1125,7 +1125,7 @@
 
 template <HeapObjectHeader::AccessMode mode>
 NO_SANITIZE_ADDRESS inline void HeapObjectHeader::MarkFullyConstructed() {
-  DCHECK(IsInConstruction());
+  DCHECK(IsInConstruction<mode>());
   StoreEncoded<mode, EncodedHalf::kHigh>(kHeaderIsInConstructionMask,
                                          kHeaderIsInConstructionMask);
 }
@@ -1191,7 +1191,7 @@
 template <HeapObjectHeader::AccessMode mode>
 NO_SANITIZE_ADDRESS inline void HeapObjectHeader::Unmark() {
   CheckHeader();
-  DCHECK(IsMarked());
+  DCHECK(IsMarked<mode>());
   StoreEncoded<mode, EncodedHalf::kLow>(0u, kHeaderMarkBitMask);
 }
 
diff --git a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc
index 6e8ac03..e6307cf 100644
--- a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc
+++ b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc
@@ -1806,7 +1806,8 @@
   driver.FinishSteps();
   // GCs here are without stack. This is just to show that we don't want this
   // object marked.
-  CHECK(!HeapObjectHeader::FromPayload(nested)->IsMarked());
+  CHECK(!HeapObjectHeader::FromPayload(nested)
+             ->IsMarked<HeapObjectHeader::AccessMode::kAtomic>());
   nested = nullptr;
   driver.FinishGC();
 }
@@ -1838,7 +1839,8 @@
   driver.Start();
   driver.FinishSteps();
   // The object is marked at this point.
-  CHECK(HeapObjectHeader::FromPayload(holder.Get())->IsMarked());
+  CHECK(HeapObjectHeader::FromPayload(holder.Get())
+            ->IsMarked<HeapObjectHeader::AccessMode::kAtomic>());
   driver.FinishGC(false);
   // The object is still marked as sweeping did not make any progress.
   CHECK(HeapObjectHeader::FromPayload(holder.Get())->IsMarked());
diff --git a/third_party/blink/renderer/platform/heap/marking_visitor.cc b/third_party/blink/renderer/platform/heap/marking_visitor.cc
index fcb872b..4ee13a3 100644
--- a/third_party/blink/renderer/platform/heap/marking_visitor.cc
+++ b/third_party/blink/renderer/platform/heap/marking_visitor.cc
@@ -74,7 +74,7 @@
 
 void MarkingVisitorBase::AdjustMarkedBytes(HeapObjectHeader* header,
                                            size_t old_size) {
-  DCHECK(header->IsMarked());
+  DCHECK(header->IsMarked<HeapObjectHeader::AccessMode::kAtomic>());
   // Currently, only expansion of an object is supported during marking.
   DCHECK_GE(header->size(), old_size);
   marked_bytes_ += header->size() - old_size;
@@ -90,7 +90,7 @@
 
   HeapObjectHeader* const header = HeapObjectHeader::FromInnerAddress(
       reinterpret_cast<Address>(const_cast<void*>(value)));
-  if (header->IsMarked())
+  if (header->IsMarked<HeapObjectHeader::AccessMode::kAtomic>())
     return false;
 
   if (header->IsInConstruction()) {
diff --git a/third_party/blink/renderer/platform/heap/marking_visitor.h b/third_party/blink/renderer/platform/heap/marking_visitor.h
index dc7aa229..a75facec 100644
--- a/third_party/blink/renderer/platform/heap/marking_visitor.h
+++ b/third_party/blink/renderer/platform/heap/marking_visitor.h
@@ -54,7 +54,8 @@
     // ensures that any newly set value after this point is kept alive and does
     // not require the callback.
     if (desc.base_object_payload != BlinkGC::kNotFullyConstructedObject &&
-        HeapObjectHeader::FromPayload(desc.base_object_payload)->IsMarked())
+        HeapObjectHeader::FromPayload(desc.base_object_payload)
+            ->IsMarked<HeapObjectHeader::AccessMode::kAtomic>())
       return;
     RegisterWeakCallback(object_weak_ref, callback);
   }
@@ -159,7 +160,7 @@
   // freed backing store.
   DCHECK(!header->IsFree());
 
-  if (header->TryMark()) {
+  if (header->TryMark<HeapObjectHeader::AccessMode::kAtomic>()) {
     AccountMarkedBytes(header);
     return true;
   }
@@ -171,7 +172,7 @@
   DCHECK(header);
   DCHECK(callback);
 
-  if (header->IsInConstruction()) {
+  if (header->IsInConstruction<HeapObjectHeader::AccessMode::kAtomic>()) {
     not_fully_constructed_worklist_.Push(header->Payload());
   } else if (MarkHeaderNoTracing(header)) {
     marking_worklist_.Push(
diff --git a/third_party/blink/renderer/platform/instrumentation/instance_counters.h b/third_party/blink/renderer/platform/instrumentation/instance_counters.h
index 6a34431..23867b96 100644
--- a/third_party/blink/renderer/platform/instrumentation/instance_counters.h
+++ b/third_party/blink/renderer/platform/instrumentation/instance_counters.h
@@ -48,6 +48,7 @@
   V(MediaKeys)                     \
   V(Node)                          \
   V(Resource)                      \
+  V(ScriptPromise)                 \
   V(ContextLifecycleStateObserver) \
   V(V8PerContextData)              \
   V(WorkerGlobalScope)             \
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index a0bf0176..e07a097 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -780,10 +780,6 @@
       status: "experimental",
     },
     {
-      name: "IDBTransactionCommit",
-      status: "stable",
-    },
-    {
       name: "IdleDetection",
       status: "experimental",
     },
diff --git a/third_party/blink/web_tests/badging/badge-error.html b/third_party/blink/web_tests/badging/badge-error.html
index 4f2d2481..ae09d8d1 100644
--- a/third_party/blink/web_tests/badging/badge-error.html
+++ b/third_party/blink/web_tests/badging/badge-error.html
@@ -41,10 +41,9 @@
 // }, undefined, undefined, 'SecurityError');
 
 // Invalid URL.
-// TODO(mgiuca): Currently succeeds with scope = "". https://crbug.com/1001405
-// badge_test(() => {
-//   ExperimentalBadge.set(1, {scope: 'https://example.com:99999'});
-// }, undefined, undefined, 'TypeError');
+badge_test(() => {
+  ExperimentalBadge.set(1, {scope: 'https://example.com:99999'});
+}, undefined, undefined, 'TypeError');
 
 </script>
 </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html
new file mode 100644
index 0000000..54856e7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#propdef-left">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#relative-positioning">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=908083">
+<p>There should be no red, and no scrollbar.</p>
+<div id="container" style="overflow:auto; width:500px; background:red;">
+  <div style="padding-right:90%; background:yellow;">
+    <div style="position:relative; left:900%; width:50px; height:50px; background:cyan;">
+    </div>
+  </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  container.scrollLeft = 123456;
+  test(()=> {
+      assert_equals(container.scrollLeft, 0);
+  }, "Left percentage resolved correctly for overflow contribution");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html
new file mode 100644
index 0000000..f4e7e2a8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#propdef-top">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#relative-positioning">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=908083">
+<p>There should be a green square below.</p>
+<div style="position:relative; width:200px; height:200px;">
+  <div id="container" style="overflow:hidden; position:absolute; top:0; left:0; bottom:0; right:0;">
+    <div style="position:relative; top:100%; width:100px; height:100px; background:green;"></div>
+  </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  container.scrollTop = 123456;
+  test(()=> {
+      assert_equals(container.scrollTop, 100);
+  }, "Top percentage resolved correctly for overflow contribution");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/overflow-wrap/overflow-wrap-break-word-keep-all-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/overflow-wrap/overflow-wrap-break-word-keep-all-001.html
new file mode 100644
index 0000000..ec27b82
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/overflow-wrap/overflow-wrap-break-word-keep-all-001.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<title>CSS Test: `break-word` should work with `word-break: keep-all`</title>
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
+<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
+<meta charset="utf-8">
+<style>
+div {
+  overflow-wrap: break-word;
+  word-break: keep-all;
+  font-size: 10px;
+  width: 7ch;
+  line-height: 20px;
+  background: lightgray;
+  margin-bottom: 1em;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+  <div>0000000000</div>
+  <div>헬로우월드헬로우월드헬로우월드헬로우월드헬로우월드</div>
+<script>
+for (let e of document.getElementsByTagName('div')) {
+  test(() => {
+    // All boxes should wrap to more than 1 line.
+    assert_greater_than(e.offsetHeight, 20);
+  }, e.textContent);
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/idlharness-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-transitions/idlharness-expected.txt
deleted file mode 100644
index 3c9dbb02..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/idlharness-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-This is a testharness.js-based test.
-PASS idl_test setup
-PASS Partial interface mixin GlobalEventHandlers: original interface mixin defined
-PASS TransitionEvent interface: existence and properties of interface object
-PASS TransitionEvent interface object length
-PASS TransitionEvent interface object name
-PASS TransitionEvent interface: existence and properties of interface prototype object
-PASS TransitionEvent interface: existence and properties of interface prototype object's "constructor" property
-PASS TransitionEvent interface: existence and properties of interface prototype object's @@unscopables property
-PASS TransitionEvent interface: attribute propertyName
-PASS TransitionEvent interface: attribute elapsedTime
-PASS TransitionEvent interface: attribute pseudoElement
-PASS TransitionEvent must be primary interface of new TransitionEvent("transitionend")
-PASS Stringification of new TransitionEvent("transitionend")
-PASS TransitionEvent interface: new TransitionEvent("transitionend") must inherit property "propertyName" with the proper type
-PASS TransitionEvent interface: new TransitionEvent("transitionend") must inherit property "elapsedTime" with the proper type
-PASS TransitionEvent interface: new TransitionEvent("transitionend") must inherit property "pseudoElement" with the proper type
-FAIL HTMLElement interface: attribute ontransitionrun assert_true: The prototype object must have a property "ontransitionrun" expected true got false
-FAIL HTMLElement interface: attribute ontransitionstart assert_true: The prototype object must have a property "ontransitionstart" expected true got false
-PASS HTMLElement interface: attribute ontransitionend
-FAIL HTMLElement interface: attribute ontransitioncancel assert_true: The prototype object must have a property "ontransitioncancel" expected true got false
-FAIL HTMLElement interface: document must inherit property "ontransitionrun" with the proper type assert_inherits: property "ontransitionrun" not found in prototype chain
-FAIL HTMLElement interface: document must inherit property "ontransitionstart" with the proper type assert_inherits: property "ontransitionstart" not found in prototype chain
-PASS HTMLElement interface: document must inherit property "ontransitionend" with the proper type
-FAIL HTMLElement interface: document must inherit property "ontransitioncancel" with the proper type assert_inherits: property "ontransitioncancel" not found in prototype chain
-FAIL Window interface: attribute ontransitionrun assert_own_property: The global object must have a property "ontransitionrun" expected property "ontransitionrun" missing
-FAIL Window interface: attribute ontransitionstart assert_own_property: The global object must have a property "ontransitionstart" expected property "ontransitionstart" missing
-PASS Window interface: attribute ontransitionend
-FAIL Window interface: attribute ontransitioncancel assert_own_property: The global object must have a property "ontransitioncancel" expected property "ontransitioncancel" missing
-FAIL Window interface: window must inherit property "ontransitionrun" with the proper type assert_own_property: expected property "ontransitionrun" missing
-FAIL Window interface: window must inherit property "ontransitionstart" with the proper type assert_own_property: expected property "ontransitionstart" missing
-PASS Window interface: window must inherit property "ontransitionend" with the proper type
-FAIL Window interface: window must inherit property "ontransitioncancel" with the proper type assert_own_property: expected property "ontransitioncancel" missing
-FAIL Document interface: attribute ontransitionrun assert_true: The prototype object must have a property "ontransitionrun" expected true got false
-FAIL Document interface: attribute ontransitionstart assert_true: The prototype object must have a property "ontransitionstart" expected true got false
-PASS Document interface: attribute ontransitionend
-FAIL Document interface: attribute ontransitioncancel assert_true: The prototype object must have a property "ontransitioncancel" expected true got false
-FAIL Document interface: document must inherit property "ontransitionrun" with the proper type assert_inherits: property "ontransitionrun" not found in prototype chain
-FAIL Document interface: document must inherit property "ontransitionstart" with the proper type assert_inherits: property "ontransitionstart" not found in prototype chain
-PASS Document interface: document must inherit property "ontransitionend" with the proper type
-FAIL Document interface: document must inherit property "ontransitioncancel" with the proper type assert_inherits: property "ontransitioncancel" not found in prototype chain
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
index 26a3eae2..875a3e7 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
@@ -175,7 +175,10 @@
 PASS oldChildWindow.ontouchend is newChildWindow.ontouchend
 PASS oldChildWindow.ontouchmove is newChildWindow.ontouchmove
 PASS oldChildWindow.ontouchstart is newChildWindow.ontouchstart
+PASS oldChildWindow.ontransitioncancel is newChildWindow.ontransitioncancel
 PASS oldChildWindow.ontransitionend is newChildWindow.ontransitionend
+PASS oldChildWindow.ontransitionrun is newChildWindow.ontransitionrun
+PASS oldChildWindow.ontransitionstart is newChildWindow.ontransitionstart
 PASS oldChildWindow.onunhandledrejection is newChildWindow.onunhandledrejection
 PASS oldChildWindow.onunload is newChildWindow.onunload
 PASS oldChildWindow.onvolumechange is newChildWindow.onvolumechange
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
index 0780dd8..0521e659 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
@@ -137,7 +137,10 @@
 PASS childWindow.ontouchend is null
 PASS childWindow.ontouchmove is null
 PASS childWindow.ontouchstart is null
+PASS childWindow.ontransitioncancel is null
 PASS childWindow.ontransitionend is null
+PASS childWindow.ontransitionrun is null
+PASS childWindow.ontransitionstart is null
 PASS childWindow.onunhandledrejection is null
 PASS childWindow.onunload is null
 PASS childWindow.onvolumechange is null
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
index aa0c57a..5149cbd 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
@@ -137,7 +137,10 @@
 PASS childWindow.ontouchend is null
 PASS childWindow.ontouchmove is null
 PASS childWindow.ontouchstart is null
+PASS childWindow.ontransitioncancel is null
 PASS childWindow.ontransitionend is null
+PASS childWindow.ontransitionrun is null
+PASS childWindow.ontransitionstart is null
 PASS childWindow.onunhandledrejection is null
 PASS childWindow.onunload is null
 PASS childWindow.onvolumechange is null
diff --git a/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt b/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt
index 8ab1731..9b79eae9 100644
--- a/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt
@@ -26,6 +26,7 @@
 ResourceFetchers
 Resources
 ScriptDuration
+ScriptPromises
 TaskDuration
 TaskOtherDuration
 ThreadTime
diff --git a/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt b/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt
index 14329c5..40bc7a2 100644
--- a/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt
@@ -10,6 +10,7 @@
 	MediaKeys
 	Nodes
 	Resources
+	ScriptPromises
 	ContextLifecycleStateObservers
 	V8PerContextDatas
 	WorkerGlobalScopes
@@ -43,6 +44,7 @@
 	MediaKeys
 	Nodes
 	Resources
+	ScriptPromises
 	ContextLifecycleStateObservers
 	V8PerContextDatas
 	WorkerGlobalScopes
@@ -76,6 +78,7 @@
 	MediaKeys
 	Nodes
 	Resources
+	ScriptPromises
 	ContextLifecycleStateObservers
 	V8PerContextDatas
 	WorkerGlobalScopes
diff --git a/third_party/blink/web_tests/platform/linux/fast/backgrounds/background-position-parsing-expected.png b/third_party/blink/web_tests/platform/linux/fast/backgrounds/background-position-parsing-expected.png
index 44c33b1..22d7ecd 100644
--- a/third_party/blink/web_tests/platform/linux/fast/backgrounds/background-position-parsing-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/backgrounds/background-position-parsing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/blink/web_tests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index c8ddbff4..29020801 100644
--- a/third_party/blink/web_tests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-mixed-008-expected.png b/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-mixed-008-expected.png
index a5126ca..f24a0cc 100644
--- a/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-mixed-008-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-mixed-008-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png b/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
index 70f6044..21e590b 100644
--- a/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png b/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png
index 93600277a..33d90506 100644
--- a/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
index 36fada2..13ea14d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
new file mode 100644
index 0000000..fb588ea
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
new file mode 100644
index 0000000..fb588ea
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/accelerometer/Accelerometer.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/accelerometer/Accelerometer.https-expected.txt
deleted file mode 100644
index f974e469..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/accelerometer/Accelerometer.https-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-This is a testharness.js-based test.
-Found 66 tests; 44 PASS, 22 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Accelerometer: Test that onerror is sent when sensor is not supported.
-PASS Accelerometer: Test that onerror is sent when permissions are not granted.
-PASS Accelerometer: Test that onerror is send when start() call has failed.
-PASS Accelerometer: Test that frequency is capped to allowed maximum.
-PASS Accelerometer: Test that frequency is capped to the maximum supported frequency.
-PASS Accelerometer: Test that frequency is limited to the minimum supported frequency.
-PASS Accelerometer: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS Accelerometer: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS Accelerometer: Test that 'onreading' is called and sensor reading is valid.
-PASS Accelerometer: sensor reading is correct.
-PASS Accelerometer: sensor timestamp is updated when time passes.
-PASS Accelerometer: Test that sensor can be successfully created and its states are correct.
-PASS Accelerometer: sensor.start() returns undefined.
-PASS Accelerometer: no exception is thrown when calling start() on already started sensor.
-PASS Accelerometer: sensor.stop() returns undefined.
-PASS Accelerometer: no exception is thrown when calling stop() on already stopped sensor.
-PASS Accelerometer: Test that fresh reading is fetched on start().
-PASS Accelerometer: frequency hint works.
-PASS Accelerometer: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS Accelerometer: throw 'TypeError' if frequency is invalid.
-PASS Accelerometer: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS Accelerometer: throw 'TypeError' if referenceFrame is not one of enumeration values.
-FAIL GravitySensor: Test that onerror is sent when sensor is not supported. assert_true: expected true got false
-FAIL GravitySensor: Test that onerror is sent when permissions are not granted. assert_true: expected true got false
-FAIL GravitySensor: Test that onerror is send when start() call has failed. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is capped to allowed maximum. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is capped to the maximum supported frequency. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is limited to the minimum supported frequency. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor can be constructed within an iframe allowed to use feature policy. assert_true: expected true got false
-FAIL GravitySensor: Test that 'onreading' is called and sensor reading is valid. assert_true: expected true got false
-FAIL GravitySensor: sensor reading is correct. assert_true: expected true got false
-FAIL GravitySensor: sensor timestamp is updated when time passes. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor can be successfully created and its states are correct. assert_true: expected true got false
-FAIL GravitySensor: sensor.start() returns undefined. assert_true: expected true got false
-FAIL GravitySensor: no exception is thrown when calling start() on already started sensor. assert_true: expected true got false
-FAIL GravitySensor: sensor.stop() returns undefined. assert_true: expected true got false
-FAIL GravitySensor: no exception is thrown when calling stop() on already stopped sensor. assert_true: expected true got false
-FAIL GravitySensor: Test that fresh reading is fetched on start(). assert_true: expected true got false
-FAIL GravitySensor: frequency hint works. assert_true: expected true got false
-FAIL GravitySensor: sensor receives suspend / resume notifications when cross-origin subframe is focused. assert_true: expected true got false
-FAIL GravitySensor: throw 'TypeError' if frequency is invalid. assert_true: expected true got false
-FAIL GravitySensor: sensor reading is correct when options.referenceFrame is 'screen'. assert_true: expected true got false
-FAIL GravitySensor: throw 'TypeError' if referenceFrame is not one of enumeration values. assert_true: expected true got false
-PASS LinearAccelerationSensor: Test that onerror is sent when sensor is not supported.
-PASS LinearAccelerationSensor: Test that onerror is sent when permissions are not granted.
-PASS LinearAccelerationSensor: Test that onerror is send when start() call has failed.
-PASS LinearAccelerationSensor: Test that frequency is capped to allowed maximum.
-PASS LinearAccelerationSensor: Test that frequency is capped to the maximum supported frequency.
-PASS LinearAccelerationSensor: Test that frequency is limited to the minimum supported frequency.
-PASS LinearAccelerationSensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS LinearAccelerationSensor: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS LinearAccelerationSensor: Test that 'onreading' is called and sensor reading is valid.
-PASS LinearAccelerationSensor: sensor reading is correct.
-PASS LinearAccelerationSensor: sensor timestamp is updated when time passes.
-PASS LinearAccelerationSensor: Test that sensor can be successfully created and its states are correct.
-PASS LinearAccelerationSensor: sensor.start() returns undefined.
-PASS LinearAccelerationSensor: no exception is thrown when calling start() on already started sensor.
-PASS LinearAccelerationSensor: sensor.stop() returns undefined.
-PASS LinearAccelerationSensor: no exception is thrown when calling stop() on already stopped sensor.
-PASS LinearAccelerationSensor: Test that fresh reading is fetched on start().
-PASS LinearAccelerationSensor: frequency hint works.
-PASS LinearAccelerationSensor: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS LinearAccelerationSensor: throw 'TypeError' if frequency is invalid.
-PASS LinearAccelerationSensor: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS LinearAccelerationSensor: throw 'TypeError' if referenceFrame is not one of enumeration values.
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 273131e..3f56953d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
new file mode 100644
index 0000000..fb588ea
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/external/wpt/accelerometer/Accelerometer.https-expected.txt b/third_party/blink/web_tests/platform/mac-retina/external/wpt/accelerometer/Accelerometer.https-expected.txt
deleted file mode 100644
index f974e469..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/external/wpt/accelerometer/Accelerometer.https-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-This is a testharness.js-based test.
-Found 66 tests; 44 PASS, 22 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Accelerometer: Test that onerror is sent when sensor is not supported.
-PASS Accelerometer: Test that onerror is sent when permissions are not granted.
-PASS Accelerometer: Test that onerror is send when start() call has failed.
-PASS Accelerometer: Test that frequency is capped to allowed maximum.
-PASS Accelerometer: Test that frequency is capped to the maximum supported frequency.
-PASS Accelerometer: Test that frequency is limited to the minimum supported frequency.
-PASS Accelerometer: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS Accelerometer: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS Accelerometer: Test that 'onreading' is called and sensor reading is valid.
-PASS Accelerometer: sensor reading is correct.
-PASS Accelerometer: sensor timestamp is updated when time passes.
-PASS Accelerometer: Test that sensor can be successfully created and its states are correct.
-PASS Accelerometer: sensor.start() returns undefined.
-PASS Accelerometer: no exception is thrown when calling start() on already started sensor.
-PASS Accelerometer: sensor.stop() returns undefined.
-PASS Accelerometer: no exception is thrown when calling stop() on already stopped sensor.
-PASS Accelerometer: Test that fresh reading is fetched on start().
-PASS Accelerometer: frequency hint works.
-PASS Accelerometer: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS Accelerometer: throw 'TypeError' if frequency is invalid.
-PASS Accelerometer: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS Accelerometer: throw 'TypeError' if referenceFrame is not one of enumeration values.
-FAIL GravitySensor: Test that onerror is sent when sensor is not supported. assert_true: expected true got false
-FAIL GravitySensor: Test that onerror is sent when permissions are not granted. assert_true: expected true got false
-FAIL GravitySensor: Test that onerror is send when start() call has failed. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is capped to allowed maximum. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is capped to the maximum supported frequency. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is limited to the minimum supported frequency. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor can be constructed within an iframe allowed to use feature policy. assert_true: expected true got false
-FAIL GravitySensor: Test that 'onreading' is called and sensor reading is valid. assert_true: expected true got false
-FAIL GravitySensor: sensor reading is correct. assert_true: expected true got false
-FAIL GravitySensor: sensor timestamp is updated when time passes. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor can be successfully created and its states are correct. assert_true: expected true got false
-FAIL GravitySensor: sensor.start() returns undefined. assert_true: expected true got false
-FAIL GravitySensor: no exception is thrown when calling start() on already started sensor. assert_true: expected true got false
-FAIL GravitySensor: sensor.stop() returns undefined. assert_true: expected true got false
-FAIL GravitySensor: no exception is thrown when calling stop() on already stopped sensor. assert_true: expected true got false
-FAIL GravitySensor: Test that fresh reading is fetched on start(). assert_true: expected true got false
-FAIL GravitySensor: frequency hint works. assert_true: expected true got false
-FAIL GravitySensor: sensor receives suspend / resume notifications when cross-origin subframe is focused. assert_true: expected true got false
-FAIL GravitySensor: throw 'TypeError' if frequency is invalid. assert_true: expected true got false
-FAIL GravitySensor: sensor reading is correct when options.referenceFrame is 'screen'. assert_true: expected true got false
-FAIL GravitySensor: throw 'TypeError' if referenceFrame is not one of enumeration values. assert_true: expected true got false
-PASS LinearAccelerationSensor: Test that onerror is sent when sensor is not supported.
-PASS LinearAccelerationSensor: Test that onerror is sent when permissions are not granted.
-PASS LinearAccelerationSensor: Test that onerror is send when start() call has failed.
-PASS LinearAccelerationSensor: Test that frequency is capped to allowed maximum.
-PASS LinearAccelerationSensor: Test that frequency is capped to the maximum supported frequency.
-PASS LinearAccelerationSensor: Test that frequency is limited to the minimum supported frequency.
-PASS LinearAccelerationSensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS LinearAccelerationSensor: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS LinearAccelerationSensor: Test that 'onreading' is called and sensor reading is valid.
-PASS LinearAccelerationSensor: sensor reading is correct.
-PASS LinearAccelerationSensor: sensor timestamp is updated when time passes.
-PASS LinearAccelerationSensor: Test that sensor can be successfully created and its states are correct.
-PASS LinearAccelerationSensor: sensor.start() returns undefined.
-PASS LinearAccelerationSensor: no exception is thrown when calling start() on already started sensor.
-PASS LinearAccelerationSensor: sensor.stop() returns undefined.
-PASS LinearAccelerationSensor: no exception is thrown when calling stop() on already stopped sensor.
-PASS LinearAccelerationSensor: Test that fresh reading is fetched on start().
-PASS LinearAccelerationSensor: frequency hint works.
-PASS LinearAccelerationSensor: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS LinearAccelerationSensor: throw 'TypeError' if frequency is invalid.
-PASS LinearAccelerationSensor: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS LinearAccelerationSensor: throw 'TypeError' if referenceFrame is not one of enumeration values.
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-retina/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/blink/web_tests/platform/mac-retina/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 386e1cb..aaab665 100644
--- a/third_party/blink/web_tests/platform/mac-retina/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/blink/web_tests/platform/mac-retina/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
new file mode 100644
index 0000000..fb588ea
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/accelerometer/Accelerometer.https-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/accelerometer/Accelerometer.https-expected.txt
deleted file mode 100644
index 2346ee5..0000000
--- a/third_party/blink/web_tests/platform/mac/external/wpt/accelerometer/Accelerometer.https-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-This is a testharness.js-based test.
-Found 66 tests; 43 PASS, 23 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Accelerometer: Test that onerror is sent when sensor is not supported.
-PASS Accelerometer: Test that onerror is sent when permissions are not granted.
-PASS Accelerometer: Test that onerror is send when start() call has failed.
-PASS Accelerometer: Test that frequency is capped to allowed maximum.
-PASS Accelerometer: Test that frequency is capped to the maximum supported frequency.
-PASS Accelerometer: Test that frequency is limited to the minimum supported frequency.
-PASS Accelerometer: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS Accelerometer: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS Accelerometer: Test that 'onreading' is called and sensor reading is valid.
-PASS Accelerometer: sensor reading is correct.
-PASS Accelerometer: sensor timestamp is updated when time passes.
-PASS Accelerometer: Test that sensor can be successfully created and its states are correct.
-PASS Accelerometer: sensor.start() returns undefined.
-PASS Accelerometer: no exception is thrown when calling start() on already started sensor.
-PASS Accelerometer: sensor.stop() returns undefined.
-PASS Accelerometer: no exception is thrown when calling stop() on already stopped sensor.
-PASS Accelerometer: Test that fresh reading is fetched on start().
-FAIL Accelerometer: frequency hint works. assert_greater_than: Fast sensor overtakes the slow one expected a number greater than 2 but got 1
-PASS Accelerometer: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS Accelerometer: throw 'TypeError' if frequency is invalid.
-PASS Accelerometer: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS Accelerometer: throw 'TypeError' if referenceFrame is not one of enumeration values.
-FAIL GravitySensor: Test that onerror is sent when sensor is not supported. assert_true: expected true got false
-FAIL GravitySensor: Test that onerror is sent when permissions are not granted. assert_true: expected true got false
-FAIL GravitySensor: Test that onerror is send when start() call has failed. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is capped to allowed maximum. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is capped to the maximum supported frequency. assert_true: expected true got false
-FAIL GravitySensor: Test that frequency is limited to the minimum supported frequency. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor can be constructed within an iframe allowed to use feature policy. assert_true: expected true got false
-FAIL GravitySensor: Test that 'onreading' is called and sensor reading is valid. assert_true: expected true got false
-FAIL GravitySensor: sensor reading is correct. assert_true: expected true got false
-FAIL GravitySensor: sensor timestamp is updated when time passes. assert_true: expected true got false
-FAIL GravitySensor: Test that sensor can be successfully created and its states are correct. assert_true: expected true got false
-FAIL GravitySensor: sensor.start() returns undefined. assert_true: expected true got false
-FAIL GravitySensor: no exception is thrown when calling start() on already started sensor. assert_true: expected true got false
-FAIL GravitySensor: sensor.stop() returns undefined. assert_true: expected true got false
-FAIL GravitySensor: no exception is thrown when calling stop() on already stopped sensor. assert_true: expected true got false
-FAIL GravitySensor: Test that fresh reading is fetched on start(). assert_true: expected true got false
-FAIL GravitySensor: frequency hint works. assert_true: expected true got false
-FAIL GravitySensor: sensor receives suspend / resume notifications when cross-origin subframe is focused. assert_true: expected true got false
-FAIL GravitySensor: throw 'TypeError' if frequency is invalid. assert_true: expected true got false
-FAIL GravitySensor: sensor reading is correct when options.referenceFrame is 'screen'. assert_true: expected true got false
-FAIL GravitySensor: throw 'TypeError' if referenceFrame is not one of enumeration values. assert_true: expected true got false
-PASS LinearAccelerationSensor: Test that onerror is sent when sensor is not supported.
-PASS LinearAccelerationSensor: Test that onerror is sent when permissions are not granted.
-PASS LinearAccelerationSensor: Test that onerror is send when start() call has failed.
-PASS LinearAccelerationSensor: Test that frequency is capped to allowed maximum.
-PASS LinearAccelerationSensor: Test that frequency is capped to the maximum supported frequency.
-PASS LinearAccelerationSensor: Test that frequency is limited to the minimum supported frequency.
-PASS LinearAccelerationSensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS LinearAccelerationSensor: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS LinearAccelerationSensor: Test that 'onreading' is called and sensor reading is valid.
-PASS LinearAccelerationSensor: sensor reading is correct.
-PASS LinearAccelerationSensor: sensor timestamp is updated when time passes.
-PASS LinearAccelerationSensor: Test that sensor can be successfully created and its states are correct.
-PASS LinearAccelerationSensor: sensor.start() returns undefined.
-PASS LinearAccelerationSensor: no exception is thrown when calling start() on already started sensor.
-PASS LinearAccelerationSensor: sensor.stop() returns undefined.
-PASS LinearAccelerationSensor: no exception is thrown when calling stop() on already stopped sensor.
-PASS LinearAccelerationSensor: Test that fresh reading is fetched on start().
-PASS LinearAccelerationSensor: frequency hint works.
-PASS LinearAccelerationSensor: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS LinearAccelerationSensor: throw 'TypeError' if frequency is invalid.
-PASS LinearAccelerationSensor: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS LinearAccelerationSensor: throw 'TypeError' if referenceFrame is not one of enumeration values.
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/orientation-sensor/AbsoluteOrientationSensor.https-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/orientation-sensor/AbsoluteOrientationSensor.https-expected.txt
deleted file mode 100644
index 5555f73..0000000
--- a/third_party/blink/web_tests/platform/mac/external/wpt/orientation-sensor/AbsoluteOrientationSensor.https-expected.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-This is a testharness.js-based test.
-PASS AbsoluteOrientationSensor: Test that onerror is sent when sensor is not supported.
-PASS AbsoluteOrientationSensor: Test that onerror is sent when permissions are not granted.
-PASS AbsoluteOrientationSensor: Test that onerror is send when start() call has failed.
-PASS AbsoluteOrientationSensor: Test that frequency is capped to allowed maximum.
-PASS AbsoluteOrientationSensor: Test that frequency is capped to the maximum supported frequency.
-PASS AbsoluteOrientationSensor: Test that frequency is limited to the minimum supported frequency.
-PASS AbsoluteOrientationSensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS AbsoluteOrientationSensor: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS AbsoluteOrientationSensor: Test that 'onreading' is called and sensor reading is valid.
-PASS AbsoluteOrientationSensor: sensor reading is correct.
-PASS AbsoluteOrientationSensor: sensor timestamp is updated when time passes.
-PASS AbsoluteOrientationSensor: Test that sensor can be successfully created and its states are correct.
-PASS AbsoluteOrientationSensor: sensor.start() returns undefined.
-PASS AbsoluteOrientationSensor: no exception is thrown when calling start() on already started sensor.
-PASS AbsoluteOrientationSensor: sensor.stop() returns undefined.
-PASS AbsoluteOrientationSensor: no exception is thrown when calling stop() on already stopped sensor.
-PASS AbsoluteOrientationSensor: Test that fresh reading is fetched on start().
-FAIL AbsoluteOrientationSensor: frequency hint works. assert_greater_than: Fast sensor overtakes the slow one expected a number greater than 2 but got 1
-PASS AbsoluteOrientationSensor: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS AbsoluteOrientationSensor: throw 'TypeError' if frequency is invalid.
-PASS AbsoluteOrientationSensor: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS AbsoluteOrientationSensor: throw 'TypeError' if referenceFrame is not one of enumeration values.
-PASS AbsoluteOrientationSensor.quaternion return a four-element FrozenArray.
-PASS AbsoluteOrientationSensor.populateMatrix() method works correctly.
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/orientation-sensor/RelativeOrientationSensor.https-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/orientation-sensor/RelativeOrientationSensor.https-expected.txt
deleted file mode 100644
index f60d13dc..0000000
--- a/third_party/blink/web_tests/platform/mac/external/wpt/orientation-sensor/RelativeOrientationSensor.https-expected.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-This is a testharness.js-based test.
-PASS RelativeOrientationSensor: Test that onerror is sent when sensor is not supported.
-PASS RelativeOrientationSensor: Test that onerror is sent when permissions are not granted.
-PASS RelativeOrientationSensor: Test that onerror is send when start() call has failed.
-PASS RelativeOrientationSensor: Test that frequency is capped to allowed maximum.
-PASS RelativeOrientationSensor: Test that frequency is capped to the maximum supported frequency.
-PASS RelativeOrientationSensor: Test that frequency is limited to the minimum supported frequency.
-PASS RelativeOrientationSensor: Test that sensor cannot be constructed within iframe disallowed to use feature policy.
-PASS RelativeOrientationSensor: Test that sensor can be constructed within an iframe allowed to use feature policy.
-PASS RelativeOrientationSensor: Test that 'onreading' is called and sensor reading is valid.
-PASS RelativeOrientationSensor: sensor reading is correct.
-PASS RelativeOrientationSensor: sensor timestamp is updated when time passes.
-PASS RelativeOrientationSensor: Test that sensor can be successfully created and its states are correct.
-PASS RelativeOrientationSensor: sensor.start() returns undefined.
-PASS RelativeOrientationSensor: no exception is thrown when calling start() on already started sensor.
-PASS RelativeOrientationSensor: sensor.stop() returns undefined.
-PASS RelativeOrientationSensor: no exception is thrown when calling stop() on already stopped sensor.
-PASS RelativeOrientationSensor: Test that fresh reading is fetched on start().
-FAIL RelativeOrientationSensor: frequency hint works. assert_greater_than: Fast sensor overtakes the slow one expected a number greater than 2 but got 2
-PASS RelativeOrientationSensor: sensor receives suspend / resume notifications when cross-origin subframe is focused.
-PASS RelativeOrientationSensor: throw 'TypeError' if frequency is invalid.
-PASS RelativeOrientationSensor: sensor reading is correct when options.referenceFrame is 'screen'.
-PASS RelativeOrientationSensor: throw 'TypeError' if referenceFrame is not one of enumeration values.
-PASS RelativeOrientationSensor.quaternion return a four-element FrozenArray.
-PASS RelativeOrientationSensor.populateMatrix() method works correctly.
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-position-parsing-expected.png b/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-position-parsing-expected.png
index 7b27bb58..73867a8 100644
--- a/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-position-parsing-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-position-parsing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-mixed-008-expected.png b/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-mixed-008-expected.png
index fd58d8b..c140f96 100644
--- a/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-mixed-008-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-mixed-008-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png b/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
index 0f898e0..32ebc6c 100644
--- a/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-svg-float-border-padding-expected.png b/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-svg-float-border-padding-expected.png
index 83ff87b6..15ab0b5 100644
--- a/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-svg-float-border-padding-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/zoom/text/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
index 5af8f04..fb588ea 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/backgrounds/background-position-parsing-expected.png b/third_party/blink/web_tests/platform/win/fast/backgrounds/background-position-parsing-expected.png
index f14a3a1..ff2227d 100644
--- a/third_party/blink/web_tests/platform/win/fast/backgrounds/background-position-parsing-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/backgrounds/background-position-parsing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/blink/web_tests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 650d350..881e87c7 100644
--- a/third_party/blink/web_tests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-mixed-008-expected.png b/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-mixed-008-expected.png
index c546546..25a1b65 100644
--- a/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-mixed-008-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-mixed-008-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png b/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
index 560c2f7..a1a3facfc 100644
--- a/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-hixie-rendering-model-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-svg-float-border-padding-expected.png b/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-svg-float-border-padding-expected.png
index f85064e..b1b108b6 100644
--- a/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-svg-float-border-padding-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/zoom/text/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
deleted file mode 100644
index 34ce0b0..0000000
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
new file mode 100644
index 0000000..f86663d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/fast/forms/controls-new-ui/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/print_browser/print_testharness/test_enable_print_browser.html b/third_party/blink/web_tests/virtual/print_browser/print_testharness/test_enable_print_browser.html
index a25c9c9..f57992d 100644
--- a/third_party/blink/web_tests/virtual/print_browser/print_testharness/test_enable_print_browser.html
+++ b/third_party/blink/web_tests/virtual/print_browser/print_testharness/test_enable_print_browser.html
@@ -19,8 +19,15 @@
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script>
-test(function () {
-  assert_equals(getComputedStyle(bodyText).fontSize, "40px")
-}, "Checks if we are in print mode");
+var t = async_test();
+// The <style> is guaranteed to be set by the time this script runs, but print
+// mode is set via an IPC which races with the loading task which runs this
+// script. We get @media screen until that IPC is processed.
+window.onload = function() {
+  t.step(function () {
+    assert_equals(getComputedStyle(bodyText).fontSize, "40px")
+  }, "Checks if we are in print mode");
+  t.done();
+};
 </script>
 </html>
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
index b93e810..0b5b00e4 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
@@ -202,7 +202,10 @@
     property ontouchend
     property ontouchmove
     property ontouchstart
+    property ontransitioncancel
     property ontransitionend
+    property ontransitionrun
+    property ontransitionstart
     property onvolumechange
     property onwaiting
     property onwebkitfullscreenchange
@@ -1304,7 +1307,10 @@
     property ontouchend
     property ontouchmove
     property ontouchstart
+    property ontransitioncancel
     property ontransitionend
+    property ontransitionrun
+    property ontransitionstart
     property onvolumechange
     property onwaiting
     property onwebkitfullscreenchange
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index aa484605..7c24d545 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -1371,7 +1371,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onvisibilitychange
     getter onvolumechange
     getter onwaiting
@@ -1559,7 +1562,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onvisibilitychange
     setter onvolumechange
     setter onwaiting
@@ -2335,7 +2341,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onvolumechange
     getter onwaiting
     getter onwheel
@@ -2442,7 +2451,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onvolumechange
     setter onwaiting
     setter onwheel
@@ -5656,7 +5668,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onvolumechange
     getter onwaiting
     getter onwheel
@@ -5749,7 +5764,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onvolumechange
     setter onwaiting
     setter onwheel
@@ -9080,7 +9098,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onunhandledrejection
     getter onunload
     getter onvolumechange
@@ -9266,7 +9287,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onunhandledrejection
     setter onunload
     setter onvolumechange
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index c290bf72a..7c8398e 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -265,7 +265,10 @@
     property ontouchend
     property ontouchmove
     property ontouchstart
+    property ontransitioncancel
     property ontransitionend
+    property ontransitionrun
+    property ontransitionstart
     property onvolumechange
     property onwaiting
     property onwebkitfullscreenchange
@@ -1452,7 +1455,10 @@
     property ontouchend
     property ontouchmove
     property ontouchstart
+    property ontransitioncancel
     property ontransitionend
+    property ontransitionrun
+    property ontransitionstart
     property onvolumechange
     property onwaiting
     property onwebkitfullscreenchange
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index d0ebab5b..d378192 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -1698,7 +1698,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onvisibilitychange
     getter onvolumechange
     getter onwaiting
@@ -1893,7 +1896,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onvisibilitychange
     setter onvolumechange
     setter onwaiting
@@ -3037,7 +3043,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onvolumechange
     getter onwaiting
     getter onwheel
@@ -3149,7 +3158,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onvolumechange
     setter onwaiting
     setter onwheel
@@ -6646,7 +6658,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onvolumechange
     getter onwaiting
     getter onwheel
@@ -6743,7 +6758,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onvolumechange
     setter onwaiting
     setter onwheel
@@ -11390,7 +11408,10 @@
     getter ontouchend
     getter ontouchmove
     getter ontouchstart
+    getter ontransitioncancel
     getter ontransitionend
+    getter ontransitionrun
+    getter ontransitionstart
     getter onunhandledrejection
     getter onunload
     getter onvolumechange
@@ -11588,7 +11609,10 @@
     setter ontouchend
     setter ontouchmove
     setter ontouchstart
+    setter ontransitioncancel
     setter ontransitionend
+    setter ontransitionrun
+    setter ontransitionstart
     setter onunhandledrejection
     setter onunload
     setter onvolumechange
diff --git a/third_party/blink/web_tests/wpt_internal/virtual-scroller/full-scroll-to-end-in-2-steps-ref.html b/third_party/blink/web_tests/wpt_internal/virtual-scroller/full-scroll-to-end-in-2-steps-ref.html
new file mode 100644
index 0000000..15175b9
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/virtual-scroller/full-scroll-to-end-in-2-steps-ref.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+  <style>body { overflow:hidden; }</style>
+  <script type="module">
+    import * as refTests from './resources/ref-tests.mjs';
+    refTests.withDiv(refTests.testFullScrollToEndIn2Steps);
+  </script>
+</html>
diff --git a/third_party/blink/web_tests/wpt_internal/virtual-scroller/full-scroll-to-end-in-2-steps.html b/third_party/blink/web_tests/wpt_internal/virtual-scroller/full-scroll-to-end-in-2-steps.html
new file mode 100644
index 0000000..965d8008
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/virtual-scroller/full-scroll-to-end-in-2-steps.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+  <meta charset="utf8">
+  <title>Creates several pages of divs and scrolls in 2 steps.</title>
+  <style>body { overflow:hidden; }</style>
+  <link rel="author" title="Fergal Daly" href="mailto:fergal@chromium.org">
+  <link rel="match" href="full-scroll-to-end-in-2-steps-ref.html">
+  <script type="module">
+    import 'std:elements/virtual-scroller';
+    import * as refTests from './resources/ref-tests.mjs';
+    refTests.withVirtualScroller(refTests.testFullScrollToEndIn2Steps);
+  </script>
+</html>
diff --git a/third_party/blink/web_tests/wpt_internal/virtual-scroller/resources/ref-tests.mjs b/third_party/blink/web_tests/wpt_internal/virtual-scroller/resources/ref-tests.mjs
index f446047..bb3fe73 100644
--- a/third_party/blink/web_tests/wpt_internal/virtual-scroller/resources/ref-tests.mjs
+++ b/third_party/blink/web_tests/wpt_internal/virtual-scroller/resources/ref-tests.mjs
@@ -26,6 +26,24 @@
   });
 };
 
+/**
+ * Tests scrolling in 2 steps to the end of the page.
+ * This reproduces crbug.com/1004102.
+ */
+export function testFullScrollToEndIn2Steps(target) {
+  helpers.appendDivs(target, MORE_THAN_SCREENFUL, '10px');
+  // TODO(fergal): rewrite tests to use await.
+  // Give the scroller time to settle.
+  helpers.inNFrames(10, () => {
+    target.children[1].scrollIntoView(/* alignToTop= */ true);
+    // Give the scroller time to settle.
+    helpers.inNFrames(10, () => {
+      window.scrollBy(0, target.getBoundingClientRect().height);
+      helpers.stopWaiting();
+    });
+  });
+};
+
 export function testLargeChild(target) {
   // This scrollTo and nextFrame are not necessary for the ref-test
   // however it helps when trying to debug this test in a
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index f33feeb4..b170041b 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-10-1-46-g3de1b8d0b
-Revision: 3de1b8d0b0983cf49a187a4227e7950395a3b08f
+Version: VER-2-10-1-47-gcc17f852d
+Revision: cc17f852d575a8a66f9be51461af550d0f413891
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
 License File: src/docs/FTL.TXT
diff --git a/tools/android/checkstyle/chromium-style-5.0.xml b/tools/android/checkstyle/chromium-style-5.0.xml
index e2033a5..e790323 100644
--- a/tools/android/checkstyle/chromium-style-5.0.xml
+++ b/tools/android/checkstyle/chromium-style-5.0.xml
@@ -17,6 +17,10 @@
     <module name="IllegalCatch">
       <property name="severity" value="info"/>
     </module>
+    <module name="ModifierOrder">
+      <message key="mod.order" value="&quot;{0}&quot; modifier out of order with the JLS suggestions. The correct order: public protected private abstract default static final transient volatile synchronized native strictfp. See https://crbug.com/1003711 for details."/>
+      <property name="severity" value="error"/>
+    </module>
     <module name="RedundantImport">
       <message key="import.redundant" value="Redundant import: {0}. Use :JavaImportOrganize (ECLIM) or Ctrl+Shift+O (Eclipse) to sort imports"/>
       <property name="severity" value="error"/>
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 0b49a56..1bbaa76 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -37,9 +37,9 @@
 # Do NOT CHANGE this if you don't know what you're doing -- see
 # https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md
 # Reverting problematic clang rolls is safe, though.
-CLANG_REVISION = '8455294f2ac13d587b13d728038a9bffa7185f2b'
-CLANG_SVN_REVISION = '371202'
-CLANG_SUB_REVISION = 2
+CLANG_REVISION = 'b4160cb94c54f0b31d0ce14694950dac7b6cd83f'
+CLANG_SVN_REVISION = '371856'
+CLANG_SUB_REVISION = 1
 
 PACKAGE_VERSION = '%s-%s-%s' % (CLANG_SVN_REVISION, CLANG_REVISION[:8],
                                 CLANG_SUB_REVISION)
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index bccaea2..04a353b 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -10696,10 +10696,10 @@
   </description>
 </action>
 
-<action name="ManualFallback_CreditCard_OpenAddCreditCard">
+<action name="ManualFallback_CreditCard_OpenAddPaymentMethod">
   <owner>javierrobles@chromium.org</owner>
   <description>
-    The user tapped on &quot;Add credit card&quot; on the Password Manual
+    The user tapped on &quot;Add Payment Method...&quot; on the Password Manual
     Fallback view.
   </description>
 </action>
@@ -11511,6 +11511,22 @@
   </description>
 </action>
 
+<action name="MobileAddCreditCard.AddPaymentMethodButton">
+  <owner>gambard@chromium.org</owner>
+  <description>
+    The user tapped on &quot;Add Payment Method...&quot; in the Settings,
+    Payment Methods menu.
+  </description>
+</action>
+
+<action name="MobileAddCreditCard.CardSaved">
+  <owner>gambard@chromium.org</owner>
+  <description>
+    The user saved a new credit card by tapping on &quot;Add&quot; in the
+    Settings, Add Payment Methods menu.
+  </description>
+</action>
+
 <action name="MobileBeamCallbackSuccess">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index fff74fff..a643d08 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -36058,6 +36058,17 @@
   </summary>
 </histogram>
 
+<histogram name="Enterprise.HeartbeatSignal" enum="BooleanSuccess"
+    expires_after="2020-04-01">
+  <owner>ayaelattar@chromium.org</owner>
+  <owner>poromov@chromium.org</owner>
+  <summary>
+    Result of a single attempt to signal a device heartbeat, which is used for
+    monitoring the device connectivity. By default heartbeats per a single
+    device are sent every 2 minutes.
+  </summary>
+</histogram>
+
 <histogram name="Enterprise.InitialEnrollmentRequirement"
     enum="EnterpriseInitialEnrollmentRequirement" expires_after="M77">
   <owner>pmarko@chromium.org</owner>
@@ -110745,6 +110756,16 @@
   </summary>
 </histogram>
 
+<histogram name="Printing.CUPS.PrintJobDatabasePrintJobSaved"
+    enum="BooleanSuccess" expires_after="2021-09-11">
+  <owner>nikitapodguzov@chromium.org</owner>
+  <owner>skau@chromium.org</owner>
+  <summary>
+    Indicates whether we were successful performing saving print job database
+    operation.
+  </summary>
+</histogram>
+
 <histogram name="Printing.CUPS.PrintJobsQueued" units="count">
   <owner>skau@chromium.org</owner>
   <summary>
@@ -149616,7 +149637,7 @@
 </histogram>
 
 <histogram name="UpgradeDetector.RollbackReason"
-    enum="UpgradeDetectorRollbackReason" expires_after="M80">
+    enum="UpgradeDetectorRollbackReason" expires_after="M85">
   <owner>isandrk@chromium.org</owner>
   <owner>poromov@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 7bd6fb9..3b36acb4 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -213,7 +213,7 @@
   </metric>
 </event>
 
-<event name="AdPageLoad">
+<event name="AdPageLoad" singular="True">
   <owner>johnidel@chromium.org</owner>
   <owner>jkarlin@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/ukm/validate_format.py b/tools/metrics/ukm/validate_format.py
index b95d49d..3c6982a4 100755
--- a/tools/metrics/ukm/validate_format.py
+++ b/tools/metrics/ukm/validate_format.py
@@ -30,7 +30,7 @@
 
     results = dict();
 
-    if not metricCheckSuccess or not metricCheckSuccess:
+    if not ownerCheckSuccess or not metricCheckSuccess:
       results['Errors'] = ownerCheckErrors + metricCheckErrors
     if metricCheckWarnings and not IGNORE_METRIC_CHECK_WARNINGS:
       results['Warnings'] = metricCheckWarnings
diff --git a/tools/metrics/ukm/xml_validations.py b/tools/metrics/ukm/xml_validations.py
index b4d4327..f832e3f 100644
--- a/tools/metrics/ukm/xml_validations.py
+++ b/tools/metrics/ukm/xml_validations.py
@@ -60,7 +60,7 @@
     enums, _ = extract_histograms.ExtractEnumsFromXmlTree(enum_tree)
 
     for event_node in self.config.getElementsByTagName('event'):
-      for metric_node in self.config.getElementsByTagName('metric'):
+      for metric_node in event_node.getElementsByTagName('metric'):
         if metric_node.hasAttribute('enum'):
           enum_name = metric_node.getAttribute('enum');
           # Check if the enum is defined in enums.xml.
diff --git a/tools/metrics/ukm/xml_validations_test.py b/tools/metrics/ukm/xml_validations_test.py
index 17a0074..cba3bb9 100644
--- a/tools/metrics/ukm/xml_validations_test.py
+++ b/tools/metrics/ukm/xml_validations_test.py
@@ -54,7 +54,10 @@
   def testMetricHasUndefinedEnum(self):
     ukm_config = self.toUkmConfig("""
         <ukm-configuration>
-          <event name="Event">
+          <event name="Event1">
+            <metric name="Metric2" enum="FeatureObserver"/>
+          </event>
+          <event name="Event2">
             <metric name="Metric1" enum="BadEnum"/>
             <metric name="Metric2" enum="FeatureObserver"/>
             <metric name="Metric3" unit="ms"/>
@@ -63,12 +66,12 @@
         </ukm-configuration>
         """.strip())
     expected_errors = [
-        "Unknown enum BadEnum in ukm metric Event:Metric1.",
+        "Unknown enum BadEnum in ukm metric Event2:Metric1.",
     ]
 
     expected_warnings = [
         "Warning: Neither 'enum' or 'unit' is specified for ukm metric "
-        "Event:Metric4.",
+        "Event2:Metric4.",
     ]
 
     validator = UkmXmlValidation(ukm_config)
diff --git a/tools/perf/core/results_processor/__init__.py b/tools/perf/core/results_processor/__init__.py
index d5b3e2f..bef1eea8 100644
--- a/tools/perf/core/results_processor/__init__.py
+++ b/tools/perf/core/results_processor/__init__.py
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-from core.results_processor.processor import ArgumentParser
-from core.results_processor.processor import ProcessOptions
+from core.results_processor.command_line import ArgumentParser
+from core.results_processor.command_line import ProcessOptions
 from core.results_processor.processor import ProcessResults
 from core.results_processor.processor import main
diff --git a/tools/perf/core/results_processor/command_line.py b/tools/perf/core/results_processor/command_line.py
new file mode 100644
index 0000000..faf113e
--- /dev/null
+++ b/tools/perf/core/results_processor/command_line.py
@@ -0,0 +1,152 @@
+# Copyright 2019 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.
+
+"""Implements the interface of the results_processor module.
+
+Provides functions to parse command line arguments and process options.
+"""
+
+import argparse
+import datetime
+import os
+import re
+import sys
+
+from py_utils import cloud_storage
+
+
+SUPPORTED_FORMATS = ['none', 'json-test-results']
+
+
+def ArgumentParser(standalone=False, legacy_formats=None):
+  """Create an ArgumentParser defining options required by the processor."""
+  all_output_formats = sorted(
+      set(SUPPORTED_FORMATS).union(legacy_formats or ()))
+  parser, group = _CreateTopLevelParser(standalone)
+  group.add_argument(
+      '--output-format', action='append', dest='output_formats',
+      metavar='FORMAT', choices=all_output_formats, required=standalone,
+      help=Sentences(
+          'Output format to produce.',
+          'May be used multiple times to produce multiple outputs.',
+          'Avaliable formats: %s.' % ', '.join(all_output_formats),
+          '' if standalone else 'Defaults to: html.'))
+  group.add_argument(
+      '--intermediate-dir', metavar='DIR_PATH', required=standalone,
+      help=Sentences(
+          'Path to a directory where intermediate results are stored.',
+          '' if standalone else 'If not provided, the default is to create a '
+          'new directory within "{output_dir}/artifacts/".'))
+  group.add_argument(
+      '--output-dir', default=_DefaultOutputDir(), metavar='DIR_PATH',
+      help=Sentences(
+          'Path to a directory where to write final results.',
+          'Default: %(default)s.'))
+  group.add_argument(
+      '--reset-results', action='store_true',
+      help=Sentences(
+          'Overwrite any previous output files in the output directory.',
+          'The default is to append to existing results.'))
+  group.add_argument(
+      '--results-label', metavar='LABEL',
+      help='Label to identify the results generated by this run.')
+  group.add_argument(
+      '--upload-results', action='store_true',
+      help='Upload generated artifacts to cloud storage.')
+  group.add_argument(
+      '--upload-bucket', default='output', metavar='BUCKET',
+      help=Sentences(
+          'Storage bucket to use for uploading artifacts.',
+          'Supported values are: %s; or a valid cloud storage bucket name.'
+          % ', '.join(sorted(cloud_storage.BUCKET_ALIASES)),
+          'Defaults to: %(default)s.'))
+  group.set_defaults(legacy_output_formats=[])
+  return parser
+
+
+def ProcessOptions(options):
+  """Adjust result processing options as needed before running benchmarks.
+
+  Note: The intended scope of this function is limited to only adjust options
+  defined by the ArgumentParser above. One should not attempt to read or modify
+  any other attributes that the options object may have.
+
+  Currently the main job of this function is to tease out and separate output
+  formats to be handled by the results processor, from those that should fall
+  back to the legacy output formatters in Telemetry.
+
+  Args:
+    options: An options object with values parsed from the command line.
+  """
+  # The output_dir option is None or missing if the selected Telemetry command
+  # does not involve output generation, e.g. "run_benchmark list", and the
+  # argument parser defined above was not invoked.
+  if getattr(options, 'output_dir', None) is None:
+    return
+
+  def resolve_dir(path):
+    return os.path.realpath(os.path.expanduser(path))
+
+  options.output_dir = resolve_dir(options.output_dir)
+
+  if options.intermediate_dir:
+    options.intermediate_dir = resolve_dir(options.intermediate_dir)
+  else:
+    if options.results_label:
+      filesafe_label = re.sub(r'\W+', '_', options.results_label)
+    else:
+      filesafe_label = 'run'
+    start_time = datetime.datetime.utcnow().strftime('%Y%m%dT%H%M%SZ')
+    options.intermediate_dir = os.path.join(
+        options.output_dir, 'artifacts', '%s_%s' % (filesafe_label, start_time))
+
+  if options.upload_results:
+    options.upload_bucket = cloud_storage.BUCKET_ALIASES.get(
+        options.upload_bucket, options.upload_bucket)
+  else:
+    options.upload_bucket = None
+
+  if options.output_formats:
+    chosen_formats = sorted(set(options.output_formats))
+  else:
+    chosen_formats = ['html']
+
+  options.output_formats = []
+  for output_format in chosen_formats:
+    if output_format == 'none':
+      continue
+    elif output_format in SUPPORTED_FORMATS:
+      options.output_formats.append(output_format)
+    else:
+      options.legacy_output_formats.append(output_format)
+
+
+def _CreateTopLevelParser(standalone):
+  """Create top level parser, and group for result options."""
+  if standalone:
+    parser = argparse.ArgumentParser(
+        description='Standalone command line interface to results_processor.')
+    # In standalone mode, both the parser and group are the same thing.
+    return parser, parser
+  else:
+    parser = argparse.ArgumentParser(add_help=False)
+    group = parser.add_argument_group(title='Result processor options')
+    return parser, group
+
+
+def _DefaultOutputDir():
+  """Default output directory.
+
+  Points to the directory of the benchmark runner script, if found, or the
+  current working directory otherwise.
+  """
+  main_module = sys.modules['__main__']
+  if hasattr(main_module, '__file__'):
+    return os.path.realpath(os.path.dirname(main_module.__file__))
+  else:
+    return os.getcwd()
+
+
+def Sentences(*args):
+  return ' '.join(s for s in args if s)
diff --git a/tools/perf/core/results_processor/processor_unittest.py b/tools/perf/core/results_processor/command_line_unittest.py
similarity index 88%
rename from tools/perf/core/results_processor/processor_unittest.py
rename to tools/perf/core/results_processor/command_line_unittest.py
index a6e7c25..2220cd01 100644
--- a/tools/perf/core/results_processor/processor_unittest.py
+++ b/tools/perf/core/results_processor/command_line_unittest.py
@@ -16,12 +16,13 @@
 
 import mock
 
+from core.results_processor import command_line
 from core.results_processor import processor
 
 
-# To easily mock module level symbols within the processor module.
+# To easily mock module level symbols within the command_line module.
 def module(symbol):
-  return 'core.results_processor.processor.' + symbol
+  return 'core.results_processor.command_line.' + symbol
 
 
 class ProcessOptionsTestCase(unittest.TestCase):
@@ -52,10 +53,10 @@
     mock.patch.stopall()
 
   def ParseArgs(self, args):
-    parser = processor.ArgumentParser(
+    parser = command_line.ArgumentParser(
         standalone=self.standalone, legacy_formats=self.legacy_formats)
     options = parser.parse_args(args)
-    processor.ProcessOptions(options)
+    command_line.ProcessOptions(options)
     return options
 
 
@@ -132,7 +133,7 @@
     with self.assertRaises(SystemExit):
       self.ParseArgs(['--output-format', 'unknown'])
 
-  @mock.patch.dict(module('SUPPORTED_FORMATS'), {'new-format': None})
+  @mock.patch(module('SUPPORTED_FORMATS'), ['new-format'])
   def testOutputFormatsSplit(self):
     self.legacy_formats = ['old-format']
     options = self.ParseArgs(
@@ -140,7 +141,7 @@
     self.assertEqual(options.output_formats, ['new-format'])
     self.assertEqual(options.legacy_output_formats, ['old-format'])
 
-  @mock.patch.dict(module('SUPPORTED_FORMATS'), {'new-format': None})
+  @mock.patch(module('SUPPORTED_FORMATS'), ['new-format'])
   def testNoDuplicateOutputFormats(self):
     self.legacy_formats = ['old-format']
     options = self.ParseArgs(
@@ -159,15 +160,23 @@
     with self.assertRaises(SystemExit):
       self.ParseArgs([])
 
-  @mock.patch.dict(module('SUPPORTED_FORMATS'), {'new-format': None})
+  @mock.patch(module('SUPPORTED_FORMATS'), ['new-format'])
   def testIntermediateDirRequired(self):
     with self.assertRaises(SystemExit):
       self.ParseArgs(['--output-format', 'new-format'])
 
-  @mock.patch.dict(module('SUPPORTED_FORMATS'), {'new-format': None})
+  @mock.patch(module('SUPPORTED_FORMATS'), ['new-format'])
   def testSuccessful(self):
     options = self.ParseArgs(
         ['--output-format', 'new-format', '--intermediate-dir', 'some_dir'])
     self.assertEqual(options.output_formats, ['new-format'])
     self.assertEqual(options.intermediate_dir, '/path/to/curdir/some_dir')
     self.assertEqual(options.output_dir, '/path/to/output_dir')
+
+
+class TestSupportedFormats(unittest.TestCase):
+  def testAllSupportedFormatsHaveFormatters(self):
+    for output_format in command_line.SUPPORTED_FORMATS:
+      if output_format == 'none':
+        continue
+      self.assertIn(output_format, processor.FORMATTERS)
diff --git a/tools/perf/core/results_processor/processor.py b/tools/perf/core/results_processor/processor.py
index 9aab4c4..ad13da4 100644
--- a/tools/perf/core/results_processor/processor.py
+++ b/tools/perf/core/results_processor/processor.py
@@ -4,132 +4,24 @@
 
 """Implements the interface of the results_processor module.
 
-Provides functions to parse command line arguments, process options, and the
-entry point to start the processing of results.
+Provides functions to process intermediate results, and the entry point to
+the standalone version of Results Processor.
 """
 
-import argparse
-import datetime
 import json
 import os
-import re
-import sys
 
-from py_utils import cloud_storage
+from core.results_processor import command_line
 from core.results_processor import json3_output
 
 
 HTML_TRACE_NAME = 'trace.html'
 TELEMETRY_RESULTS = '_telemetry_results.jsonl'
-SUPPORTED_FORMATS = {
-    'none': NotImplemented,
+FORMATTERS = {
     'json-test-results': json3_output,
 }
 
 
-def ArgumentParser(standalone=False, legacy_formats=None):
-  """Create an ArgumentParser defining options required by the processor."""
-  all_output_formats = sorted(
-      set(SUPPORTED_FORMATS).union(legacy_formats or ()))
-  parser, group = _CreateTopLevelParser(standalone)
-  group.add_argument(
-      '--output-format', action='append', dest='output_formats',
-      metavar='FORMAT', choices=all_output_formats, required=standalone,
-      help=Sentences(
-          'Output format to produce.',
-          'May be used multiple times to produce multiple outputs.',
-          'Avaliable formats: %s.' % ', '.join(all_output_formats),
-          '' if standalone else 'Defaults to: html.'))
-  group.add_argument(
-      '--intermediate-dir', metavar='DIR_PATH', required=standalone,
-      help=Sentences(
-          'Path to a directory where intermediate results are stored.',
-          '' if standalone else 'If not provided, the default is to create a '
-          'new directory within "{output_dir}/artifacts/".'))
-  group.add_argument(
-      '--output-dir', default=_DefaultOutputDir(), metavar='DIR_PATH',
-      help=Sentences(
-          'Path to a directory where to write final results.',
-          'Default: %(default)s.'))
-  group.add_argument(
-      '--reset-results', action='store_true',
-      help=Sentences(
-          'Overwrite any previous output files in the output directory.',
-          'The default is to append to existing results.'))
-  group.add_argument(
-      '--results-label', metavar='LABEL',
-      help='Label to identify the results generated by this run.')
-  group.add_argument(
-      '--upload-results', action='store_true',
-      help='Upload generated artifacts to cloud storage.')
-  group.add_argument(
-      '--upload-bucket', default='output', metavar='BUCKET',
-      help=Sentences(
-          'Storage bucket to use for uploading artifacts.',
-          'Supported values are: %s; or a valid cloud storage bucket name.'
-          % ', '.join(sorted(cloud_storage.BUCKET_ALIASES)),
-          'Defaults to: %(default)s.'))
-  group.set_defaults(legacy_output_formats=[])
-  return parser
-
-
-def ProcessOptions(options):
-  """Adjust result processing options as needed before running benchmarks.
-
-  Note: The intended scope of this function is limited to only adjust options
-  defined by the ArgumentParser above. One should not attempt to read or modify
-  any other attributes that the options object may have.
-
-  Currently the main job of this function is to tease out and separate output
-  formats to be handled by the results processor, from those that should fall
-  back to the legacy output formatters in Telemetry.
-
-  Args:
-    options: An options object with values parsed from the command line.
-  """
-  # The output_dir option is None or missing if the selected Telemetry command
-  # does not involve output generation, e.g. "run_benchmark list", and the
-  # argument parser defined above was not invoked.
-  if getattr(options, 'output_dir', None) is None:
-    return
-
-  def resolve_dir(path):
-    return os.path.realpath(os.path.expanduser(path))
-
-  options.output_dir = resolve_dir(options.output_dir)
-
-  if options.intermediate_dir:
-    options.intermediate_dir = resolve_dir(options.intermediate_dir)
-  else:
-    if options.results_label:
-      filesafe_label = re.sub(r'\W+', '_', options.results_label)
-    else:
-      filesafe_label = 'run'
-    start_time = datetime.datetime.utcnow().strftime('%Y%m%dT%H%M%SZ')
-    options.intermediate_dir = os.path.join(
-        options.output_dir, 'artifacts', '%s_%s' % (filesafe_label, start_time))
-
-  if options.upload_results:
-    options.upload_bucket = cloud_storage.BUCKET_ALIASES.get(
-        options.upload_bucket, options.upload_bucket)
-  else:
-    options.upload_bucket = None
-
-  if options.output_formats:
-    chosen_formats = sorted(set(options.output_formats))
-  else:
-    chosen_formats = ['html']
-
-  options.output_formats = []
-  for output_format in chosen_formats:
-    if output_format == 'none':
-      continue
-    elif output_format in SUPPORTED_FORMATS:
-      options.output_formats.append(output_format)
-    else:
-      options.legacy_output_formats.append(output_format)
-
-
 def ProcessResults(options):
   """Process intermediate results and produce the requested outputs.
 
@@ -152,26 +44,13 @@
   _UploadArtifacts(intermediate_results, options.upload_bucket)
 
   for output_format in options.output_formats:
-    if output_format not in SUPPORTED_FORMATS:
+    if output_format not in FORMATTERS:
       raise NotImplementedError(output_format)
 
-    formatter = SUPPORTED_FORMATS[output_format]
+    formatter = FORMATTERS[output_format]
     formatter.Process(intermediate_results, options.output_dir)
 
 
-def _CreateTopLevelParser(standalone):
-  """Create top level parser, and group for result options."""
-  if standalone:
-    parser = argparse.ArgumentParser(
-        description='Standalone command line interface to results_processor.')
-    # In standalone mode, both the parser and group are the same thing.
-    return parser, parser
-  else:
-    parser = argparse.ArgumentParser(add_help=False)
-    group = parser.add_argument_group(title='Result processor options')
-    return parser, group
-
-
 def _LoadIntermediateResults(intermediate_file):
   """Load intermediate results from a file into a single dict."""
   results = {'benchmarkRun': {}, 'testResults': []}
@@ -219,26 +98,9 @@
         assert 'remoteUrl' in artifact
 
 
-def _DefaultOutputDir():
-  """Default output directory.
-
-  Points to the directory of the benchmark runner script, if found, or the
-  current working directory otherwise.
-  """
-  main_module = sys.modules['__main__']
-  if hasattr(main_module, '__file__'):
-    return os.path.realpath(os.path.dirname(main_module.__file__))
-  else:
-    return os.getcwd()
-
-
-def Sentences(*args):
-  return ' '.join(s for s in args if s)
-
-
 def main(args=None):
   """Entry point for the standalone version of the results_processor script."""
-  parser = ArgumentParser(standalone=True)
+  parser = command_line.ArgumentParser(standalone=True)
   options = parser.parse_args(args)
-  ProcessOptions(options)
+  command_line.ProcessOptions(options)
   return ProcessResults(options)
diff --git a/ui/accessibility/ax_node_position_unittest.cc b/ui/accessibility/ax_node_position_unittest.cc
index 3cf3fe7..44e482d 100644
--- a/ui/accessibility/ax_node_position_unittest.cc
+++ b/ui/accessibility/ax_node_position_unittest.cc
@@ -1954,16 +1954,26 @@
 
 TEST_F(AXPositionTest, CreatePositionAtPreviousFormatStartWithTreePosition) {
   TestPositionType tree_position = AXNodePosition::CreateTreePosition(
-      tree_.data().tree_id, static_text1_.id, 0 /* child_index */);
+      tree_.data().tree_id, static_text1_.id, 1 /* child_index */);
   ASSERT_NE(nullptr, tree_position);
+  ASSERT_TRUE(tree_position->IsTreePosition());
+
   TestPositionType test_position =
       tree_position->CreatePreviousFormatStartPosition(
           AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(static_text1_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->child_index());
+
+  test_position = test_position->CreatePreviousFormatStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
   EXPECT_EQ(button_.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
 
+  // StopIfAlreadyAtBoundary shouldn't move, since it's already at a boundary.
   test_position = test_position->CreatePreviousFormatStartPosition(
       AXBoundaryBehavior::StopIfAlreadyAtBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -1971,8 +1981,15 @@
   EXPECT_EQ(button_.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
 
-  // AXBoundaryBehavior::CrossBoundary should return a null position when it
-  // reaches the start of the document.
+  // StopAtLastAnchorBoundary should stop at the start of the document while
+  // CrossBoundary should return a null position when crossing it.
+  test_position = test_position->CreatePreviousFormatStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(button_.id, test_position->anchor_id());
+  EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
+
   test_position = test_position->CreatePreviousFormatStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -1985,6 +2002,7 @@
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
   TestPositionType test_position =
       text_position->CreatePreviousFormatStartPosition(
           AXBoundaryBehavior::CrossBoundary);
@@ -1995,14 +2013,13 @@
   EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, test_position->affinity());
 
   test_position = test_position->CreatePreviousFormatStartPosition(
-      AXBoundaryBehavior::CrossBoundary);
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(button_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
 
-  // AXBoundaryBehavior::StopIfAlreadyAtBoundary shouldn't move, since it's
-  // already at a boundary.
+  // StopIfAlreadyAtBoundary shouldn't move, since it's already at a boundary.
   test_position = test_position->CreatePreviousFormatStartPosition(
       AXBoundaryBehavior::StopIfAlreadyAtBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2010,8 +2027,15 @@
   EXPECT_EQ(button_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
 
-  // This time, it should be a null position, since it's the first text node
-  // in the document.
+  // StopAtLastAnchorBoundary should stop at the start of the document while
+  // CrossBoundary should return a null position when crossing it.
+  test_position = test_position->CreatePreviousFormatStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(button_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+
   test_position = test_position->CreatePreviousFormatStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2035,6 +2059,8 @@
   TestPositionType tree_position = AXNodePosition::CreateTreePosition(
       tree_.data().tree_id, inline_box1_.id, 0 /* child_index */);
   ASSERT_NE(nullptr, tree_position);
+  ASSERT_TRUE(tree_position->IsTreePosition());
+
   TestPositionType test_position = tree_position->CreateNextFormatEndPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2042,21 +2068,30 @@
   EXPECT_EQ(line_break_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->child_index());
 
-  // AXBoundaryBehavior::StopIfAlreadyAtBoundary shouldn't move, since it's
-  // already at a boundary.
-  test_position = test_position->CreatePreviousFormatStartPosition(
+  test_position = test_position->CreateNextFormatEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->child_index());
+
+  // StopIfAlreadyAtBoundary shouldn't move, since it's already at a boundary.
+  test_position = test_position->CreateNextFormatEndPosition(
       AXBoundaryBehavior::StopIfAlreadyAtBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
-  EXPECT_EQ(line_break_.id, test_position->anchor_id());
-  EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->child_index());
 
-  // AXBoundaryBehavior::CrossBoundary should return a null position when it
-  // reaches the end of the document
+  // StopAtLastAnchorBoundary should stop at the end of the document while
+  // CrossBoundary should return a null position when crossing it.
   test_position = test_position->CreateNextFormatEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
-  test_position = test_position->CreateNextFormatEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->child_index());
+
   test_position = test_position->CreateNextFormatEndPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2065,40 +2100,46 @@
 
 TEST_F(AXPositionTest, CreatePositionAtNextFormatEndWithTextPosition) {
   TestPositionType text_position = AXNodePosition::CreateTextPosition(
-      tree_.data().tree_id, inline_box1_.id, 2 /* text_offset */,
+      tree_.data().tree_id, inline_box1_.id, 6 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
   TestPositionType test_position = text_position->CreateNextFormatEndPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
-  EXPECT_EQ(6, test_position->text_offset());
-
-  // AXBoundaryBehavior::StopIfAlreadyAtBoundary shouldn't move, since it's
-  // already at a boundary.
-  test_position = test_position->CreateNextFormatEndPosition(
-      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
-  EXPECT_EQ(6, test_position->text_offset());
-
-  // This time, it should move due to AXBoundaryBehavior::CrossBoundary.
-  test_position = test_position->CreateNextFormatEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(line_break_.id, test_position->anchor_id());
   EXPECT_EQ(1, test_position->text_offset());
 
   test_position = test_position->CreateNextFormatEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
   EXPECT_EQ(6, test_position->text_offset());
+
+  // StopIfAlreadyAtBoundary shouldn't move, since it's already at a boundary.
+  test_position = test_position->CreateNextFormatEndPosition(
+      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(6, test_position->text_offset());
+
+  // StopAtLastAnchorBoundary should stop at the end of the document while
+  // CrossBoundary should return a null position when crossing it.
+  test_position = test_position->CreateNextFormatEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(6, test_position->text_offset());
+
+  test_position = test_position->CreateNextFormatEndPosition(
+      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsNullPosition());
 }
 
 TEST_F(AXPositionTest, CreatePositionAtFormatBoundaryWithTextPosition) {
@@ -2155,8 +2196,6 @@
 }
 
 TEST_F(AXPositionTest, CreatePositionAtPageBoundaryWithTextPosition) {
-  AXNodePosition::SetTree(nullptr);
-
   AXNodeData root_data, page_1_data, page_1_text_data, page_2_data,
       page_2_text_data, page_3_data, page_3_text_data;
   std::unique_ptr<AXTree> new_tree(CreateMultipageDocument(
@@ -2169,22 +2208,16 @@
       new_tree->data().tree_id, page_1_text_data.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
-  TestPositionType test_position = text_position->CreateNextPageEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
-  EXPECT_EQ(19, test_position->text_offset());
+  ASSERT_TRUE(text_position->IsTextPosition());
 
-  // StopIfAlreadyAtBoundary shouldn't move at all since it's at a boundary
-  test_position = text_position->CreateNextPageEndPosition(
+  // StopIfAlreadyAtBoundary shouldn't move at all since it's at a boundary.
+  TestPositionType test_position = text_position->CreateNextPageStartPosition(
       AXBoundaryBehavior::StopIfAlreadyAtBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
-  EXPECT_EQ(19, test_position->text_offset());
+  EXPECT_EQ(0, test_position->text_offset());
 
-  // Test CreateNextPageStartPosition until the end of document is reached
   test_position = text_position->CreateNextPageStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2192,13 +2225,21 @@
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
 
-  test_position = test_position->CreateNextPageStartPosition(
-      AXBoundaryBehavior::CrossBoundary);
+  test_position = text_position->CreateNextPageStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
 
+  // Test CreateNextPageEndPosition until the end of document is reached.
+  test_position = test_position->CreateNextPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(19, test_position->text_offset());
+
   test_position = test_position->CreateNextPageEndPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2213,7 +2254,22 @@
   EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
   EXPECT_EQ(24, test_position->text_offset());
 
-  // Moving forward past the end should return a null position
+  // StopAtLastAnchorBoundary shouldn't move past the end of the document.
+  test_position = test_position->CreateNextPageStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(24, test_position->text_offset());
+
+  test_position = test_position->CreateNextPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(24, test_position->text_offset());
+
+  // Moving forward past the end should return a null position.
   TestPositionType null_position = test_position->CreateNextPageStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, null_position);
@@ -2224,16 +2280,23 @@
   EXPECT_NE(nullptr, null_position);
   EXPECT_TRUE(null_position->IsNullPosition());
 
-  // Now move backward through the document
-  test_position = test_position->CreatePreviousPageEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
+  // Now move backward through the document.
+  text_position = test_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
+  EXPECT_NE(nullptr, text_position);
+  EXPECT_TRUE(text_position->IsTextPosition());
+  EXPECT_EQ(page_3_text_data.id, text_position->anchor_id());
+  EXPECT_EQ(24, text_position->text_offset());
+
+  test_position = text_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(19, test_position->text_offset());
 
-  test_position = test_position->CreatePreviousPageEndPosition(
-      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
+  test_position = text_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
@@ -2245,19 +2308,14 @@
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
-  test_position = test_position->CreatePreviousPageStartPosition(
-      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
-  EXPECT_EQ(0, test_position->text_offset());
 
   test_position = test_position->CreatePreviousPageStartPosition(
-      AXBoundaryBehavior::CrossBoundary);
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
+
   test_position = test_position->CreatePreviousPageStartPosition(
       AXBoundaryBehavior::StopIfAlreadyAtBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2265,7 +2323,22 @@
   EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
 
-  // Moving before the start should return a null position
+  // StopAtLastAnchorBoundary shouldn't move past the start of the document.
+  test_position = test_position->CreatePreviousPageStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+
+  test_position = test_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+
+  // Moving before the start should return a null position.
   null_position = test_position->CreatePreviousPageStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, null_position);
@@ -2279,8 +2352,6 @@
 }
 
 TEST_F(AXPositionTest, CreatePositionAtPageBoundaryWithTreePosition) {
-  AXNodePosition::SetTree(nullptr);
-
   AXNodeData root_data, page_1_data, page_1_text_data, page_2_data,
       page_2_text_data, page_3_data, page_3_text_data;
   std::unique_ptr<AXTree> new_tree(CreateMultipageDocument(
@@ -2292,22 +2363,16 @@
   TestPositionType tree_position = AXNodePosition::CreateTreePosition(
       new_tree->data().tree_id, page_1_data.id, 0 /* child_index */);
   ASSERT_NE(nullptr, tree_position);
-  TestPositionType test_position = tree_position->CreateNextPageEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTreePosition());
-  EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
-  EXPECT_EQ(0, test_position->child_index());
+  ASSERT_TRUE(tree_position->IsTreePosition());
 
-  // StopIfAlreadyAtBoundary shouldn't move at all since it's at a boundary
-  test_position = tree_position->CreateNextPageEndPosition(
+  // StopIfAlreadyAtBoundary shouldn't move at all since it's at a boundary.
+  TestPositionType test_position = tree_position->CreateNextPageStartPosition(
       AXBoundaryBehavior::StopIfAlreadyAtBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
   EXPECT_EQ(page_1_data.id, test_position->anchor_id());
-  EXPECT_EQ(1, test_position->child_index());
+  EXPECT_EQ(0, test_position->child_index());
 
-  // Test CreateNextPageStartPosition until the end of document is reached
   test_position = tree_position->CreateNextPageStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2315,13 +2380,21 @@
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
 
-  test_position = test_position->CreateNextPageStartPosition(
-      AXBoundaryBehavior::CrossBoundary);
+  test_position = tree_position->CreateNextPageStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
-  EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
 
+  // Test CreateNextPageEndPosition until the end of document is reached.
+  test_position = tree_position->CreateNextPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->child_index());
+
   test_position = test_position->CreateNextPageEndPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2336,7 +2409,22 @@
   EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->child_index());
 
-  // Moving forward past the end should return a null position
+  // StopAtLastAnchorBoundary shouldn't move past the end of the document.
+  test_position = test_position->CreateNextPageStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->child_index());
+
+  test_position = test_position->CreateNextPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(page_3_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->child_index());
+
+  // Moving forward past the end should return a null position.
   TestPositionType null_position = test_position->CreateNextPageStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, null_position);
@@ -2347,16 +2435,23 @@
   EXPECT_NE(nullptr, null_position);
   EXPECT_TRUE(null_position->IsNullPosition());
 
-  // Now move backward through the document
-  test_position = test_position->CreatePreviousPageEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
+  // Now move backward through the document.
+  tree_position = test_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
+  EXPECT_NE(nullptr, tree_position);
+  EXPECT_TRUE(tree_position->IsTreePosition());
+  EXPECT_EQ(page_3_text_data.id, tree_position->anchor_id());
+  EXPECT_EQ(0, tree_position->child_index());
+
+  test_position = tree_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->child_index());
 
-  test_position = test_position->CreatePreviousPageEndPosition(
-      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
+  test_position = tree_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
@@ -2368,19 +2463,14 @@
   EXPECT_TRUE(test_position->IsTreePosition());
   EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
-  test_position = test_position->CreatePreviousPageStartPosition(
-      AXBoundaryBehavior::StopIfAlreadyAtBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTreePosition());
-  EXPECT_EQ(page_2_text_data.id, test_position->anchor_id());
-  EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
 
   test_position = test_position->CreatePreviousPageStartPosition(
-      AXBoundaryBehavior::CrossBoundary);
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
   EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
-  EXPECT_EQ(0, test_position->text_offset());
+  EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
+
   test_position = test_position->CreatePreviousPageStartPosition(
       AXBoundaryBehavior::StopIfAlreadyAtBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -2388,7 +2478,22 @@
   EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
 
-  // Moving before the start should return a null position
+  // StopAtLastAnchorBoundary shouldn't move past the start of the document.
+  test_position = test_position->CreatePreviousPageStartPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
+
+  test_position = test_position->CreatePreviousPageEndPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTreePosition());
+  EXPECT_EQ(page_1_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
+
+  // Moving before the start should return a null position.
   null_position = test_position->CreatePreviousPageStartPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, null_position);
@@ -3304,12 +3409,25 @@
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
   TestPositionType test_position = text_position->CreateNextCharacterPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
   EXPECT_EQ(5, test_position->text_offset());
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::StopAtAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(5, test_position->text_offset());
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(5, test_position->text_offset());
 
   text_position = AXNodePosition::CreateTextPosition(
       tree_.data().tree_id, inline_box1_.id, 5 /* text_offset */,
@@ -3318,42 +3436,84 @@
   ASSERT_TRUE(text_position->IsTextPosition());
 
   test_position = text_position->CreateNextCharacterPosition(
-      AXBoundaryBehavior::StopAtAnchorBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
-  EXPECT_EQ(6, test_position->text_offset());
-  test_position = test_position->CreateNextCharacterPosition(
-      AXBoundaryBehavior::StopAtAnchorBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
-  EXPECT_EQ(6, test_position->text_offset());
-  test_position = test_position->CreateNextCharacterPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(6, test_position->text_offset());
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::StopAtAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(6, test_position->text_offset());
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(6, test_position->text_offset());
+
+  text_position = AXNodePosition::CreateTextPosition(
+      tree_.data().tree_id, inline_box1_.id, 6 /* text_offset */,
+      ax::mojom::TextAffinity::kDownstream);
+  ASSERT_NE(nullptr, text_position);
+  ASSERT_TRUE(text_position->IsTextPosition());
+
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(line_break_.id, test_position->anchor_id());
+  EXPECT_EQ(1, test_position->text_offset());
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::StopAtAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(6, test_position->text_offset());
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(line_break_.id, test_position->anchor_id());
   EXPECT_EQ(1, test_position->text_offset());
 
-  test_position = test_position->CreateNextCharacterPosition(
+  text_position = AXNodePosition::CreateTextPosition(
+      tree_.data().tree_id, inline_box2_.id, 6 /* text_offset */,
+      ax::mojom::TextAffinity::kDownstream);
+  ASSERT_NE(nullptr, text_position);
+  ASSERT_TRUE(text_position->IsTextPosition());
+
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsNullPosition());
+  test_position = text_position->CreateNextCharacterPosition(
       AXBoundaryBehavior::StopAtAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(line_break_.id, test_position->anchor_id());
-  EXPECT_EQ(1, test_position->text_offset());
-  test_position = test_position->CreateNextCharacterPosition(
-      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(6, test_position->text_offset());
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
-  EXPECT_EQ(1, test_position->text_offset());
+  EXPECT_EQ(6, test_position->text_offset());
 
   text_position = AXNodePosition::CreateTextPosition(
       tree_.data().tree_id, check_box_.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
+  test_position = text_position->CreateNextCharacterPosition(
+      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(1, test_position->text_offset());
   test_position = text_position->CreateNextCharacterPosition(
       AXBoundaryBehavior::StopAtAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -3361,7 +3521,7 @@
   EXPECT_EQ(check_box_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
   test_position = text_position->CreateNextCharacterPosition(
-      AXBoundaryBehavior::CrossBoundary);
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
@@ -3372,6 +3532,7 @@
       ax::mojom::TextAffinity::kUpstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
   test_position = text_position->CreateNextCharacterPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -3386,6 +3547,7 @@
       ax::mojom::TextAffinity::kUpstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
   test_position = text_position->CreateNextCharacterPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -3402,6 +3564,7 @@
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
   TestPositionType test_position =
       text_position->CreatePreviousCharacterPosition(
           AXBoundaryBehavior::CrossBoundary);
@@ -3409,12 +3572,31 @@
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
   EXPECT_EQ(4, test_position->text_offset());
+  test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::StopAtAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(4, test_position->text_offset());
+  test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(4, test_position->text_offset());
 
   text_position = AXNodePosition::CreateTextPosition(
-      tree_.data().tree_id, inline_box2_.id, 0 /* text_offset */,
+      tree_.data().tree_id, inline_box2_.id, 1 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
+  test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
   test_position = text_position->CreatePreviousCharacterPosition(
       AXBoundaryBehavior::StopAtAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -3422,37 +3604,47 @@
   EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
   test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+
+  text_position = AXNodePosition::CreateTextPosition(
+      tree_.data().tree_id, inline_box2_.id, 0 /* text_offset */,
+      ax::mojom::TextAffinity::kDownstream);
+  ASSERT_NE(nullptr, text_position);
+  ASSERT_TRUE(text_position->IsTextPosition());
+
+  test_position = text_position->CreatePreviousCharacterPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(line_break_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
-
-  test_position = test_position->CreatePreviousCharacterPosition(
+  test_position = text_position->CreatePreviousCharacterPosition(
       AXBoundaryBehavior::StopAtAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+  test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(line_break_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
-  test_position = test_position->CreatePreviousCharacterPosition(
-      AXBoundaryBehavior::CrossBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
-  EXPECT_EQ(5, test_position->text_offset());
-
-  test_position = test_position->CreatePreviousCharacterPosition(
-      AXBoundaryBehavior::CrossBoundary);
-  EXPECT_NE(nullptr, test_position);
-  EXPECT_TRUE(test_position->IsTextPosition());
-  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
-  EXPECT_EQ(4, test_position->text_offset());
 
   text_position = AXNodePosition::CreateTextPosition(
       tree_.data().tree_id, inline_box1_.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
+  test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsNullPosition());
   test_position = text_position->CreatePreviousCharacterPosition(
       AXBoundaryBehavior::StopAtAnchorBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -3460,15 +3652,41 @@
   EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
   test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+
+  text_position = AXNodePosition::CreateTextPosition(
+      tree_.data().tree_id, check_box_.id, 0 /* text_offset */,
+      ax::mojom::TextAffinity::kDownstream);
+  ASSERT_NE(nullptr, text_position);
+  ASSERT_TRUE(text_position->IsTextPosition());
+
+  test_position = text_position->CreatePreviousCharacterPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsNullPosition());
+  test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::StopAtAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(check_box_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+  test_position = text_position->CreatePreviousCharacterPosition(
+      AXBoundaryBehavior::StopAtLastAnchorBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(check_box_.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
 
   text_position = AXNodePosition::CreateTextPosition(
       tree_.data().tree_id, text_field_.id, 1 /* text_offset */,
       ax::mojom::TextAffinity::kUpstream);
   ASSERT_NE(nullptr, text_position);
   ASSERT_TRUE(text_position->IsTextPosition());
+
   test_position = text_position->CreatePreviousCharacterPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_NE(nullptr, test_position);
@@ -3958,58 +4176,35 @@
 
   TestPositionType next_line_start_position =
       text_position->CreateNextLineStartPosition(
-          AXBoundaryBehavior::CrossBoundary);
+          AXBoundaryBehavior::StopAtLastAnchorBoundary);
   ASSERT_NE(nullptr, next_line_start_position);
   EXPECT_TRUE(next_line_start_position->IsTextPosition());
   EXPECT_EQ(inline_box3.id, next_line_start_position->anchor_id());
   EXPECT_EQ(5, next_line_start_position->text_offset());
 
-  next_line_start_position =
-      next_line_start_position->CreateNextLineStartPosition(
-          AXBoundaryBehavior::CrossBoundary);
-  ASSERT_NE(nullptr, next_line_start_position);
-  EXPECT_TRUE(next_line_start_position->IsNullPosition());
-
   TestPositionType previous_line_start_position =
       text_position->CreatePreviousLineStartPosition(
-          AXBoundaryBehavior::CrossBoundary);
+          AXBoundaryBehavior::StopAtLastAnchorBoundary);
   ASSERT_NE(nullptr, previous_line_start_position);
   EXPECT_TRUE(previous_line_start_position->IsTextPosition());
   EXPECT_EQ(inline_box1.id, previous_line_start_position->anchor_id());
   EXPECT_EQ(0, previous_line_start_position->text_offset());
 
-  previous_line_start_position =
-      previous_line_start_position->CreatePreviousLineStartPosition(
-          AXBoundaryBehavior::CrossBoundary);
-  ASSERT_NE(nullptr, previous_line_start_position);
-  EXPECT_TRUE(previous_line_start_position->IsNullPosition());
-
   TestPositionType next_line_end_position =
       text_position->CreateNextLineEndPosition(
-          AXBoundaryBehavior::CrossBoundary);
+          AXBoundaryBehavior::StopAtLastAnchorBoundary);
   ASSERT_NE(nullptr, next_line_end_position);
   EXPECT_TRUE(next_line_end_position->IsTextPosition());
   EXPECT_EQ(inline_box3.id, next_line_end_position->anchor_id());
   EXPECT_EQ(5, next_line_end_position->text_offset());
 
-  next_line_end_position = next_line_end_position->CreateNextLineEndPosition(
-      AXBoundaryBehavior::CrossBoundary);
-  ASSERT_NE(nullptr, next_line_end_position);
-  EXPECT_TRUE(next_line_end_position->IsNullPosition());
-
   TestPositionType previous_line_end_position =
       text_position->CreatePreviousLineEndPosition(
-          AXBoundaryBehavior::CrossBoundary);
+          AXBoundaryBehavior::StopAtLastAnchorBoundary);
   ASSERT_NE(nullptr, previous_line_end_position);
   EXPECT_TRUE(previous_line_end_position->IsTextPosition());
   EXPECT_EQ(inline_box1.id, previous_line_end_position->anchor_id());
   EXPECT_EQ(0, previous_line_end_position->text_offset());
-
-  previous_line_end_position =
-      previous_line_end_position->CreatePreviousLineEndPosition(
-          AXBoundaryBehavior::CrossBoundary);
-  ASSERT_NE(nullptr, previous_line_end_position);
-  EXPECT_TRUE(previous_line_end_position->IsNullPosition());
 }
 
 //
@@ -4279,9 +4474,7 @@
             "annotated_text=<L>ine 1"},
         CreatePositionAtTextBoundaryTestParam{
             AXTextBoundary::kLineStart, AXTextBoundaryDirection::kForwards,
-            AXBoundaryBehavior::CrossBoundary,
-            "TextPosition anchor_id=8 text_offset=6 affinity=downstream "
-            "annotated_text=Line 2<>"},
+            AXBoundaryBehavior::CrossBoundary, "NullPosition"},
         CreatePositionAtTextBoundaryTestParam{
             AXTextBoundary::kLineStartOrEnd,
             AXTextBoundaryDirection::kBackwards,
@@ -4394,8 +4587,6 @@
              "affinity=downstream annotated_text=Line 1\n<L>ine 2",
              "TextPosition anchor_id=1 text_offset=12 "
              "affinity=downstream annotated_text=Line 1\nLine <2>",
-             "TextPosition anchor_id=1 text_offset=13 "
-             "affinity=downstream annotated_text=Line 1\nLine 2<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -4410,8 +4601,6 @@
              "affinity=downstream annotated_text=Line 1\n<L>ine 2",
              "TextPosition anchor_id=4 text_offset=12 "
              "affinity=downstream annotated_text=Line 1\nLine <2>",
-             "TextPosition anchor_id=4 text_offset=13 "
-             "affinity=downstream annotated_text=Line 1\nLine 2<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -4426,8 +4615,6 @@
              "affinity=downstream annotated_text=<L>ine 2",
              "TextPosition anchor_id=9 text_offset=5 "
              "affinity=downstream annotated_text=Line <2>",
-             "TextPosition anchor_id=9 text_offset=6 "
-             "affinity=downstream annotated_text=Line 2<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -4438,8 +4625,6 @@
             4 /* text_offset */,
             {"TextPosition anchor_id=9 text_offset=5 "
              "affinity=downstream annotated_text=Line <2>",
-             "TextPosition anchor_id=9 text_offset=6 "
-             "affinity=downstream annotated_text=Line 2<>",
              "NullPosition"}}));
 
 INSTANTIATE_TEST_SUITE_P(
@@ -4549,6 +4734,75 @@
              "affinity=downstream annotated_text=Line <2>"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreateNextWordStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=1 text_offset=5 "
+             "affinity=downstream annotated_text=Line <1>\nLine 2",
+             "TextPosition anchor_id=1 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=12 "
+             "affinity=downstream annotated_text=Line 1\nLine <2>",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=4 text_offset=5 "
+             "affinity=downstream annotated_text=Line <1>\nLine 2",
+             "TextPosition anchor_id=4 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=4 text_offset=12 "
+             "affinity=downstream annotated_text=Line 1\nLine <2>",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            1 /* text_offset */,
+            {"TextPosition anchor_id=5 text_offset=5 "
+             "affinity=downstream annotated_text=Line <1>",
+             "TextPosition anchor_id=9 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 2",
+             "TextPosition anchor_id=9 text_offset=5 "
+             "affinity=downstream annotated_text=Line <2>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=5 "
+             "affinity=downstream annotated_text=Line <2>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreatePreviousWordStartPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -4718,6 +4972,79 @@
              "affinity=downstream annotated_text=<L>ine 2"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreatePreviousWordStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            13 /* text_offset */,
+            {"TextPosition anchor_id=1 text_offset=12 "
+             "affinity=downstream annotated_text=Line 1\nLine <2>",
+             "TextPosition anchor_id=1 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=5 "
+             "affinity=downstream annotated_text=Line <1>\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            13 /* text_offset */,
+            {"TextPosition anchor_id=4 text_offset=12 "
+             "affinity=downstream annotated_text=Line 1\nLine <2>",
+             "TextPosition anchor_id=4 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=4 text_offset=5 "
+             "affinity=downstream annotated_text=Line <1>\nLine 2",
+             "TextPosition anchor_id=4 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            5 /* text_offset */,
+            {"TextPosition anchor_id=5 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 2",
+             "TextPosition anchor_id=6 text_offset=5 "
+             "affinity=downstream annotated_text=Line <1>",
+             "TextPosition anchor_id=6 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreateNextWordEndPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -4891,6 +5218,73 @@
              "affinity=downstream annotated_text=Line< >2"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreateNextWordEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=1 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=1 text_offset=11 "
+             "affinity=downstream annotated_text=Line 1\nLine< >2",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=4 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >1\nLine 2",
+             "TextPosition anchor_id=4 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=4 text_offset=11 "
+             "affinity=downstream annotated_text=Line 1\nLine< >2",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            1 /* text_offset */,
+            {"TextPosition anchor_id=5 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >1",
+             "TextPosition anchor_id=5 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<>",
+             "TextPosition anchor_id=9 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >2",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreatePreviousWordEndPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -4907,8 +5301,6 @@
              "affinity=downstream annotated_text=Line 1<\n>Line 2",
              "TextPosition anchor_id=1 text_offset=4 "
              "affinity=downstream annotated_text=Line< >1\nLine 2",
-             "TextPosition anchor_id=1 text_offset=0 "
-             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -4923,8 +5315,6 @@
              "affinity=downstream annotated_text=Line 1<\n>Line 2",
              "TextPosition anchor_id=4 text_offset=4 "
              "affinity=downstream annotated_text=Line< >1\nLine 2",
-             "TextPosition anchor_id=4 text_offset=0 "
-             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -4935,8 +5325,6 @@
             5 /* text_offset */,
             {"TextPosition anchor_id=5 text_offset=4 "
              "affinity=downstream annotated_text=Line< >1",
-             "TextPosition anchor_id=5 text_offset=0 "
-             "affinity=downstream annotated_text=<L>ine 1",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -4949,8 +5337,6 @@
              "affinity=downstream annotated_text=Line 1<>",
              "TextPosition anchor_id=6 text_offset=4 "
              "affinity=downstream annotated_text=Line< >1",
-             "TextPosition anchor_id=6 text_offset=0 "
-             "affinity=downstream annotated_text=<L>ine 1",
              "NullPosition"}}));
 
 INSTANTIATE_TEST_SUITE_P(
@@ -5054,6 +5440,73 @@
              "affinity=downstream annotated_text=Line< >2"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreatePreviousWordEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            13 /* text_offset at end of root. */,
+            {"TextPosition anchor_id=1 text_offset=11 "
+             "affinity=downstream annotated_text=Line 1\nLine< >2",
+             "TextPosition anchor_id=1 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=1 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            13 /* text_offset at end of text field */,
+            {"TextPosition anchor_id=4 text_offset=11 "
+             "affinity=downstream annotated_text=Line 1\nLine< >2",
+             "TextPosition anchor_id=4 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=4 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >1\nLine 2",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            5 /* text_offset */,
+            {"TextPosition anchor_id=5 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousWordEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=6 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<>",
+             "TextPosition anchor_id=6 text_offset=4 "
+             "affinity=downstream annotated_text=Line< >1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreateNextLineStartPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -5066,8 +5519,6 @@
             0 /* text_offset */,
             {"TextPosition anchor_id=1 text_offset=7 "
              "affinity=downstream annotated_text=Line 1\n<L>ine 2",
-             "TextPosition anchor_id=1 text_offset=13 "
-             "affinity=downstream annotated_text=Line 1\nLine 2<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -5078,8 +5529,6 @@
             0 /* text_offset */,
             {"TextPosition anchor_id=4 text_offset=7 "
              "affinity=downstream annotated_text=Line 1\n<L>ine 2",
-             "TextPosition anchor_id=4 text_offset=13 "
-             "affinity=downstream annotated_text=Line 1\nLine 2<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -5090,8 +5539,6 @@
             1 /* text_offset */,
             {"TextPosition anchor_id=9 text_offset=0 "
              "affinity=downstream annotated_text=<L>ine 2",
-             "TextPosition anchor_id=9 text_offset=6 "
-             "affinity=downstream annotated_text=Line 2<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -5100,9 +5547,7 @@
             }),
             INLINE_BOX2_ID,
             4 /* text_offset */,
-            {"TextPosition anchor_id=9 text_offset=6 "
-             "affinity=downstream annotated_text=Line 2<>",
-             "NullPosition"}}));
+            {"NullPosition"}}));
 
 INSTANTIATE_TEST_SUITE_P(
     CreateNextLineStartPositionWithBoundaryBehaviorStopAtAnchorBoundary,
@@ -5193,10 +5638,62 @@
             }),
             INLINE_BOX2_ID,
             4 /* text_offset */,
-            {"TextPosition anchor_id=9 text_offset=6 affinity=downstream "
-             "annotated_text=Line 2<>",
-             "TextPosition anchor_id=9 text_offset=6 affinity=downstream "
-             "annotated_text=Line 2<>"}}));
+            {"NullPosition"}}));
+
+INSTANTIATE_TEST_SUITE_P(
+    CreateNextLineStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=1 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=4 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            1 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 2",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}}));
 
 INSTANTIATE_TEST_SUITE_P(
     CreatePreviousLineStartPositionWithBoundaryBehaviorCrossBoundary,
@@ -5352,6 +5849,69 @@
              "affinity=downstream annotated_text=<L>ine 2"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreatePreviousLineStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            13 /* text_offset at the end of root. */,
+            {"TextPosition anchor_id=1 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            13 /* text_offset at end of text field */,
+            {"TextPosition anchor_id=4 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=4 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            5 /* text_offset */,
+            {"TextPosition anchor_id=5 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 2",
+             "TextPosition anchor_id=6 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreateNextLineEndPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -5505,6 +6065,61 @@
              "affinity=downstream annotated_text=Line 2<>"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreateNextLineEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=1 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=4 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            1 /* text_offset */,
+            {"TextPosition anchor_id=5 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreatePreviousLineEndPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -5517,8 +6132,6 @@
             13 /* text_offset at end of root. */,
             {"TextPosition anchor_id=1 text_offset=6 "
              "affinity=downstream annotated_text=Line 1<\n>Line 2",
-             "TextPosition anchor_id=1 text_offset=0 "
-             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -5529,8 +6142,6 @@
             13 /* text_offset at end of text field */,
             {"TextPosition anchor_id=4 text_offset=6 "
              "affinity=downstream annotated_text=Line 1<\n>Line 2",
-             "TextPosition anchor_id=2 text_offset=0 "
-             "affinity=downstream annotated_text=<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -5539,9 +6150,7 @@
             }),
             ROOT_ID,
             5 /* text_offset on the last character of "Line 1". */,
-            {"TextPosition anchor_id=1 text_offset=0 "
-             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
-             "NullPosition"}},
+            {"NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
               return position->CreatePreviousLineEndPosition(
@@ -5549,9 +6158,7 @@
             }),
             TEXT_FIELD_ID,
             5 /* text_offset on the last character of "Line 1". */,
-            {"TextPosition anchor_id=2 text_offset=0 "
-             "affinity=downstream annotated_text=<>",
-             "NullPosition"}},
+            {"NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
               return position->CreatePreviousLineEndPosition(
@@ -5561,8 +6168,6 @@
             4 /* text_offset */,
             {"TextPosition anchor_id=6 text_offset=6 "
              "affinity=downstream annotated_text=Line 1<>",
-             "TextPosition anchor_id=2 text_offset=0 "
-             "affinity=downstream annotated_text=<>",
              "NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
@@ -5573,8 +6178,6 @@
             0 /* text_offset */,
             {"TextPosition anchor_id=6 text_offset=6 "
              "affinity=downstream annotated_text=Line 1<>",
-             "TextPosition anchor_id=2 text_offset=0 "
-             "affinity=downstream annotated_text=<>",
              "NullPosition"}}));
 
 INSTANTIATE_TEST_SUITE_P(
@@ -5685,10 +6288,7 @@
             }),
             INLINE_BOX1_ID,
             2 /* text_offset */,
-            {"TextPosition anchor_id=6 text_offset=0 "
-             "affinity=downstream annotated_text=<L>ine 1",
-             "TextPosition anchor_id=6 text_offset=0 "
-             "affinity=downstream annotated_text=<L>ine 1"}},
+            {"NullPosition"}},
         TextNavigationTestParam{
             base::BindRepeating([](const TestPositionType& position) {
               return position->CreatePreviousLineEndPosition(
@@ -5713,6 +6313,85 @@
              "affinity=downstream annotated_text=Line 1<>"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreatePreviousLineEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            13 /* text_offset at end of root. */,
+            {"TextPosition anchor_id=1 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            13 /* text_offset at end of text field */,
+            {"TextPosition anchor_id=4 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<\n>Line 2",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            5 /* text_offset on the last character of "Line 1". */,
+            {"TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            5 /* text_offset on the last character of "Line 1". */,
+            {"TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=6 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousLineEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=6 text_offset=6 "
+             "affinity=downstream annotated_text=Line 1<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreateNextParagraphStartPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -5844,6 +6523,61 @@
             {"NullPosition"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreateNextParagraphStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=1 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=4 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            1 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 2",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreatePreviousParagraphStartPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -5997,6 +6731,69 @@
              "affinity=downstream annotated_text=<L>ine 2"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreatePreviousParagraphStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            13 /* text_offset at the end of root. */,
+            {"TextPosition anchor_id=1 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            13 /* text_offset at end of text field */,
+            {"TextPosition anchor_id=4 text_offset=7 "
+             "affinity=downstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=4 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            5 /* text_offset */,
+            {"TextPosition anchor_id=5 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphStartPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 2",
+             "TextPosition anchor_id=6 text_offset=0 "
+             "affinity=downstream annotated_text=<L>ine 1",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreateNextParagraphEndPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -6172,6 +6969,61 @@
              "affinity=downstream annotated_text=\n<>"}}));
 
 INSTANTIATE_TEST_SUITE_P(
+    CreateNextParagraphEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=1 text_offset=7 "
+             "affinity=upstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=1 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=4 text_offset=7 "
+             "affinity=upstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>",
+             "TextPosition anchor_id=4 text_offset=13 "
+             "affinity=downstream annotated_text=Line 1\nLine 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            STATIC_TEXT1_ID,
+            1 /* text_offset */,
+            {"TextPosition anchor_id=7 text_offset=1 "
+             "affinity=downstream annotated_text=\n<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreateNextParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>",
+             "TextPosition anchor_id=9 text_offset=6 "
+             "affinity=downstream annotated_text=Line 2<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
     CreatePreviousParagraphEndPositionWithBoundaryBehaviorCrossBoundary,
     AXPositionTextNavigationTestWithParam,
     testing::Values(
@@ -6398,4 +7250,86 @@
              "affinity=downstream annotated_text=\n<>",
              "TextPosition anchor_id=7 text_offset=1 "
              "affinity=downstream annotated_text=\n<>"}}));
+
+INSTANTIATE_TEST_SUITE_P(
+    CreatePreviousParagraphEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary,
+    AXPositionTextNavigationTestWithParam,
+    testing::Values(
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            13 /* text_offset at end of root. */,
+            {"TextPosition anchor_id=1 text_offset=7 "
+             "affinity=upstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            13 /* text_offset at end of text field */,
+            {"TextPosition anchor_id=4 text_offset=7 "
+             "affinity=upstream annotated_text=Line 1\n<L>ine 2",
+             "TextPosition anchor_id=3 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             // The following text position is equal to the previous one.
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            ROOT_ID,
+            5 /* text_offset on the last character of "Line 1". */,
+            {"TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2",
+             "TextPosition anchor_id=1 text_offset=0 "
+             "affinity=upstream annotated_text=<L>ine 1\nLine 2"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            TEXT_FIELD_ID,
+            5 /* text_offset on the last character of "Line 1". */,
+            {"TextPosition anchor_id=3 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             // The following text position is equal to the previous one.
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            4 /* text_offset */,
+            {"TextPosition anchor_id=7 text_offset=1 "
+             "affinity=downstream annotated_text=\n<>",
+             "TextPosition anchor_id=3 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             // The following text position is equal to the previous one.
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}},
+        TextNavigationTestParam{
+            base::BindRepeating([](const TestPositionType& position) {
+              return position->CreatePreviousParagraphEndPosition(
+                  AXBoundaryBehavior::StopAtLastAnchorBoundary);
+            }),
+            INLINE_BOX2_ID,
+            0 /* text_offset */,
+            {"TextPosition anchor_id=3 text_offset=0 "
+             "affinity=downstream annotated_text=<>",
+             // The following text position is equal to the previous one.
+             "TextPosition anchor_id=2 text_offset=0 "
+             "affinity=downstream annotated_text=<>"}}));
+
 }  // namespace ui
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h
index d45953c..0b2945b6 100644
--- a/ui/accessibility/ax_position.h
+++ b/ui/accessibility/ax_position.h
@@ -44,7 +44,8 @@
 enum class AXBoundaryBehavior {
   CrossBoundary,
   StopAtAnchorBoundary,
-  StopIfAlreadyAtBoundary
+  StopIfAlreadyAtBoundary,
+  StopAtLastAnchorBoundary
 };
 
 // Specifies how AXPosition::ExpandToEnclosingTextBoundary behaves.
@@ -296,7 +297,6 @@
   bool AtStartOfAnchor() const {
     if (!GetAnchor())
       return false;
-
     switch (kind_) {
       case AXPositionKind::NULL_POSITION:
         return false;
@@ -309,14 +309,11 @@
       case AXPositionKind::TEXT_POSITION:
         return text_offset_ == 0;
     }
-
-    return false;
   }
 
   bool AtEndOfAnchor() const {
     if (!GetAnchor())
       return false;
-
     switch (kind_) {
       case AXPositionKind::NULL_POSITION:
         return false;
@@ -325,8 +322,6 @@
       case AXPositionKind::TEXT_POSITION:
         return text_offset_ == MaxTextOffset();
     }
-
-    return false;
   }
 
   bool AtStartOfWord() const {
@@ -344,7 +339,6 @@
             word_starts, static_cast<int32_t>(text_position->text_offset_));
       }
     }
-    return false;
   }
 
   bool AtEndOfWord() const {
@@ -362,7 +356,6 @@
             word_ends, static_cast<int32_t>(text_position->text_offset_));
       }
     }
-    return false;
   }
 
   bool AtStartOfLine() const {
@@ -390,7 +383,6 @@
                    INVALID_ANCHOR_ID &&
                text_position->AtStartOfAnchor();
     }
-    return false;
   }
 
   bool AtEndOfLine() const {
@@ -407,9 +399,8 @@
         // a non-empty text position in which case the end of line iterators
         // must move to the line end of the non-empty content. Specified next
         // line IDs are ignored.
-        if (!text_position->MaxTextOffset()) {
+        if (!text_position->MaxTextOffset())
           return false;
-        }
 
         // If affinity has been used to specify whether the caret is at the end
         // of a line or at the start of the next one, this should have been
@@ -423,24 +414,17 @@
         // of white space that is on a line by itself as being at the end of
         // that line. Note that white space that ends a line of text should be
         // connected to that text with a "previous on line ID".
-        if (GetNextOnLineID(text_position->anchor_id_) == INVALID_ANCHOR_ID) {
-          if (text_position->IsInWhiteSpace()) {
-            if (GetPreviousOnLineID(text_position->anchor_id_) ==
-                INVALID_ANCHOR_ID) {
-              return text_position->AtEndOfAnchor();
-            } else {
-              return text_position->AtStartOfAnchor();
-            }
-          }
-
-          return text_position->AtEndOfAnchor();
-        }
+        if (GetNextOnLineID(text_position->anchor_id_) == INVALID_ANCHOR_ID)
+          return (!text_position->IsInWhiteSpace() ||
+                  GetPreviousOnLineID(text_position->anchor_id_) ==
+                      INVALID_ANCHOR_ID)
+                     ? text_position->AtEndOfAnchor()
+                     : text_position->AtStartOfAnchor();
 
         // The current anchor might be followed by a soft line break.
-        if (text_position->AtEndOfAnchor())
-          return text_position->CreateNextLeafTextPosition()->AtEndOfLine();
+        return text_position->AtEndOfAnchor() &&
+               text_position->CreateNextLeafTextPosition()->AtEndOfLine();
     }
-    return false;
   }
 
   // |AtStartOfParagraph| is asymmetric from |AtEndOfParagraph| because of
@@ -472,10 +456,9 @@
 
         // 2. The current position is not whitespace only, unless it is also
         //    the first leaf text position within the document.
-        if (text_position->IsInWhiteSpace()) {
+        if (text_position->IsInWhiteSpace())
           return text_position->CreatePreviousLeafTextPosition()
               ->IsNullPosition();
-        }
 
         // 3. Either (a) the current leaf text position is the first leaf text
         //    position in the document, or (b) there are no line breaking
@@ -507,7 +490,6 @@
         return previous_text_position->IsNullPosition();
       }
     }
-    return false;
   }
 
   // |AtEndOfParagraph| is asymmetric from |AtStartOfParagraph| because of
@@ -589,7 +571,6 @@
             ->AtStartOfParagraph();
       }
     }
-    return false;
   }
 
   bool AtStartOfPage() const {
@@ -616,7 +597,6 @@
         return previous_text_position->IsNullPosition();
       }
     }
-    return false;
   }
 
   bool AtEndOfPage() const {
@@ -642,7 +622,6 @@
         return next_text_position->IsNullPosition();
       }
     }
-    return false;
   }
 
   bool AtStartOfFormat() const {
@@ -697,8 +676,7 @@
   // Also, this method uses position instead of tree logic to traverse the tree,
   // because positions can handle moving across multiple trees, while trees
   // cannot.
-  AXPositionInstance LowestCommonAncestor(
-      const AXPosition<AXPositionType, AXNodeType>& second) const {
+  AXPositionInstance LowestCommonAncestor(const AXPosition& second) const {
     if (IsNullPosition() || second.IsNullPosition())
       return CreateNullPosition();
     if (GetAnchor() == second.GetAnchor())
@@ -975,6 +953,42 @@
         }
         break;
 
+      case AXTextBoundary::kPageEnd:
+        switch (direction) {
+          case AXTextBoundaryDirection::kBackwards:
+            resulting_position =
+                CreatePreviousPageEndPosition(boundary_behavior);
+            break;
+          case AXTextBoundaryDirection::kForwards:
+            resulting_position = CreateNextPageEndPosition(boundary_behavior);
+            break;
+        }
+        break;
+
+      case AXTextBoundary::kPageStart:
+        switch (direction) {
+          case AXTextBoundaryDirection::kBackwards:
+            resulting_position =
+                CreatePreviousPageStartPosition(boundary_behavior);
+            break;
+          case AXTextBoundaryDirection::kForwards:
+            resulting_position = CreateNextPageStartPosition(boundary_behavior);
+            break;
+        }
+        break;
+
+      case AXTextBoundary::kPageStartOrEnd:
+        switch (direction) {
+          case AXTextBoundaryDirection::kBackwards:
+            resulting_position =
+                CreatePreviousPageStartPosition(boundary_behavior);
+            break;
+          case AXTextBoundaryDirection::kForwards:
+            resulting_position = CreateNextPageEndPosition(boundary_behavior);
+            break;
+        }
+        break;
+
       case AXTextBoundary::kParagraphEnd:
         switch (direction) {
           case AXTextBoundaryDirection::kBackwards:
@@ -1308,9 +1322,13 @@
 
     const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsPositionBeforeCharacter();
+
     // There is no next character position.
-    if (text_position->IsNullPosition())
+    if (text_position->IsNullPosition()) {
+      if (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary)
+        text_position = Clone();
       return text_position;
+    }
 
     ++text_position->text_offset_;
     DCHECK_LE(text_position->text_offset_, text_position->MaxTextOffset());
@@ -1334,9 +1352,13 @@
 
     const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsPositionAfterCharacter();
+
     // There is no previous character position.
-    if (text_position->IsNullPosition())
+    if (text_position->IsNullPosition()) {
+      if (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary)
+        text_position = Clone();
       return text_position;
+    }
 
     --text_position->text_offset_;
     DCHECK_GE(text_position->text_offset_, 0);
@@ -1351,10 +1373,11 @@
 
   AXPositionInstance CreateNextWordStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
+    const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsLeafTextPosition();
     if (text_position->IsNullPosition())
       return text_position;
+
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
         text_position->AtStartOfWord()) {
       AXPositionInstance clone = Clone();
@@ -1368,18 +1391,34 @@
                          static_cast<int32_t>(text_position->text_offset_));
     do {
       if (iterator == word_starts.end()) {
+        bool at_last_anchor_boundary = false;
+
         // Ignore any nodes with no text or no word boundaries.
         do {
-          text_position = text_position->CreateNextLeafTextPosition();
-          if (text_position->IsNullPosition()) {
-            if (AtEndOfAnchor() &&
-                boundary_behavior == AXBoundaryBehavior::CrossBoundary)
-              return text_position;
-            return CreatePositionAtEndOfAnchor();
+          AXPositionInstance next_position =
+              text_position->CreateNextLeafTextPosition();
+
+          if (next_position->IsNullPosition()) {
+            if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
+              return CreatePositionAtEndOfAnchor();
+            if (boundary_behavior ==
+                AXBoundaryBehavior::StopAtLastAnchorBoundary) {
+              // We can't simply return the following position; after breaking
+              // both loops we'll try to do some adjustments to text_position.
+              text_position = text_position->CreatePositionAtEndOfAnchor();
+              at_last_anchor_boundary = true;
+              break;
+            }
+            return next_position;
           }
+
+          text_position = std::move(next_position);
         } while (!text_position->MaxTextOffset() ||
                  text_position->GetWordStartOffsets().empty());
 
+        if (at_last_anchor_boundary)
+          break;
+
         word_starts = text_position->GetWordStartOffsets();
         DCHECK(!word_starts.empty());
         iterator =
@@ -1415,8 +1454,11 @@
 
   AXPositionInstance CreatePreviousWordStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
+    const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsLeafTextPosition();
+    if (text_position->IsNullPosition())
+      return text_position;
+
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
         text_position->AtStartOfWord()) {
       AXPositionInstance clone = Clone();
@@ -1430,18 +1472,35 @@
                          static_cast<int32_t>(text_position->text_offset_));
     do {
       if (word_starts.empty() || iterator == word_starts.begin()) {
+        bool at_last_anchor_boundary = false;
+
         // Ignore any nodes with no text or no word boundaries.
         do {
-          text_position = text_position->CreatePreviousLeafTextPosition()
-                              ->CreatePositionAtEndOfAnchor();
-          if (text_position->IsNullPosition()) {
+          AXPositionInstance previous_position =
+              text_position->CreatePreviousLeafTextPosition()
+                  ->CreatePositionAtEndOfAnchor();
+
+          if (previous_position->IsNullPosition()) {
             if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
               return CreatePositionAtStartOfAnchor();
-            return text_position;
+            if (boundary_behavior ==
+                AXBoundaryBehavior::StopAtLastAnchorBoundary) {
+              // We can't simply return the following position; after breaking
+              // both loops we'll try to do some adjustments to text_position.
+              text_position = text_position->CreatePositionAtStartOfAnchor();
+              at_last_anchor_boundary = true;
+              break;
+            }
+            return previous_position;
           }
+
+          text_position = std::move(previous_position);
         } while (!text_position->MaxTextOffset() ||
                  text_position->GetWordStartOffsets().empty());
 
+        if (at_last_anchor_boundary)
+          break;
+
         word_starts = text_position->GetWordStartOffsets();
         DCHECK(!word_starts.empty());
         iterator =
@@ -1478,8 +1537,11 @@
   // Word end positions are one past the last character of the word.
   AXPositionInstance CreateNextWordEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
+    const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsLeafTextPosition();
+    if (text_position->IsNullPosition())
+      return text_position;
+
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
         text_position->AtEndOfWord()) {
       AXPositionInstance clone = Clone();
@@ -1499,17 +1561,34 @@
                          static_cast<int32_t>(text_position->text_offset_));
     do {
       if (iterator == word_ends.end()) {
+        bool at_last_anchor_boundary = false;
+
         // Ignore any nodes with no text or no word boundaries.
         do {
-          text_position = text_position->CreateNextLeafTextPosition();
-          if (text_position->IsNullPosition()) {
+          AXPositionInstance next_position =
+              text_position->CreateNextLeafTextPosition();
+
+          if (next_position->IsNullPosition()) {
             if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
               return CreatePositionAtEndOfAnchor();
-            return text_position;
+            if (boundary_behavior ==
+                AXBoundaryBehavior::StopAtLastAnchorBoundary) {
+              // We can't simply return the following position; after breaking
+              // both loops we'll try to do some adjustments to text_position.
+              text_position = text_position->CreatePositionAtEndOfAnchor();
+              at_last_anchor_boundary = true;
+              break;
+            }
+            return next_position;
           }
+
+          text_position = std::move(next_position);
         } while (!text_position->MaxTextOffset() ||
                  text_position->GetWordEndOffsets().empty());
 
+        if (at_last_anchor_boundary)
+          break;
+
         word_ends = text_position->GetWordEndOffsets();
         DCHECK(!word_ends.empty());
         iterator =
@@ -1546,8 +1625,11 @@
   // Word end positions are one past the last character of the word.
   AXPositionInstance CreatePreviousWordEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
+    const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsLeafTextPosition();
+    if (text_position->IsNullPosition())
+      return text_position;
+
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
         text_position->AtEndOfWord()) {
       AXPositionInstance clone = Clone();
@@ -1567,19 +1649,35 @@
                          static_cast<int32_t>(text_position->text_offset_));
     do {
       if (word_ends.empty() || iterator == word_ends.begin()) {
+        bool at_last_anchor_boundary = false;
+
         // Ignore any nodes with no text or no word boundaries.
         do {
-          text_position = text_position->CreatePreviousLeafTextPosition()
-                              ->CreatePositionAtEndOfAnchor();
-          if (text_position->IsNullPosition()) {
-            if (AtStartOfAnchor() &&
-                boundary_behavior == AXBoundaryBehavior::CrossBoundary)
-              return text_position;
-            return CreatePositionAtStartOfAnchor();
+          AXPositionInstance previous_position =
+              text_position->CreatePreviousLeafTextPosition()
+                  ->CreatePositionAtEndOfAnchor();
+
+          if (previous_position->IsNullPosition()) {
+            if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
+              return CreatePositionAtStartOfAnchor();
+            if (boundary_behavior ==
+                AXBoundaryBehavior::StopAtLastAnchorBoundary) {
+              // We can't simply return the following position; after breaking
+              // both loops we'll try to do some adjustments to text_position.
+              text_position = text_position->CreatePositionAtStartOfAnchor();
+              at_last_anchor_boundary = true;
+              break;
+            }
+            return previous_position;
           }
+
+          text_position = std::move(previous_position);
         } while (!text_position->MaxTextOffset() ||
                  text_position->GetWordStartOffsets().empty());
 
+        if (at_last_anchor_boundary)
+          break;
+
         word_ends = text_position->GetWordEndOffsets();
         DCHECK(!word_ends.empty());
         iterator =
@@ -1614,223 +1712,38 @@
 
   AXPositionInstance CreateNextLineStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
-    AXPositionInstance text_position = AsLeafTextPosition();
-    if (text_position->IsNullPosition())
-      return text_position;
-
-    if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        text_position->AtStartOfLine()) {
-      AXPositionInstance clone = Clone();
-      clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-      return clone;
-    }
-
-    do {
-      AXPositionInstance next_position =
-          text_position->CreateNextLeafTextPosition();
-
-      if (next_position->IsNullPosition()) {
-        if (boundary_behavior == AXBoundaryBehavior::CrossBoundary) {
-          if (AtEndOfAnchor())
-            return next_position;
-          // We can't simply return the following position; break and after this
-          // loop we'll try to do some adjustments to the result position.
-          text_position = text_position->CreatePositionAtEndOfAnchor();
-          break;
-        }
-        return CreatePositionAtEndOfAnchor();
-      }
-
-      // Continue searching for the next line start until the next logical text
-      // position is reached.
-      text_position = std::move(next_position);
-    } while (
-        !text_position->AtStartOfLine() ||
-        (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-         *this == *text_position));
-
-    // If the line boundary is in the same subtree, return a position rooted at
-    // this position's anchor. This is necessary because we don't want to return
-    // a position that might be in the shadow DOM when this position is not.
-    AXPositionInstance common_ancestor =
-        text_position->LowestCommonAncestor(*this);
-    if (GetAnchor() == common_ancestor->GetAnchor()) {
-      text_position = std::move(common_ancestor);
-    } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtEndOfAnchor();
-    }
-
-    if (was_tree_position)
-      text_position = text_position->AsTreePosition();
-    return text_position;
+    return CreateBoundaryStartPosition(
+        boundary_behavior, AXTextBoundaryDirection::kForwards,
+        base::BindRepeating(&AtStartOfLinePredicate),
+        base::BindRepeating(&AtEndOfLinePredicate));
   }
 
   AXPositionInstance CreatePreviousLineStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
-    AXPositionInstance text_position = AsLeafTextPosition();
-    if (text_position->IsNullPosition())
-      return text_position;
-
-    if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        text_position->AtStartOfLine()) {
-      AXPositionInstance clone = Clone();
-      clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-      return clone;
-    }
-
-    do {
-      text_position = text_position->AtStartOfAnchor()
-                          ? text_position->CreatePreviousLeafTextPosition()
-                          : text_position->CreatePositionAtStartOfAnchor();
-
-      if (text_position->IsNullPosition()) {
-        if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
-          return CreatePositionAtStartOfAnchor();
-        return text_position;
-      }
-
-      // Continue searching for the previous line start until the next logical
-      // text position is reached.
-    } while (
-        !text_position->AtStartOfLine() ||
-        (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-         *this == *text_position));
-
-    // If the line boundary is in the same subtree, return a position rooted at
-    // this position's anchor. This is necessary because we don't want to return
-    // a position that might be in the shadow DOM when this position is not.
-    AXPositionInstance common_ancestor =
-        text_position->LowestCommonAncestor(*this);
-    if (GetAnchor() == common_ancestor->GetAnchor()) {
-      text_position = std::move(common_ancestor);
-    } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtStartOfAnchor();
-    }
-
-    if (was_tree_position)
-      text_position = text_position->AsTreePosition();
-    return text_position;
+    return CreateBoundaryStartPosition(
+        boundary_behavior, AXTextBoundaryDirection::kBackwards,
+        base::BindRepeating(&AtStartOfLinePredicate),
+        base::BindRepeating(&AtEndOfLinePredicate));
   }
 
   // Line end positions are one past the last character of the line, excluding
   // any white space or newline characters that separate the lines.
   AXPositionInstance CreateNextLineEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
-    AXPositionInstance text_position = AsLeafTextPosition();
-    if (text_position->IsNullPosition())
-      return text_position;
-
-    if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        text_position->AtEndOfLine()) {
-      AXPositionInstance clone = Clone();
-      // If there is no ambiguity as to whether the position is at the end of
-      // the current line or the start of the next line, affinity should be
-      // reset in order to get consistent output from this function regardless
-      // of input affinity.
-      clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-      if (clone->AtStartOfLine())
-        clone->affinity_ = ax::mojom::TextAffinity::kUpstream;
-      return clone;
-    }
-
-    do {
-      if (text_position->AtEndOfAnchor())
-        text_position = text_position->CreateNextLeafTextPosition();
-      text_position = text_position->CreatePositionAtEndOfAnchor();
-
-      if (text_position->IsNullPosition()) {
-        if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
-          return CreatePositionAtEndOfAnchor();
-        return text_position;
-      }
-
-      // Continue searching for the next line end until the next logical text
-      // position is reached.
-    } while (
-        !text_position->AtEndOfLine() ||
-        (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-         *this == *text_position));
-
-    // If the line boundary is in the same subtree, return a position rooted at
-    // this position's anchor. This is necessary because we don't want to return
-    // a position that might be in the shadow DOM when this position is not.
-    AXPositionInstance common_ancestor =
-        text_position->LowestCommonAncestor(*this);
-    if (GetAnchor() == common_ancestor->GetAnchor()) {
-      text_position = std::move(common_ancestor);
-    } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtEndOfAnchor();
-    }
-
-    if (was_tree_position)
-      text_position = text_position->AsTreePosition();
-    return text_position;
+    return CreateBoundaryEndPosition(
+        boundary_behavior, AXTextBoundaryDirection::kForwards,
+        base::BindRepeating(&AtStartOfLinePredicate),
+        base::BindRepeating(&AtEndOfLinePredicate));
   }
 
   // Line end positions are one past the last character of the line, excluding
   // any white space or newline characters separating the lines.
   AXPositionInstance CreatePreviousLineEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    bool was_tree_position = IsTreePosition();
-    AXPositionInstance text_position = AsLeafTextPosition();
-    if (text_position->IsNullPosition())
-      return text_position;
-
-    if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        text_position->AtEndOfLine()) {
-      AXPositionInstance clone = Clone();
-      // If there is no ambiguity as to whether the position is at the end of
-      // the current line or the start of the next line, affinity should be
-      // reset in order to get consistent output from this function regardless
-      // of input affinity.
-      clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-      if (clone->AtStartOfLine())
-        clone->affinity_ = ax::mojom::TextAffinity::kUpstream;
-      return clone;
-    }
-
-    do {
-      AXPositionInstance previous_position =
-          text_position->CreatePreviousLeafTextPosition()
-              ->CreatePositionAtEndOfAnchor();
-
-      if (previous_position->IsNullPosition()) {
-        if (boundary_behavior == AXBoundaryBehavior::CrossBoundary) {
-          if (AtStartOfAnchor())
-            return previous_position;
-          // We can't simply return the following position; break and after this
-          // loop we'll try to do some adjustments to the result position.
-          text_position = text_position->CreatePositionAtStartOfAnchor();
-          break;
-        }
-        return CreatePositionAtStartOfAnchor();
-      }
-
-      // Continue searching for the previous line end until the next logical
-      // text position is reached.
-      text_position = std::move(previous_position);
-    } while (
-        !text_position->AtEndOfLine() ||
-        (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-         *this == *text_position));
-
-    // If the line boundary is in the same subtree, return a position rooted at
-    // this position's anchor. This is necessary because we don't want to return
-    // a position that might be in the shadow DOM when this position is not.
-    AXPositionInstance common_ancestor =
-        text_position->LowestCommonAncestor(*this);
-    if (GetAnchor() == common_ancestor->GetAnchor()) {
-      text_position = std::move(common_ancestor);
-    } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtStartOfAnchor();
-    }
-
-    if (was_tree_position)
-      text_position = text_position->AsTreePosition();
-    return text_position;
+    return CreateBoundaryEndPosition(
+        boundary_behavior, AXTextBoundaryDirection::kBackwards,
+        base::BindRepeating(&AtStartOfLinePredicate),
+        base::BindRepeating(&AtEndOfLinePredicate));
   }
 
   AXPositionInstance CreatePreviousFormatStartPosition(
@@ -1841,7 +1754,9 @@
     // AtStartOfFormat() always returns true if we are at the first iterable
     // position, i.e. CreatePreviousLeafTreePosition()->IsNullPosition().
     if (AtStartOfFormat()) {
-      if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary) {
+      if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary ||
+          (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary &&
+           CreatePreviousLeafTreePosition()->IsNullPosition())) {
         AXPositionInstance clone = Clone();
         // In order to make equality checks simpler, affinity should be reset so
         // that we would get consistent output from this function regardless of
@@ -1849,7 +1764,6 @@
         clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
         return clone;
       } else if (boundary_behavior == AXBoundaryBehavior::CrossBoundary &&
-                 AtStartOfAnchor() &&
                  CreatePreviousLeafTreePosition()->IsNullPosition()) {
         // If we're at a format boundary and there are no more text positions
         // to traverse, return a null position for cross-boundary moves.
@@ -1857,7 +1771,7 @@
       }
     }
 
-    bool was_text_position = IsTextPosition();
+    const bool was_text_position = IsTextPosition();
     AXPositionInstance tree_position =
         AsTreePosition()->CreatePositionAtStartOfAnchor();
     AXPositionInstance previous_tree_position =
@@ -1905,7 +1819,9 @@
     // AtEndOfFormat() always returns true if we are at the last iterable
     // position, i.e. CreateNextLeafTreePosition()->IsNullPosition().
     if (AtEndOfFormat()) {
-      if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary) {
+      if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary ||
+          (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary &&
+           CreateNextLeafTreePosition()->IsNullPosition())) {
         AXPositionInstance clone = Clone();
         // In order to make equality checks simpler, affinity should be reset so
         // that we would get consistent output from this function regardless of
@@ -1913,7 +1829,6 @@
         clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
         return clone;
       } else if (boundary_behavior == AXBoundaryBehavior::CrossBoundary &&
-                 AtEndOfAnchor() &&
                  CreateNextLeafTreePosition()->IsNullPosition()) {
         // If we're at a format boundary and there are no more text positions
         // to traverse, return a null position for cross-boundary moves.
@@ -1921,7 +1836,7 @@
       }
     }
 
-    bool was_text_position = IsTextPosition();
+    const bool was_text_position = IsTextPosition();
     AXPositionInstance tree_position =
         AsTreePosition()->CreatePositionAtEndOfAnchor();
     AXPositionInstance next_tree_position =
@@ -1965,68 +1880,78 @@
 
   AXPositionInstance CreateNextParagraphStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreateNextBoundaryStartPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfParagraphPredicate),
+    return CreateBoundaryStartPosition(
+        boundary_behavior, AXTextBoundaryDirection::kForwards,
+        base::BindRepeating(&AtStartOfParagraphPredicate),
         base::BindRepeating(&AtEndOfParagraphPredicate));
   }
 
   AXPositionInstance CreatePreviousParagraphStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreatePreviousBoundaryStartPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfParagraphPredicate),
+    return CreateBoundaryStartPosition(
+        boundary_behavior, AXTextBoundaryDirection::kBackwards,
+        base::BindRepeating(&AtStartOfParagraphPredicate),
         base::BindRepeating(&AtEndOfParagraphPredicate));
   }
 
   AXPositionInstance CreateNextParagraphEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreateNextBoundaryEndPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfParagraphPredicate),
+    return CreateBoundaryEndPosition(
+        boundary_behavior, AXTextBoundaryDirection::kForwards,
+        base::BindRepeating(&AtStartOfParagraphPredicate),
         base::BindRepeating(&AtEndOfParagraphPredicate));
   }
 
   AXPositionInstance CreatePreviousParagraphEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreatePreviousBoundaryEndPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfParagraphPredicate),
+    return CreateBoundaryEndPosition(
+        boundary_behavior, AXTextBoundaryDirection::kBackwards,
+        base::BindRepeating(&AtStartOfParagraphPredicate),
         base::BindRepeating(&AtEndOfParagraphPredicate));
   }
 
   AXPositionInstance CreateNextPageStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreateNextBoundaryStartPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfPagePredicate),
+    return CreateBoundaryStartPosition(
+        boundary_behavior, AXTextBoundaryDirection::kForwards,
+        base::BindRepeating(&AtStartOfPagePredicate),
         base::BindRepeating(&AtEndOfPagePredicate));
   }
 
   AXPositionInstance CreatePreviousPageStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreatePreviousBoundaryStartPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfPagePredicate),
+    return CreateBoundaryStartPosition(
+        boundary_behavior, AXTextBoundaryDirection::kBackwards,
+        base::BindRepeating(&AtStartOfPagePredicate),
         base::BindRepeating(&AtEndOfPagePredicate));
   }
 
   AXPositionInstance CreateNextPageEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreateNextBoundaryEndPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfPagePredicate),
+    return CreateBoundaryEndPosition(
+        boundary_behavior, AXTextBoundaryDirection::kForwards,
+        base::BindRepeating(&AtStartOfPagePredicate),
         base::BindRepeating(&AtEndOfPagePredicate));
   }
 
   AXPositionInstance CreatePreviousPageEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
-    return CreatePreviousBoundaryEndPosition(
-        boundary_behavior, base::BindRepeating(&AtStartOfPagePredicate),
+    return CreateBoundaryEndPosition(
+        boundary_behavior, AXTextBoundaryDirection::kBackwards,
+        base::BindRepeating(&AtStartOfPagePredicate),
         base::BindRepeating(&AtEndOfPagePredicate));
   }
 
-  AXPositionInstance CreateNextBoundaryStartPosition(
+  AXPositionInstance CreateBoundaryStartPosition(
       AXBoundaryBehavior boundary_behavior,
+      AXTextBoundaryDirection boundary_direction,
       BoundaryConditionPredicate at_start_condition,
       BoundaryConditionPredicate at_end_condition) const {
-    bool was_tree_position = IsTreePosition();
+    const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsLeafTextPosition();
     if (text_position->IsNullPosition())
       return text_position;
+
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
         at_start_condition.Run(text_position)) {
       AXPositionInstance clone = Clone();
@@ -2035,15 +1960,34 @@
     }
 
     do {
-      text_position = text_position->CreateNextLeafTextPosition();
-      if (text_position->IsNullPosition()) {
+      AXPositionInstance next_position;
+      if (boundary_direction == AXTextBoundaryDirection::kForwards)
+        next_position = text_position->CreateNextLeafTextPosition();
+      else
+        next_position = text_position->AtStartOfAnchor()
+                            ? text_position->CreatePreviousLeafTextPosition()
+                            : text_position->CreatePositionAtStartOfAnchor();
+
+      if (next_position->IsNullPosition()) {
         if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
-          return CreatePositionAtEndOfAnchor();
-        return text_position;
+          return (boundary_direction == AXTextBoundaryDirection::kForwards)
+                     ? CreatePositionAtEndOfAnchor()
+                     : CreatePositionAtStartOfAnchor();
+        if (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary) {
+          // We can't simply return the following position; break and after this
+          // loop we'll try to do some adjustments to text_position.
+          text_position =
+              (boundary_direction == AXTextBoundaryDirection::kForwards)
+                  ? text_position->CreatePositionAtEndOfAnchor()
+                  : text_position->CreatePositionAtStartOfAnchor();
+          break;
+        }
+        return next_position;
       }
 
-      // Continue searching for the next boundary start until the next logical
-      // text position is reached.
+      // Continue searching for the next boundary end in the specified direction
+      // until the next logical text position is reached.
+      text_position = std::move(next_position);
     } while (
         !at_start_condition.Run(text_position) ||
         (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
@@ -2057,7 +2001,9 @@
     if (GetAnchor() == common_ancestor->GetAnchor()) {
       text_position = std::move(common_ancestor);
     } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtEndOfAnchor();
+      return (boundary_direction == AXTextBoundaryDirection::kForwards)
+                 ? CreatePositionAtEndOfAnchor()
+                 : CreatePositionAtStartOfAnchor();
     }
 
     if (was_tree_position)
@@ -2065,68 +2011,23 @@
     return text_position;
   }
 
-  AXPositionInstance CreatePreviousBoundaryStartPosition(
+  AXPositionInstance CreateBoundaryEndPosition(
       AXBoundaryBehavior boundary_behavior,
+      AXTextBoundaryDirection boundary_direction,
       BoundaryConditionPredicate at_start_condition,
       BoundaryConditionPredicate at_end_condition) const {
-    bool was_tree_position = IsTreePosition();
+    const bool was_tree_position = IsTreePosition();
     AXPositionInstance text_position = AsLeafTextPosition();
-    if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        at_start_condition.Run(text_position)) {
-      AXPositionInstance clone = Clone();
-      clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-      return clone;
-    }
+    if (text_position->IsNullPosition())
+      return text_position;
 
-    do {
-      if (text_position->AtStartOfAnchor()) {
-        text_position = text_position->CreatePreviousLeafTextPosition();
-      } else {
-        text_position = text_position->CreatePositionAtStartOfAnchor();
-      }
-
-      if (text_position->IsNullPosition()) {
-        if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
-          return CreatePositionAtStartOfAnchor();
-        return text_position;
-      }
-
-      // Continue searching for the previous boundary start until the next
-      // logical text position is reached.
-    } while (
-        !at_start_condition.Run(text_position) ||
-        (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-         *this == *text_position));
-
-    // If the boundary is in the same subtree, return a position rooted at this
-    // position's anchor. This is necessary because we don't want to return a
-    // position that might be in the shadow DOM when this position is not.
-    AXPositionInstance common_ancestor =
-        text_position->LowestCommonAncestor(*this);
-    if (GetAnchor() == common_ancestor->GetAnchor()) {
-      text_position = std::move(common_ancestor);
-    } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtStartOfAnchor();
-    }
-
-    if (was_tree_position)
-      text_position = text_position->AsTreePosition();
-    return text_position;
-  }
-
-  AXPositionInstance CreateNextBoundaryEndPosition(
-      AXBoundaryBehavior boundary_behavior,
-      BoundaryConditionPredicate at_start_condition,
-      BoundaryConditionPredicate at_end_condition) const {
-    bool was_tree_position = IsTreePosition();
-    AXPositionInstance text_position = AsLeafTextPosition();
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
         at_end_condition.Run(text_position)) {
       AXPositionInstance clone = Clone();
       // If there is no ambiguity as to whether the position is at the end of
-      // the current boundary or the start of the next boundary, affinity
-      // should be reset in order to get consistent output from this function
-      // regardless of input affinity.
+      // the current boundary or the start of the next boundary, affinity should
+      // be reset in order to get consistent output from this method, regardless
+      // of input affinity.
       clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
       if (at_start_condition.Run(clone))
         clone->affinity_ = ax::mojom::TextAffinity::kUpstream;
@@ -2134,21 +2035,36 @@
     }
 
     do {
-      if (text_position->AtEndOfAnchor()) {
-        text_position = text_position->CreateNextLeafTextPosition()
+      AXPositionInstance next_position;
+      if (boundary_direction == AXTextBoundaryDirection::kForwards)
+        next_position = !text_position->AtEndOfAnchor()
+                            ? text_position->CreatePositionAtEndOfAnchor()
+                            : text_position->CreateNextLeafTextPosition()
+                                  ->CreatePositionAtEndOfAnchor();
+      else
+        next_position = text_position->CreatePreviousLeafTextPosition()
                             ->CreatePositionAtEndOfAnchor();
-      } else {
-        text_position = text_position->CreatePositionAtEndOfAnchor();
-      }
 
-      if (text_position->IsNullPosition()) {
+      if (next_position->IsNullPosition()) {
         if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
-          return CreatePositionAtEndOfAnchor();
-        return text_position;
+          return (boundary_direction == AXTextBoundaryDirection::kForwards)
+                     ? CreatePositionAtEndOfAnchor()
+                     : CreatePositionAtStartOfAnchor();
+        if (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary) {
+          // We can't simply return the following position; break and after this
+          // loop we'll try to do some adjustments to text_position.
+          text_position =
+              (boundary_direction == AXTextBoundaryDirection::kForwards)
+                  ? text_position->CreatePositionAtEndOfAnchor()
+                  : text_position->CreatePositionAtStartOfAnchor();
+          break;
+        }
+        return next_position;
       }
 
-      // Continue searching for the next boundary end until the next logical
-      // text position is reached.
+      // Continue searching for the next boundary end in the specified direction
+      // until the next logical text position is reached.
+      text_position = std::move(next_position);
     } while (
         !at_end_condition.Run(text_position) ||
         (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
@@ -2162,60 +2078,9 @@
     if (GetAnchor() == common_ancestor->GetAnchor()) {
       text_position = std::move(common_ancestor);
     } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtEndOfAnchor();
-    }
-
-    if (was_tree_position)
-      text_position = text_position->AsTreePosition();
-    return text_position;
-  }
-
-  AXPositionInstance CreatePreviousBoundaryEndPosition(
-      AXBoundaryBehavior boundary_behavior,
-      BoundaryConditionPredicate at_start_condition,
-      BoundaryConditionPredicate at_end_condition) const {
-    bool was_tree_position = IsTreePosition();
-    AXPositionInstance text_position = AsLeafTextPosition();
-    if (text_position->IsNullPosition())
-      return text_position;
-    if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        at_end_condition.Run(text_position)) {
-      AXPositionInstance clone = Clone();
-      // If there is no ambiguity as to whether the position is at the end of
-      // the current boundary or the start of the next boundary, affinity
-      // should be reset in order to get consistent output from this function
-      // regardless of input affinity.
-      clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-      if (at_start_condition.Run(clone))
-        clone->affinity_ = ax::mojom::TextAffinity::kUpstream;
-      return clone;
-    }
-
-    do {
-      text_position = text_position->CreatePreviousLeafTextPosition()
-                          ->CreatePositionAtEndOfAnchor();
-      if (text_position->IsNullPosition()) {
-        if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary)
-          return CreatePositionAtStartOfAnchor();
-        return text_position;
-      }
-
-      // Continue searching for the previous boundary end until the next
-      // logical text position is reached.
-    } while (
-        !at_end_condition.Run(text_position) ||
-        (boundary_behavior != AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-         *this == *text_position));
-
-    // If the boundary is in the same subtree, return a position rooted at this
-    // position's anchor. This is necessary because we don't want to return a
-    // position that might be in the shadow DOM when this position is not.
-    AXPositionInstance common_ancestor =
-        text_position->LowestCommonAncestor(*this);
-    if (GetAnchor() == common_ancestor->GetAnchor()) {
-      text_position = std::move(common_ancestor);
-    } else if (boundary_behavior == AXBoundaryBehavior::StopAtAnchorBoundary) {
-      return CreatePositionAtStartOfAnchor();
+      return (boundary_direction == AXTextBoundaryDirection::kForwards)
+                 ? CreatePositionAtEndOfAnchor()
+                 : CreatePositionAtStartOfAnchor();
     }
 
     if (was_tree_position)
@@ -2247,8 +2112,7 @@
   //    0: if this position is logically equivalent to the other position
   //   <0: if this position is logically less than the other position
   //   >0: if this position is logically greater than the other position
-  base::Optional<int> CompareTo(
-      const AXPosition<AXPositionType, AXNodeType>& other) const {
+  base::Optional<int> CompareTo(const AXPosition& other) const {
     if (this->IsNullPosition() && other.IsNullPosition())
       return base::Optional<int>(0);
     if (this->IsNullPosition() || other.IsNullPosition())
@@ -2266,16 +2130,12 @@
     // common ancestor position when converted to tree positions?" The answer is
     // when they are both text positions and they either have the same anchor,
     // or one is the ancestor of the other.
-    std::unique_ptr<AXPosition<AXPositionType, AXNodeType>> this_tree_position =
-        this->AsTreePosition();
-    std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>
-        other_tree_position = other.AsTreePosition();
-    std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>
-        this_tree_position_ancestor =
-            this_tree_position->LowestCommonAncestor(*other_tree_position);
-    std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>
-        other_tree_position_ancestor =
-            other_tree_position->LowestCommonAncestor(*this_tree_position);
+    std::unique_ptr<AXPosition> this_tree_position = this->AsTreePosition();
+    std::unique_ptr<AXPosition> other_tree_position = other.AsTreePosition();
+    std::unique_ptr<AXPosition> this_tree_position_ancestor =
+        this_tree_position->LowestCommonAncestor(*other_tree_position);
+    std::unique_ptr<AXPosition> other_tree_position_ancestor =
+        other_tree_position->LowestCommonAncestor(*this_tree_position);
     DCHECK_EQ(this_tree_position_ancestor->GetAnchor(),
               other_tree_position_ancestor->GetAnchor());
     if (this_tree_position_ancestor->IsNullPosition())
@@ -2289,8 +2149,7 @@
       // This text position's anchor is the common ancestor of the other text
       // position's anchor.
       if (this->GetAnchor() == other_tree_position_ancestor->GetAnchor()) {
-        std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>
-            other_text_position = other.Clone();
+        std::unique_ptr<AXPosition> other_text_position = other.Clone();
         while (other_text_position->GetAnchor() != this->GetAnchor())
           other_text_position = other_text_position->CreateParentPosition();
         return base::Optional<int>(this->text_offset_ -
@@ -2300,8 +2159,7 @@
       // The other text position's anchor is the common ancestor of this text
       // position's anchor.
       if (other.GetAnchor() == this_tree_position_ancestor->GetAnchor()) {
-        std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>
-            this_text_position = this->Clone();
+        std::unique_ptr<AXPosition> this_text_position = this->Clone();
         while (this_text_position->GetAnchor() != other.GetAnchor())
           this_text_position = this_text_position->CreateParentPosition();
         return base::Optional<int>(this_text_position->text_offset_ -
@@ -2310,10 +2168,10 @@
 
       // All optimizations failed. Fall back to comparing text positions with
       // the common text position ancestor.
-      std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>
-          this_text_position_ancestor = this->LowestCommonAncestor(other);
-      std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>
-          other_text_position_ancestor = other.LowestCommonAncestor(*this);
+      std::unique_ptr<AXPosition> this_text_position_ancestor =
+          this->LowestCommonAncestor(other);
+      std::unique_ptr<AXPosition> other_text_position_ancestor =
+          other.LowestCommonAncestor(*this);
       DCHECK(this_text_position_ancestor->IsTextPosition());
       DCHECK(other_text_position_ancestor->IsTextPosition());
       DCHECK_EQ(this_text_position_ancestor->GetAnchor(),
@@ -2378,9 +2236,8 @@
 
  protected:
   AXPosition() = default;
-  AXPosition(const AXPosition<AXPositionType, AXNodeType>& other) = default;
-  virtual AXPosition<AXPositionType, AXNodeType>& operator=(
-      const AXPosition<AXPositionType, AXNodeType>& other) = default;
+  AXPosition(const AXPosition& other) = default;
+  virtual AXPosition& operator=(const AXPosition& other) = default;
 
   virtual void Initialize(AXPositionKind kind,
                           AXTreeID tree_id,
@@ -2477,14 +2334,14 @@
     kPreviousInTree,
   };
 
-  // type of predicate function called during anchor navigation.
+  // Type of predicate function called during anchor navigation.
   // When the predicate returns |true|, the navigation stops and returns a
   // null position object.
-  using AbortMovePredicate = base::RepeatingCallback<bool(
-      const AXPosition<AXPositionType, AXNodeType>& move_from,
-      const AXPosition<AXPositionType, AXNodeType>& move_to,
-      const AXMoveType type,
-      const AXMoveDirection direction)>;
+  using AbortMovePredicate =
+      base::RepeatingCallback<bool(const AXPosition& move_from,
+                                   const AXPosition& move_to,
+                                   const AXMoveType type,
+                                   const AXMoveDirection direction)>;
 
   // Uses depth-first pre-order traversal.
   AXPositionInstance CreateNextAnchorPosition(
@@ -2660,7 +2517,7 @@
     return previous_leaf;
   }
 
-  // Static helpers for lambda usage
+  // Static helpers for lambda usage.
   static bool AtStartOfParagraphPredicate(const AXPositionInstance& position) {
     return position->AtStartOfParagraph();
   }
@@ -2685,21 +2542,19 @@
     return position->AtEndOfLine();
   }
 
-  // Default behavior is to never abort
-  static bool DefaultAbortMovePredicate(
-      const AXPosition<AXPositionType, AXNodeType>& move_from,
-      const AXPosition<AXPositionType, AXNodeType>& move_to,
-      const AXMoveType move_type,
-      const AXMoveDirection direction) {
+  // Default behavior is to never abort.
+  static bool DefaultAbortMovePredicate(const AXPosition& move_from,
+                                        const AXPosition& move_to,
+                                        const AXMoveType move_type,
+                                        const AXMoveDirection direction) {
     return false;
   }
 
   // AbortMovePredicate function used to detect format boundaries.
-  static bool AbortMoveAtFormatBoundary(
-      const AXPosition<AXPositionType, AXNodeType>& move_from,
-      const AXPosition<AXPositionType, AXNodeType>& move_to,
-      const AXMoveType move_type,
-      const AXMoveDirection direction) {
+  static bool AbortMoveAtFormatBoundary(const AXPosition& move_from,
+                                        const AXPosition& move_to,
+                                        const AXMoveType move_type,
+                                        const AXMoveDirection direction) {
     if (move_from.IsNullPosition() || move_to.IsNullPosition())
       return true;
 
@@ -2720,8 +2575,8 @@
   // AbortMovePredicate function used to detect paragraph boundaries.
   static bool AbortMoveAtParagraphBoundary(
       bool& crossed_potential_boundary_token,
-      const AXPosition<AXPositionType, AXNodeType>& move_from,
-      const AXPosition<AXPositionType, AXNodeType>& move_to,
+      const AXPosition& move_from,
+      const AXPosition& move_to,
       const AXMoveType move_type,
       const AXMoveDirection direction) {
     if (move_from.IsNullPosition() || move_to.IsNullPosition())
@@ -2757,25 +2612,22 @@
           move_to.IsInWhiteSpace()) {
         return false;
       }
-
       return true;
     }
-
     return false;
   }
 
   // AbortMovePredicate function used to detect page boundaries.
-  static bool AbortMoveAtPageBoundary(
-      const AXPosition<AXPositionType, AXNodeType>& move_from,
-      const AXPosition<AXPositionType, AXNodeType>& move_to,
-      const AXMoveType move_type,
-      const AXMoveDirection direction) {
+  static bool AbortMoveAtPageBoundary(const AXPosition& move_from,
+                                      const AXPosition& move_to,
+                                      const AXMoveType move_type,
+                                      const AXMoveDirection direction) {
     if (move_from.IsNullPosition() || move_to.IsNullPosition())
       return true;
 
-    const bool move_from_break = move_from.GetAnchor()->data().GetBoolAttribute(
+    const bool move_from_break = move_from.GetAnchor()->GetBoolAttribute(
         ax::mojom::BoolAttribute::kIsPageBreakingObject);
-    const bool move_to_break = move_to.GetAnchor()->data().GetBoolAttribute(
+    const bool move_to_break = move_to.GetAnchor()->GetBoolAttribute(
         ax::mojom::BoolAttribute::kIsPageBreakingObject);
 
     switch (move_type) {
@@ -2794,7 +2646,7 @@
         // break, because that would mean exiting and/or entering a page break.
         return move_from_break && move_to_break;
     }
-
+    NOTREACHED();
     return false;
   }
 
diff --git a/ui/accessibility/ax_text_boundary.cc b/ui/accessibility/ax_text_boundary.cc
index 7660541..bb9bfec 100644
--- a/ui/accessibility/ax_text_boundary.cc
+++ b/ui/accessibility/ax_text_boundary.cc
@@ -20,6 +20,12 @@
       return "LineStartOrEndBoundary";
     case AXTextBoundary::kObject:
       return "ObjectBoundary";
+    case AXTextBoundary::kPageEnd:
+      return "PageEndBoundary";
+    case AXTextBoundary::kPageStart:
+      return "PageStartBoundary";
+    case AXTextBoundary::kPageStartOrEnd:
+      return "PageStartOrEndBoundary";
     case AXTextBoundary::kParagraphEnd:
       return "ParagraphEndBoundary";
     case AXTextBoundary::kParagraphStart:
diff --git a/ui/accessibility/ax_text_boundary.h b/ui/accessibility/ax_text_boundary.h
index e935135b..075181dc 100644
--- a/ui/accessibility/ax_text_boundary.h
+++ b/ui/accessibility/ax_text_boundary.h
@@ -38,6 +38,9 @@
   kLineStart,
   kLineStartOrEnd,
   kObject,
+  kPageEnd,
+  kPageStart,
+  kPageStartOrEnd,
   kParagraphEnd,
   kParagraphStart,
   kParagraphStartOrEnd,
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
index d67b89c..55a42f7 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
@@ -157,14 +157,10 @@
     case TextUnit_Word:
       start_ = start_->CreatePreviousWordStartPosition(
           AXBoundaryBehavior::StopIfAlreadyAtBoundary);
-
       // Since start_ is already located at a word boundary, we need to cross it
-      // in order to move to the next one; the only edge case here is the last
-      // word in the document, which will result in a null position.
+      // in order to move to the next one (stopping at the last anchor's end).
       end_ = start_->CreateNextWordStartPosition(
-          AXBoundaryBehavior::CrossBoundary);
-      if (end_->IsNullPosition())
-        end_ = start_->CreatePositionAtEndOfDocument();
+          AXBoundaryBehavior::StopAtLastAnchorBoundary);
       break;
     case TextUnit_Line:
       start_ = start_->CreatePreviousLineStartPosition(
@@ -587,8 +583,7 @@
       new_position = MoveEndpointByFormat(position_to_move, count, units_moved);
       break;
     case TextUnit_Word:
-      new_position = MoveEndpointByWord(position_to_move, is_start_endpoint,
-                                        count, units_moved);
+      new_position = MoveEndpointByWord(position_to_move, count, units_moved);
       break;
     case TextUnit_Line:
       new_position = MoveEndpointByLine(position_to_move, is_start_endpoint,
@@ -829,39 +824,17 @@
     const AXPositionInstance& endpoint,
     const int count,
     int* units_moved) {
-  DCHECK_NE(count, 0);
   return MoveEndpointByUnitHelper(
-      std::move(endpoint),
-      (count > 0) ? &AXPositionInstanceType::CreateNextCharacterPosition
-                  : &AXPositionInstanceType::CreatePreviousCharacterPosition,
-      count, units_moved);
+      std::move(endpoint), AXTextBoundary::kCharacter, count, units_moved);
 }
 
 AXPlatformNodeTextRangeProviderWin::AXPositionInstance
 AXPlatformNodeTextRangeProviderWin::MoveEndpointByWord(
     const AXPositionInstance& endpoint,
-    bool is_start_endpoint,
     const int count,
     int* units_moved) {
-  DCHECK_NE(count, 0);
-
-  bool going_forward = count > 0;
-  AXPositionInstance new_position = MoveEndpointByUnitHelper(
-      std::move(endpoint),
-      going_forward ? &AXPositionInstanceType::CreateNextWordStartPosition
-                    : &AXPositionInstanceType::CreatePreviousWordStartPosition,
-      count, units_moved);
-
-  if (going_forward && *units_moved < count &&
-      !new_position->AsPositionBeforeCharacter()->IsNullPosition()) {
-    AXPositionInstance next_word_position =
-        new_position->CreatePositionAtEndOfDocument();
-    DCHECK(!next_word_position->IsNullPosition());
-
-    new_position = std::move(next_word_position);
-    ++*units_moved;
-  }
-  return new_position;
+  return MoveEndpointByUnitHelper(
+      std::move(endpoint), AXTextBoundary::kWordStart, count, units_moved);
 }
 
 AXPlatformNodeTextRangeProviderWin::AXPositionInstance
@@ -870,21 +843,10 @@
     bool is_start_endpoint,
     const int count,
     int* units_moved) {
-  DCHECK_NE(count, 0);
-
-  CreateNextPositionFunction create_next_position = nullptr;
-  if (count > 0)
-    create_next_position =
-        is_start_endpoint ? &AXPositionInstanceType::CreateNextLineStartPosition
-                          : &AXPositionInstanceType::CreateNextLineEndPosition;
-  else
-    create_next_position =
-        is_start_endpoint
-            ? &AXPositionInstanceType::CreatePreviousLineStartPosition
-            : &AXPositionInstanceType::CreatePreviousLineEndPosition;
-
-  return MoveEndpointByUnitHelper(std::move(endpoint), create_next_position,
-                                  count, units_moved);
+  return MoveEndpointByUnitHelper(
+      std::move(endpoint),
+      is_start_endpoint ? AXTextBoundary::kLineStart : AXTextBoundary::kLineEnd,
+      count, units_moved);
 }
 
 AXPlatformNodeTextRangeProviderWin::AXPositionInstance
@@ -892,106 +854,39 @@
     const AXPositionInstance& endpoint,
     const int count,
     int* units_moved) {
-  DCHECK_NE(count, 0);
-
-  CreateNextPositionFunction create_next_position = nullptr;
-  if (count > 0)
-    create_next_position = &AXPositionInstanceType::CreateNextFormatEndPosition;
-  else
-    create_next_position =
-        &AXPositionInstanceType::CreatePreviousFormatStartPosition;
-
-  return MoveEndpointByUnitHelper(std::move(endpoint), create_next_position,
-                                  count, units_moved);
+  return MoveEndpointByUnitHelper(
+      std::move(endpoint), AXTextBoundary::kFormatChange, count, units_moved);
 }
 
 AXPlatformNodeTextRangeProviderWin::AXPositionInstance
 AXPlatformNodeTextRangeProviderWin::MoveEndpointByParagraph(
-    const AXNodePosition::AXPositionInstance& endpoint,
+    const AXPositionInstance& endpoint,
     const bool is_start_endpoint,
     const int count,
-    int* count_moved) {
-  auto current_endpoint = endpoint->Clone();
-  const bool forwards = count > 0;
-  const int count_abs = std::abs(count);
-  const auto behavior = AXBoundaryBehavior::CrossBoundary;
-  int iteration = 0;
-  for (iteration = 0; iteration < count_abs; ++iteration) {
-    AXPositionInstance next_endpoint;
-    if (forwards) {
-      next_endpoint =
-          is_start_endpoint
-              ? current_endpoint->CreateNextParagraphStartPosition(behavior)
-              : current_endpoint->CreateNextParagraphEndPosition(behavior);
-    } else {
-      next_endpoint =
-          is_start_endpoint
-              ? current_endpoint->CreatePreviousParagraphStartPosition(behavior)
-              : current_endpoint->CreatePreviousParagraphEndPosition(behavior);
-    }
-
-    // End of document
-    if (next_endpoint->IsNullPosition()) {
-      int document_moved;
-      next_endpoint = MoveEndpointByDocument(endpoint, count, &document_moved);
-      if (*endpoint != *next_endpoint && !next_endpoint->IsNullPosition()) {
-        ++iteration;
-        current_endpoint = std::move(next_endpoint);
-      }
-      break;
-    }
-    current_endpoint = std::move(next_endpoint);
-  }
-
-  *count_moved = (forwards) ? iteration : -iteration;
-  return current_endpoint;
+    int* units_moved) {
+  return MoveEndpointByUnitHelper(std::move(endpoint),
+                                  is_start_endpoint
+                                      ? AXTextBoundary::kParagraphStart
+                                      : AXTextBoundary::kParagraphEnd,
+                                  count, units_moved);
 }
 
 AXPlatformNodeTextRangeProviderWin::AXPositionInstance
 AXPlatformNodeTextRangeProviderWin::MoveEndpointByPage(
-    const AXNodePosition::AXPositionInstance& endpoint,
+    const AXPositionInstance& endpoint,
     const bool is_start_endpoint,
     const int count,
-    int* count_moved) {
-  // If the document doesn't support pagination, default to document navigation
-  // per UIA spec
+    int* units_moved) {
+  // Per UIA spec, if the document containing the current endpoint doesn't
+  // support pagination, default to document navigation.
   AXPositionInstance common_ancestor = start_->LowestCommonAncestor(*end_);
   if (!common_ancestor->GetAnchor()->tree()->HasPaginationSupport())
-    return MoveEndpointByDocument(std::move(endpoint), count, count_moved);
+    return MoveEndpointByDocument(std::move(endpoint), count, units_moved);
 
-  auto current_endpoint = endpoint->Clone();
-  const bool forwards = count > 0;
-  const int count_abs = std::abs(count);
-  const auto behavior = ui::AXBoundaryBehavior::CrossBoundary;
-  int iteration = 0;
-  for (iteration = 0; iteration < count_abs; ++iteration) {
-    AXPositionInstance next_endpoint;
-    if (forwards) {
-      next_endpoint =
-          is_start_endpoint
-              ? current_endpoint->CreateNextPageStartPosition(behavior)
-              : current_endpoint->CreateNextPageEndPosition(behavior);
-    } else {
-      next_endpoint =
-          is_start_endpoint
-              ? current_endpoint->CreatePreviousPageStartPosition(behavior)
-              : current_endpoint->CreatePreviousPageEndPosition(behavior);
-    }
-    // End of document
-    if (next_endpoint->IsNullPosition()) {
-      int document_moved;
-      next_endpoint = MoveEndpointByDocument(endpoint, count, &document_moved);
-      if (*endpoint != *next_endpoint && !next_endpoint->IsNullPosition()) {
-        ++iteration;
-        current_endpoint = std::move(next_endpoint);
-      }
-      break;
-    }
-    current_endpoint = std::move(next_endpoint);
-  }
-
-  *count_moved = (forwards) ? iteration : -iteration;
-  return current_endpoint;
+  return MoveEndpointByUnitHelper(
+      std::move(endpoint),
+      is_start_endpoint ? AXTextBoundary::kPageStart : AXTextBoundary::kPageEnd,
+      count, units_moved);
 }
 
 AXPlatformNodeTextRangeProviderWin::AXPositionInstance
@@ -1001,39 +896,39 @@
     int* units_moved) {
   DCHECK_NE(count, 0);
 
-  *units_moved = 0;
-  AXPositionInstance current_endpoint = endpoint->Clone();
-  const bool forwards = count > 0;
-
-  if (forwards && !current_endpoint->AtEndOfDocument()) {
-    current_endpoint = endpoint->CreatePositionAtEndOfDocument();
-    *units_moved = 1;
-  } else if (!forwards && !current_endpoint->AtStartOfDocument()) {
-    current_endpoint = endpoint->CreatePositionAtStartOfDocument();
-    *units_moved = -1;
+  if (count < 0) {
+    *units_moved = !endpoint->AtStartOfDocument() ? -1 : 0;
+    return endpoint->CreatePositionAtStartOfDocument();
   }
-
-  return current_endpoint;
+  *units_moved = !endpoint->AtEndOfDocument() ? 1 : 0;
+  return endpoint->CreatePositionAtEndOfDocument();
 }
 
 AXPlatformNodeTextRangeProviderWin::AXPositionInstance
 AXPlatformNodeTextRangeProviderWin::MoveEndpointByUnitHelper(
     const AXPositionInstance& endpoint,
-    CreateNextPositionFunction create_next_position,
+    const AXTextBoundary boundary_type,
     const int count,
     int* units_moved) {
   DCHECK_NE(count, 0);
+  const bool going_forward = count > 0;
 
   AXPositionInstance current_endpoint = endpoint->Clone();
-
   for (int iteration = 0; iteration < std::abs(count); ++iteration) {
     AXPositionInstance next_endpoint =
-        (current_endpoint.get()->*create_next_position)(
-            AXBoundaryBehavior::CrossBoundary);
+        current_endpoint->CreatePositionAtTextBoundary(
+            boundary_type,
+            going_forward ? AXTextBoundaryDirection::kForwards
+                          : AXTextBoundaryDirection::kBackwards,
+            AXBoundaryBehavior::StopAtLastAnchorBoundary);
+    DCHECK(!next_endpoint->IsNullPosition());
 
-    // We've reached either the start or the end of the document.
-    if (next_endpoint->IsNullPosition()) {
-      *units_moved = (count > 0) ? iteration : -iteration;
+    // Since AXBoundaryBehavior::StopAtLastAnchorBoundary forces the next text
+    // boundary position to be different than the input position, the only case
+    // where these are equal is when they're already located at the last anchor
+    // boundary. In such case, there is no next position to move to.
+    if (*current_endpoint == *next_endpoint) {
+      *units_moved = going_forward ? iteration : -iteration;
       return current_endpoint;
     }
     current_endpoint = std::move(next_endpoint);
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.h b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.h
index 2db0033..6a3ff0d 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.h
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.h
@@ -12,6 +12,7 @@
 #include "ui/accessibility/ax_node_position.h"
 #include "ui/accessibility/ax_position.h"
 #include "ui/accessibility/ax_range.h"
+#include "ui/accessibility/ax_text_boundary.h"
 #include "ui/accessibility/platform/ax_platform_node_win.h"
 
 namespace ui {
@@ -83,11 +84,10 @@
   using AXPositionInstance = AXNodePosition::AXPositionInstance;
   using AXPositionInstanceType = typename AXPositionInstance::element_type;
   using AXNodeRange = AXRange<AXPositionInstanceType>;
-  using CreateNextPositionFunction =
-      AXPositionInstance (AXPositionInstanceType::*)(AXBoundaryBehavior) const;
 
   friend class AXPlatformNodeTextRangeProviderTest;
   friend class AXPlatformNodeTextProviderTest;
+
   base::string16 GetString(int max_count);
   AXPlatformNodeWin* owner() const;
   AXPlatformNodeDelegate* GetDelegate(
@@ -104,7 +104,6 @@
                                              const int count,
                                              int* units_moved);
   AXPositionInstance MoveEndpointByWord(const AXPositionInstance& endpoint,
-                                        bool endpoint_is_start,
                                         const int count,
                                         int* units_moved);
   AXPositionInstance MoveEndpointByLine(const AXPositionInstance& endpoint,
@@ -114,11 +113,11 @@
   AXPositionInstance MoveEndpointByParagraph(const AXPositionInstance& endpoint,
                                              const bool is_start_endpoint,
                                              const int count,
-                                             int* count_moved);
+                                             int* units_moved);
   AXPositionInstance MoveEndpointByPage(const AXPositionInstance& endpoint,
                                         const bool is_start_endpoint,
                                         const int count,
-                                        int* count_moved);
+                                        int* units_moved);
   AXPositionInstance MoveEndpointByFormat(const AXPositionInstance& endpoint,
                                           const int count,
                                           int* units_moved);
@@ -128,7 +127,7 @@
 
   AXPositionInstance MoveEndpointByUnitHelper(
       const AXPositionInstance& endpoint,
-      CreateNextPositionFunction create_next_position,
+      const AXTextBoundary boundary_type,
       const int count,
       int* units_moved);
 
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
index 4381ff23..0e89882 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
@@ -535,18 +535,12 @@
     ui::AXTreeUpdate update;
     update.has_tree_data = true;
     update.root_id = root_data.id;
-    update.nodes.push_back(root_data);
-    update.nodes.push_back(group1_data);
-    update.nodes.push_back(text_data);
-    update.nodes.push_back(group2_data);
-    update.nodes.push_back(line_break1_data);
-    update.nodes.push_back(standalone_text_data);
-    update.nodes.push_back(line_break2_data);
-    update.nodes.push_back(bold_text_data);
-    update.nodes.push_back(paragraph1_data);
-    update.nodes.push_back(paragraph1_text_data);
-    update.nodes.push_back(paragraph2_data);
-    update.nodes.push_back(paragraph2_text_data);
+    update.nodes = {root_data,        group1_data,
+                    text_data,        group2_data,
+                    line_break1_data, standalone_text_data,
+                    line_break2_data, bold_text_data,
+                    paragraph1_data,  paragraph1_text_data,
+                    paragraph2_data,  paragraph2_text_data};
     update.tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
     return update;
   }
@@ -656,29 +650,26 @@
     root_data.child_ids = {2, 4, 8, 10, 12, 14, 16};
 
     ui::AXTreeUpdate update;
-    ui::AXTreeData tree_data;
-    tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
-    update.tree_data = tree_data;
     update.has_tree_data = true;
     update.root_id = root_data.id;
-    update.nodes.push_back(root_data);
-    update.nodes.push_back(group1_data);
-    update.nodes.push_back(text_data);
-    update.nodes.push_back(group2_data);
-    update.nodes.push_back(group3_data);
-    update.nodes.push_back(line_break1_data);
-    update.nodes.push_back(standalone_text_data);
-    update.nodes.push_back(line_break2_data);
-    update.nodes.push_back(bold_text_data);
-    update.nodes.push_back(paragraph1_data);
-    update.nodes.push_back(paragraph1_text_data);
-    update.nodes.push_back(paragraph2_data);
-    update.nodes.push_back(paragraph2_text_data);
-    update.nodes.push_back(paragraph3_data);
-    update.nodes.push_back(paragraph3_text_data);
-    update.nodes.push_back(paragraph4_data);
-    update.nodes.push_back(paragraph4_text_data);
-
+    update.nodes = {root_data,
+                    group1_data,
+                    text_data,
+                    group2_data,
+                    group3_data,
+                    line_break1_data,
+                    standalone_text_data,
+                    line_break2_data,
+                    bold_text_data,
+                    paragraph1_data,
+                    paragraph1_text_data,
+                    paragraph2_data,
+                    paragraph2_text_data,
+                    paragraph3_data,
+                    paragraph3_text_data,
+                    paragraph4_data,
+                    paragraph4_text_data};
+    update.tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
     return update;
   }
 
@@ -731,15 +722,12 @@
     root_data.child_ids = {2, 4, 6};
 
     ui::AXTreeUpdate update;
-    ui::AXTreeData tree_data;
-    tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
-    update.tree_data = tree_data;
     update.has_tree_data = true;
     update.root_id = root_data.id;
     update.nodes = {root_data,       page_1_data,      page_1_text_data,
                     page_2_data,     page_2_text_data, page_3_data,
                     page_3_text_data};
-
+    update.tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
     return update;
   }
 };
@@ -1668,7 +1656,7 @@
       /*count*/ 5,
       /*expected_text*/
       L"some text on page 1\nsome text on page 2some more text on page 3",
-      /*expected_count*/ 4);
+      /*expected_count*/ 3);
 
   // Range moves
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Page,
@@ -1934,9 +1922,9 @@
                   /*expected_text*/ L"Standalone line\n",
                   /*expected_count*/ -3);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Paragraph,
-                  /*count*/ -2,
+                  /*count*/ -1,
                   /*expected_text*/ L"First line of text\n",
-                  /*expected_count*/ -2);
+                  /*expected_count*/ -1);
 
   // Moving backward by any number of paragraphs at the start of document
   // should have no effect.
@@ -1988,7 +1976,7 @@
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Paragraph,
                   /*count*/ -7,
                   /*expected_text*/ L"First line of text\n",
-                  /*expected_count*/ -5);
+                  /*expected_count*/ -4);
   EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
       text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Paragraph,
       /*count*/ -1,
diff --git a/ui/ozone/platform/x11/x11_window_ozone.cc b/ui/ozone/platform/x11/x11_window_ozone.cc
index fae825f..1c1b8f2a 100644
--- a/ui/ozone/platform/x11/x11_window_ozone.cc
+++ b/ui/ozone/platform/x11/x11_window_ozone.cc
@@ -27,10 +27,6 @@
                                X11WindowManagerOzone* window_manager)
     : X11Window(delegate), window_manager_(window_manager) {
   DCHECK(window_manager_);
-
-  // Set a class property key, which allows |this| to be used for interactive
-  // events, e.g. move or resize.
-  SetWmMoveResizeHandler(this, static_cast<WmMoveResizeHandler*>(this));
 }
 
 X11WindowOzone::~X11WindowOzone() {
@@ -152,12 +148,6 @@
   return window_manager_->event_grabber()->DispatchEvent(event);
 }
 
-void X11WindowOzone::DispatchHostWindowDragMovement(
-    int hittest,
-    const gfx::Point& pointer_location) {
-  XWindow::WmMoveResize(hittest, pointer_location);
-}
-
 void X11WindowOzone::SetWidget(XID xid) {
   // In spite of being defined in Xlib as `unsigned long`, XID (|xid|'s type)
   // is fixed at 32-bits (CARD32) in X11 Protocol, therefore can't be larger
diff --git a/ui/ozone/platform/x11/x11_window_ozone.h b/ui/ozone/platform/x11/x11_window_ozone.h
index 4496935..5c201d49 100644
--- a/ui/ozone/platform/x11/x11_window_ozone.h
+++ b/ui/ozone/platform/x11/x11_window_ozone.h
@@ -16,7 +16,6 @@
 #include "ui/events/x/x11_window_event_manager.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/x/x11_types.h"
-#include "ui/platform_window/platform_window_handler/wm_move_resize_handler.h"
 #include "ui/platform_window/x11/x11_window.h"
 
 namespace ui {
@@ -25,9 +24,7 @@
 struct PlatformWindowInitProperties;
 
 // PlatformWindow implementation for X11 Ozone. PlatformEvents are ui::Events.
-class X11WindowOzone : public X11Window,
-                       public WmMoveResizeHandler,
-                       public XEventDispatcher {
+class X11WindowOzone : public X11Window, public XEventDispatcher {
  public:
   X11WindowOzone(PlatformWindowDelegate* delegate,
                  X11WindowManagerOzone* window_manager);
@@ -65,11 +62,6 @@
   bool CanDispatchEvent(const PlatformEvent& event) override;
   uint32_t DispatchEvent(const PlatformEvent& event) override;
 
-  // WmMoveResizeHandler
-  void DispatchHostWindowDragMovement(
-      int hittest,
-      const gfx::Point& pointer_location) override;
-
   void Init(const PlatformWindowInitProperties& params);
   void SetWidget(XID xwindow);
   void RemoveFromWindowManager();
diff --git a/ui/platform_window/x11/BUILD.gn b/ui/platform_window/x11/BUILD.gn
index 64259a6..c7f7905 100644
--- a/ui/platform_window/x11/BUILD.gn
+++ b/ui/platform_window/x11/BUILD.gn
@@ -23,6 +23,7 @@
     "//ui/events/platform/x11",
     "//ui/gfx/x",
     "//ui/platform_window",
+    "//ui/platform_window/platform_window_handler",
   ]
 
   configs += [ "//build/config/linux:x11" ]
diff --git a/ui/platform_window/x11/x11_window.cc b/ui/platform_window/x11/x11_window.cc
index 86155e49..5eacc84 100644
--- a/ui/platform_window/x11/x11_window.cc
+++ b/ui/platform_window/x11/x11_window.cc
@@ -74,7 +74,11 @@
 }  // namespace
 
 X11Window::X11Window(PlatformWindowDelegateLinux* platform_window_delegate)
-    : platform_window_delegate_(platform_window_delegate) {}
+    : platform_window_delegate_(platform_window_delegate) {
+  // Set a class property key, which allows |this| to be used for interactive
+  // events, e.g. move or resize.
+  SetWmMoveResizeHandler(this, static_cast<WmMoveResizeHandler*>(this));
+}
 
 X11Window::~X11Window() {
   PrepareForShutdown();
@@ -320,11 +324,6 @@
                               : ui::ZOrderLevel::kNormal;
 }
 
-void X11Window::SetPlatformEventDispatcher() {
-  DCHECK(PlatformEventSource::GetInstance());
-  PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
-}
-
 bool X11Window::CanDispatchEvent(const PlatformEvent& xev) {
 #if defined(USE_X11)
   return XWindow::IsTargetedBy(*xev);
@@ -437,6 +436,17 @@
   return platform_window_delegate_->GetMaximumSizeForWindow();
 }
 
+void X11Window::DispatchHostWindowDragMovement(
+    int hittest,
+    const gfx::Point& pointer_location) {
+  XWindow::WmMoveResize(hittest, pointer_location);
+}
+
+void X11Window::SetPlatformEventDispatcher() {
+  DCHECK(PlatformEventSource::GetInstance());
+  PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
+}
+
 gfx::Size X11Window::AdjustSizeForDisplay(
     const gfx::Size& requested_size_in_pixels) {
 #if defined(OS_CHROMEOS)
diff --git a/ui/platform_window/x11/x11_window.h b/ui/platform_window/x11/x11_window.h
index a3c7b95..f8dea53 100644
--- a/ui/platform_window/x11/x11_window.h
+++ b/ui/platform_window/x11/x11_window.h
@@ -9,6 +9,7 @@
 #include "ui/base/x/x11_window.h"
 #include "ui/events/platform/platform_event_dispatcher.h"
 #include "ui/platform_window/platform_window.h"
+#include "ui/platform_window/platform_window_handler/wm_move_resize_handler.h"
 #include "ui/platform_window/platform_window_init_properties.h"
 #include "ui/platform_window/x11/x11_window_export.h"
 
@@ -33,6 +34,7 @@
 
 // PlatformWindow implementation for X11. PlatformEvents are XEvents.
 class X11_WINDOW_EXPORT X11Window : public PlatformWindow,
+                                    public WmMoveResizeHandler,
                                     public XWindow,
                                     public PlatformEventDispatcher {
  public:
@@ -103,6 +105,11 @@
   base::Optional<gfx::Size> GetMinimumSizeForXWindow() override;
   base::Optional<gfx::Size> GetMaximumSizeForXWindow() override;
 
+  // WmMoveResizeHandler
+  void DispatchHostWindowDragMovement(
+      int hittest,
+      const gfx::Point& pointer_location) override;
+
   // X11WindowOzone sets own event dispatcher now.
   virtual void SetPlatformEventDispatcher();
 
diff --git a/ui/strings/translations/ui_strings_ar.xtb b/ui/strings/translations/ui_strings_ar.xtb
index fd40fae..2eeeff90 100644
--- a/ui/strings/translations/ui_strings_ar.xtb
+++ b/ui/strings/translations/ui_strings_ar.xtb
@@ -38,7 +38,7 @@
 <translation id="1884435127456172652"><ph name="NUMBER" /> %</translation>
 <translation id="1901303067676059328">تح&amp;ديد الكلّ</translation>
 <translation id="1938451708255335766">لتعديل كثافة عرض النافذة، يمكنك إعادة تشغيل التطبيق.</translation>
-<translation id="2006524834898217237">عليك التأكُّد من اتصال الجهاز بالإنترنت.</translation>
+<translation id="2006524834898217237">عليك التأكّد من اتصال الجهاز بالإنترنت.</translation>
 <translation id="208586643495776849">يُرجى إعادة المحاولة</translation>
 <translation id="2141853158323869627">{DAYS,plural, =1{يوم واحد}zero{# يوم}two{يومان (#)}few{# أيام}many{# يومًا}other{# يوم}}</translation>
 <translation id="2148716181193084225">اليوم</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{يتبقى شهر واحد}zero{يتبقى # شهر}two{يتبقى شهرين (#)}few{يتبقى # أشهر}many{يتبقى # شهرًا}other{يتبقى # شهر}}</translation>
 <translation id="4841881773802181781">إدراج</translation>
 <translation id="4881695831933465202">فتح</translation>
+<translation id="4888938634149558681">إجراء مكالمة</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{ثانية واحدة}zero{# من الثواني}two{ثانيتان (#)}few{# ثوانٍ}many{# ثانية}other{# من الثواني}}</translation>
 <translation id="4971687151119236543">المقطع الصوتي السابق للوسائط</translation>
 <translation id="5046499563572181734">انقر هنا</translation>
@@ -162,7 +163,7 @@
 <translation id="6578407462441924264">بدون اسم</translation>
 <translation id="6612467943526193239">‏للخروج من المعايرة، اضغط على Esc.</translation>
 <translation id="6620110761915583480">حفظ الملف</translation>
-<translation id="6656912866303152668">‏يُرجى التأكُّد من تفعيل الجهاز <ph name="TARGET_DEVICE_NAME" /> للمزامنة في Chrome، ثم حاول بعد ذلك الإرسال مرة أخرى.</translation>
+<translation id="6656912866303152668">‏يُرجى التأكّد من تفعيل إعداد مزامنة الجهاز <ph name="TARGET_DEVICE_NAME" /> في Chrome، ثم محاولة الإرسال مرة أخرى.</translation>
 <translation id="6699343763173986273">المقطع الصوتي التالي للوسائط</translation>
 <translation id="673773751041746814">حذف</translation>
 <translation id="6779314412797872738">‏لإرسال رقم من هنا إلى هاتف Android، يمكنك <ph name="TROUBLESHOOT_LINK" /> لكلا الجهازين في الإعدادات.</translation>
@@ -228,7 +229,7 @@
 <translation id="8876215549894133151">التنسيق:</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY" /> كيلوبايت</translation>
 <translation id="8926951137623668982">إخفاء الرف دائمًا</translation>
-<translation id="8996630695507351249">عليك التأكُّد أن الجهاز <ph name="TARGET_DEVICE_NAME" /> متصل بالإنترنت.</translation>
+<translation id="8996630695507351249">عليك التأكّد أن الجهاز <ph name="TARGET_DEVICE_NAME" /> متصل بالإنترنت.</translation>
 <translation id="9002566407876343676">الفتح</translation>
 <translation id="9039076430527029379">الانتقال إلى صفحة <ph name="PAGE_NUMBER" /> أو صف <ph name="ROW_NUMBER" /> أو عمود <ph name="COLUMN_NUMBER" />.</translation>
 <translation id="9044832324875206639">{SECONDS,plural, =1{ثانية واحدة}zero{# ثانية}two{ثانيتان (#)}few{# ثوانٍ}many{# ثانية}other{# من الثواني}}</translation>
diff --git a/ui/strings/translations/ui_strings_bg.xtb b/ui/strings/translations/ui_strings_bg.xtb
index ed7aaed..4a655e9 100644
--- a/ui/strings/translations/ui_strings_bg.xtb
+++ b/ui/strings/translations/ui_strings_bg.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Остава 1 месец}other{Остават # месеца}}</translation>
 <translation id="4841881773802181781">Вмъкване</translation>
 <translation id="4881695831933465202">Отваряне</translation>
+<translation id="4888938634149558681">Обаждане</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 секунда}other{# секунди}}</translation>
 <translation id="4971687151119236543">Мултимедия, предишният запис</translation>
 <translation id="5046499563572181734">Докоснете тук</translation>
diff --git a/ui/strings/translations/ui_strings_ca.xtb b/ui/strings/translations/ui_strings_ca.xtb
index ba27593..8f48c34 100644
--- a/ui/strings/translations/ui_strings_ca.xtb
+++ b/ui/strings/translations/ui_strings_ca.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{D'aquí a 1 mes}other{D'aquí a # mesos}}</translation>
 <translation id="4841881773802181781">Inserció</translation>
 <translation id="4881695831933465202">Obre</translation>
+<translation id="4888938634149558681">Fes una trucada</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 segon}other{# segons}}</translation>
 <translation id="4971687151119236543">Fitxer multimèdia: pista anterior</translation>
 <translation id="5046499563572181734">Toca aquí</translation>
diff --git a/ui/strings/translations/ui_strings_cs.xtb b/ui/strings/translations/ui_strings_cs.xtb
index 7a63329..79b0438 100644
--- a/ui/strings/translations/ui_strings_cs.xtb
+++ b/ui/strings/translations/ui_strings_cs.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{zbývá 1 měsíc}few{zbývají # měsíce}many{zbývá # měsíce}other{zbývá # měsíců}}</translation>
 <translation id="4841881773802181781">Vložení</translation>
 <translation id="4881695831933465202">Otevřít</translation>
+<translation id="4888938634149558681">Volat</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekunda}few{# sekundy}many{# sekundy}other{# sekund}}</translation>
 <translation id="4971687151119236543">Média – předchozí skladba</translation>
 <translation id="5046499563572181734">Klepněte sem</translation>
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb
index d2faabf..746405e4 100644
--- a/ui/strings/translations/ui_strings_da.xtb
+++ b/ui/strings/translations/ui_strings_da.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Der er 1 måned tilbage}one{Der er # måned tilbage}other{Der er # måneder tilbage}}</translation>
 <translation id="4841881773802181781">Indsættelse</translation>
 <translation id="4881695831933465202">Åbn</translation>
+<translation id="4888938634149558681">Ring op</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekund}one{# sekunder}other{# sekunder}}</translation>
 <translation id="4971687151119236543">Medie: Forrige nummer</translation>
 <translation id="5046499563572181734">Tryk her</translation>
diff --git a/ui/strings/translations/ui_strings_de.xtb b/ui/strings/translations/ui_strings_de.xtb
index bb7ed91..bb72a05 100644
--- a/ui/strings/translations/ui_strings_de.xtb
+++ b/ui/strings/translations/ui_strings_de.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{noch 1 Monat}other{noch # Monate}}</translation>
 <translation id="4841881773802181781">Einfügen</translation>
 <translation id="4881695831933465202">Öffnen</translation>
+<translation id="4888938634149558681">Anrufen</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 Sekunde}other{# Sekunden}}</translation>
 <translation id="4971687151119236543">Medien – vorheriger Titel</translation>
 <translation id="5046499563572181734">Hier tippen</translation>
diff --git a/ui/strings/translations/ui_strings_el.xtb b/ui/strings/translations/ui_strings_el.xtb
index fc15f7d..17040cd 100644
--- a/ui/strings/translations/ui_strings_el.xtb
+++ b/ui/strings/translations/ui_strings_el.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Απομένει 1 μήνας}other{Απομένουν # μήνες}}</translation>
 <translation id="4841881773802181781">Εισαγωγή</translation>
 <translation id="4881695831933465202">Άνοιγμα</translation>
+<translation id="4888938634149558681">Πραγματοποίηση κλήσης</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 δευτερόλεπτο}other{# δευτερόλεπτα}}</translation>
 <translation id="4971687151119236543">Προηγούμενο κομμάτι πολυμέσων</translation>
 <translation id="5046499563572181734">Πατήστε εδώ</translation>
diff --git a/ui/strings/translations/ui_strings_es-419.xtb b/ui/strings/translations/ui_strings_es-419.xtb
index c0d33fe..29def97 100644
--- a/ui/strings/translations/ui_strings_es-419.xtb
+++ b/ui/strings/translations/ui_strings_es-419.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Queda 1 mes}other{Quedan # meses}}</translation>
 <translation id="4841881773802181781">Contenido agregado</translation>
 <translation id="4881695831933465202">Abrir</translation>
+<translation id="4888938634149558681">Realizar llamada</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 segundo}other{# segundos}}</translation>
 <translation id="4971687151119236543">Pista multimedia anterior</translation>
 <translation id="5046499563572181734">Presiona aquí</translation>
diff --git a/ui/strings/translations/ui_strings_es.xtb b/ui/strings/translations/ui_strings_es.xtb
index 275b47b..f467d64 100644
--- a/ui/strings/translations/ui_strings_es.xtb
+++ b/ui/strings/translations/ui_strings_es.xtb
@@ -8,7 +8,7 @@
 <translation id="1169783199079129864">{MINUTES,plural, =1{1 min}other{# min}}</translation>
 <translation id="1181037720776840403">Quitar</translation>
 <translation id="1243314992276662751">Subir</translation>
-<translation id="1266864766717917324">No se ha podido compartir <ph name="CONTENT_TYPE" /></translation>
+<translation id="1266864766717917324">No se ha podido compartir: <ph name="CONTENT_TYPE" /></translation>
 <translation id="1269641567813814718">Win</translation>
 <translation id="1290982764014248209">Se está moviendo <ph name="DRAGGED_APP" /> a la carpeta <ph name="FOLDER_NAME" />.</translation>
 <translation id="1291104554099683393">Prueba a compartir el texto dividiéndolo en partes más pequeñas.</translation>
@@ -18,7 +18,7 @@
 <translation id="1383876407941801731">Buscar</translation>
 <translation id="1398853756734560583">Maximizar</translation>
 <translation id="1409544243779336081">Aplicación recomendada</translation>
-<translation id="1450753235335490080">No se ha podido compartir <ph name="CONTENT_TYPE" /></translation>
+<translation id="1450753235335490080">No se ha podido compartir: <ph name="CONTENT_TYPE" /></translation>
 <translation id="1498028757988366001">Ya has buscado esto antes. Si eliminas "<ph name="QUERY" />" de tu historial, se eliminará de tu cuenta de forma permanente en todos tus dispositivos.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 minuto y }other{# minutos y }}</translation>
 <translation id="1643823602425662293">Notificación</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Queda 1 mes}other{Quedan # meses}}</translation>
 <translation id="4841881773802181781">Inserción</translation>
 <translation id="4881695831933465202">Abrir</translation>
+<translation id="4888938634149558681">Llamar</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 segundo}other{# segundos}}</translation>
 <translation id="4971687151119236543">Pista anterior multimedia</translation>
 <translation id="5046499563572181734">Toca aquí</translation>
diff --git a/ui/strings/translations/ui_strings_et.xtb b/ui/strings/translations/ui_strings_et.xtb
index 7c5d644..b6fad25 100644
--- a/ui/strings/translations/ui_strings_et.xtb
+++ b/ui/strings/translations/ui_strings_et.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 kuu jäänud}other{# kuud jäänud}}</translation>
 <translation id="4841881773802181781">Lisamine</translation>
 <translation id="4881695831933465202">Ava</translation>
+<translation id="4888938634149558681">Helista</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekund}other{# sekundit}}</translation>
 <translation id="4971687151119236543">Meediumi eelmine lugu</translation>
 <translation id="5046499563572181734">Puudutage siin</translation>
diff --git a/ui/strings/translations/ui_strings_fa.xtb b/ui/strings/translations/ui_strings_fa.xtb
index a11c4998..bdc4561 100644
--- a/ui/strings/translations/ui_strings_fa.xtb
+++ b/ui/strings/translations/ui_strings_fa.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{۱ ماه باقی مانده است}one{# ماه باقی مانده است}other{# ماه باقی مانده است}}</translation>
 <translation id="4841881773802181781">درج</translation>
 <translation id="4881695831933465202">باز کردن</translation>
+<translation id="4888938634149558681">برقراری تماس</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{۱ ثانیه}one{# ثانیه}other{# ثانیه}}</translation>
 <translation id="4971687151119236543">آهنگ قبلی رسانه</translation>
 <translation id="5046499563572181734">در اینجا ضربه بزنید</translation>
diff --git a/ui/strings/translations/ui_strings_fi.xtb b/ui/strings/translations/ui_strings_fi.xtb
index 22e468e..0e74e231 100644
--- a/ui/strings/translations/ui_strings_fi.xtb
+++ b/ui/strings/translations/ui_strings_fi.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 kuukausi jäljellä}other{# kuukautta jäljellä}}</translation>
 <translation id="4841881773802181781">Lisäys</translation>
 <translation id="4881695831933465202">Avaa</translation>
+<translation id="4888938634149558681">Soita</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekunti}other{# sekuntia}}</translation>
 <translation id="4971687151119236543">Media: edellinen kappale</translation>
 <translation id="5046499563572181734">Napauta tätä</translation>
diff --git a/ui/strings/translations/ui_strings_fr.xtb b/ui/strings/translations/ui_strings_fr.xtb
index f763d987..c609b00 100644
--- a/ui/strings/translations/ui_strings_fr.xtb
+++ b/ui/strings/translations/ui_strings_fr.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 mois restant}one{# mois restant}other{# mois restants}}</translation>
 <translation id="4841881773802181781">Insertion</translation>
 <translation id="4881695831933465202">Ouvrir</translation>
+<translation id="4888938634149558681">Passer un appel</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 seconde}one{# seconde}other{# secondes}}</translation>
 <translation id="4971687151119236543">Contenu multimédia : titre précédent</translation>
 <translation id="5046499563572181734">Appuyez ici</translation>
diff --git a/ui/strings/translations/ui_strings_hi.xtb b/ui/strings/translations/ui_strings_hi.xtb
index 076bbe2..154c939 100644
--- a/ui/strings/translations/ui_strings_hi.xtb
+++ b/ui/strings/translations/ui_strings_hi.xtb
@@ -8,14 +8,17 @@
 <translation id="1169783199079129864">{MINUTES,plural, =1{1 मिनट}one{# मिनट}other{# मिनट}}</translation>
 <translation id="1181037720776840403">हटाएं</translation>
 <translation id="1243314992276662751">अपलोड करें</translation>
+<translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> शेयर नहीं किया जा सका</translation>
 <translation id="1269641567813814718">Win</translation>
 <translation id="1290982764014248209"><ph name="DRAGGED_APP" /> को फ़ोल्डर <ph name="FOLDER_NAME" /> पर ले जाएं.</translation>
+<translation id="1291104554099683393">टेक्स्ट को छोटे-छोटे हिस्सों में शेयर करने की कोशिश करें.</translation>
 <translation id="1293699935367580298">Esc</translation>
 <translation id="1306549533752902673">सुझाए गए ऐप्लिकेशन</translation>
 <translation id="1368832886055348810">बाएं से दाएं</translation>
 <translation id="1383876407941801731">खोजें</translation>
 <translation id="1398853756734560583">बड़ा करें</translation>
 <translation id="1409544243779336081">ऐप्लिकेशन का सुझाव</translation>
+<translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> शेयर नहीं किया जा सकता</translation>
 <translation id="1498028757988366001">आपने पहले इसे खोजा है. अगर आप "<ph name="QUERY" />" को अपने इतिहास से मिटा देते हैं, तो यह सभी डिवाइस पर मौजूद आपके खाते से हटा दिया जाएगा.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 मिनट और }one{# मिनट और }other{# मिनट और }}</translation>
 <translation id="1643823602425662293">सूचना</translation>
@@ -35,6 +38,7 @@
 <translation id="1884435127456172652"><ph name="NUMBER" /> %</translation>
 <translation id="1901303067676059328">&amp;सभी को चुनें</translation>
 <translation id="1938451708255335766">विंडो डिसप्ले की सघनता में बदलाव करने के लिए, ऐप्लिकेशन को रीस्टार्ट करें.</translation>
+<translation id="2006524834898217237">पक्का करें कि यह डिवाइस इंटरनेट से कनेक्ट है.</translation>
 <translation id="208586643495776849">कृपया दोबारा कोशिश करें</translation>
 <translation id="2141853158323869627">{DAYS,plural, =1{1d}one{#d}other{#d}}</translation>
 <translation id="2148716181193084225">आज</translation>
@@ -76,6 +80,7 @@
 <translation id="3291688615589870984">{DAYS,plural, =1{1 दिन}one{# दिन}other{# दिन}}</translation>
 <translation id="3295886253693811851">कॉल करने के लिए एक विकल्प चुनें</translation>
 <translation id="335581015389089642">बोली</translation>
+<translation id="3389286852084373014">टेक्स्ट बहुत बड़ा है</translation>
 <translation id="3443810440409579745">टैब मिला.</translation>
 <translation id="3479552764303398839">अभी नहीं</translation>
 <translation id="348799646910989694">शेल्फ़ के अपने आप छिपने की सुविधा चालू है</translation>
@@ -151,11 +156,13 @@
 <translation id="6404817160109697034">{SECONDS,plural, =1{1 सेकंड पहले}one{# सेकंड पहले}other{# सेकंड पहले}}</translation>
 <translation id="6430678249303439055">इस ऐप्लिकेशन से सभी सूचनाएं ब्लॉक करें</translation>
 <translation id="6483402905448010557">{SECONDS,plural, =1{1 सेकंड पहले}one{# सेकंड पहले}other{# सेकंड पहले}}</translation>
+<translation id="6539092367496845964">कोई गड़बड़ी हुई. बाद में कोशिश करें.</translation>
 <translation id="654149438358937226">सभी सूचनाएं ब्लॉक करें</translation>
 <translation id="6567071839949112727">पहले वाले पर क्लिक करें</translation>
 <translation id="6578407462441924264">कोई नाम नहीं</translation>
 <translation id="6612467943526193239">कैलिब्रेशन से बाहर निकलने के लिए Esc दबाएं.</translation>
 <translation id="6620110761915583480">फ़ाइल सेव करें</translation>
+<translation id="6656912866303152668">पक्का करें कि Chrome में <ph name="TARGET_DEVICE_NAME" /> सिंक करने की सुविधा चालू है. इसके बाद, फिर से भेजने की कोशिश करें.</translation>
 <translation id="6699343763173986273">मीडिया अगला ट्रैक</translation>
 <translation id="673773751041746814">मिटाना</translation>
 <translation id="6779314412797872738">यहां से अपने फ़ोन पर नंबर भेजने के लिए, सेटिंग में जाकर दोनों डिवाइस के लिए <ph name="TROUBLESHOOT_LINK" /> इस्तेमाल करें.</translation>
@@ -221,6 +228,7 @@
 <translation id="8876215549894133151">प्रारूप:</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY" /> केबी</translation>
 <translation id="8926951137623668982">शेल्फ़ को हमेशा के लिए छिपाकर रखा गया है</translation>
+<translation id="8996630695507351249">पक्का करें कि <ph name="TARGET_DEVICE_NAME" /> इंटरनेट से कनेक्ट है.</translation>
 <translation id="9002566407876343676">खोलें</translation>
 <translation id="9039076430527029379">पेज <ph name="PAGE_NUMBER" />, पंक्ति <ph name="ROW_NUMBER" />, कॉलम <ph name="COLUMN_NUMBER" /> पर जाएं.</translation>
 <translation id="9044832324875206639">{SECONDS,plural, =1{1 सेकंड}one{# सेकंड}other{# सेकंड}}</translation>
diff --git a/ui/strings/translations/ui_strings_hr.xtb b/ui/strings/translations/ui_strings_hr.xtb
index cfe880b..59528f58 100644
--- a/ui/strings/translations/ui_strings_hr.xtb
+++ b/ui/strings/translations/ui_strings_hr.xtb
@@ -11,7 +11,7 @@
 <translation id="1266864766717917324">Nije moguće podijeliti <ph name="CONTENT_TYPE" /></translation>
 <translation id="1269641567813814718">Win</translation>
 <translation id="1290982764014248209">Premjesti aplikaciju <ph name="DRAGGED_APP" /> u mapu <ph name="FOLDER_NAME" />.</translation>
-<translation id="1291104554099683393">Pokušajte podijeliti tekst u manje dijelove.</translation>
+<translation id="1291104554099683393">Pokušajte podijeliti tekst u manjim dijelovima.</translation>
 <translation id="1293699935367580298">Esc</translation>
 <translation id="1306549533752902673">PREPORUČENE APLIKACIJE</translation>
 <translation id="1368832886055348810">Slijeva udesno</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Još mjesec dana}one{Još # mjesec}few{Još # mjeseca}other{Još # mjeseci}}</translation>
 <translation id="4841881773802181781">Umetanje</translation>
 <translation id="4881695831933465202">Otvori</translation>
+<translation id="4888938634149558681">Uputi poziv</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekunda}one{# sekunda}few{# sekunde}other{# sekundi}}</translation>
 <translation id="4971687151119236543">Prethodni zapis Medija</translation>
 <translation id="5046499563572181734">Dodirnite ovdje</translation>
diff --git a/ui/strings/translations/ui_strings_hu.xtb b/ui/strings/translations/ui_strings_hu.xtb
index ccb3698..ab181ad 100644
--- a/ui/strings/translations/ui_strings_hu.xtb
+++ b/ui/strings/translations/ui_strings_hu.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{hátralévő idő: 1 hónap}other{hátralévő idő: # hónap}}</translation>
 <translation id="4841881773802181781">Beszúrás</translation>
 <translation id="4881695831933465202">Megnyitás</translation>
+<translation id="4888938634149558681">Hívás indítása</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 másodperc}other{# másodperc}}</translation>
 <translation id="4971687151119236543">Előző szám</translation>
 <translation id="5046499563572181734">Koppintson ide</translation>
diff --git a/ui/strings/translations/ui_strings_it.xtb b/ui/strings/translations/ui_strings_it.xtb
index cb4fb216..3d311e91 100644
--- a/ui/strings/translations/ui_strings_it.xtb
+++ b/ui/strings/translations/ui_strings_it.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 mese rimasto}other{# mesi rimasti}}</translation>
 <translation id="4841881773802181781">Inserimento</translation>
 <translation id="4881695831933465202">Apri</translation>
+<translation id="4888938634149558681">Chiama</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 secondo}other{# secondi}}</translation>
 <translation id="4971687151119236543">Traccia precedente contenuti multimediali</translation>
 <translation id="5046499563572181734">Tocca qui</translation>
diff --git a/ui/strings/translations/ui_strings_iw.xtb b/ui/strings/translations/ui_strings_iw.xtb
index d6d95f90..27a554bd 100644
--- a/ui/strings/translations/ui_strings_iw.xtb
+++ b/ui/strings/translations/ui_strings_iw.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{נותר חודש אחד}two{נותרו חודשיים}many{נותרו # חודשים}other{נותרו # חודשים}}</translation>
 <translation id="4841881773802181781">הוספה</translation>
 <translation id="4881695831933465202">פתיחה</translation>
+<translation id="4888938634149558681">התקשרות</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{שנייה אחת}two{# שניות}many{# שניות}other{# שניות}}</translation>
 <translation id="4971687151119236543">רצועה קודמת במדיה</translation>
 <translation id="5046499563572181734">הקש כאן</translation>
diff --git a/ui/strings/translations/ui_strings_ja.xtb b/ui/strings/translations/ui_strings_ja.xtb
index 78eaaf0..2efe073b 100644
--- a/ui/strings/translations/ui_strings_ja.xtb
+++ b/ui/strings/translations/ui_strings_ja.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{残り 1 か月}other{残り # か月}}</translation>
 <translation id="4841881773802181781">挿入</translation>
 <translation id="4881695831933465202">開く</translation>
+<translation id="4888938634149558681">電話をかける</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 秒}other{# 秒}}</translation>
 <translation id="4971687151119236543">メディアの前のトラック</translation>
 <translation id="5046499563572181734">ここをタップしてください</translation>
diff --git a/ui/strings/translations/ui_strings_kn.xtb b/ui/strings/translations/ui_strings_kn.xtb
index 1d5fffa..4ca05275 100644
--- a/ui/strings/translations/ui_strings_kn.xtb
+++ b/ui/strings/translations/ui_strings_kn.xtb
@@ -8,14 +8,17 @@
 <translation id="1169783199079129864">{MINUTES,plural, =1{1ಮೀ}one{#ಮೀ}other{#ಮೀ}}</translation>
 <translation id="1181037720776840403">ತೆಗೆದುಹಾಕು</translation>
 <translation id="1243314992276662751">ಅಪ್‌ಲೋಡ್</translation>
+<translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="1269641567813814718">Win</translation>
 <translation id="1290982764014248209"><ph name="FOLDER_NAME" /> ಫೋಲ್ಡರ್‌ಗೆ <ph name="DRAGGED_APP" /> ಅನ್ನು ಸರಿಸಿ.</translation>
+<translation id="1291104554099683393">ಪಠ್ಯವನ್ನು ಸಣ್ಣ ಭಾಗಗಳಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1293699935367580298">Esc</translation>
 <translation id="1306549533752902673">ಶಿಫಾರಸು ಮಾಡಲಾದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು</translation>
 <translation id="1368832886055348810">ಎಡದಿಂದ ಬಲಕ್ಕೆ</translation>
 <translation id="1383876407941801731">ಹುಡುಕಾಟ</translation>
 <translation id="1398853756734560583">ಗರಿಷ್ಠಗೊಳಿಸು</translation>
 <translation id="1409544243779336081">ಆ್ಯಪ್ ಶಿಫಾರಸು</translation>
+<translation id="1450753235335490080"><ph name="CONTENT_TYPE" />ವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="1498028757988366001">ನೀವು ಈ ಮೊದಲೇ ಇದಕ್ಕಾಗಿ ಹುಡುಕಿದ್ದೀರಿ. ನಿಮ್ಮ ಇತಿಹಾಸದಿಂದ "<ph name="QUERY" />" ಅನ್ನು ಅಳಿಸುವುದರಿಂದ, ಅದನ್ನು ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಾದ್ಯಂತ ಇರುವ ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 ನಿಮಿಷ ಮತ್ತು }one{# ನಿಮಿಷಗಳು ಮತ್ತು }other{# ನಿಮಿಷಗಳು ಮತ್ತು }}</translation>
 <translation id="1643823602425662293">ಅಧಿಸೂಚನೆ</translation>
@@ -35,6 +38,7 @@
 <translation id="1884435127456172652"><ph name="NUMBER" /> %</translation>
 <translation id="1901303067676059328">&amp;ಎಲ್ಲ ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="1938451708255335766">ವಿಂಡೋ ಡಿಸ್‌ಪ್ಲೇ ಸಾಂದ್ರತೆಯನ್ನು ಸರಿಹೊಂದಿಸಲು, ಆ್ಯಪ್ ಮರುಪ್ರಾರಂಭಿಸಿ.</translation>
+<translation id="2006524834898217237">ಈ ಸಾಧನವು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation>
 <translation id="208586643495776849">ಪುನಃ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="2141853158323869627">{DAYS,plural, =1{1ದಿ}one{#ದಿ}other{#ದಿ}}</translation>
 <translation id="2148716181193084225">ಇಂದು</translation>
@@ -76,6 +80,7 @@
 <translation id="3291688615589870984">{DAYS,plural, =1{1 ದಿನ}one{# ದಿನಗಳು}other{# ದಿನಗಳು}}</translation>
 <translation id="3295886253693811851">ಈ ಸಾಧನದಿಂದ ಕರೆ ಮಾಡಿ</translation>
 <translation id="335581015389089642">ಧ್ವನಿ</translation>
+<translation id="3389286852084373014">ಪಠ್ಯ ತುಂಬಾ ದೊಡ್ಡದಾಗಿದೆ</translation>
 <translation id="3443810440409579745">ಟ್ಯಾಬ್ ಅನ್ನು ಸ್ವೀಕರಿಸಲಾಗಿದೆ.</translation>
 <translation id="3479552764303398839">ಈಗ ಬೇಡ</translation>
 <translation id="348799646910989694">ಶೆಲ್ಫ್ ಸ್ವಯಂ ಮರೆಯಾಗಿದೆ</translation>
@@ -108,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 ತಿಂಗಳು ಉಳಿದಿದೆ}one{# ತಿಂಗಳುಗಳು ಉಳಿದಿವೆ}other{# ತಿಂಗಳುಗಳು ಉಳಿದಿವೆ}}</translation>
 <translation id="4841881773802181781">ಅಳವಡಿಕೆ</translation>
 <translation id="4881695831933465202">ತೆರೆ</translation>
+<translation id="4888938634149558681">ಕರೆ ಮಾಡಿ</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 ಸೆಕೆಂಡ್}one{# ಸೆಕೆಂಡುಗಳು}other{# ಸೆಕೆಂಡುಗಳು}}</translation>
 <translation id="4971687151119236543">ಮೀಡಿಯಾದ ಹಿಂದಿನ ಟ್ರ್ಯಾಕ್</translation>
 <translation id="5046499563572181734">ಇಲ್ಲಿ ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
@@ -151,11 +157,13 @@
 <translation id="6404817160109697034">{SECONDS,plural, =1{1 ಸೆಕೆಂ ಹಿಂದೆ}one{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}other{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}}</translation>
 <translation id="6430678249303439055">ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಎಲ್ಲಾ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="6483402905448010557">{SECONDS,plural, =1{1 ಸೆಕೆಂಡ್ ಹಿಂದೆ}one{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}other{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}}</translation>
+<translation id="6539092367496845964">ಏನೋ ತಪ್ಪಾಗಿದೆ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="654149438358937226">ಎಲ್ಲಾ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="6567071839949112727">ಪೂರ್ವಜರನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ</translation>
 <translation id="6578407462441924264">ಹೆಸರಿಸದಿರುವುದು</translation>
 <translation id="6612467943526193239">ಮಾಪನಾಂಕದಿಂದ ನಿರ್ಗಮಿಸಲು Esc ಒತ್ತಿರಿ.</translation>
 <translation id="6620110761915583480">ಫೈಲ್ ಉಳಿಸು</translation>
+<translation id="6656912866303152668">Chrome ನಲ್ಲಿ <ph name="TARGET_DEVICE_NAME" /> ಸಾಧನದ ಸಿಂಕ್ ಆನ್ ಆಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ, ತದನಂತರ ಮತ್ತೆ ಕಳುಹಿಸಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="6699343763173986273">ಮೀಡಿಯಾದ ಮುಂದಿನ ಟ್ರ್ಯಾಕ್</translation>
 <translation id="673773751041746814">ಅಳಿಸುವಿಕೆ</translation>
 <translation id="6779314412797872738">ಇಲ್ಲಿಂದ ನಿಮ್ಮ Android ಫೋನ್‌ಗೆ ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ಕಳುಹಿಸಲು, ಎರಡೂ ಸಾಧನಗಳಿಗಾಗಿ, ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ <ph name="TROUBLESHOOT_LINK" />.</translation>
@@ -221,6 +229,7 @@
 <translation id="8876215549894133151">ಸ್ವರೂಪ:</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
 <translation id="8926951137623668982">ಶೆಲ್ಫ್ ಯಾವಾಗಲೂ ಮರೆಯಾಗಿದೆ</translation>
+<translation id="8996630695507351249"><ph name="TARGET_DEVICE_NAME" /> ಸಾಧನವು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation>
 <translation id="9002566407876343676">ತೆರೆ</translation>
 <translation id="9039076430527029379">ಪುಟ <ph name="PAGE_NUMBER" />, ಅಡ್ಡಸಾಲು <ph name="ROW_NUMBER" />, ಕಾಲಮ್ <ph name="COLUMN_NUMBER" /> ಗೆ ಸರಿಸಿ.</translation>
 <translation id="9044832324875206639">{SECONDS,plural, =1{1 ಸೆಕೆಂಡ್}one{# ಸೆಕೆಂಡುಗಳು}other{# ಸೆಕೆಂಡುಗಳು}}</translation>
diff --git a/ui/strings/translations/ui_strings_lv.xtb b/ui/strings/translations/ui_strings_lv.xtb
index 267c1699..d57896d 100644
--- a/ui/strings/translations/ui_strings_lv.xtb
+++ b/ui/strings/translations/ui_strings_lv.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Atlicis 1 mēnesis}zero{Atlikuši # mēneši}one{Atlicis # mēnesis}other{Atlikuši # mēneši}}</translation>
 <translation id="4841881773802181781">Ievietošana</translation>
 <translation id="4881695831933465202">Atvērt</translation>
+<translation id="4888938634149558681">Zvanīt</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekunde}zero{# sekundes}one{# sekunde}other{# sekundes}}</translation>
 <translation id="4971687151119236543">Multivide — iepriekšējā dziesma</translation>
 <translation id="5046499563572181734">Pieskarieties šeit</translation>
diff --git a/ui/strings/translations/ui_strings_ms.xtb b/ui/strings/translations/ui_strings_ms.xtb
index 10db128..c5181725 100644
--- a/ui/strings/translations/ui_strings_ms.xtb
+++ b/ui/strings/translations/ui_strings_ms.xtb
@@ -38,7 +38,7 @@
 <translation id="1884435127456172652"><ph name="NUMBER" /> %</translation>
 <translation id="1901303067676059328">Pilih &amp;semua</translation>
 <translation id="1938451708255335766">Untuk melaraskan ketumpatan paparan tetingkap, mulakan semula apl.</translation>
-<translation id="2006524834898217237">Pastikan peranti ini disambungkan ke internet.</translation>
+<translation id="2006524834898217237">Pastikan peranti ini disambungkan ke Internet.</translation>
 <translation id="208586643495776849">Sila cuba lagi</translation>
 <translation id="2141853158323869627">{DAYS,plural, =1{1h}other{#h}}</translation>
 <translation id="2148716181193084225">Hari ini</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Berbaki 1 bulan}other{Berbaki # bulan}}</translation>
 <translation id="4841881773802181781">Penyisipan</translation>
 <translation id="4881695831933465202">Buka</translation>
+<translation id="4888938634149558681">Buat panggilan</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 saat}other{# saat}}</translation>
 <translation id="4971687151119236543">Lagu Media Sebelumnya</translation>
 <translation id="5046499563572181734">Ketik di sini</translation>
@@ -228,7 +229,7 @@
 <translation id="8876215549894133151">Format:</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
 <translation id="8926951137623668982">Rak sentiasa disembunyikan</translation>
-<translation id="8996630695507351249">Pastikan <ph name="TARGET_DEVICE_NAME" /> disambungkan ke internet.</translation>
+<translation id="8996630695507351249">Pastikan <ph name="TARGET_DEVICE_NAME" /> disambungkan ke Internet.</translation>
 <translation id="9002566407876343676">buka</translation>
 <translation id="9039076430527029379">Beralih ke Halaman <ph name="PAGE_NUMBER" />, baris <ph name="ROW_NUMBER" />, lajur <ph name="COLUMN_NUMBER" />.</translation>
 <translation id="9044832324875206639">{SECONDS,plural, =1{1 saat}other{# saat}}</translation>
diff --git a/ui/strings/translations/ui_strings_nl.xtb b/ui/strings/translations/ui_strings_nl.xtb
index 5936624..4d8e9cc6 100644
--- a/ui/strings/translations/ui_strings_nl.xtb
+++ b/ui/strings/translations/ui_strings_nl.xtb
@@ -11,7 +11,7 @@
 <translation id="1266864766717917324">Kan <ph name="CONTENT_TYPE" /> niet delen</translation>
 <translation id="1269641567813814718">Win</translation>
 <translation id="1290982764014248209"><ph name="DRAGGED_APP" /> verplaatsen naar map <ph name="FOLDER_NAME" />.</translation>
-<translation id="1291104554099683393">Probeer de tekst in kleinere gedeelten te delen.</translation>
+<translation id="1291104554099683393">Verdeel de tekst in kleinere stukken en deel in meerdere keren.</translation>
 <translation id="1293699935367580298">Esc</translation>
 <translation id="1306549533752902673">AANBEVOLEN APPS</translation>
 <translation id="1368832886055348810">Links naar rechts</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Nog 1 maand}other{Nog # maanden}}</translation>
 <translation id="4841881773802181781">Invoeging</translation>
 <translation id="4881695831933465202">Openen</translation>
+<translation id="4888938634149558681">Bellen</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 seconde}other{# seconden}}</translation>
 <translation id="4971687151119236543">Vorige track voor media</translation>
 <translation id="5046499563572181734">Tik hier</translation>
diff --git a/ui/strings/translations/ui_strings_pl.xtb b/ui/strings/translations/ui_strings_pl.xtb
index a5254ec4..7f98855e 100644
--- a/ui/strings/translations/ui_strings_pl.xtb
+++ b/ui/strings/translations/ui_strings_pl.xtb
@@ -8,7 +8,7 @@
 <translation id="1169783199079129864">{MINUTES,plural, =1{1 min}few{# min}many{# min}other{# min}}</translation>
 <translation id="1181037720776840403">Usuń</translation>
 <translation id="1243314992276662751">Prześlij</translation>
-<translation id="1266864766717917324">Nie udało się udostępnić <ph name="CONTENT_TYPE" /></translation>
+<translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> – nie udało się udostępnić</translation>
 <translation id="1269641567813814718">Windows</translation>
 <translation id="1290982764014248209">Przenieś aplikację <ph name="DRAGGED_APP" /> do folderu <ph name="FOLDER_NAME" />.</translation>
 <translation id="1291104554099683393">Spróbuj udostępnić jego mniejsze fragmenty.</translation>
@@ -18,7 +18,7 @@
 <translation id="1383876407941801731">Szukaj</translation>
 <translation id="1398853756734560583">Maksymalizuj</translation>
 <translation id="1409544243779336081">Rekomendacja aplikacji</translation>
-<translation id="1450753235335490080">Nie udało się udostępnić <ph name="CONTENT_TYPE" /></translation>
+<translation id="1450753235335490080"><ph name="CONTENT_TYPE" />: nie udało się udostępnić</translation>
 <translation id="1498028757988366001">Z Twojej historii wyszukiwania. Jeśli usuniesz zapytanie „<ph name="QUERY" />” z historii, zostanie ono trwale usunięte z Twojego konta na wszystkich urządzeniach.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 minuta i }few{# minuty i }many{# minut i }other{# minuty i }}</translation>
 <translation id="1643823602425662293">Powiadomienie</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Pozostał miesiąc}few{Pozostały # miesiące}many{Pozostało # miesięcy}other{Pozostało # miesiąca}}</translation>
 <translation id="4841881773802181781">Wstawienie</translation>
 <translation id="4881695831933465202">Otwórz</translation>
+<translation id="4888938634149558681">Zadzwoń</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekunda}few{# sekundy}many{# sekund}other{# sekundy}}</translation>
 <translation id="4971687151119236543">Poprzedni utwór multimedialny</translation>
 <translation id="5046499563572181734">Kliknij tutaj</translation>
diff --git a/ui/strings/translations/ui_strings_pt-BR.xtb b/ui/strings/translations/ui_strings_pt-BR.xtb
index 8dd8aea..fba8095 100644
--- a/ui/strings/translations/ui_strings_pt-BR.xtb
+++ b/ui/strings/translations/ui_strings_pt-BR.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 mês restante}one{# mês restante}other{# meses restantes}}</translation>
 <translation id="4841881773802181781">Inserção</translation>
 <translation id="4881695831933465202">Abrir</translation>
+<translation id="4888938634149558681">Fazer chamada</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{Um segundo}one{# segundos}other{# segundos}}</translation>
 <translation id="4971687151119236543">Faixa anterior da mídia</translation>
 <translation id="5046499563572181734">Toque aqui</translation>
diff --git a/ui/strings/translations/ui_strings_pt-PT.xtb b/ui/strings/translations/ui_strings_pt-PT.xtb
index 670a9bf..133523af 100644
--- a/ui/strings/translations/ui_strings_pt-PT.xtb
+++ b/ui/strings/translations/ui_strings_pt-PT.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Falta 1 mês}other{Faltam # meses}}</translation>
 <translation id="4841881773802181781">Inserção</translation>
 <translation id="4881695831933465202">Abrir</translation>
+<translation id="4888938634149558681">Efetuar chamada</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 segundo}other{# segundos}}</translation>
 <translation id="4971687151119236543">Faixa anterior de multimédia</translation>
 <translation id="5046499563572181734">Toque aqui</translation>
diff --git a/ui/strings/translations/ui_strings_ro.xtb b/ui/strings/translations/ui_strings_ro.xtb
index 61df50c..ed63543 100644
--- a/ui/strings/translations/ui_strings_ro.xtb
+++ b/ui/strings/translations/ui_strings_ro.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 lună rămasă}few{# luni rămase}other{# de luni rămase}}</translation>
 <translation id="4841881773802181781">Inserare</translation>
 <translation id="4881695831933465202">Deschide</translation>
+<translation id="4888938634149558681">Apelează</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{o secundă}few{# secunde}other{# de secunde}}</translation>
 <translation id="4971687151119236543">Melodia anterioară din conținutul media</translation>
 <translation id="5046499563572181734">Atinge aici</translation>
@@ -162,7 +163,7 @@
 <translation id="6578407462441924264">Nedenumit</translation>
 <translation id="6612467943526193239">Pentru a ieși din calibrare, apasă pe Esc.</translation>
 <translation id="6620110761915583480">Salvează fișierul</translation>
-<translation id="6656912866303152668">Asigură-te că <ph name="TARGET_DEVICE_NAME" /> are sincronizarea activată în Chrome, apoi încearcă să trimiți din nou.</translation>
+<translation id="6656912866303152668">Asigură-te că dispozitivul <ph name="TARGET_DEVICE_NAME" /> are sincronizarea activată în Chrome, apoi încearcă să trimiți din nou.</translation>
 <translation id="6699343763173986273">Melodia următoare din conținutul media</translation>
 <translation id="673773751041746814">Ștergere</translation>
 <translation id="6779314412797872738">Pentru a trimite un număr de aici pe telefonul Android, <ph name="TROUBLESHOOT_LINK" /> pentru ambele dispozitive din setări.</translation>
@@ -228,7 +229,7 @@
 <translation id="8876215549894133151">Format:</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY" /> KO</translation>
 <translation id="8926951137623668982">Raftul este ascuns mereu</translation>
-<translation id="8996630695507351249">Asigură-te că <ph name="TARGET_DEVICE_NAME" /> este conectat la internet.</translation>
+<translation id="8996630695507351249">Asigură-te că dispozitivul <ph name="TARGET_DEVICE_NAME" /> este conectat la internet.</translation>
 <translation id="9002566407876343676">deschide</translation>
 <translation id="9039076430527029379">Mută la pagina <ph name="PAGE_NUMBER" />, rândul <ph name="ROW_NUMBER" />, coloana <ph name="COLUMN_NUMBER" />.</translation>
 <translation id="9044832324875206639">{SECONDS,plural, =1{O sec.}few{# sec.}other{# sec.}}</translation>
diff --git a/ui/strings/translations/ui_strings_ru.xtb b/ui/strings/translations/ui_strings_ru.xtb
index 9940120..fbc56de 100644
--- a/ui/strings/translations/ui_strings_ru.xtb
+++ b/ui/strings/translations/ui_strings_ru.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{остался 1 месяц}one{остался # месяц}few{осталось # месяца}many{осталось # месяцев}other{осталось # месяца}}</translation>
 <translation id="4841881773802181781">Вставка</translation>
 <translation id="4881695831933465202">Открыть</translation>
+<translation id="4888938634149558681">Позвонить</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 секунда}one{# секунда}few{# секунды}many{# секунд}other{# секунды}}</translation>
 <translation id="4971687151119236543">Предыдущий трек</translation>
 <translation id="5046499563572181734">Нажмите здесь</translation>
diff --git a/ui/strings/translations/ui_strings_sk.xtb b/ui/strings/translations/ui_strings_sk.xtb
index 8b7d727..35ba8cb6 100644
--- a/ui/strings/translations/ui_strings_sk.xtb
+++ b/ui/strings/translations/ui_strings_sk.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{zostáva 1 mesiac}few{zostávajú # mesiace}many{zostáva # mesiaca}other{zostáva # mesiacov}}</translation>
 <translation id="4841881773802181781">Vloženie</translation>
 <translation id="4881695831933465202">Otvoriť</translation>
+<translation id="4888938634149558681">Volať</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekunda}few{# sekundy}many{# sekundy}other{# sekúnd}}</translation>
 <translation id="4971687151119236543">Média – predchádzajúca stopa</translation>
 <translation id="5046499563572181734">Klepnite tu</translation>
diff --git a/ui/strings/translations/ui_strings_sl.xtb b/ui/strings/translations/ui_strings_sl.xtb
index 63cab6f..d13e7843 100644
--- a/ui/strings/translations/ui_strings_sl.xtb
+++ b/ui/strings/translations/ui_strings_sl.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Še 1 mesec}one{Še # mesec}two{Še # meseca}few{Še # mesece}other{Še # mesecev}}</translation>
 <translation id="4841881773802181781">Vstavljanje</translation>
 <translation id="4881695831933465202">Odpri</translation>
+<translation id="4888938634149558681">Pokliči</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 s}one{# s}two{# s}few{# s}other{# s}}</translation>
 <translation id="4971687151119236543">Prejšnja skladba</translation>
 <translation id="5046499563572181734">Dotaknite se tukaj</translation>
diff --git a/ui/strings/translations/ui_strings_sr.xtb b/ui/strings/translations/ui_strings_sr.xtb
index a1e45bcd..5616728 100644
--- a/ui/strings/translations/ui_strings_sr.xtb
+++ b/ui/strings/translations/ui_strings_sr.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Још 1 месец}one{Још # месец}few{Још # месеца}other{Још # месеци}}</translation>
 <translation id="4841881773802181781">Уметање</translation>
 <translation id="4881695831933465202">Отвори</translation>
+<translation id="4888938634149558681">Позови</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 секунда}one{# секунда}few{# секунде}other{# секунди}}</translation>
 <translation id="4971687151119236543">Претходна песма медија</translation>
 <translation id="5046499563572181734">Додирните овде</translation>
diff --git a/ui/strings/translations/ui_strings_ta.xtb b/ui/strings/translations/ui_strings_ta.xtb
index 0bb2638..6df6922 100644
--- a/ui/strings/translations/ui_strings_ta.xtb
+++ b/ui/strings/translations/ui_strings_ta.xtb
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{1 மாதம் உள்ளது}other{# மாதங்கள் உள்ளன}}</translation>
 <translation id="4841881773802181781">செருகும்</translation>
 <translation id="4881695831933465202">திற</translation>
+<translation id="4888938634149558681">அழை</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 நொடி}other{# நொடிகள்}}</translation>
 <translation id="4971687151119236543">ஊடகத்தின் முந்தைய டிராக்</translation>
 <translation id="5046499563572181734">இங்கே தட்டவும்</translation>
diff --git a/ui/strings/translations/ui_strings_th.xtb b/ui/strings/translations/ui_strings_th.xtb
index 1a91f626..29d1c0ef 100644
--- a/ui/strings/translations/ui_strings_th.xtb
+++ b/ui/strings/translations/ui_strings_th.xtb
@@ -18,7 +18,7 @@
 <translation id="1383876407941801731">ค้นหา</translation>
 <translation id="1398853756734560583">ย่อ</translation>
 <translation id="1409544243779336081">แอปแนะนำ</translation>
-<translation id="1450753235335490080">แชร์<ph name="CONTENT_TYPE" />ไม่ได้</translation>
+<translation id="1450753235335490080">แชร์<ph name="CONTENT_TYPE" />ไม่สำเร็จ</translation>
 <translation id="1498028757988366001">คุณเคยค้นหารายการนี้ การลบ "<ph name="QUERY" />" ออกจากประวัติการเข้าชมจะนำรายการนี้ออกจากบัญชีของคุณในอุปกรณ์ทุกเครื่องอย่างถาวร</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 นาทีกับอีก }other{# นาทีกับอีก }}</translation>
 <translation id="1643823602425662293">การแจ้งเตือน</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{เหลือ 1 เดือน}other{เหลือ # เดือน}}</translation>
 <translation id="4841881773802181781">การแทรก</translation>
 <translation id="4881695831933465202">เปิด</translation>
+<translation id="4888938634149558681">โทรออก</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 วินาที}other{# วินาที}}</translation>
 <translation id="4971687151119236543">แทร็กก่อนหน้าของสื่อ</translation>
 <translation id="5046499563572181734">แตะที่นี่</translation>
diff --git a/ui/strings/translations/ui_strings_uk.xtb b/ui/strings/translations/ui_strings_uk.xtb
index ef864d89b..a019cec7 100644
--- a/ui/strings/translations/ui_strings_uk.xtb
+++ b/ui/strings/translations/ui_strings_uk.xtb
@@ -8,7 +8,7 @@
 <translation id="1169783199079129864">{MINUTES,plural, =1{1 хв}one{# хв}few{# хв}many{# хв}other{# хв}}</translation>
 <translation id="1181037720776840403">Видалити</translation>
 <translation id="1243314992276662751">Завантажити</translation>
-<translation id="1266864766717917324">Не вдалося надіслати контент (<ph name="CONTENT_TYPE" />)</translation>
+<translation id="1266864766717917324">Не вдалося надіслати: <ph name="CONTENT_TYPE" /></translation>
 <translation id="1269641567813814718">Win</translation>
 <translation id="1290982764014248209">Перемістити додаток <ph name="DRAGGED_APP" /> у папку "<ph name="FOLDER_NAME" />".</translation>
 <translation id="1291104554099683393">Спробуйте надіслати його меншими частинами.</translation>
@@ -18,7 +18,7 @@
 <translation id="1383876407941801731">Пошук</translation>
 <translation id="1398853756734560583">Збільшити</translation>
 <translation id="1409544243779336081">Рекомендовані додатки</translation>
-<translation id="1450753235335490080">Не вдалося надіслати контент (<ph name="CONTENT_TYPE" />)</translation>
+<translation id="1450753235335490080">Не вдалося надіслати: <ph name="CONTENT_TYPE" /></translation>
 <translation id="1498028757988366001">Ви раніше це шукали. Якщо видалити запит "<ph name="QUERY" />" з історії, він назавжди зникне з вашого облікового запису на всіх пристроях.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 хвилина та }one{# хвилина та }few{# хвилини та }many{# хвилин і }other{# хвилини та }}</translation>
 <translation id="1643823602425662293">Сповіщення</translation>
@@ -113,6 +113,7 @@
 <translation id="4788285488841504513">{MONTHS,plural, =1{Залишився 1 місяць}one{Залишився # місяць}few{Залишилося # місяці}many{Залишилося # місяців}other{Залишилося # місяця}}</translation>
 <translation id="4841881773802181781">Вставлення</translation>
 <translation id="4881695831933465202">Відкрити</translation>
+<translation id="4888938634149558681">Зателефонувати</translation>
 <translation id="4968171027979920686">{SECONDS,plural, =1{1 секунда}one{# секунда}few{# секунди}many{# секунд}other{# секунди}}</translation>
 <translation id="4971687151119236543">Попередня композиція</translation>
 <translation id="5046499563572181734">Торкніться тут</translation>
diff --git a/ui/strings/translations/ui_strings_zh-TW.xtb b/ui/strings/translations/ui_strings_zh-TW.xtb
index 03c1202..0c1e8e7 100644
--- a/ui/strings/translations/ui_strings_zh-TW.xtb
+++ b/ui/strings/translations/ui_strings_zh-TW.xtb
@@ -162,7 +162,7 @@
 <translation id="6578407462441924264">未命名</translation>
 <translation id="6612467943526193239">如要結束校正模式,請按下 Esc 鍵。</translation>
 <translation id="6620110761915583480">儲存檔案</translation>
-<translation id="6656912866303152668">請確認「<ph name="TARGET_DEVICE_NAME" />」的 Chrome 同步功能已開啟,然後嘗試重新傳送。</translation>
+<translation id="6656912866303152668">請確認「<ph name="TARGET_DEVICE_NAME" />」已開啟了 Chrome 的同步功能,然後再傳送一次。</translation>
 <translation id="6699343763173986273">下一首媒體曲目</translation>
 <translation id="673773751041746814">刪除</translation>
 <translation id="6779314412797872738">如要將號碼從這個裝置傳送到你的 Android 手機,請在這兩個裝置的設定中<ph name="TROUBLESHOOT_LINK" />。</translation>
diff --git a/ui/views/border_unittest.cc b/ui/views/border_unittest.cc
index eb108ae..3a79f56 100644
--- a/ui/views/border_unittest.cc
+++ b/ui/views/border_unittest.cc
@@ -210,7 +210,9 @@
 }
 
 TEST_F(BorderTest, RoundedRectBorder) {
-  std::unique_ptr<Border> border(CreateRoundedRectBorder(3, 4, SK_ColorBLUE));
+  std::unique_ptr<Border> border(CreateRoundedRectBorder(
+      3, LayoutProvider::Get()->GetCornerRadiusMetric(EMPHASIS_LOW),
+      SK_ColorBLUE));
   EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize());
   EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets());
   border->Paint(*view_, canvas_.get());
diff --git a/ui/views/controls/menu/menu_config.h b/ui/views/controls/menu/menu_config.h
index e15d24d..16539424 100644
--- a/ui/views/controls/menu/menu_config.h
+++ b/ui/views/controls/menu/menu_config.h
@@ -9,6 +9,7 @@
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/font_list.h"
 #include "ui/views/controls/menu/menu_image_util.h"
+#include "ui/views/layout/layout_provider.h"
 #include "ui/views/round_rect_painter.h"
 #include "ui/views/views_export.h"
 
@@ -164,14 +165,17 @@
   int show_delay = 400;
 
   // Radius of the rounded corners of the menu border. Must be >= 0.
-  int corner_radius = 0;
+  int corner_radius =
+      LayoutProvider::Get()->GetCornerRadiusMetric(EMPHASIS_NONE);
 
   // Radius of "auxiliary" rounded corners - comboboxes and context menus.
   // Must be >= 0.
-  int auxiliary_corner_radius = 0;
+  int auxiliary_corner_radius =
+      LayoutProvider::Get()->GetCornerRadiusMetric(EMPHASIS_NONE);
 
   // Radius of the rounded corners of the touchable menu border
-  int touchable_corner_radius = 8;
+  int touchable_corner_radius =
+      LayoutProvider::Get()->GetCornerRadiusMetric(EMPHASIS_HIGH);
 
   // Anchor offset for touchable menus created by a touch event.
   int touchable_anchor_offset = 8;
diff --git a/ui/views/controls/menu/menu_item_view_unittest.cc b/ui/views/controls/menu/menu_item_view_unittest.cc
index 6b6cadd..f51bd9d 100644
--- a/ui/views/controls/menu/menu_item_view_unittest.cc
+++ b/ui/views/controls/menu/menu_item_view_unittest.cc
@@ -23,7 +23,9 @@
 
 namespace views {
 
-TEST(MenuItemViewUnitTest, AddAndRemoveChildren) {
+using MenuItemViewUnitTest = ViewsTestBase;
+
+TEST_F(MenuItemViewUnitTest, AddAndRemoveChildren) {
   views::TestMenuItemView root_menu;
   root_menu.set_owned_by_client();
 
@@ -55,7 +57,7 @@
 
 }  // namespace
 
-TEST(MenuItemViewUnitTest, TestMenuItemViewWithFlexibleWidthChild) {
+TEST_F(MenuItemViewUnitTest, TestMenuItemViewWithFlexibleWidthChild) {
   views::TestMenuItemView root_menu;
   root_menu.set_owned_by_client();
 
@@ -94,7 +96,7 @@
 
 // Tests that the top-level menu item with hidden children should contain the
 // "(empty)" menu item to display.
-TEST(MenuItemViewUnitTest, TestEmptyTopLevelWhenAllItemsAreHidden) {
+TEST_F(MenuItemViewUnitTest, TestEmptyTopLevelWhenAllItemsAreHidden) {
   views::TestMenuItemView root_menu;
   views::MenuItemView* item1 =
       root_menu.AppendMenuItemWithLabel(1, base::ASCIIToUTF16("item 1"));
@@ -125,7 +127,7 @@
 
 // Tests that submenu with hidden children should contain the "(empty)" menu
 // item to display.
-TEST(MenuItemViewUnitTest, TestEmptySubmenuWhenAllChildItemsAreHidden) {
+TEST_F(MenuItemViewUnitTest, TestEmptySubmenuWhenAllChildItemsAreHidden) {
   views::TestMenuItemView root_menu;
   MenuItemView* submenu_item =
       root_menu.AppendSubMenu(1, base::ASCIIToUTF16("My Submenu"));
@@ -161,7 +163,7 @@
             empty_item->title());
 }
 
-TEST(MenuItemViewUnitTest, UseMnemonicOnPlatform) {
+TEST_F(MenuItemViewUnitTest, UseMnemonicOnPlatform) {
   views::TestMenuItemView root_menu;
   views::MenuItemView* item1 =
       root_menu.AppendMenuItemWithLabel(1, base::ASCIIToUTF16("&Item 1"));
@@ -179,7 +181,7 @@
   }
 }
 
-class MenuItemViewLayoutTest : public ::testing::Test {
+class MenuItemViewLayoutTest : public ViewsTestBase {
  public:
   MenuItemViewLayoutTest()
       : test_item_(root_menu_.AppendMenuItemWithLabel(1, base::string16())) {}
diff --git a/ui/views/layout/layout_provider.cc b/ui/views/layout/layout_provider.cc
index 257a87f..0f149250 100644
--- a/ui/views/layout/layout_provider.cc
+++ b/ui/views/layout/layout_provider.cc
@@ -143,10 +143,8 @@
 
 int LayoutProvider::GetCornerRadiusMetric(EmphasisMetric emphasis_metric,
                                           const gfx::Size& size) const {
-  const bool touch_ui = ui::MaterialDesignController::touch_ui();
   switch (emphasis_metric) {
     case views::EMPHASIS_NONE:
-      NOTREACHED();
       return 0;
     case EMPHASIS_LOW:
     case EMPHASIS_MEDIUM:
@@ -154,15 +152,24 @@
     case EMPHASIS_HIGH:
       return 8;
     case EMPHASIS_MAXIMUM:
-      return touch_ui ? std::min(size.width(), size.height()) / 2 : 16;
+      return std::min(size.width(), size.height()) / 2;
   }
 }
 
 int LayoutProvider::GetShadowElevationMetric(
     EmphasisMetric emphasis_metric) const {
-  // Return a value similar to the (deprecated) default shadow style for bubbles
-  // and dialogs.
-  return 3;
+  switch (emphasis_metric) {
+    case views::EMPHASIS_NONE:
+      return 0;
+    case views::EMPHASIS_LOW:
+      return 1;
+    case views::EMPHASIS_MEDIUM:
+      return 2;
+    case views::EMPHASIS_HIGH:
+      return 3;
+    case views::EMPHASIS_MAXIMUM:
+      return 16;
+  }
 }
 
 gfx::ShadowValues LayoutProvider::MakeShadowValues(int elevation,
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.cc
index c605eeb..d1e21777 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.cc
@@ -6,9 +6,11 @@
 
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
+#include "ui/platform_window/platform_window_handler/wm_move_resize_handler.h"
 #include "ui/platform_window/platform_window_init_properties.h"
 #include "ui/views/linux_ui/linux_ui.h"
 #include "ui/views/views_delegate.h"
+#include "ui/views/widget/desktop_aura/window_event_filter.h"
 #include "ui/views/widget/widget.h"
 
 namespace views {
@@ -21,6 +23,12 @@
 
 DesktopWindowTreeHostLinux::~DesktopWindowTreeHostLinux() = default;
 
+void DesktopWindowTreeHostLinux::OnNativeWidgetCreated(
+    const Widget::InitParams& params) {
+  AddNonClientEventFilter();
+  DesktopWindowTreeHostPlatform::OnNativeWidgetCreated(params);
+}
+
 void DesktopWindowTreeHostLinux::OnDisplayMetricsChanged(
     const display::Display& display,
     uint32_t changed_metrics) {
@@ -38,6 +46,11 @@
   }
 }
 
+void DesktopWindowTreeHostLinux::OnClosed() {
+  RemoveNonClientEventFilter();
+  DesktopWindowTreeHostPlatform::OnClosed();
+}
+
 void DesktopWindowTreeHostLinux::AddAdditionalInitProperties(
     const Widget::InitParams& params,
     ui::PlatformWindowInitProperties* properties) {
@@ -72,4 +85,39 @@
   properties->wm_role_name = params.wm_role_name;
 }
 
+void DesktopWindowTreeHostLinux::AddNonClientEventFilter() {
+  DCHECK(!non_client_window_event_filter_);
+  std::unique_ptr<WindowEventFilter> window_event_filter =
+      std::make_unique<WindowEventFilter>(this);
+  auto* wm_move_resize_handler = GetWmMoveResizeHandler(*platform_window());
+  if (wm_move_resize_handler)
+    window_event_filter->SetWmMoveResizeHandler(
+        GetWmMoveResizeHandler(*(platform_window())));
+
+  non_client_window_event_filter_ = std::move(window_event_filter);
+  window()->AddPreTargetHandler(non_client_window_event_filter_.get());
+}
+
+void DesktopWindowTreeHostLinux::RemoveNonClientEventFilter() {
+  if (!non_client_window_event_filter_)
+    return;
+
+  window()->RemovePreTargetHandler(non_client_window_event_filter_.get());
+  non_client_window_event_filter_.reset();
+}
+
+// As DWTHX11 subclasses DWTHPlatform through DWTHLinux now (during transition
+// period. see https://crbug.com/990756), we need to guard this factory method.
+// TODO(msisov): remove this guard once DWTHX11 is finally merged into
+// DWTHPlatform and .
+#if !defined(USE_X11)
+// static
+DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
+    internal::NativeWidgetDelegate* native_widget_delegate,
+    DesktopNativeWidgetAura* desktop_native_widget_aura) {
+  return new DesktopWindowTreeHostLinux(native_widget_delegate,
+                                        desktop_native_widget_aura);
+}
+#endif
+
 }  // namespace views
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h b/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h
index f76fbcc..45e2ad5 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h
@@ -11,6 +11,8 @@
 
 namespace views {
 
+class WindowEventFilter;
+
 // Contains Linux specific implementation.
 class VIEWS_EXPORT DesktopWindowTreeHostLinux
     : public DesktopWindowTreeHostPlatform {
@@ -20,6 +22,13 @@
       DesktopNativeWidgetAura* desktop_native_widget_aura);
   ~DesktopWindowTreeHostLinux() override;
 
+ protected:
+  // Overridden from DesktopWindowTreeHost:
+  void OnNativeWidgetCreated(const Widget::InitParams& params) override;
+
+  // PlatformWindowDelegateBase:
+  void OnClosed() override;
+
  private:
   // Overridden from display::DisplayObserver via aura::WindowTreeHost:
   void OnDisplayMetricsChanged(const display::Display& display,
@@ -30,6 +39,12 @@
       const Widget::InitParams& params,
       ui::PlatformWindowInitProperties* properties) override;
 
+  void AddNonClientEventFilter();
+  void RemoveNonClientEventFilter();
+
+  // A handler for events intended for non client area.
+  std::unique_ptr<WindowEventFilter> non_client_window_event_filter_;
+
   DISALLOW_COPY_AND_ASSIGN(DesktopWindowTreeHostLinux);
 };
 
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
index 76f3e86..8b04c59 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
@@ -16,12 +16,10 @@
 #include "ui/display/screen.h"
 #include "ui/gfx/geometry/dip_util.h"
 #include "ui/platform_window/platform_window.h"
-#include "ui/platform_window/platform_window_handler/wm_move_resize_handler.h"
 #include "ui/platform_window/platform_window_init_properties.h"
 #include "ui/views/corewm/tooltip_aura.h"
 #include "ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone.h"
 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
-#include "ui/views/widget/desktop_aura/window_event_filter.h"
 #include "ui/views/widget/widget_aura_utils.h"
 #include "ui/views/window/native_frame_view.h"
 #include "ui/wm/core/window_util.h"
@@ -152,26 +150,11 @@
 
 void DesktopWindowTreeHostPlatform::OnNativeWidgetCreated(
     const Widget::InitParams& params) {
-  native_widget_delegate_->OnNativeWidgetCreated();
-
   platform_window()->SetUseNativeFrame(params.type ==
                                            Widget::InitParams::TYPE_WINDOW &&
                                        !params.remove_standard_frame);
 
-#if defined(OS_LINUX)
-  // Setup a non_client_window_event_filter, which handles resize/move, double
-  // click and other events.
-  DCHECK(!non_client_window_event_filter_);
-  std::unique_ptr<WindowEventFilter> window_event_filter =
-      std::make_unique<WindowEventFilter>(this);
-  auto* wm_move_resize_handler = GetWmMoveResizeHandler(*platform_window());
-  if (wm_move_resize_handler)
-    window_event_filter->SetWmMoveResizeHandler(
-        GetWmMoveResizeHandler(*(platform_window())));
-
-  non_client_window_event_filter_ = std::move(window_event_filter);
-  window()->AddPreTargetHandler(non_client_window_event_filter_.get());
-#endif
+  native_widget_delegate_->OnNativeWidgetCreated();
 }
 
 void DesktopWindowTreeHostPlatform::OnWidgetInitDone() {}
@@ -674,8 +657,6 @@
 }
 
 void DesktopWindowTreeHostPlatform::OnClosed() {
-  RemoveNonClientEventFilter();
-
   SetPlatformWindow(nullptr);
   desktop_native_widget_aura_->OnHostClosed();
 }
@@ -756,16 +737,6 @@
   }
 }
 
-void DesktopWindowTreeHostPlatform::RemoveNonClientEventFilter() {
-#if defined(OS_LINUX)
-  if (!non_client_window_event_filter_)
-    return;
-
-  window()->RemovePreTargetHandler(non_client_window_event_filter_.get());
-  non_client_window_event_filter_.reset();
-#endif
-}
-
 Widget* DesktopWindowTreeHostPlatform::GetWidget() {
   return native_widget_delegate_->AsWidget();
 }
@@ -792,11 +763,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 // DesktopWindowTreeHost:
 
-// As DWTHX11 subclasses DWTHPlatform now (during transition period. see
-// https://crbug.com/990756), we need to guard this factory method.
-// TODO(msisov): remove this guard once DWTHX11 is finally merged into
-// DWTHPlatform.
-#if !defined(USE_X11)
+// Linux subclasses this host and adds some Linux specific bits.
+#if !defined(OS_LINUX)
 // static
 DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
     internal::NativeWidgetDelegate* native_widget_delegate,
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h
index c5082d9..802f0e3 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h
@@ -15,8 +15,6 @@
 
 namespace views {
 
-class WindowEventFilter;
-
 class VIEWS_EXPORT DesktopWindowTreeHostPlatform
     : public aura::WindowTreeHostPlatform,
       public DesktopWindowTreeHost {
@@ -127,8 +125,6 @@
 
   void Relayout();
 
-  void RemoveNonClientEventFilter();
-
   Widget* GetWidget();
   const Widget* GetWidget() const;
 
@@ -152,11 +148,6 @@
   DesktopWindowTreeHostPlatform* window_parent_ = nullptr;
   std::set<DesktopWindowTreeHostPlatform*> window_children_;
 
-#if defined(OS_LINUX)
-  // A handler for events intended for non client area.
-  std::unique_ptr<WindowEventFilter> non_client_window_event_filter_;
-#endif
-
   // Keep track of PlatformWindow state so that we would react correctly and set
   // visibility only if the window was minimized or was unminimized from the
   // normal state.
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
index 376c76de..976a0f6a 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
@@ -56,7 +56,6 @@
 #include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h"
 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_observer_x11.h"
-#include "ui/views/widget/desktop_aura/window_event_filter.h"
 #include "ui/views/widget/desktop_aura/x11_desktop_handler.h"
 #include "ui/views/widget/desktop_aura/x11_desktop_window_move_client.h"
 #include "ui/views/window/native_frame_view.h"
@@ -204,21 +203,6 @@
   observer_list_.RemoveObserver(observer);
 }
 
-void DesktopWindowTreeHostX11::AddNonClientEventFilter() {
-  if (non_client_event_filter_)
-    return;
-  non_client_event_filter_ = std::make_unique<WindowEventFilter>(this);
-  non_client_event_filter_->SetWmMoveResizeHandler(this);
-  window()->AddPreTargetHandler(non_client_event_filter_.get());
-}
-
-void DesktopWindowTreeHostX11::RemoveNonClientEventFilter() {
-  if (!non_client_event_filter_)
-    return;
-  window()->RemovePreTargetHandler(non_client_event_filter_.get());
-  non_client_event_filter_.reset();
-}
-
 void DesktopWindowTreeHostX11::CleanUpWindowList(
     void (*func)(aura::Window* window)) {
   if (!open_windows_)
@@ -267,16 +251,12 @@
   // notify events.
   X11DesktopHandler::get();
 
-  AddNonClientEventFilter();
-  SetUseNativeFrame(params.type == Widget::InitParams::TYPE_WINDOW &&
-                    !params.remove_standard_frame);
-
   x11_window_move_client_ = std::make_unique<X11DesktopWindowMoveClient>();
   wm::SetWindowMoveClient(window(), x11_window_move_client_.get());
 
   SetWindowTransparency();
 
-  native_widget_delegate()->OnNativeWidgetCreated();
+  DesktopWindowTreeHostLinux::OnNativeWidgetCreated(params);
 }
 
 std::unique_ptr<aura::client::DragDropClient>
@@ -524,12 +504,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // DesktopWindowTreeHostX11, private:
 
-void DesktopWindowTreeHostX11::DispatchHostWindowDragMovement(
-    int hittest,
-    const gfx::Point& pointer_location) {
-  GetXWindow()->WmMoveResize(hittest, pointer_location);
-}
-
 void DesktopWindowTreeHostX11::SetUseNativeFrame(bool use_native_frame) {
   GetXWindow()->SetUseNativeFrame(use_native_frame);
   ResetWindowRegion();
@@ -698,12 +672,8 @@
 }
 
 void DesktopWindowTreeHostX11::OnClosed() {
-  // Remove the event listeners we've installed. We need to remove these
-  // because otherwise we get assert during ~WindowEventDispatcher().
-  RemoveNonClientEventFilter();
-
   open_windows().remove(GetAcceleratedWidget());
-  DesktopWindowTreeHostPlatform::OnClosed();
+  DesktopWindowTreeHostLinux::OnClosed();
 }
 
 void DesktopWindowTreeHostX11::OnWindowStateChanged(
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h
index de86f948..81b3775 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h
@@ -23,7 +23,6 @@
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/x/x11_types.h"
 #include "ui/platform_window/platform_window_delegate.h"
-#include "ui/platform_window/platform_window_handler/wm_move_resize_handler.h"
 #include "ui/platform_window/x11/x11_window.h"
 #include "ui/views/views_export.h"
 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h"
@@ -44,10 +43,8 @@
 class DesktopDragDropClientAuraX11;
 class DesktopWindowTreeHostObserverX11;
 class X11DesktopWindowMoveClient;
-class WindowEventFilter;
 
 class VIEWS_EXPORT DesktopWindowTreeHostX11 : public DesktopWindowTreeHostLinux,
-                                              public ui::WmMoveResizeHandler,
                                               public ui::XEventDelegate {
  public:
   DesktopWindowTreeHostX11(
@@ -81,9 +78,6 @@
   void AddObserver(DesktopWindowTreeHostObserverX11* observer);
   void RemoveObserver(DesktopWindowTreeHostObserverX11* observer);
 
-  void AddNonClientEventFilter();
-  void RemoveNonClientEventFilter();
-
   // Runs the |func| callback for each content-window, and deallocates the
   // internal list of open windows.
   static void CleanUpWindowList(void (*func)(aura::Window* window));
@@ -142,11 +136,6 @@
  private:
   friend class DesktopWindowTreeHostX11HighDPITest;
 
-  // Overridden from WmMoveResizeHandler
-  void DispatchHostWindowDragMovement(
-      int hittest,
-      const gfx::Point& pointer_location) override;
-
   // Sets whether the window's borders are provided by the window manager.
   void SetUseNativeFrame(bool use_native_frame);
 
@@ -210,7 +199,6 @@
 
   DesktopDragDropClientAuraX11* drag_drop_client_ = nullptr;
 
-  std::unique_ptr<WindowEventFilter> non_client_event_filter_;
   std::unique_ptr<X11DesktopWindowMoveClient> x11_window_move_client_;
 
   base::ObserverList<DesktopWindowTreeHostObserverX11>::Unchecked
diff --git a/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html b/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html
index 8088f17..3081358 100644
--- a/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html
+++ b/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html
@@ -206,21 +206,21 @@
       <slot select="[problem]"></slot>
       <div id="rowsContainer">
         <div class="row">
-          <cr-button class="digit-button" on-click="onNumberTap_" value="1"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="1"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard1')]]</inner-text>
             <inner-text class="letter"
                 hidden="[[!enableLetters]]">&nbsp;</inner-text>
             <paper-ripple class="circle" center></paper-ripple>
           </cr-button>
-          <cr-button class="digit-button" on-click="onNumberTap_" value="2"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="2"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard2')]]</inner-text>
             <inner-text class="letter"
                 hidden="[[!enableLetters]]">ABC</inner-text>
             <paper-ripple class="circle" center></paper-ripple>
           </cr-button>
-          <cr-button class="digit-button" on-click="onNumberTap_" value="3"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="3"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard3')]]</inner-text>
             <inner-text class="letter"
@@ -229,21 +229,21 @@
           </cr-button>
         </div>
         <div class="row">
-          <cr-button class="digit-button" on-click="onNumberTap_" value="4"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="4"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard4')]]</inner-text>
             <inner-text class="letter"
                 hidden="[[!enableLetters]]">GHI</inner-text>
             <paper-ripple class="circle" center></paper-ripple>
           </cr-button>
-          <cr-button class="digit-button" on-click="onNumberTap_" value="5"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="5"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard5')]]</inner-text>
             <inner-text class="letter"
                 hidden="[[!enableLetters]]">JKL</inner-text>
             <paper-ripple class="circle" center></paper-ripple>
           </cr-button>
-          <cr-button class="digit-button" on-click="onNumberTap_" value="6"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="6"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard6')]]</inner-text>
             <inner-text class="letter"
@@ -252,21 +252,21 @@
           </cr-button>
         </div>
         <div class="row">
-          <cr-button class="digit-button" on-click="onNumberTap_" value="7"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="7"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard7')]]</inner-text>
             <inner-text class="letter"
                 hidden="[[!enableLetters]]">PQRS</inner-text>
             <paper-ripple class="circle" center></paper-ripple>
           </cr-button>
-          <cr-button class="digit-button" on-click="onNumberTap_" value="8"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="8"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard8')]]</inner-text>
             <inner-text class="letter"
                 hidden="[[!enableLetters]]">TUV</inner-text>
             <paper-ripple class="circle" center></paper-ripple>
           </cr-button>
-          <cr-button class="digit-button" on-click="onNumberTap_" value="9"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="9"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard9')]]</inner-text>
             <inner-text class="letter"
@@ -276,7 +276,7 @@
         </div>
         <div class="row bottom-row">
           <div class="digit-button"></div>
-          <cr-button class="digit-button" on-click="onNumberTap_" value="0"
+          <cr-button class="digit-button" on-tap="onNumberTap_" value="0"
               noink>
             <inner-text class="number">[[i18n('pinKeyboard0')]]</inner-text>
             <inner-text class="letter"
@@ -286,7 +286,7 @@
           <cr-icon-button id="backspaceButton"
               disabled$="[[!hasInput_(value)]]"
               iron-icon="pin-keyboard:backspace"
-              on-click="onBackspaceTap_"
+              on-tap="onBackspaceTap_"
               on-pointerdown="onBackspacePointerDown_"
               on-pointerout="clearAndReset_"
               on-pointerup="onBackspacePointerUp_"