Merge autoland to mozilla-central. a=merge

This commit is contained in:
shindli 2019-06-06 12:28:43 +03:00
Родитель af07c37d6a b60b55e5bc
Коммит a06e4d2ea4
180 изменённых файлов: 2412 добавлений и 2572 удалений

Просмотреть файл

@ -38,19 +38,12 @@ DIST_GARBAGE = config.cache config.log config.status* config-defs.h \
.mozconfig.mk
ifndef MOZ_PROFILE_USE
# Automation builds should always have a new buildid, but for the sake of not
# re-linking libxul on every incremental build we do not enforce this for
# developer builds. Tests always need a new buildid as well.
ifneq (,$(MOZ_AUTOMATION)$(MOZ_BUILD_DATE)$(TEST_MOZBUILD))
ifneq (mobile/android,$(MOZ_BUILD_APP))
$(MDDEPDIR)/buildid.h.stub $(MDDEPDIR)/source-repo.h.stub: FORCE
endif
# Additionally, provide a dummy target during tests, because
# faster/rules.mk will expect these targets to exist.
ifdef TEST_MOZBUILD
source-repo.h: $(MDDEPDIR)/source-repo.h.stub
buildid.h: $(MDDEPDIR)/buildid.h.stub
endif
endif
BUILD_BACKEND_FILES := $(addprefix backend.,$(addsuffix Backend,$(BUILD_BACKENDS)))

Просмотреть файл

@ -343,13 +343,8 @@ pref("browser.urlbar.openintab", false);
pref("browser.urlbar.usepreloadedtopurls.enabled", false);
pref("browser.urlbar.usepreloadedtopurls.expire_days", 14);
// Toggle the new work in progress Address Bar code. Enable it on Nightly and Beta,
// not on Release yet.
#ifdef EARLY_BETA_OR_EARLIER
// Enable the new Address Bar code.
pref("browser.urlbar.quantumbar", true);
#else
pref("browser.urlbar.quantumbar", false);
#endif
pref("browser.altClickSave", false);

Просмотреть файл

