Merge pull request #12394 from MetaMask/Version-v10.3.0

Version v10.3.0 RC
feature/default_network_editable
ryanml 3 years ago committed by GitHub
commit 6511f29e67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      .circleci/config.yml
  2. 2
      .circleci/scripts/create-lavamoat-viz.sh
  3. 2
      .circleci/scripts/validate-allow-scripts.sh
  4. 2
      .circleci/scripts/validate-lavamoat-policy.sh
  5. 4
      .eslintrc.js
  6. 2
      .github/ISSUE_TEMPLATE/bug-report.md
  7. 7
      .mocharc.js
  8. 5
      .mocharc.lax.js
  9. 9
      .storybook/actions/sb-send-action.js
  10. 148
      .storybook/initial-states/approval-screens/add-suggested-token.js
  11. 9
      .storybook/reducers/sb-history-reducer.js
  12. 19
      .storybook/reducers/sb-send-reducer.js
  13. 139
      .storybook/test-data.js
  14. 29
      CHANGELOG.md
  15. 4
      README.md
  16. 18
      app/_locales/am/messages.json
  17. 18
      app/_locales/ar/messages.json
  18. 18
      app/_locales/bg/messages.json
  19. 18
      app/_locales/bn/messages.json
  20. 18
      app/_locales/ca/messages.json
  21. 3
      app/_locales/cs/messages.json
  22. 18
      app/_locales/da/messages.json
  23. 15
      app/_locales/de/messages.json
  24. 18
      app/_locales/el/messages.json
  25. 147
      app/_locales/en/messages.json
  26. 18
      app/_locales/es/messages.json
  27. 18
      app/_locales/es_419/messages.json
  28. 18
      app/_locales/et/messages.json
  29. 18
      app/_locales/fa/messages.json
  30. 18
      app/_locales/fi/messages.json
  31. 9
      app/_locales/fil/messages.json
  32. 18
      app/_locales/fr/messages.json
  33. 18
      app/_locales/he/messages.json
  34. 18
      app/_locales/hi/messages.json
  35. 18
      app/_locales/hr/messages.json
  36. 9
      app/_locales/ht/messages.json
  37. 18
      app/_locales/hu/messages.json
  38. 18
      app/_locales/id/messages.json
  39. 18
      app/_locales/it/messages.json
  40. 18
      app/_locales/ja/messages.json
  41. 18
      app/_locales/kn/messages.json
  42. 18
      app/_locales/ko/messages.json
  43. 18
      app/_locales/lt/messages.json
  44. 18
      app/_locales/lv/messages.json
  45. 18
      app/_locales/ms/messages.json
  46. 18
      app/_locales/no/messages.json
  47. 18
      app/_locales/ph/messages.json
  48. 18
      app/_locales/pl/messages.json
  49. 18
      app/_locales/pt_BR/messages.json
  50. 18
      app/_locales/ro/messages.json
  51. 18
      app/_locales/ru/messages.json
  52. 18
      app/_locales/sk/messages.json
  53. 12
      app/_locales/sl/messages.json
  54. 18
      app/_locales/sr/messages.json
  55. 18
      app/_locales/sv/messages.json
  56. 18
      app/_locales/sw/messages.json
  57. 3
      app/_locales/ta/messages.json
  58. 18
      app/_locales/tl/messages.json
  59. 3
      app/_locales/tr/messages.json
  60. 18
      app/_locales/uk/messages.json
  61. 18
      app/_locales/vi/messages.json
  62. 18
      app/_locales/zh_CN/messages.json
  63. 18
      app/_locales/zh_TW/messages.json
  64. 7
      app/background.html
  65. 7
      app/home.html
  66. 218
      app/images/onboarding-welcome-decentralised-apps.svg
  67. 335
      app/images/onboarding-welcome-say-hello.svg
  68. BIN
      app/images/tada.png
  69. BIN
      app/images/twitter-icon.png
  70. BIN
      app/images/warning-icon.png
  71. 1
      app/manifest/_base.json
  72. 3
      app/manifest/_beta_modifications.json
  73. 7
      app/notification.html
  74. 1
      app/phishing.html
  75. 7
      app/popup.html
  76. 36
      app/scripts/controllers/onboarding.js
  77. 21
      app/scripts/controllers/preferences.js
  78. 4
      app/scripts/controllers/swaps.js
  79. 68
      app/scripts/controllers/token-rates-controller.test.js
  80. 88
      app/scripts/controllers/token-rates.js
  81. 5
      app/scripts/controllers/transactions/index.js
  82. 52
      app/scripts/controllers/transactions/index.test.js
  83. 6
      app/scripts/controllers/transactions/lib/util.js
  84. 91
      app/scripts/lockdown-more.js
  85. 92
      app/scripts/lockdown-run.js
  86. 48
      app/scripts/metamask-controller.js
  87. 13
      app/scripts/metamask-controller.test.js
  88. 39
      app/scripts/migrations/065.js
  89. 145
      app/scripts/migrations/065.test.js
  90. 2
      app/scripts/migrations/index.js
  91. 31
      app/scripts/platforms/extension.js
  92. 96
      app/scripts/platforms/extension.test.js
  93. 2
      development/build/README.md
  94. 22
      development/build/etc.js
  95. 32
      development/build/index.js
  96. 29
      development/build/manifest.js
  97. 96
      development/build/scripts.js
  98. 32
      development/build/static.js
  99. 73
      development/build/utils.js
  100. 1
      jest.config.js
  101. Some files were not shown because too many files have changed in this diff Show More

@ -391,7 +391,7 @@ jobs:
destination: test-artifacts
test-e2e-firefox:
executor: node-browsers
executor: node-browsers-medium-plus
steps:
- checkout
- run:

@ -11,7 +11,7 @@ BUILD_DEST="./build-artifacts/build-viz/"
mkdir -p "${BUILD_DEST}"
# generate lavamoat debug config
yarn lavamoat:debug
yarn lavamoat:debug:build
# generate viz
npx lavamoat-viz --dest "${BUILD_DEST}"

@ -6,7 +6,7 @@ set -o pipefail
yarn allow-scripts auto
if git diff --exit-code --quiet
if git diff --exit-code
then
echo "allow-scripts configuration is up-to-date"
else

@ -6,7 +6,7 @@ set -o pipefail
yarn lavamoat:auto
if git diff --exit-code --quiet
if git diff --exit-code
then
echo "LavaMoat policy is up-to-date"
else

@ -134,6 +134,7 @@ module.exports = {
'shared/**/*.test.js',
'development/**/*.test.js',
'app/scripts/migrations/*.test.js',
'app/scripts/platforms/*.test.js',
],
extends: ['@metamask/eslint-config-mocha'],
rules: {
@ -157,6 +158,7 @@ module.exports = {
'shared/**/*.test.js',
'development/**/*.test.js',
'app/scripts/migrations/*.test.js',
'app/scripts/platforms/*.test.js',
],
extends: ['@metamask/eslint-config-jest'],
rules: {
@ -183,6 +185,7 @@ module.exports = {
'nyc.config.js',
'stylelint.config.js',
'app/scripts/lockdown-run.js',
'app/scripts/lockdown-more.js',
'development/**/*.js',
'test/e2e/**/*.js',
'test/lib/wait-until-called.js',
@ -197,6 +200,7 @@ module.exports = {
{
files: [
'app/scripts/lockdown-run.js',
'app/scripts/lockdown-more.js',
'test/unit-global/protect-intrinsics.test.js',
],
globals: {

@ -31,7 +31,7 @@ If applicable, add screenshots to help explain your problem.
- OS: [e.g. OS X, Windows]
- Hardware Wallet: [e.g. Trezor Firmware version 1.8.3, Ledger Nano S Firmware version 1.6.0]
- Browser: [e.g. Chrome Version 79.0.3945.79 (Official Build) (64-bit), Firefox Browser 71.0 (64-bit)]
- MetaMask Version: [e.g. 5.0.2]
- MetaMask Version: [e.g. 5.0.2 - find it in Settings > About]
**Additional context (Error Messages, etc.)**
Add any other context about the problem here.

@ -0,0 +1,7 @@
module.exports = {
// TODO: Remove the `exit` setting, it can hide broken tests.
exit: true,
ignore: ['./app/scripts/migrations/*.test.js', './app/scripts/platforms/*.test.js'],
recursive: true,
require: ['test/env.js', 'test/setup.js'],
}

@ -0,0 +1,5 @@
const baseConfig = require('./.mocharc');
module.exports = Object.assign({}, baseConfig, {
ignore: [...baseConfig.ignore, './app/scripts/controllers/permissions/*.test.js']
});

@ -0,0 +1,9 @@
export const updateSendAsset = (type) => ({
type: 'send/updateSendAsset',
payload: type,
});
export const updateSendStage = (stage) => ({
type: 'send/updateSendStage',
payload: stage,
});

@ -1,65 +1,83 @@
export const suggestedTokens = {
"0x6b175474e89094c44da98b954eedeac495271d0f": {
"address": "0x6b175474e89094c44da98b954eedeac495271d0f",
"symbol": "META",
"decimals": 18,
"image": "metamark.svg",
"unlisted": false
},
"0xB8c77482e45F1F44dE1745F52C74426C631bDD52": {
"address": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52",
"symbol": "0X",
"decimals": 18,
"image": "0x.svg",
"unlisted": false
},
"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984": {
"address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"symbol": "AST",
"decimals": 18,
"image": "ast.png",
"unlisted": false
},
"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2": {
"address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",
"symbol": "BAT",
"decimals": 18,
"image": "BAT_icon.svg",
"unlisted": false
},
"0xe83cccfabd4ed148903bf36d4283ee7c8b3494d1": {
"address": "0xe83cccfabd4ed148903bf36d4283ee7c8b3494d1",
"symbol": "CVL",
"decimals": 18,
"image": "CVL_token.svg",
"unlisted": false
},
"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e": {
"address": "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e",
"symbol": "GLA",
"decimals": 18,
"image": "gladius.svg",
"unlisted": false
},
"0x467Bccd9d29f223BcE8043b84E8C8B282827790F": {
"address": "0x467Bccd9d29f223BcE8043b84E8C8B282827790F",
"symbol": "GNO",
"decimals": 18,
"image": "gnosis.svg",
"unlisted": false
},
"0xff20817765cb7f73d4bde2e66e067e58d11095c2": {
"address": "0xff20817765cb7f73d4bde2e66e067e58d11095c2",
"symbol": "OMG",
"decimals": 18,
"image": "omg.jpg",
"unlisted": false
},
"0x8e870d67f660d95d5be530380d0ec0bd388289e1": {
"address": "0x8e870d67f660d95d5be530380d0ec0bd388289e1",
"symbol": "WED",
"decimals": 18,
"image": "wed.png",
"unlisted": false
},
}
export const suggestedAssets = [
{
asset: {
address: '0x6b175474e89094c44da98b954eedeac495271d0f',
symbol: 'META',
decimals: 18,
image: 'metamark.svg',
unlisted: false
},
},
{
asset: {
'address': '0xB8c77482e45F1F44dE1745F52C74426C631bDD52',
'symbol': '0X',
'decimals': 18,
'image': '0x.svg',
'unlisted': false
},
},
{
asset: {
'address': '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
'symbol': 'AST',
'decimals': 18,
'image': 'ast.png',
'unlisted': false
},
},
{
asset: {
'address': '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
'symbol': 'BAT',
'decimals': 18,
'image': 'BAT_icon.svg',
'unlisted': false
},
},
{
asset: {
'address': '0xe83cccfabd4ed148903bf36d4283ee7c8b3494d1',
'symbol': 'CVL',
'decimals': 18,
'image': 'CVL_token.svg',
'unlisted': false
},
},
{
asset: {
'address': '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e',
'symbol': 'GLA',
'decimals': 18,
'image': 'gladius.svg',
'unlisted': false
},
},
{
asset: {
'address': '0x467Bccd9d29f223BcE8043b84E8C8B282827790F',
'symbol': 'GNO',
'decimals': 18,
'image': 'gnosis.svg',
'unlisted': false
},
},
{
asset: {
'address': '0xff20817765cb7f73d4bde2e66e067e58d11095c2',
'symbol': 'OMG',
'decimals': 18,
'image': 'omg.jpg',
'unlisted': false
},
},
{
asset: {
'address': '0x8e870d67f660d95d5be530380d0ec0bd388289e1',
'symbol': 'WED',
'decimals': 18,
'image': 'wed.png',
'unlisted': false
},
},
]

@ -0,0 +1,9 @@
import testData from '../test-data';
const initialState = { ...testData.history };
export default function historySBReducer(state = initialState, action) {
switch (action.type) {
default:
return state;
}
}

@ -0,0 +1,19 @@
import testData from '../test-data';
const initialState = { ...testData.send };
export default function sendSBReducer(state = initialState, action) {
switch (action.type) {
case 'send/updateSendStage':
return {
...state,
stage: action.payload,
};
case 'send/updateSendAsset':
return {
...state,
asset: { ...state.asset, type: action.payload },
};
default:
return state;
}
}

@ -1,5 +1,3 @@
import { TRANSACTION_STATUSES } from '../shared/constants/transaction';
const state = {
invalidCustomNetwork: {
state: 'CLOSED',
@ -16,11 +14,109 @@ const state = {
url: 'https://metamask.github.io/test-dapp/',
},
metamask: {
tokenList: {
'0x6b175474e89094c44da98b954eedeac495271d0f': {
address: '0x6b175474e89094c44da98b954eedeac495271d0f',
symbol: 'META',
decimals: 18,
image: 'metamark.svg',
unlisted: false
},
'0xB8c77482e45F1F44dE1745F52C74426C631bDD52': {
address: '0xB8c77482e45F1F44dE1745F52C74426C631bDD52',
symbol: '0X',
decimals: 18,
image: '0x.svg',
unlisted: false
},
'0x1f9840a85d5af5bf1d1762f925bdaddc4201f984': {
address: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
symbol: 'AST',
decimals: 18,
image: 'ast.png',
unlisted: false
},
'0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2': {
address: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
symbol: 'BAT',
decimals: 18,
image: 'BAT_icon.svg',
unlisted: false
},
'0xe83cccfabd4ed148903bf36d4283ee7c8b3494d1': {
address: '0xe83cccfabd4ed148903bf36d4283ee7c8b3494d1',
symbol: 'CVL',
decimals: 18,
image: 'CVL_token.svg',
unlisted: false
},
'0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e': {
address: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e',
symbol: 'GLA',
decimals: 18,
image: 'gladius.svg',
unlisted: false
},
'0x467Bccd9d29f223BcE8043b84E8C8B282827790F': {
address: '0x467Bccd9d29f223BcE8043b84E8C8B282827790F',
symbol: 'GNO',
decimals: 18,
image: 'gnosis.svg',
unlisted: false
},
'0xff20817765cb7f73d4bde2e66e067e58d11095c2': {
address: '0xff20817765cb7f73d4bde2e66e067e58d11095c2',
symbol: 'OMG',
decimals: 18,
image: 'omg.jpg',
unlisted: false
},
'0x8e870d67f660d95d5be530380d0ec0bd388289e1': {
address: '0x8e870d67f660d95d5be530380d0ec0bd388289e1',
symbol: 'WED',
decimals: 18,
image: 'wed.png',
unlisted: false
},
},
networkDetails: {
EIPS: {
1559: true,
},
},
gasFeeEstimates: '0x5208',
swapsState: {
quotes: {},
fetchParams: null,
tokens: null,
tradeTxId: null,
approveTxId: null,
quotesLastFetched: null,
customMaxGas: '',
customGasPrice: null,
selectedAggId: null,
customApproveTxData: '',
errorKey: '',
topAggId: null,
routeState: '',
swapsFeatureIsLive: false,
swapsQuoteRefreshTime: 60000,
},
accountArray: [
{
name: 'This is a Really Long Account Name',
address: '0x64a845a5b02460acf8a3d84503b0d68d028b4bb4',
index: 0,
balance: '0x176e5b6f173ebe66',
},
{
name: 'Account 2',
address: '0xb19ac54efa18cc3a14a5b821bfec73d284bf0c5e',
index: 1,
balance: '0x2d3142f5000',
},
],
connectedAccounts: ['0x64a845a5b02460acf8a3d84503b0d68d028b4bb4'],
isInitialized: true,
isUnlocked: true,
isAccountMenuOpen: false,
@ -103,12 +199,6 @@ const state = {
},
},
},
recipient: {
address: '0x39a4e4Af7cCB654dB9500F258c64781c8FbD39F0',
nickname: 'John Doe',
error: '',
warning: '',
},
addresses: [
{
address: '0x39a4e4Af7cCB654dB9500F258c64781c8FbD39F0',
@ -126,8 +216,13 @@ const state = {
},
tokens: [
{
address: '0xaD6D458402F60fD3Bd25163575031ACDce07538D',
symbol: 'DAI',
address: '0xaD6D458402F60fD3Bd25163575031ACDce07538A',
symbol: 'DAA',
decimals: 18,
},
{
address: '0xaD6D458402F60fD3Bd25163575031ACDce07538U',
symbol: 'DAU',
decimals: 18,
},
],
@ -366,6 +461,24 @@ const state = {
value: '0x9c2686',
},
],
[
{
note: 'transactions/pending-tx-tracker#event: tx:block-update',
op: 'add',
path: '/firstRetryBlockNumber',
timestamp: 1629582711878,
value: '0x9c2686',
},
],
[
{
note: 'txStateManager: setting status to confirmed',
op: 'replace',
path: '/status',
timestamp: 1629582721178,
value: 'confirmed',
},
],
[
{
note: 'txStateManager: setting status to confirmed',
@ -794,7 +907,7 @@ const state = {
'0xaD6D458402F60fD3Bd25163575031ACDce07538D': './sai.svg',
},
hiddenTokens: [],
suggestedTokens: {},
suggestedAssets: {},
useNonceField: false,
usePhishDetect: true,
lostIdentities: {},
@ -1165,6 +1278,10 @@ const state = {
balance: '0x0',
details: null,
},
gas: { error: 'gas' },
amount: {
error: 'amount',
},
},
confirmTransaction: {
txData: {

@ -6,6 +6,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [10.3.0]
### Added
- [#12252](https://github.com/MetaMask/metamask-extension/pull/12252): Support type "0" transactions on EIP-1559 networks
### Changed
- [#12100](https://github.com/MetaMask/metamask-extension/pull/12100): Use more descriptive language for "View on Etherscan" links
- [#12279](https://github.com/MetaMask/metamask-extension/pull/12279): Remove autofocus from gas limit input in the advanced gas popup
- [#12096](https://github.com/MetaMask/metamask-extension/pull/12096): Standardize appearance of buttons across the extension
- [#12304](https://github.com/MetaMask/metamask-extension/pull/12304): Remove duplicate Cancel button on the Send screen
- [#12331](https://github.com/MetaMask/metamask-extension/pull/12331): Update "off" color for toggle buttons
- [#12330](https://github.com/MetaMask/metamask-extension/pull/12330): Standardize truncation for address display throughout the extension
- [#12384](https://github.com/MetaMask/metamask-extension/pull/12384): Move "View on Etherscan" link to the top of the account menu
### Fixed
- [#12229](https://github.com/MetaMask/metamask-extension/pull/12229): Fix whitespace validation issue for seed phrase entry (Restore Your Account)
- [#12230](https://github.com/MetaMask/metamask-extension/pull/12230): Fix gas control flicker on send screen when switching between EIP-1559 networks
- [#12186](https://github.com/MetaMask/metamask-extension/pull/12186): Fix grammatical issue with "Not connected to this site" message
- [#12381](https://github.com/MetaMask/metamask-extension/pull/12381): Fix width and padding of the hide token modal while in the popup view
- [#12339](https://github.com/MetaMask/metamask-extension/pull/11996): Fix 'BigNumber' app error when '0x' is supplied as the transaction value
- [#12339](https://github.com/MetaMask/metamask-extension/pull/12339): Correctly notify the inpage provider of current selected account on "unlock" events
- [#12405](https://github.com/MetaMask/metamask-extension/pull/12405): Fix allowance issue with WETH -> ETH Swaps
## [10.2.2]
### Changed
- [#12256](https://github.com/MetaMask/metamask-extension/pull/12256): Updating instruction step when Ledger app has contract data or blind signing setting disabled
@ -178,6 +200,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [#11210](https://github.com/MetaMask/metamask-extension/pull/11210): Disable sending ERC-721 assets (NFTs)
- [#11418](https://github.com/MetaMask/metamask-extension/pull/11418): Use network gas estimate for gas limits of simple sends on custom networks
### Fixed
- [#11361](https://github.com/MetaMask/metamask-extension/pull/11361): Ensures custom network balance displays correctly when no ticker symbol is provided, and ensure ticker symbol displays correctly after all network switches.
- [#10965](https://github.com/MetaMask/metamask-extension/pull/10965): Fixed bug that resulted in sends to some contracts being disabled on custom networks.
## [9.7.1]
### Fixed
- [#11426](https://github.com/MetaMask/metamask-extension/pull/11426): Fixed bug that broke transaction speed up and cancel, when attempting those actions immediately after opening MetaMask
@ -2498,7 +2524,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Uncategorized
- Added the ability to restore accounts from seed words.
[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.2.2...HEAD
[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.3.0...HEAD
[10.3.0]: https://github.com/MetaMask/metamask-extension/compare/v10.2.2...v10.3.0
[10.2.2]: https://github.com/MetaMask/metamask-extension/compare/v10.2.1...v10.2.2
[10.2.1]: https://github.com/MetaMask/metamask-extension/compare/v10.2.0...v10.2.1
[10.2.0]: https://github.com/MetaMask/metamask-extension/compare/v10.1.1...v10.2.0

@ -46,9 +46,7 @@ To start the [React DevTools](https://github.com/facebook/react-devtools) and [R
### Running Unit Tests and Linting
Run unit tests and the linter with `yarn test`.
To run just unit tests, run `yarn test:unit`. To run unit tests continuously with a file watcher, run `yarn watch`.
Run unit tests and the linter with `yarn test`. To run just unit tests, run `yarn test:unit`.
You can run the linter by itself with `yarn lint`, and you can automatically fix some lint problems with `yarn lint:fix`. You can also run these two commands just on your local changes to save time with `yarn lint:changed` and `yarn lint:changed:fix` respectively.

@ -796,9 +796,6 @@
"revealSeedWordsDescription": {
"message": "ማሰሺያዎችን ከቀየሩ ወይም ኮምፒዩተሮቸን ከአንድ ቦታ ወደ ሌላ ቦታ ካንቀሳቀሱ፣ ወደ መለያዎችዎ ለመድረስ ይህ የዘር ሐረግ ያስፈልግዎታል። ደህንነቱና ሚስጥራዊነቱ በተጠበቀ ቦታ ያስቀምጧቸው።"
},
"revealSeedWordsTitle": {
"message": "የዘር ሐረግ"
},
"revealSeedWordsWarning": {
"message": "እነዚህ ቃላት ሁሉንም መለያዎችዎን ለመስረቅ ሊውሉ ይችላሉ።"
},
@ -835,9 +832,6 @@
"searchTokens": {
"message": "ተለዋጭ ስሞችን ፈልግ"
},
"secretBackupPhrase": {
"message": "ሚስጥራዊ የመጠባበቂያ ምዕራፍ"
},
"secretBackupPhraseDescription": {
"message": "ሚስጥራዊ የመጠባበቂያ ሐረግዎ መለያዎን መጠባበቂያ ለመያዝና ወደነበረበት ለመመለስ ቀላል ያደርገዋል።"
},
@ -1124,21 +1118,9 @@
"viewContact": {
"message": "ዕውቂያን ይመልከቱ"
},
"viewOnCustomBlockExplorer": {
"message": "በ $1ይመልከቱ"
},
"viewOnEtherscan": {
"message": "በ Etherscan ላይ ይመልከቱ"
},
"viewinExplorer": {
"message": "በኤክስፕሎረር ተመልከት"
},
"visitWebSite": {
"message": "ድረ ገጻችንን ይጎብኙ"
},
"walletSeed": {
"message": "የቋት ዘር"
},
"welcome": {
"message": "ወደ MetaMask እንኳን ደህና መጡ"
},

@ -792,9 +792,6 @@
"revealSeedWordsDescription": {
"message": "إذا كنت تنوي تغيير المتصفحات أو نقل أجهزة الكمبيوتر في أي وقت، فسوف تحتاج إلى عبارة الأمان هذه للوصول إلى حساباتك. احفظها في مكان آمن وسري."
},
"revealSeedWordsTitle": {
"message": "عبارة الأمان"
},
"revealSeedWordsWarning": {
"message": "يمكن استخدام هذه الكلمات لسرقة جميع حساباتك."
},
@ -831,9 +828,6 @@
"searchTokens": {
"message": "البحث عن العملات الرمزية"
},
"secretBackupPhrase": {
"message": "الجملة الاحتياطية السرية"
},
"secretBackupPhraseDescription": {
"message": "تجعل عبارة النسخ الاحتياطي السرية الخاصة بك من السهل إجراء نسخ احتياطي واستعادة حسابك."
},
@ -1120,21 +1114,9 @@
"viewContact": {
"message": "عرض جهة الاتصال"
},
"viewOnCustomBlockExplorer": {
"message": "عرض في $1"
},
"viewOnEtherscan": {
"message": "عرضه على Etherscan"
},
"viewinExplorer": {
"message": "عرض في متصفح Explorer"
},
"visitWebSite": {
"message": "قم بزيارة موقعنا على الإنترنت"
},
"walletSeed": {
"message": "بذرة المحفظة"
},
"welcome": {
"message": "مرحباً بك في MetaMask"
},

@ -795,9 +795,6 @@
"revealSeedWordsDescription": {
"message": "Ако някога смените браузъра или компютъра си, тази ключова фраза ще Ви трябва за достъп до Вашите акаунти. Запазете я някъде на сигурно и тайно място."
},
"revealSeedWordsTitle": {
"message": "Фраза зародиш"
},
"revealSeedWordsWarning": {
"message": "Тези думи могат да бъдат използвани за кражба на всички ваши акаунти."
},
@ -834,9 +831,6 @@
"searchTokens": {
"message": "Търсене на маркери"
},
"secretBackupPhrase": {
"message": "Тайна резервна фраза"
},
"secretBackupPhraseDescription": {
"message": "Вашата тайна резервна фраза улеснява архивирането и възстановяването на акаунта ви."
},
@ -1123,21 +1117,9 @@
"viewContact": {
"message": "Преглед на контакта"
},
"viewOnCustomBlockExplorer": {
"message": "Преглед на $1"
},
"viewOnEtherscan": {
"message": "Преглед на Etherscan"
},
"viewinExplorer": {
"message": "Преглед в Explorer"
},
"visitWebSite": {
"message": "Посетете нашият уеб сайт"
},
"walletSeed": {
"message": "Начална фраза за портфейл "
},
"welcome": {
"message": "Добре дошли в MetaMask"
},

@ -799,9 +799,6 @@
"revealSeedWordsDescription": {
"message": "আপনি কখনও বউজর পরিবরতন করল এক কমিউটর থ অনয কমিউট, আপন আপনর অউনট অস করর জনয এই সড ফজটিগব। সিিপদ ও গপনয় করকষণ করন। "
},
"revealSeedWordsTitle": {
"message": "সড ফজ"
},
"revealSeedWordsWarning": {
"message": "আপনর সমসত অউনট চি করত এই শবদগিযবহর কর।"
},
@ -838,9 +835,6 @@
"searchTokens": {
"message": "টনগি অনসনন করন"
},
"secretBackupPhrase": {
"message": "গপন বকআপ ফজ"
},
"secretBackupPhraseDescription": {
"message": "আপনর গপন বশ আপনর অউনট বকআপ এবির কর সহজতর কর।"
},
@ -1127,21 +1121,9 @@
"viewContact": {
"message": "পরিিিন"
},
"viewOnCustomBlockExplorer": {
"message": "$1 এ দন"
},
"viewOnEtherscan": {
"message": "Etherscan দন"
},
"viewinExplorer": {
"message": "একসপন"
},
"visitWebSite": {
"message": "আমর ওয়বসইট দন"
},
"walletSeed": {
"message": "ওয়ট সড"
},
"welcome": {
"message": "MetaMask এ সগতম"
},

@ -777,9 +777,6 @@
"revealSeedWordsDescription": {
"message": "Si mai canvies el navegador o l'ordinador, necessitaràs aquesta frase de recuperació per accedir als teus comptes. Guarda-la a un lloc segur i secret."
},
"revealSeedWordsTitle": {
"message": "Frase de Recuperació"
},
"revealSeedWordsWarning": {
"message": "Aquestes paraules poden ser utilitzades per a robar tots els teus comptes."
},
@ -816,9 +813,6 @@
"searchTokens": {
"message": "Tokens per cercar"
},
"secretBackupPhrase": {
"message": "Frase de recuperació secreta"
},
"secretBackupPhraseDescription": {
"message": "La teva frase de recuperació secreta facilita la còpia de seguretat i la recuperació del teu compte."
},
@ -1096,21 +1090,9 @@
"viewContact": {
"message": "Veure Contacte"
},
"viewOnCustomBlockExplorer": {
"message": "Mostra a $1"
},
"viewOnEtherscan": {
"message": "Veure a Etherscan"
},
"viewinExplorer": {
"message": "Mostra a Explorer"
},
"visitWebSite": {
"message": "Visita el nostre lloc web"
},
"walletSeed": {
"message": "Cartera de seeds"
},
"welcome": {
"message": "Benvingut a MetaMask"
},

@ -432,9 +432,6 @@
"visitWebSite": {
"message": "Navštivte naši stránku"
},
"walletSeed": {
"message": "Klíčová fráze peněženky"
},
"welcome": {
"message": "Vítejte v MetaMask"
},

@ -780,9 +780,6 @@
"revealSeedWordsDescription": {
"message": "Hvis du nogensinde skifter browsere eller flytter computere, har du brug for denne backupsætning for at få adgang til dine konti. Gem den et sted sikkert og hemmeligt."
},
"revealSeedWordsTitle": {
"message": "Backupsætning"
},
"revealSeedWordsWarning": {
"message": "Disse ord kan bruges til at stjæle alle dine konti."
},
@ -819,9 +816,6 @@
"searchTokens": {
"message": "Søg efter tokens"
},
"secretBackupPhrase": {
"message": "Hemmelig backup-sætning"
},
"secretBackupPhraseDescription": {
"message": "Din hemmelige backup-sætning gør det nemt at lave backup og gendanne din konto."
},
@ -1096,21 +1090,9 @@
"viewContact": {
"message": "Vis kontakt"
},
"viewOnCustomBlockExplorer": {
"message": "Se på $1"
},
"viewOnEtherscan": {
"message": "Se på Etherscan"
},
"viewinExplorer": {
"message": "Vis i stifinder"
},
"visitWebSite": {
"message": "Besøg vores webside"
},
"walletSeed": {
"message": "Tegnebogs-seed"
},
"welcome": {
"message": "Velkommen til MetaMask"
},

@ -768,9 +768,6 @@
"revealSeedWordsDescription": {
"message": "Wenn Sie einmal Ihren Browser oder Computer wechseln, benötigen Sie diesen Seed-Schlüssel, um auf Ihre Konten zuzugreifen. Bewahren Sie ihn an einem sicheren und geheimen Ort auf."
},
"revealSeedWordsTitle": {
"message": "Mnemonische Phrase"
},
"revealSeedWordsWarning": {
"message": "Bitte niemals deine Seed-Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden."
},
@ -807,9 +804,6 @@
"searchTokens": {
"message": "Token suchen"
},
"secretBackupPhrase": {
"message": "Geheimer Backup-Schlüssel"
},
"secretBackupPhraseDescription": {
"message": "Mit Ihrem geheimen Backup-Schlüssel können Sie Ihr Konto ganz einfach sichern und wiederherstellen."
},
@ -1087,15 +1081,6 @@
"viewContact": {
"message": "Kontakt anzeigen"
},
"viewOnCustomBlockExplorer": {
"message": "Für $1 ansehen"
},
"viewOnEtherscan": {
"message": "Auf Etherscan ansehen"
},
"viewinExplorer": {
"message": "Im Explorer anzeigen"
},
"visitWebSite": {
"message": "Gehe zu unserer Webseite"
},

@ -796,9 +796,6 @@
"revealSeedWordsDescription": {
"message": "Εάν αλλάξετε ποτέ προγράμματα περιήγησης ή μετακινήσετε υπολογιστές, θα χρειαστείτε αυτήν τη φράση φύτρου για να αποκτήσετε πρόσβαση στους λογαριασμούς σας. Αποθηκεύστε την κάπου με ασφάλεια και μυστικότητα."
},
"revealSeedWordsTitle": {
"message": "Φράση Επαναφοράς "
},
"revealSeedWordsWarning": {
"message": "Αυτές οι λέξεις μπορούν να χρησιμοποιηθούν για να κλαπούν όλοι οι λογαριασμοί σας."
},
@ -835,9 +832,6 @@
"searchTokens": {
"message": "Αναζήτηση Tokens"
},
"secretBackupPhrase": {
"message": "Μυστική Φράση Αντιγράφου Ασφαλείας"
},
"secretBackupPhraseDescription": {
"message": "Η μυστική φράση δημιουργίας αντιγράφων ασφαλείας σας διευκολύνει να δημιουργήσετε αντίγραφα ασφαλείας και να επαναφέρετε τον λογαριασμού σας."
},
@ -1121,21 +1115,9 @@
"viewContact": {
"message": "Εμφάνιση Επαφής"
},
"viewOnCustomBlockExplorer": {
"message": "Προβολή σε $1"
},
"viewOnEtherscan": {
"message": "Προβολή στο Etherscan"
},
"viewinExplorer": {
"message": "Προβολή στον Εξερευνητή"
},
"visitWebSite": {
"message": "Επισκεφθείτε τον ιστότοπό μας"
},
"walletSeed": {
"message": "Σπόρος Πορτοφολιού"
},
"welcome": {
"message": "Καλώς ήλθατε στο MetaMask"
},

@ -259,6 +259,22 @@
"betaWelcome": {
"message": "Welcome to MetaMask Beta"
},
"blockExplorerAccountAction": {
"message": "Account",
"description": "This is used with viewOnEtherscan and viewInExplorer e.g View Account in Explorer"
},
"blockExplorerAssetAction": {
"message": "Asset",
"description": "This is used with viewOnEtherscan and viewInExplorer e.g View Asset in Explorer"
},
"blockExplorerSwapAction": {
"message": "Swap",
"description": "This is used with viewOnEtherscan e.g View Swap on Etherscan"
},
"blockExplorerTransactionAction": {
"message": "Transaction",
"description": "This is used with viewOnCustomBlockExplorer and viewOnEtherscan e.g View Transaction on Etherscan"
},
"blockExplorerUrl": {
"message": "Block Explorer URL"
},
@ -341,12 +357,12 @@
"confirmPassword": {
"message": "Confirm password"
},
"confirmRecoveryPhrase": {
"message": "Confirm Secret Recovery Phrase"
},
"confirmSecretBackupPhrase": {
"message": "Confirm your Secret Recovery Phrase"
},
"confirmSeedPhrase": {
"message": "Confirm Secret Recovery Phrase"
},
"confirmed": {
"message": "Confirmed"
},
@ -405,7 +421,7 @@
"message": "You have 1 account connected to this site."
},
"connectedAccountsEmptyDescription": {
"message": "MetaMask is not connected this site. To connect to a web3 site, find the connect button on their site."
"message": "MetaMask is not connected to this site. To connect to a web3 site, find and click the connect button."
},
"connectedSites": {
"message": "Connected sites"
@ -919,6 +935,9 @@
"message": "File import not working? Click here!",
"description": "Helps user import their account from a JSON file"
},
"followUsOnTwitter": {
"message": "Follow us on Twitter"
},
"forbiddenIpfsGateway": {
"message": "Forbidden IPFS Gateway: Please specify a CID gateway"
},
@ -1026,6 +1045,9 @@
"getStarted": {
"message": "Get Started"
},
"goBack": {
"message": "Go Back"
},
"goerli": {
"message": "Goerli Test Network"
},
@ -1097,6 +1119,16 @@
"message": "or $1",
"description": "$1 represents the text from `importAccountLinkText` as a link"
},
"importExistingWalletDescription": {
"message": "Enter your Secret Recovery Phrase (aka Seed Phrase) that you were given when you created your wallet. $1",
"description": "$1 is the words 'Learn More' from key 'learnMore', separated here so that it can be added as a link"
},
"importExistingWalletTitle": {
"message": "Import existing wallet with Secret Recovery Phrase"
},
"importMyWallet": {
"message": "Import My Wallet"
},
"importTokenQuestion": {
"message": "Import token?"
},
@ -1191,6 +1223,9 @@
"ipfsGatewayDescription": {
"message": "Enter the URL of the IPFS CID gateway to use for ENS content resolution."
},
"jsDeliver": {
"message": "jsDeliver"
},
"jsonFile": {
"message": "JSON File",
"description": "format for importing an account"
@ -1597,10 +1632,24 @@
"on": {
"message": "On"
},
"onboardingCreateWallet": {
"message": "Create a new wallet"
},
"onboardingImportWallet": {
"message": "Import an existing wallet"
},
"onboardingReturnNotice": {
"message": "\"$1\" will close this tab and direct back to $2",
"description": "Return the user to the site that initiated onboarding"
},
"onboardingShowIncomingTransactionsDescription": {
"message": "Showing incoming transactions in your wallet relies on communication with $1. Etherscan will have access to your Ethereum address and your IP address. View $2.",
"description": "$1 is a clickable link with text defined by the 'etherscan' key. $2 is a clickable link with text defined by the 'privacyMsg' key."
},
"onboardingUsePhishingDetectionDescription": {
"message": "Phishing detection alerts rely on communication with $1. jsDeliver will have access to your IP address. View $2.",
"description": "The $1 is the word 'jsDeliver', from key 'jsDeliver' and $2 is the words Privacy Policy from key 'privacyMsg', both separated here so that it can be wrapped as a link"
},
"onlyAddTrustedNetworks": {
"message": "A malicious network provider can lie about the state of the blockchain and record your network activity. Only add custom networks you trust."
},
@ -1763,6 +1812,9 @@
"rejected": {
"message": "Rejected"
},
"remember": {
"message": "Remember:"
},
"remindMeLater": {
"message": "Remind me later"
},
@ -1812,9 +1864,6 @@
"revealSeedWordsDescription": {
"message": "If you ever change browsers or move computers, you will need this Secret Recovery Phrase to access your accounts. Save them somewhere safe and secret."
},
"revealSeedWordsTitle": {
"message": "Secret Recovery Phrase"
},
"revealSeedWordsWarning": {
"message": "These words can be used to steal all your accounts."
},
@ -1857,9 +1906,6 @@
"searchTokens": {
"message": "Search Tokens"
},
"secretBackupPhrase": {
"message": "Secret Recovery Phrase"
},
"secretBackupPhraseDescription": {
"message": "Your Secret Recovery Phrase makes it easy to back up and restore your account."
},
@ -1869,6 +1915,9 @@
"secretPhrase": {
"message": "Only the first account on this wallet will auto load. After completing this process, to add additional accounts, click the drop down menu, then select Create Account."
},
"secretRecoveryPhrase": {
"message": "Secret Recovery Phrase"
},
"secureWallet": {
"message": "Secure Wallet"
},
@ -1884,6 +1933,12 @@
"seedPhraseEnterMissingWords": {
"message": "Confirm Secret Recovery Phrase"
},
"seedPhraseIntroNotRecommendedButtonCopy": {
"message": "Remind me later (not recommended)"
},
"seedPhraseIntroRecommendedButtonCopy": {
"message": "Secure my wallet (recommended)"
},
"seedPhraseIntroSidebarBulletFour": {
"message": "Write down and store in multiple secret places."
},
@ -1897,13 +1952,13 @@
"message": "Store in a bank vault."
},
"seedPhraseIntroSidebarCopyOne": {
"message": "Your Secret Recovery Phrase is the “master key” to your wallet and funds."
"message": "Your Secret Recovery Phrase is a 12-word phrase that is the “master key” to your wallet and your funds"
},
"seedPhraseIntroSidebarCopyThree": {
"message": "If someone asks for your Secret Recovery Phrase, they are most likely trying to scam you."
"message": "If someone asks for your recovery phrase they are likely trying to scam you and steal your wallet funds"
},
"seedPhraseIntroSidebarCopyTwo": {
"message": "Never, ever share your Secret Recovery Phrase, even with MetaMask!"
"message": "Never, ever share your Secret Recovery Phrase, not even with MetaMask!"
},
"seedPhraseIntroSidebarTitleOne": {
"message": "What is a Secret Recovery Phrase?"
@ -1995,6 +2050,12 @@
"separateEachWord": {
"message": "Separate each word with a single space"
},
"setAdvancedPrivacySettings": {
"message": "Set advanced privacy settings"
},
"setAdvancedPrivacySettingsDetails": {
"message": "MetaMask uses these trusted third-party services to enhance product usability and safety."
},
"settings": {
"message": "Settings"
},
@ -2055,6 +2116,15 @@
"signed": {
"message": "Signed"
},
"skip": {
"message": "Skip"
},
"skipAccountSecurity": {
"message": "Skip Account Security?"
},
"skipAccountSecurityDetails": {
"message": "I understand that until I back up my Secret Recovery Phrase, I may lose my accounts and all of their assets."
},
"slow": {
"message": "Slow"
},
@ -2684,6 +2754,9 @@
"tryAgain": {
"message": "Try again"
},
"turnOnTokenDetection": {
"message": "Turn on Token Detection"
},
"typePassword": {
"message": "Type your MetaMask password"
},
@ -2784,13 +2857,16 @@
"message": "View More"
},
"viewOnCustomBlockExplorer": {
"message": "View at $1"
"message": "View $1 at $2",
"description": "$1 is the action type. e.g (Account, Transaction, Swap) and $2 is the Custom Block Exporer URL"
},
"viewOnEtherscan": {
"message": "View on Etherscan"
"message": "View $1 on Etherscan",
"description": "$1 is the action type. e.g (Account, Transaction, Swap)"
},
"viewinExplorer": {
"message": "View in Explorer"
"message": "View $1 in Explorer",
"description": "$1 is the action type. e.g (Account, Transaction, Swap)"
},
"visitWebSite": {
"message": "Visit our web site"
@ -2798,8 +2874,25 @@
"walletConnectionGuide": {
"message": "our hardware wallet connection guide"
},
"walletSeed": {
"message": "Secret Recovery Phrase"
"walletCreationSuccessDetail": {
"message": "You’ve successfully protected your wallet. Keep your Secret Recovery Phrase safe and secret -- it’s your responsibility!"
},
"walletCreationSuccessReminder1": {
"message": "MetaMask can’t recover your Secret Recovery Phrase."
},
"walletCreationSuccessReminder2": {
"message": "MetaMask will never ask you for your Secret Recovery Phrase."
},
"walletCreationSuccessReminder3": {
"message": "$1 with anyone or risk your funds being stolen",
"description": "$1 is separated as walletCreationSuccessReminder3BoldSection so that we can bold it"
},
"walletCreationSuccessReminder3BoldSection": {
"message": "Never share your Secret Recovery Phrase",
"description": "This string is localized separately from walletCreationSuccessReminder3 so that we can bold it"
},
"walletCreationSuccessTitle": {
"message": "Wallet creation successful"
},
"walletSeedRestore": {
"message": "Wallet Secret Recovery Phrase"
@ -2814,6 +2907,24 @@
"welcomeBack": {
"message": "Welcome Back!"
},
"welcomeExploreDescription": {
"message": "Store, send and spend crypto currencies and assets."
},
"welcomeExploreTitle": {
"message": "Explore decentralized apps"
},
"welcomeLoginDescription": {
"message": "Use your MetaMask to login to decentralized apps - no signup needed."
},
"welcomeLoginTitle": {
"message": "Say hello to your wallet"
},
"welcomeToMetaMask": {
"message": "Let's get started"
},
"welcomeToMetaMaskIntro": {
"message": "Trusted by millions, MetaMask is a secure wallet making the world of web3 accessible to all."
},
"whatsNew": {
"message": "What's new",
"description": "This is the title of a popup that gives users notifications about new features and updates to MetaMask."

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "Si alguna vez cambia de explorador o de equipo, necesitará esta frase secreta de recuperación para acceder a sus cuentas. Guárdela en un lugar seguro y secreto."
},
"revealSeedWordsTitle": {
"message": "Frase secreta de recuperación"
},
"revealSeedWordsWarning": {
"message": "Estas palabras pueden usarse para robar todas sus cuentas."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "Buscar tokens"
},
"secretBackupPhrase": {
"message": "Frase secreta de respaldo"
},
"secretBackupPhraseDescription": {
"message": "La frase secreta de respaldo facilita la creación de una copia de seguridad y la restauración de su cuenta."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "Ver más"
},
"viewOnCustomBlockExplorer": {
"message": "Ver en $1"
},
"viewOnEtherscan": {
"message": "Ver en Etherscan"
},
"viewinExplorer": {
"message": "Ver en el explorador"
},
"visitWebSite": {
"message": "Visite nuestro sitio web"
},
"walletConnectionGuide": {
"message": "nuestra guía de conexión de la cartera de hardware"
},
"walletSeed": {
"message": "Frase secreta de recuperación"
},
"walletSeedRestore": {
"message": "Frase secreta de recuperación de la cartera"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "Si alguna vez cambia de explorador o de equipo, necesitará esta frase secreta de recuperación para acceder a sus cuentas. Guárdela en un lugar seguro y secreto."
},
"revealSeedWordsTitle": {
"message": "Frase secreta de recuperación"
},
"revealSeedWordsWarning": {
"message": "Estas palabras pueden usarse para robar todas sus cuentas."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "Buscar tokens"
},
"secretBackupPhrase": {
"message": "Frase secreta de respaldo"
},
"secretBackupPhraseDescription": {
"message": "La frase secreta de respaldo facilita la creación de una copia de seguridad y la restauración de su cuenta."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "Ver más"
},
"viewOnCustomBlockExplorer": {
"message": "Ver en $1"
},
"viewOnEtherscan": {
"message": "Ver en Etherscan"
},
"viewinExplorer": {
"message": "Ver en el explorador"
},
"visitWebSite": {
"message": "Visite nuestro sitio web"
},
"walletConnectionGuide": {
"message": "nuestra guía de conexión de la cartera de hardware"
},
"walletSeed": {
"message": "Frase secreta de recuperación"
},
"walletSeedRestore": {
"message": "Frase secreta de recuperación de la cartera"
},

@ -789,9 +789,6 @@
"revealSeedWordsDescription": {
"message": "Kui vahetate veebilehitsejat või arvutit, vajate oma kontodele ligipääsemiseks seemnefraasi. Hoidke seda turvalises ja salajases kohas."
},
"revealSeedWordsTitle": {
"message": "Seemnefraas"
},
"revealSeedWordsWarning": {
"message": "Neid sõnu saab kasutada kõigi teie kontode tühjendamiseks."
},
@ -828,9 +825,6 @@
"searchTokens": {
"message": "Lubade otsimine"
},
"secretBackupPhrase": {
"message": "Salajane varundusfraas"
},
"secretBackupPhraseDescription": {
"message": "Teie salajane varundusfraas hõlbustab konto varundamist ja taastamist."
},
@ -1117,21 +1111,9 @@
"viewContact": {
"message": "Kuva kontakt"
},
"viewOnCustomBlockExplorer": {
"message": "Vaata $1"
},
"viewOnEtherscan": {
"message": "Kuva Etherscanil"
},
"viewinExplorer": {
"message": "Kuva Exploreris"
},
"visitWebSite": {
"message": "Külastage meie veebilehte"
},
"walletSeed": {
"message": "Rahakoti seeme"
},
"welcome": {
"message": "Tere tulemast MetaMaski"
},

@ -799,9 +799,6 @@
"revealSeedWordsDescription": {
"message": "در صورتیکه شما معمولًا براوزر ها را تغییر داده یا کمپیوتر ها را انتقال میدهید، شما این عبارت آغازین را نیاز خواهید داشت تا به حساب های تان دسترسی داشته باشید. آنها را در یکجای مصؤن و مخفی نگهدارید."
},
"revealSeedWordsTitle": {
"message": "عبارت بازیاب"
},
"revealSeedWordsWarning": {
"message": "این کلمات را میتوان جهت سرقت همه حساب های تان استفاده نمود."
},
@ -838,9 +835,6 @@
"searchTokens": {
"message": "رمزیاب های جستجو"
},
"secretBackupPhrase": {
"message": "عبارت مخفی پشتیبان"
},
"secretBackupPhraseDescription": {
"message": "عبارت مخفی پشتیبان تان نسخه پشتیبان و دوباره سازی حساب را تسهیل میسازد."
},
@ -1127,21 +1121,9 @@
"viewContact": {
"message": "مشاهده تماس"
},
"viewOnCustomBlockExplorer": {
"message": "مشاهده در 1$1"
},
"viewOnEtherscan": {
"message": "مشاهده در ایترسکن"
},
"viewinExplorer": {
"message": "مشاهده در براوزر"
},
"visitWebSite": {
"message": "از وب سایت ما دیدن نمایید"
},
"walletSeed": {
"message": "بازیاب کیف"
},
"welcome": {
"message": "به MetaMask خوش آمدید"
},

@ -796,9 +796,6 @@
"revealSeedWordsDescription": {
"message": "Mikäli vaihdat jossakin vaiheessa selainta tai tietokonetta, tarvitset tämän salaustekstin tiliesi käyttämiseen. Tallenna se johonkin turvalliseen ja salaiseen paikkaan."
},
"revealSeedWordsTitle": {
"message": "Juurilause"
},
"revealSeedWordsWarning": {
"message": "Näitä sanoja voidaan käyttää kaikkien tiliesi ryöstämiseen."
},
@ -835,9 +832,6 @@
"searchTokens": {
"message": "Hae tietueita"
},
"secretBackupPhrase": {
"message": "Salainen varmuuskopiolause"
},
"secretBackupPhraseDescription": {
"message": "Salainen varmistuslauseesi tekee varmuuskopioinnista ja tilisi palauttamisesta helppoa."
},
@ -1124,21 +1118,9 @@
"viewContact": {
"message": "Näytä yhteyshenkilö"
},
"viewOnCustomBlockExplorer": {
"message": "Tarkastele kohdassa $1"
},
"viewOnEtherscan": {
"message": "Näytä Etherscanissa"
},
"viewinExplorer": {
"message": "Tarkastele Explorerissa"
},
"visitWebSite": {
"message": "Vieraile verkkosivustollamme"
},
"walletSeed": {
"message": "Lompakon siemen"
},
"welcome": {
"message": "Tervetuloa MetaMaskiin"
},

@ -1021,15 +1021,6 @@
"viewContact": {
"message": "Tingnan ang Contact"
},
"viewOnCustomBlockExplorer": {
"message": "Tingnan sa $1"
},
"viewOnEtherscan": {
"message": "Tingnan sa Etherscan"
},
"viewinExplorer": {
"message": "Tingnan sa Explorer"
},
"visitWebSite": {
"message": "Bisitahin ang aming web site"
},

@ -781,9 +781,6 @@
"revealSeedWordsDescription": {
"message": "Si jamais vous changez de navigateur ou d'ordinateur, vos aurez besoin de cette phrase seed pour accéder à vos comptes. Sauvegardez la quelque part de sûr et secret."
},
"revealSeedWordsTitle": {
"message": "Phrase Seed"
},
"revealSeedWordsWarning": {
"message": "Ces mots peuvent être utilisés pour voler tous vos comptes."
},
@ -820,9 +817,6 @@
"searchTokens": {
"message": "Rechercher des jetons"
},
"secretBackupPhrase": {
"message": "Phrase de sauvegarde secrète"
},
"secretBackupPhraseDescription": {
"message": "Votre phrase de sauvegarde secrète facilite la sauvegarde et la restauration de votre compte."
},
@ -1103,21 +1097,9 @@
"viewContact": {
"message": "Voir contact"
},
"viewOnCustomBlockExplorer": {
"message": "Afficher sur $1"
},
"viewOnEtherscan": {
"message": "Voir sur Etherscan"
},
"viewinExplorer": {
"message": "Afficher dans Explorer"
},
"visitWebSite": {
"message": "Visitez notre site web"
},
"walletSeed": {
"message": "Seed du portefeuille"
},
"welcome": {
"message": "Bienvenue dans la Beta de MetaMask"
},

@ -796,9 +796,6 @@
"revealSeedWordsDescription": {
"message": "אם בעתיד תחליף/י דפדפנים או תעביר/י מחשבים, תצטרך/י seed phrase זה כדי לקבל גישה לחשבונות שלך. יש לשמור אותם במקום בטוח וסודי."
},
"revealSeedWordsTitle": {
"message": "צירוף גרעין (Seed Phrase)"
},
"revealSeedWordsWarning": {
"message": "במילים אלה עלול להיעשות שימוש כדי לגנוב את כל חשבונותיך."
},
@ -832,9 +829,6 @@
"searchTokens": {
"message": "חיפוש טוקנים"
},
"secretBackupPhrase": {
"message": "צירוף מילים סודי לגיבוי"
},
"secretBackupPhraseDescription": {
"message": "עם צירוף מילים סודי לגיבוי קל יותר לגבות ולשחזר את החשבון שלך."
},
@ -1121,21 +1115,9 @@
"viewContact": {
"message": "הצג איש קשר"
},
"viewOnCustomBlockExplorer": {
"message": "הצג ב- $1"
},
"viewOnEtherscan": {
"message": "הצג ב-Etherscan"
},
"viewinExplorer": {
"message": "הצג באקספלורר"
},
"visitWebSite": {
"message": "בקר/י באתר שלנו"
},
"walletSeed": {
"message": "גרעין (Seed) ארנק"
},
"welcome": {
"message": "ברוכים הבאים ל- MetaMask"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "यदि आप कभउजर बदलतटर कतरित करत, त आपक अपन तक पहचनिए इस गत रिकवर आवशयकत। उन कहरकित और गपनय तर सह।"
},
"revealSeedWordsTitle": {
"message": "गत रिकवर"
},
"revealSeedWordsWarning": {
"message": "इन शब उपयग आपक सभिए कि सकत।"
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "टकन ख"
},
"secretBackupPhrase": {
"message": "गत बकअप वश"
},
"secretBackupPhraseDescription": {
"message": "आपकत बकअप वश आपककअप ल और पनरित करन आसन बन।"
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "और द"
},
"viewOnCustomBlockExplorer": {
"message": "$1 पर द"
},
"viewOnEtherscan": {
"message": "Etherscan पर द"
},
"viewinExplorer": {
"message": "एकसपरर म"
},
"visitWebSite": {
"message": "हमबसइट पर ज"
},
"walletConnectionGuide": {
"message": "हमडवयर वट कनशन गइड"
},
"walletSeed": {
"message": "गत रिकवर"
},
"walletSeedRestore": {
"message": "वट कत रिकवर"
},

@ -792,9 +792,6 @@
"revealSeedWordsDescription": {
"message": "Ako ikada promijenite preglednike ili računala, trebate ovu početnu rečenicu za pristupanje svojim računima. Spremite ih negdje na sigurno i tajno mjesto."
},
"revealSeedWordsTitle": {
"message": "Početna rečenica"
},
"revealSeedWordsWarning": {
"message": "Ove se riječi mogu upotrijebiti za krađu vaših računa."
},
@ -831,9 +828,6 @@
"searchTokens": {
"message": "Pretraži tokene"
},
"secretBackupPhrase": {
"message": "Alternativna tajna rečenica"
},
"secretBackupPhraseDescription": {
"message": "Vašom se alternativnom tajnom rečenicom jednostavno sigurnosno kopira i obnavlja vaš račun."
},
@ -1117,21 +1111,9 @@
"viewContact": {
"message": "Prikaži kontakt"
},
"viewOnCustomBlockExplorer": {
"message": "Prikaži u $1"
},
"viewOnEtherscan": {
"message": "Prikaži na Etherscanu"
},
"viewinExplorer": {
"message": "Prikaži u Exploreru"
},
"visitWebSite": {
"message": "Posjetite naše mrežno mjesto"
},
"walletSeed": {
"message": "Početni novčanik"
},
"welcome": {
"message": "Dobro došli u uslugu MetaMask"
},

@ -492,9 +492,6 @@
"revealSeedWordsDescription": {
"message": "Si ou pa janm chanje navigatè ou deplase òdinatè, ou pral bezwen fraz seed la pou ka gen aksè a kont ou. Sere yo on kote an sekirite e an sekrè."
},
"revealSeedWordsTitle": {
"message": "Seed Fraz"
},
"revealSeedWordsWarning": {
"message": "Yo ka itilize mo sa pou vòlè kont ou."
},
@ -688,15 +685,9 @@
"viewAccount": {
"message": "Wè Kont"
},
"viewOnEtherscan": {
"message": "Wè sou Etherscan"
},
"visitWebSite": {
"message": "Vizite sit entènèt nou an"
},
"walletSeed": {
"message": "Bous Seed"
},
"welcome": {
"message": "Byenveni nan MetaMask"
},

@ -792,9 +792,6 @@
"revealSeedWordsDescription": {
"message": "Ha valamikor böngészőt váltasz, vagy számítógépet cserélsz, a fiókjaid használatához szükséged lesz erre a kulcsszóláncra. Őrizd őket egy biztonságos és titkos helyen."
},
"revealSeedWordsTitle": {
"message": "Kulcsszólánc"
},
"revealSeedWordsWarning": {
"message": "Ezekkel a szavakkal ellophatóak a fiókjai."
},
@ -831,9 +828,6 @@
"searchTokens": {
"message": "Keresés a tokenek között"
},
"secretBackupPhrase": {
"message": "Titkos biztonsági kifejezés "
},
"secretBackupPhraseDescription": {
"message": "Titkos biztonsági szókapcsolatoddal könnyedén készíthetsz biztonsági mentést és helyreállíthatod fiókodat."
},
@ -1117,21 +1111,9 @@
"viewContact": {
"message": "Névjegy megtekintése"
},
"viewOnCustomBlockExplorer": {
"message": "Megtekintés $1-kor"
},
"viewOnEtherscan": {
"message": "Nézze meg Etherscanen"
},
"viewinExplorer": {
"message": "Megtekintés Explorerben"
},
"visitWebSite": {
"message": "Látogass el weboldalunkra"
},
"walletSeed": {
"message": "Pénztárca kulcsszólánca"
},
"welcome": {
"message": "Üdvözöljük a MetaMaskban"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "Jika Anda pernah mengubah browser atau mengganti komputer, Anda akan memerlukan Frasa Pemulihan Rahasia ini untuk mengakses akun Anda. Simpan di tempat yang aman dan rahasia."
},
"revealSeedWordsTitle": {
"message": "Frasa Pemulihan Rahasia"
},
"revealSeedWordsWarning": {
"message": "Kata-kata ini dapat digunakan untuk mencuri semua akun Anda."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "Cari Token"
},
"secretBackupPhrase": {
"message": "Frasa Cadangan Rahasia"
},
"secretBackupPhraseDescription": {
"message": "Frasa cadangan rahasia Anda memudahkan untuk mencadangkan dan memulihkan akun Anda."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "Lihat Selengkapnya"
},
"viewOnCustomBlockExplorer": {
"message": "Lihat di $1"
},
"viewOnEtherscan": {
"message": "Lihat di Etherscan"
},
"viewinExplorer": {
"message": "Lihat di Explorer"
},
"visitWebSite": {
"message": "Kunjungi situs web kami"
},
"walletConnectionGuide": {
"message": "panduan koneksi dompet perangkat keras kami"
},
"walletSeed": {
"message": "Frasa Pemulihan Rahasia"
},
"walletSeedRestore": {
"message": "Frasa Pemulihan Rahasia Dompet"
},

@ -1253,9 +1253,6 @@
"revealSeedWordsDescription": {
"message": "Se cambierai browser o computer, ti servirà questa frase seed per accedere ai tuoi account. Salvala in un posto sicuro e segreto."
},
"revealSeedWordsTitle": {
"message": "Frase Seed"
},
"revealSeedWordsWarning": {
"message": "Non ripristinare la tua frase seed in pubblico!. Queste parole possono essere usate per rubare il tuo account."
},
@ -1298,9 +1295,6 @@
"searchTokens": {
"message": "Cerca Tokens"
},
"secretBackupPhrase": {
"message": "Frase di Backup Segreta"
},
"secretBackupPhraseDescription": {
"message": "La tua frase di backup segreta rende facile fare il backup e ripristinare il tuo account."
},
@ -1947,24 +1941,12 @@
"viewContact": {
"message": "Visualizza contatto"
},
"viewOnCustomBlockExplorer": {
"message": "Vedi su $1"
},
"viewOnEtherscan": {
"message": "Vedi su Etherscan"
},
"viewinExplorer": {
"message": "Vista in Explorer"
},
"visitWebSite": {
"message": "Visita il nostro sito web"
},
"walletConnectionGuide": {
"message": "la nostra guida al collegamento del portafoglio hardware"
},
"walletSeed": {
"message": "Seed del Portafoglio"
},
"web3ShimUsageNotification": {
"message": "Abbiamo notato che il sito corrente ha provato ad usare la API window.web3 rimossa. Se il sito ti sembra non funzionare, clicca $1 per più informazioni.",
"description": "$1 is a clickable link."

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "ブラウザーを変更した場合や、コンピューターを移動した場合は、自分のアカウントにアクセスするためにこのシークレット リカバリー フレーズが必要になります。安全で秘密の場所に保管してください。"
},
"revealSeedWordsTitle": {
"message": "シークレット リカバリー フレーズ"
},
"revealSeedWordsWarning": {
"message": "これらの単語を使用すると、すべてのアカウントを窃取することができます。"
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "トークンの検索"
},
"secretBackupPhrase": {
"message": "秘密のバックアップ フレーズ"
},
"secretBackupPhraseDescription": {
"message": "秘密のバックアップ フレーズを使用すると、アカウントのバックアップと復元が容易になります。"
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "詳細を表示"
},
"viewOnCustomBlockExplorer": {
"message": "$1 に表示"
},
"viewOnEtherscan": {
"message": "Etherscan で表示"
},
"viewinExplorer": {
"message": "Explorer で表示"
},
"visitWebSite": {
"message": "当社の Web サイトにアクセス"
},
"walletConnectionGuide": {
"message": "当社のハードウェア ウォレット接続ガイド"
},
"walletSeed": {
"message": "シークレット リカバリー フレーズ"
},
"walletSeedRestore": {
"message": "ウォレット シークレット リカバリー フレーズ"
},

@ -799,9 +799,6 @@
"revealSeedWordsDescription": {
"message": "ನಸರಗಳನ ಬದಲಿಿದರ ಅಥವಟರಗಳನ ಸರಿಿದರ, ನಿಮ ಖಗಳನರವಿಸಲಿಮಗ ಈ ಸಗಳ ಅಗತಯವಿತದ. ಅವಗಳನ ಎಲಿದರರಕಿತವಿ ಮತ ರಹಸಯವಿ ಉಳಿಿ."
},
"revealSeedWordsTitle": {
"message": "ಸ"
},
"revealSeedWordsWarning": {
"message": "ಈ ಪದಗಳನಿಮ ಎಲಗಳನ ಕದಿಯಲ ಬಳಸಬಹ."
},
@ -838,9 +835,6 @@
"searchTokens": {
"message": "ಟಕನಗಳನಿ"
},
"secretBackupPhrase": {
"message": "ರಹಸಯ ಬಕಪ"
},
"secretBackupPhraseDescription": {
"message": "ನಿಮ ಖಯನ ಅಪ ಮತ ಮರಿದನಿಮ ರಹಸಯ ಬಕಪಲಭವಿತದ."
},
@ -1127,21 +1121,9 @@
"viewContact": {
"message": "ಸಪರಕವನಿಿ"
},
"viewOnCustomBlockExplorer": {
"message": "$1 ನಲಿಿಿ"
},
"viewOnEtherscan": {
"message": "ಎಥನಲಿಿಿ"
},
"viewinExplorer": {
"message": "ಎಕರರನಲಿಿಿ"
},
"visitWebSite": {
"message": "ನಮಮ ವ ಅನಿಿ"
},
"walletSeed": {
"message": "ವ"
},
"welcome": {
"message": "MetaMask ಗಗತ"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "브라우저를 변경하거나 컴퓨터를 옮긴 경우, 계정에 액세스하려면 이 비밀 복구 구문이 필요합니다. 기밀이 보장된 안전한 곳에 보관하세요."
},
"revealSeedWordsTitle": {
"message": "비밀 복구 구문"
},
"revealSeedWordsWarning": {
"message": "이 구문은 계정 전체를 도용하는 데 사용될 수 있습니다."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "토큰 검색"
},
"secretBackupPhrase": {
"message": "비밀 백업 구문"
},
"secretBackupPhraseDescription": {
"message": "비밀 백업 구문을 이용하면 계정을 쉽게 백업하고 복구할 수 있습니다."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "더 보기"
},
"viewOnCustomBlockExplorer": {
"message": "$1에서 보기"
},
"viewOnEtherscan": {
"message": "Etherscan에서 보기"
},
"viewinExplorer": {
"message": "탐색기에서 보기"
},
"visitWebSite": {
"message": "당사 웹사이트 방문하기"
},
"walletConnectionGuide": {
"message": "당사의 하드웨어 지갑 연결 가이드"
},
"walletSeed": {
"message": "비밀 복구 구문"
},
"walletSeedRestore": {
"message": "지갑 비밀 복구 구문"
},

@ -799,9 +799,6 @@
"revealSeedWordsDescription": {
"message": "Jei imsite naudotis kita naršykle arba kitu kompiuteriu, šios atkūrimo frazės jums reikės paskyroms pasiekti. Saugokite ją saugioje ir slaptoje vietoje."
},
"revealSeedWordsTitle": {
"message": "Atkūrimo frazė"
},
"revealSeedWordsWarning": {
"message": "Šiuos žodžius galima panaudoti visoms jūsų paskyroms pavogti."
},
@ -838,9 +835,6 @@
"searchTokens": {
"message": "Ieškoti žetonų"
},
"secretBackupPhrase": {
"message": "Slapta atsarginė frazė"
},
"secretBackupPhraseDescription": {
"message": "Jūsų slapta atsarginė frazė leidžia paprastai padaryti paskyros atsarginę kopiją ir ją atkurti,"
},
@ -1127,21 +1121,9 @@
"viewContact": {
"message": "Peržiūrėti kontaktą"
},
"viewOnCustomBlockExplorer": {
"message": "Peržiūrėti $1"
},
"viewOnEtherscan": {
"message": "Peržiūrėti „Etherscan“"
},
"viewinExplorer": {
"message": "Peržiūrėti naršyklėje"
},
"visitWebSite": {
"message": "Apsilankykite mūsų svetainėje"
},
"walletSeed": {
"message": "Slaptažodinės atkūrimo frazė"
},
"welcome": {
"message": "Sveiki, tai „MetaMask“"
},

@ -795,9 +795,6 @@
"revealSeedWordsDescription": {
"message": "Ja mainīsiet pārlūku vai datoru, jūsu kontu piekļuvei būs nepieciešama šī atkopšanas frāze. Saglabājiet to drošā un slepenā vietā!"
},
"revealSeedWordsTitle": {
"message": "Atkopšanas frāze"
},
"revealSeedWordsWarning": {
"message": "Šos vārdus var izmantot visu jūsu kontu nolaupīšanai."
},
@ -834,9 +831,6 @@
"searchTokens": {
"message": "Meklēt marķierus"
},
"secretBackupPhrase": {
"message": "Slepenā rezerves frāze"
},
"secretBackupPhraseDescription": {
"message": "Ar slepeno atgūšanas frāzi ir vieglāk dublēt un atjaunot kontu."
},
@ -1123,21 +1117,9 @@
"viewContact": {
"message": "Skatīt līgumu"
},
"viewOnCustomBlockExplorer": {
"message": "Skatīt $1"
},
"viewOnEtherscan": {
"message": "Skatīt Etherscan"
},
"viewinExplorer": {
"message": "Skatīt Explorer"
},
"visitWebSite": {
"message": "Apmeklējiet mūsu tīmekļa vietni"
},
"walletSeed": {
"message": "Maka atkopšanas frāze"
},
"welcome": {
"message": "Laipni lūgti MetaMask"
},

@ -776,9 +776,6 @@
"revealSeedWordsDescription": {
"message": "Jika anda pernah menukar pelayar atau berpindah komputer, anda memerlukan ungkapan benih ini untuk mengakses akaun anda. Simpan ungkapan di tempat yang selamat dan rahsia."
},
"revealSeedWordsTitle": {
"message": "Frasa Benih"
},
"revealSeedWordsWarning": {
"message": "Perkataan ini boleh digunakan untuk mencuri kesemua akaun anda."
},
@ -815,9 +812,6 @@
"searchTokens": {
"message": "Cari Token"
},
"secretBackupPhrase": {
"message": "Ungkapan Sandaran Rahsia"
},
"secretBackupPhraseDescription": {
"message": "Ungkapan rahsia sandaran anda memudahkan membuat sandaran dan memulihkan akaun anda."
},
@ -1101,21 +1095,9 @@
"viewContact": {
"message": "Lihat Kenalan"
},
"viewOnCustomBlockExplorer": {
"message": "Lihat pada $1"
},
"viewOnEtherscan": {
"message": "Lihat di Etherscan"
},
"viewinExplorer": {
"message": "Lihat di Explorer"
},
"visitWebSite": {
"message": "Kunjungi laman web kami"
},
"walletSeed": {
"message": "Benih Dompet"
},
"welcome": {
"message": "Selamat datang ke MetaMask"
},

@ -786,9 +786,6 @@
"revealSeedWordsDescription": {
"message": "Hvis du noen gang bytter nettlesere eller flytter datamaskiner, trenger du denne mnemoniske gjenopprettingsfrasen for å få tilgang til kontoene dine. Lagre dem på et trygt og hemmelig sted."
},
"revealSeedWordsTitle": {
"message": "Mnemonisk gjenopprettingsfrase"
},
"revealSeedWordsWarning": {
"message": "Disse ordene kan brukes for å stjele alle kontoene dine. "
},
@ -822,9 +819,6 @@
"searchTokens": {
"message": "Søk i sjetonger"
},
"secretBackupPhrase": {
"message": "Hemmelig sikkerhetskopifrase "
},
"secretBackupPhraseDescription": {
"message": "Den hemmelige gjenopprettingsfrasen din gjør det enkelt å sikkerhetskopiere og gjenopprette kontoen din."
},
@ -1102,21 +1096,9 @@
"viewContact": {
"message": "Se kontrakt"
},
"viewOnCustomBlockExplorer": {
"message": "Vis ved $1 "
},
"viewOnEtherscan": {
"message": "Vis på Etherscan "
},
"viewinExplorer": {
"message": "Se i Explorer"
},
"visitWebSite": {
"message": "Besøk nettsiden vår "
},
"walletSeed": {
"message": "Lommebok med mnemonisk gjenopprettingsfrase"
},
"welcome": {
"message": "Velkommen til MetaMask"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "Kung magpapalit ka man ng browser o computer, kakailanganin mo ang Secret Recovery Phrase na ito para ma-access ang iyong mga account. I-save ang mga iyon sa isang ligtas at sikretong lugar."
},
"revealSeedWordsTitle": {
"message": "Secret Recovery Phrase"
},
"revealSeedWordsWarning": {
"message": "Magagamit ang mga salitang ito para manakaw ang lahat ng iyong account."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "Maghanap ng Mga Token"
},
"secretBackupPhrase": {
"message": "Lihim na Phrase sa Pag-back up"
},
"secretBackupPhraseDescription": {
"message": "Pinapadali ng iyong lihim na phrase sa pag-back up na i-back up at i-restore ang iyong account."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "Tumingin Pa"
},
"viewOnCustomBlockExplorer": {
"message": "Tingnan sa $1"
},
"viewOnEtherscan": {
"message": "Tingnan sa Etherscan"
},
"viewinExplorer": {
"message": "Tingnan sa Explorer"
},
"visitWebSite": {
"message": "Bisitahin ang aming website"
},
"walletConnectionGuide": {
"message": "ang aming gabay sa pagkonekta ng hardware wallet"
},
"walletSeed": {
"message": "Secret Recovery Phrase"
},
"walletSeedRestore": {
"message": "Recovery Phrase ng Wallet Secret"
},

@ -793,9 +793,6 @@
"revealSeedWordsDescription": {
"message": "Jeśli kiedyś zmienisz przeglądarkę lub komputer, będziesz potrzebować tej frazy seed, żeby dostać się do swoich kont. Zapisz ją w bezpiecznym miejscu."
},
"revealSeedWordsTitle": {
"message": "Fraza seed"
},
"revealSeedWordsWarning": {
"message": "Te słowa mogą być użyte żeby ukraść Twoje konta."
},
@ -832,9 +829,6 @@
"searchTokens": {
"message": "Szukaj tokenów"
},
"secretBackupPhrase": {
"message": "Tajna fraza zapasowa"
},
"secretBackupPhraseDescription": {
"message": "Twoja tajna fraza zapasowa ułatwia tworzenie kopii zapasowych i przywracanie konta."
},
@ -1115,21 +1109,9 @@
"viewContact": {
"message": "Wyświetl kontakt"
},
"viewOnCustomBlockExplorer": {
"message": "Wyświetl w $1"
},
"viewOnEtherscan": {
"message": "Zobacz na Etherscan"
},
"viewinExplorer": {
"message": "Wyświetl w przeglądarce"
},
"visitWebSite": {
"message": "Odwiedź naszą stronę"
},
"walletSeed": {
"message": "Seed portfela"
},
"welcome": {
"message": "Witaj w MetaMask"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "Se você alguma vez mudou de navegador ou trocou de computador, precisará dessa Frase de recuperação secreta para acessar suas contas. Salve-as em um lugar seguro e secreto."
},
"revealSeedWordsTitle": {
"message": "Frase de recuperação secreta"
},
"revealSeedWordsWarning": {
"message": "Essas palavras podem ser usadas para roubar todas as suas contas."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "Buscar tokens"
},
"secretBackupPhrase": {
"message": "Frase secreta de backup"
},
"secretBackupPhraseDescription": {
"message": "Sua frase secreta de backup facilita fazer o backup e a restauração da sua conta."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "Exibir Mais"
},
"viewOnCustomBlockExplorer": {
"message": "Exibir em $1"
},
"viewOnEtherscan": {
"message": "Exibir no Etherscan"
},
"viewinExplorer": {
"message": "Exibir no Explorer"
},
"visitWebSite": {
"message": "Visite nosso website"
},
"walletConnectionGuide": {
"message": "nosso guia de conexão com a carteira de hardware"
},
"walletSeed": {
"message": "Frase de recuperação secreta"
},
"walletSeedRestore": {
"message": "Frase de recuperação secreta da carteira"
},

@ -786,9 +786,6 @@
"revealSeedWordsDescription": {
"message": "Dacă schimbați vreodată browserele sau vă mutați la alt computer, veți avea nevoie de această expresie sursă pentru a vă accesa conturile. Salvați-o într-un loc sigur și secret."
},
"revealSeedWordsTitle": {
"message": "Expresie sursă"
},
"revealSeedWordsWarning": {
"message": "Aceste cuvinte pot fi folosite pentru a vă fura toate conturile."
},
@ -825,9 +822,6 @@
"searchTokens": {
"message": "Căutați token-uri"
},
"secretBackupPhrase": {
"message": "Expresia secretă de rezervă"
},
"secretBackupPhraseDescription": {
"message": "Expresia dvs. secretă de rezervă înlesnește crearea unei copii de rezervă a contului dvs. și restabilirea acestuia."
},
@ -1108,21 +1102,9 @@
"viewContact": {
"message": "Vizualizare contact"
},
"viewOnCustomBlockExplorer": {
"message": "Vizualizați la $1"
},
"viewOnEtherscan": {
"message": "Vizualizați pe Etherscan"
},
"viewinExplorer": {
"message": "Vizualizare în Explorator"
},
"visitWebSite": {
"message": "Accesați site-ul nostru"
},
"walletSeed": {
"message": "Sursă portofel"
},
"welcome": {
"message": "Bun venit la MetaMask"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "Если вы меняете браузер или переходите на другой компьютер, вам понадобится эта секретная фраза восстановления для доступа к своим счетам. Сохраните ее в безопасном секретном месте."
},
"revealSeedWordsTitle": {
"message": "Секретная фраза восстановления"
},
"revealSeedWordsWarning": {
"message": "Эти слова можно использовать для кражи всех ваших счетов."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "Поиск токенов"
},
"secretBackupPhrase": {
"message": "Секретная резервная фраза"
},
"secretBackupPhraseDescription": {
"message": "Ваша секретная резервная фраза упрощает резервное копирование и восстановление вашего счета."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "Посмотреть больше"
},
"viewOnCustomBlockExplorer": {
"message": "Посмотреть на $1"
},
"viewOnEtherscan": {
"message": "Посмотреть на Etherscan"
},
"viewinExplorer": {
"message": "Проводник в проводнике"
},
"visitWebSite": {
"message": "Посетите наш веб-сайт"
},
"walletConnectionGuide": {
"message": "наше руководство по подключению аппаратного кошелька"
},
"walletSeed": {
"message": "Секретная фраза восстановления"
},
"walletSeedRestore": {
"message": "Секретная фраза восстановления кошелька"
},

@ -768,9 +768,6 @@
"revealSeedWordsDescription": {
"message": "Ak niekedy zmeníte prehliadač alebo presuniete počítače, budete potrebovať túto seed frázu na prístup k svojim účtom. Uložte ich niekde v bezpečí a v tajnosti."
},
"revealSeedWordsTitle": {
"message": "Seed fráza"
},
"revealSeedWordsWarning": {
"message": "Nebnovujte slova klíčové fráze na veřejnosti! Tato slova mohou být použita k odcizení veškerých vyašich účtů."
},
@ -801,9 +798,6 @@
"searchTokens": {
"message": "Hledat tokeny"
},
"secretBackupPhrase": {
"message": "Tajná backup fráza"
},
"secretBackupPhraseDescription": {
"message": "Vaša tajná backup fráza uľahčuje zálohovanie a obnovenie vášho účtu."
},
@ -1084,21 +1078,9 @@
"viewContact": {
"message": "Zobraziť kontakt"
},
"viewOnCustomBlockExplorer": {
"message": "Zobraziť na $1"
},
"viewOnEtherscan": {
"message": "Zobraziť na Etherscan"
},
"viewinExplorer": {
"message": "Zobraziť v Exploreri"
},
"visitWebSite": {
"message": "Navštivte naši stránku"
},
"walletSeed": {
"message": "Klíčová fráze peněženky"
},
"welcome": {
"message": "Vitajte v MetaMask"
},

@ -823,9 +823,6 @@
"searchTokens": {
"message": "Iskanje žetonov"
},
"secretBackupPhrase": {
"message": "Skrivno geslo za varnostno kopiranje"
},
"secretBackupPhraseDescription": {
"message": "Vaše skrivno geslo za varnostno kopiranje olajša varnostno kopiranje in obnovitev računa."
},
@ -1112,15 +1109,6 @@
"viewContact": {
"message": "Ogled stika"
},
"viewOnCustomBlockExplorer": {
"message": "Ogled na $1 "
},
"viewOnEtherscan": {
"message": "Poglej na Etherscan"
},
"viewinExplorer": {
"message": "Ogled v Explorerju"
},
"visitWebSite": {
"message": "Obiščite našo spletno stran"
},

@ -790,9 +790,6 @@
"revealSeedWordsDescription": {
"message": "Ukoliko ikad promenite pregledač ili kompjuter, trebaće vam ova šifra za oporavak naloga (seed phrase) kako biste pristupili svojim nalozima. Čuvajte je na bezbednom i tajnom mestu."
},
"revealSeedWordsTitle": {
"message": "Seed fraza"
},
"revealSeedWordsWarning": {
"message": "Ove reči se mogu iskoristiti za krađu svih vaših naloga."
},
@ -829,9 +826,6 @@
"searchTokens": {
"message": "Pretražite tokene"
},
"secretBackupPhrase": {
"message": "Tajna rezervna kopija fraze"
},
"secretBackupPhraseDescription": {
"message": "Vaša tajna fraza za rezervnu kopiju olakšava pravljenje rezervne kopije i vraćanje naloga u prethodno stanje."
},
@ -1112,21 +1106,9 @@
"viewContact": {
"message": "Pogledaj kontakt"
},
"viewOnCustomBlockExplorer": {
"message": "Pogledaj na $1"
},
"viewOnEtherscan": {
"message": "Pogledaj na Etherscan-u"
},
"viewinExplorer": {
"message": "Pogledati u Explorer-u"
},
"visitWebSite": {
"message": "Posetite našu veb lokaciju"
},
"walletSeed": {
"message": "Šifra za oporavak novčanika"
},
"welcome": {
"message": "Dobro došli na MetaMask"
},

@ -783,9 +783,6 @@
"revealSeedWordsDescription": {
"message": "Om du någonsin byter webbläsare eller dator kommer du behöva denna"
},
"revealSeedWordsTitle": {
"message": "Seed phrase"
},
"revealSeedWordsWarning": {
"message": "De här orden kan användas för att stjäla alla dina konton."
},
@ -822,9 +819,6 @@
"searchTokens": {
"message": "Sök tokens"
},
"secretBackupPhrase": {
"message": "Hemlig återställningsfras"
},
"secretBackupPhraseDescription": {
"message": "Din hemliga backup-fras gör det enkelt att säkerhetskopiera och återställa ditt konto."
},
@ -1102,21 +1096,9 @@
"viewContact": {
"message": "Visa kontakt"
},
"viewOnCustomBlockExplorer": {
"message": "Visa vid $1"
},
"viewOnEtherscan": {
"message": "Visa på Etherscan"
},
"viewinExplorer": {
"message": "Visa i Utforskaren"
},
"visitWebSite": {
"message": "Besök vår hemsida"
},
"walletSeed": {
"message": "Plånboksseed"
},
"welcome": {
"message": "Välkommen till MetaMask"
},

@ -777,9 +777,6 @@
"revealSeedWordsDescription": {
"message": "Ikiwa utabadilisha kisakuzi au kuhamisha kompyuta, utahitaji kirai hiki kianzio ili kufikia akaunti zako. Vihifadhi mahali fulani ambapo ni salamana pa siri."
},
"revealSeedWordsTitle": {
"message": "Kiari Kianzio"
},
"revealSeedWordsWarning": {
"message": "Maneno haya yanaweza kutumika kuiba akanti zako zote."
},
@ -816,9 +813,6 @@
"searchTokens": {
"message": "Tafuta Vianzio"
},
"secretBackupPhrase": {
"message": "Kirai cha Siri cha Hifadhi Mbadala"
},
"secretBackupPhraseDescription": {
"message": "Kirai chako cha siri cha hifadhi mbadala kinafanya iwe rahisi kuhifadhi kwa njia mbadala na kurejesha akaunti yako."
},
@ -1105,21 +1099,9 @@
"viewContact": {
"message": "Tazama Mawasiliano"
},
"viewOnCustomBlockExplorer": {
"message": "Tazama kwenye $1"
},
"viewOnEtherscan": {
"message": "Tazama kwenye Etherscan"
},
"viewinExplorer": {
"message": "Tazama kwenye Explorer"
},
"visitWebSite": {
"message": "Tembelea Tovuti yetu"
},
"walletSeed": {
"message": "Kianzio cha Waleti"
},
"welcome": {
"message": "Karibu kwenye MetaMask"
},

@ -520,9 +520,6 @@
"visitWebSite": {
"message": "எஙகள வலதளதிடவ"
},
"walletSeed": {
"message": "வி"
},
"welcome": {
"message": "ம வரக"
},

@ -1244,9 +1244,6 @@
"revealSeedWordsDescription": {
"message": "Kung magpapalit ka man ng browser o computer, kakailanganin mo ang Secret Recovery Phrase na ito para ma-access ang iyong mga account. I-save ang mga iyon sa isang ligtas at sikretong lugar."
},
"revealSeedWordsTitle": {
"message": "Secret Recovery Phrase"
},
"revealSeedWordsWarning": {
"message": "Magagamit ang mga salitang ito para manakaw ang lahat ng iyong account."
},
@ -1289,9 +1286,6 @@
"searchTokens": {
"message": "Maghanap ng Mga Token"
},
"secretBackupPhrase": {
"message": "Lihim na Phrase sa Pag-back up"
},
"secretBackupPhraseDescription": {
"message": "Pinapadali ng iyong lihim na phrase sa pag-back up na i-back up at i-restore ang iyong account."
},
@ -1900,24 +1894,12 @@
"viewContact": {
"message": "Tingnan ang Contact"
},
"viewOnCustomBlockExplorer": {
"message": "Tingnan sa $1"
},
"viewOnEtherscan": {
"message": "Tingnan sa Etherscan"
},
"viewinExplorer": {
"message": "Tingnan sa Explorer"
},
"visitWebSite": {
"message": "Bisitahin ang aming website"
},
"walletConnectionGuide": {
"message": "ang aming gabay sa pagkonekta ng hardware wallet"
},
"walletSeed": {
"message": "Secret Recovery Phrase"
},
"walletSeedRestore": {
"message": "Recovery Phrase ng Wallet Secret"
},

@ -454,9 +454,6 @@
"visitWebSite": {
"message": "Web sitemizi ziyaret edin"
},
"walletSeed": {
"message": "Cüzdan Kaynağı"
},
"welcome": {
"message": "MetaMask'ya Hoşgeldiniz"
},

@ -799,9 +799,6 @@
"revealSeedWordsDescription": {
"message": "При зміні браузера або комп'ютера, вам знадобиться seed-фраза для отримання доступу до ваших облікових записів. Збережіть її у надійному місці."
},
"revealSeedWordsTitle": {
"message": "Мнемонічна фраза"
},
"revealSeedWordsWarning": {
"message": "Ці слова можуть бути використані, щоб вкрасти всі ваші облікові записи."
},
@ -838,9 +835,6 @@
"searchTokens": {
"message": "Шукати токени"
},
"secretBackupPhrase": {
"message": "Секретна резервна фраза"
},
"secretBackupPhraseDescription": {
"message": "Ваша секретна резервна фраза дозволяє легко створити резервну копію та відновити обліковий запис."
},
@ -1127,21 +1121,9 @@
"viewContact": {
"message": "Переглянути контакт"
},
"viewOnCustomBlockExplorer": {
"message": "Дивитись на $1"
},
"viewOnEtherscan": {
"message": "Дивитись на Etherscan"
},
"viewinExplorer": {
"message": "Дивитись в Explorer"
},
"visitWebSite": {
"message": "Відвідайте наш веб-сайт"
},
"walletSeed": {
"message": "Seed гаманця"
},
"welcome": {
"message": "Ласкаво просимо до MetaMask"
},

@ -1527,9 +1527,6 @@
"revealSeedWordsDescription": {
"message": "Nếu thay đổi trình duyệt hoặc chuyển máy tính, bạn sẽ cần Cụm mật khẩu khôi phục bí mật này để truy cập tài khoản của mình. Hãy lưu Cụm mật khẩu khôi phục bí mật này ở nơi an toàn và bí mật."
},
"revealSeedWordsTitle": {
"message": "Cụm mật khẩu khôi phục bí mật"
},
"revealSeedWordsWarning": {
"message": "Kẻ xấu có thể dùng các từ này để đánh cắp tất cả các tài khoản của bạn."
},
@ -1572,9 +1569,6 @@
"searchTokens": {
"message": "Tìm kiếm token"
},
"secretBackupPhrase": {
"message": "Cụm mật khẩu sao lưu bí mật"
},
"secretBackupPhraseDescription": {
"message": "Cụm mật khẩu sao lưu bí mật giúp việc sao lưu và khôi phục tài khoản trở nên dễ dàng."
},
@ -2386,24 +2380,12 @@
"viewMore": {
"message": "Xem thêm"
},
"viewOnCustomBlockExplorer": {
"message": "Xem tại $1"
},
"viewOnEtherscan": {
"message": "Xem trên Etherscan"
},
"viewinExplorer": {
"message": "Xem trên trình khám phá"
},
"visitWebSite": {
"message": "Truy cập trang web của chúng tôi"
},
"walletConnectionGuide": {
"message": "hướng dẫn của chúng tôi về cách kết nối ví cứng"
},
"walletSeed": {
"message": "Cụm mật khẩu khôi phục bí mật"
},
"walletSeedRestore": {
"message": "Cụm mật khẩu khôi phục bí mật của ví"
},

@ -1247,9 +1247,6 @@
"revealSeedWordsDescription": {
"message": "如果您更换浏览器或计算机,则需要使用此账户助记词访问您的帐户。请将它们保存在安全秘密的地方。"
},
"revealSeedWordsTitle": {
"message": "账户助记词"
},
"revealSeedWordsWarning": {
"message": "该账户助记词可以用来窃取您的所有帐户"
},
@ -1292,9 +1289,6 @@
"searchTokens": {
"message": "搜索代币"
},
"secretBackupPhrase": {
"message": "账户助记词"
},
"secretBackupPhraseDescription": {
"message": "您的账户助记词可以帮助您轻松备份和恢复个人账户。"
},
@ -1924,24 +1918,12 @@
"viewContact": {
"message": "查看联系人"
},
"viewOnCustomBlockExplorer": {
"message": "在 $1 查看"
},
"viewOnEtherscan": {
"message": "在 Etherscan(以太坊浏览器)上查看"
},
"viewinExplorer": {
"message": "在浏览器中查看"
},
"visitWebSite": {
"message": "访问我们的网站"
},
"walletConnectionGuide": {
"message": "我们的硬件钱包连接指南"
},
"walletSeed": {
"message": "账户助记词"
},
"web3ShimUsageNotification": {
"message": "我们发现当前的网站尝试使用已经删除的 window.web3 API。如果这个网站网站已经无法正常使用,请点击 $1 获取更多信息。",
"description": "$1 is a clickable link."

@ -793,9 +793,6 @@
"revealSeedWordsDescription": {
"message": "若想在不同瀏覽器或電腦登入,將需要使用助憶詞還原帳戶資訊。請妥善並安全的保管您的助憶詞。"
},
"revealSeedWordsTitle": {
"message": "助憶詞"
},
"revealSeedWordsWarning": {
"message": "絕對不要在公共場合輸入助憶詞!這可被用來竊取您的帳戶。"
},
@ -832,9 +829,6 @@
"searchTokens": {
"message": "搜尋代幣"
},
"secretBackupPhrase": {
"message": "助憶詞"
},
"secretBackupPhraseDescription": {
"message": "助憶詞將可協助您用更簡單的方式備份帳戶資訊。"
},
@ -1115,21 +1109,9 @@
"viewContact": {
"message": "觀看聯絡資訊"
},
"viewOnCustomBlockExplorer": {
"message": "在 $1 瀏覽"
},
"viewOnEtherscan": {
"message": "在 Etherscan 上瀏覽"
},
"viewinExplorer": {
"message": "在 Explorer 上瀏覽"
},
"visitWebSite": {
"message": "造訪我們的網站"
},
"walletSeed": {
"message": "助憶詞"
},
"welcome": {
"message": "歡迎來到 MetaMask"
},

@ -6,9 +6,16 @@
<body>
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
{{@if(it.useLavamoat)}}
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
{{#else}}
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
{{/if}}
{{@each(it.jsBundles) => val}}
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
{{/each}}

@ -12,9 +12,16 @@
<div id="popover-content"></div>
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
{{@if(it.useLavamoat)}}
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
{{#else}}
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
{{/if}}
{{@each(it.jsBundles) => val}}
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
{{/each}}

@ -0,0 +1,218 @@
<svg width="327" height="256" viewBox="0 0 327 256" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.0455 112.872L45.4766 116.354V92.0395L21.0455 88.5566V112.872Z" fill="#43AEFC"/>
<path d="M61.7531 107.04L45.4766 116.354V92.0391L61.7531 82.7246V107.04Z" fill="#037DD6"/>
<path d="M37.3221 79.2422L21.0455 88.5567L45.4766 92.0395L61.7532 82.725L37.3221 79.2422Z" fill="#75C4FD"/>
<path d="M39.1449 110.23L27.377 108.399C26.2377 108.221 25.3262 107.168 25.3262 106.034V97.2383L38.4939 99.2794C39.9913 99.5062 41.2121 100.915 41.2121 102.406V108.497C41.2121 109.631 40.2843 110.408 39.1449 110.23Z" fill="white"/>
<path d="M30.5999 96.0567L26.8075 95.4735C25.9774 95.344 25.3101 95.9109 25.3101 96.7209V99.0535L33.253 100.285L31.9021 97.1097C31.6905 96.5589 31.1696 96.1539 30.5999 96.0567Z" fill="white"/>
<path d="M278.036 69.0714L253.865 72.5219V48.4661L278.036 45.0156V69.0714Z" fill="#037DD6"/>
<path d="M237.751 63.2862L253.865 72.5198V48.464L237.751 39.2305V63.2862Z" fill="#43AEFC"/>
<path d="M261.922 35.7812L278.036 45.0148L253.865 48.4652L237.751 39.2317L261.922 35.7812Z" fill="#75C4FD"/>
<path d="M260.978 134.677C260.734 135.665 260.49 136.654 260.229 137.625C259.546 140.153 258.764 142.647 257.902 145.126C257.723 145.628 257.544 146.13 257.365 146.616C255.102 152.788 252.27 158.733 248.917 164.37C248.575 164.937 248.234 165.52 247.875 166.071C245.662 169.651 243.237 173.086 240.616 176.39C239.705 177.54 238.777 178.674 237.817 179.776C236.856 180.877 235.88 181.963 234.887 183.032C231.794 186.32 228.49 189.43 224.974 192.33C224.226 192.946 223.477 193.545 222.712 194.144C212.36 202.228 200.348 208.546 186.985 212.498C173.622 216.451 160.08 217.714 146.977 216.564C146.017 216.483 145.057 216.386 144.096 216.273C142.273 216.062 140.45 215.819 138.66 215.511C135.079 214.912 131.531 214.134 128.031 213.195C127.51 213.049 126.973 212.903 126.452 212.757C125.036 212.352 123.637 211.915 122.253 211.445C118.249 210.117 114.326 208.546 110.518 206.764C110.078 206.553 109.622 206.342 109.183 206.116C109.02 206.035 108.874 205.97 108.711 205.889C106.676 204.885 104.658 203.815 102.689 202.681C100.361 201.353 98.0987 199.944 95.8851 198.453C95.3968 198.129 94.8922 197.789 94.4039 197.433C93.6715 196.931 92.9553 196.412 92.2391 195.878C90.9858 194.954 89.7651 194.015 88.5606 193.043C87.1934 191.941 85.8587 190.807 84.5403 189.641C84.5403 189.641 84.5241 189.641 84.5241 189.625C83.7591 188.945 83.0103 188.264 82.2616 187.551C76.1579 181.801 70.689 175.305 66.0339 168.145C65.806 167.805 65.5782 167.448 65.3666 167.108C63.332 163.901 61.4602 160.58 59.7512 157.129C59.3768 156.352 59.0024 155.59 58.6281 154.797C57.8468 153.128 57.1144 151.427 56.4307 149.71C56.1378 148.965 55.8448 148.22 55.5518 147.458C55.4704 147.215 55.3728 146.989 55.2914 146.746C55.1774 146.438 55.0635 146.13 54.9496 145.822C54.3148 144.04 53.7126 142.226 53.1592 140.379C52.0849 136.783 51.206 133.154 50.5224 129.542C50.4247 129.056 50.3433 128.586 50.2619 128.1C50.2131 127.841 50.1805 127.598 50.1317 127.339C49.7411 125.039 49.4318 122.722 49.204 120.422C49.1388 119.742 49.0737 119.061 49.0249 118.381C48.8133 115.805 48.6994 113.229 48.6831 110.67V110.54C48.6831 109.779 48.6831 109.002 48.6994 108.24C48.7157 107.252 48.7482 106.264 48.7808 105.276C48.797 105.033 48.797 104.806 48.8133 104.563C49.1551 97.4839 50.2131 90.502 51.9384 83.7308C52.0035 83.4878 52.0686 83.2448 52.1175 83.0018C52.5732 81.2523 53.0778 79.5352 53.6149 77.8181C54.0055 76.5869 54.4124 75.372 54.8356 74.1571C55.1286 73.3309 55.4379 72.5047 55.7471 71.6786C55.7471 71.6786 55.7471 71.6786 55.7471 71.6624C56.3819 70.0263 57.033 68.4063 57.7491 66.8188C62.8111 55.3336 69.8752 44.7717 78.6482 35.6516L78.6808 35.6192C80.7153 33.5133 82.8313 31.4722 85.0449 29.5445C85.1588 29.4473 85.2728 29.3501 85.3867 29.2367C96.6826 19.3714 110.241 11.7254 125.59 7.18961C140.89 2.65384 156.418 1.66568 171.245 3.75538C174.371 4.19276 177.463 4.75973 180.507 5.47249C189.508 7.54599 198.167 10.7696 206.289 15.0138C207.168 15.4674 208.03 15.9372 208.909 16.4231C211.025 17.6057 213.109 18.853 215.143 20.1814C216.055 20.7645 216.95 21.3801 217.845 21.9957C218.399 22.3682 218.936 22.757 219.473 23.1458C220.189 23.6642 220.905 24.1826 221.605 24.7171C222.5 25.3975 223.379 26.0779 224.242 26.7906C224.372 26.904 224.502 27.0012 224.633 27.1146C224.681 27.1632 224.746 27.2118 224.795 27.2442C226.179 28.3781 227.53 29.5445 228.864 30.7594C231.811 33.4323 234.626 36.2995 237.279 39.3126C238.093 40.236 238.875 41.1755 239.656 42.1151C239.819 42.3256 239.998 42.52 240.16 42.7306C242.016 45.0309 243.79 47.4284 245.467 49.9069C245.922 50.571 246.362 51.2514 246.801 51.9318C248.185 54.0863 249.503 56.3055 250.74 58.5734C251.066 59.1728 251.391 59.7722 251.7 60.3715C251.896 60.7603 252.107 61.1491 252.303 61.5379C252.433 61.7809 252.547 62.0239 252.661 62.2669C255.33 67.6288 257.56 73.2985 259.334 79.2274C259.367 79.357 259.416 79.4866 259.448 79.6162L259.725 80.5719C260.278 82.532 260.783 84.4921 261.222 86.4522C261.401 87.2298 261.564 88.0236 261.727 88.8173C261.824 89.3357 261.938 89.8541 262.02 90.3562C262.264 91.6522 262.476 92.9643 262.671 94.2602C262.801 95.1188 262.915 95.9612 263.013 96.8197C263.289 99.0714 263.501 101.323 263.631 103.575C263.647 103.947 263.68 104.336 263.696 104.709C264.266 114.995 263.289 125.039 260.978 134.677Z" fill="url(#paint0_linear)"/>
<path d="M141.166 56.7592C143.933 54.7667 148.914 52.3854 148.133 48.2384C147.4 44.3992 142.469 44.1238 139.36 44.2696C133.809 44.5288 128.78 47.1045 123.425 48.2384C118.721 49.2266 113.61 48.6434 110.225 44.95C108.011 42.5363 106.839 39.4099 104.707 36.9314C102.249 34.0804 98.6033 32.995 94.9085 33.2866C92.9065 33.4486 90.9045 33.9508 88.8699 33.7726C86.6563 33.5782 84.7845 31.9259 85.0937 29.6094C82.8801 31.5533 80.7642 33.5782 78.7296 35.6841L78.6971 35.7165C69.924 44.8204 62.86 55.3985 57.798 66.8837C57.0981 68.4874 56.4307 70.1074 55.796 71.7273C55.796 71.7273 55.796 71.7273 55.796 71.7435C55.4867 72.5696 55.1774 73.3958 54.8845 74.2219C54.4613 75.4369 54.0381 76.6518 53.6637 77.883C50.5875 87.6349 48.8947 97.8728 48.7482 108.305C48.7319 109.066 48.7319 109.828 48.7319 110.605C50.3759 111.61 51.7919 113.035 53.1429 114.396C54.8356 116.113 56.4958 117.911 58.449 119.321C59.8 120.292 61.4114 120.924 63.039 120.244C65.2038 119.337 66.5548 117.134 67.9871 115.4C69.5171 113.554 71.454 111.998 73.8141 111.383C76.0765 110.784 78.5017 110.865 80.7153 110.103C82.7174 109.407 84.0032 107.803 84.6543 105.859C85.3704 103.737 85.403 101.437 86.1354 99.3307C86.9167 97.0628 88.9513 94.8111 91.1974 93.8878C95.2666 92.2192 98.7335 96.3986 100.817 99.2983C103.356 102.83 105.212 107.301 108.906 109.828C110.925 111.205 113.366 111.561 115.694 110.767C117.712 110.071 119.616 108.84 120.56 106.88C122.465 102.959 120.642 98.4397 121.423 94.3251C122.188 90.3239 124.922 87.6025 128.194 85.4156C131.661 83.0829 135.388 81.1066 138.432 78.2069C140.304 76.4412 142.045 74.2381 142.387 71.6139C142.696 69.2812 141.687 67.1105 140.157 65.4096C139.262 64.4052 137.39 63.2875 137.439 61.781C137.488 60.6308 138.367 59.5131 139.067 58.6707C139.653 57.9256 140.385 57.3262 141.166 56.7592Z" fill="url(#paint1_linear)"/>
<path d="M97.2523 153.21C92.5973 149.435 86.0541 149.873 81.0897 146.746C78.339 145.013 76.4835 142.324 74.4164 139.91C72.219 137.334 69.6473 135.293 66.3106 134.419C62.8112 133.511 59.1327 133.771 55.6658 132.685C53.68 132.054 52.0035 130.984 50.5549 129.607C51.2385 133.22 52.1175 136.832 53.1917 140.445C53.9079 142.842 54.7055 145.207 55.5844 147.524C55.8611 148.285 56.1541 149.03 56.4633 149.775C57.1469 151.493 57.8794 153.193 58.6607 154.862C59.0187 155.64 59.3931 156.417 59.7837 157.195C65.5131 168.81 73.1793 179.047 82.2779 187.617C83.0266 188.313 83.7754 189.01 84.5404 189.69C84.5404 189.69 84.5404 189.69 84.5566 189.706C85.875 190.873 87.2097 192.007 88.5769 193.108C88.7397 192.493 88.8699 191.861 88.9839 191.245C89.6186 187.876 90.465 184.588 91.6858 181.38C93.0042 177.897 94.6806 174.56 96.4385 171.272C98.0662 168.21 100.117 165.1 100.638 161.601C101.11 158.329 99.7915 155.267 97.2523 153.21Z" fill="url(#paint2_linear)"/>
<path d="M229.923 182.529C228.458 182.432 226.928 182.302 225.463 182.448C223.331 182.643 221.377 183.647 219.636 184.83C217.699 186.142 215.957 187.729 214.004 189.025C212.946 189.722 211.807 190.37 210.586 190.694C209.251 191.034 207.868 190.953 206.517 190.807C204.157 190.532 201.748 190.143 199.583 191.39C197.842 192.395 196.686 194.128 195.66 195.796C194.57 197.578 193.545 199.538 191.901 200.899C189.882 202.568 187.522 202.859 185.064 202.227C183.958 201.936 182.867 201.628 181.728 201.466C180.328 201.272 178.896 201.304 177.496 201.353C175.982 201.401 174.468 201.499 172.955 201.515C171.555 201.547 170.139 201.385 168.739 201.466C166.9 201.563 165.337 202.195 163.938 203.394C162.196 204.884 160.682 206.585 158.713 207.816C154.871 210.197 150.07 210.262 145.675 210.521C142.941 210.683 138.774 211.121 138.611 214.62C138.595 214.928 138.611 215.235 138.66 215.527C140.467 215.835 142.273 216.078 144.096 216.288C145.057 216.402 146.017 216.499 146.977 216.58C160.08 217.714 173.606 216.467 186.985 212.514C200.348 208.561 212.377 202.244 222.712 194.16C223.477 193.561 224.226 192.962 224.975 192.346C228.49 189.446 231.794 186.336 234.887 183.048C233.227 182.821 231.583 182.643 229.923 182.529Z" fill="url(#paint3_linear)"/>
<path d="M242.928 84.0055C241.512 79.9881 237.817 77.1857 234.073 75.2256C231.86 74.0754 229.532 73.1683 227.156 72.3907C224.437 71.4997 221.703 70.7546 219.213 69.3128C208.633 63.1248 209.772 48.2539 189.752 48.2539C181.126 48.2539 178.082 51.7853 174.501 56.4345C171.05 60.9217 170.009 66.6886 165.988 70.8518C162.668 74.3022 158.338 76.6511 155.018 80.0853C151.242 83.9731 149.549 89.0435 149.679 94.3568C149.809 99.9941 152.056 105.518 155.62 110.021C157.394 112.257 159.494 114.282 161.854 115.95C164.003 117.489 166.314 118.85 168.3 120.599C170.188 122.268 171.474 124.358 172.515 126.593C173.85 129.477 175.705 131.858 177.919 134.191C180.263 136.653 182.721 139.099 184.202 142.161C185.471 144.769 186.008 147.587 186.155 150.438C186.464 155.93 185.715 161.502 187.669 166.832C189.15 170.882 193.496 175.887 198.395 175.628C204.141 175.337 205.052 168.031 206.143 163.916C206.501 162.555 206.908 161.178 207.559 159.915C208.324 158.425 209.382 157.048 210.342 155.671C212.132 153.095 213.972 150.568 215.713 147.96C219.148 142.792 221.801 137.301 222.826 131.178C223.396 127.792 223.558 124.422 224.584 121.118C225.495 118.186 226.846 115.416 228.474 112.791C231.778 107.446 236.059 102.732 239.672 97.5804C242.423 93.6602 244.62 88.8005 242.928 84.0055Z" fill="url(#paint4_linear)"/>
<path d="M224.681 27.2422C223.688 26.4323 222.679 25.6223 221.654 24.8448C220.954 24.3102 220.238 23.7918 219.522 23.2734C218.985 22.8847 218.431 22.4959 217.894 22.1233C216.999 21.5077 216.104 20.8922 215.192 20.309C213.158 18.9807 211.074 17.7333 208.958 16.5508C208.454 17.0692 207.933 17.5551 207.331 17.9763C204.645 19.8554 201.324 19.2398 198.265 18.9807C195.465 18.7377 192.6 18.8511 190.419 20.8274C188.645 22.4311 187.701 24.7152 186.562 26.7563C185.959 27.874 185.292 28.9594 184.413 29.8827C183.567 30.7737 182.541 31.3568 181.483 31.9562C179.628 32.993 177.561 34.1593 176.421 36.0222C175.233 37.9499 175.77 40.3636 177.268 41.9835C178.798 43.6358 181.321 43.8788 183.437 43.9274C185.862 43.976 188.352 43.5548 190.761 43.9436C193.382 44.3648 195.693 45.8875 198.313 46.2439C199.681 46.4221 201.048 46.2277 202.334 45.7417C203.912 45.1423 205.394 44.1866 207.086 43.9112C208.763 43.652 209.837 44.381 210.993 45.4663C211.823 46.2439 212.702 47.0215 213.857 47.232C218.122 48.042 219.57 43.3604 220.433 40.153C220.889 38.4845 221.198 36.5244 222.224 35.0989C223.395 33.4789 225.381 32.6204 227.139 31.7942C227.709 31.535 228.344 31.2596 228.946 30.9195C227.546 29.6397 226.13 28.4248 224.681 27.2422Z" fill="url(#paint5_linear)"/>
<path d="M261.808 88.9481C261.646 88.1543 261.483 87.3767 261.304 86.583C260.767 84.1693 260.132 81.7556 259.416 79.3582C257.43 72.7327 254.858 66.4312 251.782 60.5023C251.473 59.9029 251.147 59.2874 250.822 58.7042C249.585 56.4363 248.266 54.217 246.883 52.0625C246.443 51.3822 246.004 50.7018 245.548 50.0376C243.025 46.3118 240.291 42.7804 237.361 39.4434C237.296 40.4801 236.905 41.4845 236.368 42.4888C234.903 45.2427 232.722 47.3162 230.639 49.584C228.767 51.5927 226.879 53.9254 226.537 56.7279C226.391 57.9752 226.521 59.3846 227.204 60.4861C227.823 61.5066 228.848 62.106 229.89 62.6082C230.997 63.1266 232.136 63.5963 232.983 64.5197C233.992 65.6212 234.496 67.0144 235.212 68.3103C236.759 71.0966 239.835 72.0685 242.439 73.5912C243.904 74.4498 245.288 75.5351 245.971 77.1389C246.704 78.8884 246.59 80.8323 246.752 82.679C246.98 85.1899 247.762 88.0409 249.878 89.6284C251.798 91.0702 254.337 91.0216 256.616 90.8434C258.439 90.6976 260.295 90.4222 262.134 90.5032C262.004 89.9848 261.906 89.4664 261.808 88.9481Z" fill="url(#paint6_linear)"/>
<path opacity="0.4" d="M97.1057 199.296C47.4948 166.752 33.79 100.351 66.4733 50.9762C95.2502 7.52994 150.395 -8.24807 197.011 10.786C199.827 11.9361 202.61 13.2159 205.361 14.609C208.812 16.3747 212.197 18.3348 215.501 20.5055C127.169 23.9397 53.0451 80.5073 97.1057 199.296Z" fill="url(#paint7_linear)"/>
<path d="M166.46 215.689C156.987 215.689 147.335 213.972 137.797 210.505C125.671 206.099 114.392 199.166 104.284 189.9C94.518 180.958 86.2495 170.218 79.7064 157.988C73.1632 145.757 68.6546 132.652 66.327 119.045C63.9181 104.951 63.9669 90.9067 66.4573 77.3318C69.0615 63.1089 74.1886 50.2954 81.6758 39.2637C88.9189 28.6047 97.9849 20.1001 108.662 14.0254C128.503 2.70215 152.007 1.01744 174.81 9.29522C185.976 13.345 196.458 19.5817 205.964 27.7947C216.722 37.093 225.756 48.4973 232.836 61.6996C239.412 73.9462 243.92 87.0675 246.264 100.707C248.689 114.833 248.641 128.878 246.15 142.485L245.792 142.42L246.15 142.485C243.546 156.708 238.419 169.521 230.932 180.553C223.689 191.212 214.623 199.717 203.945 205.791C192.405 212.368 179.612 215.689 166.46 215.689ZM146.147 4.82425C133.11 4.82425 120.447 8.12888 109.004 14.6572C98.4407 20.6833 89.4397 29.1068 82.2618 39.6687C74.8397 50.6194 69.7451 63.3357 67.1571 77.4614C64.6831 90.9553 64.6343 104.903 67.0269 118.915C69.3382 132.458 73.8143 145.482 80.3249 157.647C86.8355 169.813 95.0551 180.472 104.756 189.365C114.799 198.567 125.997 205.451 138.025 209.825C147.482 213.259 157.052 214.96 166.444 214.96C179.482 214.96 192.145 211.672 203.587 205.143C214.151 199.117 223.152 190.694 230.329 180.132C237.752 169.181 242.846 156.465 245.434 142.339C247.908 128.829 247.957 114.849 245.548 100.804C243.221 87.2457 238.728 74.1892 232.201 62.0236C225.154 48.9022 216.169 37.579 205.491 28.3293C196.051 20.1649 185.65 13.993 174.566 9.95939C165.109 6.54136 155.522 4.82425 146.147 4.82425Z" fill="white"/>
<path d="M175.819 214.183C175.445 214.183 175.087 214.183 174.713 214.167C166.135 213.972 157.297 211.559 148.41 206.974C138.481 201.839 129.041 194.307 120.381 184.555C112.015 175.143 104.723 164.095 98.6849 151.703C92.6463 139.31 88.1702 126.205 85.4032 112.76C82.5223 98.8285 81.5945 85.124 82.6362 72.0188C84.9149 43.3949 96.5852 21.2506 114.668 11.2719C121.781 7.35168 129.594 5.44017 137.879 5.63456C146.457 5.82895 155.295 8.24263 164.182 12.827C173.329 17.5572 182.086 24.3446 190.192 33.0274C199.355 42.8441 207.331 54.6047 213.858 67.969C219.913 80.3776 224.405 93.499 227.188 106.977C230.085 120.94 231.013 134.661 229.971 147.782C227.693 176.406 216.022 198.551 197.939 208.529C191.136 212.288 183.714 214.183 175.819 214.183ZM136.772 6.34733C129.008 6.34733 121.7 8.21023 115.01 11.9036C97.1549 21.769 85.6148 43.7027 83.3524 72.0836C82.3107 85.1078 83.2384 98.7475 86.1031 112.614C88.8701 126.011 93.3136 139.051 99.3359 151.395C105.342 163.722 112.618 174.722 120.935 184.085C129.545 193.756 138.904 201.256 148.752 206.343C157.525 210.878 166.265 213.276 174.729 213.454C182.883 213.632 190.582 211.769 197.581 207.914C215.437 198.049 226.977 176.131 229.239 147.75C230.281 134.71 229.353 121.038 226.472 107.155C223.689 93.742 219.229 80.6692 213.19 68.3254C206.696 55.0259 198.769 43.3301 189.654 33.562C181.598 24.944 172.922 18.2051 163.84 13.5074C155.067 8.93919 146.326 6.55791 137.863 6.36352C137.504 6.34733 137.13 6.34733 136.772 6.34733Z" fill="white"/>
<path d="M183.746 212.917C181.923 212.917 180.035 212.691 178.114 212.253C172.515 210.973 166.558 207.831 160.438 202.939C145.708 191.178 131.417 170.443 120.186 144.589C108.955 118.735 102.135 90.8402 100.964 66.0231C100.264 51.1846 101.615 38.5979 104.951 28.6192C108.158 19.0454 113.203 12.3066 119.535 9.09913C123.995 6.83124 129.024 6.32907 134.477 7.5764C140.076 8.85614 146.033 11.9988 152.153 16.8909C159.022 22.3663 165.809 29.8179 172.336 39.0028C179.726 49.4027 186.464 61.5521 192.356 75.1108C203.62 100.997 210.456 128.957 211.628 153.806C212.328 168.645 210.977 181.232 207.64 191.21C204.433 200.784 199.388 207.539 193.056 210.73C190.175 212.172 187.066 212.917 183.746 212.917ZM128.845 7.6088C125.639 7.6088 122.644 8.32157 119.861 9.7147C113.708 12.8411 108.776 19.4504 105.635 28.8297C102.314 38.7274 100.98 51.217 101.68 65.9583C102.852 90.6944 109.655 118.508 120.837 144.281C132.019 170.038 146.245 190.66 160.877 202.355C166.916 207.183 172.759 210.261 178.261 211.524C183.534 212.739 188.401 212.237 192.714 210.066C198.867 206.94 203.799 200.347 206.94 190.951C210.26 181.054 211.595 168.564 210.895 153.823C209.723 129.054 202.903 101.192 191.673 75.37C185.797 61.8437 179.075 49.7429 171.718 39.3916C165.223 30.2553 158.485 22.8684 151.681 17.4255C145.643 12.5982 139.799 9.52031 134.298 8.25677C132.442 7.83559 130.619 7.6088 128.845 7.6088Z" fill="white"/>
<path d="M188.304 212.192C183.795 212.192 178.033 207.785 171.425 199.232C150.33 171.921 126.241 109.699 117.729 60.5187C115.189 45.8098 114.229 33.2555 114.962 24.2001C115.678 15.323 118.038 9.76664 121.765 8.14672C126.55 6.05702 133.24 10.366 141.15 20.6039C145.92 26.7758 150.9 34.7944 155.995 44.4491C161.74 55.3674 167.356 67.8893 172.678 81.6262C182.835 107.853 190.713 135.44 194.847 159.318C197.386 174.026 198.346 186.581 197.614 195.636C196.898 204.513 194.538 210.07 190.81 211.689C190.029 212.013 189.199 212.192 188.304 212.192ZM124.304 8.34111C123.442 8.34111 122.709 8.5193 122.074 8.79469C118.607 10.3174 116.394 15.6469 115.694 24.2487C114.962 33.2393 115.922 45.745 118.445 60.3891C126.941 109.473 150.965 171.548 171.995 198.779C179.71 208.774 184.918 211.463 188.271 211.463C189.134 211.463 189.866 211.285 190.501 211.009C193.968 209.486 196.181 204.157 196.881 195.555C197.614 186.565 196.653 174.059 194.131 159.415C190.013 135.602 182.151 108.063 172.011 81.8692C166.688 68.1485 161.089 55.6751 155.36 44.7731C150.298 35.1508 145.317 27.1646 140.581 21.0251C132.866 11.0302 127.674 8.34111 124.304 8.34111Z" fill="white"/>
<path d="M122.751 8.17069L122.055 8.40039L189.857 211.653L190.553 211.424L122.751 8.17069Z" fill="white"/>
<path d="M252.726 62.3956C250.805 64.8254 246.118 68.0329 238.679 71.9531C209.333 87.4719 145.968 109.649 97.4313 121.409C87.0143 123.936 66.278 128.585 55.0309 128.585C53.1591 128.585 51.5477 128.456 50.2782 128.164C50.2293 127.905 50.1968 127.662 50.1479 127.403C55.0797 128.715 69.2403 127.484 97.2523 120.696C145.74 108.952 209.023 86.7915 238.321 71.3051C247.566 66.413 251.114 63.4161 252.368 61.6504C252.482 61.9258 252.612 62.1688 252.726 62.3956Z" fill="white"/>
<path d="M240.209 42.8591C238.858 45.0946 234.203 48.2535 226.325 52.3033C198.59 66.51 138.953 87.2773 93.3947 98.5844C74.4651 103.282 60.3859 105.744 52.8499 105.744C51.1734 105.744 49.8224 105.631 48.797 105.372C48.8133 105.129 48.8133 104.902 48.8296 104.659C53.9078 106.068 70.103 103.622 93.2157 97.8878C138.725 86.5969 198.297 65.862 225.983 51.6715C236.319 46.3744 239.086 43.5719 239.721 42.2598C239.884 42.4542 240.046 42.6485 240.209 42.8591Z" fill="white"/>
<path d="M224.861 27.3715C224.096 28.1977 221.443 30.012 211.514 34.2076C185.797 45.0773 131.742 63.2851 91.0185 74.8028C78.9739 78.2046 68.8824 80.7965 61.851 82.2868C56.3821 83.4531 53.5011 83.7933 51.9548 83.8095C52.0199 83.5665 52.085 83.3235 52.1339 83.0806C53.5662 83.032 56.2844 82.7242 61.4278 81.6388C68.4592 80.1647 78.6158 77.5566 90.7907 74.1224C131.482 62.621 185.504 44.4293 211.205 33.5596C221.15 29.364 223.672 27.5983 224.291 26.918C224.421 27.0314 224.551 27.1286 224.682 27.242C224.747 27.2906 224.795 27.3391 224.861 27.3715Z" fill="white"/>
<path d="M63.1529 57.9719C62.5995 57.9719 62.5019 57.8423 62.4042 57.7451C62.274 57.5993 62.2577 57.3887 62.3554 57.2106L63.0064 57.5345C63.0227 57.5021 63.039 57.4373 63.0064 57.3563C62.9739 57.2753 62.9251 57.243 62.9088 57.2268C63.7552 57.5669 72.4306 55.6068 94.1109 49.0138C125.932 39.3428 168.43 24.9418 188.857 16.9232C198.265 13.2298 199.404 12.2902 199.518 12.0958C199.502 12.112 199.485 12.1768 199.518 12.274C199.534 12.3388 199.583 12.3712 199.599 12.4036L199.762 11.707C200.153 11.788 200.218 12.0634 200.218 12.1606C200.25 12.5818 200.299 13.2136 189.117 17.6035C168.674 25.6221 126.143 40.0232 94.3062 49.7103C84.7194 52.6262 76.7601 54.9103 71.2912 56.3196C66.1478 57.6317 64.0481 57.9719 63.1529 57.9719Z" fill="white"/>
<path d="M81.1387 34.2099C80.6993 34.2099 80.6342 34.0965 80.5528 33.9669C80.5039 33.9021 80.39 33.6429 80.683 33.3675L81.1876 33.8859C81.2038 33.8535 81.2364 33.7563 81.2038 33.6591C81.1713 33.5457 81.0736 33.4971 81.0411 33.4809C81.6758 33.6429 87.4052 32.2984 101.452 28.0056C122.351 21.6069 150.281 12.1628 163.71 6.94664C169.764 4.59776 170.578 3.99839 170.692 3.86879C170.676 3.88499 170.643 3.94979 170.66 4.04698C170.676 4.12798 170.725 4.20898 170.79 4.25757L171.197 3.6582C171.327 3.7554 171.392 3.90119 171.376 4.06318C171.343 4.38717 171.294 4.79215 163.986 7.62701C150.526 12.8431 122.579 22.3035 101.663 28.7022C95.3156 30.6461 90.0745 32.1688 86.4774 33.1083C83.1733 33.9669 81.7735 34.2099 81.1387 34.2099Z" fill="white"/>
<path d="M259.806 80.7175C257.821 83.7629 253.458 87.4239 246.769 91.6357C217.862 109.925 153.813 133.154 104.007 143.392C88.9676 146.486 76.2394 148.171 67.2385 148.252C66.9943 148.252 66.7502 148.252 66.506 148.252C61.5579 148.252 57.8143 147.766 55.3077 146.81C55.1938 146.502 55.0799 146.195 54.9659 145.887C57.0819 146.859 60.8092 147.588 67.2222 147.539C76.1743 147.458 88.8537 145.79 103.844 142.696C153.586 132.474 217.52 109.293 246.362 91.0364C254.516 85.885 258.114 82.2402 259.513 79.7617L259.806 80.7175Z" fill="white"/>
<path d="M263.778 104.837C261.58 107.591 257.658 110.798 252.01 114.411C223.917 132.44 161.561 155.103 113.008 164.952C97.9523 167.998 85.7449 169.537 77.0207 169.537C72.3005 169.537 68.622 169.083 66.0503 168.192C65.8224 167.852 65.5945 167.496 65.3829 167.155C67.5477 168.127 71.3076 168.856 77.7531 168.791C86.4448 168.71 98.5871 167.139 112.878 164.239C161.366 154.423 223.607 131.793 251.635 113.811C258.488 109.405 262.036 106.117 263.745 103.703C263.745 104.092 263.761 104.464 263.778 104.837Z" fill="white"/>
<path d="M91.1486 185.915C83.3196 185.915 78.225 184.668 76.3857 182.141L76.9717 181.72C78.6645 184.036 83.5637 185.186 91.0509 185.186C99.059 185.186 109.997 183.874 123.116 181.25C168.006 172.292 225.446 150.844 251.18 133.43C262.166 125.994 263.892 121.734 263.403 119.466L264.119 119.32C264.901 122.933 260.685 127.873 251.586 134.029C225.788 151.492 168.218 172.988 123.262 181.963C110.078 184.603 99.1729 185.915 91.1486 185.915Z" fill="white"/>
<path d="M257.902 145.125C257.723 145.627 257.544 146.129 257.365 146.615C255.591 148.154 253.345 149.807 250.626 151.588C227.221 166.897 175.51 186.546 135.34 195.391C122.4 198.242 111.901 199.684 104.593 199.684C100.768 199.684 97.8221 199.279 95.8689 198.485C95.2342 198.226 94.7133 197.934 94.3064 197.594L94.4041 197.481L94.7784 197.011C96.6665 198.566 101.208 199.214 107.881 198.874C114.961 198.517 124.158 197.108 135.193 194.678C175.282 185.85 226.895 166.249 250.236 150.989C253.751 148.64 256.193 146.713 257.902 145.125Z" fill="white"/>
<path d="M122.839 209.744C118.119 209.744 114.619 209.16 112.52 208.01L112.878 207.379C117.403 209.873 129.431 209.484 145.887 206.309C179.351 199.846 222.045 183.809 241.088 170.558C245.222 167.691 247.973 165.131 249.275 162.977L249.894 163.349C248.543 165.601 245.711 168.225 241.511 171.141C222.403 184.44 179.579 200.526 146.033 207.022C136.625 208.82 128.764 209.744 122.839 209.744Z" fill="white"/>
<path d="M158.859 70.9321C158.68 71.1265 158.534 71.3695 158.534 71.6287C158.534 72.2605 159.315 72.5682 159.933 72.6816C163.53 73.3296 167.062 73.0542 170.611 72.3252C175.429 71.3371 180.214 69.782 185.178 69.8144C187.831 69.8306 190.354 70.4785 192.942 70.9483C195.286 71.3695 197.63 71.4505 199.99 71.0779C204.564 70.3327 208.779 68.1621 212.637 65.6512C214.46 64.4686 216.299 63.2375 217.927 61.7796C219.278 60.5646 220.563 59.1715 221.312 57.4868C221.996 55.9641 222.093 54.2469 221.296 52.7404C220.287 50.8775 218.106 49.9542 216.055 49.8408C213.613 49.7112 211.302 50.7803 209.235 51.9629C207.021 53.2426 204.873 54.6519 202.659 55.9317C198.248 58.4749 193.691 60.8076 189.003 62.8001C181.662 65.9104 174.322 67.6113 166.493 68.9396C165.679 69.0854 164.588 69.1502 163.482 69.2798C161.691 69.539 159.836 69.8954 158.859 70.9321Z" fill="url(#paint8_linear)"/>
<path d="M143.494 81.6065C143.917 82.3517 144.845 82.6757 145.708 82.7728C148.1 83.0644 150.444 83.3884 152.886 83.1778C154.432 83.0482 155.962 82.7566 157.459 82.3031C158.192 82.0763 158.924 81.8171 159.64 81.5255C160.308 81.2501 160.975 80.9747 161.561 80.5536C162.424 79.9542 163.319 78.8203 162.538 77.7997C162.098 77.2165 161.301 77.0545 160.617 77.006C159.738 76.9412 158.827 77.0384 157.948 77.0869C154.253 77.3137 150.591 77.8321 146.977 78.6259C145.854 78.8689 143.25 79.3062 143.25 80.748C143.234 81.0071 143.315 81.2825 143.494 81.6065Z" fill="url(#paint9_linear)"/>
<path d="M73.7329 41.3496C63.3973 43.5041 17.823 73.5536 66.8642 72.0957C115.905 70.6377 100.247 54.1956 84.7521 57.0466C69.2568 59.8977 41.896 61.8902 68.2965 48.2019L73.7329 41.3496Z" fill="url(#paint10_linear)"/>
<path d="M73.7329 41.3496C63.3973 43.5041 17.823 73.5536 66.8642 72.0957C115.905 70.6377 100.247 54.1956 84.7521 57.0466C69.2568 59.8977 41.896 61.8902 68.2965 48.2019L73.7329 41.3496Z" fill="url(#paint11_linear)"/>
<path d="M32.4554 190.223L57.326 193.771V169.018L32.4554 165.471V190.223Z" fill="#43AEFC"/>
<path d="M73.8956 184.28L57.326 193.772V169.02L73.8956 159.527V184.28Z" fill="#037DD6"/>
<path d="M49.025 155.979L32.4554 165.455L57.326 169.019L73.8955 159.526L49.025 155.979Z" fill="#75C4FD"/>
<path d="M50.7468 185.922C53.8069 183.075 53.6351 177.943 50.3631 174.46C47.0911 170.977 41.958 170.461 38.8979 173.308C35.8379 176.155 36.0096 181.287 39.2816 184.77C42.5536 188.254 47.6867 188.769 50.7468 185.922Z" fill="white"/>
<path d="M44.8257 174.949C44.8257 177.525 42.726 179.339 40.1381 178.983C42.726 179.323 44.8257 181.704 44.8257 184.28C44.8257 181.704 46.9254 179.89 49.5133 180.246C46.9254 179.906 44.8257 177.525 44.8257 174.949Z" fill="#43AEFC"/>
<path d="M0 154.277L23.6335 157.646V134.125L0 130.756V154.277Z" fill="#43AEFC"/>
<path d="M39.373 148.64L23.6335 157.647V134.126L39.373 125.119V148.64Z" fill="#037DD6"/>
<path d="M15.7394 121.75L0 130.757L23.6335 134.126L39.373 125.119L15.7394 121.75Z" fill="#75C4FD"/>
<path d="M12.1423 145.987L11.4749 145.89C7.30813 145.29 3.92261 147.234 3.92261 150.247L19.6946 152.548C19.6946 149.518 16.3253 146.586 12.1423 145.987Z" fill="white"/>
<path d="M14.852 143.827C16.4123 142.383 16.3177 139.757 14.6406 137.962C12.9635 136.167 10.339 135.882 8.77863 137.325C7.21828 138.769 7.31292 141.395 8.99003 143.19C10.6671 144.986 13.2916 145.271 14.852 143.827Z" fill="white"/>
<path d="M89.2606 174.591L114.147 178.139V153.386L89.2606 149.822V174.591Z" fill="#43AEFC"/>
<path d="M130.717 168.647L114.148 178.14V153.387L130.717 143.895V168.647Z" fill="#037DD6"/>
<path d="M105.83 140.346L89.2606 149.822L114.147 153.386L130.717 143.893L105.83 140.346Z" fill="#75C4FD"/>
<path d="M104.284 158.244L99.1243 157.532C95.9178 157.094 93.3298 159.313 93.3298 162.505V165.874V166.49C93.3298 167.931 94.5017 169.26 95.9503 169.47C97.399 169.665 98.5709 168.66 98.5709 167.219V166.603L104.821 167.462V168.077C104.821 169.519 105.993 170.847 107.442 171.058C108.89 171.252 110.062 170.248 110.062 168.806V168.191V164.821C110.078 161.63 107.49 158.682 104.284 158.244Z" fill="white"/>
<path d="M97.9687 163.995L96.7317 163.817V159.67L97.9687 159.848V163.995Z" fill="#43AEFC"/>
<path d="M99.4337 162.732L95.2668 162.165V160.934L99.4337 161.501V162.732Z" fill="#43AEFC"/>
<path d="M108.535 163.826C108.791 163.588 108.78 163.162 108.511 162.874C108.241 162.586 107.814 162.546 107.558 162.784C107.302 163.022 107.313 163.448 107.583 163.736C107.852 164.024 108.279 164.064 108.535 163.826Z" fill="#43AEFC"/>
<path d="M105.729 163.447C105.985 163.209 105.974 162.783 105.704 162.495C105.434 162.207 105.008 162.167 104.751 162.405C104.495 162.643 104.506 163.069 104.776 163.357C105.046 163.645 105.472 163.685 105.729 163.447Z" fill="#43AEFC"/>
<path d="M107.201 162.199C107.458 161.961 107.447 161.535 107.177 161.247C106.907 160.959 106.48 160.919 106.224 161.157C105.968 161.395 105.979 161.821 106.249 162.109C106.518 162.397 106.945 162.437 107.201 162.199Z" fill="#43AEFC"/>
<path d="M107.204 165.082C107.46 164.844 107.449 164.417 107.179 164.13C106.909 163.842 106.483 163.802 106.226 164.04C105.97 164.278 105.981 164.704 106.251 164.992C106.521 165.28 106.947 165.32 107.204 165.082Z" fill="#43AEFC"/>
<path d="M101.126 164.885L100.101 164.739C99.9707 164.723 99.873 164.609 99.873 164.48C99.873 164.35 99.9707 164.269 100.101 164.285L101.126 164.431C101.257 164.447 101.354 164.561 101.354 164.69C101.354 164.804 101.257 164.901 101.126 164.885Z" fill="#43AEFC"/>
<path d="M103.844 165.258L102.819 165.112C102.689 165.096 102.591 164.982 102.591 164.853C102.591 164.723 102.689 164.642 102.819 164.658L103.844 164.804C103.975 164.82 104.072 164.934 104.072 165.063C104.072 165.177 103.975 165.274 103.844 165.258Z" fill="#43AEFC"/>
<path d="M186.285 150.275L175.657 156.706V128.795L186.285 122.283V150.275Z" fill="#037DD6"/>
<path d="M157.443 122.283L145.252 128.795H175.657L186.285 122.283H157.443Z" fill="#75C4FD"/>
<path d="M175.64 128.797H145.252V156.821H175.64V128.797Z" fill="#43AEFC"/>
<path d="M155.522 135.68V149.465L166.867 142.564L155.522 135.68Z" fill="white"/>
<path d="M243.448 160.104L218.578 163.668V138.899L243.448 135.352V160.104Z" fill="#037DD6"/>
<path d="M202.008 154.178L218.578 163.671V138.902L202.008 129.426V154.178Z" fill="#43AEFC"/>
<path d="M226.879 125.861L243.448 135.354L218.578 138.902L202.008 129.425L226.879 125.861Z" fill="#75C4FD"/>
<path d="M235.57 155.491L224.567 150.728L235.57 142.143L236.237 143.115L227.041 150.291L236.237 154.276L235.57 155.491Z" fill="white"/>
<path d="M237.51 144.091C238.482 143.036 238.55 141.524 237.662 140.714C236.774 139.904 235.266 140.102 234.294 141.158C233.322 142.213 233.254 143.725 234.142 144.535C235.03 145.345 236.538 145.146 237.51 144.091Z" fill="white"/>
<path d="M237.509 156.419C238.481 155.364 238.549 153.852 237.661 153.042C236.773 152.232 235.265 152.43 234.293 153.486C233.321 154.541 233.253 156.053 234.141 156.863C235.029 157.673 236.537 157.474 237.509 156.419Z" fill="white"/>
<path d="M227.011 152.044C227.983 150.989 228.051 149.477 227.163 148.667C226.275 147.857 224.767 148.055 223.795 149.111C222.823 150.166 222.755 151.678 223.643 152.488C224.531 153.298 226.039 153.1 227.011 152.044Z" fill="white"/>
<path d="M260.457 165.343C259.106 169.004 255.965 171.741 252.563 173.539C248.38 175.743 243.546 176.439 238.923 177.168C234.138 177.929 228.653 180.894 224.03 182.336C219.392 183.777 214.867 185.592 210.521 187.73C208.812 188.572 207.168 189.641 205.231 189.901C203.489 190.144 201.634 189.544 201.015 187.762C200.706 186.92 201.015 184.62 204.645 182.903C209.788 180.473 213.158 179.209 218.675 177.735C218.724 177.719 218.773 177.703 218.822 177.686C221.524 176.65 224.226 175.613 226.928 174.592C231.566 172.827 236.319 171.255 240.812 169.133C242.244 168.453 243.611 167.692 244.897 166.817C244.929 166.801 244.946 166.784 244.978 166.768C246.004 166.12 247.664 164.549 248.934 163.302C250.057 162.2 251.001 160.937 251.733 159.543C252.335 158.409 253.052 157.033 253.507 156.109C253.556 156.077 253.605 156.044 253.654 156.012C254.549 155.542 255.591 155.38 256.665 155.591C261.19 156.498 261.808 161.698 260.457 165.343Z" fill="url(#paint12_linear)"/>
<path d="M204.645 192.542C203.831 191.133 202.187 191.57 200.934 192.024C200.397 192.218 199.876 192.429 199.355 192.672C197.516 193.141 195.791 193.968 194.212 195.069C193.203 195.766 191.852 196.9 192.747 198.228C193.382 199.168 194.716 199.2 195.725 198.973C197.158 198.665 198.59 198.179 199.957 197.645C201.243 197.143 202.708 196.657 203.799 195.782C204.759 195.037 205.312 193.692 204.645 192.542Z" fill="url(#paint13_linear)"/>
<path d="M205.198 3.34828C203.473 1.63116 200.771 0.869802 198.46 1.01559C197.565 1.08039 196.474 1.38818 196.035 2.45732C194.944 5.21118 198.151 5.21119 197.76 7.62486C197.614 8.54822 197.028 9.32578 196.425 9.95755C191.77 14.7687 185.927 16.0646 180.214 17.9275C179.937 18.0085 179.66 18.1057 179.384 18.1867C179.351 18.2029 179.319 18.2029 179.302 18.2191C177.089 19.0615 173.996 19.5799 172.792 22.2851C171.425 25.363 173.134 28.4894 175.429 29.7368C177.984 31.1299 181.093 31.0165 183.925 30.5143C186.383 30.0931 188.84 29.3318 191.184 28.2302C198.069 25.0552 214.883 13.0192 205.198 3.34828Z" fill="url(#paint14_linear)"/>
<path d="M191.51 4.98422C190.24 2.27896 186.041 2.44095 183.762 3.57489C182.232 4.33626 180.588 5.79418 180.133 7.5275C179.319 8.74244 179.01 10.087 179.84 11.3991C181.402 13.8614 184.788 13.019 187.099 11.7717C189.882 10.7835 192.877 7.90008 191.51 4.98422Z" fill="url(#paint15_linear)"/>
<path d="M106.367 102.084L108.727 101.857L107.8 99.3945L106.107 99.5565L106.367 102.084Z" fill="#B77B6A"/>
<path d="M107.556 93.7065C108.174 93.9657 108.711 94.727 109.102 95.2778C109.492 95.8286 109.785 96.4279 110.078 97.0273C110.29 97.4809 110.485 97.9669 110.436 98.469C110.388 99.0846 109.964 99.6192 109.444 99.9431C108.19 100.721 106.416 100.283 105.488 99.1494C104.593 98.0479 104.561 96.6061 104.805 95.2778C105.033 94.079 106.449 93.2367 107.556 93.7065Z" fill="#B77B6A"/>
<path d="M105.407 100.673C106.302 101.273 106.514 100.139 106.351 99.1182C106.644 98.2596 105.488 97.3687 106.286 96.6235C106.644 96.3319 107.116 96.2185 107.474 95.9269C107.832 95.6354 108.174 94.6796 108.174 94.2098C108.5 94.5986 108.874 95.36 109.313 95.6192C109.183 94.6472 108.597 93.6914 107.718 93.2541C106.839 92.8005 105.749 92.8167 104.886 93.2703C104.268 93.5942 103.763 94.1288 103.161 94.469C102.689 94.7282 102.135 94.874 101.598 94.874C100.898 94.874 100.182 94.6472 99.4987 94.7444C98.7174 94.8578 98.0501 95.3762 97.2851 95.6354C96.5038 95.8945 95.6248 95.8783 94.8761 95.5706C94.4041 96.6073 94.5669 97.8871 95.1203 98.8752C95.8527 100.171 97.3502 100.981 97.8059 102.39C98.0663 103.2 97.9524 104.14 98.3593 104.901C98.7499 105.63 99.515 106.035 100.264 106.392L105.407 100.673Z" fill="#2E3446"/>
<path d="M106.091 99.1671L106.595 99.0699L106.367 98.1303C106.27 97.7415 105.863 97.4986 105.472 97.612L105.407 97.6282C105.017 97.7254 104.854 98.1951 105.098 98.5191L105.342 98.8593C105.505 99.1023 105.798 99.2157 106.091 99.1671Z" fill="#B77B6A"/>
<path d="M109.737 97.6602C109.737 97.6602 108.874 98.5187 108.386 98.3891C108.386 98.3891 109.102 99.1991 109.802 98.3243L109.737 97.6602Z" fill="white"/>
<path d="M120.398 96.2342C120.609 95.9103 120.707 95.3595 120.74 95.1489C120.772 94.9383 120.853 94.5657 121.277 94.2903C121.7 94.0149 121.521 94.3551 121.472 94.5819C121.423 94.8087 121.635 95.0679 121.586 95.3757C121.537 95.6835 121.13 96.461 120.805 96.5744C120.479 96.6878 120.398 96.2342 120.398 96.2342Z" fill="#E88F97"/>
<path d="M121.212 95.0534C121.619 94.6971 122.27 94.0653 122.742 93.7251C123.409 93.2391 123.328 93.5145 122.839 94.1301C122.53 94.5189 122.318 94.8105 122.318 94.8105L122.416 94.8591C122.416 94.8591 122.79 94.6161 123.132 94.3893C123.474 94.1625 123.718 94.0653 123.946 94.0167C124.174 93.9681 124.076 94.6647 124.011 95.0048C123.946 95.345 123.067 96.4628 122.839 96.5924C122.611 96.7219 122.4 96.8677 121.684 97.0459C120.74 97.4509 120.512 96.56 120.512 96.56L121.212 95.0534Z" fill="#E88F97"/>
<path d="M108.955 101.758L109.232 100.705L107.946 100.77L108.955 101.758Z" fill="#FFD33D"/>
<path d="M92.337 104.577C92.337 104.577 92.1254 104.787 92.0603 104.933C91.9952 105.079 91.9952 105.727 91.6697 105.889C91.3279 106.051 90.921 106.116 90.7908 106.116C90.6605 106.116 90.4978 105.921 90.4327 105.889C90.3676 105.857 89.9932 106.002 89.7165 105.776C89.4398 105.549 89.4724 105.079 89.57 104.48C89.6677 103.88 89.6514 103.702 90.2862 103.427C90.921 103.151 91.9627 102.795 91.9627 102.795L92.337 104.577Z" fill="#E88F97"/>
<path d="M106.611 102.36L109.037 102.117L108.093 99.5898L106.351 99.768L106.611 102.36Z" fill="#E88F97"/>
<path d="M107.832 93.7401C108.467 94.0154 109.02 94.793 109.427 95.36C109.818 95.927 110.127 96.5263 110.42 97.1581C110.648 97.6279 110.843 98.13 110.794 98.6322C110.729 99.264 110.306 99.8148 109.769 100.155C108.483 100.949 106.66 100.511 105.7 99.345C104.772 98.211 104.756 96.7369 105 95.36C105.244 94.1288 106.709 93.2541 107.832 93.7401Z" fill="#E88F97"/>
<path d="M105.358 101.5L106.351 101.37C107.279 101.986 106.758 100.35 106.595 99.3129C106.904 98.4381 105.7 97.5148 106.53 96.7534C106.888 96.4456 107.376 96.3323 107.751 96.0407C108.125 95.7491 108.467 94.7447 108.483 94.275C108.809 94.6799 109.199 95.4575 109.655 95.7329C109.525 94.7447 108.923 93.7566 108.011 93.303C107.116 92.8494 105.993 92.8495 105.098 93.3192C105.016 93.3678 104.951 93.4002 104.886 93.4488C104.886 93.4488 104.87 93.4488 104.87 93.465C102.721 94.9553 101.289 99.7179 105.358 101.5Z" fill="#2E3446"/>
<path d="M106.335 99.3459L106.856 99.2487L106.612 98.2929C106.514 97.888 106.107 97.645 105.7 97.7584L105.635 97.7746C105.228 97.888 105.065 98.3577 105.309 98.6979L105.57 99.0381C105.733 99.2811 106.042 99.4107 106.335 99.3459Z" fill="#E88F97"/>
<path d="M110.078 97.8066C110.078 97.8066 109.199 98.6976 108.679 98.5518C108.679 98.5518 109.427 99.3942 110.143 98.487L110.078 97.8066Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M91.436 102.978C97.5433 99.9735 104.374 101.136 108.224 101.964L107.831 103.792C103.998 102.968 97.7427 101.959 92.2611 104.657L91.436 102.978Z" fill="#FFD33D"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M110.899 103.75C109.977 103.724 109.093 103.7 108.132 103.808L107.923 101.949C109.024 101.826 110.049 101.855 110.965 101.881C111.108 101.885 111.247 101.889 111.384 101.892C112.427 101.917 113.33 101.906 114.234 101.68C115.972 101.245 117.968 99.9428 120.668 95.7168L122.243 96.7241C119.426 101.132 117.092 102.892 114.688 103.494C113.52 103.786 112.399 103.787 111.339 103.761C111.191 103.758 111.045 103.754 110.899 103.75Z" fill="#FFD33D"/>
<path d="M108.744 101.324C108.744 101.324 116.101 112.032 112.731 123.793C112.731 123.793 98.1476 127.113 91.1487 110.104L106.351 101.373L108.744 101.324Z" fill="#FFD33D"/>
<path d="M115.401 134.286C115.401 134.286 114.066 139.745 114.05 141.09C114.033 142.435 116.442 146.501 116.442 146.501L109.997 143.228L111.738 133.979L115.401 134.286Z" fill="#FFD33D"/>
<path d="M105.309 109.553L106.986 110.881C114.587 116.891 118.119 126.789 116.003 136.087L110.078 134.629C111.315 129.251 111.918 121.637 105.667 115.692L104.496 114.623C103.535 113.732 103.275 112.307 103.893 111.156L105.309 109.553Z" fill="#2E3446"/>
<path d="M85.5984 115.883C85.5984 115.883 81.7734 111.752 80.6341 110.991C79.4947 110.229 74.7908 109.986 74.7908 109.986L81.1061 106.455L87.8934 113.016L85.5984 115.883Z" fill="#FFD33D"/>
<path d="M103.877 111.154C103.844 111.203 101.322 116.306 96.3572 116.387C93.932 116.419 91.0348 114.394 88.87 111.786L84.1824 115.625C87.2749 119.335 90.8232 121.182 94.697 121.117C99.7102 121.036 103.844 117.683 105.96 115.577C107.653 113.957 108.5 111.835 108.5 111.835L103.877 111.154Z" fill="#2E3446"/>
<path d="M108.321 101.596C108.321 101.596 111.722 109.371 110.323 114.053L103.177 112.125L108.321 101.596Z" fill="#F66A0A"/>
<path d="M99.2218 96.4452C99.6287 94.5985 102.721 94.9224 104.658 96.6233L104.577 98.7616C99.7427 100.868 98.7986 98.2919 99.2218 96.4452Z" fill="#2E3446"/>
<path d="M108.321 101.596C108.304 101.563 107.653 100.219 107.653 100.219L106.107 100.721L106.302 101.612L108.321 101.596Z" fill="#FFD33D"/>
<path d="M108.386 102.325C108.7 102.325 108.955 102.071 108.955 101.758C108.955 101.445 108.7 101.191 108.386 101.191C108.071 101.191 107.816 101.445 107.816 101.758C107.816 102.071 108.071 102.325 108.386 102.325Z" fill="#2E3446"/>
<path d="M299.342 139.878L272.176 143.75V116.73L299.342 112.842V139.878Z" fill="#037DD6"/>
<path d="M254.093 133.382L272.176 143.749V116.729L254.093 106.361V133.382Z" fill="#43AEFC"/>
<path d="M281.242 102.488L299.342 112.84L272.176 116.727L254.093 106.36L281.242 102.488Z" fill="#75C4FD"/>
<path d="M285.751 119.043C282.17 119.545 279.257 122.833 279.257 126.397C279.257 129.961 285.751 137.542 285.751 137.542C285.751 137.542 292.245 128.163 292.245 124.599C292.245 121.035 289.348 118.541 285.751 119.043ZM285.751 127.564C284.221 127.774 282.984 126.721 282.984 125.198C282.984 123.676 284.221 122.266 285.751 122.056C287.281 121.845 288.518 122.898 288.518 124.421C288.518 125.944 287.281 127.337 285.751 127.564Z" fill="white"/>
<path d="M130.701 191.148C129.382 190.921 128.145 191.342 126.908 191.747C125.313 192.282 123.702 192.735 122.074 193.124C118.9 193.885 115.645 194.258 112.389 194.404C108.695 194.566 104.967 194.42 101.305 193.95C98.6194 193.61 95.9338 193.302 93.5411 194.404C92.5971 194.76 91.767 195.295 91.5554 196.283C91.3763 197.158 91.8158 197.951 92.5971 198.356C93.0528 198.583 93.5574 198.664 94.0131 198.907C94.2898 199.053 94.4689 199.312 94.5177 199.604C94.5503 199.749 94.5828 199.879 94.6317 200.009C94.9409 200.867 95.6896 201.531 96.4709 201.953C98.831 203.248 101.842 202.989 104.43 202.811C110.225 202.422 115.921 201.548 121.537 200.073C123.181 199.636 124.808 199.166 126.42 198.632C127.868 198.146 129.447 197.692 130.798 196.963C131.954 196.331 133.109 195.23 133.109 193.837C133.093 192.46 132.019 191.374 130.701 191.148Z" fill="url(#paint16_linear)"/>
<path d="M83.2544 182.497C81.5129 181.865 79.5597 181.266 77.6065 181.039C77.2321 180.991 76.8415 181.039 76.5159 181.217C76.3044 181.331 76.109 181.493 75.9625 181.72C75.7835 181.995 75.6696 182.303 75.6045 182.627C75.5882 184.943 77.8018 186.822 79.5922 188.134C80.7153 188.961 81.9686 189.852 83.3684 190.078C84.1334 190.208 85.0611 190.078 85.6471 189.576C86.7376 189.155 87.9747 188.588 88.4467 187.454C89.6186 184.635 85.1262 183.178 83.2544 182.497Z" fill="url(#paint17_linear)"/>
<path d="M115.238 207.037C115.157 206.762 114.977 206.584 114.717 206.47C114.701 206.454 114.685 206.438 114.652 206.422C114.554 206.373 114.457 206.324 114.359 206.292C114.278 206.179 114.131 206.098 113.952 206.098C112.894 206.098 111.136 205.903 110.355 206.81C109.997 207.232 109.997 207.863 110.42 208.252C110.876 208.657 111.608 208.673 112.178 208.657C112.975 208.608 115.629 208.317 115.238 207.037Z" fill="url(#paint18_linear)"/>
<path d="M283 41.676C283.98 41.676 284.774 40.8854 284.774 39.9102C284.774 38.9351 283.98 38.1445 283 38.1445C282.02 38.1445 281.226 38.9351 281.226 39.9102C281.226 40.8854 282.02 41.676 283 41.676Z" fill="url(#paint19_linear)"/>
<path d="M44.8908 143.91C45.8707 143.91 46.665 143.12 46.665 142.145C46.665 141.169 45.8707 140.379 44.8908 140.379C43.911 140.379 43.1167 141.169 43.1167 142.145C43.1167 143.12 43.911 143.91 44.8908 143.91Z" fill="url(#paint20_linear)"/>
<path d="M153.374 180.826C154.354 180.826 155.148 180.036 155.148 179.061C155.148 178.085 154.354 177.295 153.374 177.295C152.394 177.295 151.6 178.085 151.6 179.061C151.6 180.036 152.394 180.826 153.374 180.826Z" fill="url(#paint21_linear)"/>
<path d="M16.3579 168.92C17.3377 168.92 18.132 168.13 18.132 167.154C18.132 166.179 17.3377 165.389 16.3579 165.389C15.3781 165.389 14.5837 166.179 14.5837 167.154C14.5837 168.13 15.3781 168.92 16.3579 168.92Z" fill="url(#paint22_linear)"/>
<path d="M267.961 97.9865C268.941 97.9865 269.735 97.196 269.735 96.2208C269.735 95.2456 268.941 94.4551 267.961 94.4551C266.981 94.4551 266.187 95.2456 266.187 96.2208C266.187 97.196 266.981 97.9865 267.961 97.9865Z" fill="url(#paint23_linear)"/>
<path d="M263.908 147.15C264.888 147.15 265.682 146.36 265.682 145.385C265.682 144.41 264.888 143.619 263.908 143.619C262.928 143.619 262.134 144.41 262.134 145.385C262.134 146.36 262.928 147.15 263.908 147.15Z" fill="url(#paint24_linear)"/>
<path d="M315 92.1654L289.218 95.8588V70.1831L315 66.5059V92.1654Z" fill="#037DD6"/>
<path d="M272.03 86.0117L289.218 95.8608V70.185L272.03 60.3359V86.0117Z" fill="#43AEFC"/>
<path d="M297.828 56.6582L315 66.4911L289.218 70.1845L272.03 60.3354L297.828 56.6582Z" fill="#75C4FD"/>
<path d="M307.659 81.3957C307.692 81.1527 307.708 80.8935 307.708 80.6505C307.708 80.3913 307.692 80.1484 307.643 79.9054L309.271 78.415C309.417 78.2854 309.45 78.0587 309.368 77.9129L307.838 75.483C307.741 75.321 307.545 75.2886 307.366 75.3858L305.462 76.4225C305.055 76.1795 304.632 75.9852 304.16 75.8556L303.867 73.8631C303.834 73.6687 303.671 73.5715 303.476 73.5877L300.4 74.0251C300.205 74.0575 300.058 74.2032 300.026 74.3976L299.733 76.4711C299.261 76.7303 298.837 77.0543 298.43 77.3945L296.526 76.9085C296.347 76.8599 296.152 76.9571 296.054 77.1515L294.524 80.0188C294.426 80.1969 294.459 80.4075 294.622 80.4885L296.249 81.5253C296.217 81.7683 296.184 82.0275 296.184 82.2866C296.184 82.5458 296.201 82.7888 296.249 83.0318L294.622 84.5221C294.475 84.6517 294.443 84.8785 294.524 85.0243L296.054 87.4542C296.152 87.6162 296.347 87.6486 296.526 87.5514L298.43 86.5146C298.837 86.7576 299.261 86.952 299.733 87.0816L300.026 89.0741C300.058 89.2523 300.221 89.3657 300.416 89.3495L303.492 88.9121C303.688 88.8797 303.85 88.7339 303.867 88.5395L304.16 86.466C304.632 86.2068 305.055 85.8829 305.462 85.5427L307.366 86.0287C307.545 86.0773 307.741 85.9801 307.838 85.7857L309.368 82.9184C309.466 82.7402 309.433 82.5296 309.271 82.4486L307.659 81.3957ZM301.93 84.3277C300.351 84.5545 299.049 83.453 299.049 81.8655C299.049 80.2779 300.351 78.82 301.93 78.5932C303.509 78.3664 304.811 79.468 304.811 81.0555C304.811 82.643 303.525 84.101 301.93 84.3277Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear" x1="153.302" y1="103.529" x2="213.561" y2="232.975" gradientUnits="userSpaceOnUse">
<stop offset="0.0101602" stop-color="#F2F2F2"/>
<stop offset="0.9999" stop-color="#CCCCCC"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="85.2651" y1="51.1845" x2="195.276" y2="288.39" gradientUnits="userSpaceOnUse">
<stop stop-color="#E6E6E6"/>
<stop offset="1" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint2_linear" x1="40.1345" y1="72.1156" x2="150.146" y2="309.321" gradientUnits="userSpaceOnUse">
<stop stop-color="#E6E6E6"/>
<stop offset="1" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint3_linear" x1="158.632" y1="181.499" x2="214.499" y2="217.173" gradientUnits="userSpaceOnUse">
<stop stop-color="#E6E6E6"/>
<stop offset="1" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint4_linear" x1="160.988" y1="16.0652" x2="270.999" y2="253.271" gradientUnits="userSpaceOnUse">
<stop stop-color="#E6E6E6"/>
<stop offset="1" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint5_linear" x1="187.619" y1="3.71281" x2="297.63" y2="240.918" gradientUnits="userSpaceOnUse">
<stop stop-color="#E6E6E6"/>
<stop offset="1" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint6_linear" x1="208.402" y1="-5.92258" x2="318.413" y2="231.283" gradientUnits="userSpaceOnUse">
<stop stop-color="#E6E6E6"/>
<stop offset="1" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint7_linear" x1="44.1431" y1="126.693" x2="259.883" y2="50.6456" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear" x1="135.507" y1="61.459" x2="234.65" y2="61.459" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint9_linear" x1="135.507" y1="80.109" x2="234.65" y2="80.109" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint10_linear" x1="72.3651" y1="63.4603" x2="78.5247" y2="38.7043" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint11_linear" x1="72.3651" y1="63.4603" x2="78.5247" y2="38.7043" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint12_linear" x1="285.581" y1="141.785" x2="221.499" y2="183.144" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint13_linear" x1="61.6461" y1="229.647" x2="160.892" y2="204.605" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint14_linear" x1="62.9474" y1="65.5033" x2="216.321" y2="5.69293" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint15_linear" x1="59.3936" y1="56.389" x2="212.767" y2="-3.42118" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint16_linear" x1="56.6617" y1="209.89" x2="155.907" y2="184.848" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint17_linear" x1="52.3141" y1="192.659" x2="151.56" y2="167.617" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint18_linear" x1="59.3704" y1="220.623" x2="158.616" y2="195.581" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint19_linear" x1="281.212" y1="39.9073" x2="284.774" y2="39.9073" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint20_linear" x1="43.1167" y1="142.138" x2="46.6789" y2="142.138" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint21_linear" x1="151.596" y1="179.058" x2="155.159" y2="179.058" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint22_linear" x1="14.5696" y1="167.158" x2="18.1318" y2="167.158" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint23_linear" x1="266.183" y1="96.2203" x2="269.745" y2="96.2203" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint24_linear" x1="262.12" y1="145.382" x2="265.683" y2="145.382" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 50 KiB

@ -0,0 +1,335 @@
<svg width="169" height="237" viewBox="0 0 169 237" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M134 62.0095C134.773 62.0095 135.4 61.3804 135.4 60.6044C135.4 59.8283 134.773 59.1992 134 59.1992C133.226 59.1992 132.599 59.8283 132.599 60.6044C132.599 61.3804 133.226 62.0095 134 62.0095Z" fill="url(#paint0_linear)"/>
<path d="M101.24 167.566C102.013 167.566 102.64 166.937 102.64 166.161C102.64 165.385 102.013 164.756 101.24 164.756C100.467 164.756 99.8396 165.385 99.8396 166.161C99.8396 166.937 100.467 167.566 101.24 167.566Z" fill="url(#paint1_linear)"/>
<path d="M23.2279 95.4626C24.0013 95.4626 24.6282 94.8335 24.6282 94.0575C24.6282 93.2814 24.0013 92.6523 23.2279 92.6523C22.4546 92.6523 21.8276 93.2814 21.8276 94.0575C21.8276 94.8335 22.4546 95.4626 23.2279 95.4626Z" fill="url(#paint2_linear)"/>
<path d="M14.3224 101.625C15.0958 101.625 15.7227 100.996 15.7227 100.22C15.7227 99.4436 15.0958 98.8145 14.3224 98.8145C13.5491 98.8145 12.9221 99.4436 12.9221 100.22C12.9221 100.996 13.5491 101.625 14.3224 101.625Z" fill="url(#paint3_linear)"/>
<path d="M155.349 132.045C156.122 132.045 156.749 131.416 156.749 130.64C156.749 129.863 156.122 129.234 155.349 129.234C154.575 129.234 153.948 129.863 153.948 130.64C153.948 131.416 154.575 132.045 155.349 132.045Z" fill="url(#paint4_linear)"/>
<path d="M161.625 53.6263C157.67 53.6263 154.439 50.3969 154.439 46.4157C154.439 42.4344 157.658 39.2051 161.625 39.2051C165.593 39.2051 168.811 42.4344 168.811 46.4157C168.811 50.3969 165.593 53.6263 161.625 53.6263ZM161.625 41.547C158.947 41.547 156.761 43.741 156.761 46.428C156.761 49.115 158.947 51.309 161.625 51.309C164.303 51.309 166.489 49.115 166.489 46.428C166.489 43.741 164.315 41.547 161.625 41.547Z" fill="#86E29B"/>
<path d="M5.1099 87.0793C2.297 87.0793 0 84.7744 0 81.9518C0 79.1291 2.297 76.8242 5.1099 76.8242C7.92281 76.8242 10.2198 79.1291 10.2198 81.9518C10.2198 84.7744 7.92281 87.0793 5.1099 87.0793ZM5.1099 77.9089C2.8866 77.9089 1.08094 79.7208 1.08094 81.9518C1.08094 84.1827 2.8866 85.9946 5.1099 85.9946C7.3332 85.9946 9.13887 84.1827 9.13887 81.9518C9.13887 79.7208 7.3332 77.9089 5.1099 77.9089Z" fill="#86E29B"/>
<path d="M21.533 138.392C16.3862 138.392 12.2098 134.189 12.2098 129.037C12.2098 123.872 16.3985 119.682 21.533 119.682C26.6674 119.682 30.8561 123.885 30.8561 129.037C30.8561 134.201 26.6797 138.392 21.533 138.392ZM21.533 121.678C17.4917 121.678 14.1998 124.982 14.1998 129.037C14.1998 133.092 17.4917 136.395 21.533 136.395C25.5742 136.395 28.8662 133.092 28.8662 129.037C28.8662 124.982 25.5742 121.678 21.533 121.678Z" fill="#FFD33D"/>
<path d="M148.261 138.059C147.548 139.673 145.276 139.587 143.544 139.304C140.412 138.786 137.255 138.453 134.086 138.33C133.189 138.293 131.924 138.663 132.096 139.55C132.182 140.018 132.685 140.302 132.956 140.696C133.631 141.707 132.563 143.125 131.359 143.297C130.155 143.47 129 142.903 127.858 142.484C126.519 141.991 125.094 141.719 123.669 141.658V124.574C125.942 124.697 128.227 124.808 130.499 124.932C131.138 124.969 131.826 125.018 132.329 125.425C132.747 125.757 132.956 126.288 133.226 126.768C134.491 129.098 137.046 130.367 139.54 131.255C142.033 132.13 144.674 132.783 146.762 134.41C147.868 135.285 148.838 136.752 148.261 138.059Z" fill="url(#paint5_linear)"/>
<path d="M62.8051 14.1601C62.0558 10.98 61.589 7.73831 61.4047 4.47197C61.331 3.0052 61.417 1.29191 62.6085 0.441431C63.5052 -0.199511 64.7827 -0.0885787 65.7531 0.429105C66.7235 0.959116 67.4605 1.82192 68.1483 2.69706C70.8753 6.13596 73.2091 9.88301 75.113 13.8519C70.8875 13.6547 67.0305 13.8519 62.8051 14.1601Z" fill="url(#paint6_linear)"/>
<path d="M98.7587 144.012C97.0636 142.533 92.6661 138.774 86.9666 134.423C76.624 126.522 61.9698 116.674 51.3938 115.022C51.3815 114.689 51.2955 114.356 51.2955 114.011L51.3692 102.487L51.3078 70.6244C51.2833 65.5092 47.3403 61.2445 42.2672 60.7638L39.6017 60.5049C38.1154 60.3694 36.838 61.528 36.838 63.0317V87.0794C36.838 95.6828 34.9095 104.175 31.1999 111.928L25.5618 123.724C23.2525 128.543 22.061 133.819 22.061 139.168V148.524C22.061 154.144 22.1961 159.863 21.4345 165.866C20.9064 170.007 19.9605 174.272 18.2409 178.746C17.3687 181.027 8.83175 204.396 7.83679 207.059L57.4495 236.986L71.6737 193.587L72.0177 193.402L75.4939 191.627C82.1638 188.2 87.2245 182.272 89.5584 175.135L90.7253 171.561L99.508 144.666C99.5203 144.678 99.25 144.444 98.7587 144.012Z" fill="url(#paint7_linear)"/>
<path d="M98.6359 136.566L86.9789 134.434L51.2955 127.889V157.619C51.2955 163.387 46.6401 168.059 40.8915 168.059C40.8915 168.059 53.6294 169.451 63.1613 174.295C68.6152 177.636 66.2813 186.276 65.0161 190.122C63.665 194.263 49.9075 232.436 49.9075 232.436L57.4618 236.997L71.686 193.598L75.5062 191.638C82.1761 188.211 87.2369 182.283 89.5707 175.146L90.7376 171.571L92.3836 166.518C92.3836 166.518 96.5231 154.143 98.5867 144.676C98.6359 144.455 98.7096 144.233 98.7587 144.011C99.422 141.299 99.3237 138.822 98.6359 136.566Z" fill="url(#paint8_linear)"/>
<path d="M41.2354 77.1072L36.8379 77.1565V63.3885C36.8379 62.9941 36.887 62.612 36.9853 62.2422C36.9976 62.2053 36.9976 62.1683 37.0099 62.1436C37.0221 62.119 37.0221 62.1067 37.0221 62.0943C37.3169 61.3794 37.9188 60.8248 38.6681 60.6152C41.481 61.3425 43.6183 63.7953 43.8272 66.8274L44.3185 73.7299C44.4536 75.5418 43.041 77.0825 41.2354 77.1072Z" fill="#CFD3D6"/>
<path d="M36.838 72.5716C39.2578 72.5469 41.6776 72.8797 44.0115 73.5823L44.3186 73.6686V73.7302C44.3186 73.7302 44.3186 73.7302 44.3186 73.7425C44.4414 75.4312 43.2008 76.898 41.5548 77.0829C41.4443 77.0952 41.3337 77.1075 41.2232 77.1075L36.8257 77.1568V72.5716H36.838Z" fill="#CFD3D6"/>
<path d="M137.193 86.8928L88.7231 96.5315L85.9225 77.7347L134.344 70.4748C138.889 69.7969 143.114 72.9399 143.79 77.4882C144.453 81.8762 141.542 86.0176 137.193 86.8928Z" fill="#BBC0C5"/>
<path d="M133.152 54.5512L90.799 80.0779L81.8198 63.3395L124.935 40.056C128.976 37.8743 134.012 39.3904 136.186 43.4456C138.287 47.3652 136.948 52.2586 133.152 54.5512Z" fill="#BBC0C5"/>
<path d="M133.152 54.5512L90.799 80.0779L81.8198 63.3395L124.935 40.056C128.976 37.8743 134.012 39.3904 136.186 43.4456C138.287 47.3652 136.948 52.2586 133.152 54.5512Z" fill="#BBC0C5"/>
<path d="M137.193 86.8928L88.7231 96.5315L85.9225 77.7347L134.344 70.4748C138.889 69.7969 143.114 72.9399 143.79 77.4882C144.453 81.8762 141.542 86.0176 137.193 86.8928Z" fill="#BBC0C5"/>
<path d="M133.152 54.5512L90.799 80.0779L81.8198 63.3395L124.935 40.056C128.976 37.8743 134.012 39.3904 136.186 43.4456C138.287 47.3652 136.948 52.2586 133.152 54.5512Z" fill="#BBC0C5"/>
<path d="M122.036 29.9726C125.487 27.2362 129.295 24.956 133.336 23.2057C134.368 22.762 135.658 22.3922 136.506 23.1071C137.611 24.0562 136.936 25.8681 136.076 27.039C133.558 30.4656 129.836 33.584 129.774 37.8364C129.75 39.069 130.069 40.3016 129.959 41.5342C129.725 44.2212 127.649 46.3166 125.684 48.1655C124.468 49.3118 123.252 50.4581 122.036 51.592C122.343 43.8021 122.294 37.7871 122.036 29.9726Z" fill="url(#paint9_linear)"/>
<path d="M118.584 119.891H127.182C130.499 119.891 133.189 117.192 133.189 113.864V108.145C133.189 104.817 130.499 102.117 127.182 102.117H118.584C115.415 102.117 112.848 104.693 112.848 107.873V114.135C112.848 117.315 115.415 119.891 118.584 119.891Z" fill="#DDA37C"/>
<path d="M118.584 119.891H127.182C130.499 119.891 133.189 117.192 133.189 113.864V108.145C133.189 104.817 130.499 102.117 127.182 102.117H118.584C115.415 102.117 112.848 104.693 112.848 107.873V114.135C112.848 117.315 115.415 119.891 118.584 119.891Z" fill="#BBC0C5"/>
<path d="M118.068 11.5215H56.7248C53.6294 11.5215 51.1235 14.036 51.1235 17.1421V156.264C51.1235 159.37 53.6294 161.884 56.7248 161.884H118.068C121.164 161.884 123.669 159.37 123.669 156.264V17.1421C123.669 14.036 121.151 11.5215 118.068 11.5215ZM90.8604 152.973C90.8973 152.849 90.9464 152.726 90.9833 152.603C91.6097 150.754 92.5064 148.769 94.2506 148.042C96.0072 147.315 98.0831 148.165 99.3851 149.595C100.27 150.557 100.871 151.74 101.375 152.973H90.8604Z" fill="#24292E"/>
<path d="M100.933 158.408H73.8602C73.504 158.408 73.2092 158.112 73.2092 157.755C73.2092 157.397 73.504 157.102 73.8602 157.102H100.933C101.289 157.102 101.584 157.397 101.584 157.755C101.584 158.112 101.289 158.408 100.933 158.408Z" fill="#6A737D"/>
<path d="M101.24 16.5995H74.5972C74.241 16.5995 73.9462 16.3037 73.9462 15.9462C73.9462 15.5888 74.241 15.293 74.5972 15.293H101.24C101.596 15.293 101.891 15.5888 101.891 15.9462C101.891 16.3037 101.596 16.5995 101.24 16.5995Z" fill="#6A737D"/>
<path d="M63.1245 18.9649C63.7758 18.9649 64.3037 18.3965 64.3037 17.6953C64.3037 16.9942 63.7758 16.4258 63.1245 16.4258C62.4733 16.4258 61.9453 16.9942 61.9453 17.6953C61.9453 18.3965 62.4733 18.9649 63.1245 18.9649Z" fill="#24292E"/>
<path d="M128.055 128.776H132.685C136.002 128.776 138.692 126.076 138.692 122.748V117.029C138.692 113.701 136.002 111.002 132.685 111.002H128.055C124.885 111.002 122.318 113.578 122.318 116.758V123.02C122.318 126.2 124.885 128.776 128.055 128.776Z" fill="#CFD3D6"/>
<path d="M133.447 101.624C133.447 101.661 133.447 101.711 133.447 101.748C133.435 104.878 131.789 107.381 129.824 107.393L128.816 107.405V96.0039H129.811C131.777 96.0039 133.435 98.4937 133.447 101.624Z" fill="#CFD3D6"/>
<path d="M129.885 96.0039V107.393C129.86 107.393 129.848 107.393 129.824 107.393L128.816 107.405V96.0039H129.811C129.836 96.0039 129.86 96.0039 129.885 96.0039Z" fill="#CFD3D6"/>
<path d="M132.477 114.923C134.393 117.831 134.393 121.911 132.489 124.833C132.182 125.301 131.727 125.572 131.224 125.572L128.804 125.597V114.195H131.199C131.703 114.195 132.17 114.466 132.477 114.923Z" fill="#CFD3D6"/>
<path d="M130.253 114.195V125.584C130.229 125.584 130.192 125.584 130.167 125.584L128.804 125.597V114.195H130.143C130.192 114.195 130.217 114.195 130.253 114.195Z" fill="#CFD3D6"/>
<path d="M79.1911 143.84C75.3219 145.27 71.2683 147.069 67.2394 146.243C64.0948 145.59 61.3433 143.261 60.1887 140.253C59.034 137.246 59.5131 133.659 61.417 131.058C62.7436 129.234 64.6721 127.94 66.6498 126.867C67.5587 126.374 68.5046 125.918 69.4504 125.499C69.1679 124.402 69.0327 123.219 68.9959 122.035C67.4359 120.815 65.6548 119.928 63.6895 119.681C60.6555 119.287 57.5723 120.47 55.1525 122.344C55.0051 122.467 54.8454 122.578 54.698 122.701V150.052C54.698 151.667 55.9141 152.973 57.4003 152.973H90.8481C90.8849 152.85 90.9341 152.727 90.9709 152.604C91.5974 150.755 92.4941 148.77 94.2383 148.043C94.8648 147.784 95.5281 147.723 96.1791 147.821C94.398 146.687 92.9731 144.715 91.1183 143.569C87.6175 141.399 83.0604 142.422 79.1911 143.84Z" fill="#666666"/>
<path d="M104.237 133.006C105.318 131.255 107.333 130.146 108.156 128.248C109.458 125.203 111.116 125.82 109.986 122.701C109.568 121.555 108.929 120.421 108.389 119.373C106.755 119.201 105.699 117.968 104.102 118.363C101.142 119.09 97.8129 121.937 95.2088 123.515C94.263 124.082 91.4132 123.564 90.5165 124.23C90.5042 125.807 90.2708 128.716 90.0743 130.269C89.7058 133.154 90.7745 135.878 88.6494 137.85C86.5244 139.822 83.0973 140.561 80.6529 139.008C79.2895 138.145 78.3928 136.716 77.6189 135.311C76.7836 133.794 76.0466 132.229 75.2728 130.688C74.4007 130.701 73.5285 130.516 72.7055 130.072C70.9244 129.135 69.9541 127.447 69.4504 125.499C68.5046 125.918 67.5588 126.374 66.6498 126.867C64.6722 127.94 62.7437 129.234 61.4171 131.058C59.5131 133.659 59.0341 137.233 60.1887 140.253C61.3434 143.273 64.0949 145.603 67.2394 146.244C71.2807 147.069 75.3219 145.27 79.1912 143.84C83.0605 142.41 87.6176 141.387 91.1184 143.569C92.9732 144.715 94.3981 146.687 96.1792 147.821C96.9039 147.92 97.6163 148.216 98.2551 148.647C98.2919 148.647 98.3288 148.659 98.3779 148.672C101.78 149.103 104.483 145.368 104.532 141.917C104.532 141.547 104.52 141.178 104.495 140.796C103.279 138.269 102.812 135.335 104.237 133.006Z" fill="url(#paint10_linear)"/>
<path d="M98.378 148.659C98.3411 148.659 98.3043 148.646 98.2551 148.634C98.6605 148.905 99.0413 149.226 99.3729 149.596C100.257 150.557 100.859 151.74 101.363 152.973H117.135C118.081 152.973 118.904 152.455 119.383 151.679C113.745 150.643 108.536 147.241 105.392 142.422C105.06 141.904 104.753 141.362 104.483 140.795C104.507 141.165 104.52 141.534 104.52 141.917C104.495 145.355 101.793 149.103 98.378 148.659Z" fill="#666666"/>
<path d="M103.918 105.679C104.348 105.026 103.242 105.42 102.149 105.839C101.584 105.913 101.031 106.024 100.478 106.147C94.2383 107.59 88.7476 112.224 86.4752 118.251C84.9889 122.196 84.7924 121.419 82.9253 125.203C81.4758 128.149 78.3436 130.651 75.2727 130.7C76.0466 132.241 76.7959 133.819 77.6188 135.323C78.3927 136.74 79.3017 138.158 80.6528 139.02C83.0972 140.573 86.5243 139.834 88.6494 137.862C90.4673 136.173 91.0078 134.139 91.4131 131.81C91.8676 129.234 93.01 126.781 94.7051 124.796C97.9356 121.012 103.451 118.868 108.377 119.373C107.308 117.302 106.632 115.54 108.868 114.689C111.595 113.642 114.641 115.33 116.692 117.426C117.798 118.56 118.781 119.854 119.849 121.025V113.136C116.054 108.403 109.998 105.457 103.918 105.679ZM100.478 106.135C100.38 106.234 100.343 106.308 100.343 106.369C100.319 106.332 100.368 106.258 100.478 106.135ZM92.4327 122.307C92.4449 121.998 92.4449 121.678 92.4572 121.37C92.4449 121.678 92.4327 121.998 92.4327 122.307ZM92.4081 124.242C92.4081 123.983 92.4081 123.724 92.4081 123.478C92.4081 123.724 92.4081 123.983 92.4081 124.242ZM104.016 106.887C103.586 106.986 103.168 107.109 102.738 107.257C102.984 106.961 103.217 106.665 103.439 106.357C103.967 106.369 104.274 106.493 104.016 106.887Z" fill="url(#paint11_linear)"/>
<path d="M63.6896 119.681C65.6427 119.94 67.4361 120.815 68.9961 122.035C68.9592 120.975 68.9838 119.915 69.0329 118.904C69.254 114.75 68.8855 109.623 65.1268 107.873C63.0263 106.887 60.5574 107.38 58.3341 108.058C57.1426 108.415 55.9265 108.822 54.7104 109.081V122.713C54.8579 122.59 55.0053 122.466 55.1527 122.355C57.5725 120.457 60.6556 119.286 63.6896 119.681Z" fill="url(#paint12_linear)"/>
<path d="M119.862 115.848C118.793 114.665 117.81 113.383 116.705 112.249C114.653 110.154 111.619 108.465 108.88 109.513C105.527 110.807 104.79 115.454 106.018 118.844C107.148 121.962 109.458 125.216 108.156 128.261C107.345 130.159 105.33 131.256 104.249 133.018C102.493 135.853 103.598 139.637 105.429 142.423C108.573 147.242 113.781 150.644 119.419 151.68C119.702 151.211 119.874 150.657 119.874 150.065V115.848H119.862Z" fill="url(#paint13_linear)"/>
<path d="M119.862 22.3938V118.757C116.054 114.012 110.01 111.078 103.93 111.288C96.3511 111.559 89.1653 116.736 86.4875 123.848C83.6746 130.676 76.4397 132.032 72.7178 130.072C69.0451 128.137 68.8239 123.046 69.0451 118.893C69.2662 114.739 68.8977 109.611 65.1389 107.861C63.0385 106.875 60.5695 107.368 58.3585 108.046C57.167 108.403 55.9509 108.81 54.7349 109.069V68.5909C55.5333 69.4661 56.4668 70.181 57.6092 70.3905C60.7783 70.9822 63.2841 67.2967 63.2104 64.055C63.1367 60.8257 61.5153 57.8428 60.8766 54.6628C60.2378 51.495 61.0608 47.4892 64.0826 46.3675C66.5638 45.4431 69.2784 46.9222 71.2929 48.6355C74.6217 51.4581 77.2872 55.0942 81.0091 57.3621C81.9304 57.9291 82.9253 58.4098 83.994 58.4838C87.7281 58.7549 89.976 54.3423 90.4674 50.6199C91.7817 40.7469 88.1212 30.9233 82.8393 22.3691H119.862V22.3938Z" fill="white"/>
<path d="M90.4429 50.6453C89.9516 54.3677 87.7037 58.7803 83.9695 58.5092C82.9009 58.4352 81.8936 57.9545 80.9847 57.3875C77.2628 55.1072 74.5973 51.4835 71.2685 48.6608C69.2417 46.9476 66.5394 45.4685 64.0581 46.3929C61.0364 47.5145 60.2011 51.5204 60.8522 54.6882C61.5032 57.8559 63.1123 60.8387 63.186 64.0804C63.2597 67.3098 60.7539 71.0075 57.5848 70.4159C56.4424 70.2064 55.5089 69.4915 54.7104 68.6163V22.3945H82.8272C88.0968 30.9486 91.7572 40.76 90.4429 50.6453Z" fill="url(#paint14_linear)"/>
<path d="M166.846 104.891H152.216V119.571H166.846V104.891Z" fill="#43AEFC"/>
<path d="M152.216 119.559L146.787 116.946V103.006L152.216 104.892V119.559Z" fill="url(#paint15_linear)"/>
<path d="M159.783 103.006L166.846 104.892H152.216L146.787 103.006H159.783Z" fill="url(#paint16_linear)"/>
<path d="M162.424 112.483C162.436 112.348 162.448 112.212 162.448 112.064C162.448 111.916 162.436 111.781 162.411 111.645L163.308 110.943C163.394 110.881 163.406 110.758 163.357 110.671L162.497 109.192C162.448 109.094 162.338 109.069 162.239 109.094L161.183 109.525C160.962 109.352 160.729 109.217 160.458 109.106L160.299 107.972C160.286 107.861 160.188 107.787 160.09 107.787H158.382C158.272 107.787 158.186 107.861 158.174 107.972L158.014 109.106C157.756 109.217 157.51 109.352 157.289 109.525L156.233 109.094C156.135 109.057 156.024 109.094 155.975 109.192L155.115 110.671C155.066 110.77 155.078 110.881 155.164 110.943L156.061 111.645C156.036 111.781 156.024 111.929 156.024 112.064C156.024 112.2 156.036 112.348 156.061 112.483L155.164 113.186C155.078 113.247 155.066 113.371 155.115 113.457L155.975 114.936C156.024 115.035 156.135 115.059 156.233 115.035L157.289 114.603C157.51 114.776 157.744 114.911 158.014 115.022L158.174 116.156C158.198 116.267 158.284 116.341 158.382 116.341H160.09C160.2 116.341 160.286 116.267 160.299 116.156L160.458 115.022C160.716 114.911 160.962 114.776 161.183 114.603L162.239 115.035C162.338 115.072 162.448 115.035 162.497 114.936L163.357 113.457C163.406 113.358 163.394 113.247 163.308 113.186L162.424 112.483ZM159.242 113.667C158.358 113.667 157.645 112.939 157.645 112.064C157.645 111.189 158.37 110.462 159.242 110.462C160.114 110.462 160.839 111.189 160.839 112.064C160.839 112.939 160.127 113.667 159.242 113.667Z" fill="white"/>
<path d="M105.435 66.6973L89.6632 78.4501L92.5799 71.5161L105.435 66.6973Z" fill="#E2761B" stroke="#E2761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M69.0247 66.6973L84.67 78.5614L81.896 71.5161L69.0247 66.6973Z" fill="#E4761B" stroke="#E4761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M99.7606 93.9395L95.5599 100.396L104.548 102.877L107.131 94.0826L99.7606 93.9395Z" fill="#E4761B" stroke="#E4761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M67.3602 94.0826L69.9282 102.877L78.9159 100.396L74.7153 93.9395L67.3602 94.0826Z" fill="#E4761B" stroke="#E4761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M78.4087 83.0306L75.9042 86.8316L84.8285 87.2292L84.5115 77.6074L78.4087 83.0306Z" fill="#E4761B" stroke="#E4761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M96.0513 83.0306L89.8693 77.4961L89.6632 87.2291L98.5717 86.8315L96.0513 83.0306Z" fill="#E4761B" stroke="#E4761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M78.9159 100.397L84.2737 97.7725L79.6451 94.1465L78.9159 100.397Z" fill="#E4761B" stroke="#E4761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M90.1863 97.7725L95.5599 100.397L94.8149 94.1465L90.1863 97.7725Z" fill="#E4761B" stroke="#E4761B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M95.5599 100.398L90.1863 97.7734L90.6143 101.288L90.5667 102.767L95.5599 100.398Z" fill="#D7C1B3" stroke="#D7C1B3" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M78.9159 100.398L83.9091 102.767L83.8774 101.288L84.2737 97.7734L78.9159 100.398Z" fill="#D7C1B3" stroke="#D7C1B3" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M83.9884 91.8239L79.5183 90.5039L82.6727 89.0566L83.9884 91.8239Z" fill="#233447" stroke="#233447" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M90.4717 91.8239L91.7873 89.0566L94.9576 90.5039L90.4717 91.8239Z" fill="#233447" stroke="#233447" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M78.916 100.396L79.6768 93.9395L74.7153 94.0826L78.916 100.396Z" fill="#CD6116" stroke="#CD6116" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M94.7991 93.9395L95.5599 100.396L99.7606 94.0826L94.7991 93.9395Z" fill="#CD6116" stroke="#CD6116" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M98.5717 86.8301L89.6632 87.2277L90.4875 91.8238L91.8032 89.0566L94.9734 90.5038L98.5717 86.8301Z" fill="#CD6116" stroke="#CD6116" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M79.5183 90.5038L82.6886 89.0566L83.9884 91.8238L84.8285 87.2277L75.9042 86.8301L79.5183 90.5038Z" fill="#CD6116" stroke="#CD6116" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M75.9042 86.8301L79.6451 94.1458L79.5183 90.5038L75.9042 86.8301Z" fill="#E4751F" stroke="#E4751F" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M94.9735 90.5038L94.8149 94.1458L98.5717 86.8301L94.9735 90.5038Z" fill="#E4751F" stroke="#E4751F" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M84.8285 87.2285L83.9884 91.8247L85.0346 97.2478L85.2724 90.1071L84.8285 87.2285Z" fill="#E4751F" stroke="#E4751F" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M89.6632 87.2285L89.2352 90.0912L89.4254 97.2478L90.4875 91.8247L89.6632 87.2285Z" fill="#E4751F" stroke="#E4751F" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M90.4875 91.8259L89.4254 97.249L90.1863 97.7738L94.8149 94.1478L94.9734 90.5059L90.4875 91.8259Z" fill="#F6851B" stroke="#F6851B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M79.5183 90.5059L79.6451 94.1478L84.2737 97.7738L85.0346 97.249L83.9884 91.8259L79.5183 90.5059Z" fill="#F6851B" stroke="#F6851B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M90.5667 102.768L90.6143 101.289L90.218 100.939H84.242L83.8774 101.289L83.9091 102.768L78.9159 100.398L80.6596 101.83L84.1944 104.295H90.2655L93.8163 101.83L95.5599 100.398L90.5667 102.768Z" fill="#C0AD9E" stroke="#C0AD9E" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M90.1863 97.7729L89.4255 97.248H85.0346L84.2737 97.7729L83.8774 101.288L84.242 100.938H90.218L90.6143 101.288L90.1863 97.7729Z" fill="#161616" stroke="#161616" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M106.101 79.2135L107.449 72.7248L105.435 66.6973L90.1863 78.0525L96.0513 83.0303L104.342 85.4636L106.18 83.3166L105.388 82.7441L106.656 81.5831L105.673 80.8197L106.941 79.8496L106.101 79.2135Z" fill="#763D16" stroke="#763D16" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M67.0273 72.7248L68.3747 79.2135L67.5187 79.8496L68.7869 80.8197L67.8199 81.5831L69.088 82.7441L68.2955 83.3166L70.1184 85.4636L78.4087 83.0303L84.2737 78.0525L69.0246 66.6973L67.0273 72.7248Z" fill="#763D16" stroke="#763D16" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M104.342 85.4645L96.0514 83.0312L98.5717 86.8322L94.8149 94.1479L99.7606 94.0843H107.132L104.342 85.4645Z" fill="#F6851B" stroke="#F6851B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M78.4087 83.0312L70.1184 85.4645L67.3602 94.0843H74.7153L79.6451 94.1479L75.9042 86.8322L78.4087 83.0312Z" fill="#F6851B" stroke="#F6851B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M89.6632 87.2285L90.1863 78.052L92.5957 71.5156H81.896L84.2737 78.052L84.8285 87.2285L85.0187 90.1229L85.0346 97.2478H89.4254L89.4571 90.1229L89.6632 87.2285Z" fill="#F6851B" stroke="#F6851B" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M25.0828 135.422H10.5515V150.003H25.0828V135.422Z" fill="#43AEFC"/>
<path d="M30.3278 130.639L25.0828 135.421H10.5515L12.2589 134.041L16.7546 130.441L16.9512 130.281H16.9757L17.5162 130.294L30.3278 130.639Z" fill="url(#paint17_linear)"/>
<path d="M25.0828 150.015L30.3278 145.232V130.639L25.0828 135.421V150.015Z" fill="url(#paint18_linear)"/>
<path d="M21.2768 146.624C23.1734 144.734 23.1649 141.64 21.2577 139.713C19.3505 137.785 16.2668 137.755 14.3701 139.645C12.4735 141.534 12.482 144.629 14.3892 146.556C16.2964 148.484 19.3801 148.514 21.2768 146.624Z" fill="white"/>
<path d="M17.8233 140.303C17.8233 141.868 16.5581 143.113 15.0104 143.088C16.5704 143.113 17.8233 144.395 17.8233 145.96C17.8233 144.395 19.0885 143.15 20.6362 143.175C19.0762 143.15 17.8233 141.868 17.8233 140.303Z" fill="#43AEFC"/>
<path d="M67.9395 145.27C63.3332 144.173 58.6533 146.182 54.698 149.239V150.065C54.698 151.679 55.9141 152.974 57.4004 152.974H75.457C75.3956 152.85 75.3341 152.739 75.2727 152.616C73.16 148.672 71.9439 146.219 67.9395 145.27Z" fill="url(#paint19_linear)"/>
<path d="M119.776 74.1274C119.8 74.1643 119.825 74.2136 119.862 74.2506V68.7656C119.665 69.6777 119.518 70.5898 119.419 71.4896C119.309 72.3894 119.297 73.3632 119.776 74.1274Z" fill="white"/>
<path d="M67.9763 32.058C66.5637 33.7836 64.1316 34.0178 62.1663 33.2289C61.159 32.8222 60.2378 32.1936 59.3779 31.454V22.3945H68.394C68.5414 23.1341 68.7011 23.8736 68.8485 24.6009C69.3644 27.1523 69.5486 30.1351 67.9763 32.058Z" fill="#666666"/>
<path d="M63.3096 35.8667C64.8819 33.9438 64.6976 30.9486 64.1817 28.3972C63.7886 26.4251 63.2482 24.3667 63.3833 22.3945H54.7112V30.0242V35.2627C55.571 35.9899 56.48 36.6185 57.4995 37.0376C59.4526 37.8265 61.897 37.5923 63.3096 35.8667Z" fill="url(#paint20_linear)"/>
<path d="M119.862 66.3965C119.112 66.3225 118.363 66.2486 117.614 66.1623C116.287 66.0144 114.862 65.7802 113.929 64.8311C112.848 63.7341 112.774 61.9222 113.339 60.4924C113.904 59.0503 114.985 57.8917 116.041 56.77C117.294 55.4388 118.609 54.046 119.862 52.7148V66.3965Z" fill="url(#paint21_linear)"/>
<path d="M117.061 172.546C116.435 174.124 114.985 175.48 113.339 175.43C112.172 175.393 111.116 174.691 110.281 173.84C108.266 171.794 107.21 168.971 106.215 166.235C105.687 164.793 105.158 163.339 104.642 161.896H117.258C117.417 163.758 117.528 165.631 117.601 167.505C117.675 169.193 117.687 170.956 117.061 172.546Z" fill="url(#paint22_linear)"/>
<path d="M101.375 152.973H90.8605C90.8973 152.85 90.9465 152.726 90.9833 152.603C91.6098 150.754 92.5065 148.77 94.2507 148.043C96.0072 147.315 98.0831 148.166 99.3852 149.596C100.27 150.569 100.871 151.74 101.375 152.973Z" fill="url(#paint23_linear)"/>
<path d="M88.7845 161.885C88.4405 164.091 87.6298 166.827 85.5171 166.864C84.3502 166.889 83.3798 165.989 82.5813 165.102C81.6601 164.079 80.8003 163.006 80.0018 161.885H88.7845Z" fill="url(#paint24_linear)"/>
<path d="M50.9146 120.42C48.028 123.058 44.8343 125.486 42.783 128.801C40.7194 132.129 40.0684 136.715 42.4145 139.845C42.9427 140.548 43.606 141.164 43.9131 141.99C44.2324 142.865 44.0728 143.851 43.778 144.739C42.2917 149.201 37.5257 152.405 37.3414 157.101C37.3169 157.866 37.4274 158.667 37.9188 159.246C39.2331 160.836 41.788 159.641 43.4217 158.383C45.989 156.399 48.5685 154.402 51.1357 152.418V120.223C51.0497 120.284 50.9883 120.358 50.9146 120.42Z" fill="url(#paint25_linear)"/>
<path d="M54.7103 101.992V116.352C55.951 114.688 56.9091 112.851 57.2899 110.817C57.8795 107.674 56.774 104.408 54.7103 101.992Z" fill="url(#paint26_linear)"/>
<path d="M109.507 181.213C109.249 180.362 108.917 179.512 108.536 178.686C108.131 177.441 107.701 176.208 107.136 175.025C106.583 173.866 105.785 172.178 104.384 171.894C103.144 171.648 101.952 172.252 101.498 173.435C101.031 174.668 101.166 176.085 101.375 177.355C101.768 179.734 102.53 182.088 103.586 184.257C104.188 185.49 104.913 186.907 106.055 187.721C107.173 188.534 108.389 188.164 109.114 187.03C110.293 185.231 110.121 183.185 109.507 181.213Z" fill="url(#paint27_linear)"/>
<path d="M156.048 15.492C154.808 15.6029 153.604 16.4164 152.597 17.082C151.332 17.9202 150.116 18.8692 148.949 19.8553C147.757 20.8537 146.799 21.9014 145.841 23.134C144.441 24.9089 143.077 26.8071 141.407 28.3601C141.37 28.3971 141.333 28.4341 141.296 28.471C140.756 28.9641 140.178 29.4325 139.552 29.8392C139.38 29.9501 139.282 30.1104 139.245 30.2706C138.287 31.1211 137.378 31.9962 136.641 33.0562C136.346 33.4753 136.677 33.9437 137.071 34.1039C138.667 34.7449 140.326 33.537 141.48 32.5509C143.016 31.232 144.305 29.642 145.62 28.1136C146.123 27.5343 146.627 26.9303 147.204 26.4003C147.868 25.7963 148.666 25.3649 149.44 24.9335C151.344 23.8858 153.358 22.9737 155.09 21.6549C156.503 20.5702 157.559 19.1897 157.731 17.3655C157.83 16.2685 157.203 15.3934 156.048 15.492Z" fill="url(#paint28_linear)"/>
<path d="M134.393 69.6616C134.073 68.7125 132.919 68.392 131.936 68.2195C129.185 67.7388 126.421 67.2581 123.669 66.7773V76.1326C126.912 74.518 130.401 73.3593 132.133 72.5582C133.349 72.0035 134.81 70.9435 134.393 69.6616Z" fill="url(#paint29_linear)"/>
<path d="M116.619 84.7605C117.012 86.3506 118.289 87.2873 119.862 87.842V78.4004C117.515 80.1383 115.992 82.2461 116.619 84.7605Z" fill="url(#paint30_linear)"/>
<path d="M148.654 91.7755C148.335 91.0853 147.659 90.6415 146.971 90.3211C144.748 89.2734 142.217 89.1747 139.761 89.0885C134.589 88.9036 129.406 88.731 124.234 88.5461C124.05 88.5338 123.866 88.5338 123.669 88.5215V105.297C131.003 101.648 139.626 100.564 146.455 95.9786C147.88 95.0172 149.366 93.3409 148.654 91.7755Z" fill="url(#paint31_linear)"/>
<path d="M128.055 111.004H136.653C139.97 111.004 142.66 108.305 142.66 104.977V99.2578C142.66 95.9298 139.97 93.2305 136.653 93.2305H128.055C124.885 93.2305 122.318 95.8066 122.318 98.9866V105.248C122.318 108.428 124.885 111.004 128.055 111.004Z" fill="#CFD3D6"/>
<path d="M160.569 85.7239C160.176 84.2325 154.292 83.1725 152.118 83.3204C150.312 83.4437 147.684 83.7641 146.848 85.687C146.725 85.9581 146.713 86.2909 146.873 86.5374C146.996 86.7223 147.204 86.8333 147.413 86.9319C149.096 87.7454 150.926 88.0905 152.769 88.1891C154.685 88.3 156.761 88.2754 158.653 87.8563C159.586 87.6591 160.974 87.203 160.569 85.7239Z" fill="url(#paint32_linear)"/>
<path d="M51.1237 31.3298V50.6197C50.1041 49.609 49.0969 48.5736 48.1142 47.5259C44.9942 44.2349 41.8374 40.4016 41.7514 35.8657C41.7268 34.8303 41.8742 33.795 41.7391 32.7719C41.3092 29.5179 38.2015 26.9665 38.2138 23.6755C38.2138 23.2564 38.2752 22.8127 38.5332 22.4676C39.3193 21.4199 40.9653 22.1471 41.9971 22.9606C45.2276 25.5244 48.2862 28.3223 51.1237 31.3298Z" fill="url(#paint33_linear)"/>
<path d="M51.1235 82.6914V99.9475C50.3865 99.4915 49.5266 99.1833 48.7282 98.8136C47.4262 98.1973 46.0873 97.1003 46.161 95.6582C46.1855 95.0665 46.4558 94.5119 46.4803 93.9325C46.5786 91.6769 43.3726 90.6539 42.8322 88.4599C42.4882 87.0671 43.3849 85.6126 44.5887 84.8238C45.7925 84.0349 47.2419 83.7638 48.6299 83.431C49.4652 83.2337 50.3005 82.9872 51.1235 82.6914Z" fill="url(#paint34_linear)"/>
<path d="M56.5405 65.4355C55.7789 64.3754 55.3736 62.6745 55.7912 61.4419C56.2089 60.197 56.8722 58.9891 56.7739 57.6825C56.6756 56.265 55.7298 55.1187 54.698 54.0957V80.9906C56.43 79.8813 57.8671 78.4269 58.6533 76.5287C60.1641 72.8926 58.8375 68.6279 56.5405 65.4355Z" fill="url(#paint35_linear)"/>
<path d="M139.613 150.877C138.913 150.075 137.832 149.471 136.874 149.052C135.781 148.584 134.577 148.313 133.373 148.337C132.12 148.374 130.794 148.757 129.922 149.706C129.05 150.655 128.743 151.986 128.902 153.255C129.05 154.5 129.541 155.647 130.18 156.731C130.585 157.865 131.322 158.962 131.924 159.924C132.894 161.464 133.988 163.079 135.388 164.25C136.444 165.138 137.857 165.668 138.913 164.447C139.957 163.252 139.134 161.44 138.545 160.232C137.845 158.814 136.8 157.459 136.346 155.93C136.186 155.388 136.186 155.141 136.641 154.722C137.144 154.266 137.808 154.007 138.41 153.712C139.564 153.157 140.731 152.171 139.613 150.877Z" fill="url(#paint36_linear)"/>
<path d="M48.581 54.0819C49.0109 52.8 47.9914 51.5181 47.0332 50.5691C44.4414 48.0176 41.6531 45.6511 38.7174 43.5064C38.398 43.2722 38.0664 43.038 37.6733 43.0133C37.2802 42.9887 36.8503 43.2475 36.838 43.642C36.8257 43.8515 36.9486 44.0487 37.0714 44.2336C38.1523 45.8359 39.6878 47.0562 41.1495 48.3134C41.7268 48.8188 42.3164 49.3611 42.5621 50.1007C42.7955 50.8279 42.5375 51.777 41.8128 52.0358C40.6213 52.4672 38.9876 51.74 39.786 53.6752C40.1177 54.464 41.1863 55.2036 41.9602 55.4747C43.729 56.1157 47.8562 56.2636 48.581 54.0819Z" fill="url(#paint37_linear)"/>
<path d="M102.874 25.1555C103.672 25.2541 104.52 25.1062 105.244 25.476C106.731 26.2279 106.632 28.6067 108.033 29.5189C108.794 30.0242 109.826 29.9256 110.637 29.5065C111.447 29.0875 112.062 28.3726 112.627 27.6577C113.88 26.043 114.948 24.2681 115.784 22.3945H99.8519C100.245 23.775 101.436 24.9706 102.874 25.1555Z" fill="#666666"/>
<path d="M119.862 22.3945V31.1828C117.601 32.8592 115.341 34.5478 112.995 36.1378C111.398 37.2225 109.777 38.2579 108.082 39.2193C105.871 40.4765 102.8 40.5628 101.265 38.3811C100.38 37.1362 100.208 35.4476 99.766 33.9315C99.3238 32.4154 98.3411 30.8377 96.9285 30.8007C95.6265 30.7638 94.6069 32.0456 93.9559 33.3275C93.3172 34.6094 92.8013 36.0639 91.7203 36.8897C90.406 37.8881 88.5881 37.6292 87.2369 36.7048C86.8929 36.4706 86.5736 36.1995 86.2788 35.8913C85.4067 35.0162 84.7065 33.9068 84.0555 32.8099C82.8763 30.8007 82.7043 29.6051 81.6356 27.5221C80.7389 25.7841 79.8423 24.0215 78.7859 22.4069H99.8642C100.257 23.7873 101.437 24.983 102.886 25.1678C103.684 25.2664 104.532 25.1185 105.244 25.4883C106.731 26.2402 106.645 28.6191 108.033 29.5312C108.794 30.0365 109.826 29.9379 110.637 29.5189C111.448 29.0998 112.062 28.3849 112.627 27.67C113.88 26.0553 114.948 24.2804 115.784 22.4069H119.862V22.3945Z" fill="url(#paint38_linear)"/>
<path d="M116.95 102.449C116.029 102.265 115.083 102.141 114.174 102.363C113.265 102.585 112.405 103.214 112.135 104.113C112.012 104.532 112.025 104.989 112.111 105.42C112.455 107.084 113.83 108.304 115.083 109.475C116.791 111.065 118.387 112.766 119.861 114.578V103.238C118.903 102.918 117.933 102.647 116.95 102.449Z" fill="url(#paint39_linear)"/>
<path d="M63.2104 130.614C63.0016 126.941 58.727 129.011 56.9213 130.01C56.1843 130.416 55.4596 130.848 54.7226 131.267C54.7103 131.267 54.7103 131.279 54.698 131.279V142.668C56.3808 140.326 58.1374 137.911 60.2378 135.938C61.0854 135.137 62.0189 134.373 62.6085 133.362C63.0753 132.561 63.2595 131.526 63.2104 130.614Z" fill="white"/>
<path d="M112.983 36.1359C112.356 36.6413 111.755 37.1467 111.214 37.6643C108.905 39.8707 106.706 42.2002 104.643 44.6407C103.598 45.8733 101.977 47.2661 100.589 46.428C100.134 46.1445 99.8274 45.6638 99.6186 45.1707C99.1518 44.0614 99.0535 42.8535 98.857 41.6702C98.6605 40.4869 98.3165 39.2667 97.4813 38.4039C96.646 37.5411 95.1966 37.1836 94.2384 37.8985C93.4277 38.5025 93.2066 39.6118 92.5556 40.3883C91.5729 41.5716 89.6936 41.7195 88.3793 40.9307C87.0649 40.1418 86.3279 38.6011 86.2174 37.0727C86.1928 36.6659 86.2051 36.2592 86.2419 35.8648C86.5367 36.1606 86.8561 36.4318 87.2 36.6783C88.5512 37.6027 90.3692 37.8616 91.6835 36.8632C92.7644 36.0373 93.2803 34.5829 93.9191 33.301C94.5578 32.0191 95.5896 30.7372 96.8917 30.7742C98.3043 30.8112 99.2869 32.3889 99.7291 33.905C100.171 35.421 100.343 37.0974 101.228 38.3546C102.763 40.5486 105.834 40.4623 108.045 39.1927C109.765 38.256 111.398 37.2206 112.983 36.1359Z" fill="url(#paint40_linear)"/>
<path d="M80.2107 33.7828C80.8985 34.9045 81.4022 36.1741 82.3234 37.1231C83.6991 38.5283 86.2418 38.8611 87.5684 37.4066C88.7353 36.1248 88.5511 34.128 88.0966 32.4517C87.3719 29.777 86.1681 27.2378 84.5344 25.0069C84.0062 24.2796 83.3675 23.5401 82.4954 23.3059C81.353 22.9978 80.0387 23.8113 79.793 24.9699C79.5228 26.2518 80.4195 27.509 80.3458 28.8155C80.2966 29.6783 79.8299 30.4549 79.6948 31.3054C79.4368 32.9324 80.4195 34.4731 81.353 35.8166" fill="white"/>
<path d="M83.0877 45.8129C83.7903 45.5816 83.7651 43.5745 83.0313 41.33C82.2976 39.0855 81.1332 37.4535 80.4305 37.6847C79.7279 37.916 79.7531 39.9231 80.4869 42.1676C81.2206 44.4121 82.385 46.0441 83.0877 45.8129Z" fill="white"/>
<path d="M34.6023 75.1602H21.5327V88.2748H34.6023V75.1602Z" fill="#43AEFC"/>
<path d="M39.3193 87.0176L34.6024 88.2625V75.1602L39.3193 76.4174V87.0176Z" fill="url(#paint41_linear)"/>
<path d="M32.5632 86.2291H23.5718C23.5718 84.4049 25.5863 82.9258 28.0675 82.9258C30.5488 82.9258 32.5632 84.4049 32.5632 86.2291Z" fill="white"/>
<path d="M28.0675 81.8774C29.3904 81.8774 30.4628 80.8013 30.4628 79.4738C30.4628 78.1464 29.3904 77.0703 28.0675 77.0703C26.7446 77.0703 25.6722 78.1464 25.6722 79.4738C25.6722 80.8013 26.7446 81.8774 28.0675 81.8774Z" fill="white"/>
<path d="M162.276 44.9609H148.408V58.8768H162.276V44.9609Z" fill="#43AEFC"/>
<path d="M145.657 60.4545L148.408 58.8768V44.9609L145.657 46.5263V60.4545Z" fill="url(#paint42_linear)"/>
<path d="M148.408 58.877L145.657 60.4547H159.242L162.276 58.877H148.408Z" fill="url(#paint43_linear)"/>
<path d="M157.719 50.2481C158.418 50.2481 158.984 49.6797 158.984 48.9785C158.984 48.2774 158.418 47.709 157.719 47.709C157.02 47.709 156.454 48.2774 156.454 48.9785C156.454 49.6797 157.02 50.2481 157.719 50.2481Z" fill="white"/>
<path d="M153.592 53.1446C154.29 53.1446 154.857 52.5762 154.857 51.875C154.857 51.1739 154.29 50.6055 153.592 50.6055C152.893 50.6055 152.327 51.1739 152.327 51.875C152.327 52.5762 152.893 53.1446 153.592 53.1446Z" fill="white"/>
<path d="M157.719 56.1289C158.418 56.1289 158.984 55.5606 158.984 54.8594C158.984 54.1582 158.418 53.5898 157.719 53.5898C157.02 53.5898 156.454 54.1582 156.454 54.8594C156.454 55.5606 157.02 56.1289 157.719 56.1289Z" fill="white"/>
<path d="M157.424 55.1423L152.978 51.8637L157.51 48.6836L157.915 49.2752L154.194 51.876L157.854 54.563L157.424 55.1423Z" fill="white"/>
<path d="M9.27483 56.0176L23.1428 56.0176L23.1428 42.1017L9.27483 42.1017L9.27483 56.0176Z" fill="#43AEFC"/>
<path d="M25.8935 57.5834L23.142 56.018V42.0898L25.8935 43.6675V57.5834Z" fill="url(#paint44_linear)"/>
<path d="M23.1419 56.0176L25.8934 57.583H12.3079L9.27393 56.0176H23.1419Z" fill="url(#paint45_linear)"/>
<path d="M19.9974 52.7033H12.4554C12.0378 52.7033 11.6938 52.3582 11.6938 51.9391V46.5527H19.9974C20.4151 46.5527 20.759 46.8979 20.759 47.3169V51.9514C20.759 52.3582 20.4151 52.7033 19.9974 52.7033Z" fill="white"/>
<path d="M14.4331 45.4062H12.4063C12.0132 45.4062 11.6938 45.7267 11.6938 46.1211V47.6002H16.2264L15.0227 45.739C14.8998 45.5295 14.6664 45.4062 14.4331 45.4062Z" fill="white"/>
<path d="M70.0523 5.50755C70.8257 5.50755 71.4526 4.87845 71.4526 4.10241C71.4526 3.32637 70.8257 2.69727 70.0523 2.69727C69.2789 2.69727 68.652 3.32637 68.652 4.10241C68.652 4.87845 69.2789 5.50755 70.0523 5.50755Z" fill="url(#paint46_linear)"/>
<path d="M119.862 97.7775V100.649C117.7 100.341 116.066 99.5401 116.152 98.8005C116.226 98.0856 117.823 97.6665 119.862 97.7775Z" fill="url(#paint47_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="134.005" y1="17.9819" x2="134.005" y2="205.764" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="101.242" y1="17.9807" x2="101.242" y2="205.762" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint2_linear" x1="23.2279" y1="17.9836" x2="23.2279" y2="205.764" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint3_linear" x1="14.327" y1="17.9821" x2="14.327" y2="205.764" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint4_linear" x1="155.351" y1="17.9816" x2="155.351" y2="205.764" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint5_linear" x1="136.049" y1="147.72" x2="136.049" y2="126.737" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint6_linear" x1="61.3846" y1="7.0788" x2="75.1173" y2="7.0788" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint7_linear" x1="68.3291" y1="108.325" x2="14.6123" y2="220.183" gradientUnits="userSpaceOnUse">
<stop stop-color="#CFD3D6"/>
<stop offset="0.6349" stop-color="#F3F4F5"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear" x1="69.1759" y1="154.472" x2="40.0518" y2="217.942" gradientUnits="userSpaceOnUse">
<stop stop-color="#BBC0C5"/>
<stop offset="0.5694" stop-color="#CFD3D6"/>
<stop offset="0.9989" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear" x1="141.98" y1="13.4076" x2="123.529" y2="39.8864" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint10_linear" x1="84.9623" y1="113.212" x2="84.9623" y2="162.262" gradientUnits="userSpaceOnUse">
<stop offset="0.00477698" stop-color="white"/>
<stop offset="0.3219" stop-color="#E6E6E6"/>
<stop offset="0.75" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint11_linear" x1="97.5617" y1="143.435" x2="97.5617" y2="109.44" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint12_linear" x1="74.6635" y1="97.1529" x2="33.0218" y2="156.523" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint13_linear" x1="103.359" y1="130.433" x2="119.857" y2="130.433" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint14_linear" x1="72.7106" y1="2.14465" x2="72.7106" y2="105.071" gradientUnits="userSpaceOnUse">
<stop offset="0.00477698" stop-color="white"/>
<stop offset="0.3219" stop-color="#E6E6E6"/>
<stop offset="0.75" stop-color="#808080"/>
</linearGradient>
<linearGradient id="paint15_linear" x1="146.788" y1="111.284" x2="152.215" y2="111.284" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint16_linear" x1="146.788" y1="103.945" x2="166.842" y2="103.945" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint17_linear" x1="10.55" y1="132.852" x2="30.3266" y2="132.852" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint18_linear" x1="25.085" y1="140.323" x2="30.3259" y2="140.323" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint19_linear" x1="54.7066" y1="148.97" x2="75.4733" y2="148.97" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint20_linear" x1="54.7075" y1="29.932" x2="64.5443" y2="29.932" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint21_linear" x1="112.983" y1="59.5534" x2="119.856" y2="59.5534" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint22_linear" x1="104.642" y1="168.659" x2="117.636" y2="168.659" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint23_linear" x1="90.8554" y1="150.377" x2="101.376" y2="150.377" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint24_linear" x1="79.9999" y1="164.376" x2="88.7787" y2="164.376" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint25_linear" x1="37.3291" y1="140.126" x2="51.1226" y2="140.126" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint26_linear" x1="54.7066" y1="109.173" x2="57.4433" y2="109.173" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint27_linear" x1="101.572" y1="180.344" x2="109.639" y2="179.662" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint28_linear" x1="136.534" y1="24.8762" x2="157.736" y2="24.8762" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint29_linear" x1="123.663" y1="71.4561" x2="134.462" y2="71.4561" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint30_linear" x1="165.79" y1="83.1209" x2="120.866" y2="83.1209" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint31_linear" x1="165.79" y1="96.9087" x2="120.866" y2="96.9087" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint32_linear" x1="165.673" y1="85.7735" x2="121.075" y2="85.7735" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint33_linear" x1="38.208" y1="36.2826" x2="51.1228" y2="36.2826" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint34_linear" x1="41.9947" y1="91.1019" x2="66.4625" y2="91.6967" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint35_linear" x1="54.706" y1="67.5424" x2="59.3029" y2="67.5424" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint36_linear" x1="131.262" y1="158.894" x2="141.042" y2="153.253" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint37_linear" x1="38.4831" y1="51.429" x2="45.5943" y2="47.3856" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint38_linear" x1="78.7795" y1="31.2503" x2="119.857" y2="31.2503" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint39_linear" x1="112.042" y1="108.412" x2="119.856" y2="108.412" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFE566"/>
<stop offset="1" stop-color="#FFB0EB"/>
</linearGradient>
<linearGradient id="paint40_linear" x1="86.23" y1="38.7421" x2="112.988" y2="38.7421" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
<linearGradient id="paint41_linear" x1="34.5984" y1="81.7134" x2="39.3188" y2="81.7134" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint42_linear" x1="145.653" y1="52.7054" x2="148.405" y2="52.7054" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint43_linear" x1="145.653" y1="59.6648" x2="162.275" y2="59.6648" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint44_linear" x1="23.1438" y1="49.84" x2="25.8956" y2="49.84" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint45_linear" x1="9.273" y1="56.7989" x2="25.8956" y2="56.7989" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint46_linear" x1="70.0485" y1="17.9816" x2="70.0485" y2="205.763" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="1" stop-color="#75C4FD"/>
</linearGradient>
<linearGradient id="paint47_linear" x1="126.322" y1="101.464" x2="115.823" y2="97.9932" gradientUnits="userSpaceOnUse">
<stop stop-color="#75C4FD"/>
<stop offset="0.1001" stop-color="#82C3F7"/>
<stop offset="1" stop-color="#F1B9BE"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -35,6 +35,7 @@
"globalthis.js",
"lockdown-install.js",
"lockdown-run.js",
"lockdown-more.js",
"contentscript.js"
],
"run_at": "document_start",

@ -22,6 +22,5 @@
"512": "images/icon-512.png"
},
"name": "__MSG_appName__ Beta",
"short_name": "__MSG_appName__ Beta",
"version": ""
"short_name": "__MSG_appName__ Beta"
}

@ -35,9 +35,16 @@
<div id="popover-content"></div>
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
{{@if(it.useLavamoat)}}
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
{{#else}}
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
{{/if}}
{{@each(it.jsBundles) => val}}
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
{{/each}}

@ -5,6 +5,7 @@
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./phishing-detect.js"></script>
<link rel="stylesheet" type="text/css" href="./index.css" title="ltr">
<link rel="stylesheet" type="text/css" href="./index-rtl.css" title="rtl" disabled>

@ -12,9 +12,16 @@
<div id="popover-content"></div>
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
{{@if(it.useLavamoat)}}
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
{{#else}}
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
{{/if}}
{{@each(it.jsBundles) => val}}
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
{{/each}}

@ -4,12 +4,12 @@ import log from 'loglevel';
/**
* @typedef {Object} InitState
* @property {Boolean} seedPhraseBackedUp Indicates whether the user has completed the seed phrase backup challenge
* @property {Boolean} completedOnboarding Indicates whether the user has completed the onboarding flow
*/
/**
* @typedef {Object} OnboardingOptions
* @property {InitState} initState The initial controller state
* @property {PreferencesController} preferencesController Controller for managing user perferences
*/
/**
@ -28,21 +28,12 @@ export default class OnboardingController {
};
const initState = {
seedPhraseBackedUp: null,
firstTimeFlowType: null,
completedOnboarding: false,
...opts.initState,
...initialTransientState,
};
this.store = new ObservableStore(initState);
this.preferencesController = opts.preferencesController;
this.completedOnboarding = this.preferencesController.store.getState().completedOnboarding;
this.preferencesController.store.subscribe(({ completedOnboarding }) => {
if (completedOnboarding !== this.completedOnboarding) {
this.completedOnboarding = completedOnboarding;
if (completedOnboarding) {
this.store.updateState(initialTransientState);
}
}
});
}
setSeedPhraseBackedUp(newSeedPhraseBackUpState) {
@ -51,6 +42,27 @@ export default class OnboardingController {
});
}
// /**
// * Sets the completedOnboarding state to true, indicating that the user has completed the
// * onboarding process.
// */
completeOnboarding() {
this.store.updateState({
completedOnboarding: true,
});
return Promise.resolve(true);
}
/**
* Setter for the `firstTimeFlowType` property
*
* @param {string} type - Indicates the type of first time flow - create or import - the user wishes to follow
*
*/
setFirstTimeFlowType(type) {
this.store.updateState({ firstTimeFlowType: type });
}
/**
* Registering a site as having initiated onboarding
*

@ -45,7 +45,6 @@ export default class PreferencesController {
showIncomingTransactions: true,
},
knownMethodData: {},
firstTimeFlowType: null,
currentLocale: opts.initLangCode,
identities: {},
lostIdentities: {},
@ -56,7 +55,6 @@ export default class PreferencesController {
useNativeCurrencyAsPrimaryCurrency: true,
hideZeroBalanceTokens: false,
},
completedOnboarding: false,
// ENS decentralized website resolution
ipfsGateway: 'dweb.link',
infuraBlocked: null,
@ -127,16 +125,6 @@ export default class PreferencesController {
this.store.updateState({ useTokenDetection: val });
}
/**
* Setter for the `firstTimeFlowType` property
*
* @param {string} type - Indicates the type of first time flow - create or import - the user wishes to follow
*
*/
setFirstTimeFlowType(type) {
this.store.updateState({ firstTimeFlowType: type });
}
/**
* Add new methodData to state, to avoid requesting this information again through Infura
*
@ -509,15 +497,6 @@ export default class PreferencesController {
return this.store.getState().preferences;
}
/**
* Sets the completedOnboarding state to true, indicating that the user has completed the
* onboarding process.
*/
completeOnboarding() {
this.store.updateState({ completedOnboarding: true });
return Promise.resolve(true);
}
/**
* A getter for the `ipfsGateway` property
* @returns {string} The current IPFS gateway domain

@ -277,7 +277,9 @@ export default class SwapsController {
// _getERC20Allowance() returns the amount of the token they have approved for withdrawal. If that amount is greater
// than 0, it means that approval has already occured and is not needed. Otherwise, for tokens to be swapped, a new
// call of the ERC-20 approve method is required.
approvalRequired = allowance.eq(0);
approvalRequired =
allowance.eq(0) &&
Object.values(newQuotes)[0].aggregator !== 'wrappedNative';
if (!approvalRequired) {
newQuotes = mapValues(newQuotes, (quote) => ({
...quote,

@ -1,68 +0,0 @@
import { strict as assert } from 'assert';
import sinon from 'sinon';
import { TokensController } from '@metamask/controllers';
import TokenRatesController from './token-rates';
import NetworkController from './network';
import PreferencesController from './preferences';
const networkControllerProviderConfig = {
getAccounts: () => undefined,
};
describe('TokenRatesController', function () {
let nativeCurrency,
getNativeCurrency,
network,
provider,
preferences,
tokensController;
beforeEach(function () {
nativeCurrency = 'ETH';
getNativeCurrency = () => nativeCurrency;
network = new NetworkController();
network.setInfuraProjectId('foo');
network.initializeProvider(networkControllerProviderConfig);
provider = network.getProviderAndBlockTracker().provider;
preferences = new PreferencesController({ network, provider });
tokensController = new TokensController({
onPreferencesStateChange: preferences.store.subscribe.bind(
preferences.store,
),
onNetworkStateChange: network.store.subscribe.bind(network.store),
});
sinon.stub(network, 'getLatestBlock').callsFake(() => Promise.resolve({}));
sinon.stub(tokensController, '_instantiateNewEthersProvider').returns(null);
sinon
.stub(tokensController, '_detectIsERC721')
.returns(Promise.resolve(false));
});
it('should listen for tokenControllers state updates', async function () {
const controller = new TokenRatesController({
tokensController,
getNativeCurrency,
});
await tokensController.addToken('0x1', 'TEST', 1);
assert.deepEqual(controller._tokens, [
{
address: '0x1',
decimals: 1,
symbol: 'TEST',
image: undefined,
isERC721: false,
},
]);
});
it('should poll on correct interval', async function () {
const stub = sinon.stub(global, 'setInterval');
const controller = new TokenRatesController({
tokensController,
getNativeCurrency,
});
controller.start(1337);
assert.strictEqual(stub.getCall(0).args[1], 1337);
stub.restore();
controller.stop();
});
});

@ -1,88 +0,0 @@
import { ObservableStore } from '@metamask/obs-store';
import log from 'loglevel';
import { normalize as normalizeAddress } from 'eth-sig-util';
import getFetchWithTimeout from '../../../shared/modules/fetch-with-timeout';
import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils';
import { MINUTE, SECOND } from '../../../shared/constants/time';
const fetchWithTimeout = getFetchWithTimeout(SECOND * 30);
// By default, poll every 3 minutes
const DEFAULT_INTERVAL = MINUTE * 3;
/**
* A controller that polls for token exchange
* rates based on a user's current token list
*/
export default class TokenRatesController {
/**
* Creates a TokenRatesController
*
* @param {Object} [config] - Options to configure controller
*/
constructor({ tokensController, getNativeCurrency } = {}) {
this.store = new ObservableStore();
this.getNativeCurrency = getNativeCurrency;
this.tokens = tokensController.state.tokens;
tokensController.subscribe(({ tokens = [] }) => {
this.tokens = tokens;
});
}
/**
* Updates exchange rates for all tokens
*/
async updateExchangeRates() {
const contractExchangeRates = {};
const nativeCurrency = this.getNativeCurrency().toLowerCase();
const pairs = this._tokens.map((token) => token.address).join(',');
const query = `contract_addresses=${pairs}&vs_currencies=${nativeCurrency}`;
if (this._tokens.length > 0) {
try {
const response = await fetchWithTimeout(
`https://api.coingecko.com/api/v3/simple/token_price/ethereum?${query}`,
);
const prices = await response.json();
this._tokens.forEach((token) => {
const price =
prices[token.address.toLowerCase()] ||
prices[toChecksumHexAddress(token.address)];
contractExchangeRates[normalizeAddress(token.address)] = price
? price[nativeCurrency]
: 0;
});
} catch (error) {
log.warn(
`MetaMask - TokenRatesController exchange rate fetch failed.`,
error,
);
}
}
this.store.putState({ contractExchangeRates });
}
/* eslint-disable accessor-pairs */
/**
* @type {Array}
*/
set tokens(tokens) {
this._tokens = tokens;
this.updateExchangeRates();
}
/* eslint-enable accessor-pairs */
start(interval = DEFAULT_INTERVAL) {
this._handle && clearInterval(this._handle);
if (!interval) {
return;
}
this._handle = setInterval(() => {
this.updateExchangeRates();
}, interval);
this.updateExchangeRates();
}
stop() {
this._handle && clearInterval(this._handle);
}
}

@ -405,8 +405,9 @@ export default class TransactionController extends EventEmitter {
* @returns {Promise<object>} resolves with txMeta
*/
async addTxGasDefaults(txMeta, getCodeResponse) {
const eip1559Compatibility = await this.getEIP1559Compatibility();
const eip1559Compatibility =
txMeta.txParams.type !== TRANSACTION_ENVELOPE_TYPES.LEGACY &&
(await this.getEIP1559Compatibility());
const {
gasPrice: defaultGasPrice,
maxFeePerGas: defaultMaxFeePerGas,

@ -525,6 +525,58 @@ describe('Transaction Controller', function () {
stub2.restore();
});
it('should not add maxFeePerGas and maxPriorityFeePerGas to type-0 transactions', async function () {
const TEST_GASPRICE = '0x12a05f200';
const stub1 = sinon
.stub(txController, 'getEIP1559Compatibility')
.returns(true);
const stub2 = sinon
.stub(txController, '_getDefaultGasFees')
.callsFake(() => ({ gasPrice: TEST_GASPRICE }));
txController.txStateManager._addTransactionsToState([
{
id: 1,
status: TRANSACTION_STATUSES.UNAPPROVED,
metamaskNetworkId: currentNetworkId,
txParams: {
to: VALID_ADDRESS,
from: VALID_ADDRESS_TWO,
type: '0x0',
},
history: [{}],
},
]);
const txMeta = {
id: 1,
txParams: {
from: '0xc684832530fcbddae4b4230a47e991ddcec2831d',
to: '0xc684832530fcbddae4b4230a47e991ddcec2831d',
type: '0x0',
},
history: [{}],
};
providerResultStub.eth_getBlockByNumber = { gasLimit: '47b784' };
providerResultStub.eth_estimateGas = '5209';
const txMetaWithDefaults = await txController.addTxGasDefaults(txMeta);
assert.equal(
txMetaWithDefaults.txParams.maxFeePerGas,
undefined,
'should not have maxFeePerGas',
);
assert.equal(
txMetaWithDefaults.txParams.maxPriorityFeePerGas,
undefined,
'should not have max priority fee per gas',
);
stub1.restore();
stub2.restore();
});
it('should not add gasPrice if the fee data is available from the dapp', async function () {
const TEST_GASPRICE = '0x12a05f200';
const TEST_MAX_FEE_PER_GAS = '0x12a05f200';

@ -197,6 +197,12 @@ export function validateTxParams(txParams, eip1559Compatibility = true) {
`Invalid transaction value of "${value}": number must be in wei.`,
);
}
if (!value.match(/^0x[a-fA-F0-9]+$/u)) {
throw ethErrors.rpc.invalidParams(
`Invalid transaction value of "${value}": not a valid hex string.`,
);
}
break;
case 'chainId':
if (typeof value !== 'number' && typeof value !== 'string') {

@ -0,0 +1,91 @@
// Make all "object" and "function" own properties of globalThis
// non-configurable and non-writable, when possible.
// We call a property that is non-configurable and non-writable,
// "non-modifiable".
try {
/**
* `lockdown` only hardens the properties enumerated by the
* universalPropertyNames constant specified in 'ses/src/whitelist'. This
* function makes all function and object properties on the start compartment
* global non-configurable and non-writable, unless they are already
* non-configurable.
*
* It is critical that this function runs at the right time during
* initialization, which should always be immediately after `lockdown` has been
* called. At the time of writing, the modifications this function makes to the
* runtime environment appear to be non-breaking, but that could change with
* the addition of dependencies, or the order of our scripts in our HTML files.
* Exercise caution.
*
* See inline comments for implementation details.
*
* We write this function in IIFE format to avoid polluting global scope.
*/
(function protectIntrinsics() {
const namedIntrinsics = Reflect.ownKeys(new Compartment().globalThis);
// These named intrinsics are not automatically hardened by `lockdown`
const shouldHardenManually = new Set(['eval', 'Function']);
const globalProperties = new Set([
// universalPropertyNames is a constant added by lockdown to global scope
// at the time of writing, it is initialized in 'ses/src/whitelist'.
// These properties tend to be non-enumerable.
...namedIntrinsics,
// TODO: Also include the named platform globals
// This grabs every enumerable property on globalThis.
// ...Object.keys(globalThis),
]);
globalProperties.forEach((propertyName) => {
const descriptor = Reflect.getOwnPropertyDescriptor(
globalThis,
propertyName,
);
if (descriptor) {
if (descriptor.configurable) {
// If the property on globalThis is configurable, make it
// non-configurable. If it has no accessor properties, also make it
// non-writable.
if (hasAccessor(descriptor)) {
Object.defineProperty(globalThis, propertyName, {
configurable: false,
});
} else {
Object.defineProperty(globalThis, propertyName, {
configurable: false,
writable: false,
});
}
}
if (shouldHardenManually.has(propertyName)) {
harden(globalThis[propertyName]);
}
}
});
/**
* Checks whether the given propertyName descriptor has any accessors, i.e. the
* properties `get` or `set`.
*
* We want to make globals non-writable, and we can't set the `writable`
* property and accessor properties at the same time.
*
* @param {Object} descriptor - The propertyName descriptor to check.
* @returns {boolean} Whether the propertyName descriptor has any accessors.
*/
function hasAccessor(descriptor) {
return 'set' in descriptor || 'get' in descriptor;
}
})();
} catch (error) {
console.error('Protecting intrinsics failed:', error);
if (globalThis?.sentry.captureException) {
globalThis.sentry.captureException(
new Error(`Protecting intrinsics failed: ${error.message}`),
);
}
}

@ -20,95 +20,3 @@ try {
);
}
}
// Make all "object" and "function" own properties of globalThis
// non-configurable and non-writable, when possible.
// We call the a property that is non-configurable and non-writable,
// "non-modifiable".
try {
/**
* `lockdown` only hardens the properties enumerated by the
* universalPropertyNames constant specified in 'ses/src/whitelist'. This
* function makes all function and object properties on the start compartment
* global non-configurable and non-writable, unless they are already
* non-configurable.
*
* It is critical that this function runs at the right time during
* initialization, which should always be immediately after `lockdown` has been
* called. At the time of writing, the modifications this function makes to the
* runtime environment appear to be non-breaking, but that could change with
* the addition of dependencies, or the order of our scripts in our HTML files.
* Exercise caution.
*
* See inline comments for implementation details.
*
* We write this function in IIFE format to avoid polluting global scope.
*/
(function protectIntrinsics() {
const namedIntrinsics = Reflect.ownKeys(new Compartment().globalThis);
// These named intrinsics are not automatically hardened by `lockdown`
const shouldHardenManually = new Set(['eval', 'Function']);
const globalProperties = new Set([
// universalPropertyNames is a constant added by lockdown to global scope
// at the time of writing, it is initialized in 'ses/src/whitelist'.
// These properties tend to be non-enumerable.
...namedIntrinsics,
// TODO: Also include the named platform globals
// This grabs every enumerable property on globalThis.
// ...Object.keys(globalThis),
]);
globalProperties.forEach((propertyName) => {
const descriptor = Reflect.getOwnPropertyDescriptor(
globalThis,
propertyName,
);
if (descriptor) {
if (descriptor.configurable) {
// If the property on globalThis is configurable, make it
// non-configurable. If it has no accessor properties, also make it
// non-writable.
if (hasAccessor(descriptor)) {
Object.defineProperty(globalThis, propertyName, {
configurable: false,
});
} else {
Object.defineProperty(globalThis, propertyName, {
configurable: false,
writable: false,
});
}
}
if (shouldHardenManually.has(propertyName)) {
harden(globalThis[propertyName]);
}
}
});
/**
* Checks whether the given propertyName descriptor has any accessors, i.e. the
* properties `get` or `set`.
*
* We want to make globals non-writable, and we can't set the `writable`
* property and accessor properties at the same time.
*
* @param {Object} descriptor - The propertyName descriptor to check.
* @returns {boolean} Whether the propertyName descriptor has any accessors.
*/
function hasAccessor(descriptor) {
return 'set' in descriptor || 'get' in descriptor;
}
})();
} catch (error) {
console.error('Protecting intrinsics failed:', error);
if (globalThis.sentry && globalThis.sentry.captureException) {
globalThis.sentry.captureException(
new Error(`Protecting intrinsics failed: ${error.message}`),
);
}
}

@ -32,6 +32,7 @@ import { TRANSACTION_STATUSES } from '../../shared/constants/transaction';
import {
GAS_API_BASE_URL,
GAS_DEV_API_BASE_URL,
SWAPS_CLIENT_ID,
} from '../../shared/constants/swaps';
import { MAINNET_CHAIN_ID } from '../../shared/constants/network';
import { KEYRING_TYPES } from '../../shared/constants/hardware-wallets';
@ -201,6 +202,7 @@ export default class MetamaskController extends EventEmitter {
this.gasFeeController = new GasFeeController({
interval: 10000,
messenger: gasFeeMessenger,
clientId: SWAPS_CLIENT_ID,
getProvider: () =>
this.networkController.getProviderAndBlockTracker().provider,
onNetworkStateChange: this.networkController.on.bind(
@ -362,7 +364,6 @@ export default class MetamaskController extends EventEmitter {
this.onboardingController = new OnboardingController({
initState: initState.OnboardingController,
preferencesController: this.preferencesController,
});
this.tokensController.hub.on('pendingSuggestedAsset', async () => {
@ -378,7 +379,7 @@ export default class MetamaskController extends EventEmitter {
this.keyringController.memStore.subscribe((state) =>
this._onKeyringControllerUpdate(state),
);
this.keyringController.on('unlock', () => this.emit('unlock'));
this.keyringController.on('unlock', () => this._onUnlock());
this.keyringController.on('lock', () => this._onLock());
this.permissionsController = new PermissionsController(
@ -627,7 +628,7 @@ export default class MetamaskController extends EventEmitter {
if (
password &&
!this.isUnlocked() &&
this.onboardingController.completedOnboarding
this.onboardingController.store.getState().completedOnboarding
) {
this.submitPassword(password);
}
@ -818,7 +819,6 @@ export default class MetamaskController extends EventEmitter {
),
setIpfsGateway: this.setIpfsGateway.bind(this),
setParticipateInMetaMetrics: this.setParticipateInMetaMetrics.bind(this),
setFirstTimeFlowType: this.setFirstTimeFlowType.bind(this),
setCurrentLocale: this.setCurrentLocale.bind(this),
markPasswordForgotten: this.markPasswordForgotten.bind(this),
unMarkPasswordForgotten: this.unMarkPasswordForgotten.bind(this),
@ -897,10 +897,7 @@ export default class MetamaskController extends EventEmitter {
preferencesController.setPreference,
preferencesController,
),
completeOnboarding: nodeify(
preferencesController.completeOnboarding,
preferencesController,
),
addKnownMethodData: nodeify(
preferencesController.addKnownMethodData,
preferencesController,
@ -1001,6 +998,14 @@ export default class MetamaskController extends EventEmitter {
onboardingController.setSeedPhraseBackedUp,
onboardingController,
),
completeOnboarding: nodeify(
onboardingController.completeOnboarding,
onboardingController,
),
setFirstTimeFlowType: nodeify(
onboardingController.setFirstTimeFlowType,
onboardingController,
),
// alert controller
setAlertEnabledness: nodeify(
@ -2624,10 +2629,10 @@ export default class MetamaskController extends EventEmitter {
? (origin) => payload(origin)
: () => payload;
Object.values(this.connections).forEach((origin) => {
Object.values(origin).forEach((conn) => {
Object.keys(this.connections).forEach((origin) => {
Object.values(this.connections[origin]).forEach(async (conn) => {
if (conn.engine) {
conn.engine.emit('notification', getPayload(origin));
conn.engine.emit('notification', await getPayload(origin));
}
});
});
@ -2662,12 +2667,12 @@ export default class MetamaskController extends EventEmitter {
* Notifies all connections that the extension is unlocked.
*/
_onUnlock() {
this.notifyAllConnections((origin) => {
this.notifyAllConnections(async (origin) => {
return {
method: NOTIFICATION_NAMES.unlockStateChanged,
params: {
isUnlocked: true,
accounts: this.permissionsController.getAccounts(origin),
accounts: await this.permissionsController.getAccounts(origin),
},
};
});
@ -3015,23 +3020,6 @@ export default class MetamaskController extends EventEmitter {
}
}
/**
* Sets the type of first time flow the user wishes to follow: create or import
* @param {string} type - Indicates the type of first time flow the user wishes to follow
* @param {Function} cb - A callback function called when complete.
*/
setFirstTimeFlowType(type, cb) {
try {
this.preferencesController.setFirstTimeFlowType(type);
cb(null);
return;
} catch (err) {
cb(err);
// eslint-disable-next-line no-useless-return
return;
}
}
/**
* A method for setting a user's current locale, affecting the language rendered.
* @param {string} key - Locale identifier.

@ -9,6 +9,7 @@ import proxyquire from 'proxyquire';
import { TRANSACTION_STATUSES } from '../../shared/constants/transaction';
import createTxMeta from '../../test/lib/createTxMeta';
import { NETWORK_TYPE_RPC } from '../../shared/constants/network';
import { KEYRING_TYPES } from '../../shared/constants/hardware-wallets';
import { addHexPrefix } from './lib/util';
const Ganache = require('../../test/e2e/ganache');
@ -506,11 +507,11 @@ describe('MetaMaskController', function () {
sinon.spy(metamaskController.keyringController, 'addNewKeyring');
await metamaskController.connectHardware('trezor', 0).catch(() => null);
const keyrings = await metamaskController.keyringController.getKeyringsByType(
'Trezor Hardware',
KEYRING_TYPES.TREZOR,
);
assert.deepEqual(
metamaskController.keyringController.addNewKeyring.getCall(0).args,
['Trezor Hardware'],
[KEYRING_TYPES.TREZOR],
);
assert.equal(keyrings.length, 1);
});
@ -519,11 +520,11 @@ describe('MetaMaskController', function () {
sinon.spy(metamaskController.keyringController, 'addNewKeyring');
await metamaskController.connectHardware('ledger', 0).catch(() => null);
const keyrings = await metamaskController.keyringController.getKeyringsByType(
'Ledger Hardware',
KEYRING_TYPES.LEDGER,
);
assert.deepEqual(
metamaskController.keyringController.addNewKeyring.getCall(0).args,
['Ledger Hardware'],
[KEYRING_TYPES.LEDGER],
);
assert.equal(keyrings.length, 1);
});
@ -567,7 +568,7 @@ describe('MetaMaskController', function () {
await metamaskController.connectHardware('trezor', 0).catch(() => null);
await metamaskController.forgetDevice('trezor');
const keyrings = await metamaskController.keyringController.getKeyringsByType(
'Trezor Hardware',
KEYRING_TYPES.TREZOR,
);
assert.deepEqual(keyrings[0].accounts, []);
@ -626,7 +627,7 @@ describe('MetaMaskController', function () {
it('should set unlockedAccount in the keyring', async function () {
const keyrings = await metamaskController.keyringController.getKeyringsByType(
'Trezor Hardware',
KEYRING_TYPES.TREZOR,
);
assert.equal(keyrings[0].unlockedAccount, accountToUnlock);
});

@ -0,0 +1,39 @@
import { cloneDeep } from 'lodash';
const version = 65;
/**
* Removes metaMetricsSendCount from MetaMetrics controller
*/
export default {
version,
async migrate(originalVersionedData) {
const versionedData = cloneDeep(originalVersionedData);
versionedData.meta.version = version;
const state = versionedData.data;
const newState = transformState(state);
versionedData.data = newState;
return versionedData;
},
};
function transformState(state) {
if (state.PreferencesController) {
const {
completedOnboarding,
firstTimeFlowType,
} = state.PreferencesController;
state.OnboardingController = state.OnboardingController ?? {};
if (completedOnboarding !== undefined) {
state.OnboardingController.completedOnboarding = completedOnboarding;
delete state.PreferencesController.completedOnboarding;
}
if (firstTimeFlowType !== undefined) {
state.OnboardingController.firstTimeFlowType = firstTimeFlowType;
delete state.PreferencesController.firstTimeFlowType;
}
}
return state;
}

@ -0,0 +1,145 @@
import migration65 from './065';
describe('migration #65', () => {
it('should update the version metadata', async () => {
const oldStorage = {
meta: {
version: 64,
},
data: {},
};
const newStorage = await migration65.migrate(oldStorage);
expect(newStorage.meta).toStrictEqual({
version: 65,
});
});
it('should move completedOnboarding from PreferencesController to OnboardingController when completedOnboarding is true', async () => {
const oldStorage = {
meta: {},
data: {
PreferencesController: {
completedOnboarding: true,
bar: 'baz',
},
OnboardingController: {
foo: 'bar',
},
},
};
const newStorage = await migration65.migrate(oldStorage);
expect(newStorage.data).toStrictEqual({
PreferencesController: {
bar: 'baz',
},
OnboardingController: {
completedOnboarding: true,
foo: 'bar',
},
});
});
it('should move completedOnboarding from PreferencesController to OnboardingController when completedOnboarding is false', async () => {
const oldStorage = {
meta: {},
data: {
PreferencesController: {
completedOnboarding: false,
bar: 'baz',
},
OnboardingController: {
foo: 'bar',
},
},
};
const newStorage = await migration65.migrate(oldStorage);
expect(newStorage.data).toStrictEqual({
PreferencesController: {
bar: 'baz',
},
OnboardingController: {
completedOnboarding: false,
foo: 'bar',
},
});
});
it('should move firstTimeFlowType from PreferencesController to OnboardingController when firstTimeFlowType is truthy', async () => {
const oldStorage = {
meta: {},
data: {
PreferencesController: {
firstTimeFlowType: 'create',
bar: 'baz',
},
OnboardingController: {
foo: 'bar',
},
},
};
const newStorage = await migration65.migrate(oldStorage);
expect(newStorage.data).toStrictEqual({
PreferencesController: {
bar: 'baz',
},
OnboardingController: {
firstTimeFlowType: 'create',
foo: 'bar',
},
});
});
it('should move firstTimeFlowType from PreferencesController to OnboardingController when firstTimeFlowType is falsy', async () => {
const oldStorage = {
meta: {},
data: {
PreferencesController: {
firstTimeFlowType: null,
bar: 'baz',
},
OnboardingController: {
foo: 'bar',
},
},
};
const newStorage = await migration65.migrate(oldStorage);
expect(newStorage.data).toStrictEqual({
PreferencesController: {
bar: 'baz',
},
OnboardingController: {
firstTimeFlowType: null,
foo: 'bar',
},
});
});
it('should not modify PreferencesController or OnboardingController when completedOnboarding and firstTimeFlowType are undefined', async () => {
const oldStorage = {
meta: {},
data: {
PreferencesController: {
bar: 'baz',
},
OnboardingController: {
foo: 'bar',
},
},
};
const newStorage = await migration65.migrate(oldStorage);
expect(newStorage.data).toStrictEqual({
PreferencesController: {
bar: 'baz',
},
OnboardingController: {
foo: 'bar',
},
});
});
});

@ -68,6 +68,7 @@ import m061 from './061';
import m062 from './062';
import m063 from './063';
import m064 from './064';
import m065 from './065';
const migrations = [
m002,
@ -133,6 +134,7 @@ const migrations = [
m062,
m063,
m064,
m065,
];
export default migrations;

@ -79,7 +79,36 @@ export default class ExtensionPlatform {
}
getVersion() {
return extension.runtime.getManifest().version;
const {
version,
version_name: versionName,
} = extension.runtime.getManifest();
const versionParts = version.split('.');
if (versionName) {
// On Chrome, the build type is stored as `version_name` in the manifest, and the fourth part
// of the version is the build version.
const buildType = versionName;
if (versionParts.length < 4) {
throw new Error(`Version missing build number: '${version}'`);
}
const [major, minor, patch, buildVersion] = versionParts;
return `${major}.${minor}.${patch}-${buildType}.${buildVersion}`;
} else if (versionParts.length === 4) {
// On Firefox, the build type and build version are in the fourth part of the version.
const [major, minor, patch, prerelease] = versionParts;
const matches = prerelease.match(/^(\w+)(\d)+$/u);
if (matches === null) {
throw new Error(`Version contains invalid prerelease: ${version}`);
}
const [, buildType, buildVersion] = matches;
return `${major}.${minor}.${patch}-${buildType}.${buildVersion}`;
}
// If there is no `version_name` and there are only 3 version parts, then this is not a
// prerelease and the version requires no modification.
return version;
}
openExtensionInBrowser(route = null, queryString = null) {

@ -0,0 +1,96 @@
import extension from 'extensionizer';
import ExtensionPlatform from './extension';
jest.mock('extensionizer', () => {
return {
runtime: {
getManifest: jest.fn(),
},
};
});
describe('extension platform', () => {
beforeEach(() => {
// TODO: Delete this an enable 'resetMocks' in `jest.config.js` instead
jest.resetAllMocks();
});
describe('getVersion', () => {
it('should return non-prerelease version', () => {
extension.runtime.getManifest.mockReturnValue({ version: '1.2.3' });
const extensionPlatform = new ExtensionPlatform();
const version = extensionPlatform.getVersion();
expect(version).toBe('1.2.3');
});
it('should return SemVer-formatted version for Chrome style manifest of prerelease', () => {
extension.runtime.getManifest.mockReturnValue({
version: '1.2.3.0',
version_name: 'beta',
});
const extensionPlatform = new ExtensionPlatform();
const version = extensionPlatform.getVersion();
expect(version).toBe('1.2.3-beta.0');
});
it('should return SemVer-formatted version for Firefox style manifest of prerelease', () => {
extension.runtime.getManifest.mockReturnValue({
version: '1.2.3.beta0',
});
const extensionPlatform = new ExtensionPlatform();
const version = extensionPlatform.getVersion();
expect(version).toBe('1.2.3-beta.0');
});
it('should throw error if build version is missing from Chrome style prerelease manifest', () => {
extension.runtime.getManifest.mockReturnValue({
version: '1.2.3',
version_name: 'beta',
});
const extensionPlatform = new ExtensionPlatform();
expect(() => extensionPlatform.getVersion()).toThrow(
'Version missing build number:',
);
});
it('should throw error if build type is missing from Chrome style prerelease manifest', () => {
extension.runtime.getManifest.mockReturnValue({
version: '1.2.3.0',
});
const extensionPlatform = new ExtensionPlatform();
expect(() => extensionPlatform.getVersion()).toThrow(
'Version contains invalid prerelease:',
);
});
it('should throw error if build version is missing from Firefox style prerelease manifest', () => {
extension.runtime.getManifest.mockReturnValue({
version: '1.2.3.beta',
});
const extensionPlatform = new ExtensionPlatform();
expect(() => extensionPlatform.getVersion()).toThrow(
'Version contains invalid prerelease:',
);
});
it('should throw error if build type is missing from Firefox style prerelease manifest', () => {
extension.runtime.getManifest.mockReturnValue({
version: '1.2.3.0',
});
const extensionPlatform = new ExtensionPlatform();
expect(() => extensionPlatform.getVersion()).toThrow(
'Version contains invalid prerelease:',
);
});
});
});

@ -40,8 +40,6 @@ Commands:
e2e tests.
Options:
--beta-version If the build type is "beta", the beta version number.
[number] [default: 0]
--build-type The "type" of build to create. One of: "beta", "main"
[string] [default: "main"]
--lint-fence-files Whether files with code fences should be linted after

@ -5,17 +5,12 @@ const del = require('del');
const pify = require('pify');
const pump = pify(require('pump'));
const { version } = require('../../package.json');
const { createTask, composeParallel } = require('./task');
const { BuildTypes } = require('./utils');
module.exports = createEtcTasks;
function createEtcTasks({
betaVersionsMap,
browserPlatforms,
isBeta,
livereload,
}) {
function createEtcTasks({ browserPlatforms, buildType, livereload }) {
const clean = createTask('clean', async function clean() {
await del(['./dist/*']);
await Promise.all(
@ -33,20 +28,19 @@ function createEtcTasks({
const zip = createTask(
'zip',
composeParallel(
...browserPlatforms.map((platform) =>
createZipTask(platform, isBeta ? betaVersionsMap[platform] : undefined),
),
...browserPlatforms.map((platform) => createZipTask(platform, buildType)),
),
);
return { clean, reload, zip };
}
function createZipTask(platform, betaVersion) {
function createZipTask(platform, buildType) {
return async () => {
const path = betaVersion
? `metamask-BETA-${platform}-${betaVersion}`
: `metamask-${platform}-${version}`;
const path =
buildType === BuildTypes.main
? `metamask-${platform}-${version}`
: `metamask-${buildType}-${platform}-${version}`;
await pump(
gulp.src(`dist/${platform}/**`),
gulpZip(`${path}.zip`),

@ -5,7 +5,6 @@
//
const livereload = require('gulp-livereload');
const minimist = require('minimist');
const { version } = require('../../package.json');
const {
createTask,
composeSeries,
@ -17,7 +16,7 @@ const createScriptTasks = require('./scripts');
const createStyleTasks = require('./styles');
const createStaticAssetTasks = require('./static');
const createEtcTasks = require('./etc');
const { BuildTypes, getNextBetaVersionMap } = require('./utils');
const { BuildTypes, getBrowserVersionMap } = require('./utils');
// packages required dynamically via browserify configuration in dependencies
require('loose-envify');
@ -34,10 +33,8 @@ defineAndRunBuildTasks();
function defineAndRunBuildTasks() {
const {
betaVersion,
buildType,
entryTask,
isBeta,
isLavaMoat,
shouldIncludeLockdown,
shouldLintFenceFiles,
@ -46,26 +43,19 @@ function defineAndRunBuildTasks() {
const browserPlatforms = ['firefox', 'chrome', 'brave', 'opera'];
let betaVersionsMap;
if (isBeta) {
betaVersionsMap = getNextBetaVersionMap(
version,
betaVersion,
browserPlatforms,
);
}
const browserVersionMap = getBrowserVersionMap(browserPlatforms);
const staticTasks = createStaticAssetTasks({
livereload,
browserPlatforms,
shouldIncludeLockdown,
isBeta,
buildType,
});
const manifestTasks = createManifestTasks({
browserPlatforms,
betaVersionsMap,
isBeta,
browserVersionMap,
buildType,
});
const styleTasks = createStyleTasks({ livereload });
@ -81,8 +71,7 @@ function defineAndRunBuildTasks() {
const { clean, reload, zip } = createEtcTasks({
livereload,
browserPlatforms,
betaVersionsMap,
isBeta,
buildType,
});
// build for development (livereload)
@ -146,7 +135,6 @@ function defineAndRunBuildTasks() {
function parseArgv() {
const NamedArgs = {
BetaVersion: 'beta-version',
BuildType: 'build-type',
LintFenceFiles: 'lint-fence-files',
OmitLockdown: 'omit-lockdown',
@ -161,7 +149,6 @@ function parseArgv() {
],
string: [NamedArgs.BuildType],
default: {
[NamedArgs.BetaVersion]: 0,
[NamedArgs.BuildType]: BuildTypes.main,
[NamedArgs.LintFenceFiles]: true,
[NamedArgs.OmitLockdown]: false,
@ -180,11 +167,6 @@ function parseArgv() {
throw new Error('MetaMask build: No entry task specified.');
}
const betaVersion = argv[NamedArgs.BetaVersion];
if (!Number.isInteger(betaVersion) || betaVersion < 0) {
throw new Error(`MetaMask build: Invalid beta version: "${betaVersion}"`);
}
const buildType = argv[NamedArgs.BuildType];
if (!(buildType in BuildTypes)) {
throw new Error(`MetaMask build: Invalid build type: "${buildType}"`);
@ -198,10 +180,8 @@ function parseArgv() {
: !/dev/iu.test(entryTask);
return {
betaVersion: String(betaVersion),
buildType,
entryTask,
isBeta: argv[NamedArgs.BuildType] === BuildTypes.beta,
isLavaMoat: process.argv[0].includes('lavamoat'),
shouldIncludeLockdown: argv[NamedArgs.OmitLockdown],
shouldLintFenceFiles,

@ -3,14 +3,18 @@ const path = require('path');
const { merge, cloneDeep } = require('lodash');
const baseManifest = require('../../app/manifest/_base.json');
const { version } = require('../../package.json');
const betaManifestModifications = require('../../app/manifest/_beta_modifications.json');
const { createTask, composeSeries } = require('./task');
const { BuildTypes } = require('./utils');
module.exports = createManifestTasks;
function createManifestTasks({ betaVersionsMap, browserPlatforms, isBeta }) {
function createManifestTasks({
browserPlatforms,
browserVersionMap,
buildType,
}) {
// merge base manifest with per-platform manifests
const prepPlatforms = async () => {
return Promise.all(
@ -28,9 +32,8 @@ function createManifestTasks({ betaVersionsMap, browserPlatforms, isBeta }) {
const result = merge(
cloneDeep(baseManifest),
platformModifications,
isBeta
? getBetaModifications(platform, betaVersionsMap)
: { version },
browserVersionMap[platform],
getBuildModifications(buildType),
);
const dir = path.join('.', 'dist', platform);
await fs.mkdir(dir, { recursive: true });
@ -109,16 +112,10 @@ async function writeJson(obj, file) {
return fs.writeFile(file, JSON.stringify(obj, null, 2));
}
function getBetaModifications(platform, betaVersionsMap) {
if (!betaVersionsMap || typeof betaVersionsMap !== 'object') {
throw new Error('MetaMask build: Expected object beta versions map.');
function getBuildModifications(buildType) {
const buildModifications = {};
if (buildType === BuildTypes.beta) {
Object.assign(buildModifications, betaManifestModifications);
}
const betaVersion = betaVersionsMap[platform];
return {
...betaManifestModifications,
version: betaVersion,
...(platform === 'firefox' ? {} : { version_name: 'beta' }),
};
return buildModifications;
}

@ -4,6 +4,7 @@ const { writeFileSync, readFileSync } = require('fs');
const EventEmitter = require('events');
const gulp = require('gulp');
const watch = require('gulp-watch');
const Vinyl = require('vinyl');
const source = require('vinyl-source-stream');
const buffer = require('vinyl-buffer');
const log = require('fancy-log');
@ -20,13 +21,15 @@ const endOfStream = pify(require('end-of-stream'));
const labeledStreamSplicer = require('labeled-stream-splicer').obj;
const wrapInStream = require('pumpify').obj;
const Sqrl = require('squirrelly');
const lavaPack = require('@lavamoat/lavapack');
const lavapack = require('@lavamoat/lavapack');
const lavamoatBrowserify = require('lavamoat-browserify');
const terser = require('terser');
const bifyModuleGroups = require('bify-module-groups');
const metamaskrc = require('rc')('metamask', {
INFURA_PROJECT_ID: process.env.INFURA_PROJECT_ID,
ONBOARDING_V2: process.env.ONBOARDING_V2,
SEGMENT_HOST: process.env.SEGMENT_HOST,
SEGMENT_WRITE_KEY: process.env.SEGMENT_WRITE_KEY,
SEGMENT_LEGACY_WRITE_KEY: process.env.SEGMENT_LEGACY_WRITE_KEY,
@ -259,7 +262,22 @@ function createFactoredBuild({
// set bundle entries
bundlerOpts.entries = [...entryFiles];
// setup lavamoat
// lavamoat will add lavapack but it will be removed by bify-module-groups
// we will re-add it later by installing a lavapack runtime
const lavamoatOpts = {
policy: path.resolve(__dirname, '../../lavamoat/browserify/policy.json'),
policyOverride: path.resolve(
__dirname,
'../../lavamoat/browserify/policy-override.json',
),
writeAutoPolicy: process.env.WRITE_AUTO_POLICY,
};
Object.assign(bundlerOpts, lavamoatBrowserify.args);
bundlerOpts.plugin.push([lavamoatBrowserify, lavamoatOpts]);
// setup bundle factoring with bify-module-groups plugin
// note: this will remove lavapack, but its ok bc we manually readd it later
Object.assign(bundlerOpts, bifyModuleGroups.plugin.args);
bundlerOpts.plugin = [...bundlerOpts.plugin, [bifyModuleGroups.plugin]];
@ -281,18 +299,24 @@ function createFactoredBuild({
groupingMap: sizeGroupMap,
}),
);
pipeline.get('vinyl').unshift(
// convert each module group into a stream with a single vinyl file
streamFlatMap((moduleGroup) => {
// converts each module group into a single vinyl file containing its bundle
const moduleGroupPackerStream = streamFlatMap((moduleGroup) => {
const filename = `${moduleGroup.label}.js`;
const childStream = wrapInStream(
moduleGroup.stream,
lavaPack({ raw: true, hasExports: true, includePrelude: false }),
// we manually readd lavapack here bc bify-module-groups removes it
lavapack({ raw: true, hasExports: true, includePrelude: false }),
source(filename),
);
return childStream;
});
pipeline.get('vinyl').unshift(moduleGroupPackerStream, buffer());
// add lavamoat policy loader file to packer output
moduleGroupPackerStream.push(
new Vinyl({
path: 'policy-load.js',
contents: lavapack.makePolicyLoaderStream(lavamoatOpts),
}),
buffer(),
);
// setup bundle destination
browserPlatforms.forEach((platform) => {
@ -306,36 +330,58 @@ function createFactoredBuild({
const commonSet = sizeGroupMap.get('common');
// create entry points for each file
for (const [groupLabel, groupSet] of sizeGroupMap.entries()) {
// skip "common" group, they are added tp all other groups
// skip "common" group, they are added to all other groups
if (groupSet === commonSet) continue;
switch (groupLabel) {
case 'ui': {
renderHtmlFile('popup', groupSet, commonSet, browserPlatforms);
renderHtmlFile(
'notification',
renderHtmlFile({
htmlName: 'popup',
groupSet,
commonSet,
browserPlatforms,
);
renderHtmlFile('home', groupSet, commonSet, browserPlatforms);
useLavamoat: false,
});
renderHtmlFile({
htmlName: 'notification',
groupSet,
commonSet,
browserPlatforms,
useLavamoat: false,
});
renderHtmlFile({
htmlName: 'home',
groupSet,
commonSet,
browserPlatforms,
useLavamoat: false,
});
break;
}
case 'background': {
renderHtmlFile('background', groupSet, commonSet, browserPlatforms);
renderHtmlFile({
htmlName: 'background',
groupSet,
commonSet,
browserPlatforms,
useLavamoat: false,
});
break;
}
case 'content-script': {
renderHtmlFile(
'trezor-usb-permissions',
renderHtmlFile({
htmlName: 'trezor-usb-permissions',
groupSet,
commonSet,
browserPlatforms,
);
useLavamoat: false,
});
break;
}
default: {
throw new Error(`buildsys - unknown groupLabel "${groupLabel}"`);
throw new Error(
`build/scripts - unknown groupLabel "${groupLabel}"`,
);
}
}
}
@ -612,6 +658,7 @@ function getEnvironmentVariables({ buildType, devMode, testing }) {
? process.env.SEGMENT_PROD_LEGACY_WRITE_KEY
: metamaskrc.SEGMENT_LEGACY_WRITE_KEY,
SWAPS_USE_DEV_APIS: process.env.SWAPS_USE_DEV_APIS === '1',
ONBOARDING_V2: metamaskrc.ONBOARDING_V2 === '1',
};
}
@ -635,13 +682,24 @@ function getEnvironment({ devMode, testing }) {
return 'other';
}
function renderHtmlFile(htmlName, groupSet, commonSet, browserPlatforms) {
function renderHtmlFile({
htmlName,
groupSet,
commonSet,
browserPlatforms,
useLavamoat,
}) {
if (useLavamoat === undefined) {
throw new Error(
'build/scripts/renderHtmlFile - must specify "useLavamoat" option',
);
}
const htmlFilePath = `./app/${htmlName}.html`;
const htmlTemplate = readFileSync(htmlFilePath, 'utf8');
const jsBundles = [...commonSet.values(), ...groupSet.values()].map(
(label) => `./${label}.js`,
);
const htmlOutput = Sqrl.render(htmlTemplate, { jsBundles });
const htmlOutput = Sqrl.render(htmlTemplate, { jsBundles, useLavamoat });
browserPlatforms.forEach((platform) => {
const dest = `./dist/${platform}/${htmlName}.html`;
// we dont have a way of creating async events atm

@ -6,6 +6,7 @@ const glob = require('fast-glob');
const locales = require('../../app/_locales/index.json');
const { createTask, composeSeries } = require('./task');
const { BuildTypes } = require('./utils');
const EMPTY_JS_FILE = './development/empty.js';
@ -13,26 +14,30 @@ module.exports = function createStaticAssetTasks({
livereload,
browserPlatforms,
shouldIncludeLockdown = true,
isBeta,
buildType,
}) {
const [copyTargetsProd, copyTargetsDev] = getCopyTargets(
shouldIncludeLockdown,
);
const copyTargetsBeta = [
...copyTargetsProd,
const additionalBuildTargets = {
[BuildTypes.beta]: [
{
src: './app/build-types/beta/',
dest: `images`,
},
];
],
};
const targets = isBeta ? copyTargetsBeta : copyTargetsProd;
if (Object.keys(additionalBuildTargets).includes(buildType)) {
copyTargetsProd.push(...additionalBuildTargets[buildType]);
copyTargetsDev.push(...additionalBuildTargets[buildType]);
}
const prod = createTask(
'static:prod',
composeSeries(
...targets.map((target) => {
...copyTargetsProd.map((target) => {
return async function copyStaticAssets() {
await performCopy(target);
};
@ -118,6 +123,10 @@ function getCopyTargets(shouldIncludeLockdown) {
src: `./node_modules/@fortawesome/fontawesome-free/webfonts/`,
dest: `fonts/fontawesome`,
},
{
src: `./node_modules/react-responsive-carousel/lib/styles`,
dest: 'react-gallery/',
},
{
src: `./ui/css/output/`,
pattern: `*.css`,
@ -143,11 +152,22 @@ function getCopyTargets(shouldIncludeLockdown) {
: EMPTY_JS_FILE,
dest: `lockdown-run.js`,
},
{
src: shouldIncludeLockdown
? `./app/scripts/lockdown-more.js`
: EMPTY_JS_FILE,
dest: `lockdown-more.js`,
},
{
// eslint-disable-next-line node/no-extraneous-require
src: require.resolve('@lavamoat/lavapack/src/runtime-cjs.js'),
dest: `runtime-cjs.js`,
},
{
// eslint-disable-next-line node/no-extraneous-require
src: require.resolve('@lavamoat/lavapack/src/runtime.js'),
dest: `runtime-lavamoat.js`,
},
{
src: `./app/phishing.html`,
dest: `phishing.html`,

@ -1,32 +1,63 @@
const semver = require('semver');
const { version } = require('../../package.json');
const BuildTypes = {
beta: 'beta',
flask: 'flask',
main: 'main',
};
/**
* @returns {Object} An object with browser as key and next version of beta
* as the value. E.g. { firefox: '9.6.0.beta0', chrome: '9.6.0.1' }
* Map the current version to a format that is compatible with each browser.
*
* The given version number is assumed to be a SemVer version number. Additionally, if the version
* has a prerelease component, it is assumed to have the format "<build type>.<build version",
* where the build version is a positive integer.
*
* @param {string} currentVersion - The current version.
* @param {string[]} platforms - A list of browsers to generate versions for.
* @returns {Object} An object with the browser as the key and the browser-specific version object
* as the value. For example, the version `9.6.0-beta.1` would return the object
* `{ firefox: { version: '9.6.0.beta1' }, chrome: { version: '9.6.0.1', version_name: 'beta' } }`.
*/
function getNextBetaVersionMap(currentVersion, betaVersion, platforms) {
const [major, minor] = currentVersion.split('.');
function getBrowserVersionMap(platforms) {
const major = semver.major(version);
const minor = semver.minor(version);
const patch = semver.patch(version);
const prerelease = semver.prerelease(version);
let buildType;
let buildVersion;
if (prerelease) {
if (prerelease.length !== 2) {
throw new Error(`Invalid prerelease version: '${prerelease.join('.')}'`);
}
[buildType, buildVersion] = prerelease;
if (!String(buildVersion).match(/^\d+$/u)) {
throw new Error(`Invalid prerelease build version: '${buildVersion}'`);
} else if (buildType !== BuildTypes.beta) {
throw new Error(`Invalid prerelease build type: ${buildType}`);
}
}
return platforms.reduce((platformMap, platform) => {
platformMap[platform] = [
// Keeps the current major
major,
// Bump the minor version
Number(minor) + 1,
// This isn't typically used
0,
// The beta number
`${platform === 'firefox' ? 'beta' : ''}${betaVersion}`,
].join('.');
const versionParts = [major, minor, patch];
const browserSpecificVersion = {};
if (prerelease) {
if (platform === 'firefox') {
versionParts.push(`${buildType}${buildVersion}`);
} else {
versionParts.push(buildVersion);
browserSpecificVersion.version_name = buildType;
}
}
browserSpecificVersion.version = versionParts.join('.');
platformMap[platform] = browserSpecificVersion;
return platformMap;
}, {});
}
const BuildTypes = {
beta: 'beta',
flask: 'flask',
main: 'main',
};
module.exports = {
BuildTypes,
getNextBetaVersionMap,
getBrowserVersionMap,
};

@ -20,6 +20,7 @@ module.exports = {
'<rootDir>/ui/**/*.test.js',
'<rootDir>/shared/**/*.test.js',
'<rootDir>/app/scripts/migrations/*.test.js',
'<rootDir>/app/scripts/platforms/*.test.js',
],
testTimeout: 2500,
};

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save