@ -16,8 +16,6 @@ ChromeUtils.defineModuleGetter(this, "Weave",
const MIN_STATUS_ANIMATION_DURATION = 1600;
const FXA_NO_AVATAR_ZEROS = "00000000000000000000000000000000";
var gSync = {
_initialized: false,
// The last sync start time. Used to calculate the leftover animation time
@ -327,11 +325,7 @@ var gSync = {
stateValue = "unverified";
} else if (state.status === UIState.STATUS_SIGNED_IN) {
stateValue = "signedin";
// Firefox Account specifies a `default` avatar image that uses the convention
// of all 0s in url. The default used in the design of the toolbar menu is
// different from the one provided by Firefox Account. Perform a check and only
// change avatar *if* this is not a default avatar.
if (state.avatarURL && !state.avatarURL.includes(FXA_NO_AVATAR_ZEROS)) {
if (state.avatarURL && !state.avatarIsDefault) {
// The user has specified a custom avatar, attempt to load the image on all the menu buttons.
const bgImage = `url("${state.avatarURL}")`;
let img = new Image();
@ -373,7 +367,7 @@ var gSync = {
emitFxaToolbarTelemetry(type, panel) {
if (UIState.isReady() && panel) {
const state = UIState.get();
const hasAvatar = state.avatarURL && !state.avatarURL.includes(FXA_NO_AVATAR_ZEROS);
const hasAvatar = state.avatarURL && !state.avatarIsDefault;
let extraOptions = {"fxa_status": state.status, "fxa_avatar": hasAvatar ? "true" : "false"};
// When the fxa avatar panel is within the Firefox app menu,
@ -430,21 +424,6 @@ var gSync = {
this.appMenuLabel.setAttribute("label", state.displayName || state.email);
this.appMenuLabel.classList.add("subviewbutton-nav");
this.appMenuStatus.removeAttribute("tooltiptext");
if (state.avatarURL) {
let bgImage = "url(\"" + state.avatarURL + "\")";
this.appMenuAvatar.style.listStyleImage = bgImage;
let img = new Image();
img.onerror = () => {
// Clear the image if it has trouble loading. Since this callback is asynchronous
// we check to make sure the image is still the same before we clear it.
if (this.appMenuAvatar.style.listStyleImage === bgImage) {
this.appMenuAvatar.style.removeProperty("list-style-image");
}
};
img.src = state.avatarURL;
}
},
updateState(state) {

Просмотреть файл

@ -86,10 +86,6 @@ add_task(async function startup() {
min: 200,
max: 350,
},
"layout.css.prefixes.webkit": {
min: 135,
max: 170,
},
"layout.css.dpi": {
min: 45,
max: 81,

Просмотреть файл

@ -42,14 +42,13 @@ add_task(async function test_ui_state_signedin() {
checkPanelUIStatusBar({
label: "Foo Bar",
fxastatus: "signedin",
avatarURL: "https://foo.bar",
syncing: false,
syncNowTooltip: lastSyncTooltip,
});
checkRemoteTabsPanel("PanelUI-remotetabs-main", false);
checkMenuBarItem("sync-syncnowitem");
checkFxaToolbarButtonPanel("PanelUI-fxa-menu");
checkFxaToolbarButtonAvatar("signedin");
checkFxAAvatar("signedin");
gSync.relativeTimeFormat = origRelativeTimeFormat;
});
@ -92,7 +91,7 @@ add_task(async function test_ui_state_unconfigured() {
checkRemoteTabsPanel("PanelUI-remotetabs-setupsync");
checkMenuBarItem("sync-setup");
checkFxaToolbarButtonPanel("PanelUI-fxa-signin");
checkFxaToolbarButtonAvatar("not_configured");
checkFxAAvatar("not_configured");
});
add_task(async function test_ui_state_unverified() {
@ -111,14 +110,13 @@ add_task(async function test_ui_state_unverified() {
label: expectedLabel,
tooltip: tooltipText,
fxastatus: "unverified",
avatarURL: null,
syncing: false,
syncNowTooltip: tooltipText,
});
checkRemoteTabsPanel("PanelUI-remotetabs-unverified", false);
checkMenuBarItem("sync-unverifieditem");
checkFxaToolbarButtonPanel("PanelUI-fxa-unverified");
checkFxaToolbarButtonAvatar("unverified");
checkFxAAvatar("unverified");
});
add_task(async function test_ui_state_loginFailed() {
@ -135,21 +133,19 @@ add_task(async function test_ui_state_loginFailed() {
label: expectedLabel,
tooltip: tooltipText,
fxastatus: "login-failed",
avatarURL: null,
syncing: false,
syncNowTooltip: tooltipText,
});
checkRemoteTabsPanel("PanelUI-remotetabs-reauthsync", false);
checkMenuBarItem("sync-reauthitem");
checkFxaToolbarButtonPanel("PanelUI-fxa-unverified");
checkFxaToolbarButtonAvatar("unverified");
checkFxAAvatar("unverified");
});
function checkPanelUIStatusBar({label, tooltip, fxastatus, avatarURL, syncing, syncNowTooltip}) {
function checkPanelUIStatusBar({label, tooltip, fxastatus, syncing, syncNowTooltip}) {
let labelNode = document.getElementById("appMenu-fxa-label");
let tooltipNode = document.getElementById("appMenu-fxa-status");
let statusNode = document.getElementById("appMenu-fxa-container");
let avatar = document.getElementById("appMenu-fxa-avatar");
is(labelNode.getAttribute("label"), label, "fxa label has the right value");
if (tooltipNode.getAttribute("tooltiptext")) {
@ -160,11 +156,6 @@ function checkPanelUIStatusBar({label, tooltip, fxastatus, avatarURL, syncing, s
} else {
ok(!statusNode.hasAttribute("fxastatus"), "fxastatus is unset");
}
if (avatarURL) {
is(avatar.style.listStyleImage, `url("${avatarURL}")`, "fxa avatar URL is set");
} else {
ok(!statusNode.style.listStyleImage, "fxa avatar URL is unset");
}
}
function checkRemoteTabsPanel(expectedShownItemId, syncing, syncNowTooltip) {
@ -212,15 +203,20 @@ async function checkFxaToolbarButtonPanel(expectedShownItemId) {
}
// fxaStatus is one of 'not_configured', 'unverified', or 'signedin'.
function checkFxaToolbarButtonAvatar(fxaStatus) {
const avatar = document.getElementById("fxa-avatar-image");
const avatarURL = getComputedStyle(avatar).listStyleImage;
const expected = {
not_configured: "url(\"chrome://browser/skin/fxa/avatar-empty-badged.svg\")",
unverified: "url(\"chrome://browser/skin/fxa/avatar-confirm.svg\")",
signedin: "url(\"chrome://browser/skin/fxa/avatar.svg\")",
};
ok(avatarURL == expected[fxaStatus], `expected avatar URL to be ${expected[fxaStatus]}, but got ${avatarURL}`);
function checkFxAAvatar(fxaStatus) {
const avatarContainers = [
document.getElementById("appMenu-fxa-avatar"),
document.getElementById("fxa-avatar-image"),
];
for (const avatar of avatarContainers) {
const avatarURL = getComputedStyle(avatar).listStyleImage;
const expected = {
not_configured: "url(\"chrome://browser/skin/fxa/avatar-empty-badged.svg\")",
unverified: "url(\"chrome://browser/skin/fxa/avatar-confirm.svg\")",
signedin: "url(\"chrome://browser/skin/fxa/avatar.svg\")",
};
ok(avatarURL == expected[fxaStatus], `expected avatar URL to be ${expected[fxaStatus]}, got ${avatarURL}`);
}
}
// Only one item displayed at a time.

Просмотреть файл

@ -201,6 +201,7 @@ skip-if = !e10s
[browser_ext_tabs_discarded.js]
[browser_ext_tabs_duplicate.js]
[browser_ext_tabs_events.js]
skip-if = true # Bug 1521363
[browser_ext_tabs_events_order.js]
[browser_ext_tabs_executeScript.js]
skip-if = (verify && !debug && (os == 'mac'))

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

До

Ширина:  |  Высота:  |  Размер: 21 KiB

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Просмотреть файл

@ -321,7 +321,7 @@ var gSyncPane = {
} else {
fxaLoginStatus.removeAttribute("hasName");
}
if (state.avatarURL) {
if (state.avatarURL && !state.avatarIsDefault) {
let bgImage = "url(\"" + state.avatarURL + "\")";
let profileImageElement = document.querySelector("#fxaLoginVerified > .fxaProfileImage");
profileImageElement.style.listStyleImage = bgImage;

Просмотреть файл

@ -568,7 +568,9 @@ toolbarbutton[constrain-size="true"][cui-areatype="menu-panel"] > .toolbarbutton
#appMenu-fxa-avatar {
pointer-events: none;
list-style-image: url(chrome://browser/skin/fxa/default-avatar.svg);
list-style-image: var(--avatar-image-url);
-moz-context-properties: fill;
fill: currentColor;
}
/* Handle different UI states. */
@ -697,26 +699,31 @@ toolbarbutton[constrain-size="true"][cui-areatype="menu-panel"] > .toolbarbutton
--avatar-image-url: url(chrome://browser/skin/fxa/avatar.svg);
}
:root[fxastatus="unverified"] #fxa-avatar-image {
list-style-image: url(chrome://browser/skin/fxa/avatar-confirm.svg);
:root[fxastatus="unverified"] {
--avatar-image-url: url(chrome://browser/skin/fxa/avatar-confirm.svg);
}
:root[fxastatus="not_configured"] #fxa-avatar-image {
list-style-image: url(chrome://browser/skin/fxa/avatar-empty.svg);
:root[fxastatus="not_configured"] {
--avatar-image-url: url(chrome://browser/skin/fxa/avatar-empty.svg);
}
:root[fxastatus="not_configured"][fxa_avatar_badged="badged"] #fxa-avatar-image {
list-style-image: url(chrome://browser/skin/fxa/avatar-empty-badged.svg);
:root[fxastatus="not_configured"][fxa_avatar_badged="badged"] {
--avatar-image-url: url(chrome://browser/skin/fxa/avatar-empty-badged.svg);
}
:root:not([fxatoolbarmenu]) #fxa-toolbar-menu-button {
display: none;
}
#fxa-menu-avatar,
#fxa-avatar-image {
list-style-image: var(--avatar-image-url);
}
/* Non-signedin statuses icons are not totally round. */
:root[fxastatus="signedin"] #fxa-menu-avatar,
:root[fxastatus="signedin"] #fxa-avatar-image {
border-radius: 50%;
list-style-image: var(--avatar-image-url);
}
:root[fxastatus="signedin"] #PanelUI-fxa-signin,
@ -796,7 +803,7 @@ panelmultiview[mainViewId="PanelUI-fxa"] #PanelUI-remotetabs-syncnow {
.fxaChooseWhatToSyncDevices {
height: 102px;
width: 201px;
list-style-image: url(chrome://browser/skin/fxa/choose-what-to-sync-devices.svg);
list-style-image: url(chrome://browser/skin/fxa/sync-devices.svg);
}
.fxaGraphicMail {
@ -806,7 +813,7 @@ panelmultiview[mainViewId="PanelUI-fxa"] #PanelUI-remotetabs-syncnow {
}
#PanelUI-remotetabs {
--panel-ui-sync-illustration-height: 91px;
--panel-ui-sync-illustration-height: 141px;
}
.PanelUI-fxa-signin-instruction-label,
@ -885,7 +892,7 @@ panelmultiview[mainViewId="PanelUI-fxa"] #PanelUI-remotetabs-syncnow {
/* If you change the margin here, the min-height of the synced tabs panel
(e.g. #PanelUI-remotetabs[mainview] #PanelUI-remotetabs-setupsync, etc) may
need adjusting (see bug 1248506) */
width: 104px;
width: 204px;
height: var(--panel-ui-sync-illustration-height);
margin: 38px 0 15px;
-moz-context-properties: fill;

Просмотреть файл

@ -0,0 +1,11 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg enable-background="new 0 0 76.8 76.8" viewBox="0 0 76.8 76.8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<linearGradient id="a" gradientTransform="matrix(1.3333 0 0 -1.3333 118.8667 193.9333)" gradientUnits="userSpaceOnUse" x1="-92.971" x2="-32.8" y1="81.79" y2="146.09">
<stop offset=".26" stop-color="#9059ff"/>
<stop offset=".96" stop-color="#00b3f4"/>
</linearGradient>
<circle cx="38.4" cy="38.4" fill="#fbfbfe" r="32.7"/>
<path d="m38.4 0c-21.2 0-38.4 17.2-38.4 38.4s17.2 38.4 38.4 38.4 38.4-17.2 38.4-38.4-17.2-38.4-38.4-38.4zm0 11c9.1 0 16.5 7.4 16.5 16.5s-7.4 16.5-16.5 16.5-16.5-7.4-16.5-16.5c0-9.2 7.4-16.5 16.5-16.5zm22.6 42.8c-8.4 12.5-25.3 15.8-37.7 7.4-2.9-2-5.5-4.5-7.4-7.4-1.4-2.1-1.2-4.8.4-6.7 5.8-6.7 13.8 2.3 22.2 2.3s16.4-9 22.2-2.3c1.5 1.9 1.7 4.6.3 6.7z" fill="url(#a)"/>
</svg>

После

Ширина:  |  Высота:  |  Размер: 1.0 KiB

Просмотреть файл

@ -1,35 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="201" height="102">
<g>
<path fill="#eaeaee" d="M142.1 93.3c-3 0-5.9-.3-8.8-.9-.3-.1-.4-.3-.4-.6.1-.3.3-.4.6-.4 2.8.6 5.6.9 8.5.9.7 0 1.5 0 2.2-.1.3 0 .5.2.5.4 0 .3-.2.5-.5.5-.7.2-1.4.2-2.1.2zm8.6-.9c-.3 0-.5-.2-.5-.5 0-.2.2-.4.4-.5.7-.1 1.4-.3 2.1-.5.3-.1.5.1.6.4.1.3-.1.5-.4.6-.7.2-1.4.4-2.1.5h-.1zm6.2-1.8c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5 2.7-1 5.2-2.3 7.6-3.9.2-.2.5-.1.7.1s.1.5-.1.7c-2.5 1.6-5.1 2.9-7.8 4-.1.1-.1.1-.2.1zm-31.8-.8h-.2c-2.7-1.2-5.2-2.7-7.6-4.4-.2-.2-.3-.5-.1-.7.2-.2.5-.3.7-.1 2.3 1.7 4.8 3.1 7.4 4.3.3.1.4.4.3.7-.1 0-.3.2-.5.2zm-10.9-7.1c-.1 0-.2 0-.3-.1-.5-.5-1.1-1-1.6-1.5-.2-.2-.2-.5 0-.7.2-.2.5-.2.7 0 .5.5 1 1 1.6 1.5.2.2.2.5 0 .7-.1 0-.2.1-.4.1zm57.2-1.6c-.3 0-.5-.2-.5-.5 0-.1.1-.3.1-.4 2.5-2.5 4.7-5.4 6.5-8.5.1-.2.4-.3.7-.2.2.1.3.4.2.7-1.8 3.2-4.1 6.1-6.7 8.7 0 .2-.2.2-.3.2zm-63-4.9c-.2 0-.3-.1-.4-.2-2.2-3-3.9-6.2-5.3-9.6-.1-.3 0-.5.3-.6s.5 0 .6.3c1.3 3.3 3 6.5 5.1 9.4.2.2.1.5-.1.7h-.2zm72.4-9.5c-.3 0-.5-.2-.5-.5V66c.3-.7.5-1.3.7-2 .1-.3.4-.4.6-.3.3.1.4.4.3.6-.2.7-.5 1.4-.7 2.1 0 .1-.2.3-.4.3zm1.9-6.3h-.1c-.3-.1-.4-.3-.4-.6.6-2.8.9-5.7.9-8.5v-.2c0-.3.2-.5.5-.5s.5.2.5.5v.2c0 2.9-.3 5.9-.9 8.7-.1.2-.3.4-.5.4zM101 58.3c-.2 0-.5-.2-.5-.4-.3-2.2-.5-4.4-.5-6.7 0-.7 0-1.4.1-2.1 0-.3.2-.5.5-.5s.5.2.5.5c0 .7-.1 1.4-.1 2.1 0 2.2.2 4.4.5 6.5 0 .3-.2.6-.5.6zm82.3-11c-.3 0-.5-.2-.5-.4-.3-2.9-.9-5.7-1.8-8.4-.1-.3.1-.5.3-.6s.5.1.6.3c.9 2.8 1.5 5.7 1.9 8.6 0 .2-.2.4-.5.5.1 0 .1 0 0 0 .1 0 0 0 0 0zm-82.4-2c-.3 0-.5-.3-.5-.6.1-.7.2-1.5.4-2.2.1-.3.3-.4.6-.4.3.1.4.3.4.6-.1.7-.3 1.4-.4 2.1 0 .4-.2.5-.5.5zm2.3-8.4c-.3 0-.5-.2-.5-.5v-.2c1.3-3.4 3.1-6.7 5.2-9.7.2-.2.5-.3.7-.1s.3.5.1.7c-2.1 2.9-3.8 6.1-5.1 9.4 0 .3-.2.4-.4.4zm74.7-6.1c-.2 0-.3-.1-.4-.2-1.8-3.1-4-5.9-6.6-8.5-.2-.2-.2-.5 0-.7.2-.2.5-.2.7 0 2.6 2.6 4.9 5.5 6.7 8.7.1.2.1.5-.2.7h-.2zm-63.8-9.9c-.3 0-.5-.2-.5-.5 0-.1.1-.3.2-.4 2.2-2 4.6-3.7 7.1-5.2.2-.1.5-.1.7.2s.1.5-.2.7c-2.5 1.4-4.8 3.1-6.9 5.1-.1.1-.3.1-.4.1zm52.2-2.8c-.1 0-.2 0-.3-.1l-1.8-1.2c-.2-.1-.3-.5-.1-.7.1-.2.5-.3.7-.1l1.8 1.2c.2.2.3.5.1.7-.1.1-.2.2-.4.2zm-5.6-3.4c-.1 0-.2 0-.2-.1-2.6-1.3-5.2-2.3-8-3.1-.3-.1-.4-.3-.4-.6.1-.3.3-.4.6-.4 2.8.8 5.6 1.8 8.2 3.1.2.1.3.4.2.7 0 .3-.2.4-.4.4zm-35.7-.9c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5.7-.3 1.3-.6 2-.8.3-.1.5 0 .6.3.1.3 0 .5-.3.6-.7.3-1.3.5-2 .8 0 .1 0 .1-.1.1zm8.2-2.7c-.3 0-.5-.2-.5-.5 0-.2.2-.4.4-.5 3.6-.8 7.3-1.1 10.9-.9.3 0 .5.2.5.5s-.2.5-.5.5c-3.6-.2-7.2.1-10.7.9h-.1z"/>
</g>
<g>
<path fill="#eaeaee" d="M62.8 93.3c-3 0-5.9-.3-8.8-.9-.3-.1-.4-.3-.4-.6.1-.3.3-.4.6-.4 2.8.6 5.6.9 8.5.9.7 0 1.5 0 2.2-.1.3 0 .5.2.5.4 0 .3-.2.5-.5.5-.6.2-1.3.2-2.1.2zm8.6-.9c-.3 0-.5-.2-.5-.5 0-.2.2-.4.4-.5.7-.1 1.4-.3 2.1-.5.3-.1.5.1.6.4.1.3-.1.5-.4.6-.7.2-1.4.4-2.1.5h-.1zm6.3-1.8c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5 2.7-1 5.2-2.3 7.6-3.9.2-.2.5-.1.7.1s.1.5-.1.7c-2.5 1.6-5.1 2.9-7.8 4-.1.1-.2.1-.2.1zm-31.8-.8h-.2c-2.7-1.2-5.2-2.7-7.6-4.4-.2-.2-.3-.5-.1-.7.2-.2.5-.3.7-.1 2.3 1.7 4.8 3.1 7.4 4.3.3.1.4.4.3.7-.1 0-.3.2-.5.2zM35 82.7c-.1 0-.2 0-.3-.1-.5-.5-1.1-1-1.6-1.5-.2-.2-.2-.5 0-.7.2-.2.5-.2.7 0 .5.5 1 1 1.6 1.5.2.2.2.5 0 .7-.1 0-.3.1-.4.1zm57.2-1.6c-.3 0-.5-.2-.5-.5 0-.1.1-.3.1-.4 2.5-2.5 4.7-5.4 6.5-8.5.1-.2.4-.3.7-.2.2.1.3.4.2.7-1.8 3.2-4.1 6.1-6.7 8.7-.1.2-.2.2-.3.2zm-63-4.9c-.2 0-.3-.1-.4-.2-2.2-3-3.9-6.2-5.3-9.6-.1-.3 0-.5.3-.6s.5 0 .6.3c1.3 3.3 3 6.5 5.1 9.4.2.2.1.5-.1.7h-.2zm72.4-9.5c-.3 0-.5-.2-.5-.5V66c.3-.7.5-1.3.7-2 .1-.3.4-.4.6-.3.3.1.4.4.3.6-.2.7-.5 1.4-.7 2.1 0 .1-.2.3-.4.3zm1.8-6.3h-.1c-.3-.1-.4-.3-.4-.6.6-2.8.9-5.7.9-8.5v-.2c0-.3.2-.5.5-.5s.5.2.5.5v.2c0 2.9-.3 5.9-.9 8.7 0 .2-.2.4-.5.4zm-81.7-2.1c-.2 0-.5-.2-.5-.4-.3-2.2-.5-4.4-.5-6.7 0-.7 0-1.4.1-2.1 0-.3.2-.5.5-.5s.5.2.5.5c0 .7-.1 1.4-.1 2.1 0 2.2.2 4.4.5 6.5.1.3-.1.6-.5.6.1 0 0 0 0 0zm82.4-11c-.3 0-.5-.2-.5-.4-.3-2.9-.9-5.7-1.8-8.4-.1-.3.1-.5.3-.6s.5.1.6.3c.9 2.8 1.5 5.7 1.9 8.6 0 .2-.2.4-.5.5zm-82.4-2s-.1 0 0 0c-.3 0-.5-.3-.5-.6.1-.7.2-1.5.4-2.2.1-.3.3-.4.6-.4.3.1.4.3.4.6-.1.7-.3 1.4-.4 2.1 0 .4-.3.5-.5.5zm2.2-8.4c-.3 0-.5-.2-.5-.5v-.2c1.3-3.4 3.1-6.7 5.2-9.7.2-.2.5-.3.7-.1s.3.5.1.7c-2.1 2.9-3.8 6.1-5.1 9.4 0 .3-.2.4-.4.4zm74.8-6.1c-.2 0-.3-.1-.4-.2-1.8-3.1-4-5.9-6.6-8.5-.2-.2-.2-.5 0-.7.2-.2.5-.2.7 0 2.6 2.6 4.9 5.5 6.7 8.7.1.2.1.5-.2.7h-.2zm-63.8-9.9c-.3 0-.5-.2-.5-.5 0-.1.1-.3.2-.4 2.2-2 4.6-3.7 7.1-5.2.2-.1.5-.1.7.2s.1.5-.2.7c-2.5 1.4-4.8 3.1-6.9 5.1-.2.1-.3.1-.4.1zm52.2-2.8c-.1 0-.2 0-.3-.1L85 16.8c-.2-.1-.3-.5-.1-.7.1-.2.5-.3.7-.1l1.8 1.2c.2.2.3.5.1.7-.1.1-.3.2-.4.2zm-5.6-3.4c-.1 0-.2 0-.2-.1-2.6-1.3-5.2-2.3-8-3.1-.3-.1-.4-.3-.4-.6.1-.3.3-.4.6-.4 2.8.8 5.6 1.8 8.2 3.1.2.1.3.4.2.7 0 .3-.2.4-.4.4zm-35.7-.9c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5.7-.3 1.3-.6 2-.8.3-.1.5 0 .6.3.1.3 0 .5-.3.6-.7.3-1.3.5-2 .8 0 .1-.1.1-.1.1zm8.2-2.7c-.3 0-.5-.2-.5-.5 0-.2.2-.4.4-.5 3.6-.8 7.3-1.1 10.9-.9.3 0 .5.2.5.5s-.2.5-.5.5c-3.6-.2-7.2.1-10.7.9H54z"/>
</g>
<g>
<path fill="#eaeaee" d="M62.6 102.5c-.9 0-1.7 0-2.6-.1-.3 0-.5-.2-.5-.5s.3-.5.5-.5c3.8.2 7.6 0 11.3-.7.3 0 .5.1.6.4 0 .3-.1.5-.4.6-2.9.5-5.9.8-8.9.8zm-10.1-1h-.1c-.9-.2-1.9-.4-2.8-.7-.3-.1-.4-.3-.4-.6s.3-.4.6-.4c.9.2 1.8.5 2.8.6.3.1.4.3.4.6-.1.3-.3.5-.5.5zM46 99.7h-.2l-.9-.3c-.3-.1-.4-.4-.3-.6s.4-.4.6-.3l.9.3c.3.1.4.4.3.6 0 .2-.2.3-.4.3zm33.8-.2c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5l.9-.3c.3-.1.5 0 .6.3s0 .5-.3.6l-.9.3c0 .1 0 .1-.1.1zm4.4-1.8c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5.9-.4 1.7-.8 2.5-1.3.2-.1.5 0 .7.2s0 .5-.2.7c-.8.5-1.7.9-2.6 1.3 0 .1-.1.1-.2.1zm-46.9-2c-.1 0-.2 0-.2-.1-3.4-1.9-6.5-4.2-9.3-6.9-.2-.2-.2-.5 0-.7.2-.2.5-.2.7 0 2.8 2.6 5.8 4.8 9.1 6.7.2.1.3.4.2.7-.1.3-.3.4-.5.3zm55.9-3.4c-.3 0-.5-.2-.5-.5 0-.2.1-.3.2-.4 3-2.3 5.8-4.9 8.2-7.8.2-.2.5-.2.7-.1s.2.5.1.7c-2.5 3-5.3 5.6-8.4 8-.1 0-.2.1-.3.1zm-70.3-9c-.2 0-.3-.1-.4-.2-.6-.7-1.2-1.5-1.7-2.3-.2-.2-.1-.5.1-.7.2-.2.5-.1.7.1.5.8 1.1 1.5 1.7 2.3.2.2.1.5-.1.7-.1.1-.2.1-.3.1zm-3.8-5.5c-.2 0-.3-.1-.4-.2-.2-.3-.3-.6-.5-.8-.1-.2-.1-.5.2-.7s.5-.1.7.2c.2.3.3.5.5.8.1.2.1.5-.2.7h-.3zm87.4-.5c-.3 0-.5-.2-.5-.5 0-.1 0-.2.1-.3.2-.3.3-.5.5-.8.1-.2.4-.3.7-.2.2.1.3.4.2.7-.2.3-.3.6-.5.8-.2.2-.3.3-.5.3zm2.2-4.2h-.2c-.3-.1-.4-.4-.2-.7.4-.9.8-1.7 1.1-2.6.1-.3.4-.4.7-.3.3.1.4.4.3.6-.4.9-.7 1.8-1.1 2.7-.2.2-.4.3-.6.3zM15 69.2c-.2 0-.4-.1-.5-.3-1.3-3.6-2.2-7.4-2.7-11.2 0-.3.2-.5.4-.6.3 0 .5.2.6.4.5 3.8 1.4 7.5 2.7 11 .1.3 0 .5-.3.6-.1.1-.2.1-.2.1zm97.1-6.1h-.1c-.3-.1-.4-.3-.4-.6.8-3.7 1.3-7.5 1.3-11.3V51c0-.3.2-.5.5-.5s.5.2.5.5v.2c0 3.9-.4 7.7-1.3 11.5-.1.3-.3.4-.5.4zM11.9 50.4c-.3 0-.5-.2-.5-.5 0-1 .1-1.9.2-2.9 0-.3.3-.5.5-.5.3 0 .5.3.5.5-.1.9-.1 1.9-.2 2.8 0 .4-.2.6-.5.6zm.6-6.6c-.4 0-.5-.3-.5-.6.1-.3.1-.6.2-1 0-.3.3-.5.6-.4s.5.3.4.6c-.1.3-.1.6-.2.9 0 .3-.2.5-.5.5zm100.1-.8c-.2 0-.5-.2-.5-.4-.1-.3-.1-.6-.2-.9-.1-.3.1-.5.4-.6s.5.1.6.4c.1.3.1.6.2 1 .1.2-.1.4-.5.5.1 0 .1 0 0 0 .1 0 .1 0 0 0zm-1-4.7c-.2 0-.4-.2-.5-.4-.2-.9-.5-1.8-.8-2.7-.1-.3.1-.5.3-.6.3-.1.5.1.6.3.3.9.6 1.8.8 2.8.1.3-.1.5-.4.6.1 0 0 0 0 0zm-96.7-3.8h-.2c-.3-.1-.4-.4-.3-.6 1.3-3.6 3-7.1 5.1-10.4.1-.2.5-.3.7-.1.2.1.3.5.1.7-2.1 3.2-3.8 6.6-5 10.2 0 .1-.2.2-.4.2zm92.9-6c-.2 0-.4-.1-.4-.3-1.7-3.4-3.9-6.5-6.3-9.4-.2-.2-.2-.5.1-.7s.5-.2.7.1c2.5 3 4.7 6.2 6.4 9.6.1.2 0 .5-.2.7h-.3zM24.6 18.1c-.3 0-.5-.2-.5-.5 0-.1 0-.2.1-.3.6-.7 1.3-1.4 2-2.1.2-.2.5-.2.7 0 .2.2.2.5 0 .7-.7.7-1.3 1.4-1.9 2.1-.1.1-.2.1-.4.1zm4.8-4.7c-.3 0-.5-.2-.5-.5 0-.1.1-.3.2-.4.2-.2.5-.4.7-.6.2-.2.5-.1.7.1.2.2.1.5-.1.7-.2.2-.5.4-.7.6-.1.1-.2.1-.3.1zm65.9-.5c-.1 0-.2 0-.3-.1-.2-.2-.5-.4-.7-.6-.3-.2-.3-.5-.1-.7s.5-.2.7-.1c.3.2.5.4.7.6.2.2.2.5.1.7-.1.2-.2.2-.4.2zM91.5 10c-.1 0-.2 0-.3-.1-.8-.5-1.6-1.1-2.4-1.6-.2-.1-.3-.5-.2-.7s.5-.3.7-.2c.8.5 1.6 1 2.4 1.6.2.2.3.5.1.7 0 .2-.1.3-.3.3zM37.1 7.9c-.3 0-.5-.2-.5-.5 0-.2.1-.3.2-.4 3.3-1.9 6.9-3.5 10.6-4.7.3-.1.5.1.6.3.1.3-.1.5-.3.6-3.6 1.1-7.1 2.7-10.4 4.6 0 0-.1.1-.2.1zM82.3 5h-.2c-3.5-1.5-7.2-2.5-10.9-3.2-.3 0-.5-.3-.4-.6 0-.3.3-.5.6-.4 3.8.7 7.5 1.7 11.1 3.2.3.1.4.4.3.7-.1.1-.3.3-.5.3zM55.1 1.6c-.3 0-.5-.2-.5-.5 0-.2.2-.5.4-.5.9-.1 1.9-.3 2.9-.3.3 0 .5.2.5.5s-.2.5-.5.5c-.9 0-1.8.1-2.8.3zm6.7-.6c-.3 0-.5-.2-.5-.5s.2-.5.5-.5h.9c.3 0 .5.2.5.5s-.2.5-.5.5h-.9z"/>
</g>
<g>
<path fill="#eaeaee" d="M142.1 102.5c-.9 0-1.7 0-2.6-.1-.3 0-.5-.2-.5-.5s.3-.5.5-.5c3.8.2 7.6 0 11.3-.7.3 0 .5.1.6.4 0 .3-.1.5-.4.6-2.9.5-5.9.8-8.9.8zm-10.2-1h-.1c-.9-.2-1.9-.4-2.8-.7-.3-.1-.4-.3-.4-.6s.3-.4.6-.4c.9.2 1.8.5 2.8.6.3.1.4.3.4.6s-.2.5-.5.5zm-6.4-1.8h-.2l-.9-.3c-.3-.1-.4-.4-.3-.6s.4-.4.6-.3l.9.3c.3.1.4.4.3.6 0 .2-.2.3-.4.3zm33.8-.2c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5l.9-.3c.3-.1.5 0 .6.3s0 .5-.3.6l-.9.3c0 .1-.1.1-.1.1zm4.4-1.8c-.3 0-.5-.2-.5-.5 0-.2.1-.4.3-.5.9-.4 1.7-.8 2.5-1.3.2-.1.5 0 .7.2s0 .5-.2.7c-.8.5-1.7.9-2.6 1.3-.1.1-.1.1-.2.1zm-46.9-2c-.1 0-.2 0-.2-.1-3.4-1.9-6.5-4.2-9.3-6.9-.2-.2-.2-.5 0-.7.2-.2.5-.2.7 0 2.8 2.6 5.8 4.8 9.1 6.7.2.1.3.4.2.7-.2.2-.3.3-.5.3zm55.9-3.4c-.3 0-.5-.2-.5-.5 0-.2.1-.3.2-.4 3-2.3 5.8-4.9 8.2-7.8.2-.2.5-.2.7-.1s.2.5.1.7c-2.5 3-5.3 5.6-8.4 8-.1 0-.2.1-.3.1zm-70.3-9c-.2 0-.3-.1-.4-.2-.6-.7-1.2-1.5-1.7-2.3-.2-.2-.1-.5.1-.7.2-.2.5-.1.7.1.5.8 1.1 1.5 1.7 2.3.2.2.1.5-.1.7-.1.1-.2.1-.3.1zm-3.9-5.5c-.2 0-.3-.1-.4-.2-.2-.3-.3-.6-.5-.8-.1-.2-.1-.5.2-.7s.5-.1.7.2c.2.3.3.5.5.8.1.2.1.5-.2.7h-.3zm87.4-.5c-.3 0-.5-.2-.5-.5 0-.1 0-.2.1-.3.2-.3.3-.5.5-.8.1-.2.4-.3.7-.2.2.1.3.4.2.7-.2.3-.3.6-.5.8-.1.2-.3.3-.5.3zm2.3-4.2h-.2c-.3-.1-.4-.4-.2-.7.4-.9.8-1.7 1.1-2.6.1-.3.4-.4.7-.3.3.1.4.4.3.6-.4.9-.7 1.8-1.1 2.7-.3.2-.4.3-.6.3zm-93.8-3.9c-.2 0-.4-.1-.5-.3-1.3-3.6-2.2-7.4-2.7-11.2 0-.3.2-.5.4-.6.3 0 .5.2.6.4.5 3.8 1.4 7.5 2.7 11 .1.3 0 .5-.3.6-.1.1-.1.1-.2.1zm97.2-6.1h-.1c-.3-.1-.4-.3-.4-.6.8-3.7 1.3-7.5 1.3-11.3V51c0-.3.2-.5.5-.5s.5.2.5.5v.2c0 3.9-.4 7.7-1.3 11.5-.1.3-.3.4-.5.4zM91.4 50.4c-.3 0-.5-.2-.5-.5 0-1 .1-1.9.2-2.9 0-.3.3-.5.5-.5.3 0 .5.3.5.5-.1.9-.1 1.9-.2 2.8 0 .4-.3.6-.5.6zm.6-6.6c-.1 0-.1 0 0 0-.4 0-.5-.3-.5-.6.1-.3.1-.6.2-1 0-.3.3-.5.6-.4s.5.3.4.6c-.1.3-.1.6-.2.9-.1.3-.3.5-.5.5zm100.1-.8c-.2 0-.5-.2-.5-.4-.1-.3-.1-.6-.2-.9-.1-.3.1-.5.4-.6s.5.1.6.4c.1.3.1.6.2 1 0 .2-.1.4-.5.5.1 0 .1 0 0 0zm-1.1-4.7c-.2 0-.4-.2-.5-.4-.2-.9-.5-1.8-.8-2.7-.1-.3.1-.5.3-.6.3-.1.5.1.6.3.3.9.6 1.8.8 2.8.1.3-.1.5-.4.6.1 0 .1 0 0 0zm-96.6-3.8h-.2c-.3-.1-.4-.4-.3-.6 1.3-3.6 3-7.1 5.1-10.4.1-.2.5-.3.7-.1.2.1.3.5.1.7-2.1 3.2-3.8 6.6-5 10.2 0 .1-.2.2-.4.2zm92.8-6c-.2 0-.4-.1-.4-.3-1.7-3.4-3.9-6.5-6.3-9.4-.2-.2-.2-.5.1-.7s.5-.2.7.1c2.5 3 4.7 6.2 6.4 9.6.1.2 0 .5-.2.7h-.3zm-83.1-10.4c-.3 0-.5-.2-.5-.5 0-.1 0-.2.1-.3.6-.7 1.3-1.4 2-2.1.2-.2.5-.2.7 0 .2.2.2.5 0 .7-.7.7-1.3 1.4-1.9 2.1-.1.1-.3.1-.4.1zm4.7-4.7c-.3 0-.5-.2-.5-.5 0-.1.1-.3.2-.4.2-.2.5-.4.7-.6.2-.2.5-.1.7.1.2.2.1.5-.1.7-.2.2-.5.4-.7.6 0 .1-.2.1-.3.1zm66-.5c-.1 0-.2 0-.3-.1-.2-.2-.5-.4-.7-.6-.2-.2-.2-.5-.1-.7s.5-.2.7-.1c.3.2.5.4.7.6.2.2.2.5.1.7-.1.1-.3.2-.4.2zM171 10c-.1 0-.2 0-.3-.1-.8-.5-1.6-1.1-2.4-1.6-.2-.1-.3-.5-.2-.7s.5-.3.7-.2c.8.5 1.6 1 2.4 1.6.2.2.3.5.1.7 0 .2-.2.3-.3.3zm-54.4-2.1c-.3 0-.5-.2-.5-.5 0-.2.1-.3.2-.4 3.3-1.9 6.9-3.5 10.6-4.7.3-.1.5.1.6.3.1.3-.1.5-.3.6-3.6 1.1-7.1 2.7-10.4 4.6 0 0-.1.1-.2.1zm45.2-3h-.2c-3.5-1.5-7.2-2.5-10.9-3.2-.3 0-.5-.3-.4-.6 0-.3.3-.5.6-.4 3.8.7 7.5 1.7 11.1 3.2.3.1.4.4.3.7-.2.2-.3.3-.5.3zm-27.3-3.3c-.3 0-.5-.2-.5-.5 0-.2.2-.5.4-.5.9-.1 1.9-.3 2.9-.3.3 0 .5.2.5.5s-.2.5-.5.5c-.8 0-1.7.1-2.8.3.1 0 .1 0 0 0zm6.7-.6c-.3 0-.5-.2-.5-.5s.2-.5.5-.5h.9c.3 0 .5.2.5.5s-.2.5-.4.5h-1z"/>
</g>
<path fill="#eaeaee" d="M142.1 6c12 0 23.5 4.8 32 13.3h2.8c-16.3-17.8-43.3-20.4-62.7-6.1h3.5c7.2-4.7 15.7-7.2 24.4-7.2zm0 90.5c-9.3 0-18.4-2.9-26.1-8.3h-3.3c20.3 16.2 50 12.9 66.2-7.4.1-.1.2-.2.2-.3h-2.6c-8.5 10.1-21.1 16-34.4 16zM62.6 6c8.7 0 17.2 2.5 24.5 7.2h3.5C74.5 1.3 52.7.9 36.1 12.1h3.8C46.8 8.1 54.6 6 62.6 6zm0 90.5c-10.1 0-20-3.4-27.9-9.7h-3.1c17.2 15.1 42.6 15.6 60.5 1.4h-3.3c-7.7 5.4-16.9 8.3-26.2 8.3z"/>
<rect width="26" height="45.5" x="170" y="25" fill="#fff" rx="2" ry="2"/>
<path fill="#90e8f0" d="M178.7 51.9c0 .3.1.7.4.9l.5.3 2.9-1.5 2.4 1.3c.3.2.7.2 1-.1l.5-.4-.4-3.4 2-2.1c.2-.3.3-.6.2-.9l-.2-.5-3.2-.6-1.3-2.6c-.2-.3-.5-.5-.9-.5h-.6l-1.5 3.1-2.7.5c-.3.1-.6.3-.7.6l-.1.6 2.3 2.5-.6 2.8zm2.9-5.6l1-1.9 1 1.9 2.1.4-1.5 1.6.3 2.2-1.9-1-1.9 1 .3-2.2-1.5-1.6 2.1-.4z"/>
<rect width="42" height="58.5" x="5" y="18" fill="#fff" rx="2" ry="2"/>
<path fill="#90e8f0" d="M31.7 45.3l-3.6-.6-1.4-2.8c-.2-.4-.6-.6-1-.6H25l-1.7 3.4-3 .5c-.4.1-.7.3-.8.7l-.2.6 2.6 2.8-.5 3.2c0 .4.1.8.4 1l.6.4 3.2-1.7 2.7 1.4c.4.2.8.2 1.1-.1l.5-.4-.5-3.8 2.2-2.3c.3-.3.4-.7.3-1l-.2-.7zm-4.2 3.4l.3 2.3-2-1.1-2 1.1.3-2.4-1.6-1.8 2.3-.4 1-2.1 1 2.1 2.3.4-1.6 1.9z"/>
<rect width="63" height="39" x="73" y="21" fill="#fff" rx="2" ry="2"/>
<path fill="#ccedf0" d="M195.6 21.3H170c-1.9 0-3.4 1.5-3.4 3.5V75c0 1.9 1.5 3.4 3.4 3.4h25.6c1.9 0 3.4-1.5 3.4-3.4V24.7c.1-1.9-1.5-3.4-3.4-3.4zm-8.7 52.8c0 .9-.7 1.6-1.6 1.6h-5c-.9 0-1.6-.7-1.6-1.5v-.1c0-.9.7-1.6 1.6-1.6h5c.9 0 1.6.7 1.6 1.6zm8.9-5.4c0 .9-.8 1.7-1.7 1.7h-22.3c-.9 0-1.7-.8-1.7-1.7V26.8c0-.9.8-1.7 1.7-1.7H194c.9 0 1.7.8 1.7 1.7l.1 41.9zM5.7 84.8h41c2 0 3.7-1.6 3.7-3.7V17.8c0-2-1.6-3.7-3.7-3.7h-41c-2 0-3.7 1.6-3.7 3.7v63.3c0 2.1 1.6 3.7 3.7 3.7zm14.4-4v-1.2c0-.7.6-1.3 1.3-1.3h9.5c.7 0 1.3.6 1.3 1.3v1.3c0 .7-.6 1.3-1.3 1.3h-9.5c-.7 0-1.3-.6-1.3-1.4zM5.5 20c0-1 .8-1.8 1.8-1.8H45c1 0 1.8.8 1.8 1.8v54.4c0 1-.8 1.8-1.8 1.9H7.3c-1 0-1.8-.8-1.8-1.8V20zm68.7 43h61.4c2 0 3.6-1.6 3.6-3.5V18.8c0-2-1.6-3.6-3.6-3.6H74.2c-2 0-3.6 1.6-3.6 3.5v40.7c0 2.1 1.6 3.7 3.6 3.6zm29.5-45c0-.6.5-1.1 1.2-1.1.6 0 1.2.5 1.2 1.1 0 .6-.5 1.1-1.2 1.1-.6 0-1.1-.5-1.1-1l-.1-.1zM74 23.3c0-1.2.9-2.1 2.1-2.1h57.7c1.2 0 2.1.9 2.1 2.1v34.4c0 1.2-.9 2.1-2.1 2.1H76.1c-1.2 0-2.1-.9-2.1-2.1V23.3zm70.4 62.9c1.2.1 2.2-.8 2.2-2v-1c0-.3-.1-.5-.2-.7l-7.3-16.1c-.4-.8-1.2-1.3-2.1-1.2H72.3c-.9 0-1.7.5-2.1 1.3l-6.9 16.1c-.1.2-.1.5-.1.7v1.1c.1 1.2 1 2.1 2.2 2l79-.2zm-8.5-15c.1.4.3.8.3 1.1.1.3-.4.6-.9.6h-3.7c-.3 0-.6-.1-.6-.3-.1-.4-.2-.8-.3-1.1-.1-.3.3-.6.8-.6h3.7c.3-.1.5.1.7.3zm-5.5-4h3.5c.3 0 .5.1.6.3.1.4.2.7.3 1.1.1.3-.3.6-.8.6h-3.4c-.3 0-.5-.1-.6-.3-.1-.4-.3-.7-.4-1.1-.1-.2.3-.5.8-.6zm-3.2 4l.2 1.2c.1.3-.4.6-.9.6h-3.8c-.3 0-.6-.1-.7-.3l-.3-1.2c-.1-.3.4-.7.9-.7h3.9c.4.1.7.2.7.4zm-5.2-4h3.7c.3 0 .6.1.6.3l.2 1.1c.1.3-.4.6-.9.6H122c-.3 0-.6-.1-.6-.3l-.3-1.1c-.1-.2.3-.5.9-.6zm-4.4 4c.1.5.1.7.2 1.2 0 .3-.4.6-.9.6H113c-.4 0-.7-.2-.7-.4l-.3-1.2c-.1-.3.4-.6.9-.6h4.1c.3.1.6.3.6.4zm-5-4h3.9c.4 0 .7.2.7.4l.2 1.1c0 .3-.4.6-.8.6h-3.8c-.4 0-.7-.2-.7-.4l-.2-1.1c-.2-.2.2-.5.7-.6zm-10 .5c.1-.2.4-.4.8-.4h3.5c.4 0 .7.2.7.4l.2 1.1c0 .3-.3.5-.8.5h-3.9c-.5 0-.8-.2-.8-.5.1-.4.2-.6.3-1.1zm-.2 3.7c.1-.2.4-.4.8-.4h3.7c.4 0 .8.2.8.4l.2 1.2c.1.3-.3.6-.8.6H103c-.5 0-.9-.3-.8-.6 0-.5.1-.7.2-1.2zm-8.6-4.1h3.9c.5 0 .9.3.8.6s-.2.7-.3 1.1c-.1.3-.4.4-.7.4h-3.8c-.5 0-.9-.3-.8-.6s.2-.7.3-1.1c0-.2.3-.3.6-.4zm-1.4 4.1c0-.2.3-.4.7-.4h4.1c.5 0 .9.3.8.6-.1.5-.2.7-.3 1.2-.1.3-.4.4-.7.4h-3.9c-.5 0-.9-.3-.9-.6.1-.4.1-.7.2-1.2zm-13.2.3c-.2.4-.3.8-.4 1.2-.1.2-.3.3-.6.4h-3.7c-.5 0-1-.3-.9-.7.1-.4.2-.8.4-1.1.1-.2.4-.4.7-.4h3.7c.6 0 .9.3.8.6zm.9-2.6c-.1.2-.4.4-.7.3H76c-.5 0-.8-.3-.7-.6.1-.4.3-.7.4-1.1.1-.2.3-.4.6-.3h3.5c.5 0 .9.3.8.6s-.3.7-.5 1.1zm7.8 3.8c-.1.2-.3.3-.7.3h-3.8c-.5 0-1-.3-.9-.7s.2-.7.3-1.2c.1-.2.3-.4.7-.4h3.9c.5 0 1 .3.9.7s-.3.8-.4 1.3zm.9-3.9c-.1.2-.4.4-.7.3h-3.6c-.5 0-.9-.3-.8-.6s.2-.7.3-1.1c.1-.2.4-.4.6-.3h3.7c.5 0 .9.3.8.6s-.2.8-.3 1.1zM91 80c.3-1.7.5-2.6.8-4.4 0-.2.3-.4.7-.4l25.3-.2c.4 0 .7.2.7.4.2 1.5.4 3 .4 4.5 0 .3-.4.6-.9.6H91.8c-.4 0-.8-.2-.8-.5z"/>
<linearGradient id="a" x1="-5.898" x2="221.772" y1="-53.462" y2="174.198" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<path fill="url(#a)" d="M195.6 19.3h-.2v-.9c0-.5-.4-.9-.9-.9h-4.8c-.5 0-.9.4-.9.9v.9H170c-3 0-5.4 2.4-5.4 5.4V75c0 3 2.4 5.4 5.4 5.4h25.6c3 0 5.5-2.4 5.5-5.4V24.7c0-3-2.5-5.4-5.5-5.4zm3.5 55.7c0 1.9-1.5 3.4-3.4 3.4h-25.6c-1.9 0-3.4-1.5-3.4-3.4V24.7c0-1.9 1.5-3.4 3.4-3.5h25.6c1.9 0 3.4 1.5 3.4 3.5V75zm-12.2-.9c0 .9-.7 1.6-1.6 1.6h-5c-.9 0-1.6-.7-1.6-1.5v-.1c0-.9.7-1.6 1.6-1.6h5c.9 0 1.6.7 1.6 1.6zM40.1 86.8h6.5c3.1 0 5.7-2.5 5.7-5.7V17.8c0-3-2.3-5.4-5.3-5.6H5.7c-3.1 0-5.7 2.5-5.7 5.6v63.3c0 3.1 2.5 5.7 5.7 5.7h34.4zM2 17.8c0-2 1.6-3.7 3.7-3.7h41c2 0 3.7 1.6 3.7 3.7v63.3c0 2-1.6 3.7-3.7 3.7h-41c-2 0-3.7-1.6-3.7-3.7V17.8zm19.4 64.4c-.7 0-1.3-.6-1.3-1.3v-1.3c0-.7.6-1.3 1.3-1.3h9.5c.7 0 1.3.6 1.3 1.3v1.3c0 .7-.6 1.3-1.3 1.3h-9.5zm100.5 6h22.4c2.3.1 4.2-1.7 4.2-4v-1c0-.5-.1-1.1-.3-1.6l-7.3-16.1c-.3-.8-.9-1.4-1.6-1.8 1.2-1.1 1.9-2.6 1.9-4.2V18.8c0-3.1-2.5-5.5-5.6-5.6H74.2c-3.1 0-5.5 2.5-5.6 5.6v40.7c0 1.5.6 3 1.7 4-.9.4-1.6 1.1-2 2l-6.8 16.2c-.2.5-.3 1-.3 1.5v1.1c.1 2.3 1.9 4.1 4.2 4l56.5-.1zm-56.5-2c-1.2.1-2.2-.8-2.2-2v-1c0-.2 0-.5.1-.7l6.9-16.1c.4-.8 1.2-1.3 2.1-1.3H137c.9 0 1.7.5 2.1 1.2l7.3 16.1c.1.2.2.5.2.7v1c-.1 1.2-1 2.1-2.2 2l-79 .1zm5.2-26.7V18.8c0-2 1.6-3.6 3.6-3.6h61.4c2 0 3.6 1.6 3.6 3.5v40.7c0 2-1.6 3.5-3.6 3.5H74.2c-2 .2-3.6-1.4-3.6-3.4zM91 80c.3-1.7.5-2.6.8-4.4 0-.2.3-.4.7-.4l25.3-.2c.4 0 .7.2.7.4.2 1.5.4 3 .4 4.5 0 .3-.4.6-.9.6H91.8c-.4 0-.8-.2-.8-.5zm-2.8-8.3c-.1.5-.2.7-.3 1.2-.1.2-.3.3-.7.3h-3.8c-.5 0-1-.3-.9-.7s.2-.7.3-1.2c.1-.2.3-.4.7-.4h3.9c.5.2 1 .5.8.8zm4 .9c.1-.5.1-.7.2-1.2 0-.2.3-.4.7-.4h4.1c.5 0 .9.3.8.6-.1.5-.2.7-.3 1.2-.1.3-.4.4-.7.4h-4c-.4 0-.9-.3-.8-.6zm24.7-1.7c.4 0 .7.2.7.4.1.5.1.7.2 1.2 0 .3-.4.6-.9.6H113c-.4 0-.7-.2-.7-.4l-.3-1.2c-.1-.3.4-.6.9-.6h4zm-14.8 1.7l.2-1.2c.1-.2.4-.4.8-.4h3.7c.4 0 .8.2.8.4l.2 1.2c.1.3-.3.6-.8.6h-4.1c-.5 0-.9-.3-.8-.6zm20.6-1.7h3.9c.3 0 .6.1.6.3l.2 1.2c.1.3-.4.6-.9.6h-3.8c-.3 0-.6-.1-.7-.3l-.3-1.2c0-.3.4-.6 1-.6zM89.2 68c-.2.4-.2.7-.4 1.1-.1.2-.4.4-.7.3h-3.6c-.5 0-.9-.3-.8-.6s.2-.7.3-1.1c.1-.2.4-.4.6-.3h3.7c.5 0 1 .3.9.6zm4.6-.6h3.9c.5 0 .9.3.8.6s-.2.7-.3 1.1c-.1.3-.4.4-.7.4h-3.8c-.5 0-.9-.3-.8-.6s.2-.7.3-1.1c0-.3.3-.4.6-.4zM112 69l-.2-1.1c-.1-.3.3-.6.8-.6h3.9c.4 0 .7.2.7.4l.2 1.1c0 .3-.4.6-.8.6h-3.8c-.5-.1-.8-.2-.8-.4zm-9.7-.1c.1-.4.2-.7.3-1.1.1-.2.4-.4.8-.4h3.5c.4 0 .7.2.7.4l.2 1.1c0 .3-.3.5-.8.5h-3.9c-.5 0-.8-.3-.8-.5zm19 .1l-.3-1.1c-.1-.3.4-.6.9-.6h3.7c.3 0 .6.1.6.3l.2 1.1c.1.3-.4.6-.9.6H122c-.3 0-.6-.1-.7-.3zm-42.1 2.8c-.2.4-.3.8-.4 1.2-.1.2-.3.3-.6.4h-3.7c-.5 0-1-.3-.9-.7.1-.4.2-.8.4-1.2.1-.2.4-.4.7-.4h3.7c.6 0 .9.3.8.7zm1.4-3.8c-.2.4-.2.7-.4 1.1-.1.2-.4.4-.7.3H76c-.5 0-.8-.3-.7-.6.1-.4.3-.7.4-1.1.1-.2.3-.4.6-.3h3.5c.4 0 .9.3.8.6zm50.9 2.9h3.7c.3 0 .5.1.7.3.1.4.3.8.3 1.1.1.3-.4.6-.9.6h-3.7c-.3 0-.6-.1-.6-.3-.1-.4-.2-.8-.3-1.1-.2-.3.2-.6.8-.6zm-1.6-1.9c-.1-.4-.3-.7-.4-1.1-.1-.3.4-.6.9-.6h3.5c.3 0 .5.1.6.3.1.4.2.7.3 1.1.1.3-.3.6-.8.6h-3.4c-.3 0-.6-.1-.7-.3zm-25-49.7c-.6 0-1.2-.5-1.2-1.2 0-.6.5-1.1 1.2-1.1.6 0 1.2.5 1.2 1.1-.1.7-.6 1.2-1.2 1.2z"/>
<path fill="#90e8f0" d="M111.5 37.9l-.2-.6-3.6-.6-1.4-2.8c-.2-.4-.6-.6-1-.6h-.7l-1.7 3.4-3 .5c-.4.1-.7.3-.8.7l-.2.6 2.6 2.8-.4 3.2c0 .4.1.8.4 1l.6.4 3.2-1.7 2.7 1.4c.4.2.8.2 1.1-.1l.5-.4-.5-3.8 2.2-2.3c.2-.3.3-.8.2-1.1zm-4.5 2.7l.3 2.4-2-1.1-2 1.1.3-2.4-1.7-1.8 2.3-.4 1-2.1 1 2.1 2.3.4-1.5 1.8z"/>
<linearGradient id="b" x1="3.801" x2="219.4" y1="-49.841" y2="165.759" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<path fill="url(#b)" d="M176.8 34.5c0 3.2 2.6 5.7 5.7 5.7s5.7-2.6 5.7-5.7-2.6-5.7-5.7-5.7-5.7 2.5-5.7 5.7zm5.8-4c2.2 0 4 1.8 4 4s-1.8 4-4 4-4-1.8-4-4 1.8-4 4-4zm-.9 4.3V32c0-.3.2-.5.5-.5s.5.2.5.5v2.3h2.3c.3 0 .5.2.5.5s-.2.5-.5.5h-2.8c-.2 0-.5-.2-.5-.5zm2.2 24.8c-.5-.1-.8-.5-.8-1 0-.4.4-.7.8-.8h1c-.6-.6-1.5-1-2.4-1-1.5 0-2.8 1-3.2 2.5-.1.4-.4.7-.9.7h-.2c-.5-.1-.8-.6-.6-1 .7-2.7 3.4-4.3 6.1-3.6.8.2 1.5.6 2.1 1.1V56c.1-.5.5-.8 1-.8.4 0 .7.4.8.8v2.8c0 .5-.4.9-.9.9l-2.8-.1zm-1.3 5.5c-1.2 0-2.4-.5-3.3-1.2v.4c-.1.5-.5.8-1 .8-.4 0-.7-.4-.8-.8v-2.7c0-.5.4-.9.9-.9h2.8c.5.1.8.5.8 1 0 .4-.4.7-.8.8h-1c.6.6 1.5 1 2.4 1 1.5 0 2.8-1 3.2-2.5.2-.5.7-.7 1.1-.5.4.1.6.5.6 1-.6 2.1-2.6 3.7-4.9 3.6zm-156.8-28c3.5 0 6.3-2.8 6.3-6.3s-2.8-6.3-6.3-6.3-6.3 2.8-6.3 6.3c-.1 3.5 2.7 6.4 6.3 6.3-.1.1-.1.1 0 0zm0-10.6c2.4 0 4.3 1.9 4.3 4.3s-1.9 4.3-4.3 4.3-4.3-1.9-4.3-4.3 1.9-4.2 4.3-4.3zm-.9 4.7v-3c0-.3.2-.5.5-.5s.5.2.5.5v2.5h2.5c.3 0 .5.2.5.5s-.2.5-.5.5h-3c-.3 0-.5-.2-.5-.4v-.1zm6.4 28.3v3c0 .6-.4 1-1 1h-3c-.6 0-1-.4-1-1s.4-1 1-1h1c-.7-.7-1.6-1-2.5-1-1.6 0-3.1 1.1-3.5 2.7-.1.5-.5.8-1 .8h-.2c-.5-.1-.9-.7-.7-1.2.7-3 3.7-4.8 6.6-4.1.9.2 1.7.6 2.4 1.2v-.3c0-.6.4-1 1-1s1 .4.9.9zm-.2 5.9c-.7 3-3.7 4.8-6.6 4.1-.9-.2-1.7-.6-2.4-1.2v.3c0 .6-.4 1-1 1s-1-.4-1-1v-3c0-.6.4-1 1-1h3c.6 0 1 .4 1 1s-.4 1-1 1h-1c.7.7 1.6 1 2.5 1 1.6.1 3.1-1 3.6-2.6.2-.5.7-.8 1.2-.7.6.2.9.7.7 1.1zm57.3-19.6c3.5 0 6.3-2.8 6.3-6.3s-2.8-6.3-6.3-6.3-6.3 2.8-6.3 6.3c0 3.4 2.8 6.3 6.3 6.3zm0-10.7c2.4 0 4.3 1.9 4.3 4.3s-1.9 4.3-4.3 4.3-4.3-1.9-4.3-4.3 1.9-4.3 4.3-4.3zm-.9 4.7v-3c0-.3.2-.5.5-.5s.5.2.5.5v2.5h2.6c.3 0 .5.2.5.5s-.2.5-.5.5H88c-.3 0-.5-.2-.5-.5zm29 4.2v-3c0-.6.4-1 1-1h3c.6 0 1 .4 1 1s-.4 1-1 1h-1c.7.7 1.6 1 2.5 1 1.6 0 3.1-1.1 3.4-2.7.2-.5.7-.8 1.2-.7.5.1.8.7.7 1.2-.7 3-3.7 4.8-6.6 4.1-.9-.2-1.7-.6-2.4-1.2v.3c0 .6-.4 1-1 1s-.9-.4-.8-1zm.2-5.9c.7-3 3.7-4.8 6.6-4.1.9.2 1.7.6 2.4 1.2v-.3c0-.6.4-1 1-1s1 .4 1 1v3c0 .6-.4 1-1 1h-3c-.6 0-1-.4-1-1s.4-1 1-1h1c-.7-.7-1.6-1-2.5-1-1.6 0-3.1 1.1-3.4 2.7-.1.5-.5.8-1 .8h-.2c-.6-.2-1-.7-.9-1.3z"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 20 KiB

Просмотреть файл

@ -1,8 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="194 -104 1000 1000" width="80" height="80">
<path fill="#c3cfd8" d="M694-104.3c276.1 0 500 223.9 500 500s-223.9 500-500 500-500-223.9-500-500c0-276.2 223.9-500 500-500z"/>
<path fill="#fff" fill-rule="evenodd" clip-rule="evenodd" d="M892.4 585.9c10 3.1 19.1 5.7 27.5 8.2 34.5 10 44.8 54.6 17.5 78.1-65.4 56.5-150.7 90.8-244 90.8-92.8 0-177.6-33.8-242.9-89.8-27.4-23.5-17.3-68.2 17.4-78.3 9.2-2.7 19.2-5.5 30.2-9 62.6-19.5 92.6-43.7 98.2-68.7 0-.1 0-.2.1-.2 3.6-16.1-2.8-32.9-15.5-43.5-26.4-22.1-37.1-59.8-44.1-87.5-.8-3.2-1.7-6.5-2.5-9.8-12.1-2.1-25.4-17.3-32.2-38.5-8.2-25.5-3.9-49.8 9.6-54.1 1.3-.4 2.6-.4 3.9-.5-3.1-18.2-6.9-45.4-7.3-69.3-.1-5.2-.2-10.9-.2-16.9 0-3 .1-6.1.1-9.3 0-1.6.1-3.2.2-4.8.1-1.6.2-3.2.3-4.9.9-13.1 2.9-26.8 7-40 7.4-23.7 21.6-45.4 47.4-57.3 5.8-2.7 11-6.4 15.1-11.3 22.4-26.4 49.1-39.6 74.2-45.4 6.9-1.6 13.6-2.6 20.1-3.2 3.2-.3 6.4-.5 9.5-.6 1.6-.1 3.1-.1 4.6-.1h4.5c11.7.3 22 1.8 29.6 3.7 50 12.3 89.2 38 116.4 69.5 13.5 15.8 23.9 33 30.7 50.7 3.4 8.9 5.9 17.9 7.4 26.9.8 4.5 1.3 9 1.6 13.5.3 4.5.3 8.9.1 13.4-1.5 27.1-4.4 45.9-7.3 60.1-2.3 11.1.1 22.2 5 32.4 4.9 10.3 5.3 26.7.2 43.9-6.1 20.3-18.3 35.3-29.8 38.7-2.2 8.1-3.8 13.5-3.9 13.5-3.8 29-10.7 59.8-35.3 82.9-10.5 9.8-15 24.5-13.1 38.7.5 3.5 1 6.6 1.6 9.2 5.6 25.1 35.5 49.3 98.1 68.8z"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.5 KiB

Просмотреть файл

@ -0,0 +1,49 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg height="2in" viewBox="0 0 315.96 144" width="4.39in" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<radialGradient id="a" cx="101.36" cy="70.18" gradientUnits="userSpaceOnUse" r="58.29">
<stop offset=".27" stop-color="#cdcdd4" stop-opacity="0"/>
<stop offset=".46" stop-color="#cdcdd4" stop-opacity=".02"/>
<stop offset=".66" stop-color="#cdcdd4" stop-opacity=".08"/>
<stop offset=".86" stop-color="#cdcdd4" stop-opacity=".18"/>
<stop offset=".9" stop-color="#cdcdd4" stop-opacity=".2"/>
</radialGradient>
<radialGradient id="b" cx="225.08" cy="70.18" r="58.29" xlink:href="#a"/>
<linearGradient id="c" gradientUnits="userSpaceOnUse" x1="28.25" x2="93.99" y1="99.19" y2="33.44">
<stop offset="0" stop-color="#c689ff"/>
<stop offset="1" stop-color="#d74cf0"/>
</linearGradient>
<linearGradient id="d" gradientUnits="userSpaceOnUse" x1="-5.18" x2="106.41" y1="139.25" y2="27.66">
<stop offset=".16" stop-color="#b833e1"/>
<stop offset=".96" stop-color="#ff4f5e"/>
</linearGradient>
<linearGradient id="e" gradientUnits="userSpaceOnUse" x1="96.11" x2="225.52" y1="139" y2="9.59">
<stop offset=".28" stop-color="#7542e5"/>
<stop offset=".42" stop-color="#824deb"/>
<stop offset=".79" stop-color="#a067fa"/>
<stop offset="1" stop-color="#ab71ff"/>
</linearGradient>
<linearGradient id="f" gradientUnits="userSpaceOnUse" x1="221.49" x2="303.29" y1="111.6" y2="29.8">
<stop offset=".43" stop-color="#00b3f4"/>
<stop offset=".61" stop-color="#00bbf6"/>
<stop offset=".89" stop-color="#00d2fc"/>
<stop offset="1" stop-color="#0df"/>
</linearGradient>
<path d="m101.41 128.46a58.3 58.3 0 0 1 -29.09-7.76 3.75 3.75 0 0 1 3.68-6.49 50.75 50.75 0 0 0 25.36 6.79 3.76 3.76 0 0 1 3.77 3.74 3.72 3.72 0 0 1 -3.72 3.72zm14.11-1.85a3.75 3.75 0 0 1 -1-7.36 50.81 50.81 0 0 0 22.75-13.17 3.74 3.74 0 0 1 5.29 5.29 58.22 58.22 0 0 1 -26.1 15.11 3.6 3.6 0 0 1 -.94.13zm-52.67-14.07a3.73 3.73 0 0 1 -2.65-1.09 58.32 58.32 0 0 1 -15.13-26.09 3.74 3.74 0 0 1 7.23-1.94 50.83 50.83 0 0 0 13.19 22.73 3.74 3.74 0 0 1 -2.64 6.39zm85.76-11.36a3.74 3.74 0 0 1 -3.24-5.62 50.78 50.78 0 0 0 6.79-25.38v-.18a3.74 3.74 0 1 1 7.48 0v.14a58.31 58.31 0 0 1 -7.79 29.2 3.73 3.73 0 0 1 -3.24 1.84zm-101.79-27.18a3.7 3.7 0 0 1 -3.75-3.69v-.1a58.33 58.33 0 0 1 7.74-29 3.75 3.75 0 0 1 6.49 3.74 50.77 50.77 0 0 0 -6.74 25.3 3.78 3.78 0 0 1 -3.74 3.75zm107.18-14.39a3.74 3.74 0 0 1 -3.61-2.77 50.73 50.73 0 0 0 -13.24-22.7 3.75 3.75 0 0 1 5.28-5.32 58.23 58.23 0 0 1 15.18 26.06 3.77 3.77 0 0 1 -3.61 4.73zm-91.3-24.16a3.75 3.75 0 0 1 -2.7-6.39 58.26 58.26 0 0 1 26.11-15.15 3.74 3.74 0 1 1 2 7.22 50.92 50.92 0 0 0 -22.76 13.21 3.71 3.71 0 0 1 -2.65 1.11zm65.78-8.86a3.72 3.72 0 0 1 -1.87-.5 50.77 50.77 0 0 0 -25.25-6.71h-.16a3.75 3.75 0 1 1 0-7.49h.08a58.37 58.37 0 0 1 29.06 7.71 3.74 3.74 0 0 1 -1.86 7z" fill="url(#a)"/>
<path d="m225.13 128.46a58.24 58.24 0 0 1 -29.13-7.76 3.75 3.75 0 0 1 3.74-6.49 50.71 50.71 0 0 0 25.34 6.79 3.76 3.76 0 0 1 3.77 3.74 3.72 3.72 0 0 1 -3.72 3.72zm14.11-1.85a3.74 3.74 0 0 1 -1-7.36 50.78 50.78 0 0 0 22.76-13.17 3.74 3.74 0 0 1 5.3 5.29 58.33 58.33 0 0 1 -26.1 15.11 3.72 3.72 0 0 1 -.96.13zm-52.67-14.07a3.71 3.71 0 0 1 -2.64-1.09 58.14 58.14 0 0 1 -15.13-26.09 3.74 3.74 0 1 1 7.2-1.94 50.83 50.83 0 0 0 13.19 22.73 3.74 3.74 0 0 1 -2.64 6.39zm85.76-11.36a3.74 3.74 0 0 1 -3.24-5.62 50.78 50.78 0 0 0 6.79-25.38v-.18a3.75 3.75 0 1 1 7.49 0v.14a58.32 58.32 0 0 1 -7.8 29.2 3.73 3.73 0 0 1 -3.24 1.84zm-101.79-27.18a3.69 3.69 0 0 1 -3.74-3.69v-.1a58.32 58.32 0 0 1 7.73-29 3.75 3.75 0 0 1 6.47 3.67 50.77 50.77 0 0 0 -6.74 25.3 3.78 3.78 0 0 1 -3.72 3.82zm107.18-14.39a3.74 3.74 0 0 1 -3.61-2.77 50.81 50.81 0 0 0 -13.23-22.7 3.74 3.74 0 0 1 5.27-5.32 58.34 58.34 0 0 1 15.19 26.06 3.74 3.74 0 0 1 -2.64 4.59 3.63 3.63 0 0 1 -.98.14zm-91.3-24.16a3.74 3.74 0 0 1 -2.65-6.39 58.2 58.2 0 0 1 26.07-15.15 3.74 3.74 0 1 1 1.95 7.22 51 51 0 0 0 -22.72 13.21 3.71 3.71 0 0 1 -2.65 1.11zm65.78-8.86a3.71 3.71 0 0 1 -1.86-.5 50.8 50.8 0 0 0 -25.26-6.71h-.16a3.75 3.75 0 0 1 0-7.49h.08a58.37 58.37 0 0 1 29.07 7.71 3.74 3.74 0 0 1 -1.87 7z" fill="url(#b)"/>
<path d="m44.62 94.89h33v9.57h-33z" fill="#ff848b"/>
<path d="m21.52 40.17h79.19v52.3h-79.19z" fill="url(#c)"/>
<path d="m109.28 97.75h-2.15v-59.43a4.28 4.28 0 0 0 -4.28-4.32h-83.46a4.28 4.28 0 0 0 -4.28 4.28v59.47h-2.11a2.12 2.12 0 0 0 -2.13 2.12v4.31a2.13 2.13 0 0 0 2.13 2.13h96.32a2.13 2.13 0 0 0 2.13-2.13v-4.31a2.12 2.12 0 0 0 -2.17-2.12zm-39.6 4.25h-17.13v-4.25h17.13z" fill="url(#d)"/>
<path d="m82 62a.83.83 0 0 0 -.83.83v1a5.77 5.77 0 0 0 -9.76 2.62.83.83 0 0 0 .6 1h.2a.84.84 0 0 0 .81-.63 4.11 4.11 0 0 1 4-3.14 4.06 4.06 0 0 1 3.28 1.62h-1.63a.83.83 0 0 0 -.08 1.7h3.41a.84.84 0 0 0 .83-.83v-3.37a.83.83 0 0 0 -.83-.8zm0 6.17a.83.83 0 0 0 -1 .6 4.11 4.11 0 0 1 -7.3 1.49h1.63a.83.83 0 0 0 0-1.66h-3.33a.83.83 0 0 0 -.83.83v3.32a.83.83 0 1 0 1.66.08v-1a5.75 5.75 0 0 0 9.75-2.62.83.83 0 0 0 -.58-1.07zm-36.25-6.72a6.33 6.33 0 1 0 6.33 6.33 6.33 6.33 0 0 0 -6.33-6.33zm0 11.07a4.75 4.75 0 1 1 4.74-4.74 4.75 4.75 0 0 1 -4.74 4.74zm2.77-4.74h-2.77v-2.78a.4.4 0 0 0 -.75 0v3.17a.4.4 0 0 0 .39.39h3.17a.4.4 0 0 0 0-.79zm9.62 6.1a.85.85 0 0 1 -.85-.85.49.49 0 0 1 0-.12l.47-3.37-2.26-2.42a.85.85 0 0 1 .5-1.42l3.15-.56 1.49-3a.85.85 0 0 1 1.14-.38.87.87 0 0 1 .38.38l1.49 3 3.15.56a.85.85 0 0 1 .69 1 .78.78 0 0 1 -.22.43l-2.27 2.42.48 3.36a.85.85 0 0 1 -.73 1 .83.83 0 0 1 -.51-.09l-2.86-1.52-2.85 1.49a.89.89 0 0 1 -.39.09zm-.64-6.88 1.9 2-.4 2.79 2.37-1.23 2.37 1.23-.38-2.79 1.9-2-2.67-.48-1.21-2.43-1.21 2.43z" fill="#f9f9fa"/>
<rect fill="url(#e)" height="69.38" rx="7.65" width="46" x="141.93" y="35.49"/>
<path d="m160.58 93.56h8.57v4.28h-8.57z" fill="#ab71ff"/>
<path d="m169.91 74a.83.83 0 0 0 -.83.83v1a5.75 5.75 0 0 0 -9.75 2.62.83.83 0 0 0 .6 1 .65.65 0 0 0 .2 0 .83.83 0 0 0 .8-.62 4.11 4.11 0 0 1 7.3-1.48h-1.63a.83.83 0 1 0 -.08 1.66h3.39a.83.83 0 0 0 .83-.83v-3.37a.83.83 0 0 0 -.83-.83zm0 6.17a.84.84 0 0 0 -1 .6 4.13 4.13 0 0 1 -4 3.14 4.06 4.06 0 0 1 -3.28-1.66h1.63a.83.83 0 0 0 0-1.65h-3.26a.83.83 0 0 0 -.83.82v3.31a.83.83 0 1 0 1.66.08v-1a5.76 5.76 0 0 0 9.76-2.62.83.83 0 0 0 -.59-1.04zm-5-36.65a6.33 6.33 0 1 0 6.32 6.32 6.32 6.32 0 0 0 -6.29-6.34zm0 11.07a4.75 4.75 0 1 1 4.74-4.75 4.75 4.75 0 0 1 -4.71 4.73zm2.76-4.75h-2.76v-2.79a.4.4 0 0 0 -.4-.39.39.39 0 0 0 -.39.39v3.17a.38.38 0 0 0 .39.39h3.16a.39.39 0 0 0 .4-.39.4.4 0 0 0 -.37-.4zm-6 21.08a.85.85 0 0 1 -.85-.85s0-.07 0-.11l.47-3.37-2.26-2.43a.85.85 0 0 1 0-1.2 1 1 0 0 1 .44-.22l3.15-.56 1.49-3a.85.85 0 0 1 1.14-.38 1 1 0 0 1 .38.38l1.49 3 3.15.56a.86.86 0 0 1 .69 1 .89.89 0 0 1 -.22.43l-2.26 2.43.47 3.37a.85.85 0 0 1 -.72 1 .88.88 0 0 1 -.51-.09l-2.85-1.49-2.85 1.49a.93.93 0 0 1 -.33.02zm-.61-6.92 1.89 2-.38 2.75 2.37-1.23 2.37 1.24-.39-2.76 1.89-2-2.66-.47-1.21-2.44-1.21 2.44z" fill="#f9f9fa"/>
<rect fill="url(#f)" height="65.56" rx="5.76" width="80.89" x="222.47" y="37.4"/>
<path d="m292.6 64.85h5.33v10.66h-5.33z" fill="#0df"/>
<g fill="#f9f9fa">
<path d="m282.65 64.37a.83.83 0 0 0 -.83.83v1a5.75 5.75 0 0 0 -9.75 2.62.83.83 0 0 0 .6 1 .64.64 0 0 0 .2 0 .82.82 0 0 0 .8-.63 4.13 4.13 0 0 1 4-3.14 4.08 4.08 0 0 1 3.33 1.65h-1.63a.82.82 0 0 0 -.87.79.84.84 0 0 0 .79.87h3.39a.83.83 0 0 0 .83-.83v-3.33a.83.83 0 0 0 -.83-.83zm0 6.17a.84.84 0 0 0 -1 .6 4.11 4.11 0 0 1 -7.29 1.49h1.64a.83.83 0 0 0 0-1.63h-3.3a.83.83 0 0 0 -.82.83v3.32a.83.83 0 0 0 1.65.08v-1a5.76 5.76 0 0 0 9.76-2.61.83.83 0 0 0 -.6-1.08z"/>
<path d="m246.41 63.85a6.33 6.33 0 1 0 6.33 6.33 6.32 6.32 0 0 0 -6.33-6.33zm0 11.07a4.75 4.75 0 1 1 4.75-4.74 4.74 4.74 0 0 1 -4.75 4.74zm2.77-4.74h-2.77v-2.77a.38.38 0 0 0 -.41-.41.39.39 0 0 0 -.4.39v3.16a.4.4 0 0 0 .4.4h3.16a.4.4 0 1 0 0-.79z"/>
<path d="m258.8 76.28a.85.85 0 0 1 -.85-.85s0-.08 0-.12l.47-3.37-2.26-2.43a.85.85 0 0 1 0-1.2.9.9 0 0 1 .44-.21l3.15-.56 1.49-3a.85.85 0 0 1 1.14-.38.87.87 0 0 1 .38.38l1.48 3 3.16.56a.85.85 0 0 1 .69 1 .89.89 0 0 1 -.22.43l-2.26 2.43.47 3.37a.85.85 0 0 1 -.72 1 .88.88 0 0 1 -.51-.09l-2.85-1.48-2.86 1.48a.76.76 0 0 1 -.34.04zm-.63-6.88 1.89 2-.38 2.76 2.37-1.16 2.37 1.24-.42-2.81 1.89-2-2.66-.48-1.21-2.43-1.22 2.43z"/>
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 8.2 KiB

Просмотреть файл

@ -1,57 +1,52 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 106.6 89.6">
<style>
.st0{fill:#fff}
</style>
<path class="st0" d="M99.2 24.4H83.9V7.5c0-4.2-3.4-7.5-7.6-7.5H14.9c-4.2 0-7.5 3.4-7.5 7.5v40.7c0 1.3.4 2.6 1 3.7-.4.5-.8 1-1 1.6L.5 69.6c-.3.7-.5 1.5-.5 2.3V73c.1 3.4 2.8 6.1 6.2 6h60v3.2c0 4.1 3.3 7.4 7.4 7.4h25.6c4.1 0 7.4-3.3 7.4-7.4V31.9c.1-4.2-3.2-7.5-7.4-7.5z"/>
<path class="st0" d="M14.6 3.7H76c2 0 3.6 1.6 3.6 3.5v40.7c0 2-1.6 3.6-3.6 3.6H14.6c-2 0-3.5-1.6-3.5-3.6V7.3c0-2 1.6-3.6 3.5-3.6z"/>
<path class="st0" d="M16.5 9.7h57.7c1.2 0 2.1.9 2.1 2.1v34.4c0 1.2-.9 2.1-2.1 2.1H16.5c-1.2 0-2.1-.9-2.1-2.1V11.8c0-1.1 1-2.1 2.1-2.1z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.2468" y1="-1740.7432" x2="92.0768" y2="-1813.5831" gradientTransform="matrix(1 0 0 -1 .02 -1737.83)">
<stop offset="0" stop-color="#ccfbff"/>
<stop offset="1" stop-color="#c9e4ff"/>
<svg height="2in" viewBox="0 0 216 144" width="3in" xmlns="http://www.w3.org/2000/svg">
<radialGradient id="a" cx="224" cy="135.18" gradientUnits="userSpaceOnUse" r="102.61">
<stop offset=".26" stop-color="#cdcdd4" stop-opacity="0"/>
<stop offset=".4" stop-color="#cdcdd4" stop-opacity=".02"/>
<stop offset=".55" stop-color="#cdcdd4" stop-opacity=".08"/>
<stop offset=".69" stop-color="#cdcdd4" stop-opacity=".18"/>
<stop offset=".72" stop-color="#cdcdd4" stop-opacity=".2"/>
</radialGradient>
<radialGradient id="b" cx="-33.16" cy="130.43" gradientUnits="userSpaceOnUse" r="150.75">
<stop offset=".27" stop-color="#cdcdd4" stop-opacity="0"/>
<stop offset=".46" stop-color="#cdcdd4" stop-opacity=".02"/>
<stop offset=".66" stop-color="#cdcdd4" stop-opacity=".08"/>
<stop offset=".86" stop-color="#cdcdd4" stop-opacity=".18"/>
<stop offset=".9" stop-color="#cdcdd4" stop-opacity=".2"/>
</radialGradient>
<radialGradient id="c" cx="129.21" cy="117.26" gradientTransform="matrix(1 0 0 .7 0 35.37)" gradientUnits="userSpaceOnUse" r="112.67">
<stop offset=".4" stop-color="#cdcdd4" stop-opacity="0"/>
<stop offset=".58" stop-color="#cdcdd4" stop-opacity=".02"/>
<stop offset=".77" stop-color="#cdcdd4" stop-opacity=".08"/>
<stop offset=".96" stop-color="#cdcdd4" stop-opacity=".18"/>
<stop offset="1" stop-color="#cdcdd4" stop-opacity=".2"/>
</radialGradient>
<linearGradient id="d" gradientUnits="userSpaceOnUse" x1="67.44" x2="126.91" y1="85.38" y2="25.9">
<stop offset="0" stop-color="#c689ff"/>
<stop offset="1" stop-color="#d74cf0"/>
</linearGradient>
<path d="M74.2 10.7c.6 0 1.1.5 1.1 1.1v34.4c0 .6-.5 1.1-1.1 1.1H16.5c-.6 0-1.1-.5-1.1-1.1V11.8c0-.6.5-1.1 1.1-1.1h57.7" fill="url(#SVGID_1_)"/>
<path class="st0" d="M79.5 54.8c-.4-.8-1.2-1.3-2.1-1.2H12.8c-.9 0-1.7.5-2.1 1.3L3.8 71c-.1.2-.1.5-.1.7v1.1c.1 1.2 1 2.1 2.2 2h78.9c1.2.1 2.2-.8 2.2-2v-1c0-.3-.1-.5-.2-.7l-7.3-16.3z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-40.7021" y1="-1702.8644" x2="146.2979" y2="-1872.3644" gradientTransform="matrix(1 0 0 -1 .02 -1737.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
<linearGradient id="e" gradientUnits="userSpaceOnUse" x1="37.24" x2="138.18" y1="121.61" y2="20.67">
<stop offset=".22" stop-color="#b833e1"/>
<stop offset=".91" stop-color="#ff4f5e"/>
</linearGradient>
<path d="M88.7 70.1L81.4 54c-.3-.8-.9-1.4-1.6-1.8 1.2-1.1 1.9-2.6 1.9-4.2V7.3c0-3.1-2.5-5.5-5.6-5.5H14.7c-3.1 0-5.5 2.5-5.5 5.5V48c0 1.5.6 3 1.7 4-.9.4-1.6 1.1-2 2L2 70.2c-.2.5-.3 1-.3 1.5v1.1c.1 2.3 1.9 4.1 4.2 4h78.9c2.3.1 4.2-1.7 4.2-4v-1c0-.6-.1-1.2-.3-1.7zM87 72.7c-.1 1.2-1 2.1-2.2 2H5.9c-1.2.1-2.2-.8-2.2-2v-1.1c0-.2 0-.5.1-.7l6.9-16.1c.4-.8 1.2-1.3 2.1-1.3h64.7c.9 0 1.7.5 2.1 1.2l7.3 16.1c.1.2.2.5.2.7l-.1 1.2zM11.1 48V7.3c0-2 1.6-3.5 3.5-3.5H76c2 0 3.6 1.6 3.6 3.5V48c0 2-1.6 3.6-3.5 3.6H14.7c-2 0-3.6-1.6-3.6-3.6z" fill="url(#SVGID_2_)"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-87.5994" y1="-1666.14" x2="165.4006" y2="-1916.14" gradientTransform="matrix(1 0 0 -1 .02 -1737.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
<linearGradient id="f" gradientUnits="userSpaceOnUse" x1="80.06" x2="199.29" y1="149.59" y2="30.36">
<stop offset=".28" stop-color="#7542e5"/>
<stop offset=".42" stop-color="#824deb"/>
<stop offset=".79" stop-color="#a067fa"/>
<stop offset="1" stop-color="#ab71ff"/>
</linearGradient>
<path d="M58.5 69H32.2c-.4 0-.8-.2-.8-.5.3-1.7.5-2.6.8-4.4 0-.2.3-.4.7-.4l25.3-.2c.4 0 .7.2.7.4.2 1.5.4 3 .4 4.5.1.4-.3.6-.8.6zm-30.7-9.4h-3.9c-.3 0-.6.2-.7.4-.1.5-.2.7-.3 1.2s.4.7.9.7h3.8c.3 0 .6-.1.7-.3.1-.5.2-.7.3-1.2s-.3-.8-.8-.8zm9.9 0h-4.1c-.4 0-.7.2-.7.4-.1.5-.1.7-.2 1.2-.1.3.4.6.9.6h3.9c.3 0 .6-.1.7-.4.1-.5.2-.7.3-1.2.1-.4-.3-.7-.8-.6zM58.2 61c-.1-.5-.1-.7-.2-1.2 0-.2-.3-.4-.7-.4h-4.1c-.5 0-.9.3-.9.6l.3 1.2c0 .2.3.4.7.4h3.9c.6 0 1.1-.3 1-.6zm-9.9.1l-.2-1.2c0-.2-.4-.4-.8-.4h-3.7c-.4 0-.8.2-.8.4-.1.5-.2.7-.2 1.2-.1.3.3.6.8.6h4.1c.4-.1.8-.3.8-.6zm19.6-.2l-.2-1.2c0-.2-.3-.3-.6-.3h-3.9c-.5 0-1 .3-.9.7l.3 1.2c.1.2.3.3.7.3h3.8c.4-.1.9-.4.8-.7zm-39.1-5h-3.7c-.3 0-.5.1-.6.3-.1.4-.2.7-.3 1.1s.3.6.8.6h3.6c.3 0 .5-.1.7-.3.2-.4.2-.7.4-1.1s-.4-.6-.9-.6zm9.4 0h-3.9c-.4 0-.7.2-.7.4-.1.4-.2.7-.3 1.1s.3.6.8.6h3.8c.3 0 .6-.1.7-.4.1-.4.2-.7.3-1.1s-.3-.6-.7-.6zm19.6 1.4l-.2-1.1c0-.2-.3-.4-.7-.4H53c-.5 0-.9.3-.8.6l.2 1.1c0 .2.3.4.7.4h3.8c.5-.1.9-.3.9-.6zm-9.5.1l-.2-1.1c0-.2-.3-.4-.7-.4h-3.6c-.4 0-.7.2-.8.4-.1.4-.2.7-.3 1.1-.1.3.3.5.8.5h3.9c.5 0 .9-.3.9-.5zm18.7-.1l-.2-1.1c0-.2-.3-.3-.6-.3h-3.7c-.5 0-1 .3-.9.6l.3 1.1c.1.2.3.3.6.3h3.6c.5-.1.9-.4.9-.6zm-48.1 2.4h-3.8c-.3 0-.6.1-.7.4-.2.4-.3.8-.4 1.2-.1.3.4.7.9.7h3.7c.3 0 .6-.2.6-.4.1-.4.2-.8.4-1.2.2-.5-.2-.8-.7-.7zm1.3-3.7h-3.5c-.2 0-.5.1-.6.3-.1.4-.2.7-.4 1.1-.1.3.2.6.7.6h3.5c.3 0 .5-.1.7-.3.2-.4.3-.7.5-1.1s-.4-.7-.9-.6zm50.9 4.1c.1.4.3.8.3 1.1 0 .2.3.3.6.3h3.7c.5 0 1-.3.9-.6-.1-.4-.2-.8-.3-1.1-.1-.2-.4-.4-.7-.3h-3.7c-.5-.1-.9.2-.8.6zM70 56.4c.1.4.2.7.4 1.1.1.2.4.3.6.3h3.4c.5 0 .8-.3.8-.6-.1-.4-.2-.7-.3-1.1 0-.2-.2-.3-.6-.3h-3.5c-.4 0-.9.3-.8.6z" fill="url(#SVGID_3_)"/>
<g>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-58.8206" y1="-1638.5309" x2="189.1794" y2="-1888.5308" gradientTransform="matrix(1 0 0 -1 0 -1738)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<circle cx="46.4" cy="6.6" r="1.2" fill="url(#SVGID_4_)"/>
</g>
<path class="st0" d="M73.4 27.2H99c2.5 0 4.4 2 4.4 4.4v50.3c0 2.5-2 4.4-4.4 4.4H73.4c-2.5 0-4.4-2-4.4-4.4V31.6c-.1-2.4 1.9-4.4 4.4-4.4z"/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-55.4553" y1="-1665.9757" x2="185.0447" y2="-1884.4757" gradientTransform="matrix(1 0 0 -1 .02 -1737.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<path d="M98.9 28.2c1.9 0 3.4 1.5 3.4 3.4v50.3c0 1.9-1.5 3.4-3.4 3.4H73.3c-1.9 0-3.4-1.5-3.4-3.4V31.6c0-1.9 1.5-3.4 3.4-3.4h25.6m0-2H73.3c-3 0-5.4 2.4-5.4 5.4v50.3c0 3 2.4 5.4 5.4 5.4h25.6c3 0 5.4-2.4 5.4-5.4V31.6c.1-3-2.4-5.4-5.4-5.4z" fill="url(#SVGID_5_)"/>
<g>
<path class="st0" d="M74.9 32h22.4c.9 0 1.7.8 1.7 1.7v41.9c0 .9-.8 1.7-1.7 1.7H74.9c-.9 0-1.7-.8-1.7-1.7V33.7c0-.9.8-1.7 1.7-1.7z"/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="26.795" y1="-1733.1949" x2="99.635" y2="-1806.0349" gradientTransform="matrix(1 0 0 -1 .02 -1737.83)">
<stop offset="0" stop-color="#ccfbff"/>
<stop offset="1" stop-color="#c9e4ff"/>
</linearGradient>
<path d="M97.3 33c.4 0 .7.3.7.7v41.9c0 .4-.3.7-.7.7H74.9c-.4 0-.7-.3-.7-.7V33.7c0-.4.3-.7.7-.7h22.4" fill="url(#SVGID_6_)"/>
</g>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-109.61" y1="-1776.874" x2="226.72" y2="-1776.874" gradientTransform="matrix(1 0 0 -1 .02 -1737.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<path d="M46.7 45c-.6 0-1.1-.2-1.6-.6l-15-12.1c-1.5-1-2.7-2.2-3.7-3.7-3.3-5.1-2.6-11.7 1.7-16 5-5 13-5 17.9 0 .1.1.3.2.5.2s.4-.1.5-.2c5.1-4.8 13.1-4.6 18 .5s4.6 13.1-.5 18c-.5.4-1 .9-1.5 1.2L48.2 44.5c-.4.3-1 .5-1.5.5zm41 23.7l11-9c4.4-3 5.6-9 2.7-13.4-3-4.4-9-5.6-13.4-2.7-.5.3-1 .7-1.4 1.2 0 0-.1.1-.2.1s-.1 0-.2-.1c-3.8-3.8-9.9-3.8-13.7 0-3.2 3.2-3.8 8.3-1.3 12.2.7 1.1 1.7 2.1 2.8 2.8l11.1 9c.7.6 1.8.6 2.6-.1z" fill="url(#SVGID_7_)"/>
<path class="st0" d="M37.1 10c3.1 0 6.1 1.2 8.3 3.4.3.3.7.5 1.2.5.4 0 .9-.2 1.2-.5 4.6-4.5 12-4.5 16.6.1 4.5 4.6 4.5 12-.1 16.6-.5.5-1.1 1-1.7 1.4l-15 12.2c-.3.2-.6.3-.9.3s-.7-.1-.9-.3l-15-12.2c-1.4-.9-2.5-2-3.4-3.4-3-4.6-2.4-10.7 1.5-14.7C31 11.3 34 10 37.1 10m0-2c-3.6 0-7.1 1.4-9.7 4-4.6 4.6-5.3 11.8-1.8 17.2 1 1.6 2.3 2.9 3.9 3.9l15 12.1c1.3 1 3.1 1 4.3 0l14.9-12.1c6.3-4.2 8-12.7 3.8-19s-12.7-8-19-3.8c-.7.5-1.3 1-1.9 1.5C44 9.4 40.6 8 37.1 8z"/>
<path class="st0" d="M30.1 23.4h-.2c-1.1-.1-1.9-1-1.8-2.1.3-3.8 3.1-7 6.8-7.8 1-.4 2.2 0 2.6 1s0 2.2-1 2.6c-.2.1-.5.2-.8.2-2.1.5-3.6 2.2-3.8 4.3 0 1-.8 1.7-1.8 1.8zM79.2 43c2.3 0 4.5.9 6.1 2.6.2.2.5.4.9.4.3 0 .6-.1.9-.4 3.4-3.4 8.9-3.4 12.3 0s3.4 8.9 0 12.3c-.4.4-.8.8-1.3 1.1L87 68c-.2.2-.4.2-.7.2-.2 0-.5-.1-.7-.2l-11.1-9c-1-.7-1.9-1.5-2.5-2.5-2.2-3.4-1.7-8 1.1-10.9 1.6-1.7 3.8-2.6 6.1-2.6m0-2c-2.8 0-5.5 1.1-7.5 3.1-3.6 3.6-4.1 9.2-1.4 13.4.8 1.2 1.8 2.2 3 3l11 8.9c1.1.9 2.7.9 3.9 0l11-9c4.9-3.3 6.1-10 2.8-14.8-3.3-4.9-10-6.1-14.8-2.8-.3.2-.7.5-1 .7-2-1.6-4.5-2.6-7-2.5z"/>
<path class="st0" d="M74.1 52.9c-.9-.1-1.5-.8-1.4-1.6.2-2.8 2.2-5.2 5-5.8.8-.2 1.6.3 1.8 1.1.2.8-.3 1.6-1.1 1.8h-.1c-1.5.3-2.7 1.6-2.8 3.2-.1.7-.7 1.3-1.4 1.3z"/>
<path class="st0" d="M46.4 45.3c-.7 0-1.2-.6-1.2-1.2v-6.2c0-.3.1-.6.4-.9l1.7-1.7-4-4c-.5-.5-.5-1.3 0-1.8l6.3-6.3-3.9-3.9c-.2-.2-.4-.6-.4-.9v-4.6c0-.7.6-1.2 1.2-1.2s1.2.6 1.2 1.2v4.1l4.4 4.4c.5.5.5 1.3 0 1.8l-6.3 6.3 4 4c.5.5.5 1.3 0 1.8l-2.1 2.1V44c0 .7-.6 1.3-1.3 1.3zm39.7 23.8c-.7 0-1.2-.6-1.2-1.2v-4.8c0-.3.1-.6.4-.9l1.1-1.1-2.9-2.9c-.2-.2-.4-.6-.4-.9s.1-.6.4-.9l4.6-4.6-2.7-2.7c-.2-.2-.4-.6-.4-.9v-3.5c0-.7.6-1.2 1.2-1.2s1.2.6 1.2 1.2v3l3.2 3.2c.2.2.4.6.4.9s-.1.6-.4.9L86 57.3l2.9 2.9c.5.5.5 1.3 0 1.8l-1.6 1.6v4.2c.1.8-.5 1.3-1.2 1.3z"/>
<path d="m209.32 76.55a9.51 9.51 0 0 1 -9.47 9.51h-38.07a7.27 7.27 0 0 1 0-14.54 7.15 7.15 0 0 1 1.74.22 7.89 7.89 0 0 1 -.2-1.69 7.5 7.5 0 0 1 11.74-6.18 12.6 12.6 0 0 1 24.79 3.13 9.51 9.51 0 0 1 9.47 9.55z" fill="url(#a)"/>
<path d="m84.66 32.38a10.74 10.74 0 0 0 -2.66.32 11.09 11.09 0 0 0 .29-2.53 11.3 11.3 0 0 0 -17.69-9.31 19 19 0 0 0 -37.37 4.77 14.27 14.27 0 1 0 0 28.54h57.43a10.9 10.9 0 0 0 0-21.79z" fill="url(#b)"/>
<path d="m24.87 72.66a22.54 22.54 0 0 1 22.45-22.66l120.77-.48a22.53 22.53 0 1 1 .18 45.06l-120.77.53a22.54 22.54 0 0 1 -22.63-22.45z" fill="url(#c)"/>
<path d="m83.89 81.48h29.85v8.65h-29.85z" fill="#ff848b"/>
<path d="m61.36 31.98h71.63v47.31h-71.63z" fill="url(#d)"/>
<path d="m140.78 84.07h-1.95v-53.76a3.86 3.86 0 0 0 -3.83-3.86h-75.54a3.86 3.86 0 0 0 -3.86 3.87v53.75h-2a1.92 1.92 0 0 0 -1.88 1.93v3.9a1.92 1.92 0 0 0 1.93 1.93h87.13a1.93 1.93 0 0 0 1.93-1.93v-3.9a1.93 1.93 0 0 0 -1.93-1.93zm-35.78 3.87h-15.53v-3.87h15.53z" fill="url(#e)"/>
<rect fill="url(#f)" height="62.76" rx="5.4" width="41.61" x="122.66" y="54.8"/>
<path d="m139.53 107.32h7.75v3.87h-7.75z" fill="#ab71ff"/>
<g fill="#f9f9fa">
<path d="m107.19 47.81a6.25 6.25 0 0 0 -8.81 0l-.17.18-1.31 3.2 5.23.32a1 1 0 0 1 .63 1.62l-6.12 6.34a1 1 0 0 1 -.69.29.93.93 0 0 1 -.66-.27 1 1 0 0 1 0-1.36l4.68-4.83-4.52-.3a1 1 0 0 1 -.76-.45 1 1 0 0 1 -.07-.87l1.49-3.68-.24-.23a6.23 6.23 0 0 0 -8.8 0 6.22 6.22 0 0 0 0 8.8l9 9a1.5 1.5 0 0 0 1.07.44 1.54 1.54 0 0 0 1.07-.44l9-9a6.24 6.24 0 0 0 -.02-8.76z"/>
<path d="m153.39 74.11a6.24 6.24 0 0 0 -8.81 0l-.18.18-1.3 3.21 5.23.32a1 1 0 0 1 .63 1.62l-6.12 6.33a1 1 0 0 1 -1.35 0 1 1 0 0 1 0-1.35l4.68-4.83-4.49-.28a1 1 0 0 1 -.76-.44 1 1 0 0 1 -.07-.87l1.49-3.67-.24-.24a6.23 6.23 0 0 0 -8.8 8.81l9 9a1.51 1.51 0 0 0 2.15 0l9-9a6.25 6.25 0 0 0 -.06-8.79z"/>
</g>
</svg>

До

Ширина:  |  Высота:  |  Размер: 8.1 KiB

После

Ширина:  |  Высота:  |  Размер: 4.1 KiB

Просмотреть файл

@ -1,56 +1,50 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 106.6 89.6">
<style>
.st0{fill:#fff}
</style>
<path class="st0" d="M99.2 24.4H83.9V7.5c0-4.2-3.4-7.5-7.6-7.5H14.9c-4.2 0-7.5 3.4-7.5 7.5v40.7c0 1.3.4 2.6 1 3.7-.4.5-.8 1-1 1.6L.5 69.6c-.3.7-.5 1.5-.5 2.3V73c.1 3.4 2.8 6.1 6.2 6h60v3.2c0 4.1 3.3 7.4 7.4 7.4h25.6c4.1 0 7.4-3.3 7.4-7.4V31.9c.1-4.2-3.2-7.5-7.4-7.5z"/>
<path class="st0" d="M14.6 3.7H76c2 0 3.6 1.6 3.6 3.5v40.7c0 2-1.6 3.6-3.6 3.6H14.6c-2 0-3.5-1.6-3.5-3.6V7.3c0-2 1.6-3.6 3.5-3.6z"/>
<path class="st0" d="M16.5 9.7h57.7c1.2 0 2.1.9 2.1 2.1v34.4c0 1.2-.9 2.1-2.1 2.1H16.5c-1.2 0-2.1-.9-2.1-2.1V11.8c0-1.1 1-2.1 2.1-2.1z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.2468" y1="1832.7432" x2="92.0768" y2="1905.5831" gradientTransform="translate(.02 -1829.83)">
<stop offset="0" stop-color="#ccfbff"/>
<stop offset="1" stop-color="#c9e4ff"/>
<svg height="2in" viewBox="0 0 216 144" width="3in" xmlns="http://www.w3.org/2000/svg">
<radialGradient id="a" cx="85.91" cy="159.8" gradientUnits="userSpaceOnUse" r="102.61">
<stop offset=".26" stop-color="#cdcdd4" stop-opacity="0"/>
<stop offset=".4" stop-color="#cdcdd4" stop-opacity=".02"/>
<stop offset=".55" stop-color="#cdcdd4" stop-opacity=".08"/>
<stop offset=".69" stop-color="#cdcdd4" stop-opacity=".18"/>
<stop offset=".72" stop-color="#cdcdd4" stop-opacity=".2"/>
</radialGradient>
<radialGradient id="b" cx="72.32" cy="144.71" gradientUnits="userSpaceOnUse" r="150.75">
<stop offset=".27" stop-color="#cdcdd4" stop-opacity="0"/>
<stop offset=".46" stop-color="#cdcdd4" stop-opacity=".02"/>
<stop offset=".66" stop-color="#cdcdd4" stop-opacity=".08"/>
<stop offset=".86" stop-color="#cdcdd4" stop-opacity=".18"/>
<stop offset=".9" stop-color="#cdcdd4" stop-opacity=".2"/>
</radialGradient>
<radialGradient id="c" cx="129.21" cy="117.26" gradientTransform="matrix(1 0 0 .7 0 35.37)" gradientUnits="userSpaceOnUse" r="112.67">
<stop offset=".4" stop-color="#cdcdd4" stop-opacity="0"/>
<stop offset=".58" stop-color="#cdcdd4" stop-opacity=".02"/>
<stop offset=".77" stop-color="#cdcdd4" stop-opacity=".08"/>
<stop offset=".96" stop-color="#cdcdd4" stop-opacity=".18"/>
<stop offset="1" stop-color="#cdcdd4" stop-opacity=".2"/>
</radialGradient>
<linearGradient id="d" gradientUnits="userSpaceOnUse" x1="67.44" x2="126.91" y1="85.38" y2="25.9">
<stop offset="0" stop-color="#c689ff"/>
<stop offset="1" stop-color="#d74cf0"/>
</linearGradient>
<path d="M74.2 10.7c.6 0 1.1.5 1.1 1.1v34.4c0 .6-.5 1.1-1.1 1.1H16.5c-.6 0-1.1-.5-1.1-1.1V11.8c0-.6.5-1.1 1.1-1.1h57.7" fill="url(#SVGID_1_)"/>
<path class="st0" d="M79.5 54.8c-.4-.8-1.2-1.3-2.1-1.2H12.8c-.9 0-1.7.5-2.1 1.3L3.8 71c-.1.2-.1.5-.1.7v1.1c.1 1.2 1 2.1 2.2 2h78.9c1.2.1 2.2-.8 2.2-2v-1c0-.3-.1-.5-.2-.7l-7.3-16.3z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-40.7021" y1="1794.8644" x2="146.2979" y2="1964.3644" gradientTransform="translate(.02 -1829.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
<linearGradient id="e" gradientUnits="userSpaceOnUse" x1="37.24" x2="138.18" y1="121.61" y2="20.67">
<stop offset=".22" stop-color="#b833e1"/>
<stop offset=".91" stop-color="#ff4f5e"/>
</linearGradient>
<path d="M88.7 70.1L81.4 54c-.3-.8-.9-1.4-1.6-1.8 1.2-1.1 1.9-2.6 1.9-4.2V7.3c0-3.1-2.5-5.5-5.6-5.5H14.7c-3.1 0-5.5 2.5-5.5 5.5V48c0 1.5.6 3 1.7 4-.9.4-1.6 1.1-2 2L2 70.2c-.2.5-.3 1-.3 1.5v1.1c.1 2.3 1.9 4.1 4.2 4h78.9c2.3.1 4.2-1.7 4.2-4v-1c0-.6-.1-1.2-.3-1.7zM87 72.7c-.1 1.2-1 2.1-2.2 2H5.9c-1.2.1-2.2-.8-2.2-2v-1.1c0-.2 0-.5.1-.7l6.9-16.1c.4-.8 1.2-1.3 2.1-1.3h64.7c.9 0 1.7.5 2.1 1.2l7.3 16.1c.1.2.2.5.2.7l-.1 1.2zM11.1 48V7.3c0-2 1.6-3.5 3.5-3.5H76c2 0 3.6 1.6 3.6 3.5V48c0 2-1.6 3.6-3.5 3.6H14.7c-2 0-3.6-1.6-3.6-3.6z" fill="url(#SVGID_2_)"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-87.5994" y1="1758.14" x2="165.4006" y2="2008.14" gradientTransform="translate(.02 -1829.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
<linearGradient id="f" gradientUnits="userSpaceOnUse" x1="80.06" x2="199.29" y1="149.59" y2="30.36">
<stop offset=".28" stop-color="#7542e5"/>
<stop offset=".42" stop-color="#824deb"/>
<stop offset=".79" stop-color="#a067fa"/>
<stop offset="1" stop-color="#ab71ff"/>
</linearGradient>
<path d="M58.5 69H32.2c-.4 0-.8-.2-.8-.5.3-1.7.5-2.6.8-4.4 0-.2.3-.4.7-.4l25.3-.2c.4 0 .7.2.7.4.2 1.5.4 3 .4 4.5.1.4-.3.6-.8.6zm-30.7-9.4h-3.9c-.3 0-.6.2-.7.4-.1.5-.2.7-.3 1.2s.4.7.9.7h3.8c.3 0 .6-.1.7-.3.1-.5.2-.7.3-1.2s-.3-.8-.8-.8zm9.9 0h-4.1c-.4 0-.7.2-.7.4-.1.5-.1.7-.2 1.2-.1.3.4.6.9.6h3.9c.3 0 .6-.1.7-.4.1-.5.2-.7.3-1.2.1-.4-.3-.7-.8-.6zM58.2 61c-.1-.5-.1-.7-.2-1.2 0-.2-.3-.4-.7-.4h-4.1c-.5 0-.9.3-.9.6l.3 1.2c0 .2.3.4.7.4h3.9c.6 0 1.1-.3 1-.6zm-9.9.1l-.2-1.2c0-.2-.4-.4-.8-.4h-3.7c-.4 0-.8.2-.8.4-.1.5-.2.7-.2 1.2-.1.3.3.6.8.6h4.1c.4-.1.8-.3.8-.6zm19.6-.2l-.2-1.2c0-.2-.3-.3-.6-.3h-3.9c-.5 0-1 .3-.9.7l.3 1.2c.1.2.3.3.7.3h3.8c.4-.1.9-.4.8-.7zm-39.1-5h-3.7c-.3 0-.5.1-.6.3-.1.4-.2.7-.3 1.1s.3.6.8.6h3.6c.3 0 .5-.1.7-.3.2-.4.2-.7.4-1.1s-.4-.6-.9-.6zm9.4 0h-3.9c-.4 0-.7.2-.7.4-.1.4-.2.7-.3 1.1s.3.6.8.6h3.8c.3 0 .6-.1.7-.4.1-.4.2-.7.3-1.1s-.3-.6-.7-.6zm19.6 1.4l-.2-1.1c0-.2-.3-.4-.7-.4H53c-.5 0-.9.3-.8.6l.2 1.1c0 .2.3.4.7.4h3.8c.5-.1.9-.3.9-.6zm-9.5.1l-.2-1.1c0-.2-.3-.4-.7-.4h-3.6c-.4 0-.7.2-.8.4-.1.4-.2.7-.3 1.1-.1.3.3.5.8.5h3.9c.5 0 .9-.3.9-.5zm18.7-.1l-.2-1.1c0-.2-.3-.3-.6-.3h-3.7c-.5 0-1 .3-.9.6l.3 1.1c.1.2.3.3.6.3h3.6c.5-.1.9-.4.9-.6zm-48.1 2.4h-3.8c-.3 0-.6.1-.7.4-.2.4-.3.8-.4 1.2-.1.3.4.7.9.7h3.7c.3 0 .6-.2.6-.4.1-.4.2-.8.4-1.2.2-.5-.2-.8-.7-.7zm1.3-3.7h-3.5c-.2 0-.5.1-.6.3-.1.4-.2.7-.4 1.1-.1.3.2.6.7.6h3.5c.3 0 .5-.1.7-.3.2-.4.3-.7.5-1.1s-.4-.7-.9-.6zm50.9 4.1c.1.4.3.8.3 1.1 0 .2.3.3.6.3h3.7c.5 0 1-.3.9-.6-.1-.4-.2-.8-.3-1.1-.1-.2-.4-.4-.7-.3h-3.7c-.5-.1-.9.2-.8.6zM70 56.4c.1.4.2.7.4 1.1.1.2.4.3.6.3h3.4c.5 0 .8-.3.8-.6-.1-.4-.2-.7-.3-1.1 0-.2-.2-.3-.6-.3h-3.5c-.4 0-.9.3-.8.6z" fill="url(#SVGID_3_)"/>
<g>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-58.8206" y1="1730.5309" x2="189.1794" y2="1980.5308" gradientTransform="translate(0 -1830)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<circle cx="46.4" cy="6.6" r="1.2" fill="url(#SVGID_4_)"/>
</g>
<path class="st0" d="M73.4 27.2H99c2.5 0 4.4 2 4.4 4.4v50.3c0 2.5-2 4.4-4.4 4.4H73.4c-2.5 0-4.4-2-4.4-4.4V31.6c-.1-2.4 1.9-4.4 4.4-4.4z"/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-55.4553" y1="1757.9757" x2="185.0447" y2="1976.4757" gradientTransform="translate(.02 -1829.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<path d="M98.9 28.2c1.9 0 3.4 1.5 3.4 3.4v50.3c0 1.9-1.5 3.4-3.4 3.4H73.3c-1.9 0-3.4-1.5-3.4-3.4V31.6c0-1.9 1.5-3.4 3.4-3.4h25.6m0-2H73.3c-3 0-5.4 2.4-5.4 5.4v50.3c0 3 2.4 5.4 5.4 5.4h25.6c3 0 5.4-2.4 5.4-5.4V31.6c.1-3-2.4-5.4-5.4-5.4z" fill="url(#SVGID_5_)"/>
<g>
<path class="st0" d="M74.9 32h22.4c.9 0 1.7.8 1.7 1.7v41.9c0 .9-.8 1.7-1.7 1.7H74.9c-.9 0-1.7-.8-1.7-1.7V33.7c0-.9.8-1.7 1.7-1.7z"/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="26.795" y1="1825.1949" x2="99.635" y2="1898.0349" gradientTransform="translate(.02 -1829.83)">
<stop offset="0" stop-color="#ccfbff"/>
<stop offset="1" stop-color="#c9e4ff"/>
</linearGradient>
<path d="M97.3 33c.4 0 .7.3.7.7v41.9c0 .4-.3.7-.7.7H74.9c-.4 0-.7-.3-.7-.7V33.7c0-.4.3-.7.7-.7h22.4" fill="url(#SVGID_6_)"/>
</g>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-109.61" y1="1868.874" x2="226.72" y2="1868.874" gradientTransform="translate(.02 -1829.83)">
<stop offset="0" stop-color="#00c8d7"/>
<stop offset="1" stop-color="#0a84ff"/>
</linearGradient>
<path d="M46.7 45c-.6 0-1.1-.2-1.6-.6l-15-12.1c-1.5-1-2.7-2.2-3.7-3.7-3.3-5.1-2.6-11.7 1.7-16 5-5 13-5 17.9 0 .1.1.3.2.5.2s.4-.1.5-.2c5.1-4.8 13.1-4.6 18 .5s4.6 13.1-.5 18c-.5.4-1 .9-1.5 1.2L48.2 44.5c-.4.3-1 .5-1.5.5zm41 23.7l11-9c4.4-3 5.6-9 2.7-13.4-3-4.4-9-5.6-13.4-2.7-.5.3-1 .7-1.4 1.2 0 0-.1.1-.2.1s-.1 0-.2-.1c-3.8-3.8-9.9-3.8-13.7 0-3.2 3.2-3.8 8.3-1.3 12.2.7 1.1 1.7 2.1 2.8 2.8l11.1 9c.7.6 1.8.6 2.6-.1z" fill="url(#SVGID_7_)"/>
<path class="st0" d="M37.1 10c3.1 0 6.1 1.2 8.3 3.4.3.3.7.5 1.2.5.4 0 .9-.2 1.2-.5 4.6-4.5 12-4.5 16.6.1 4.5 4.6 4.5 12-.1 16.6-.5.5-1.1 1-1.7 1.4l-15 12.2c-.3.2-.6.3-.9.3s-.7-.1-.9-.3l-15-12.2c-1.4-.9-2.5-2-3.4-3.4-3-4.6-2.4-10.7 1.5-14.7C31 11.3 34 10 37.1 10m0-2c-3.6 0-7.1 1.4-9.7 4-4.6 4.6-5.3 11.8-1.8 17.2 1 1.6 2.3 2.9 3.9 3.9l15 12.1c1.3 1 3.1 1 4.3 0l14.9-12.1c6.3-4.2 8-12.7 3.8-19s-12.7-8-19-3.8c-.7.5-1.3 1-1.9 1.5C44 9.4 40.6 8 37.1 8z"/>
<path class="st0" d="M30.1 23.4h-.2c-1.1-.1-1.9-1-1.8-2.1.3-3.8 3.1-7 6.8-7.8 1-.4 2.2 0 2.6 1s0 2.2-1 2.6c-.2.1-.5.2-.8.2-2.1.5-3.6 2.2-3.8 4.3 0 1-.8 1.7-1.8 1.8zM79.2 43c2.3 0 4.5.9 6.1 2.6.2.2.5.4.9.4.3 0 .6-.1.9-.4 3.4-3.4 8.9-3.4 12.3 0 3.4 3.4 3.4 8.9 0 12.3-.4.4-.8.8-1.3 1.1L87 68c-.2.2-.4.2-.7.2-.2 0-.5-.1-.7-.2l-11.1-9c-1-.7-1.9-1.5-2.5-2.5-2.2-3.4-1.7-8 1.1-10.9 1.6-1.7 3.8-2.6 6.1-2.6m0-2c-2.8 0-5.5 1.1-7.5 3.1-3.6 3.6-4.1 9.2-1.4 13.4.8 1.2 1.8 2.2 3 3l11 8.9c1.1.9 2.7.9 3.9 0l11-9c4.9-3.3 6.1-10 2.8-14.8-3.3-4.9-10-6.1-14.8-2.8-.3.2-.7.5-1 .7-2-1.6-4.5-2.6-7-2.5z"/>
<path class="st0" d="M74.1 52.9c-.9-.1-1.5-.8-1.4-1.6.2-2.8 2.2-5.2 5-5.8.8-.2 1.6.3 1.8 1.1.2.8-.3 1.6-1.1 1.8h-.1c-1.5.3-2.7 1.6-2.8 3.2-.1.7-.7 1.3-1.4 1.3z"/>
</svg>
<path d="m71.24 101.17a9.5 9.5 0 0 1 -9.47 9.5h-38.08a7.27 7.27 0 0 1 0-14.53 7.17 7.17 0 0 1 1.75.22 7.3 7.3 0 0 1 -.2-1.69 7.49 7.49 0 0 1 7.5-7.49 7.41 7.41 0 0 1 4.26 1.31 12.61 12.61 0 0 1 24.8 3.17 9.5 9.5 0 0 1 9.44 9.51z" fill="url(#a)"/>
<path d="m190.14 46.66a10.72 10.72 0 0 0 -2.61.32 11.15 11.15 0 0 0 .29-2.53 11.31 11.31 0 0 0 -17.69-9.32 19 19 0 0 0 -37.37 4.78 14.27 14.27 0 1 0 0 28.53h57.39a10.89 10.89 0 1 0 0-21.78z" fill="url(#b)"/>
<path d="m24.87 72.66a22.54 22.54 0 0 1 22.45-22.66l120.77-.48a22.53 22.53 0 1 1 .18 45.06l-120.77.53a22.54 22.54 0 0 1 -22.63-22.45z" fill="url(#c)"/>
<path d="m83.89 81.48h29.85v8.65h-29.85z" fill="#ff848b"/>
<path d="m61.36 31.98h71.63v47.31h-71.63z" fill="url(#d)"/>
<path d="m140.78 84.07h-1.95v-53.76a3.86 3.86 0 0 0 -3.83-3.86h-75.54a3.86 3.86 0 0 0 -3.86 3.87v53.75h-2a1.92 1.92 0 0 0 -1.88 1.93v3.9a1.92 1.92 0 0 0 1.93 1.93h87.13a1.93 1.93 0 0 0 1.93-1.93v-3.9a1.93 1.93 0 0 0 -1.93-1.93zm-35.78 3.87h-15.53v-3.87h15.53z" fill="url(#e)"/>
<path d="m107.33 47.59a6.26 6.26 0 0 0 -8.85 0l-1.27 1.26-1.21-1.26a6.26 6.26 0 0 0 -8.85 0 6.26 6.26 0 0 0 0 8.85l9 9a1.49 1.49 0 0 0 1.07.45 1.51 1.51 0 0 0 1.08-.45l9-9a6.26 6.26 0 0 0 .03-8.85z" fill="#f9f9fa"/>
<rect fill="url(#f)" height="62.76" rx="5.4" width="41.61" x="122.66" y="54.8"/>
<path d="m139.53 107.32h7.75v3.87h-7.75z" fill="#ab71ff"/>
<path d="m153.51 73.93a6.26 6.26 0 0 0 -8.85 0l-1.26 1.26-1.26-1.26a6.26 6.26 0 1 0 -8.85 8.85l9 9a1.53 1.53 0 0 0 1.08.45 1.51 1.51 0 0 0 1.08-.45l9-9a6.26 6.26 0 0 0 .06-8.85z" fill="#f9f9fa"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 7.5 KiB

После

Ширина:  |  Высота:  |  Размер: 3.9 KiB

Просмотреть файл

@ -1,8 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80">
<circle r="40" cx="40" cy="40" fill="#E1E1E6"/>
<path fill="#F5F5F7" d="M70.5 41.2l.02-1.36A30.5 30.5 0 0 0 39.97 9.41 30.5 30.5 0 0 0 9.41 39.84l.02 1.36a3.62 3.62 0 0 0-3.15 3.58c0 2 1.62 3.6 3.63 3.6h.72a30.46 30.46 0 0 0 8.3 13.51l-.04-.02a30.54 30.54 0 0 0 19.72 8.35l.24.01.43.01.51.01h.86l.41-.02h.27c.16-.02.33-.02.5-.03l.12-.01A30.55 30.55 0 0 0 69.3 48.37h.68a3.61 3.61 0 0 0 .51-7.18"/>
<path fill="#C8C8CC" d="M58.53 39.81v-7.18a3.35 3.35 0 1 0-6.7 0v7.27l-.17.08a1.05 1.05 0 0 0 .47 1.98c.17 0 .32-.04.47-.12a5.94 5.94 0 0 1 5.18-.07c.53.25 1.15.03 1.4-.5.25-.52.03-1.14-.5-1.39l-.15-.07zm-30.41 0v-7.18a3.35 3.35 0 1 0-6.7 0v7.27l-.17.08a1.05 1.05 0 0 0 .47 1.98 1 1 0 0 0 .47-.12 5.94 5.94 0 0 1 5.18-.07c.53.25 1.15.03 1.4-.5.25-.52.03-1.14-.5-1.39l-.15-.07zM48.85 60.1l.07.04c.47-.2.93-.38 1.4-.62A28.29 28.29 0 0 0 60.68 50l.37-.58a.58.58 0 0 0 .08-.26.53.53 0 0 0-.47-.57c-.7-.07-1.4-.11-2.1-.15-.2.05-.72.18-1.53.33-1.02.14-2.47.5-4.22.66-1.74.15-3.8.47-5.97.57-2.19.15-4.51.18-6.85.2-2.33-.04-4.67-.07-6.86-.22-2.19-.1-4.22-.41-5.97-.56-1.74-.17-3.21-.51-4.22-.66-.8-.16-1.35-.28-1.53-.33-.72.04-1.42.1-2.14.15a.47.47 0 0 0-.25.1.56.56 0 0 0-.13.75l.38.57a30.15 30.15 0 0 0 5.18 5.91 27.28 27.28 0 0 0 5.18 3.57c.47.25.94.43 1.41.64a3.84 3.84 0 0 1-.01.02l.02.02-.02.01a21.8 21.8 0 0 0 8.79 1.93l.14.02h.03l.13-.02a21.8 21.8 0 0 0 8.8-1.93l-.03-.01c.02 0 .02 0 .03-.02a6.87 6.87 0 0 0-.07-.04z"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.7 KiB

Просмотреть файл

@ -578,7 +578,7 @@ button > hbox > label {
height: 80px;
border-radius: 50%;
border: 1px solid transparent;
list-style-image: url("chrome://browser/skin/preferences/in-content/fxa-avatar.svg");
list-style-image: url(chrome://browser/skin/fxa/avatar-color.svg);
margin-inline-end: 24px;
-moz-user-focus: normal;
}
@ -634,7 +634,7 @@ button > hbox > label {
}
.fxaSyncIllustration {
list-style-image: url("chrome://browser/skin/preferences/in-content/sync-devices.svg");
list-style-image: url(chrome://browser/skin/fxa/sync-devices.svg);
width: 312px;
height: 136px;
}

Просмотреть файл

@ -1,51 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 312 136">
<defs>
<path id="a" d="M.458.334h136.808v135.128H.458V.334z"/>
<path id="c" d="M.677.334h136.808v135.128H.677z"/>
</defs>
<path fill="#E1E1E6" d="M247.42 12.25c-.04 0-.08 0-.13-.02a58.49 58.49 0 0 0-9.54-1.34.58.58 0 0 1-.55-.62c.02-.32.3-.56.62-.54 3.28.19 6.55.65 9.74 1.37a.58.58 0 0 1-.14 1.15m-31.25 1.39a.58.58 0 0 1-.18-1.13 59.24 59.24 0 0 1 12-2.55.58.58 0 1 1 .13 1.16 58.1 58.1 0 0 0-11.77 2.5.6.6 0 0 1-.18.02m38.26.67a.57.57 0 0 1-.2-.04c-.76-.27-1.52-.53-2.29-.77a.58.58 0 0 1-.38-.73.6.6 0 0 1 .74-.38c.79.25 1.56.51 2.33.8a.58.58 0 0 1-.2 1.12m-47.22 3.08a.59.59 0 0 1-.52-.3.58.58 0 0 1 .25-.8c.72-.37 1.46-.73 2.2-1.08a.6.6 0 0 1 .78.28c.14.29.01.64-.28.77-.72.34-1.44.7-2.15 1.07a.6.6 0 0 1-.28.06m64.05 6.46a.6.6 0 0 1-.37-.14 57.82 57.82 0 0 0-10.04-6.55.58.58 0 0 1-.26-.78.6.6 0 0 1 .8-.25 59.05 59.05 0 0 1 10.25 6.69c.25.2.29.57.08.81a.6.6 0 0 1-.46.22m-75.99 1.8a.59.59 0 0 1-.43-.19.58.58 0 0 1 .04-.82 59.25 59.25 0 0 1 7.8-5.9.6.6 0 0 1 .82.18c.18.27.1.63-.18.8a57.97 57.97 0 0 0-7.65 5.78.59.59 0 0 1-.4.15M284 38.3c-.2 0-.4-.1-.5-.28a57.31 57.31 0 0 0-5.7-7.67.57.57 0 0 1 .06-.82.6.6 0 0 1 .83.06 58.26 58.26 0 0 1 5.81 7.83.59.59 0 0 1-.5.89m-101.87 4.52a.6.6 0 0 1-.27-.06.58.58 0 0 1-.26-.78 58 58 0 0 1 6.56-10.25.6.6 0 0 1 .83-.1c.25.2.3.57.1.82a56.84 56.84 0 0 0-6.44 10.05c-.1.2-.3.32-.52.32m105.28 1.84a.6.6 0 0 1-.54-.34c-.33-.72-.67-1.44-1.03-2.14a.58.58 0 0 1 .26-.78.6.6 0 0 1 .8.25c.36.73.71 1.46 1.05 2.2a.58.58 0 0 1-.54.81m-108.85 7.11c-.06 0-.11 0-.17-.02a.58.58 0 0 1-.4-.73c.24-.78.5-1.55.76-2.31a.6.6 0 0 1 .75-.36c.3.1.47.43.36.74-.26.75-.5 1.5-.74 2.26a.59.59 0 0 1-.56.42M292.3 63.22a.59.59 0 0 1-.58-.53 56.2 56.2 0 0 0-2.3-11.67c-.1-.31.08-.64.4-.73.3-.1.63.08.73.38a57.26 57.26 0 0 1 2.34 11.91c.03.32-.21.6-.54.63h-.05m-116.12 2.77h-.03a.58.58 0 0 1-.56-.6c.13-3.24.53-6.48 1.2-9.64a.58.58 0 0 1 .7-.45c.31.07.52.38.45.7a56.6 56.6 0 0 0-1.18 9.44.58.58 0 0 1-.58.55m115.54 11.87l-.1-.01a.58.58 0 0 1-.48-.67c.53-3.11.8-6.3.8-9.48a.59.59 0 0 1 1.18 0c0 3.24-.28 6.5-.82 9.67a.59.59 0 0 1-.58.49m-1.66 7.02c-.06 0-.11 0-.17-.02a.58.58 0 0 1-.4-.73 57 57 0 0 0 .65-2.3.59.59 0 0 1 1.14.3c-.2.78-.42 1.57-.66 2.34a.59.59 0 0 1-.56.41m-110.67 2.4a.59.59 0 0 1-.56-.38 57.22 57.22 0 0 1-2.81-11.8.58.58 0 0 1 .5-.66.6.6 0 0 1 .66.5c.51 3.95 1.44 7.84 2.76 11.58a.58.58 0 0 1-.55.77m3.98 8.77c-.2 0-.4-.1-.52-.3-.4-.7-.77-1.42-1.14-2.15a.58.58 0 0 1 .26-.78.6.6 0 0 1 .8.26c.35.71.73 1.41 1.11 2.1.16.29.06.64-.23.8a.59.59 0 0 1-.28.07m98.05 5.99a.59.59 0 0 1-.34-.11.58.58 0 0 1-.13-.81 56.78 56.78 0 0 0 6.02-10.3.6.6 0 0 1 .78-.3c.3.14.43.48.3.77a57.93 57.93 0 0 1-6.15 10.51.59.59 0 0 1-.48.24m-89.46 5.64a.59.59 0 0 1-.42-.18 58.68 58.68 0 0 1-6.13-7.6.58.58 0 0 1 .16-.8.6.6 0 0 1 .82.15 57.6 57.6 0 0 0 6 7.45c.22.23.21.6-.02.82a.59.59 0 0 1-.4.16m75.6 7.77a.59.59 0 0 1-.48-.24.58.58 0 0 1 .14-.81 57.93 57.93 0 0 0 7.42-6.08.6.6 0 0 1 .83.01c.23.23.23.6 0 .82a59.29 59.29 0 0 1-7.57 6.2.6.6 0 0 1-.34.1m-6.24 3.75a.58.58 0 0 1-.27-1.1c.71-.37 1.41-.75 2.1-1.15a.6.6 0 0 1 .81.21c.16.28.07.64-.21.8-.71.4-1.43.8-2.15 1.17a.6.6 0 0 1-.28.07m-51.72 1.12a.6.6 0 0 1-.25-.05 58.95 58.95 0 0 1-10.5-6.28.58.58 0 0 1-.12-.82.6.6 0 0 1 .82-.1c3.2 2.39 6.67 4.46 10.3 6.14.3.14.42.49.29.78a.59.59 0 0 1-.54.33m9.13 3.34c-.05 0-.1 0-.15-.02-.8-.22-1.58-.45-2.36-.7a.58.58 0 0 1-.38-.73c.1-.3.43-.47.74-.37.77.24 1.54.47 2.31.68a.58.58 0 0 1-.16 1.14m24.15 1.47a.58.58 0 0 1-.08-1.16c3.97-.57 7.89-1.57 11.65-2.95a.6.6 0 0 1 .75.34c.12.3-.04.63-.34.74a59.03 59.03 0 0 1-11.98 3.03m-9.72.6h-.01c-3.28-.06-6.57-.4-9.78-.99a.58.58 0 0 1-.47-.68.59.59 0 0 1 .69-.46c3.14.58 6.36.91 9.58.97.33.01.59.28.58.6 0 .31-.27.57-.59.57"/>
<path fill="#E1E1E6" d="M234.35 7.2c-33.8 0-61.31 27.3-61.31 60.88 0 33.57 27.5 60.89 61.31 60.89 33.8 0 61.31-27.32 61.31-60.9 0-33.56-27.5-60.88-61.31-60.88m0 124.1c-35.1 0-63.66-28.36-63.66-63.21 0-34.86 28.56-63.22 63.66-63.22 35.1 0 63.66 28.36 63.66 63.22 0 34.85-28.56 63.21-63.66 63.21"/>
<g transform="translate(165.794)">
<mask id="b" fill="#fff">
<use href="#a"/>
</mask>
<path fill="#E1E1E6" d="M73.86 1.66h-.04a70.03 70.03 0 0 0-3.42-.16.59.59 0 0 1-.57-.6c0-.32.22-.57.6-.57 1.15.03 2.32.08 3.48.17.32.02.56.3.54.62a.59.59 0 0 1-.59.54m5.72.65h-.1l-1.12-.17a.58.58 0 0 1-.5-.66.6.6 0 0 1 .66-.5l1.15.18a.58.58 0 0 1-.1 1.15M47.76 4.8a.58.58 0 0 1-.18-1.13c4.4-1.43 8.97-2.4 13.59-2.92a.6.6 0 0 1 .65.51c.03.32-.2.61-.52.65-4.54.5-9.03 1.46-13.36 2.86a.55.55 0 0 1-.18.03M37.17 9.23a.6.6 0 0 1-.52-.3.58.58 0 0 1 .25-.8l1.02-.52a.6.6 0 0 1 .8.25c.14.29.03.64-.26.78l-1.01.52a.6.6 0 0 1-.28.07m65.1.93a.6.6 0 0 1-.29-.07 67.54 67.54 0 0 0-12.52-5.43.58.58 0 0 1-.38-.74.6.6 0 0 1 .74-.37c4.41 1.4 8.7 3.26 12.74 5.52a.58.58 0 0 1-.29 1.1m-71.97 3.2a.6.6 0 0 1-.49-.26.58.58 0 0 1 .15-.8c.96-.66 1.93-1.3 2.91-1.9a.6.6 0 0 1 .81.2c.17.27.09.63-.19.8-.96.58-1.92 1.2-2.86 1.85a.6.6 0 0 1-.33.1m82.34 3.95a.59.59 0 0 1-.38-.13 68.68 68.68 0 0 0-2.67-2.12.58.58 0 0 1-.1-.82.6.6 0 0 1 .82-.1c.92.68 1.83 1.4 2.71 2.15.25.2.28.57.07.82a.59.59 0 0 1-.45.2m4.24 3.85a.6.6 0 0 1-.42-.17l-.81-.79a.58.58 0 0 1-.02-.82.6.6 0 0 1 .83-.01l.83.8c.23.23.23.6 0 .82a.59.59 0 0 1-.41.17M13.92 29.2a.59.59 0 0 1-.34-.1.58.58 0 0 1-.13-.82 68.36 68.36 0 0 1 9.26-10.25.6.6 0 0 1 .83.03c.22.24.2.6-.04.83a67.25 67.25 0 0 0-9.1 10.07.59.59 0 0 1-.48.24m-5.94 9.74a.58.58 0 0 1-.53-.84l.53-1.03a.6.6 0 0 1 .8-.25c.28.15.4.5.25.78l-.53 1c-.1.2-.31.33-.53.33m122.6 1.75a.59.59 0 0 1-.53-.34c-1.9-4.09-4.22-8.01-6.92-11.65a.58.58 0 0 1 .13-.81.6.6 0 0 1 .82.13 67.36 67.36 0 0 1 7.04 11.85c.13.29 0 .63-.3.77a.57.57 0 0 1-.24.05M4.86 46.28a.58.58 0 0 1-.56-.77c.39-1.1.8-2.18 1.25-3.24.12-.3.47-.44.76-.31.3.12.45.46.32.76-.43 1.03-.84 2.1-1.21 3.16a.59.59 0 0 1-.56.4m129.87 6.2a.59.59 0 0 1-.57-.44 65.8 65.8 0 0 0-.9-3.27c-.1-.3.08-.63.4-.72.3-.1.63.08.73.39.33 1.09.64 2.2.91 3.32a.58.58 0 0 1-.57.72m1.13 5.57a.59.59 0 0 1-.58-.49l-.19-1.11a.59.59 0 1 1 1.16-.2l.2 1.13a.58.58 0 0 1-.59.67M1.05 68.6a.58.58 0 0 1-.6-.58v-.12c0-4.56.47-9.12 1.38-13.56a.59.59 0 0 1 1.16.24A66.14 66.14 0 0 0 1.64 67.9v.12c0 .32-.27.58-.6.58m.99 11.32a.59.59 0 0 1-.58-.49l-.19-1.13a.58.58 0 0 1 .5-.66c.33-.05.62.16.67.48l.18 1.11a.58.58 0 0 1-.58.69m133.26 2.11a.58.58 0 0 1-.58-.7c.92-4.39 1.38-8.9 1.38-13.43v-.24c0-.32.26-.58.59-.58.32 0 .58.26.58.58v.24c0 4.6-.47 9.2-1.4 13.67a.59.59 0 0 1-.57.46M3.87 87.66a.59.59 0 0 1-.57-.41c-.33-1.1-.63-2.21-.9-3.33a.58.58 0 0 1 .42-.7c.32-.08.64.12.72.43.27 1.1.57 2.19.89 3.26a.58.58 0 0 1-.56.75M131.59 94a.58.58 0 0 1-.54-.8c.43-1.04.84-2.1 1.22-3.17a.59.59 0 0 1 1.1.4c-.38 1.07-.8 2.15-1.24 3.21a.59.59 0 0 1-.54.36m-2.42 5.17a.58.58 0 0 1-.52-.85l.5-1.01a.6.6 0 0 1 .8-.26c.29.14.4.49.27.78l-.53 1.02c-.1.2-.31.32-.52.32m-115.12 8.78a.6.6 0 0 1-.48-.24c-2.74-3.7-5.1-7.7-7.01-11.86a.59.59 0 1 1 1.07-.48c1.88 4.09 4.2 8 6.9 11.65a.58.58 0 0 1-.48.93m7.53 8.57a.6.6 0 0 1-.4-.16l-.83-.8a.58.58 0 0 1 0-.83.6.6 0 0 1 .83 0l.81.8c.24.22.24.59.01.82a.59.59 0 0 1-.42.17m92.95 1.5a.59.59 0 0 1-.43-.19.58.58 0 0 1 .03-.82 67.08 67.08 0 0 0 9.13-10.06.6.6 0 0 1 .82-.13c.26.19.32.55.13.81a68.46 68.46 0 0 1-9.28 10.24.59.59 0 0 1-.4.15m-86.85 3.7a.6.6 0 0 1-.36-.11c-.92-.7-1.83-1.43-2.71-2.16a.58.58 0 0 1-.07-.82.6.6 0 0 1 .83-.07c.86.72 1.76 1.44 2.67 2.12.25.2.3.56.1.82a.59.59 0 0 1-.46.23m76.76 3.81c-.2 0-.39-.1-.5-.28a.58.58 0 0 1 .2-.8c.95-.58 1.92-1.2 2.85-1.84a.6.6 0 0 1 .82.15c.19.26.12.62-.15.8-.95.66-1.93 1.29-2.9 1.88-.1.06-.21.09-.32.09m-5.01 2.78a.59.59 0 0 1-.53-.32.58.58 0 0 1 .26-.78l1.01-.52a.6.6 0 0 1 .8.24c.15.29.04.64-.25.79l-1.03.52a.57.57 0 0 1-.26.07m-51.46 3.93c-.06 0-.12 0-.19-.03-4.4-1.4-8.69-3.27-12.72-5.54a.58.58 0 0 1-.22-.8.6.6 0 0 1 .8-.22 67.47 67.47 0 0 0 12.5 5.45.58.58 0 0 1-.17 1.14m11.2 2.56h-.09l-1.14-.18a.58.58 0 0 1-.5-.66.59.59 0 0 1 .68-.48l1.13.16c.32.05.55.34.5.66-.04.3-.3.5-.58.5m17.21.27a.59.59 0 0 1-.58-.51c-.04-.32.2-.61.52-.65 4.54-.5 9.03-1.45 13.36-2.84.3-.1.64.07.74.37.1.31-.07.64-.38.74a69.01 69.01 0 0 1-13.66 2.9m-9.19.38h-.01a72.02 72.02 0 0 1-3.48-.17.58.58 0 1 1 .09-1.16c1.13.08 2.28.14 3.41.17.33 0 .59.27.58.6 0 .31-.27.56-.59.56" mask="url(#b)"/>
</g>
<path fill="#E1E1E6" d="M99.82 12.25c-.04 0-.09 0-.13-.02a58.5 58.5 0 0 0-9.54-1.34.58.58 0 0 1-.55-.62c.02-.32.3-.56.62-.54 3.27.19 6.55.65 9.73 1.37a.58.58 0 0 1-.13 1.15m-31.25 1.39a.58.58 0 0 1-.18-1.13 59.24 59.24 0 0 1 12-2.55c.33-.03.61.2.65.52.03.31-.2.6-.52.63-4 .43-7.96 1.27-11.77 2.5a.6.6 0 0 1-.18.03m38.26.67a.56.56 0 0 1-.2-.04c-.76-.27-1.53-.53-2.3-.77a.58.58 0 0 1-.37-.73.6.6 0 0 1 .74-.38c.78.25 1.56.51 2.33.8.3.1.46.44.35.74a.59.59 0 0 1-.55.38M59.6 17.39a.59.59 0 0 1-.52-.3.58.58 0 0 1 .24-.8c.73-.37 1.46-.73 2.2-1.08a.6.6 0 0 1 .78.28c.14.29.02.64-.27.77-.73.34-1.45.7-2.16 1.07a.6.6 0 0 1-.27.06m64.05 6.46a.6.6 0 0 1-.37-.14 57.82 57.82 0 0 0-10.05-6.55.58.58 0 0 1-.25-.78.6.6 0 0 1 .8-.25 59.05 59.05 0 0 1 10.24 6.69c.25.2.29.57.08.81a.6.6 0 0 1-.45.22m-76 1.8a.59.59 0 0 1-.43-.19.57.57 0 0 1 .04-.82 59.26 59.26 0 0 1 7.81-5.9.6.6 0 0 1 .82.18c.17.27.1.63-.18.8a57.9 57.9 0 0 0-7.66 5.78.59.59 0 0 1-.4.15M136.4 38.3a.6.6 0 0 1-.5-.28 57.28 57.28 0 0 0-5.7-7.67.57.57 0 0 1 .06-.82.6.6 0 0 1 .83.06 58.41 58.41 0 0 1 5.82 7.83c.17.27.08.63-.2.8a.6.6 0 0 1-.3.08m-101.9 4.53a.6.6 0 0 1-.26-.06.58.58 0 0 1-.27-.78 58.13 58.13 0 0 1 6.57-10.25.6.6 0 0 1 .82-.1c.26.2.3.57.1.82a56.9 56.9 0 0 0-6.43 10.05.6.6 0 0 1-.53.32m105.29 1.84a.6.6 0 0 1-.54-.34c-.33-.72-.68-1.44-1.03-2.14a.58.58 0 0 1 .26-.78.6.6 0 0 1 .79.25c.36.73.72 1.46 1.05 2.2a.58.58 0 0 1-.53.81M30.95 51.78a.58.58 0 0 1-.56-.75 59 59 0 0 1 .75-2.31.6.6 0 0 1 .75-.36c.31.1.47.43.37.74-.26.75-.51 1.5-.74 2.26a.59.59 0 0 1-.57.42M144.7 63.22a.59.59 0 0 1-.59-.53 56.2 56.2 0 0 0-2.3-11.67c-.09-.31.09-.64.4-.73.31-.1.64.08.73.38a57.26 57.26 0 0 1 2.34 11.91c.03.32-.2.6-.53.63h-.05M28.57 65.99h-.02a.58.58 0 0 1-.57-.6c.13-3.24.53-6.48 1.2-9.64a.58.58 0 0 1 .7-.45c.32.07.52.38.45.7a56.6 56.6 0 0 0-1.17 9.44.58.58 0 0 1-.59.55m115.54 11.87l-.1-.01a.58.58 0 0 1-.48-.67c.53-3.11.8-6.3.8-9.48 0-.33.26-.59.59-.59.32 0 .59.26.59.59 0 3.24-.28 6.5-.82 9.67a.59.59 0 0 1-.58.49m-1.66 7.02c-.05 0-.11 0-.17-.02a.58.58 0 0 1-.39-.73 57 57 0 0 0 .65-2.3c.08-.3.4-.49.71-.4.32.07.5.39.43.7-.2.78-.43 1.57-.66 2.34a.59.59 0 0 1-.57.41m-110.67 2.4a.59.59 0 0 1-.55-.38 57.22 57.22 0 0 1-2.82-11.8.59.59 0 0 1 1.17-.15c.5 3.94 1.43 7.83 2.76 11.57a.58.58 0 0 1-.56.77m3.98 8.77a.6.6 0 0 1-.51-.3c-.4-.7-.78-1.42-1.15-2.15a.58.58 0 0 1 .27-.78.6.6 0 0 1 .79.26c.36.71.73 1.41 1.12 2.1.15.29.05.64-.23.8a.6.6 0 0 1-.29.07m98.06 5.99a.59.59 0 0 1-.35-.11.58.58 0 0 1-.13-.81 56.79 56.79 0 0 0 6.03-10.3c.13-.29.48-.43.78-.3.3.14.43.48.3.77a57.85 57.85 0 0 1-6.15 10.51.59.59 0 0 1-.48.24m-89.46 5.64a.59.59 0 0 1-.43-.18 58.58 58.58 0 0 1-6.12-7.6.58.58 0 0 1 .16-.8.6.6 0 0 1 .81.15 57.59 57.59 0 0 0 6 7.45c.23.23.22.6-.02.82a.58.58 0 0 1-.4.16m75.6 7.77a.59.59 0 0 1-.48-.24.58.58 0 0 1 .15-.81 58.03 58.03 0 0 0 7.42-6.08.6.6 0 0 1 .83.01c.23.23.22.6-.01.82a59.22 59.22 0 0 1-7.57 6.2c-.1.07-.22.1-.33.1m-6.24 3.75a.59.59 0 0 1-.52-.31.58.58 0 0 1 .24-.79c.72-.37 1.42-.75 2.11-1.15a.6.6 0 0 1 .8.21c.17.28.07.64-.2.8-.72.4-1.43.8-2.16 1.17a.6.6 0 0 1-.27.07M62 120.32a.6.6 0 0 1-.25-.05 59 59 0 0 1-10.51-6.28.58.58 0 0 1-.12-.82.6.6 0 0 1 .83-.1c3.2 2.39 6.67 4.46 10.3 6.14.3.14.42.49.28.78a.59.59 0 0 1-.53.33m9.13 3.34c-.05 0-.1 0-.16-.02-.79-.22-1.58-.45-2.35-.7a.58.58 0 0 1-.38-.73c.1-.3.43-.47.74-.37.76.24 1.53.47 2.3.68a.58.58 0 0 1-.15 1.14m24.14 1.47a.59.59 0 0 1-.58-.5.58.58 0 0 1 .5-.66c3.97-.57 7.9-1.57 11.65-2.95a.6.6 0 0 1 .76.34c.11.3-.04.63-.35.74a59.06 59.06 0 0 1-11.98 3.03m-9.71.6h-.02c-3.28-.06-6.57-.4-9.78-.99a.58.58 0 1 1 .22-1.14c3.14.58 6.37.91 9.59.97a.59.59 0 0 1-.01 1.16"/>
<path fill="#E1E1E6" d="M86.74 7.2c-33.8 0-61.31 27.3-61.31 60.88 0 33.57 27.5 60.89 61.31 60.89s61.32-27.32 61.32-60.9c0-33.56-27.5-60.88-61.32-60.88m0 124.1c-35.1 0-63.65-28.36-63.65-63.21 0-34.86 28.55-63.22 63.65-63.22 35.1 0 63.66 28.36 63.66 63.22 0 34.85-28.55 63.21-63.66 63.21"/>
<g transform="translate(17.49)">
<mask id="d" fill="#fff">
<use href="#c"/>
</mask>
<path fill="#E1E1E6" d="M74.08 1.66h-.04a70.03 70.03 0 0 0-3.42-.16.59.59 0 0 1-.57-.6c0-.32.24-.57.6-.57 1.15.03 2.32.08 3.48.17.32.02.56.3.54.62a.59.59 0 0 1-.59.54m5.72.65h-.1l-1.12-.17a.58.58 0 0 1-.5-.66.59.59 0 0 1 .66-.5l1.15.18a.58.58 0 0 1-.1 1.15M47.98 4.8a.58.58 0 0 1-.18-1.13c4.4-1.43 8.97-2.4 13.59-2.92a.6.6 0 0 1 .65.51c.03.32-.2.61-.52.65-4.54.5-9.03 1.46-13.36 2.86a.55.55 0 0 1-.18.03M37.39 9.23a.6.6 0 0 1-.52-.3.58.58 0 0 1 .25-.8l1.02-.52a.6.6 0 0 1 .8.25c.14.29.03.64-.26.78l-1.01.52a.6.6 0 0 1-.28.07m65.1.93c-.1 0-.2-.02-.29-.07a67.42 67.42 0 0 0-12.52-5.43.58.58 0 0 1-.38-.73.6.6 0 0 1 .74-.38c4.41 1.4 8.7 3.26 12.74 5.52.29.16.38.52.22.8-.1.19-.3.3-.5.3m-71.98 3.2a.6.6 0 0 1-.49-.26.58.58 0 0 1 .15-.8 67.5 67.5 0 0 1 2.91-1.9.6.6 0 0 1 .81.2c.17.27.09.63-.19.8-.96.58-1.92 1.2-2.86 1.85a.6.6 0 0 1-.33.1m82.34 3.95a.59.59 0 0 1-.38-.13 68.68 68.68 0 0 0-2.67-2.12.58.58 0 0 1-.1-.82.6.6 0 0 1 .82-.1c.91.68 1.83 1.4 2.71 2.15.25.2.28.57.07.82a.59.59 0 0 1-.45.2m4.23 3.85a.59.59 0 0 1-.41-.17l-.81-.79a.58.58 0 0 1-.02-.82.6.6 0 0 1 .83-.01l.83.8c.23.23.23.6 0 .82a.59.59 0 0 1-.42.17M14.14 29.2a.59.59 0 0 1-.34-.1.58.58 0 0 1-.13-.82 68.44 68.44 0 0 1 9.26-10.25.6.6 0 0 1 .83.03c.22.24.2.6-.04.83a67.26 67.26 0 0 0-9.1 10.07.59.59 0 0 1-.48.24M8.2 38.93a.58.58 0 0 1-.53-.84l.53-1.03a.6.6 0 0 1 .79-.25c.29.15.4.5.26.78l-.52 1.01c-.1.2-.31.33-.53.33m122.6 1.75a.59.59 0 0 1-.53-.34c-1.9-4.09-4.22-8.01-6.92-11.65a.58.58 0 0 1 .13-.81.6.6 0 0 1 .82.13 67.36 67.36 0 0 1 7.04 11.85c.13.29 0 .63-.3.77a.57.57 0 0 1-.24.05M5.08 46.28a.58.58 0 0 1-.56-.77c.39-1.1.8-2.18 1.25-3.24a.6.6 0 0 1 .76-.31c.3.12.45.46.32.76-.43 1.03-.84 2.1-1.21 3.16a.59.59 0 0 1-.56.4m129.87 6.2a.59.59 0 0 1-.57-.44c-.27-1.1-.58-2.2-.9-3.27-.1-.3.08-.63.4-.72.3-.1.63.08.73.39.33 1.09.63 2.2.91 3.32a.58.58 0 0 1-.57.72m1.13 5.57a.59.59 0 0 1-.58-.49l-.19-1.11a.58.58 0 0 1 .48-.67c.32-.06.63.15.68.47l.2 1.13a.58.58 0 0 1-.6.67M1.28 68.6a.59.59 0 0 1-.6-.58v-.12c0-4.56.47-9.12 1.38-13.56a.59.59 0 0 1 1.16.24A66.14 66.14 0 0 0 1.85 67.9v.12c0 .32-.26.58-.58.58m.98 11.32a.59.59 0 0 1-.58-.49l-.19-1.13a.58.58 0 0 1 .5-.66.6.6 0 0 1 .67.48l.18 1.11a.58.58 0 0 1-.58.69m133.26 2.11a.58.58 0 0 1-.58-.7c.91-4.39 1.38-8.9 1.38-13.43v-.24c0-.32.26-.58.59-.58.32 0 .59.26.59.58v.24c0 4.6-.48 9.2-1.4 13.67a.59.59 0 0 1-.58.46M4.09 87.66a.59.59 0 0 1-.57-.41c-.33-1.1-.63-2.21-.9-3.33a.58.58 0 0 1 .42-.7c.32-.08.64.12.72.43.26 1.1.57 2.19.89 3.26a.58.58 0 0 1-.56.75M131.8 94a.58.58 0 0 1-.55-.8c.44-1.04.85-2.1 1.23-3.17.1-.3.44-.46.75-.35.3.1.47.44.36.74-.39 1.08-.8 2.16-1.25 3.22a.59.59 0 0 1-.54.36m-2.42 5.17a.58.58 0 0 1-.52-.85l.5-1.01a.6.6 0 0 1 .8-.26c.29.14.4.49.26.78l-.52 1.02c-.1.2-.31.32-.52.32m-115.12 8.78a.6.6 0 0 1-.48-.24 67.5 67.5 0 0 1-7.01-11.87c-.14-.29 0-.63.29-.77a.6.6 0 0 1 .78.3c1.88 4.09 4.2 8 6.9 11.65.18.26.13.63-.14.82a.59.59 0 0 1-.34.1m7.53 8.58a.6.6 0 0 1-.4-.16l-.83-.8a.58.58 0 0 1 0-.83.6.6 0 0 1 .83 0l.81.8c.24.22.24.59.02.82a.59.59 0 0 1-.43.17m92.95 1.5a.59.59 0 0 1-.43-.19.58.58 0 0 1 .03-.82 67.22 67.22 0 0 0 9.13-10.06.6.6 0 0 1 .82-.13c.26.19.32.55.13.81a68.52 68.52 0 0 1-9.28 10.24.6.6 0 0 1-.4.15m-86.85 3.7a.6.6 0 0 1-.36-.11c-.92-.7-1.83-1.43-2.71-2.16a.58.58 0 0 1-.07-.82.6.6 0 0 1 .83-.07c.86.72 1.76 1.44 2.67 2.12a.59.59 0 1 1-.36 1.04m76.76 3.82c-.2 0-.39-.1-.5-.28a.58.58 0 0 1 .2-.8 70.2 70.2 0 0 0 2.85-1.84.6.6 0 0 1 .82.15c.19.26.12.62-.15.8-.95.66-1.93 1.29-2.91 1.88-.1.06-.2.09-.3.09m-5.02 2.78a.59.59 0 0 1-.53-.32.58.58 0 0 1 .26-.79c.34-.16.68-.34 1.01-.51a.6.6 0 0 1 .8.24c.15.29.04.64-.25.79l-1.03.52a.58.58 0 0 1-.26.07m-51.46 3.93c-.06 0-.12 0-.18-.03a68.66 68.66 0 0 1-12.73-5.54.58.58 0 0 1-.22-.8.6.6 0 0 1 .8-.21 67.41 67.41 0 0 0 12.5 5.45.58.58 0 0 1-.17 1.13m11.2 2.56h-.09l-1.14-.18a.58.58 0 0 1-.5-.66.59.59 0 0 1 .68-.48l1.13.16c.32.05.55.34.5.66-.04.3-.3.5-.58.5m17.21.27a.58.58 0 0 1-.06-1.16c4.54-.5 9.03-1.45 13.36-2.84.3-.1.64.07.74.37.1.31-.07.64-.38.74a69 69 0 0 1-13.66 2.9m-9.19.38h-.01a72.02 72.02 0 0 1-3.48-.17.58.58 0 1 1 .08-1.16c1.14.08 2.29.14 3.42.17.33 0 .59.27.58.6-.01.31-.27.56-.59.56" mask="url(#d)"/>
</g>
<path fill="#FFF" d="M272.75 105.6a7.58 7.58 0 0 1-7.62-7.52V39.5a7.58 7.58 0 0 1 7.62-7.5h21.14c.03-1.18 1-2.13 2.2-2.13h5.68c1.21 0 2.2.97 2.2 2.17v.02a7.56 7.56 0 0 1 6.63 7.44v58.58a7.58 7.58 0 0 1-7.62 7.51h-30.23z"/>
<path fill="#FAFAFC" d="M302.04 28.48h-5.64c-1.43 0-2.65.88-3.14 2.12H273.2a8.71 8.71 0 0 0-8.76 8.65v58.39a8.71 8.71 0 0 0 8.76 8.65h30.05a8.71 8.71 0 0 0 8.76-8.65v-58.4a8.69 8.69 0 0 0-6.74-8.41 3.37 3.37 0 0 0-3.22-2.35m0 2.32a1 1 0 0 1 1.01 1v.97l-.02.15h.21c3.53 0 6.4 2.84 6.4 6.33v58.39a6.37 6.37 0 0 1-6.4 6.32H273.2a6.37 6.37 0 0 1-6.4-6.32v-58.4a6.37 6.37 0 0 1 6.4-6.32h22.22l-.03-.15v-.97a1 1 0 0 1 1.02-1h5.64"/>
<path fill="#FFF" d="M9.2 113.23a7.8 7.8 0 0 1-7.8-7.79V31.41a7.8 7.8 0 0 1 7.8-7.8h48.05c4.3 0 7.8 3.5 7.8 7.8v74.03a7.8 7.8 0 0 1-7.8 7.8H9.21z"/>
<path fill="#FAFAFC" d="M57.42 22.23H9.04A9 9 0 0 0 0 31.16V105a9 9 0 0 0 9.04 8.94h48.38a9 9 0 0 0 9.04-8.94V31.16a9 9 0 0 0-9.04-8.93m0 2.33a6.65 6.65 0 0 1 6.68 6.6V105c0 3.64-3 6.6-6.68 6.6H9.04a6.65 6.65 0 0 1-6.68-6.6V31.16c0-3.64 3-6.6 6.68-6.6h48.38"/>
<path fill="#FFF" d="M114.56 114.62c-3.38 0-6.13-2.59-6.13-5.77v-1.23c0-.75.15-1.48.45-2.18l8.09-18.77c.35-.83.9-1.56 1.6-2.14a7.48 7.48 0 0 1-1.44-4.45V32.64c0-4.2 3.45-7.63 7.7-7.63h72.14c4.25 0 7.7 3.42 7.7 7.63v47.44c0 1.72-.6 3.39-1.67 4.73.52.5.94 1.09 1.24 1.74l8.62 18.8c.33.73.5 1.5.5 2.3v1.2c0 3.18-2.74 5.77-6.12 5.77h-92.68z"/>
<path fill="#FAFAFC" d="M197.12 23.62h-72.45a8.85 8.85 0 0 0-8.9 8.77v47.3c0 1.5.4 2.98 1.13 4.27-.5.56-.9 1.18-1.2 1.86l-8.12 18.72a6.57 6.57 0 0 0-.55 2.63v1.22c0 3.82 3.3 6.93 7.33 6.93h93.07c4.04 0 7.33-3.11 7.33-6.93v-1.2c0-.95-.2-1.89-.61-2.77l-8.65-18.74c-.22-.48-.5-.93-.82-1.35a8.64 8.64 0 0 0 1.35-4.63V32.4c0-4.85-4-8.78-8.9-8.78m0 2.32a6.5 6.5 0 0 1 6.54 6.45v47.3c0 1.95-.87 3.68-2.25 4.86a4.7 4.7 0 0 1 1.93 2.09l8.65 18.75c.27.57.4 1.18.4 1.8v1.2c0 2.54-2.23 4.6-4.97 4.6h-93.07c-2.74 0-4.97-2.06-4.97-4.6v-1.22c0-.59.12-1.17.36-1.72l8.12-18.72a4.71 4.71 0 0 1 2.3-2.35 6.38 6.38 0 0 1-2.05-4.68V32.4a6.5 6.5 0 0 1 6.55-6.46h72.45"/>
<path fill="#E1E1E6" d="M272.47 102.81a5.2 5.2 0 0 1-5.24-5.16V39.2a5.21 5.21 0 0 1 5.24-5.17h30.1a5.2 5.2 0 0 1 5.23 5.17v58.44a5.2 5.2 0 0 1-5.23 5.16h-30.1z"/>
<path fill="#C8C8CC" d="M302.82 33.34h-29.91a6.38 6.38 0 0 0-6.38 6.37v58.82a6.38 6.38 0 0 0 6.38 6.37h29.91a6.38 6.38 0 0 0 6.38-6.37V39.7a6.38 6.38 0 0 0-6.38-6.37m0 2.34c2.23 0 4.04 1.8 4.04 4.03v58.82c0 2.22-1.8 4.03-4.04 4.03h-29.91a4.03 4.03 0 0 1-4.04-4.03V39.7c0-2.22 1.8-4.03 4.04-4.03h29.91"/>
<path fill="#FFF" d="M302.9 41.6v48.8a2 2 0 0 1-2 2h-26.07a2 2 0 0 1-2-2V41.6c0-1.1.9-2 2-2h26.07a2 2 0 0 1 2 2"/>
<path fill="#C8C8CC" d="M285.2 98.64h6.03c1.04 0 1.88-.76 1.88-1.7v-.06c0-.95-.84-1.7-1.88-1.7h-6.03c-1.04 0-1.88.75-1.88 1.7v.06c0 .94.84 1.7 1.88 1.7m16.69-67.38h-5.66c-.56 0-1.02.42-1.02.94v.9c0 .52.46.94 1.02.94h5.66c.56 0 1.02-.42 1.02-.94v-.9c0-.52-.46-.94-1.02-.94m-19.47 32.38v.01zm10.12 1.56h.01zm-5.32 3l2.21 1.14-.36-2.55 1.78-1.9-2.5-.44-1.13-2.23-1.12 2.23-2.5.45 1.78 1.9-.36 2.54 2.2-1.14zm-3.82 1.97zm.4 2.08l-.6-.36a1.08 1.08 0 0 1-.45-1.05l.47-3.38-2.7-2.87.17-.65c.13-.38.45-.66.85-.73l3.2-.56 1.78-3.56.7-.04c.42 0 .8.23.99.6l1.5 3 3.8.66.25.63c.12.37.03.79-.24 1.08l-2.3 2.44.57 4-.55.43a1.1 1.1 0 0 1-1.14.07l-2.88-1.48-3.43 1.77zm3.37-26.47a4.6 4.6 0 0 0-4.62 4.58 4.6 4.6 0 0 0 4.62 4.58 4.6 4.6 0 0 0 4.6-4.58 4.6 4.6 0 0 0-4.6-4.58m0 11.18a6.63 6.63 0 0 1-6.65-6.6c0-3.64 2.98-6.6 6.65-6.6a6.63 6.63 0 0 1 6.64 6.6c0 3.64-2.98 6.6-6.64 6.6"/>
<path fill="#C8C8CC" d="M289.76 51.4h-3.09a.56.56 0 0 1-.55-.55V47.8a.55.55 0 0 1 1.11 0v2.51h2.53c.3 0 .55.25.55.55 0 .3-.25.56-.55.56m-7.46 35.42c-.6 0-1.08-.48-1.08-1.07v-3.4c0-.6.49-1.08 1.08-1.08h3.43c.6 0 1.09.48 1.09 1.07 0 .6-.49 1.08-1.09 1.08h-2.34v2.33c0 .6-.49 1.07-1.09 1.07m10.43-6.25h-3.43c-.6 0-1.08-.48-1.08-1.07 0-.6.48-1.08 1.08-1.08h2.34V76.1c0-.6.49-1.07 1.09-1.07.6 0 1.08.48 1.08 1.07v3.4c0 .6-.48 1.08-1.08 1.08"/>
<path fill="#C8C8CC" d="M282.92 80.78a1.03 1.03 0 0 1-.97-1.28 5.77 5.77 0 0 1 5.57-4.47 5.74 5.74 0 0 1 4.95 2.94c.28.5.12 1.12-.36 1.41a.99.99 0 0 1-1.37-.37 3.7 3.7 0 0 0-3.22-1.93c-1.72 0-3.21 1.2-3.63 2.92a1 1 0 0 1-.97.78m4.6 6.05a5.74 5.74 0 0 1-4.96-2.94c-.28-.5-.12-1.12.36-1.41a.99.99 0 0 1 1.37.37 3.7 3.7 0 0 0 3.23 1.93c1.71 0 3.2-1.2 3.62-2.92a1 1 0 0 1 1.21-.75c.54.14.87.7.73 1.25a5.77 5.77 0 0 1-5.56 4.47"/>
<path fill="#E1E1E6" d="M9 110.45a5.48 5.48 0 0 1-5.5-5.44V31.14c0-3 2.47-5.44 5.5-5.44h48.45c3.04 0 5.51 2.44 5.51 5.44v73.87c0 3-2.47 5.44-5.5 5.44H9z"/>
<path fill="#C8C8CC" d="M57 25H8.76a6.63 6.63 0 0 0-6.66 6.6v73.66a6.63 6.63 0 0 0 6.66 6.58H57a6.63 6.63 0 0 0 6.66-6.58V31.6A6.63 6.63 0 0 0 57 25m0 2.33c2.38 0 4.3 1.91 4.3 4.27v73.66a4.28 4.28 0 0 1-4.3 4.26H8.76a4.29 4.29 0 0 1-4.3-4.26V31.6a4.29 4.29 0 0 1 4.3-4.27H57"/>
<path fill="#FFF" d="M56.66 34.08v63.13c0 1.18-.95 2.13-2.14 2.13H10.54a2.13 2.13 0 0 1-2.15-2.13V34.08c0-1.17.96-2.12 2.15-2.12h43.98c1.19 0 2.14.95 2.14 2.12"/>
<path fill="#C8C8CC" d="M38.34 106.29H27.42c-.85 0-1.54-.75-1.54-1.65v-1.57c0-.9.7-1.65 1.54-1.65h10.92c.84 0 1.53.74 1.53 1.65v1.57c0 .9-.69 1.65-1.53 1.65M27.35 63.42zm11.08 1.77h.01zm-5.83 3.2l2.37 1.23-.4-2.73 1.92-2.04-2.69-.48-1.2-2.4-1.2 2.4-2.7.48 1.91 2.04-.38 2.73 2.37-1.22zm-4.22 2.18zm6.87 1.1zm-6.43 1.27l-.67-.4a1.23 1.23 0 0 1-.51-1.2l.52-3.69-2.98-3.16.2-.74c.14-.43.51-.74.96-.83l3.49-.61 1.97-3.9.8-.06c.48 0 .9.27 1.12.7l1.64 3.26 4.16.73.29.7c.14.44.04.91-.27 1.24l-2.5 2.67.62 4.4-.62.48c-.38.27-.88.3-1.3.09L32.6 71l-3.78 1.94zm3.7-31.73a5.01 5.01 0 0 0-5.02 4.99 5.01 5.01 0 0 0 5.03 4.99 5.01 5.01 0 0 0 5.02-5c0-2.75-2.25-4.98-5.02-4.98m0 12.28a7.33 7.33 0 0 1-7.35-7.3c0-4.01 3.3-7.29 7.35-7.29a7.33 7.33 0 0 1 7.34 7.3c0 4.02-3.3 7.29-7.34 7.29"/>
<path fill="#C8C8CC" d="M35.77 47.93h-3.69a.6.6 0 0 1-.6-.6v-3.66a.6.6 0 1 1 1.21 0v3.06h3.08c.34 0 .6.27.6.6a.6.6 0 0 1-.6.6M27 91.7c-.61 0-1.1-.5-1.1-1.1v-3.36c0-.6.49-1.1 1.1-1.1h3.38c.61 0 1.11.5 1.11 1.1 0 .6-.5 1.1-1.1 1.1H28.1v2.26c0 .6-.5 1.1-1.1 1.1m10.37-6.95h-3.38c-.61 0-1.11-.5-1.11-1.1 0-.6.5-1.1 1.1-1.1h2.28v-2.26a1.1 1.1 0 0 1 2.22 0v3.36c0 .6-.5 1.1-1.11 1.1"/>
<path fill="#C8C8CC" d="M27.05 85.67a1.19 1.19 0 0 1-1.13-1.47c.72-2.95 3.3-5 6.26-5a6.47 6.47 0 0 1 5.58 3.29 1.2 1.2 0 0 1-.42 1.62c-.56.33-1.27.14-1.6-.43a4.09 4.09 0 0 0-7.57 1.1c-.13.53-.6.89-1.12.89m5.13 6.72a6.46 6.46 0 0 1-5.58-3.3 1.2 1.2 0 0 1 .42-1.61 1.15 1.15 0 0 1 1.6.42 4.09 4.09 0 0 0 7.57-1.09c.15-.63.78-1.02 1.4-.86.63.16 1 .8.85 1.44-.72 2.94-3.3 5-6.26 5"/>
<path fill="#E1E1E6" d="M125 85.45a5.36 5.36 0 0 1-5.38-5.34V32.42A5.36 5.36 0 0 1 125 27.1h72.5c2.96 0 5.37 2.4 5.37 5.33v47.7a5.36 5.36 0 0 1-5.37 5.33H125z"/>
<path fill="#C8C8CC" d="M197.03 25.7h-72.27c-3.6 0-6.54 2.9-6.54 6.48v47.49a6.51 6.51 0 0 0 6.54 6.47h72.27c3.6 0 6.54-2.9 6.54-6.47v-47.5a6.51 6.51 0 0 0-6.54-6.47m0 2.33c2.31 0 4.19 1.86 4.19 4.15v47.49a4.16 4.16 0 0 1-4.19 4.14h-72.27a4.16 4.16 0 0 1-4.18-4.14v-47.5a4.16 4.16 0 0 1 4.18-4.14h72.27"/>
<path fill="#FFF" d="M126.98 35.43h67.83c1.36 0 2.46 1.1 2.46 2.45v40.25c0 1.36-1.1 2.45-2.46 2.45h-67.83a2.46 2.46 0 0 1-2.46-2.45V37.88c0-1.35 1.1-2.45 2.46-2.45"/>
<path fill="#E1E1E6" d="M114.3 112.54c-2.08 0-3.77-1.56-3.77-3.48v-1.23c0-.44.09-.87.26-1.27l8.07-18.91a3.76 3.76 0 0 1 3.51-2.2h75.83c1.52 0 2.88.83 3.47 2.13l8.6 18.93c.2.43.3.88.3 1.35v1.2c0 1.92-1.7 3.48-3.77 3.48h-92.5z"/>
<path fill="#C8C8CC" d="M198.36 84.06H122.2a4.95 4.95 0 0 0-4.6 2.88l-8.11 18.75a4.32 4.32 0 0 0-.36 1.72v1.22c0 2.54 2.23 4.6 4.96 4.6H207c2.74 0 4.96-2.06 4.96-4.6v-1.2c0-.63-.13-1.24-.4-1.81l-8.63-18.77a4.98 4.98 0 0 0-4.57-2.8m0 2.33c1.07 0 2.03.57 2.42 1.43l8.64 18.77c.13.27.19.56.19.85v1.2c0 1.26-1.17 2.28-2.61 2.28h-92.9c-1.45 0-2.62-1.02-2.62-2.28v-1.22c0-.28.06-.55.17-.81l8.1-18.74a2.63 2.63 0 0 1 2.45-1.48h76.16"/>
<path fill="#C8C8CC" d="M177.69 103.53a47.48 47.48 0 0 0-.52-5.11c0-.27-.33-.47-.77-.47l-29.82.22c-.45 0-.8.2-.8.48-.4 2.03-.58 3.03-.97 4.95-.02.32.42.6.93.6h30.92c.5 0 1-.32 1.03-.67m-36.4-9.62l-.42 1.49c-.07.26-.4.44-.8.44l-4.64.03c-.64 0-1.2-.42-1.1-.83.12-.6.19-.9.33-1.49.06-.26.38-.44.8-.45l4.74-.01c.66 0 1.21.41 1.1.82m10.18-.82l-4.84.02c-.46 0-.82.21-.87.5l-.26 1.5c-.06.4.44.76 1.04.76l4.7-.03c.44 0 .8-.22.88-.5l.36-1.49c.1-.4-.4-.77-1.01-.76m24.8 1.98c-.07-.6-.11-.89-.2-1.48-.03-.3-.39-.5-.85-.5l-4.88.02c-.62 0-1.13.38-1.05.78l.3 1.48c.07.3.43.5.88.5l4.73-.03c.6 0 1.12-.38 1.07-.77m-11.9.04l-.23-1.48c-.05-.31-.47-.55-.97-.54l-4.48.02c-.5 0-.92.24-.99.55l-.3 1.49c-.08.38.39.72.98.72l5-.04c.58 0 1.06-.34 1-.72m23.08-.1l-.27-1.48c-.05-.27-.37-.44-.79-.44l-4.78.01c-.66 0-1.24.43-1.13.85l.36 1.48c.06.26.38.44.8.44l4.67-.03c.64 0 1.22-.43 1.14-.83m-46.41-6.1l-4.23.02c-.37 0-.67.14-.73.33-.16.45-.23.67-.37 1.12-.1.31.38.62.94.62h4.13c.37 0 .67-.14.75-.34l.44-1.12c.12-.3-.35-.62-.93-.62m11.85 0l-4.79.01c-.45 0-.82.16-.89.38l-.32 1.12c-.08.3.41.57 1 .57l4.67-.01c.44 0 .81-.16.9-.38.15-.44.23-.67.4-1.11.12-.3-.35-.58-.97-.58m21.97 1.5l-.17-1.12c-.04-.22-.36-.38-.77-.38l-4.38.01c-.57 0-1.03.3-.96.59l.27 1.11c.05.22.38.37.79.37l4.26-.01c.55 0 1.01-.28.96-.57m-10.49.02l-.2-1.11c-.04-.24-.4-.41-.85-.41l-4.02.01c-.45 0-.83.18-.9.42-.13.45-.2.67-.31 1.12-.08.28.33.53.87.53l4.5-.01c.53 0 .96-.26.91-.55m21.68-.06l-.25-1.13c-.05-.2-.33-.33-.7-.33l-4.3.01c-.6 0-1.12.32-1.02.63l.33 1.12c.06.2.36.32.73.32h4.2c.57 0 1.09-.32 1.01-.62M130.1 94.6c-.21.6-.3.9-.44 1.49-.06.26-.33.44-.7.44l-4.14.02c-.56 0-1.07-.41-.98-.82.14-.6.24-.9.44-1.5.1-.27.4-.45.77-.45h4.18c.58-.01 1.01.41.87.82m1.16-5.7l-4.16.01c-.36 0-.64.14-.7.34-.15.44-.24.67-.44 1.12-.14.3.27.62.83.62h4.1c.36 0 .68-.14.78-.34.23-.44.35-.67.53-1.12.13-.3-.36-.62-.94-.62m60.66 4.18l4.21-.01c.37 0 .68.18.76.44.18.6.26.9.38 1.48.09.41-.44.83-1.01.83l-4.17.03c-.37 0-.64-.18-.69-.44-.11-.6-.2-.89-.39-1.49-.13-.41.32-.84.9-.84m-2.31-3.54c.14.45.23.68.43 1.12.09.2.4.32.78.32h4.16c.56 0 1-.31.9-.62a6.6 6.6 0 0 1-.33-1.12c-.04-.2-.3-.34-.67-.34h-4.23c-.6 0-1.14.33-1.04.64m-28.7-59a1.4 1.4 0 1 1 0 2.78 1.4 1.4 0 0 1-1.4-1.39c0-.76.63-1.38 1.4-1.38m6.26 25.59h.01-.01zm-9.73-.34l1.91 2.04-.38 2.73 2.36-1.22 2.37 1.22-.38-2.73 1.91-2.04-2.7-.48-1.2-2.4-1.2 2.4-2.7.48zm-.32 5.72zm6.87 1.1zm-6.43 1.27l-.67-.41a1.23 1.23 0 0 1-.52-1.19l.53-3.69-2.98-3.16.2-.74c.15-.43.52-.75.97-.83l3.48-.61 1.96-3.91.8-.05c.48 0 .91.26 1.12.69l1.65 3.27 4.16.73.29.71c.14.43.04.9-.27 1.24l-2.5 2.66.61 4.4-.61.48c-.39.27-.89.3-1.3.08l-3.15-1.62-3.77 1.95zm-15.88-12.28a5.01 5.01 0 0 0-5.03 4.99c0 2.75 2.26 4.99 5.03 4.99a5.01 5.01 0 0 0 5.02-5c0-2.75-2.25-4.98-5.02-4.98m0 12.28a7.33 7.33 0 0 1-7.35-7.3c0-4.02 3.3-7.29 7.35-7.29a7.33 7.33 0 0 1 7.34 7.3c0 4.02-3.3 7.29-7.34 7.29"/>
<path fill="#C8C8CC" d="M144.9 57.66h-3.69a.6.6 0 0 1-.6-.6V53.4a.6.6 0 0 1 1.21 0v3.06h3.08c.34 0 .6.27.6.6a.6.6 0 0 1-.6.6m30.4 4.86c-.61 0-1.11-.5-1.11-1.1v-3.36c0-.6.5-1.1 1.1-1.1h3.39c.6 0 1.1.5 1.1 1.1 0 .61-.5 1.1-1.1 1.1h-2.27v2.26c0 .6-.5 1.1-1.11 1.1m11.07-6.95H183c-.61 0-1.1-.49-1.1-1.1 0-.6.49-1.1 1.1-1.1h2.27v-2.25c0-.61.5-1.1 1.11-1.1.61 0 1.11.49 1.11 1.1v3.35c0 .61-.5 1.1-1.1 1.1"/>
<path fill="#C8C8CC" d="M176.05 56.5c-.1 0-.19-.02-.28-.04-.62-.16-1-.8-.85-1.44.72-2.95 3.3-5 6.26-5a6.46 6.46 0 0 1 5.58 3.3 1.2 1.2 0 0 1-.42 1.61c-.55.33-1.27.14-1.59-.43a4.09 4.09 0 0 0-7.57 1.1c-.14.53-.6.9-1.13.9m5.13 6.72a6.47 6.47 0 0 1-5.57-3.3 1.2 1.2 0 0 1 .42-1.62 1.15 1.15 0 0 1 1.59.43 4.09 4.09 0 0 0 7.57-1.1c.16-.63.8-1.01 1.4-.85.63.15 1.01.8.86 1.43-.73 2.95-3.3 5-6.27 5"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 27 KiB

Просмотреть файл

@ -110,7 +110,6 @@
skin/classic/browser/preferences/in-content/critters-postcard.jpg (../shared/incontentprefs/critters-postcard.jpg)
skin/classic/browser/preferences/in-content/face-sad.svg (../shared/incontentprefs/face-sad.svg)
skin/classic/browser/preferences/in-content/face-smile.svg (../shared/incontentprefs/face-smile.svg)
skin/classic/browser/preferences/in-content/fxa-avatar.svg (../shared/incontentprefs/fxa-avatar.svg)
skin/classic/browser/preferences/in-content/fxaPairDevice.css (../shared/incontentprefs/fxaPairDevice.css)
skin/classic/browser/preferences/in-content/general.svg (../shared/incontentprefs/general.svg)
skin/classic/browser/preferences/in-content/logo-android.svg (../shared/incontentprefs/logo-android.svg)
@ -124,22 +123,21 @@
skin/classic/browser/preferences/in-content/search.css (../shared/incontentprefs/search.css)
skin/classic/browser/preferences/in-content/search.svg (../shared/incontentprefs/search.svg)
skin/classic/browser/preferences/in-content/siteDataSettings.css (../shared/incontentprefs/siteDataSettings.css)
skin/classic/browser/preferences/in-content/sync-devices.svg (../shared/incontentprefs/sync-devices.svg)
skin/classic/browser/preferences/in-content/sync.svg (../shared/incontentprefs/sync.svg)
skin/classic/browser/preferences/in-content/syncDisconnect.css (../shared/incontentprefs/syncDisconnect.css)
* skin/classic/browser/preferences/in-content/containers.css (../shared/incontentprefs/containers.css)
* skin/classic/browser/preferences/containers.css (../shared/preferences/containers.css)
skin/classic/browser/fxa/default-avatar.svg (../shared/fxa/default-avatar.svg)
skin/classic/browser/fxa/fxa-spinner.svg (../shared/fxa/fxa-spinner.svg)
skin/classic/browser/fxa/sync-illustration.svg (../shared/fxa/sync-illustration.svg)
skin/classic/browser/fxa/sync-illustration-issue.svg (../shared/fxa/sync-illustration-issue.svg)
skin/classic/browser/fxa/avatar.svg (../shared/fxa/avatar.svg)
skin/classic/browser/fxa/avatar-color.svg (../shared/fxa/avatar-color.svg)
skin/classic/browser/fxa/avatar-confirm.svg (../shared/fxa/avatar-confirm.svg)
skin/classic/browser/fxa/avatar-empty.svg (../shared/fxa/avatar-empty.svg)
skin/classic/browser/fxa/avatar-empty-badged.svg (../shared/fxa/avatar-empty-badged.svg)
skin/classic/browser/fxa/graphic-mail.svg (../shared/fxa/graphic-mail.svg)
skin/classic/browser/fxa/choose-what-to-sync-devices.svg (../shared/fxa/choose-what-to-sync-devices.svg)
skin/classic/browser/fxa/sync-devices.svg (../shared/fxa/sync-devices.svg)
skin/classic/browser/accessibility.svg (../shared/icons/accessibility.svg)
skin/classic/browser/accessibility-active.svg (../shared/icons/accessibility-active.svg)

Просмотреть файл

@ -232,10 +232,11 @@ body {
.deck .syncIllustration,
.deck .syncIllustrationIssue {
height: 91px;
height: 174px;
margin: 38px 8px 15px;
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.deck .syncIllustration {

Просмотреть файл

@ -700,10 +700,10 @@ def toolchain_search_path_for(host_or_target):
target: vc_compiler_path,
}[host_or_target]
@depends(vc_path, original_path)
@depends(vc_path, original_path, developer_options)
@imports('os')
@imports(_from='os', _import='environ')
def toolchain_search_path(vc_compiler_path, original_path):
def toolchain_search_path(vc_compiler_path, original_path, developer_options):
result = list(original_path)
if vc_compiler_path:
@ -719,20 +719,24 @@ def toolchain_search_path_for(host_or_target):
# `mach artifact toolchain` installs clang.
mozbuild_state_dir = environ.get('MOZBUILD_STATE_PATH',
os.path.expanduser(os.path.join('~', '.mozbuild')))
bootstrapped = []
bootstrap_clang_path = os.path.join(mozbuild_state_dir, 'clang', 'bin')
result.append(bootstrap_clang_path)
bootstrapped.append(bootstrap_clang_path)
bootstrap_cbindgen_path = os.path.join(mozbuild_state_dir, 'cbindgen')
result.append(bootstrap_cbindgen_path)
bootstrapped.append(bootstrap_cbindgen_path)
bootstrap_nasm_path = os.path.join(mozbuild_state_dir, 'nasm')
result.append(bootstrap_nasm_path)
bootstrapped.append(bootstrap_nasm_path)
# Also add the rustup install directory for cargo/rustc.
rustup_path = os.path.expanduser(os.path.join('~', '.cargo', 'bin'))
result.append(rustup_path)
return result
if developer_options:
return bootstrapped + result
return result + bootstrapped
return toolchain_search_path

Просмотреть файл

@ -62,7 +62,7 @@ included_inclnames_to_ignore = set([
'javascript-trace.h', # generated in $OBJDIR if HAVE_DTRACE is defined
'frontend/ReservedWordsGenerated.h', # generated in $OBJDIR
'gc/StatsPhasesGenerated.h', # generated in $OBJDIR
'gc/StatsPhasesGenerated.cpp', # generated in $OBJDIR
'gc/StatsPhasesGenerated.inc', # generated in $OBJDIR
'jit/LOpcodes.h', # generated in $OBJDIR
'jit/MOpcodes.h', # generated in $OBJDIR
'jscustomallocator.h', # provided by embedders; allowed to be missing
@ -118,7 +118,7 @@ oddly_ordered_inclnames = set([
# Included in the body of frontend/TokenStream.h
'frontend/ReservedWordsGenerated.h',
'gc/StatsPhasesGenerated.h', # Included in the body of gc/Statistics.h
'gc/StatsPhasesGenerated.cpp', # Included in the body of gc/Statistics.cpp
'gc/StatsPhasesGenerated.inc', # Included in the body of gc/Statistics.cpp
'psapi.h', # Must be included after "util/Windows.h" on Windows
'machine/endian.h', # Must be included after <sys/types.h> on BSD
'winbase.h', # Must precede other system headers(?)

Просмотреть файл

@ -84,7 +84,7 @@ export const clearSelectedLocation = (cx: Context) => ({
export function selectSourceURL(
cx: Context,
url: string,
options: PartialPosition = { line: 1 }
options: PartialPosition = {}
) {
return async ({ dispatch, getState, sourceMaps }: ThunkArgs) => {
const source = getSourceByURL(getState(), url);
@ -105,7 +105,7 @@ export function selectSourceURL(
export function selectSource(
cx: Context,
sourceId: string,
options: PartialPosition = { line: 1 }
options: PartialPosition = {}
) {
return async ({ dispatch }: ThunkArgs) => {
const location = createLocation({ ...options, sourceId });

Просмотреть файл

@ -67,12 +67,28 @@ export class Popup extends Component<Props, State> {
componentDidMount() {
this.startTimer();
this.addHighlight();
}
componentWillUnmount() {
if (this.timerId) {
clearInterval(this.timerId);
}
this.removeHighlight();
}
addHighlight() {
const target = this.props.preview.target;
if (target) {
target.classList.add("preview-selection");
}
}
removeHighlight() {
const target = this.props.preview.target;
if (target) {
target.classList.remove("preview-selection");
}
}
startTimer() {

Просмотреть файл

@ -30,20 +30,6 @@ type State = {
selecting: boolean,
};
function getElementFromPos(pos: DOMRect) {
// We need to use element*s*AtPoint because the tooltip overlays
// the token and thus an undesirable element may be returned
const elementsAtPoint = [
// $FlowIgnore
...document.elementsFromPoint(
pos.x + pos.width / 2,
pos.y + pos.height / 2
),
];
return elementsAtPoint.find(el => el.className.startsWith("cm-"));
}
class Preview extends PureComponent<Props, State> {
target = null;
constructor(props) {
@ -65,10 +51,6 @@ class Preview extends PureComponent<Props, State> {
codeMirrorWrapper.removeEventListener("mousedown", this.onMouseDown);
}
componentDidUpdate(prevProps) {
this.updateHighlight(prevProps);
}
updateListeners(prevProps: ?Props) {
const { codeMirror } = this.props.editor;
const codeMirrorWrapper = codeMirror.getWrapperElement();
@ -78,34 +60,14 @@ class Preview extends PureComponent<Props, State> {
codeMirrorWrapper.addEventListener("mousedown", this.onMouseDown);
}
updateHighlight(prevProps) {
const { preview } = this.props;
if (preview && preview.target.matches(":hover")) {
const target = getElementFromPos(preview.cursorPos);
target && target.classList.add("preview-selection");
}
if (prevProps.preview && prevProps.preview !== preview) {
const target = getElementFromPos(prevProps.preview.cursorPos);
target && target.classList.remove("preview-selection");
}
}
onTokenEnter = ({ target, tokenPos }) => {
const { cx, editor, updatePreview, preview } = this.props;
const { cx, editor, updatePreview } = this.props;
if (cx.isPaused && (!preview || target !== preview.target)) {
if (cx.isPaused && !this.state.selecting) {
updatePreview(cx, target, tokenPos, editor.codeMirror);
}
};
onScroll = () => {
if (this.props.cx.isPaused) {
this.props.clearPreview(this.props.cx);
}
};
onMouseUp = () => {
if (this.props.cx.isPaused) {
this.setState({ selecting: false });
@ -120,6 +82,12 @@ class Preview extends PureComponent<Props, State> {
}
};
onScroll = () => {
if (this.props.cx.isPaused) {
this.props.clearPreview(this.props.cx);
}
};
render() {
const { preview } = this.props;
if (!preview || this.state.selecting) {

Просмотреть файл

@ -27,7 +27,8 @@ export function comparePosition(a: ?PartialPosition, b: ?PartialPosition) {
export function createLocation({
sourceId,
line = 1,
// Line 0 represents no specific line chosen for action
line = 0,
column,
sourceUrl = "",
}: IncompleteLocation): SourceLocation {

Просмотреть файл

@ -664,6 +664,7 @@ support-files =
examples/doc-worker-scopes.html
examples/scopes-worker.js
examples/doc-event-handler.html
examples/doc-editor-scroll.html
examples/doc-eval-throw.html
examples/doc-sourceURL-breakpoint.html
examples/doc-step-in-uninitialized.html
@ -710,6 +711,7 @@ skip-if = (os == "win" && ccov) # Bug 1424154
[browser_dbg-debug-line.js]
[browser_dbg-debugger-buttons.js]
[browser_dbg-editor-gutter.js]
[browser_dbg-editor-scroll.js]
[browser_dbg-editor-select.js]
[browser_dbg-editor-highlight.js]
[browser_dbg-ember-quickstart.js]

Просмотреть файл

@ -0,0 +1,46 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// Tests that the editor keeps proper scroll position per document
// while also moving to the correct location upon pause/breakpoint selection
requestLongerTimeout(2);
add_task(async function() {
// This test runs too slowly on linux debug. I'd like to figure out
// which is the slowest part of this and make it run faster, but to
// fix a frequent failure allow a longer timeout.
const dbg = await initDebugger("doc-editor-scroll.html");
const simple1 = findSource(dbg, "simple1.js");
// Set the initial breakpoint.
await selectSource(dbg, "simple1");
await addBreakpoint(dbg, simple1, 26);
const cm = getCM(dbg);
info("Open long file, scroll down to line below the fold");
await selectSource(dbg, "long");
cm.scrollTo(0, 600);
info("Ensure vertical scroll is the same after switching documents");
await selectSource(dbg, "simple1");
is(cm.getScrollInfo().top, 0);
await selectSource(dbg, "long");
is(cm.getScrollInfo().top, 600);
info("Trigger a pause, click on a frame, ensure the right line is selected");
invokeInTab("doNamedEval");
await waitForPaused(dbg);
findElement(dbg, "frame", 1).focus();
await clickElement(dbg, "frame", 1);
ok(cm.getScrollInfo().top != 0, "frame scrolled down to correct location");
info("Navigating while paused, goes to the correct location");
await selectSource(dbg, "long");
is(cm.getScrollInfo().top, 600);
info("Open new source, ensure it's at 0 scroll");
await selectSource(dbg, "frames");
is(cm.getScrollInfo().top, 0);
});

Просмотреть файл

@ -0,0 +1,17 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Debugger test page</title>
</head>
<body>
<button onclick="doNamedEval()">Click me!</button>
<script src="simple1.js"></script>
<script src="long.js"></script>
<script src="frames.js"></script>
</body>
</html>

Просмотреть файл

@ -172,15 +172,15 @@ BreakpointActor.prototype = {
hit: function(frame) {
// Don't pause if we are currently stepping (in or over) or the frame is
// black-boxed.
const location = this.threadActor.sources.getFrameLocation(frame);
const {
sourceActor,
line,
column,
} = this.threadActor.sources.getFrameLocation(frame);
const url = sourceActor.url;
} = location;
if (
this.threadActor.sources.isBlackBoxed(url, line, column) ||
this.threadActor.sources.isBlackBoxed(sourceActor.url, line, column) ||
this.threadActor.skipBreakpoints ||
frame.onStep
) {
@ -198,6 +198,10 @@ BreakpointActor.prototype = {
return undefined;
}
if (!this.threadActor.hasMoved(location, "breakpoint")) {
return undefined;
}
const reason = { type: "breakpoint", actors: [this.actorID] };
const { condition, logValue } = this.options || {};
@ -238,7 +242,7 @@ BreakpointActor.prototype = {
}
const message = {
filename: url,
filename: sourceActor.url,
lineNumber: line,
columnNumber: column,
level: "logPoint",

Просмотреть файл

@ -63,6 +63,8 @@ const ThreadActor = ActorClassWithSpec(threadSpec, {
this._observingNetwork = false;
this._eventBreakpoints = [];
this._priorPause = null;
this._options = {
autoBlackBox: false,
};
@ -535,6 +537,7 @@ const ThreadActor = ActorClassWithSpec(threadSpec, {
};
const pkt = onPacket(packet);
this._priorPause = pkt;
this.conn.send(pkt);
} catch (error) {
reportError(error);
@ -656,6 +659,26 @@ const ThreadActor = ActorClassWithSpec(threadSpec, {
return result;
},
hasMoved: function(newLocation, newType) {
if (!this._priorPause) {
return true;
}
// Recursion/Loops makes it okay to resume and land at
// the same breakpoint or debugger statement.
// It is not okay to transition from a breakpoint to debugger statement
// or a step to a debugger statement.
const { type } = this._priorPause.why;
if (type == newType) {
return true;
}
const { line, column } = this._priorPause.frame.where;
return line !== newLocation.line
|| column !== newLocation.column;
},
// Return whether reaching a script offset should be considered a distinct
// "step" from another location.
_intraFrameLocationIsStepTarget: function(startLocation, script, offset) {
@ -673,10 +696,7 @@ const ThreadActor = ActorClassWithSpec(threadSpec, {
// TODO(logan): When we remove points points, this can be removed too as
// we assert that we're at a different frame offset from the last time
// we paused.
const lineChanged = startLocation.line !== location.line;
const columnChanged =
startLocation.column !== location.column;
if (!lineChanged && !columnChanged) {
if (!this.hasMoved(location)) {
return false;
}
@ -1478,12 +1498,16 @@ const ThreadActor = ActorClassWithSpec(threadSpec, {
* The stack frame that contained the debugger statement.
*/
onDebuggerStatement: function(frame) {
// Don't pause if we are currently stepping (in or over) or the frame is
// black-boxed.
const { sourceActor } = this.sources.getFrameLocation(frame);
const url = sourceActor ? sourceActor.url : null;
const location = this.sources.getFrameLocation(frame);
const url = location.sourceActor.url;
if (this.skipBreakpoints || this.sources.isBlackBoxed(url) || frame.onStep) {
// Don't pause if
// 1. the debugger is in the same position
// 2. breakpoints are disabled
// 3. the source is blackboxed
if (!this.hasMoved(location, "debuggerStatement")
|| this.skipBreakpoints
|| this.sources.isBlackBoxed(url)) {
return undefined;
}

Просмотреть файл

@ -123,11 +123,12 @@ function evalCode() {
"" + function runTest() { // line 1
doStuff( // line 2 - Break here
function (n) { // line 3 - Step through `doStuff` to here
debugger; // line 4
} // line 5
); // line 6
} + "\n" // line 7
+ "debugger;", // line 8
(() => {})(); // line 4
debugger; // line 5
} // line 6
); // line 7
} + "\n" // line 8
+ "debugger;", // line 9
gDebuggee,
"1.8",
SOURCE_URL,

Просмотреть файл

@ -0,0 +1,181 @@
/* eslint-disable max-nested-callbacks */
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* Bug 1441183 - Verify that the debugger advances to a new location
* when encountering debugger statements and brakpoints
*/
add_task(threadClientTest(async props => {
await testDebuggerStatements(props);
await testBreakpoints(props);
await testBreakpointsAndDebuggerStatements(props);
await testLoops(props);
}));
// Ensure that we advance to the next line when we
// step to a debugger statement and resume.
async function testDebuggerStatements({threadClient, targetFront}) {
const consoleFront = await targetFront.getFront("console");
consoleFront.evaluateJSAsync(
`function foo(stop) {
debugger;
debugger;
debugger;
}
foo();
//# sourceURL=http://example.com/code.js`
);
await performActions(threadClient, [
[
"paused at first debugger statement",
{line: 2, type: "debuggerStatement"},
"stepOver",
],
[
"paused at the second debugger statement",
{line: 3, type: "resumeLimit"},
"resume",
],
[
"paused at the third debugger statement",
{line: 4, type: "debuggerStatement"},
"resume",
],
]);
}
// Ensure that we advance to the next line when we hit a breakpoint
// on a line with a debugger statement and resume.
async function testBreakpointsAndDebuggerStatements({threadClient, targetFront}) {
const consoleFront = await targetFront.getFront("console");
consoleFront.evaluateJSAsync(
`function foo(stop) {
debugger;
debugger;
debugger;
}
foo();
//# sourceURL=http://example.com/testBreakpointsAndDebuggerStatements.js`
);
threadClient.setBreakpoint(
{ sourceUrl: "http://example.com/testBreakpointsAndDebuggerStatements.js", line: 3 },
{}
);
await performActions(threadClient, [
[
"paused at first debugger statement",
{line: 2, type: "debuggerStatement"},
"resume",
],
[
"paused at the breakpoint at the second debugger statement",
{line: 3, type: "breakpoint"},
"resume",
],
[
"pause at the third debugger statement",
{line: 4, type: "debuggerStatement"},
"resume",
],
]);
}
// Ensure that we advance to the next line when we step to
// a line with a breakpoint and resume.
async function testBreakpoints({threadClient, targetFront}) {
const consoleFront = await targetFront.getFront("console");
consoleFront.evaluateJSAsync(
`function foo(stop) {
debugger;
a();
debugger;
}
function a() {}
foo();
//# sourceURL=http://example.com/testBreakpoints.js`
);
threadClient.setBreakpoint(
{ sourceUrl: "http://example.com/testBreakpoints.js", line: 3 },
{}
);
await performActions(threadClient, [
[
"paused at first debugger statement",
{line: 2, type: "debuggerStatement"},
"stepOver",
],
[
"paused at a()",
{line: 3, type: "resumeLimit"},
"resume",
],
[
"pause at the second debugger satement",
{line: 4, type: "debuggerStatement"},
"resume",
],
]);
}
// Ensure that we advance to the next line when we step to
// a line with a breakpoint and resume.
async function testLoops({threadClient, targetFront}) {
const consoleFront = await targetFront.getFront("console");
consoleFront.evaluateJSAsync(
`function foo(stop) {
let i = 0;
debugger;
while (i++ < 2) {
debugger;
}
debugger;
}
foo();
//# sourceURL=http://example.com/testLoops.js`
);
await performActions(threadClient, [
[
"paused at first debugger statement",
{line: 3, type: "debuggerStatement"},
"resume",
],
[
"pause at the second debugger satement",
{line: 5, type: "debuggerStatement"},
"resume",
],
[
"pause at the second debugger satement (2nd time)",
{line: 5, type: "debuggerStatement"},
"resume",
],
[
"pause at the third debugger satement",
{line: 7, type: "debuggerStatement"},
"resume",
],
]);
}
async function performActions(threadClient, actions) {
for (const action of actions) {
await performAction(threadClient, action);
}
}
async function performAction(threadClient, [description, result, action]) {
info(description);
const packet = await waitForEvent(threadClient, "paused");
Assert.equal(packet.frame.where.line, result.line);
Assert.equal(packet.why.type, result.type);
await threadClient[action]();
}

Просмотреть файл

@ -133,6 +133,7 @@ reason = bug 1104838
[test_breakpoint-22.js]
skip-if = true # breakpoint sliding is not supported bug 1525685
[test_breakpoint-23.js]
[test_breakpoint-24.js]
[test_conditional_breakpoint-01.js]
[test_conditional_breakpoint-02.js]
[test_conditional_breakpoint-03.js]

Просмотреть файл

@ -10812,18 +10812,6 @@ exports.PREFERENCES = [
"scroll-padding-top",
"layout.css.scroll-snap-v1.enabled"
],
[
"-webkit-text-stroke-width",
"layout.css.prefixes.webkit"
],
[
"-webkit-text-fill-color",
"layout.css.prefixes.webkit"
],
[
"-webkit-text-stroke-color",
"layout.css.prefixes.webkit"
],
[
"overflow-clip-box",
"layout.css.overflow-clip-box.enabled"
@ -10832,10 +10820,6 @@ exports.PREFERENCES = [
"overscroll-behavior",
"layout.css.overscroll-behavior.enabled"
],
[
"-webkit-text-stroke",
"layout.css.prefixes.webkit"
],
[
"scroll-margin",
"layout.css.scroll-snap-v1.enabled"
@ -10860,178 +10844,78 @@ exports.PREFERENCES = [
"scroll-padding-inline",
"layout.css.scroll-snap-v1.enabled"
],
[
"-webkit-background-clip",
"layout.css.prefixes.webkit"
],
[
"-webkit-background-origin",
"layout.css.prefixes.webkit"
],
[
"-webkit-background-size",
"layout.css.prefixes.webkit"
],
[
"-webkit-border-top-left-radius",
"layout.css.prefixes.webkit"
],
[
"-webkit-border-top-right-radius",
"layout.css.prefixes.webkit"
],
[
"-webkit-border-bottom-right-radius",
"layout.css.prefixes.webkit"
],
[
"-webkit-border-bottom-left-radius",
"layout.css.prefixes.webkit"
],
[
"-moz-transition-duration",
"layout.css.prefixes.transitions"
],
[
"-webkit-transition-duration",
"layout.css.prefixes.webkit"
],
[
"-moz-transition-timing-function",
"layout.css.prefixes.transitions"
],
[
"-webkit-transition-timing-function",
"layout.css.prefixes.webkit"
],
[
"-moz-transition-property",
"layout.css.prefixes.transitions"
],
[
"-webkit-transition-property",
"layout.css.prefixes.webkit"
],
[
"-moz-transition-delay",
"layout.css.prefixes.transitions"
],
[
"-webkit-transition-delay",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-name",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-name",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-duration",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-duration",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-timing-function",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-timing-function",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-iteration-count",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-iteration-count",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-direction",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-direction",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-play-state",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-play-state",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-fill-mode",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-fill-mode",
"layout.css.prefixes.webkit"
],
[
"-moz-animation-delay",
"layout.css.prefixes.animations"
],
[
"-webkit-animation-delay",
"layout.css.prefixes.webkit"
],
[
"-moz-transform",
"layout.css.prefixes.transforms"
],
[
"-webkit-transform",
"layout.css.prefixes.webkit"
],
[
"-moz-perspective",
"layout.css.prefixes.transforms"
],
[
"-webkit-perspective",
"layout.css.prefixes.webkit"
],
[
"-moz-perspective-origin",
"layout.css.prefixes.transforms"
],
[
"-webkit-perspective-origin",
"layout.css.prefixes.webkit"
],
[
"-moz-backface-visibility",
"layout.css.prefixes.transforms"
],
[
"-webkit-backface-visibility",
"layout.css.prefixes.webkit"
],
[
"-moz-transform-style",
"layout.css.prefixes.transforms"
],
[
"-webkit-transform-style",
"layout.css.prefixes.webkit"
],
[
"-moz-transform-origin",
"layout.css.prefixes.transforms"
],
[
"-webkit-transform-origin",
"layout.css.prefixes.webkit"
],
[
"-webkit-appearance",
"layout.css.webkit-appearance.enabled"
@ -11040,14 +10924,6 @@ exports.PREFERENCES = [
"-moz-column-span",
"layout.css.column-span.enabled"
],
[
"-webkit-box-shadow",
"layout.css.prefixes.webkit"
],
[
"-webkit-filter",
"layout.css.prefixes.webkit"
],
[
"-moz-font-feature-settings",
"layout.css.prefixes.font-features"
@ -11056,10 +10932,6 @@ exports.PREFERENCES = [
"-moz-font-language-override",
"layout.css.prefixes.font-features"
],
[
"-webkit-text-size-adjust",
"layout.css.prefixes.webkit"
],
[
"offset-block-start",
"layout.css.offset-logical-properties.enabled"
@ -11076,156 +10948,20 @@ exports.PREFERENCES = [
"offset-inline-end",
"layout.css.offset-logical-properties.enabled"
],
[
"-webkit-flex-direction",
"layout.css.prefixes.webkit"
],
[
"-webkit-flex-wrap",
"layout.css.prefixes.webkit"
],
[
"-webkit-justify-content",
"layout.css.prefixes.webkit"
],
[
"-webkit-align-content",
"layout.css.prefixes.webkit"
],
[
"-webkit-align-items",
"layout.css.prefixes.webkit"
],
[
"-webkit-flex-grow",
"layout.css.prefixes.webkit"
],
[
"-webkit-flex-shrink",
"layout.css.prefixes.webkit"
],
[
"-webkit-align-self",
"layout.css.prefixes.webkit"
],
[
"-webkit-order",
"layout.css.prefixes.webkit"
],
[
"-webkit-flex-basis",
"layout.css.prefixes.webkit"
],
[
"-moz-box-sizing",
"layout.css.prefixes.box-sizing"
],
[
"-webkit-box-sizing",
"layout.css.prefixes.webkit"
],
[
"-webkit-user-select",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-repeat",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-position-x",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-position-y",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-clip",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-origin",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-size",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-composite",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-image",
"layout.css.prefixes.webkit"
],
[
"-webkit-box-align",
"layout.css.prefixes.webkit"
],
[
"-webkit-box-direction",
"layout.css.prefixes.webkit"
],
[
"-webkit-box-flex",
"layout.css.prefixes.webkit"
],
[
"-webkit-box-orient",
"layout.css.prefixes.webkit"
],
[
"-webkit-box-pack",
"layout.css.prefixes.webkit"
],
[
"-webkit-box-ordinal-group",
"layout.css.prefixes.webkit"
],
[
"-webkit-border-radius",
"layout.css.prefixes.webkit"
],
[
"-moz-border-image",
"layout.css.prefixes.border-image"
],
[
"-webkit-border-image",
"layout.css.prefixes.webkit"
],
[
"-moz-transition",
"layout.css.prefixes.transitions"
],
[
"-webkit-transition",
"layout.css.prefixes.webkit"
],
[
"-moz-animation",
"layout.css.prefixes.animations"
],
[
"-webkit-animation",
"layout.css.prefixes.webkit"
],
[
"-webkit-flex-flow",
"layout.css.prefixes.webkit"
],
[
"-webkit-flex",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask",
"layout.css.prefixes.webkit"
],
[
"-webkit-mask-position",
"layout.css.prefixes.webkit"
]
];

Просмотреть файл

@ -13,20 +13,20 @@ function waitForSetPref(pref, value) {
}
/*
* These tests rely on the fact that the -webkit-text-fill-color property
* is disabled by the layout.css.prefixes.webkit pref. If we ever remove that
* pref we will need to substitute some other pref:property combination.
* These tests rely on the fact that the -webkit-line-clamp property is
* disabled by the layout.css.webkit-line-clamp.enabled pref. If we ever remove
* that pref we will need to substitute some other pref:property combination.
*/
promise_test(function(t) {
return waitForSetPref('layout.css.prefixes.webkit', true).then(() => {
var anim = addDiv(t).animate({ webkitTextFillColor: [ 'green', 'blue' ]});
return waitForSetPref('layout.css.webkit-line-clamp.enabled', true).then(() => {
var anim = addDiv(t).animate({ webkitLineClamp: [ '2', '4' ]});
assert_equals(anim.effect.getKeyframes().length, 2,
'A property-indexed keyframe specifying only enabled'
+ ' properties produces keyframes');
return waitForSetPref('layout.css.prefixes.webkit', false);
return waitForSetPref('layout.css.webkit-line-clamp.enabled', false);
}).then(() => {
var anim = addDiv(t).animate({ webkitTextFillColor: [ 'green', 'blue' ]});
var anim = addDiv(t).animate({ webkitLineClamp: [ '2', '4' ]});
assert_equals(anim.effect.getKeyframes().length, 0,
'A property-indexed keyframe specifying only disabled'
+ ' properties produces no keyframes');
@ -35,8 +35,8 @@ promise_test(function(t) {
promise_test(function(t) {
var createAnim = () => {
var anim = addDiv(t).animate([ { webkitTextFillColor: 'green' },
{ webkitTextFillColor: 'blue' } ]);
var anim = addDiv(t).animate([ { webkitLineClamp: '2' },
{ webkitLineClamp: '4' } ]);
assert_equals(anim.effect.getKeyframes().length, 2,
'Animation specified using a keyframe sequence should'
+ ' return the same number of keyframes regardless of'
@ -55,17 +55,17 @@ promise_test(function(t) {
`${descr} should NOT have the '${property}' property`);
};
return waitForSetPref('layout.css.prefixes.webkit', true).then(() => {
return waitForSetPref('layout.css.webkit-line-clamp.enabled', true).then(() => {
var anim = createAnim();
assert_has_property(anim, 0, 'Initial keyframe', 'webkitTextFillColor');
assert_has_property(anim, 1, 'Final keyframe', 'webkitTextFillColor');
return waitForSetPref('layout.css.prefixes.webkit', false);
assert_has_property(anim, 0, 'Initial keyframe', 'webkitLineClamp');
assert_has_property(anim, 1, 'Final keyframe', 'webkitLineClamp');
return waitForSetPref('layout.css.webkit-line-clamp.enabled', false);
}).then(() => {
var anim = createAnim();
assert_does_not_have_property(anim, 0, 'Initial keyframe',
'webkitTextFillColor');
'webkitLineClamp');
assert_does_not_have_property(anim, 1, 'Final keyframe',
'webkitTextFillColor');
'webkitLineClamp');
});
}, 'Specifying a disabled property using a keyframe sequence');

Просмотреть файл

@ -9,7 +9,6 @@ setup({explicit_done: true});
SpecialPowers.pushPrefEnv(
{ "set": [
["layout.css.osx-font-smoothing.enabled", true],
["layout.css.prefixes.webkit", true]
] },
function() {
window.open("file_discrete_animations.html");

Просмотреть файл

@ -18,8 +18,7 @@ namespace dom {
static const double sRadPerDegree = 2.0 * M_PI / 360.0;
bool WebKitCSSMatrix::FeatureEnabled(JSContext* aCx, JSObject* aObj) {
return StaticPrefs::layout_css_DOMMatrix_enabled() &&
StaticPrefs::layout_css_prefixes_webkit();
return StaticPrefs::layout_css_DOMMatrix_enabled();
}
already_AddRefed<WebKitCSSMatrix> WebKitCSSMatrix::Constructor(

Просмотреть файл

@ -4479,13 +4479,15 @@ Storage* nsGlobalWindowInner::GetLocalStorage(ErrorResult& aError) {
}
// Note that this behavior is observable: if we grant storage permission to a
// tracker, we pass from the partitioned LocalStorage to the 'normal'
// LocalStorage. The previous data is lost and the 2 window.localStorage
// objects, before and after the permission granted, will be different.
// tracker, we pass from the partitioned LocalStorage (or a partitioned cookie
// jar) to the 'normal' one. The previous data is lost and the 2
// window.localStorage objects, before and after the permission granted, will
// be different.
if ((StoragePartitioningEnabled(access, cookieSettings) ||
!ShouldPartitionStorage(access)) &&
(!mLocalStorage ||
mLocalStorage->Type() == Storage::ePartitionedLocalStorage)) {
mLocalStorage->Type() == Storage::ePartitionedLocalStorage ||
mLocalStorage->StoragePrincipal() != GetEffectiveStoragePrincipal())) {
RefPtr<Storage> storage;
if (NextGenLocalStorageEnabled()) {
@ -6963,8 +6965,7 @@ void nsGlobalWindowInner::StorageAccessGranted() {
// If we have a partitioned localStorage, it's time to replace it with a real
// one in order to receive notifications.
if (mLocalStorage &&
mLocalStorage->Type() == Storage::ePartitionedLocalStorage) {
if (mLocalStorage) {
IgnoredErrorResult error;
GetLocalStorage(error);
if (NS_WARN_IF(error.Failed())) {

Просмотреть файл

@ -118,6 +118,5 @@ skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests
[test_video_fastpath_vp9.html]
[test_webglcontextcreationerror.html]
[test_webgl_fingerprinting_resistance.html]
fail-if = (os == 'mac') # on try server, LOCAL_GL_MAX_CUBE_MAP_TEXTURE_SIZE = 512 on mac
[test_without_index_validation.html]
[test_vertexattrib4f_update.html]

Просмотреть файл

@ -22,6 +22,9 @@ interface JSWindowActor {
[ChromeOnly, ChromeConstructor]
interface JSWindowActorParent {
readonly attribute WindowGlobalParent manager;
[Throws]
readonly attribute CanonicalBrowsingContext? browsingContext;
};
JSWindowActorParent implements JSWindowActor;

Просмотреть файл

@ -19,7 +19,6 @@
#include "mozilla/MemoryReporting.h"
#include "mozilla/Preferences.h"
#include "mozilla/PresShell.h"
#include "mozilla/StaticPrefs.h"
#include "mozilla/dom/BindingUtils.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/Event.h"
@ -1035,24 +1034,18 @@ nsresult EventListenerManager::HandleEventSubType(Listener* aListener,
EventMessage EventListenerManager::GetLegacyEventMessage(
EventMessage aEventMessage) const {
// (If we're off-main-thread, we can't check the pref; so we just behave as
// if it's disabled.)
if (mIsMainThreadELM) {
if (StaticPrefs::layout_css_prefixes_webkit()) {
// webkit-prefixed legacy events:
if (aEventMessage == eTransitionEnd) {
return eWebkitTransitionEnd;
}
if (aEventMessage == eAnimationStart) {
return eWebkitAnimationStart;
}
if (aEventMessage == eAnimationEnd) {
return eWebkitAnimationEnd;
}
if (aEventMessage == eAnimationIteration) {
return eWebkitAnimationIteration;
}
}
// webkit-prefixed legacy events:
if (aEventMessage == eTransitionEnd) {
return eWebkitTransitionEnd;
}
if (aEventMessage == eAnimationStart) {
return eWebkitAnimationStart;
}
if (aEventMessage == eAnimationEnd) {
return eWebkitAnimationEnd;
}
if (aEventMessage == eAnimationIteration) {
return eWebkitAnimationIteration;
}
switch (aEventMessage) {

Просмотреть файл

@ -87,6 +87,16 @@ void JSWindowActorParent::SendRawMessage(const JSWindowActorMessageMeta& aMeta,
}
}
CanonicalBrowsingContext* JSWindowActorParent::GetBrowsingContext(
ErrorResult& aRv) {
if (!mManager) {
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
return nullptr;
}
return mManager->BrowsingContext();
}
void JSWindowActorParent::StartDestroy() {
JSWindowActor::StartDestroy();
mCanSend = false;

Просмотреть файл

@ -44,6 +44,7 @@ class JSWindowActorParent final : public JSWindowActor {
void Init(const nsAString& aName, WindowGlobalParent* aManager);
void StartDestroy();
void AfterDestroy();
CanonicalBrowsingContext* GetBrowsingContext(ErrorResult& aRv);
protected:
void SendRawMessage(const JSWindowActorMessageMeta& aMeta,

Просмотреть файл

@ -199,13 +199,9 @@ ComposerCommandsUpdater::DidMerge(nsITransactionManager* aManager,
# pragma mark -
#endif
nsresult ComposerCommandsUpdater::Init(nsPIDOMWindowOuter* aDOMWindow) {
if (NS_WARN_IF(!aDOMWindow)) {
return NS_ERROR_INVALID_ARG;
}
mDOMWindow = aDOMWindow;
mDocShell = aDOMWindow->GetDocShell();
return NS_OK;
void ComposerCommandsUpdater::Init(nsPIDOMWindowOuter& aDOMWindow) {
mDOMWindow = &aDOMWindow;
mDocShell = aDOMWindow.GetDocShell();
}
nsresult ComposerCommandsUpdater::PrimeUpdateTimer() {

Просмотреть файл

@ -48,7 +48,7 @@ class ComposerCommandsUpdater final : public nsIDocumentStateListener,
// nsITransactionListener
NS_DECL_NSITRANSACTIONLISTENER
nsresult Init(nsPIDOMWindowOuter* aDOMWindow);
void Init(nsPIDOMWindowOuter& aDOMWindow);
/**
* OnSelectionChange() is called when selection is changed in the editor.

Просмотреть файл

@ -163,7 +163,7 @@ nsEditingSession::MakeWindowEditable(mozIDOMWindowProxy* aWindow,
// aDoAfterUriLoad can be false only when making an existing window editable
if (!aDoAfterUriLoad) {
rv = SetupEditorOnWindow(aWindow);
rv = SetupEditorOnWindow(MOZ_KnownLive(*window));
// mEditorStatus is set to the error reason
// Since this is used only when editing an existing page,
@ -266,21 +266,9 @@ bool IsSupportedTextType(const char* aMIMEType) {
return false;
}
/*---------------------------------------------------------------------------
SetupEditorOnWindow
nsIEditor setupEditorOnWindow (in nsIDOMWindow aWindow);
----------------------------------------------------------------------------*/
NS_IMETHODIMP
nsEditingSession::SetupEditorOnWindow(mozIDOMWindowProxy* aWindow) {
nsresult nsEditingSession::SetupEditorOnWindow(nsPIDOMWindowOuter& aWindow) {
mDoneSetup = true;
NS_ENSURE_TRUE(aWindow, NS_ERROR_FAILURE);
auto* window = nsPIDOMWindowOuter::From(aWindow);
nsresult rv;
// MIME CHECKING
// must get the content type
// Note: the doc gets this from the network channel during StartPageLoad,
@ -288,7 +276,7 @@ nsEditingSession::SetupEditorOnWindow(mozIDOMWindowProxy* aWindow) {
nsAutoCString mimeCType;
// then lets check the mime type
if (RefPtr<Document> doc = window->GetDoc()) {
if (RefPtr<Document> doc = aWindow.GetDoc()) {
nsAutoString mimeType;
doc->GetContentType(mimeType);
AppendUTF16toUTF8(mimeType, mimeCType);
@ -348,8 +336,7 @@ nsEditingSession::SetupEditorOnWindow(mozIDOMWindowProxy* aWindow) {
// now init the state maintainer
// This allows notification of error state
// even if we don't create an editor
rv = mComposerCommandsUpdater->Init(window);
NS_ENSURE_SUCCESS(rv, rv);
mComposerCommandsUpdater->Init(aWindow);
if (mEditorStatus != eEditorCreationInProgress) {
RefPtr<ComposerCommandsUpdater> updater = mComposerCommandsUpdater;
@ -366,7 +353,7 @@ nsEditingSession::SetupEditorOnWindow(mozIDOMWindowProxy* aWindow) {
// Create editor and do other things
// only if we haven't found some error above,
nsCOMPtr<nsIDocShell> docShell = window->GetDocShell();
nsCOMPtr<nsIDocShell> docShell = aWindow.GetDocShell();
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
RefPtr<PresShell> presShell = docShell->GetPresShell();
if (NS_WARN_IF(!presShell)) {
@ -401,14 +388,14 @@ nsEditingSession::SetupEditorOnWindow(mozIDOMWindowProxy* aWindow) {
do_GetWeakReference(static_cast<nsIEditor*>(htmlEditor.get()));
}
// set the editor on the docShell. The docShell now owns it.
rv = docShell->SetHTMLEditor(htmlEditor);
nsresult rv = docShell->SetHTMLEditor(htmlEditor);
NS_ENSURE_SUCCESS(rv, rv);
// setup the HTML editor command controller
if (needHTMLController) {
// The third controller takes an nsIEditor as the context
rv = SetupEditorCommandController(
nsBaseCommandController::CreateHTMLEditorController, aWindow,
nsBaseCommandController::CreateHTMLEditorController, &aWindow,
static_cast<nsIEditor*>(htmlEditor), &mHTMLCommandControllerId);
NS_ENSURE_SUCCESS(rv, rv);
}
@ -523,7 +510,7 @@ nsEditingSession::TearDownEditorOnWindow(mozIDOMWindowProxy* aWindow) {
if (mComposerCommandsUpdater && htmlEditor) {
// Null out the editor on the controllers first to prevent their weak
// references from pointing to a destroyed editor.
SetEditorOnControllers(aWindow, nullptr);
SetEditorOnControllers(*window, nullptr);
}
// Null out the editor on the docShell to trigger PreDestroy which
@ -879,7 +866,8 @@ nsresult nsEditingSession::EndDocumentLoad(nsIWebProgress* aWebProgress,
mEditorStatus = eEditorErrorFileNotFound;
}
nsIDocShell* docShell = nsPIDOMWindowOuter::From(domWindow)->GetDocShell();
auto* window = nsPIDOMWindowOuter::From(domWindow);
nsIDocShell* docShell = window->GetDocShell();
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE); // better error handling?
// cancel refresh from meta tags
@ -910,7 +898,7 @@ nsresult nsEditingSession::EndDocumentLoad(nsIWebProgress* aWebProgress,
if (needsSetup) {
mCanCreateEditor = false;
rv = SetupEditorOnWindow(domWindow);
rv = SetupEditorOnWindow(MOZ_KnownLive(*window));
if (NS_FAILED(rv)) {
// If we had an error, setup timer to load a blank page later
if (mLoadBlankDocTimer) {
@ -1087,24 +1075,13 @@ nsresult nsEditingSession::SetupEditorCommandController(
return SetContextOnControllerById(controllers, aContext, *aControllerId);
}
/*---------------------------------------------------------------------------
SetEditorOnControllers
Set the editor on the controller(s) for this window
----------------------------------------------------------------------------*/
NS_IMETHODIMP
nsEditingSession::SetEditorOnControllers(mozIDOMWindowProxy* aWindow,
nsIEditor* aEditor) {
NS_ENSURE_TRUE(aWindow, NS_ERROR_NULL_POINTER);
auto* piWindow = nsPIDOMWindowOuter::From(aWindow);
nsresult nsEditingSession::SetEditorOnControllers(nsPIDOMWindowOuter& aWindow,
HTMLEditor* aEditor) {
nsCOMPtr<nsIControllers> controllers;
nsresult rv = piWindow->GetControllers(getter_AddRefs(controllers));
nsresult rv = aWindow.GetControllers(getter_AddRefs(controllers));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsISupports> editorAsISupports = static_cast<nsISupports*>(aEditor);
nsCOMPtr<nsISupports> editorAsISupports = static_cast<nsIEditor*>(aEditor);
if (mBaseCommandControllerId) {
rv = SetContextOnControllerById(controllers, editorAsISupports,
mBaseCommandControllerId);
@ -1209,7 +1186,7 @@ void nsEditingSession::RestoreAnimationMode(nsPIDOMWindowOuter* aWindow) {
presContext->SetImageAnimationMode(mImageAnimationMode);
}
nsresult nsEditingSession::DetachFromWindow(mozIDOMWindowProxy* aWindow) {
nsresult nsEditingSession::DetachFromWindow(nsPIDOMWindowOuter* aWindow) {
NS_ENSURE_TRUE(mDoneSetup, NS_OK);
NS_ASSERTION(mComposerCommandsUpdater,
@ -1221,14 +1198,12 @@ nsresult nsEditingSession::DetachFromWindow(mozIDOMWindowProxy* aWindow) {
mLoadBlankDocTimer = nullptr;
}
auto* window = nsPIDOMWindowOuter::From(aWindow);
// Remove controllers, webprogress listener, and otherwise
// make things the way they were before we started editing.
RemoveEditorControllers(window);
RemoveWebProgressListener(window);
RestoreJSAndPlugins(window);
RestoreAnimationMode(window);
RemoveEditorControllers(aWindow);
RemoveWebProgressListener(aWindow);
RestoreJSAndPlugins(aWindow);
RestoreAnimationMode(aWindow);
// Kill our weak reference to our original window, in case
// it changes on restore, or otherwise dies.
@ -1237,7 +1212,7 @@ nsresult nsEditingSession::DetachFromWindow(mozIDOMWindowProxy* aWindow) {
return NS_OK;
}
nsresult nsEditingSession::ReattachToWindow(mozIDOMWindowProxy* aWindow) {
nsresult nsEditingSession::ReattachToWindow(nsPIDOMWindowOuter* aWindow) {
NS_ENSURE_TRUE(mDoneSetup, NS_OK);
NS_ENSURE_TRUE(aWindow, NS_ERROR_FAILURE);
@ -1248,8 +1223,7 @@ nsresult nsEditingSession::ReattachToWindow(mozIDOMWindowProxy* aWindow) {
// old editor ot the window.
nsresult rv;
auto* window = nsPIDOMWindowOuter::From(aWindow);
nsIDocShell* docShell = window->GetDocShell();
nsIDocShell* docShell = aWindow->GetDocShell();
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
mDocShell = do_GetWeakReference(docShell);
@ -1263,7 +1237,7 @@ nsresult nsEditingSession::ReattachToWindow(mozIDOMWindowProxy* aWindow) {
mEditorStatus = eEditorCreationInProgress;
// Adds back web progress listener.
rv = PrepareForEditing(window);
rv = PrepareForEditing(aWindow);
NS_ENSURE_SUCCESS(rv, rv);
// Setup the command controllers again.
@ -1278,7 +1252,7 @@ nsresult nsEditingSession::ReattachToWindow(mozIDOMWindowProxy* aWindow) {
NS_ENSURE_SUCCESS(rv, rv);
if (mComposerCommandsUpdater) {
mComposerCommandsUpdater->Init(window);
mComposerCommandsUpdater->Init(*aWindow);
}
// Get editor
@ -1307,7 +1281,7 @@ nsresult nsEditingSession::ReattachToWindow(mozIDOMWindowProxy* aWindow) {
NS_ENSURE_SUCCESS(rv, rv);
// Set context on all controllers to be the editor
rv = SetEditorOnControllers(aWindow, htmlEditor);
rv = SetEditorOnControllers(*aWindow, htmlEditor);
NS_ENSURE_SUCCESS(rv, rv);
#ifdef DEBUG

Просмотреть файл

@ -30,7 +30,6 @@ class nsITimer;
class nsIChannel;
class nsIControllers;
class nsIDocShell;
class nsIEditor;
class nsIWebProgress;
namespace mozilla {
@ -53,6 +52,18 @@ class nsEditingSession final : public nsIEditingSession,
// nsIEditingSession
NS_DECL_NSIEDITINGSESSION
/**
* Removes all the editor's controllers/listeners etc and makes the window
* uneditable.
*/
nsresult DetachFromWindow(nsPIDOMWindowOuter* aWindow);
/**
* Undos DetachFromWindow(), reattaches this editing session/editor
* to the window.
*/
nsresult ReattachToWindow(nsPIDOMWindowOuter* aWindow);
protected:
virtual ~nsEditingSession();
@ -65,6 +76,17 @@ class nsEditingSession final : public nsIEditingSession,
nsresult SetContextOnControllerById(nsIControllers* aControllers,
nsISupports* aContext, uint32_t aID);
/**
* Set the editor on the controller(s) for this window
*/
nsresult SetEditorOnControllers(nsPIDOMWindowOuter& aWindow,
mozilla::HTMLEditor* aEditor);
/**
* Setup editor and related support objects
*/
MOZ_CAN_RUN_SCRIPT nsresult SetupEditorOnWindow(nsPIDOMWindowOuter& aWindow);
nsresult PrepareForEditing(nsPIDOMWindowOuter* aWindow);
static void TimerCallback(nsITimer* aTimer, void* aClosure);

Просмотреть файл

@ -67,31 +67,10 @@ interface nsIEditingSession : nsISupports
*/
nsIEditor getEditorForWindow(in mozIDOMWindowProxy window);
/**
* Setup editor and related support objects
*/
[can_run_script]
void setupEditorOnWindow(in mozIDOMWindowProxy window);
/**
* Destroy editor and related support objects
*/
void tearDownEditorOnWindow(in mozIDOMWindowProxy window);
void setEditorOnControllers(in mozIDOMWindowProxy aWindow,
in nsIEditor aEditor);
/**
* Removes all the editor's controllers/listeners etc and makes the window
* uneditable.
*/
void detachFromWindow(in mozIDOMWindowProxy aWindow);
/**
* Undos detachFromWindow(), reattaches this editing session/editor
* to the window.
*/
void reattachToWindow(in mozIDOMWindowProxy aWindow);
[noscript] void tearDownEditorOnWindow(in mozIDOMWindowProxy window);
%{C++
/**

Просмотреть файл

@ -92,28 +92,18 @@ NS_IMPL_ISUPPORTS(ElementDeletionObserver, nsIMutationObserver)
void ElementDeletionObserver::ParentChainChanged(nsIContent* aContent) {
// If the native anonymous content has been unbound already in
// DeleteRefToAnonymousNode, mNativeAnonNode's parentNode is null.
if (aContent == mObservedElement && mNativeAnonNode &&
mNativeAnonNode->GetParentNode() == aContent) {
// If the observed node has been moved to another document, there isn't much
// we can do easily. But at least be safe and unbind the native anonymous
// content and stop observing changes.
if (mNativeAnonNode->OwnerDoc() != mObservedElement->OwnerDoc()) {
mObservedElement->RemoveMutationObserver(this);
mObservedElement = nullptr;
mNativeAnonNode->RemoveMutationObserver(this);
mNativeAnonNode->UnbindFromTree();
mNativeAnonNode = nullptr;
NS_RELEASE_THIS();
return;
}
// We're staying in the same document, just rebind the native anonymous
// node so that the subtree root points to the right object etc.
mNativeAnonNode->UnbindFromTree();
BindContext context(*mObservedElement, BindContext::ForNativeAnonymous);
mNativeAnonNode->BindToTree(context, *mObservedElement);
if (aContent != mObservedElement || !mNativeAnonNode ||
mNativeAnonNode->GetParent() != aContent) {
return;
}
ManualNACPtr::RemoveContentFromNACArray(mNativeAnonNode);
mObservedElement->RemoveMutationObserver(this);
mObservedElement = nullptr;
mNativeAnonNode->RemoveMutationObserver(this);
mNativeAnonNode = nullptr;
NS_RELEASE_THIS();
}
void ElementDeletionObserver::NodeWillBeDestroyed(const nsINode* aNode) {

Просмотреть файл

@ -60,25 +60,29 @@ class ManualNACPtr final {
}
RefPtr<Element> ptr = mPtr.forget();
nsIContent* parentContent = ptr->GetParent();
RemoveContentFromNACArray(ptr);
}
static void RemoveContentFromNACArray(nsIContent* aAnonymousContent) {
nsIContent* parentContent = aAnonymousContent->GetParent();
if (!parentContent) {
NS_WARNING("Potentially leaking manual NAC");
return;
}
// Remove reference from the parent element.
auto nac = static_cast<mozilla::ManualNACArray*>(
auto* nac = static_cast<ManualNACArray*>(
parentContent->GetProperty(nsGkAtoms::manualNACProperty));
// Document::AdoptNode might remove all properties before destroying editor.
// So we have to consider that NAC could be already removed.
if (nac) {
nac->RemoveElement(ptr);
nac->RemoveElement(aAnonymousContent);
if (nac->IsEmpty()) {
parentContent->DeleteProperty(nsGkAtoms::manualNACProperty);
}
}
ptr->UnbindFromTree();
aAnonymousContent->UnbindFromTree();
}
Element* get() const { return mPtr.get(); }

Просмотреть файл

@ -0,0 +1,11 @@
<script>
function go() {
document.getSelection().selectAllChildren(a)
document.execCommand("insertUnorderedList", false)
document.execCommand("enableObjectResizing", false)
}
</script>
<dd contenteditable="true">
<audio src="data:text/html,foo" onerror="go()">
<img id="a"></img>
<dl>

Просмотреть файл

@ -113,3 +113,4 @@ load 1533913.html
load 1534394.html
load 1547897.html
load 1547898.html
load 1556799.html

Просмотреть файл

@ -77,9 +77,11 @@ enum class TextureFlags : uint32_t {
NON_BLOCKING_READ_LOCK = 1 << 15,
// Enable a blocking read lock.
BLOCKING_READ_LOCK = 1 << 16,
// Keep TextureClient alive when host side is used
WAIT_HOST_USAGE_END = 1 << 17,
// OR union of all valid bits
ALL_BITS = (1 << 17) - 1,
ALL_BITS = (1 << 18) - 1,
// the default flags
DEFAULT = NO_FLAGS
};

Просмотреть файл

@ -553,6 +553,17 @@ void D3D11TextureData::GetDXGIResource(IDXGIResource** aOutResource) {
mTexture->QueryInterface(aOutResource);
}
TextureFlags D3D11TextureData::GetTextureFlags() const {
TextureFlags flags = TextureFlags::NO_FLAGS;
// With WebRender, resource open happens asynchronously on RenderThread.
// During opening the resource on host side, TextureClient needs to be alive.
// With WAIT_HOST_USAGE_END, keep TextureClient alive during host side usage.
if (gfx::gfxVars::UseWebRender()) {
flags |= TextureFlags::WAIT_HOST_USAGE_END;
}
return flags;
}
DXGIYCbCrTextureData* DXGIYCbCrTextureData::Create(
IDirect3DTexture9* aTextureY, IDirect3DTexture9* aTextureCb,
IDirect3DTexture9* aTextureCr, HANDLE aHandleY, HANDLE aHandleCb,
@ -681,6 +692,17 @@ void DXGIYCbCrTextureData::Deallocate(LayersIPCChannel*) {
mD3D11Textures[2] = nullptr;
}
TextureFlags DXGIYCbCrTextureData::GetTextureFlags() const {
TextureFlags flags = TextureFlags::DEALLOCATE_MAIN_THREAD;
// With WebRender, resource open happens asynchronously on RenderThread.
// During opening the resource on host side, TextureClient needs to be alive.
// With WAIT_HOST_USAGE_END, keep TextureClient alive during host side usage.
if (gfx::gfxVars::UseWebRender()) {
flags |= TextureFlags::WAIT_HOST_USAGE_END;
}
return flags;
}
already_AddRefed<TextureHost> CreateTextureHostD3D11(
const SurfaceDescriptor& aDesc, ISurfaceAllocator* aDeallocator,
LayersBackend aBackend, TextureFlags aFlags) {

Просмотреть файл

@ -91,6 +91,8 @@ class D3D11TextureData final : public TextureData {
gfx::IntSize GetSize() const { return mSize; }
gfx::SurfaceFormat GetSurfaceFormat() const { return mFormat; }
TextureFlags GetTextureFlags() const override;
private:
D3D11TextureData(ID3D11Texture2D* aTexture, gfx::IntSize aSize,
gfx::SurfaceFormat aFormat, TextureAllocationFlags aFlags);
@ -159,9 +161,7 @@ class DXGIYCbCrTextureData : public TextureData {
bool UpdateFromSurface(gfx::SourceSurface*) override { return false; }
TextureFlags GetTextureFlags() const override {
return TextureFlags::DEALLOCATE_MAIN_THREAD;
}
TextureFlags GetTextureFlags() const override;
DXGIYCbCrTextureData* AsDXGIYCbCrTextureData() override { return this; }

Просмотреть файл

@ -829,7 +829,10 @@ void CompositorBridgeChild::HoldUntilCompositableRefReleasedIfNecessary(
return;
}
if (!(aClient->GetFlags() & TextureFlags::RECYCLE)) {
bool waitNotifyNotUsed =
aClient->GetFlags() & TextureFlags::RECYCLE ||
aClient->GetFlags() & TextureFlags::WAIT_HOST_USAGE_END;
if (!waitNotifyNotUsed) {
return;
}

Просмотреть файл

@ -135,11 +135,18 @@ void ImageBridgeChild::UseComponentAlphaTextures(
void ImageBridgeChild::HoldUntilCompositableRefReleasedIfNecessary(
TextureClient* aClient) {
// Wait ReleaseCompositableRef only when TextureFlags::RECYCLE is set on
// ImageBridge.
if (!aClient || !(aClient->GetFlags() & TextureFlags::RECYCLE)) {
if (!aClient) {
return;
}
// Wait ReleaseCompositableRef only when TextureFlags::RECYCLE or
// TextureFlags::WAIT_HOST_USAGE_END is set on ImageBridge.
bool waitNotifyNotUsed =
aClient->GetFlags() & TextureFlags::RECYCLE ||
aClient->GetFlags() & TextureFlags::WAIT_HOST_USAGE_END;
if (!waitNotifyNotUsed) {
return;
}
aClient->SetLastFwdTransactionId(GetFwdTransactionId());
mTexturesWaitingNotifyNotUsed.emplace(aClient->GetSerial(), aClient);
}
@ -627,6 +634,17 @@ void ImageBridgeChild::UpdateTextureFactoryIdentifier(
bool disablingWebRender =
GetCompositorBackendType() == LayersBackend::LAYERS_WR &&
aIdentifier.mParentBackend != LayersBackend::LAYERS_WR;
// Do not update TextureFactoryIdentifier if aIdentifier is going to disable
// WebRender, but gecko is still using WebRender. Since gecko uses different
// incompatible ImageHost and TextureHost between WebRender and non-WebRender.
//
// Even when WebRender is still in use, if non-accelerated widget is opened,
// aIdentifier disables WebRender at ImageBridgeChild.
if (disablingWebRender && gfxVars::UseWebRender()) {
return;
}
// D3DTexture might become obsolte. To prevent to use obsoleted D3DTexture,
// drop all ImageContainers' ImageClients.

Просмотреть файл

@ -4385,10 +4385,9 @@ static void minorGC(JSContext* cx, JSGCStatus status, void* data) {
}
}
// Process global, should really be runtime-local. Also, the final one of these
// is currently leaked, since they are only deleted when changing.
MajorGC* prevMajorGC = nullptr;
MinorGC* prevMinorGC = nullptr;
// Process global, should really be runtime-local.
static MajorGC majorGCInfo;
static MinorGC minorGCInfo;
} /* namespace gcCallback */
@ -4450,28 +4449,10 @@ static bool SetGCCallback(JSContext* cx, unsigned argc, Value* vp) {
}
}
if (gcCallback::prevMajorGC) {
JS_SetGCCallback(cx, nullptr, nullptr);
js_delete<gcCallback::MajorGC>(gcCallback::prevMajorGC);
gcCallback::prevMajorGC = nullptr;
}
if (gcCallback::prevMinorGC) {
JS_SetGCCallback(cx, nullptr, nullptr);
js_delete<gcCallback::MinorGC>(gcCallback::prevMinorGC);
gcCallback::prevMinorGC = nullptr;
}
if (StringEqualsAscii(action, "minorGC")) {
auto info = js_new<gcCallback::MinorGC>();
if (!info) {
ReportOutOfMemory(cx);
return false;
}
info->phases = phases;
info->active = true;
JS_SetGCCallback(cx, gcCallback::minorGC, info);
gcCallback::minorGCInfo.phases = phases;
gcCallback::minorGCInfo.active = true;
JS_SetGCCallback(cx, gcCallback::minorGC, &gcCallback::minorGCInfo);
} else if (StringEqualsAscii(action, "majorGC")) {
if (!JS_GetProperty(cx, opts, "depth", &v)) {
return false;
@ -4492,15 +4473,9 @@ static bool SetGCCallback(JSContext* cx, unsigned argc, Value* vp) {
return false;
}
auto info = js_new<gcCallback::MajorGC>();
if (!info) {
ReportOutOfMemory(cx);
return false;
}
info->phases = phases;
info->depth = depth;
JS_SetGCCallback(cx, gcCallback::majorGC, info);
gcCallback::majorGCInfo.phases = phases;
gcCallback::majorGCInfo.depth = depth;
JS_SetGCCallback(cx, gcCallback::majorGC, &gcCallback::majorGCInfo);
} else {
JS_ReportErrorASCII(cx, "Unknown GC callback action");
return false;

Просмотреть файл

@ -660,15 +660,29 @@ void GCMarker::forgetWeakMap(WeakMapBase* map, Zone* zone) {
// 'delegate' is no longer the delegate of 'key'.
void GCMarker::severWeakDelegate(JSObject* key, JSObject* delegate) {
JS::Zone* zone = delegate->zone();
auto p = zone->gcWeakKeys(delegate).get(delegate);
if (p) {
EraseIf(p->value, [this, key](const WeakMarkable& markable) -> bool {
if (markable.key != key) {
return false;
bool found = true;
while (found) {
found = false;
auto p = zone->gcWeakKeys(delegate).get(delegate);
if (!p) {
// The key may not even be in the weak key table, eg if it was already
// marked when marking the map.
break;
}
for (auto i = p->value.begin(); i != p->value.end(); i++) {
if (i->key == key) {
WeakMapBase* weakmap = i->weakmap;
p->value.erase(i);
// Warning: the key and delegate can be same-zone (even though they're
// different-compartment). This line will insert into the weak keys
// table and so can invalidate the pointer |p| on a rehash. So redo the
// lookup after each one of these.
weakmap->postSeverDelegate(this, key);
found = true;
break;
}
markable.weakmap->postSeverDelegate(this, key, key->compartment());
return true;
});
}
}
}

Просмотреть файл

@ -147,7 +147,7 @@ using PhaseTable = EnumeratedArray<Phase, Phase::LIMIT, PhaseInfo>;
using PhaseKindTable =
EnumeratedArray<PhaseKind, PhaseKind::LIMIT, PhaseKindInfo>;
#include "gc/StatsPhasesGenerated.cpp"
#include "gc/StatsPhasesGenerated.inc"
static double t(TimeDuration duration) { return duration.ToMilliseconds(); }

Просмотреть файл

@ -251,8 +251,7 @@ bool WeakMap<K, V>::markEntries(GCMarker* marker) {
}
template <class K, class V>
void WeakMap<K, V>::postSeverDelegate(GCMarker* marker, gc::Cell* key,
Compartment* comp) {
void WeakMap<K, V>::postSeverDelegate(GCMarker* marker, gc::Cell* key) {
if (IsMarked(markColor)) {
// We only stored the delegate, not the key, and we're severing the
// delegate from the key. So store the key.

Просмотреть файл

@ -132,8 +132,7 @@ class WeakMapBase : public mozilla::LinkedListElement<WeakMapBase> {
// An unmarked CCW with a delegate will add a weakKeys entry for the
// delegate. If the delegate is removed with NukeCrossCompartmentWrapper,
// then the (former) CCW needs to be added to weakKeys instead.
virtual void postSeverDelegate(GCMarker* marker, gc::Cell* key,
Compartment* comp) = 0;
virtual void postSeverDelegate(GCMarker* marker, gc::Cell* key) = 0;
virtual bool markEntries(GCMarker* marker) = 0;
@ -288,8 +287,7 @@ class WeakMap
gc::Cell* origKey) override;
// 'key' has lost its delegate, update our weak key state.
void postSeverDelegate(GCMarker* marker, gc::Cell* key,
Compartment* comp) override;
void postSeverDelegate(GCMarker* marker, gc::Cell* key) override;
void trace(JSTracer* trc) override;

Просмотреть файл

@ -17,10 +17,10 @@ include('../js-cxxflags.mozbuild')
# Generate GC statistics phase data.
GENERATED_FILES += ['StatsPhasesGenerated.cpp', 'StatsPhasesGenerated.h']
GENERATED_FILES += ['StatsPhasesGenerated.h', 'StatsPhasesGenerated.inc']
StatsPhasesGeneratedHeader = GENERATED_FILES['StatsPhasesGenerated.h']
StatsPhasesGeneratedHeader.script = 'GenerateStatsPhases.py:generateHeader'
StatsPhasesGeneratedCpp = GENERATED_FILES['StatsPhasesGenerated.cpp']
StatsPhasesGeneratedCpp = GENERATED_FILES['StatsPhasesGenerated.inc']
StatsPhasesGeneratedCpp.script = 'GenerateStatsPhases.py:generateCpp'
UNIFIED_SOURCES += [

Просмотреть файл

@ -171,6 +171,56 @@ function nukeMarking() {
if (this.enqueueMark)
runtest(nukeMarking);
// Similar to the above, but try to trigger a rehash of the weak keys table for
// a zone, which previously invalidated an iterator (bug 1556430).
function nukeMarking2() {
// Create a global in a different compartment, same zone, so the delegate and
// key can live in the same zone.
const g1 = newGlobal({sameZoneAs: this});
let vals = { maps: [], keys: [] };
for (const i of [,,,,,]) {
vals.maps.push(new WeakMap());
vals.keys.push(g1.eval("Object.create(null)"));
}
vals.val = Object.create(null);
for (const i in vals.maps) {
vals.maps[i].set(vals.keys[i], vals.val);
}
vals.val = null;
gc();
// Set up the sequence of marking events.
for (const map of vals.maps) {
enqueueMark(map);
}
enqueueMark("yield");
// We will nuke the key's delegate here.
for (const key of vals.keys) {
enqueueMark(key);
}
addMarkObservers([vals.keys[0]]);
enqueueMark("enter-weak-marking-mode");
vals = null;
// Okay, run through the GC now.
startgc(1000000);
assertEq(gcstate(), "Mark", "expected to yield after marking map");
print(getMarks()[0]);
const q = getMarkQueue();
// We should have marked the map and then yielded back here.
nukeCCW(q[q.length - 2]);
// Finish up the GC.
gcslice();
clearMarkQueue();
clearMarkObservers();
}
if (this.enqueueMark)
nukeMarking2();
function transplantMarking() {
const g1 = newGlobal({newCompartment: true});

Просмотреть файл

@ -13,13 +13,14 @@
/**
* Constant used to indicate an unconstrained size.
*
* NOTE: The constants defined in this file are semantically used as symbolic
* values, so user should not depend on the underlying numeric values. If
* new specific use cases arise, define a new constant here.
*/
#define NS_UNCONSTRAINEDSIZE NS_MAXSIZE
// NOTE: There are assumptions all over that these have the same value,
// namely NS_UNCONSTRAINEDSIZE.
#define NS_INTRINSICSIZE NS_UNCONSTRAINEDSIZE
#define NS_AUTOHEIGHT NS_UNCONSTRAINEDSIZE
// NS_AUTOOFFSET is assumed to have the same value as NS_UNCONSTRAINEDSIZE.
#define NS_AUTOOFFSET NS_UNCONSTRAINEDSIZE
// +1 is to avoid clamped huge margin values being processed as auto margins

Просмотреть файл

@ -7318,11 +7318,19 @@ nsIFrame* PresShell::EventHandler::MaybeFlushThrottledStyles(
return aFrameForPresShell;
}
PresShell* rootPresShell = mPresShell->GetRootPresShell();
if (NS_WARN_IF(!rootPresShell)) {
return nullptr;
}
Document* rootDocument = rootPresShell->GetDocument();
if (NS_WARN_IF(!rootDocument)) {
return nullptr;
}
AutoWeakFrame weakFrameForPresShell(aFrameForPresShell);
{ // scope for scriptBlocker.
nsAutoScriptBlocker scriptBlocker;
FlushThrottledStyles(mPresShell->GetRootPresShell()->GetDocument(),
nullptr);
FlushThrottledStyles(rootDocument, nullptr);
}
if (weakFrameForPresShell.IsAlive()) {

Просмотреть файл

@ -809,8 +809,8 @@ static bool RecomputePosition(nsIFrame* aFrame) {
parentReflowInput.mCBReflowInput = cbReflowInput.ptr();
}
NS_WARNING_ASSERTION(parentSize.ISize(parentWM) != NS_INTRINSICSIZE &&
parentSize.BSize(parentWM) != NS_INTRINSICSIZE,
NS_WARNING_ASSERTION(parentSize.ISize(parentWM) != NS_UNCONSTRAINEDSIZE &&
parentSize.BSize(parentWM) != NS_UNCONSTRAINEDSIZE,
"parentSize should be valid");
parentReflowInput.SetComputedISize(std::max(parentSize.ISize(parentWM), 0));
parentReflowInput.SetComputedBSize(std::max(parentSize.BSize(parentWM), 0));
@ -820,7 +820,7 @@ static bool RecomputePosition(nsIFrame* aFrame) {
parentReflowInput.ComputedPhysicalBorderPadding() =
parentFrame->GetUsedBorderAndPadding();
LogicalSize availSize = parentSize.ConvertTo(frameWM, parentWM);
availSize.BSize(frameWM) = NS_INTRINSICSIZE;
availSize.BSize(frameWM) = NS_UNCONSTRAINEDSIZE;
ViewportFrame* viewport = do_QueryFrame(parentFrame);
nsSize cbSize =
@ -837,19 +837,19 @@ static bool RecomputePosition(nsIFrame* aFrame) {
nsSize computedSize(reflowInput.ComputedWidth(),
reflowInput.ComputedHeight());
computedSize.width += reflowInput.ComputedPhysicalBorderPadding().LeftRight();
if (computedSize.height != NS_INTRINSICSIZE) {
if (computedSize.height != NS_UNCONSTRAINEDSIZE) {
computedSize.height +=
reflowInput.ComputedPhysicalBorderPadding().TopBottom();
}
nsSize size = aFrame->GetSize();
// The RecomputePosition hint is not used if any offset changed between auto
// and non-auto. If computedSize.height == NS_INTRINSICSIZE then the new
// and non-auto. If computedSize.height == NS_UNCONSTRAINEDSIZE then the new
// element height will be its intrinsic height, and since 'top' and 'bottom''s
// auto-ness hasn't changed, the old height must also be its intrinsic
// height, which we can assume hasn't changed (or reflow would have
// been triggered).
if (computedSize.width == size.width &&
(computedSize.height == NS_INTRINSICSIZE ||
(computedSize.height == NS_UNCONSTRAINEDSIZE ||
computedSize.height == size.height)) {
// If we're solving for 'left' or 'top', then compute it here, in order to
// match the reflow code path.

Просмотреть файл

@ -5675,14 +5675,15 @@ nscoord nsLayoutUtils::MinSizeContributionForAxis(
nscoord nsLayoutUtils::ComputeBSizeDependentValue(
nscoord aContainingBlockBSize, const LengthPercentageOrAuto& aCoord) {
// XXXldb Some callers explicitly check aContainingBlockBSize
// against NS_AUTOHEIGHT *and* unit against eStyleUnit_Percent or
// against NS_UNCONSTRAINEDSIZE *and* unit against eStyleUnit_Percent or
// calc()s containing percents before calling this function.
// However, it would be much more likely to catch problems without
// the unit conditions.
// XXXldb Many callers pass a non-'auto' containing block height when
// according to CSS2.1 they should be passing 'auto'.
MOZ_ASSERT(NS_AUTOHEIGHT != aContainingBlockBSize || !aCoord.HasPercent(),
"unexpected containing block block-size");
MOZ_ASSERT(
NS_UNCONSTRAINEDSIZE != aContainingBlockBSize || !aCoord.HasPercent(),
"unexpected containing block block-size");
if (aCoord.IsAuto()) {
return 0;

Просмотреть файл

@ -1230,7 +1230,7 @@ void nsComboboxDisplayFrame::Reflow(nsPresContext* aPresContext,
MOZ_ASSERT(aStatus.IsEmpty(), "Caller should pass a fresh reflow status!");
ReflowInput state(aReflowInput);
if (state.ComputedBSize() == NS_INTRINSICSIZE) {
if (state.ComputedBSize() == NS_UNCONSTRAINEDSIZE) {
float inflation = nsLayoutUtils::FontSizeInflationFor(mComboBox);
// We intentionally use the combobox frame's style here, which has
// the 'line-height' specified by the author, if any.

Просмотреть файл

@ -105,7 +105,7 @@ void nsDateTimeControlFrame::Reflow(nsPresContext* aPresContext,
aReflowInput.ComputedLogicalBorderPadding().IStartEnd(myWM);
nscoord borderBoxBSize;
if (contentBoxBSize != NS_INTRINSICSIZE) {
if (contentBoxBSize != NS_UNCONSTRAINEDSIZE) {
borderBoxBSize =
contentBoxBSize +
aReflowInput.ComputedLogicalBorderPadding().BStartEnd(myWM);
@ -113,7 +113,7 @@ void nsDateTimeControlFrame::Reflow(nsPresContext* aPresContext,
nsIFrame* inputAreaFrame = mFrames.FirstChild();
if (!inputAreaFrame) { // display:none?
if (contentBoxBSize == NS_INTRINSICSIZE) {
if (contentBoxBSize == NS_UNCONSTRAINEDSIZE) {
contentBoxBSize = 0;
borderBoxBSize =
aReflowInput.ComputedLogicalBorderPadding().BStartEnd(myWM);
@ -154,7 +154,7 @@ void nsDateTimeControlFrame::Reflow(nsPresContext* aPresContext,
nscoord childMarginBoxBSize =
childDesiredSize.BSize(myWM) + childMargin.BStartEnd(myWM);
if (contentBoxBSize == NS_INTRINSICSIZE) {
if (contentBoxBSize == NS_UNCONSTRAINEDSIZE) {
// We are intrinsically sized -- we should shrinkwrap the input area's
// block-size:
contentBoxBSize = childMarginBoxBSize;

Просмотреть файл

@ -387,7 +387,7 @@ void nsFieldSetFrame::Reflow(nsPresContext* aPresContext,
DO_GLOBAL_REFLOW_COUNT("nsFieldSetFrame");
DISPLAY_REFLOW(aPresContext, this, aReflowInput, aDesiredSize, aStatus);
MOZ_ASSERT(aStatus.IsEmpty(), "Caller should pass a fresh reflow status!");
NS_WARNING_ASSERTION(aReflowInput.ComputedISize() != NS_INTRINSICSIZE,
NS_WARNING_ASSERTION(aReflowInput.ComputedISize() != NS_UNCONSTRAINEDSIZE,
"Should have a precomputed inline-size!");
nsOverflowAreas ocBounds;

Просмотреть файл

@ -205,7 +205,7 @@ void nsHTMLButtonControlFrame::ReflowButtonContents(
const ReflowInput& aButtonReflowInput, nsIFrame* aFirstKid) {
WritingMode wm = GetWritingMode();
LogicalSize availSize = aButtonReflowInput.ComputedSize(wm);
availSize.BSize(wm) = NS_INTRINSICSIZE;
availSize.BSize(wm) = NS_UNCONSTRAINEDSIZE;
// shorthand for a value we need to use in a bunch of places
const LogicalMargin& clbp = aButtonReflowInput.ComputedLogicalBorderPadding();
@ -243,7 +243,7 @@ void nsHTMLButtonControlFrame::ReflowButtonContents(
// Compute the button's content-box size:
LogicalSize buttonContentBox(wm);
if (aButtonReflowInput.ComputedBSize() != NS_INTRINSICSIZE) {
if (aButtonReflowInput.ComputedBSize() != NS_UNCONSTRAINEDSIZE) {
// Button has a fixed block-size -- that's its content-box bSize.
buttonContentBox.BSize(wm) = aButtonReflowInput.ComputedBSize();
} else if (aButtonReflowInput.mStyleDisplay->IsContainSize()) {
@ -265,7 +265,7 @@ void nsHTMLButtonControlFrame::ReflowButtonContents(
buttonContentBox.BSize(wm), aButtonReflowInput.ComputedMinBSize(),
aButtonReflowInput.ComputedMaxBSize());
}
if (aButtonReflowInput.ComputedISize() != NS_INTRINSICSIZE) {
if (aButtonReflowInput.ComputedISize() != NS_UNCONSTRAINEDSIZE) {
buttonContentBox.ISize(wm) = aButtonReflowInput.ComputedISize();
} else if (aButtonReflowInput.mStyleDisplay->IsContainSize()) {
buttonContentBox.ISize(wm) = aButtonReflowInput.ComputedMinISize();

Просмотреть файл

@ -129,7 +129,7 @@ void nsNumberControlFrame::Reflow(nsPresContext* aPresContext,
aReflowInput.ComputedLogicalBorderPadding().IStartEnd(myWM);
nscoord borderBoxBSize;
if (contentBoxBSize != NS_INTRINSICSIZE) {
if (contentBoxBSize != NS_UNCONSTRAINEDSIZE) {
borderBoxBSize =
contentBoxBSize +
aReflowInput.ComputedLogicalBorderPadding().BStartEnd(myWM);
@ -138,7 +138,7 @@ void nsNumberControlFrame::Reflow(nsPresContext* aPresContext,
nsIFrame* outerWrapperFrame = mOuterWrapper->GetPrimaryFrame();
if (!outerWrapperFrame) { // display:none?
if (contentBoxBSize == NS_INTRINSICSIZE) {
if (contentBoxBSize == NS_UNCONSTRAINEDSIZE) {
contentBoxBSize = 0;
borderBoxBSize =
aReflowInput.ComputedLogicalBorderPadding().BStartEnd(myWM);
@ -181,7 +181,7 @@ void nsNumberControlFrame::Reflow(nsPresContext* aPresContext,
nscoord wrappersMarginBoxBSize =
wrappersDesiredSize.BSize(myWM) + wrapperMargin.BStartEnd(myWM);
if (contentBoxBSize == NS_INTRINSICSIZE) {
if (contentBoxBSize == NS_UNCONSTRAINEDSIZE) {
// We are intrinsically sized -- we should shrinkwrap the outer wrapper's
// block-size:
contentBoxBSize = wrappersMarginBoxBSize;

Просмотреть файл

@ -295,7 +295,7 @@ void nsRangeFrame::Reflow(nsPresContext* aPresContext,
WritingMode wm = aReflowInput.GetWritingMode();
nscoord computedBSize = aReflowInput.ComputedBSize();
if (computedBSize == NS_AUTOHEIGHT) {
if (computedBSize == NS_UNCONSTRAINEDSIZE) {
computedBSize = 0;
}
LogicalSize finalSize(
@ -339,7 +339,7 @@ void nsRangeFrame::ReflowAnonymousContent(nsPresContext* aPresContext,
// for our anonymous content:
nscoord rangeFrameContentBoxWidth = aReflowInput.ComputedWidth();
nscoord rangeFrameContentBoxHeight = aReflowInput.ComputedHeight();
if (rangeFrameContentBoxHeight == NS_AUTOHEIGHT) {
if (rangeFrameContentBoxHeight == NS_UNCONSTRAINEDSIZE) {
rangeFrameContentBoxHeight = 0;
}

Просмотреть файл

@ -164,8 +164,9 @@ LogicalSize nsTextControlFrame::CalcIntrinsicSize(
RefPtr<nsFontMetrics> fontMet =
nsLayoutUtils::GetFontMetricsForFrame(this, aFontSizeInflation);
lineHeight = ReflowInput::CalcLineHeight(GetContent(), Style(), PresContext(),
NS_AUTOHEIGHT, aFontSizeInflation);
lineHeight =
ReflowInput::CalcLineHeight(GetContent(), Style(), PresContext(),
NS_UNCONSTRAINEDSIZE, aFontSizeInflation);
charWidth = fontMet->AveCharWidth();
charMaxAdvance = fontMet->MaxAdvance();
@ -586,8 +587,9 @@ void nsTextControlFrame::Reflow(nsPresContext* aPresContext,
nscoord lineHeight = aReflowInput.ComputedBSize();
float inflation = nsLayoutUtils::FontSizeInflationFor(this);
if (!IsSingleLineTextControl()) {
lineHeight = ReflowInput::CalcLineHeight(
GetContent(), Style(), PresContext(), NS_AUTOHEIGHT, inflation);
lineHeight =
ReflowInput::CalcLineHeight(GetContent(), Style(), PresContext(),
NS_UNCONSTRAINEDSIZE, inflation);
}
RefPtr<nsFontMetrics> fontMet =
nsLayoutUtils::GetFontMetricsForFrame(this, inflation);

Просмотреть файл

@ -150,7 +150,7 @@ BlockReflowInput::BlockReflowInput(const ReflowInput& aReflowInput,
}
nscoord BlockReflowInput::ConsumedBSize() {
if (mConsumedBSize == NS_INTRINSICSIZE) {
if (mConsumedBSize == NS_UNCONSTRAINEDSIZE) {
mConsumedBSize = mBlock->ConsumedBSize(mReflowInput.GetWritingMode());
}

Просмотреть файл

@ -112,7 +112,7 @@ class BlockReflowInput {
BlockReflowInput(const ReflowInput& aReflowInput, nsPresContext* aPresContext,
nsBlockFrame* aFrame, bool aBStartMarginRoot,
bool aBEndMarginRoot, bool aBlockNeedsFloatManager,
nscoord aConsumedBSize = NS_INTRINSICSIZE);
nscoord aConsumedBSize = NS_UNCONSTRAINEDSIZE);
/**
* Get the available reflow space (the area not occupied by floats)

Просмотреть файл

@ -502,7 +502,7 @@ static bool IsQuirkContainingBlockHeight(const ReflowInput* rs,
LayoutFrameType::Scroll == aFrameType) {
// Note: This next condition could change due to a style change,
// but that would cause a style reflow anyway, which means we're ok.
if (NS_AUTOHEIGHT == rs->ComputedHeight()) {
if (NS_UNCONSTRAINEDSIZE == rs->ComputedHeight()) {
if (!rs->mFrame->IsAbsolutelyPositioned(rs->mStyleDisplay)) {
return false;
}
@ -671,10 +671,10 @@ void ReflowInput::InitResizeFlags(nsPresContext* aPresContext,
// ComputedBSize() and a dirty subtree, since that might require us to
// change BSize due to kids having been added or removed.
SetBResize(mCBReflowInput->IsBResizeForWM(wm));
if (ComputedBSize() == NS_AUTOHEIGHT) {
if (ComputedBSize() == NS_UNCONSTRAINEDSIZE) {
SetBResize(IsBResize() || NS_SUBTREE_DIRTY(mFrame));
}
} else if (ComputedBSize() == NS_AUTOHEIGHT) {
} else if (ComputedBSize() == NS_UNCONSTRAINEDSIZE) {
if (eCompatibility_NavQuirks == aPresContext->CompatibilityMode() &&
mCBReflowInput) {
SetBResize(mCBReflowInput->IsBResizeForWM(wm));
@ -720,7 +720,7 @@ void ReflowInput::InitResizeFlags(nsPresContext* aPresContext,
// Set NS_FRAME_CONTAINS_RELATIVE_BSIZE if it's needed.
// It would be nice to check that |ComputedBSize != NS_AUTOHEIGHT|
// It would be nice to check that |ComputedBSize != NS_UNCONSTRAINEDSIZE|
// &&ed with the percentage bsize check. However, this doesn't get
// along with table special bsize reflows, since a special bsize
// reflow (a quirk that makes such percentage height work on children
@ -1031,7 +1031,7 @@ void ReflowInput::ComputeRelativeOffsets(WritingMode aWM, nsIFrame* aFrame,
// Check for percentage based values and a containing block block-size
// that depends on the content block-size. Treat them like 'auto'
if (NS_AUTOHEIGHT == aCBSize.BSize(aWM)) {
if (NS_UNCONSTRAINEDSIZE == aCBSize.BSize(aWM)) {
if (position->OffsetHasPercent(blockStart)) {
blockStartIsAuto = true;
}
@ -1607,7 +1607,7 @@ void ReflowInput::InitAbsoluteConstraints(nsPresContext* aPresContext,
LayoutFrameType aFrameType) {
WritingMode wm = GetWritingMode();
WritingMode cbwm = aCBReflowInput->GetWritingMode();
NS_WARNING_ASSERTION(aCBSize.BSize(cbwm) != NS_AUTOHEIGHT,
NS_WARNING_ASSERTION(aCBSize.BSize(cbwm) != NS_UNCONSTRAINEDSIZE,
"containing block bsize must be constrained");
NS_ASSERTION(aFrameType != LayoutFrameType::Table,
@ -2011,10 +2011,10 @@ static nscoord GetBlockMarginBorderPadding(const ReflowInput* aReflowInput) {
/* Get the height based on the viewport of the containing block specified
* in aReflowInput when the containing block has mComputedHeight ==
* NS_AUTOHEIGHT This will walk up the chain of containing blocks looking for a
* computed height until it finds the canvas frame, or it encounters a frame
* that is not a block, area, or scroll frame. This handles compatibility with
* IE (see bug 85016 and bug 219693)
* NS_UNCONSTRAINEDSIZE This will walk up the chain of containing blocks looking
* for a computed height until it finds the canvas frame, or it encounters a
* frame that is not a block, area, or scroll frame. This handles compatibility
* with IE (see bug 85016 and bug 219693)
*
* When we encounter scrolledContent block frames, we skip over them,
* since they are guaranteed to not be useful for computing the containing
@ -2027,10 +2027,10 @@ static nscoord CalcQuirkContainingBlockHeight(
const ReflowInput* firstAncestorRI = nullptr; // a candidate for html frame
const ReflowInput* secondAncestorRI = nullptr; // a candidate for body frame
// initialize the default to NS_AUTOHEIGHT as this is the containings block
// computed height when this function is called. It is possible that we
// initialize the default to NS_UNCONSTRAINEDSIZE as this is the containings
// block computed height when this function is called. It is possible that we
// don't alter this height especially if we are restricted to one level
nscoord result = NS_AUTOHEIGHT;
nscoord result = NS_UNCONSTRAINEDSIZE;
const ReflowInput* ri = aCBReflowInput;
for (; ri; ri = ri->mParentReflowInput) {
@ -2050,7 +2050,7 @@ static nscoord CalcQuirkContainingBlockHeight(
// go any further (see bug 221784). The behavior we want here is: 1) If
// not auto-height, use this as the percentage base. 2) If auto-height,
// keep looking, unless the frame is positioned.
if (NS_AUTOHEIGHT == ri->ComputedHeight()) {
if (NS_UNCONSTRAINEDSIZE == ri->ComputedHeight()) {
if (ri->mFrame->IsAbsolutelyPositioned(ri->mStyleDisplay)) {
break;
} else {
@ -2073,7 +2073,7 @@ static nscoord CalcQuirkContainingBlockHeight(
result = (LayoutFrameType::PageContent == frameType) ? ri->AvailableHeight()
: ri->ComputedHeight();
// if unconstrained - don't sutract borders - would result in huge height
if (NS_AUTOHEIGHT == result) return result;
if (NS_UNCONSTRAINEDSIZE == result) return result;
// if we got to the canvas or page content frame, then subtract out
// margin/border/padding for the BODY and HTML elements
@ -2166,7 +2166,7 @@ LogicalSize ReflowInput::ComputeContainingBlockRectangle(
// parent with a non-auto height if the element has a percent height
// Note: We don't emulate this quirk for percents in calc() or in
// vertical writing modes.
if (!wm.IsVertical() && NS_AUTOHEIGHT == cbSize.BSize(wm)) {
if (!wm.IsVertical() && NS_UNCONSTRAINEDSIZE == cbSize.BSize(wm)) {
if (eCompatibility_NavQuirks == aPresContext->CompatibilityMode() &&
(IsQuirky(mStylePosition->mHeight) ||
(mFrame->IsTableWrapperFrame() &&
@ -2258,7 +2258,7 @@ void ReflowInput::InitConstraints(
// See if the containing block height is based on the size of its
// content
if (NS_AUTOHEIGHT == cbSize.BSize(wm)) {
if (NS_UNCONSTRAINEDSIZE == cbSize.BSize(wm)) {
// See if the containing block is a cell frame which needs
// to use the mComputedHeight of the cell instead of what the cell block
// passed in.
@ -2287,7 +2287,7 @@ void ReflowInput::InitConstraints(
// Check for a percentage based block size and a containing block
// block size that depends on the content block size
if (blockSize.HasPercent()) {
if (NS_AUTOHEIGHT == cbSize.BSize(wm)) {
if (NS_UNCONSTRAINEDSIZE == cbSize.BSize(wm)) {
// this if clause enables %-blockSize on replaced inline frames,
// such as images. See bug 54119. The else clause "blockSizeUnit =
// eStyleUnit_Auto;" used to be called exclusively.
@ -2301,7 +2301,7 @@ void ReflowInput::InitConstraints(
eCompatibility_NavQuirks == aPresContext->CompatibilityMode()) {
if (!IsTableCell(cbri->mFrame->Type())) {
cbSize.BSize(wm) = CalcQuirkContainingBlockHeight(cbri);
if (cbSize.BSize(wm) == NS_AUTOHEIGHT) {
if (cbSize.BSize(wm) == NS_UNCONSTRAINEDSIZE) {
isAutoBSize = true;
}
} else {
@ -2313,7 +2313,7 @@ void ReflowInput::InitConstraints(
// as per CSS2 spec.
else {
nscoord computedBSize = cbri->ComputedSize(wm).BSize(wm);
if (NS_AUTOHEIGHT != computedBSize) {
if (NS_UNCONSTRAINEDSIZE != computedBSize) {
cbSize.BSize(wm) = computedBSize;
} else {
isAutoBSize = true;
@ -2388,7 +2388,7 @@ void ReflowInput::InitConstraints(
// calc() with both percentages and lengths acts like 'auto' on internal
// table elements
if (isAutoBSize || blockSize.HasLengthAndPercentage()) {
ComputedBSize() = NS_AUTOHEIGHT;
ComputedBSize() = NS_UNCONSTRAINEDSIZE;
} else {
ComputedBSize() =
ComputeBSizeValue(cbSize.BSize(wm), mStylePosition->mBoxSizing,
@ -2839,7 +2839,7 @@ static inline nscoord ComputeLineHeight(ComputedStyle* aComputedStyle,
}
MOZ_ASSERT(lineHeight.IsNormal() || lineHeight.IsMozBlockHeight());
if (lineHeight.IsMozBlockHeight() && aBlockBSize != NS_AUTOHEIGHT) {
if (lineHeight.IsMozBlockHeight() && aBlockBSize != NS_UNCONSTRAINEDSIZE) {
return aBlockBSize;
}
@ -2849,10 +2849,10 @@ static inline nscoord ComputeLineHeight(ComputedStyle* aComputedStyle,
}
nscoord ReflowInput::CalcLineHeight() const {
nscoord blockBSize =
nsLayoutUtils::IsNonWrapperBlock(mFrame)
? ComputedBSize()
: (mCBReflowInput ? mCBReflowInput->ComputedBSize() : NS_AUTOHEIGHT);
nscoord blockBSize = nsLayoutUtils::IsNonWrapperBlock(mFrame)
? ComputedBSize()
: (mCBReflowInput ? mCBReflowInput->ComputedBSize()
: NS_UNCONSTRAINEDSIZE);
return CalcLineHeight(mFrame->GetContent(), mFrame->Style(),
mFrame->PresContext(), blockBSize,

Просмотреть файл

@ -599,8 +599,8 @@ struct ReflowInput : public SizeComputationInput {
// The computed width specifies the frame's content area width, and it does
// not apply to inline non-replaced elements
//
// For replaced inline frames, a value of NS_INTRINSICSIZE means you should
// use your intrinsic width as the computed width
// For replaced inline frames, a value of NS_UNCONSTRAINEDSIZE means you
// should use your intrinsic width as the computed width
//
// For block-level frames, the computed width is based on the width of the
// containing block, the margin/border/padding areas, and the min/max width.
@ -610,15 +610,15 @@ struct ReflowInput : public SizeComputationInput {
// The computed height specifies the frame's content height, and it does
// not apply to inline non-replaced elements
//
// For replaced inline frames, a value of NS_INTRINSICSIZE means you should
// use your intrinsic height as the computed height
// For replaced inline frames, a value of NS_UNCONSTRAINEDSIZE means you
// should use your intrinsic height as the computed height
//
// For non-replaced block-level frames in the flow and floated, a value of
// NS_AUTOHEIGHT means you choose a height to shrink wrap around the normal
// flow child frames. The height must be within the limit of the min/max
// height if there is such a limit
// NS_UNCONSTRAINEDSIZE means you choose a height to shrink wrap around the
// normal flow child frames. The height must be within the limit of the
// min/max height if there is such a limit
//
// For replaced block-level frames, a value of NS_INTRINSICSIZE
// For replaced block-level frames, a value of NS_UNCONSTRAINEDSIZE
// means you use your intrinsic height as the computed height
MOZ_INIT_OUTSIDE_CTOR
nscoord mComputedHeight;
@ -803,8 +803,8 @@ struct ReflowInput : public SizeComputationInput {
* @param aBlockBSize The computed block size of the content rect of the block
* that the line should fill.
* Only used with line-height:-moz-block-height.
* NS_AUTOHEIGHT results in a normal line-height for
* line-height:-moz-block-height.
* NS_UNCONSTRAINEDSIZE results in a normal line-height
* for line-height:-moz-block-height.
* @param aFontSizeInflation The result of the appropriate
* nsLayoutUtils::FontSizeInflationFor call,
* or 1.0 if during intrinsic size

Просмотреть файл

@ -1226,7 +1226,7 @@ void nsBlockFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
// If we have non-auto block size, we're clipping our kids and we fit,
// make sure our kids fit too.
if (aReflowInput.AvailableBSize() != NS_UNCONSTRAINEDSIZE &&
aReflowInput.ComputedBSize() != NS_AUTOHEIGHT &&
aReflowInput.ComputedBSize() != NS_UNCONSTRAINEDSIZE &&
ShouldApplyOverflowClipping(this, aReflowInput.mStyleDisplay)) {
LogicalMargin blockDirExtras = aReflowInput.ComputedLogicalBorderPadding();
if (GetLogicalSkipSides().BStart()) {

Просмотреть файл

@ -114,7 +114,7 @@ NS_IMPL_FRAMEARENA_HELPERS(nsColumnSetFrame)
nsColumnSetFrame::nsColumnSetFrame(ComputedStyle* aStyle,
nsPresContext* aPresContext)
: nsContainerFrame(aStyle, aPresContext, kClassID),
mLastBalanceBSize(NS_INTRINSICSIZE) {}
mLastBalanceBSize(NS_UNCONSTRAINEDSIZE) {}
void nsColumnSetFrame::ForEachColumnRule(
const std::function<void(const nsRect& lineRect)>& aSetLineRect,
@ -253,8 +253,8 @@ void nsColumnSetFrame::CreateBorderRenderers(
}
static nscoord GetAvailableContentISize(const ReflowInput& aReflowInput) {
if (aReflowInput.AvailableISize() == NS_INTRINSICSIZE) {
return NS_INTRINSICSIZE;
if (aReflowInput.AvailableISize() == NS_UNCONSTRAINEDSIZE) {
return NS_UNCONSTRAINEDSIZE;
}
WritingMode wm = aReflowInput.GetWritingMode();
@ -265,8 +265,8 @@ static nscoord GetAvailableContentISize(const ReflowInput& aReflowInput) {
nscoord nsColumnSetFrame::GetAvailableContentBSize(
const ReflowInput& aReflowInput) const {
if (aReflowInput.AvailableBSize() == NS_INTRINSICSIZE) {
return NS_INTRINSICSIZE;
if (aReflowInput.AvailableBSize() == NS_UNCONSTRAINEDSIZE) {
return NS_UNCONSTRAINEDSIZE;
}
WritingMode wm = aReflowInput.GetWritingMode();
@ -294,7 +294,7 @@ nsColumnSetFrame::ReflowConfig nsColumnSetFrame::ChooseColumnStrategy(
const nsStyleColumn* colStyle = StyleColumn();
nscoord availContentISize = GetAvailableContentISize(aReflowInput);
if (aReflowInput.ComputedISize() != NS_INTRINSICSIZE) {
if (aReflowInput.ComputedISize() != NS_UNCONSTRAINEDSIZE) {
availContentISize = aReflowInput.ComputedISize();
}
@ -307,13 +307,13 @@ nsColumnSetFrame::ReflowConfig nsColumnSetFrame::ChooseColumnStrategy(
GetEffectiveComputedBSize(aReflowInput, consumedBSize);
nscoord colBSize = GetAvailableContentBSize(aReflowInput);
if (aReflowInput.ComputedBSize() != NS_INTRINSICSIZE) {
if (aReflowInput.ComputedBSize() != NS_UNCONSTRAINEDSIZE) {
colBSize = aReflowInput.ComputedBSize();
} else if (aReflowInput.ComputedMaxBSize() != NS_INTRINSICSIZE) {
} else if (aReflowInput.ComputedMaxBSize() != NS_UNCONSTRAINEDSIZE) {
colBSize = std::min(colBSize, aReflowInput.ComputedMaxBSize());
} else if (StaticPrefs::layout_css_column_span_enabled() &&
aReflowInput.mCBReflowInput->ComputedMaxBSize() !=
NS_INTRINSICSIZE) {
NS_UNCONSTRAINEDSIZE) {
colBSize =
std::min(colBSize, aReflowInput.mCBReflowInput->ComputedMaxBSize());
}
@ -345,7 +345,7 @@ nsColumnSetFrame::ReflowConfig nsColumnSetFrame::ChooseColumnStrategy(
// available width. Compute max number of columns that fit in
// availContentISize, satisfying colGap*(maxColumns - 1) +
// colISize*maxColumns <= availContentISize
if (availContentISize != NS_INTRINSICSIZE && colGap + colISize > 0 &&
if (availContentISize != NS_UNCONSTRAINEDSIZE && colGap + colISize > 0 &&
numColumns > 0) {
// This expression uses truncated rounding, which is what we
// want
@ -354,11 +354,11 @@ nsColumnSetFrame::ReflowConfig nsColumnSetFrame::ChooseColumnStrategy(
(availContentISize + colGap) / (colGap + colISize));
numColumns = std::max(1, std::min(numColumns, maxColumns));
}
} else if (numColumns > 0 && availContentISize != NS_INTRINSICSIZE) {
} else if (numColumns > 0 && availContentISize != NS_UNCONSTRAINEDSIZE) {
nscoord iSizeMinusGaps = availContentISize - colGap * (numColumns - 1);
colISize = iSizeMinusGaps / numColumns;
} else {
colISize = NS_INTRINSICSIZE;
colISize = NS_UNCONSTRAINEDSIZE;
}
// Take care of the situation where there's only one column but it's
// still too wide
@ -366,7 +366,8 @@ nsColumnSetFrame::ReflowConfig nsColumnSetFrame::ChooseColumnStrategy(
nscoord expectedISizeLeftOver = 0;
if (colISize != NS_INTRINSICSIZE && availContentISize != NS_INTRINSICSIZE) {
if (colISize != NS_UNCONSTRAINEDSIZE &&
availContentISize != NS_UNCONSTRAINEDSIZE) {
// distribute leftover space
// First, determine how many columns will be showing if the column
@ -431,7 +432,7 @@ nsColumnSetFrame::ReflowConfig nsColumnSetFrame::ChooseColumnStrategy(
config.mColGap = colGap;
config.mColMaxBSize = colBSize;
config.mIsBalancing = isBalancing;
config.mKnownFeasibleBSize = NS_INTRINSICSIZE;
config.mKnownFeasibleBSize = NS_UNCONSTRAINEDSIZE;
config.mKnownInfeasibleBSize = 0;
config.mComputedBSize = computedBSize;
config.mConsumedBSize = consumedBSize;
@ -613,10 +614,10 @@ nsColumnSetFrame::ColumnBalanceData nsColumnSetFrame::ReflowChildren(
// confine it to the legacy horizontal-rl case
if (!wm.IsVertical() && isRTL) {
nscoord availISize = aReflowInput.AvailableISize();
if (aReflowInput.ComputedISize() != NS_INTRINSICSIZE) {
if (aReflowInput.ComputedISize() != NS_UNCONSTRAINEDSIZE) {
availISize = aReflowInput.ComputedISize();
}
if (availISize != NS_INTRINSICSIZE) {
if (availISize != NS_UNCONSTRAINEDSIZE) {
childOrigin.I(wm) =
containerSize.width - borderPadding.Left(wm) - availISize;
@ -915,8 +916,8 @@ nsColumnSetFrame::ColumnBalanceData nsColumnSetFrame::ReflowChildren(
mLastFrameStatus = aStatus;
// Apply computed and min/max values
if (aConfig.mComputedBSize != NS_INTRINSICSIZE) {
if (aReflowInput.AvailableBSize() != NS_INTRINSICSIZE) {
if (aConfig.mComputedBSize != NS_UNCONSTRAINEDSIZE) {
if (aReflowInput.AvailableBSize() != NS_UNCONSTRAINEDSIZE) {
contentSize.BSize(wm) =
std::min(contentSize.BSize(wm), aConfig.mComputedBSize);
} else {
@ -936,7 +937,7 @@ nsColumnSetFrame::ColumnBalanceData nsColumnSetFrame::ReflowChildren(
contentSize.BSize(wm) = aReflowInput.ApplyMinMaxBSize(
contentSize.BSize(wm), aConfig.mConsumedBSize);
}
if (aReflowInput.ComputedISize() != NS_INTRINSICSIZE) {
if (aReflowInput.ComputedISize() != NS_UNCONSTRAINEDSIZE) {
contentSize.ISize(wm) = aReflowInput.ComputedISize();
} else {
contentSize.ISize(wm) =
@ -1090,7 +1091,7 @@ void nsColumnSetFrame::FindBestBalanceBSize(const ReflowInput& aReflowInput,
// Sanitize it
nextGuess = clamped(nextGuess, aConfig.mKnownInfeasibleBSize + 1,
aConfig.mKnownFeasibleBSize - 1);
} else if (aConfig.mKnownFeasibleBSize == NS_INTRINSICSIZE) {
} else if (aConfig.mKnownFeasibleBSize == NS_UNCONSTRAINEDSIZE) {
// This can happen when we had a next-in-flow so we didn't
// want to do an unbounded block-size measuring step. Let's just increase
// from the infeasible block-size by some reasonable amount.
@ -1157,7 +1158,7 @@ void nsColumnSetFrame::Reflow(nsPresContext* aPresContext,
->IsColumnContainerStyle());
// Our children depend on our block-size if we have a fixed block-size.
if (aReflowInput.ComputedBSize() != NS_AUTOHEIGHT) {
if (aReflowInput.ComputedBSize() != NS_UNCONSTRAINEDSIZE) {
AddStateBits(NS_FRAME_CONTAINS_RELATIVE_BSIZE);
} else {
RemoveStateBits(NS_FRAME_CONTAINS_RELATIVE_BSIZE);

Просмотреть файл

@ -91,19 +91,19 @@ class nsColumnSetFrame final : public nsContainerFrame {
int32_t mBalanceColCount = INT32_MAX;
// The inline-size of each individual column.
nscoord mColISize = NS_INTRINSICSIZE;
nscoord mColISize = NS_UNCONSTRAINEDSIZE;
// The amount of inline-size that is expected to be left over after all the
// columns and column gaps are laid out.
nscoord mExpectedISizeLeftOver = 0;
// The width (inline-size) of each column gap.
nscoord mColGap = NS_INTRINSICSIZE;
nscoord mColGap = NS_UNCONSTRAINEDSIZE;
// The maximum bSize of any individual column during a reflow iteration.
// This parameter is set during each iteration of the binary search for
// the best column block-size.
nscoord mColMaxBSize = NS_INTRINSICSIZE;
nscoord mColMaxBSize = NS_UNCONSTRAINEDSIZE;
// A boolean controlling whether or not we are balancing. This should be
// equivalent to mBalanceColCount != INT32_MAX.
@ -111,14 +111,14 @@ class nsColumnSetFrame final : public nsContainerFrame {
// The last known column block-size that was 'feasible'. A column bSize is
// feasible if all child content fits within the specified bSize.
nscoord mKnownFeasibleBSize = NS_INTRINSICSIZE;
nscoord mKnownFeasibleBSize = NS_UNCONSTRAINEDSIZE;
// The last known block-size that was 'infeasible'. A column bSize is
// infeasible if not all child content fits within the specified bSize.
nscoord mKnownInfeasibleBSize = 0;
// block-size of the column set frame
nscoord mComputedBSize = NS_INTRINSICSIZE;
nscoord mComputedBSize = NS_UNCONSTRAINEDSIZE;
// The block-size "consumed" by previous-in-flows.
// The computed block-size should be equal to the block-size of the element

Просмотреть файл

@ -628,10 +628,10 @@ void nsContainerFrame::SetSizeConstraints(nsPresContext* aPresContext,
aPresContext->AppUnitsToDevPixels(aMinSize.width),
aPresContext->AppUnitsToDevPixels(aMinSize.height));
LayoutDeviceIntSize devMaxSize(
aMaxSize.width == NS_INTRINSICSIZE
aMaxSize.width == NS_UNCONSTRAINEDSIZE
? NS_MAXSIZE
: aPresContext->AppUnitsToDevPixels(aMaxSize.width),
aMaxSize.height == NS_INTRINSICSIZE
aMaxSize.height == NS_UNCONSTRAINEDSIZE
? NS_MAXSIZE
: aPresContext->AppUnitsToDevPixels(aMaxSize.height));

Просмотреть файл

@ -700,7 +700,7 @@ class nsFlexContainerFrame::FlexItem : public LinkedListElement<FlexItem> {
// resulting "hypothetical main size" (the base size clamped to our
// main-axis [min,max] sizing constraints).
void SetFlexBaseSizeAndMainSize(nscoord aNewFlexBaseSize) {
MOZ_ASSERT(!mIsFrozen || mFlexBaseSize == NS_INTRINSICSIZE,
MOZ_ASSERT(!mIsFrozen || mFlexBaseSize == NS_UNCONSTRAINEDSIZE,
"flex base size shouldn't change after we're frozen "
"(unless we're just resolving an intrinsic size)");
mFlexBaseSize = aNewFlexBaseSize;
@ -1362,7 +1362,7 @@ UniquePtr<FlexItem> nsFlexContainerFrame::GenerateFlexItemForChild(
mainMinSize = std::max(mainMinSize, widgetMainMinSize);
mainMaxSize = std::max(mainMaxSize, widgetMainMinSize);
if (tentativeCrossSize != NS_INTRINSICSIZE) {
if (tentativeCrossSize != NS_UNCONSTRAINEDSIZE) {
tentativeCrossSize = std::max(tentativeCrossSize, widgetCrossMinSize);
}
crossMinSize = std::max(crossMinSize, widgetCrossMinSize);
@ -1424,7 +1424,8 @@ static bool IsCrossSizeDefinite(const ReflowInput& aItemReflowInput,
// returning the cross min-size, when the cross size is indefinite. (This param
// should be set IFF the caller intends to resolve the main min-size.) If this
// param is true, then this function is guaranteed to return a definite value
// (i.e. not NS_AUTOHEIGHT, excluding cases where huge sizes are involved).
// (i.e. not NS_UNCONSTRAINEDSIZE, excluding cases where huge sizes are
// involved).
//
// XXXdholbert the min-size behavior here is based on my understanding in
// http://lists.w3.org/Archives/Public/www-style/2014Jul/0053.html
@ -1454,7 +1455,7 @@ static nscoord CrossSizeToUseWithRatio(const FlexItem& aFlexItem,
}
// Indefinite cross-size.
return NS_AUTOHEIGHT;
return NS_UNCONSTRAINEDSIZE;
}
// Convenience function; returns a main-size, given a cross-size and an
@ -1492,7 +1493,7 @@ static nscoord PartiallyResolveAutoMinSize(
// * the used flex-basis, if the computed flex-basis was 'auto':
// XXXdholbert ('auto' might be renamed to 'main-size'; see bug 1032922)
if (aItemReflowInput.mStylePosition->mFlexBasis.IsAuto() &&
aFlexItem.GetFlexBaseSize() != NS_AUTOHEIGHT) {
aFlexItem.GetFlexBaseSize() != NS_UNCONSTRAINEDSIZE) {
// NOTE: We skip this if the flex base size depends on content & isn't yet
// resolved. This is OK, because the caller is responsible for computing
// the min-content height and min()'ing it with the value we return, which
@ -1535,7 +1536,7 @@ static nscoord PartiallyResolveAutoMinSize(
static bool ResolveAutoFlexBasisFromRatio(
FlexItem& aFlexItem, const ReflowInput& aItemReflowInput,
const FlexboxAxisTracker& aAxisTracker) {
MOZ_ASSERT(NS_AUTOHEIGHT == aFlexItem.GetFlexBaseSize(),
MOZ_ASSERT(NS_UNCONSTRAINEDSIZE == aFlexItem.GetFlexBaseSize(),
"Should only be called to resolve an 'auto' flex-basis");
// If the flex item has ...
// - an intrinsic aspect ratio,
@ -1550,7 +1551,7 @@ static bool ResolveAutoFlexBasisFromRatio(
nscoord crossSizeToUseWithRatio = CrossSizeToUseWithRatio(
aFlexItem, aItemReflowInput, useMinSizeIfCrossSizeIsIndefinite,
aAxisTracker);
if (crossSizeToUseWithRatio != NS_AUTOHEIGHT) {
if (crossSizeToUseWithRatio != NS_UNCONSTRAINEDSIZE) {
// We have a definite cross-size
nscoord mainSizeFromRatio = MainSizeFromAspectRatio(
crossSizeToUseWithRatio, aFlexItem.IntrinsicRatio(), aAxisTracker);
@ -1570,8 +1571,9 @@ void nsFlexContainerFrame::ResolveAutoFlexBasisAndMinSize(
// (Note: We can guarantee that the flex-basis will have already been
// resolved if the main axis is the same is the same as the item's inline
// axis. Inline-axis values should always be resolvable without reflow.)
const bool isMainSizeAuto = (!aFlexItem.IsInlineAxisMainAxis() &&
NS_AUTOHEIGHT == aFlexItem.GetFlexBaseSize());
const bool isMainSizeAuto =
(!aFlexItem.IsInlineAxisMainAxis() &&
NS_UNCONSTRAINEDSIZE == aFlexItem.GetFlexBaseSize());
const bool isMainMinSizeAuto = aFlexItem.NeedsMinSizeAutoResolution();
@ -1603,9 +1605,9 @@ void nsFlexContainerFrame::ResolveAutoFlexBasisAndMinSize(
// - If it's column-oriented, then "yes", because its cross size is its
// inline-size which is always definite from its descendants' perspective.
// - Otherwise (if it's row-oriented), then we check the actual size
// and call it definite if it's not NS_AUTOHEIGHT.
// and call it definite if it's not NS_UNCONSTRAINEDSIZE.
if (aAxisTracker.IsColumnOriented() ||
containerCrossSize != NS_AUTOHEIGHT) {
containerCrossSize != NS_UNCONSTRAINEDSIZE) {
// Container's cross size is "definite", so we can resolve the item's
// stretched cross size using that.
aFlexItem.ResolveStretchedCrossSize(containerCrossSize, aAxisTracker);
@ -3981,7 +3983,7 @@ static nscoord ResolveFlexContainerMainSize(
return aTentativeMainSize;
}
if (aTentativeMainSize != NS_INTRINSICSIZE) {
if (aTentativeMainSize != NS_UNCONSTRAINEDSIZE) {
// Column-oriented case, with fixed BSize:
if (aAvailableBSizeForContent == NS_UNCONSTRAINEDSIZE ||
aTentativeMainSize < aAvailableBSizeForContent) {
@ -4041,7 +4043,7 @@ nscoord nsFlexContainerFrame::ComputeCrossSize(
}
nscoord effectiveComputedBSize = GetEffectiveComputedBSize(aReflowInput);
if (effectiveComputedBSize != NS_INTRINSICSIZE) {
if (effectiveComputedBSize != NS_UNCONSTRAINEDSIZE) {
// Row-oriented case (cross axis is block-axis), with fixed BSize:
*aIsDefinite = true;
if (aAvailableBSizeForContent == NS_UNCONSTRAINEDSIZE ||
@ -4768,7 +4770,7 @@ void nsFlexContainerFrame::DoFlexLayout(
// Recalculate the gap sizes if necessary now that the container size has
// been determined.
if (aReflowInput.ComputedBSize() == NS_INTRINSICSIZE &&
if (aReflowInput.ComputedBSize() == NS_UNCONSTRAINEDSIZE &&
aReflowInput.mStylePosition->mRowGap.IsLengthPercentage() &&
aReflowInput.mStylePosition->mRowGap.AsLengthPercentage().HasPercent()) {
bool rowIsCross = aAxisTracker.IsRowOriented();
@ -4998,7 +5000,7 @@ void nsFlexContainerFrame::DoFlexLayout(
if (aReflowInput.AvailableBSize() == NS_UNCONSTRAINEDSIZE ||
desiredSizeInFlexWM.BSize(flexWM) == 0 ||
desiredBSizeWithBEndBP <= aReflowInput.AvailableBSize() ||
aReflowInput.ComputedBSize() == NS_INTRINSICSIZE) {
aReflowInput.ComputedBSize() == NS_UNCONSTRAINEDSIZE) {
// Update desired height to include block-end border/padding
desiredSizeInFlexWM.BSize(flexWM) = desiredBSizeWithBEndBP;
} else {

Просмотреть файл

@ -5787,7 +5787,7 @@ LogicalSize nsFrame::ComputeSize(gfxContext* aRenderingContext, WritingMode aWM,
blockStyleCoord->BehavesLikeInitialValueOnBlockAxis() &&
!IS_TRUE_OVERFLOW_CONTAINER(this)) {
auto cbSize = aCBSize.BSize(aWM);
if (cbSize != NS_AUTOHEIGHT) {
if (cbSize != NS_UNCONSTRAINEDSIZE) {
// 'auto' block-size for grid-level box - fill the CB for 'stretch' /
// 'normal' and clamp it to the CB if requested:
bool stretch = false;
@ -5803,7 +5803,7 @@ LogicalSize nsFrame::ComputeSize(gfxContext* aRenderingContext, WritingMode aWM,
auto bSizeToFillCB =
std::max(nscoord(0), cbSize - aPadding.BSize(aWM) -
aBorder.BSize(aWM) - aMargin.BSize(aWM));
if (stretch || (result.BSize(aWM) != NS_AUTOHEIGHT &&
if (stretch || (result.BSize(aWM) != NS_UNCONSTRAINEDSIZE &&
result.BSize(aWM) > bSizeToFillCB)) {
result.BSize(aWM) = bSizeToFillCB;
}
@ -6076,7 +6076,7 @@ LogicalSize nsFrame::ComputeSizeWithIntrinsicDimensions(
MOZ_ASSERT(!IS_TRUE_OVERFLOW_CONTAINER(this));
// 'auto' block-size for grid-level box - apply 'stretch' as needed:
auto cbSize = aCBSize.BSize(aWM);
if (cbSize != NS_AUTOHEIGHT) {
if (cbSize != NS_UNCONSTRAINEDSIZE) {
if (!StyleMargin()->HasBlockAxisAuto(aWM)) {
auto blockAxisAlignment =
!aWM.IsOrthogonalTo(GetParent()->GetWritingMode())
@ -10072,7 +10072,7 @@ nsSize nsFrame::GetXULMinSize(nsBoxLayoutState& aState) {
}
nsSize nsFrame::GetXULMaxSize(nsBoxLayoutState& aState) {
nsSize size(NS_INTRINSICSIZE, NS_INTRINSICSIZE);
nsSize size(NS_UNCONSTRAINEDSIZE, NS_UNCONSTRAINEDSIZE);
DISPLAY_MAX_SIZE(this, size);
// Don't use the cache if we have HTMLReflowInput constraints --- they might
// have changed
@ -10227,7 +10227,7 @@ void nsFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
// lets see if we are already that size. Yes? then don't even reflow. We are
// done.
if (!needsReflow) {
if (aWidth != NS_INTRINSICSIZE && aHeight != NS_INTRINSICSIZE) {
if (aWidth != NS_UNCONSTRAINEDSIZE && aHeight != NS_UNCONSTRAINEDSIZE) {
// if the new calculated size has a 0 width or a 0 height
if ((metrics->mLastSize.width == 0 || metrics->mLastSize.height == 0) &&
(aWidth == 0 || aHeight == 0)) {
@ -10266,9 +10266,9 @@ void nsFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
GetXULMargin(margin);
nsSize parentSize(aWidth, aHeight);
if (parentSize.height != NS_INTRINSICSIZE)
if (parentSize.height != NS_UNCONSTRAINEDSIZE)
parentSize.height += margin.TopBottom();
if (parentSize.width != NS_INTRINSICSIZE)
if (parentSize.width != NS_UNCONSTRAINEDSIZE)
parentSize.width += margin.LeftRight();
nsIFrame* parentFrame = GetParent();
@ -10278,9 +10278,9 @@ void nsFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
ReflowInput::DUMMY_PARENT_REFLOW_INPUT);
// This may not do very much useful, but it's probably worth trying.
if (parentSize.width != NS_INTRINSICSIZE)
if (parentSize.width != NS_UNCONSTRAINEDSIZE)
parentReflowInput.SetComputedWidth(std::max(parentSize.width, 0));
if (parentSize.height != NS_INTRINSICSIZE)
if (parentSize.height != NS_UNCONSTRAINEDSIZE)
parentReflowInput.SetComputedHeight(std::max(parentSize.height, 0));
parentReflowInput.ComputedPhysicalMargin().SizeTo(0, 0, 0, 0);
// XXX use box methods
@ -10311,7 +10311,7 @@ void nsFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
// (It used to have a bogus parent, skipping all the boxes).
WritingMode wm = GetWritingMode();
LogicalSize logicalSize(wm, nsSize(aWidth, aHeight));
logicalSize.BSize(wm) = NS_INTRINSICSIZE;
logicalSize.BSize(wm) = NS_UNCONSTRAINEDSIZE;
ReflowInput reflowInput(aPresContext, *parentRI, this, logicalSize,
Nothing(), ReflowInput::DUMMY_PARENT_REFLOW_INPUT);
@ -10324,7 +10324,7 @@ void nsFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
// mComputedWidth and mComputedHeight are content-box, not
// border-box
if (aWidth != NS_INTRINSICSIZE) {
if (aWidth != NS_UNCONSTRAINEDSIZE) {
nscoord computedWidth =
aWidth - reflowInput.ComputedPhysicalBorderPadding().LeftRight();
computedWidth = std::max(computedWidth, 0);
@ -10337,7 +10337,7 @@ void nsFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
// natural height excluding any overflow area which may be caused by
// various CSS effects such as shadow or outline.
if (!IsBlockFrameOrSubclass()) {
if (aHeight != NS_INTRINSICSIZE) {
if (aHeight != NS_UNCONSTRAINEDSIZE) {
nscoord computedHeight =
aHeight - reflowInput.ComputedPhysicalBorderPadding().TopBottom();
computedHeight = std::max(computedHeight, 0);
@ -10411,19 +10411,19 @@ void nsFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
}
#ifdef DEBUG_REFLOW
if (aHeight != NS_INTRINSICSIZE && aDesiredSize.Height() != aHeight) {
if (aHeight != NS_UNCONSTRAINEDSIZE && aDesiredSize.Height() != aHeight) {
nsAdaptorAddIndents();
printf("*****got taller!*****\n");
}
if (aWidth != NS_INTRINSICSIZE && aDesiredSize.Width() != aWidth) {
if (aWidth != NS_UNCONSTRAINEDSIZE && aDesiredSize.Width() != aWidth) {
nsAdaptorAddIndents();
printf("*****got wider!******\n");
}
#endif
if (aWidth == NS_INTRINSICSIZE) aWidth = aDesiredSize.Width();
if (aWidth == NS_UNCONSTRAINEDSIZE) aWidth = aDesiredSize.Width();
if (aHeight == NS_INTRINSICSIZE) aHeight = aDesiredSize.Height();
if (aHeight == NS_UNCONSTRAINEDSIZE) aHeight = aDesiredSize.Height();
metrics->mLastSize.width = aDesiredSize.Width();
metrics->mLastSize.height = aDesiredSize.Height();

Просмотреть файл

@ -1593,7 +1593,7 @@ nsSize nsXULScrollFrame::GetXULMinSize(nsBoxLayoutState& aState) {
}
nsSize nsXULScrollFrame::GetXULMaxSize(nsBoxLayoutState& aState) {
nsSize maxSize(NS_INTRINSICSIZE, NS_INTRINSICSIZE);
nsSize maxSize(NS_UNCONSTRAINEDSIZE, NS_UNCONSTRAINEDSIZE);
AddBorderAndPadding(maxSize);
bool widthSet, heightSet;
@ -5233,7 +5233,7 @@ bool nsXULScrollFrame::AddRemoveScrollbar(bool& aHasScrollbar, nscoord& aXY,
nscoord size = aSize;
nscoord xy = aXY;
if (size != NS_INTRINSICSIZE) {
if (size != NS_UNCONSTRAINEDSIZE) {
if (aAdd) {
size -= aSbSize;
if (!aOnRightOrBottom && size >= 0) xy += aSbSize;

Просмотреть файл

@ -5980,7 +5980,7 @@ nsGridContainerFrame::GetNearestFragmentainer(
data->mCanBreakAtStart =
numRows > 0 && aState.mRows.mSizes[0].mPosition > 0;
nscoord bSize = gridRI->ComputedBSize();
data->mIsAutoBSize = bSize == NS_AUTOHEIGHT;
data->mIsAutoBSize = bSize == NS_UNCONSTRAINEDSIZE;
if (data->mIsAutoBSize) {
bSize = gridRI->ComputedMinBSize();
} else {
@ -7089,7 +7089,7 @@ void nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
bSize += sz.mBase;
}
bSize += gridReflowInput.mRows.SumOfGridGaps();
} else if (computedBSize == NS_AUTOHEIGHT) {
} else if (computedBSize == NS_UNCONSTRAINEDSIZE) {
bSize = gridReflowInput.mRows.GridLineEdge(rowSizes.Length(),
GridLineSide::BeforeGridGap);
}
@ -7106,7 +7106,7 @@ void nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
GridLineSide::AfterGridGap);
}
}
if (computedBSize == NS_AUTOHEIGHT) {
if (computedBSize == NS_UNCONSTRAINEDSIZE) {
bSize = NS_CSS_MINMAX(bSize, aReflowInput.ComputedMinBSize(),
aReflowInput.ComputedMaxBSize());
} else {
@ -7121,7 +7121,7 @@ void nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
const auto& rowSizes = gridReflowInput.mRows.mSizes;
if (!IsRowSubgrid()) {
// Apply 'align-content' to the grid.
if (computedBSize == NS_AUTOHEIGHT &&
if (computedBSize == NS_UNCONSTRAINEDSIZE &&
stylePos->mRowGap.IsLengthPercentage() &&
stylePos->mRowGap.AsLengthPercentage().HasPercent()) {
// Re-resolve the row-gap now that we know our intrinsic block-size.
@ -7130,7 +7130,7 @@ void nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
}
gridReflowInput.mRows.AlignJustifyContent(stylePos, wm, bSize, false);
} else {
if (computedBSize == NS_AUTOHEIGHT) {
if (computedBSize == NS_UNCONSTRAINEDSIZE) {
bSize = gridReflowInput.mRows.GridLineEdge(rowSizes.Length(),
GridLineSide::BeforeGridGap);
contentArea.BSize(wm) = bSize;

Просмотреть файл

@ -59,7 +59,7 @@ nsSize nsPlaceholderFrame::GetXULPrefSize(nsBoxLayoutState& aBoxLayoutState) {
/* virtual */
nsSize nsPlaceholderFrame::GetXULMaxSize(nsBoxLayoutState& aBoxLayoutState) {
nsSize size(NS_INTRINSICSIZE, NS_INTRINSICSIZE);
nsSize size(NS_UNCONSTRAINEDSIZE, NS_UNCONSTRAINEDSIZE);
DISPLAY_MAX_SIZE(this, size);
return size;
}

Просмотреть файл

@ -195,11 +195,11 @@ nscoord nsSplittableFrame::ConsumedBSize(WritingMode aWM) const {
nscoord nsSplittableFrame::GetEffectiveComputedBSize(
const ReflowInput& aReflowInput, nscoord aConsumedBSize) const {
nscoord bSize = aReflowInput.ComputedBSize();
if (bSize == NS_INTRINSICSIZE) {
return NS_INTRINSICSIZE;
if (bSize == NS_UNCONSTRAINEDSIZE) {
return NS_UNCONSTRAINEDSIZE;
}
if (aConsumedBSize == NS_INTRINSICSIZE) {
if (aConsumedBSize == NS_UNCONSTRAINEDSIZE) {
aConsumedBSize = ConsumedBSize(aReflowInput.GetWritingMode());
}
@ -233,7 +233,7 @@ nsIFrame::LogicalSides nsSplittableFrame::GetLogicalSkipSides(
if (NS_UNCONSTRAINEDSIZE != aReflowInput->AvailableBSize()) {
nscoord effectiveCH = this->GetEffectiveComputedBSize(*aReflowInput);
if (effectiveCH != NS_INTRINSICSIZE &&
if (effectiveCH != NS_UNCONSTRAINEDSIZE &&
effectiveCH > aReflowInput->AvailableBSize()) {
// Our content height is going to exceed our available height, so we're
// going to need a next-in-flow.

Просмотреть файл

@ -95,8 +95,9 @@ class nsSplittableFrame : public nsFrame {
* computed block size, minus the block size consumed by any previous
* in-flows.
*/
nscoord GetEffectiveComputedBSize(const ReflowInput& aReflowInput,
nscoord aConsumed = NS_INTRINSICSIZE) const;
nscoord GetEffectiveComputedBSize(
const ReflowInput& aReflowInput,
nscoord aConsumed = NS_UNCONSTRAINEDSIZE) const;
/**
* @see nsIFrame::GetLogicalSkipSides()

Просмотреть файл

@ -806,7 +806,7 @@ void nsSubDocumentFrame::Reflow(nsPresContext* aPresContext,
NS_ASSERTION(aReflowInput.ComputedWidth() != NS_UNCONSTRAINEDSIZE,
"Shouldn't have unconstrained stuff here "
"thanks to the rules of reflow");
NS_ASSERTION(NS_INTRINSICSIZE != aReflowInput.ComputedHeight(),
NS_ASSERTION(NS_UNCONSTRAINEDSIZE != aReflowInput.ComputedHeight(),
"Shouldn't have unconstrained stuff here "
"thanks to ComputeAutoSize");

Просмотреть файл

@ -5465,7 +5465,7 @@ gfxFloat nsTextFrame::ComputeDescentLimitForSelectionUnderline(
gfxFloat app = aPresContext->AppUnitsPerDevPixel();
nscoord lineHeightApp =
ReflowInput::CalcLineHeight(GetContent(), Style(), PresContext(),
NS_AUTOHEIGHT, GetFontSizeInflation());
NS_UNCONSTRAINEDSIZE, GetFontSizeInflation());
gfxFloat lineHeight = gfxFloat(lineHeightApp) / app;
if (lineHeight <= aFontMetrics.maxHeight) {
return aFontMetrics.maxDescent;

Просмотреть файл

@ -271,7 +271,7 @@ void nsVideoFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
const nscoord borderBoxISize =
aReflowInput.ComputedISize() +
aReflowInput.ComputedLogicalBorderPadding().IStartEnd(myWM);
const bool isBSizeShrinkWrapping = (contentBoxBSize == NS_INTRINSICSIZE);
const bool isBSizeShrinkWrapping = (contentBoxBSize == NS_UNCONSTRAINEDSIZE);
nscoord borderBoxBSize;
if (!isBSizeShrinkWrapping) {
@ -366,7 +366,7 @@ void nsVideoFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
}
if (isBSizeShrinkWrapping) {
if (contentBoxBSize == NS_INTRINSICSIZE) {
if (contentBoxBSize == NS_UNCONSTRAINEDSIZE) {
// We didn't get a BSize from our intrinsic size/ratio, nor did we
// get one from our controls. Just use BSize of 0.
contentBoxBSize = 0;

Просмотреть файл

@ -1286,7 +1286,7 @@ void nsDisplayListBuilder::SetGlassDisplayItem(nsDisplayItem* aItem) {
NS_WARNING("Multiple glass backgrounds found?");
} else
#endif
if (!mHasGlassItemDuringPartial) {
if (!mHasGlassItemDuringPartial) {
mHasGlassItemDuringPartial = true;
aItem->SetIsGlassItem();
}
@ -1300,7 +1300,7 @@ void nsDisplayListBuilder::SetGlassDisplayItem(nsDisplayItem* aItem) {
NS_WARNING("Multiple glass backgrounds found?");
} else
#endif
if (!mGlassDisplayItem) {
if (!mGlassDisplayItem) {
mGlassDisplayItem = aItem;
mGlassDisplayItem->SetIsGlassItem();
}
@ -8639,22 +8639,26 @@ void nsDisplayTransform::UpdateBounds(nsDisplayListBuilder* aBuilder) {
return;
}
if (!Combines3DTransformWithAncestors()) {
if (mFrame->Extend3DContext()) {
if (mFrame->Extend3DContext()) {
if (!Combines3DTransformWithAncestors()) {
// The transform establishes a 3D context. |UpdateBoundsFor3D()| will
// collect the bounds from the child transforms.
UpdateBoundsFor3D(aBuilder);
} else {
// A stand-alone transform.
mBounds = TransformUntransformedBounds(aBuilder, GetTransform());
// With nested 3D transforms, the 2D bounds might not be useful.
mBounds = nsRect();
}
return;
}
// With nested 3D transforms, the 2D bounds might not be useful.
MOZ_ASSERT(mFrame->Combines3DTransformWithAncestors());
mBounds = nsRect();
MOZ_ASSERT(!mFrame->Extend3DContext());
// We would like to avoid calculating 2D bounds here for nested 3D transforms,
// but mix-blend-mode relies on having bounds set. See bug 1556956.
// A stand-alone transform.
mBounds = TransformUntransformedBounds(aBuilder, GetTransform());
}
void nsDisplayTransform::UpdateBoundsFor3D(nsDisplayListBuilder* aBuilder) {

Просмотреть файл

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bug 1553828</title>
<style type="text/css">
.container {
transform-style: preserve-3d;
perspective: 1000px;
width: 500px;
background-color: white;
}
.child {
width: 500px;
height: 500px;
background-color: red;
transform: translateY(0px);
mix-blend-mode: difference;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html class="reftest-wait">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bug 1553828</title>
<style type="text/css">
.container {
transform-style: preserve-3d;
perspective: 1000px;
width: 500px;
background-color: white;
}
.child {
width: 500px;
height: 500px;
background-color: blue;
transform: translateY(0px);
mix-blend-mode: difference;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
<script type="text/javascript">
function doTest() {
document.querySelector(".child").style["background-color"] = "red";
document.documentElement.className = "";
}
window.addEventListener("MozReftestInvalidate", doTest);
// setTimeout(doTest, 5000);
</script>
</body>
</html>

Просмотреть файл

@ -42,3 +42,4 @@ fuzzy(0-2,0-40000) skip-if(!asyncPan) == 1464288-1.html 1464288-ref.html
== 1533317-1.html 1533317-1-ref.html
== 1544948-1.html 1544948-1-ref.html
== 1551053-1.html 1551053-1-ref.html
== 1553828-1.html 1553828-1-ref.html

Просмотреть файл

@ -1,6 +1,5 @@
# basic tests for webkit-text-stroke
# fuzzy is needed here for platform dependent backends
default-preferences pref(layout.css.prefixes.webkit,true)
# These fail on Linux without webrender due to lack of antialiasing of the HTML text stroke
fuzzy(0-64,0-47) fails-if(gtkWidget&&!webrender) == webkit-text-stroke-property-001.html webkit-text-stroke-property-001-ref.html

Просмотреть файл

@ -1,6 +1,5 @@
# This directory contains tests for "display: -webkit-box" and associated
# CSS properties. These tests require webkit prefix support to be enabled.
default-preferences pref(layout.css.prefixes.webkit,true)
# CSS properties.
# Tests for abspos children inside of a -webkit-box:
== webkit-box-abspos-children-1.html webkit-box-abspos-children-1-ref.html

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше