diff --git a/.bundler-audit.yml b/.bundler-audit.yml new file mode 100644 index 00000000000000..0671df390fed81 --- /dev/null +++ b/.bundler-audit.yml @@ -0,0 +1,6 @@ +--- +ignore: + # devise-two-factor advisory about brute-forcing TOTP + # We have rate-limits on authentication endpoints in place (including second + # factor verification) since Mastodon v3.2.0 + - CVE-2024-0227 diff --git a/.devcontainer/codespaces/devcontainer.json b/.devcontainer/codespaces/devcontainer.json index ca9156fdaa4bf1..b32e4026d2374d 100644 --- a/.devcontainer/codespaces/devcontainer.json +++ b/.devcontainer/codespaces/devcontainer.json @@ -5,7 +5,7 @@ "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "features": { - "ghcr.io/devcontainers/features/sshd:1": {} + "ghcr.io/devcontainers/features/sshd:1": {}, }, "runServices": ["app", "db", "redis"], @@ -15,16 +15,16 @@ "portsAttributes": { "3000": { "label": "web", - "onAutoForward": "notify" + "onAutoForward": "notify", }, "4000": { "label": "stream", - "onAutoForward": "silent" - } + "onAutoForward": "silent", + }, }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "silent", }, "remoteEnv": { @@ -33,7 +33,7 @@ "STREAMING_API_BASE_URL": "https://${localEnv:CODESPACE_NAME}-4000.app.github.dev", "DISABLE_FORGERY_REQUEST_PROTECTION": "true", "ES_ENABLED": "", - "LIBRE_TRANSLATE_ENDPOINT": "" + "LIBRE_TRANSLATE_ENDPOINT": "", }, "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", @@ -43,7 +43,7 @@ "customizations": { "vscode": { "settings": {}, - "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"] - } - } + "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"], + }, + }, } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index fa8d6542c18aec..ed71235b3b3001 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,7 +5,7 @@ "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "features": { - "ghcr.io/devcontainers/features/sshd:1": {} + "ghcr.io/devcontainers/features/sshd:1": {}, }, "forwardPorts": [3000, 4000], @@ -14,17 +14,17 @@ "3000": { "label": "web", "onAutoForward": "notify", - "requireLocalPort": true + "requireLocalPort": true, }, "4000": { "label": "stream", "onAutoForward": "silent", - "requireLocalPort": true - } + "requireLocalPort": true, + }, }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "silent", }, "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", @@ -34,7 +34,7 @@ "customizations": { "vscode": { "settings": {}, - "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"] - } - } + "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"], + }, + }, } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 40dc72c12d2f05..88979723c338eb 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -70,7 +70,7 @@ services: hard: -1 libretranslate: - image: libretranslate/libretranslate:v1.5.2 + image: libretranslate/libretranslate:v1.5.4 restart: unless-stopped volumes: - lt-data:/home/libretranslate/.local diff --git a/.eslintrc.js b/.eslintrc.js index e2d16a54a834c5..1b36bcee2535b3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -245,7 +245,7 @@ module.exports = defineConfig({ }, // Immutable / Redux / data store { - pattern: '{immutable,react-redux,react-immutable-proptypes,react-immutable-pure-component,reselect}', + pattern: '{immutable,@reduxjs/toolkit,react-redux,react-immutable-proptypes,react-immutable-pure-component}', group: 'external', position: 'before', }, @@ -353,7 +353,14 @@ module.exports = defineConfig({ '@typescript-eslint/consistent-type-exports': 'error', '@typescript-eslint/consistent-type-imports': 'error', "@typescript-eslint/prefer-nullish-coalescing": ['error', { ignorePrimitives: { boolean: true } }], - + "@typescript-eslint/no-restricted-imports": [ + "warn", + { + "name": "react-redux", + "importNames": ["useSelector", "useDispatch"], + "message": "Use typed hooks `useAppDispatch` and `useAppSelector` instead." + } + ], 'jsdoc/require-jsdoc': 'off', // Those rules set stricter rules for TS files diff --git a/.github/renovate.json5 b/.github/renovate.json5 index a7998ddfdc954a..dab99829a1be87 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -99,6 +99,16 @@ matchUpdateTypes: ['patch', 'minor'], groupName: 'eslint (non-major)', }, + { + // Group actions/*-artifact in the same PR + matchManagers: ['github-actions'], + matchPackageNames: [ + 'actions/download-artifact', + 'actions/upload-artifact', + ], + matchUpdateTypes: ['major'], + groupName: 'artifact actions (major)', + }, { // Update @types/* packages every week, with one grouped PR matchPackagePrefixes: '@types/', diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 3b40c3fd07be90..6fb93b7fef45a6 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -31,7 +31,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -44,7 +44,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -57,6 +57,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 with: category: '/language:${{matrix.language}}' diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 3be2a3d4906397..af2d2e8f4eb68a 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,33 +1,13 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-10-26 09:32:34 -0400 using Haml-Lint version 0.51.0. +# on 2024-01-09 11:30:07 -0500 using Haml-Lint version 0.53.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. linters: - # Offense count: 16 + # Offense count: 1 LineLength: exclude: - - 'app/views/admin/account_actions/new.html.haml' - - 'app/views/admin/accounts/index.html.haml' - - 'app/views/admin/ip_blocks/new.html.haml' - - 'app/views/admin/roles/_form.html.haml' - - 'app/views/admin/settings/discovery/show.html.haml' - - 'app/views/auth/registrations/edit.html.haml' - - 'app/views/auth/registrations/new.html.haml' - - 'app/views/filters/_filter_fields.html.haml' - - 'app/views/media/player.html.haml' - - 'app/views/settings/applications/_fields.html.haml' - - 'app/views/settings/imports/index.html.haml' - - 'app/views/settings/preferences/appearance/show.html.haml' - - 'app/views/settings/preferences/notifications/show.html.haml' - - 'app/views/settings/preferences/other/show.html.haml' - - # Offense count: 9 - RuboCop: - exclude: - - 'app/views/admin/accounts/_buttons.html.haml' - - 'app/views/admin/accounts/_local_account.html.haml' - 'app/views/admin/roles/_form.html.haml' diff --git a/.nvmrc b/.nvmrc index 48ef2c10babeda..a3597ecbd10c20 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.9 +20.11 diff --git a/.prettierignore b/.prettierignore index 305f0fd753d48e..51850b2b28ad74 100644 --- a/.prettierignore +++ b/.prettierignore @@ -73,3 +73,5 @@ app/javascript/styles/mastodon/reset.scss # Ignore the generated AUTHORS.md AUTHORS.md + +!lint-staged.config.js diff --git a/.rubocop.yml b/.rubocop.yml index 8ea95de3b74ff1..08221c37a2dd32 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -74,14 +74,12 @@ Metrics/ModuleLength: Metrics/AbcSize: Exclude: - 'lib/mastodon/cli/*.rb' - - db/*migrate/**/* # Reason: Currently disabled in .rubocop_todo.yml # https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity Metrics/CyclomaticComplexity: Exclude: - lib/mastodon/cli/*.rb - - db/*migrate/**/* # Reason: # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsparameterlists @@ -105,19 +103,46 @@ Rails/Exit: - 'config/boot.rb' - 'lib/mastodon/cli/*.rb' +# Reason: Conflicts with `Lint/UselessMethodDefinition` for inherited controller actions +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railslexicallyscopedactionfilter +Rails/LexicallyScopedActionFilter: + Exclude: + - 'app/controllers/auth/*' + +# Reason: These tasks are doing local work which do not need full env loaded +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsrakeenvironment +Rails/RakeEnvironment: + Exclude: + - 'lib/tasks/auto_annotate_models.rake' + - 'lib/tasks/emojis.rake' + - 'lib/tasks/mastodon.rake' + - 'lib/tasks/repo.rake' + - 'lib/tasks/statistics.rake' + +# Reason: There are appropriate times to use these features +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsskipsmodelvalidations +Rails/SkipsModelValidations: + Enabled: false + +# Reason: We want to preserve the ability to migrate from arbitrary old versions, +# and cannot guarantee that every installation has run every migration as they upgrade. +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsunusedignoredcolumns +Rails/UnusedIgnoredColumns: + Enabled: false + +# Reason: Prevailing style choice +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsnegateinclude +Rails/NegateInclude: + Enabled: false + RSpec/ContextWording: Exclude: - spec/imastodon/**/* -# Reason: Some single letter camel case files shouldn't be split +# Reason: Deprecated cop, will be removed in 3.0, replaced by SpecFilePathFormat # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath RSpec/FilePath: - CustomTransform: - ActivityPub: activitypub - DeepL: deepl - FetchOEmbedService: fetch_oembed_service - OEmbedController: oembed_controller - OStatus: ostatus + Enabled: false # Reason: # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 03543c8e0d23c9..b62dfa72a84790 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp` -# using RuboCop version 1.57.2. +# using RuboCop version 1.59.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -13,20 +13,13 @@ Bundler/OrderedGems: Exclude: - 'Gemfile' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns. -# URISchemes: http, https -Layout/LineLength: - Exclude: - - 'app/models/account.rb' - Lint/NonLocalExitFromIterator: Exclude: - 'app/helpers/jsonld_helper.rb' # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: - Max: 125 + Max: 82 # Configuration parameters: CountBlocks, Max. Metrics/BlockNesting: @@ -45,164 +38,29 @@ Metrics/PerceivedComplexity: RSpec/ExampleLength: Max: 22 -RSpec/LetSetup: - Exclude: - - 'spec/controllers/api/v1/accounts/statuses_controller_spec.rb' - - 'spec/controllers/api/v1/filters_controller_spec.rb' - - 'spec/controllers/api/v2/admin/accounts_controller_spec.rb' - - 'spec/controllers/api/v2/filters/keywords_controller_spec.rb' - - 'spec/controllers/api/v2/filters/statuses_controller_spec.rb' - - 'spec/controllers/auth/confirmations_controller_spec.rb' - - 'spec/controllers/auth/passwords_controller_spec.rb' - - 'spec/controllers/auth/sessions_controller_spec.rb' - - 'spec/controllers/follower_accounts_controller_spec.rb' - - 'spec/controllers/following_accounts_controller_spec.rb' - - 'spec/controllers/oauth/authorized_applications_controller_spec.rb' - - 'spec/controllers/oauth/tokens_controller_spec.rb' - - 'spec/controllers/settings/imports_controller_spec.rb' - - 'spec/lib/activitypub/activity/delete_spec.rb' - - 'spec/lib/vacuum/applications_vacuum_spec.rb' - - 'spec/lib/vacuum/preview_cards_vacuum_spec.rb' - - 'spec/models/account_spec.rb' - - 'spec/models/account_statuses_cleanup_policy_spec.rb' - - 'spec/models/canonical_email_block_spec.rb' - - 'spec/models/status_spec.rb' - - 'spec/models/user_spec.rb' - - 'spec/services/account_statuses_cleanup_service_spec.rb' - - 'spec/services/activitypub/fetch_featured_collection_service_spec.rb' - - 'spec/services/activitypub/fetch_remote_status_service_spec.rb' - - 'spec/services/activitypub/process_account_service_spec.rb' - - 'spec/services/activitypub/process_collection_service_spec.rb' - - 'spec/services/batched_remove_status_service_spec.rb' - - 'spec/services/block_domain_service_spec.rb' - - 'spec/services/bulk_import_service_spec.rb' - - 'spec/services/delete_account_service_spec.rb' - - 'spec/services/import_service_spec.rb' - - 'spec/services/notify_service_spec.rb' - - 'spec/services/remove_status_service_spec.rb' - - 'spec/services/report_service_spec.rb' - - 'spec/services/resolve_account_service_spec.rb' - - 'spec/services/suspend_account_service_spec.rb' - - 'spec/services/unallow_domain_service_spec.rb' - - 'spec/services/unsuspend_account_service_spec.rb' - - 'spec/workers/scheduler/user_cleanup_scheduler_spec.rb' - RSpec/MultipleExpectations: Max: 8 # Configuration parameters: AllowSubject. RSpec/MultipleMemoizedHelpers: - Max: 21 + Max: 17 # Configuration parameters: AllowedGroups. RSpec/NestedGroups: Max: 6 -# This cop supports unsafe autocorrection (--autocorrect-all). -Rails/ApplicationController: - Exclude: - - 'app/controllers/health_controller.rb' - # Configuration parameters: Include. # Include: app/models/**/*.rb Rails/HasAndBelongsToMany: Exclude: - 'app/models/concerns/account/associations.rb' - - 'app/models/preview_card.rb' - 'app/models/status.rb' - 'app/models/tag.rb' -# Configuration parameters: Include. -# Include: app/controllers/**/*.rb, app/mailers/**/*.rb -Rails/LexicallyScopedActionFilter: - Exclude: - - 'app/controllers/auth/passwords_controller.rb' - - 'app/controllers/auth/registrations_controller.rb' - -# This cop supports unsafe autocorrection (--autocorrect-all). -Rails/NegateInclude: - Exclude: - - 'app/controllers/concerns/signature_verification.rb' - - 'app/helpers/jsonld_helper.rb' - - 'app/lib/activitypub/activity/create.rb' - - 'app/lib/activitypub/activity/move.rb' - - 'app/lib/feed_manager.rb' - - 'app/lib/link_details_extractor.rb' - - 'app/models/concerns/attachmentable.rb' - - 'app/models/concerns/remotable.rb' - - 'app/models/custom_filter.rb' - - 'app/services/activitypub/process_status_update_service.rb' - - 'app/services/fetch_link_card_service.rb' - - 'app/workers/web/push_notification_worker.rb' - - 'lib/paperclip/color_extractor.rb' - Rails/OutputSafety: Exclude: - 'config/initializers/simple_form.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: Include. -# Include: **/Rakefile, **/*.rake -Rails/RakeEnvironment: - Exclude: - - 'lib/tasks/auto_annotate_models.rake' - - 'lib/tasks/db.rake' - - 'lib/tasks/emojis.rake' - - 'lib/tasks/mastodon.rake' - - 'lib/tasks/repo.rake' - - 'lib/tasks/statistics.rake' - -# Configuration parameters: ForbiddenMethods, AllowedMethods. -# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all -Rails/SkipsModelValidations: - Exclude: - - 'app/controllers/admin/invites_controller.rb' - - 'app/controllers/concerns/session_tracking_concern.rb' - - 'app/models/concerns/account/merging.rb' - - 'app/models/concerns/expireable.rb' - - 'app/models/status.rb' - - 'app/models/trends/links.rb' - - 'app/models/trends/preview_card_batch.rb' - - 'app/models/trends/preview_card_provider_batch.rb' - - 'app/models/trends/status_batch.rb' - - 'app/models/trends/statuses.rb' - - 'app/models/trends/tag_batch.rb' - - 'app/models/trends/tags.rb' - - 'app/models/user.rb' - - 'app/services/activitypub/process_status_update_service.rb' - - 'app/services/approve_appeal_service.rb' - - 'app/services/block_domain_service.rb' - - 'app/services/delete_account_service.rb' - - 'app/services/process_mentions_service.rb' - - 'app/services/unallow_domain_service.rb' - - 'app/services/unblock_domain_service.rb' - - 'app/services/update_status_service.rb' - - 'app/workers/activitypub/post_upgrade_worker.rb' - - 'app/workers/move_worker.rb' - - 'app/workers/scheduler/ip_cleanup_scheduler.rb' - - 'app/workers/scheduler/scheduled_statuses_scheduler.rb' - - 'db/migrate/20161203164520_add_from_account_id_to_notifications.rb' - - 'db/migrate/20170105224407_add_shortcode_to_media_attachments.rb' - - 'db/migrate/20170209184350_add_reply_to_statuses.rb' - - 'db/migrate/20170304202101_add_type_to_media_attachments.rb' - - 'db/migrate/20180528141303_fix_accounts_unique_index.rb' - - 'db/migrate/20180609104432_migrate_web_push_subscriptions2.rb' - - 'db/migrate/20181207011115_downcase_custom_emoji_domains.rb' - - 'db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb' - - 'db/migrate/20191007013357_update_pt_locales.rb' - - 'db/migrate/20220316233212_update_kurdish_locales.rb' - - 'db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb' - - 'db/post_migrate/20200917193528_migrate_notifications_type.rb' - - 'db/post_migrate/20201017234926_fill_account_suspension_origin.rb' - - 'db/post_migrate/20220617202502_migrate_roles.rb' - - 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb' - - 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb' - - 'lib/mastodon/cli/accounts.rb' - - 'lib/mastodon/cli/maintenance.rb' - - 'spec/lib/activitypub/activity/follow_spec.rb' - - 'spec/services/follow_service_spec.rb' - - 'spec/services/update_account_service_spec.rb' - # Configuration parameters: Include. # Include: app/models/**/*.rb Rails/UniqueValidationWithoutIndex: @@ -212,19 +70,6 @@ Rails/UniqueValidationWithoutIndex: - 'app/models/identity.rb' - 'app/models/webauthn_credential.rb' -# Configuration parameters: Include. -# Include: app/models/**/*.rb -Rails/UnusedIgnoredColumns: - Exclude: - - 'app/models/account.rb' - - 'app/models/account_stat.rb' - - 'app/models/admin/action_log.rb' - - 'app/models/custom_filter.rb' - - 'app/models/email_domain_block.rb' - - 'app/models/report.rb' - - 'app/models/status_edit.rb' - - 'app/models/user.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: exists, where @@ -232,40 +77,18 @@ Rails/WhereExists: Exclude: - 'app/controllers/activitypub/inboxes_controller.rb' - 'app/controllers/admin/email_domain_blocks_controller.rb' - - 'app/controllers/auth/registrations_controller.rb' - 'app/lib/activitypub/activity/create.rb' - 'app/lib/delivery_failure_tracker.rb' - 'app/lib/feed_manager.rb' - - 'app/lib/status_cache_hydrator.rb' - 'app/lib/suspicious_sign_in_detector.rb' - - 'app/models/concerns/account/interactions.rb' - - 'app/models/featured_tag.rb' - - 'app/models/poll.rb' - - 'app/models/session_activation.rb' - - 'app/models/status.rb' - - 'app/models/user.rb' - 'app/policies/status_policy.rb' - 'app/serializers/rest/announcement_serializer.rb' - - 'app/serializers/rest/tag_serializer.rb' - - 'app/services/activitypub/fetch_remote_status_service.rb' - - 'app/services/app_sign_up_service.rb' - - 'app/services/vote_service.rb' - - 'app/validators/reaction_validator.rb' - - 'app/validators/vote_validator.rb' - 'app/workers/move_worker.rb' - - 'db/migrate/20190529143559_preserve_old_layout_for_existing_users.rb' - - 'lib/tasks/tests.rake' - 'spec/models/account_spec.rb' - 'spec/services/activitypub/process_collection_service_spec.rb' - 'spec/services/purge_domain_service_spec.rb' - 'spec/services/unallow_domain_service_spec.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowOnConstant, AllowOnSelfClass. -Style/CaseEquality: - Exclude: - - 'config/initializers/trusted_proxies.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: AllowedMethods, AllowedPatterns. # AllowedMethods: ==, equal?, eql? @@ -293,8 +116,8 @@ Style/FetchEnvVar: - 'config/initializers/devise.rb' - 'config/initializers/paperclip.rb' - 'config/initializers/vapid.rb' - - 'lib/premailer_webpack_strategy.rb' - 'lib/mastodon/redis_config.rb' + - 'lib/premailer_webpack_strategy.rb' - 'lib/tasks/repo.rake' - 'spec/features/profile_spec.rb' @@ -304,14 +127,12 @@ Style/FetchEnvVar: # AllowedMethods: redirect Style/FormatStringToken: Exclude: - - 'app/models/privacy_policy.rb' - 'config/initializers/devise.rb' - 'lib/paperclip/color_extractor.rb' # This cop supports unsafe autocorrection (--autocorrect-all). Style/GlobalStdStream: Exclude: - - 'config/boot.rb' - 'config/environments/development.rb' - 'config/environments/production.rb' @@ -341,8 +162,6 @@ Style/GuardClause: - 'app/workers/redownload_media_worker.rb' - 'app/workers/remote_account_refresh_worker.rb' - 'config/initializers/devise.rb' - - 'db/migrate/20170901141119_truncate_preview_cards.rb' - - 'db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb' - 'lib/devise/strategies/two_factor_ldap_authenticatable.rb' - 'lib/devise/strategies/two_factor_pam_authenticatable.rb' - 'lib/mastodon/cli/accounts.rb' @@ -363,7 +182,6 @@ Style/HashAsLastArrayItem: - 'app/models/status.rb' - 'app/services/batched_remove_status_service.rb' - 'app/services/notify_service.rb' - - 'db/migrate/20181024224956_migrate_account_conversations.rb' # This cop supports unsafe autocorrection (--autocorrect-all). Style/HashTransformValues: @@ -378,22 +196,6 @@ Style/IfUnlessModifier: - 'config/initializers/devise.rb' - 'config/initializers/ffmpeg.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: InverseMethods, InverseBlocks. -Style/InverseMethods: - Exclude: - - 'app/models/custom_filter.rb' - - 'app/services/update_account_service.rb' - - 'spec/controllers/activitypub/replies_controller_spec.rb' - -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: line_count_dependent, lambda, literal -Style/Lambda: - Exclude: - - 'config/initializers/simple_form.rb' - - 'config/routes.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Style/MapToHash: Exclude: @@ -458,15 +260,6 @@ Style/RedundantFetchBlock: - 'config/initializers/paperclip.rb' - 'config/puma.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowMultipleReturnValues. -Style/RedundantReturn: - Exclude: - - 'app/controllers/api/v1/directories_controller.rb' - - 'app/controllers/auth/confirmations_controller.rb' - - 'app/lib/ostatus/tag_manager.rb' - - 'app/models/form/import.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength. # AllowedMethods: present?, blank?, presence, try, try! @@ -487,11 +280,6 @@ Style/SingleArgumentDig: Exclude: - 'lib/webpacker/manifest_extensions.rb' -# This cop supports safe autocorrection (--autocorrect). -Style/StderrPuts: - Exclude: - - 'config/boot.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Mode. Style/StringConcatenation: @@ -510,13 +298,6 @@ Style/StringLiterals: - 'config/initializers/webauthn.rb' - 'config/routes.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments. -# AllowedMethods: define_method, mail, respond_to -Style/SymbolProc: - Exclude: - - 'config/initializers/3_omniauth.rb' - # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, AllowSafeAssignment. # SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex @@ -540,8 +321,8 @@ Style/TrailingCommaInHashLiteral: - 'config/environments/test.rb' # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle, MinSize, WordRegex. +# Configuration parameters: WordRegex. # SupportedStyles: percent, brackets Style/WordArray: - Exclude: - - 'app/helpers/languages_helper.rb' + EnforcedStyle: percent + MinSize: 3 diff --git a/.ruby-version b/.ruby-version index be94e6f53db6b3..b347b11eac8ae6 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.2.2 +3.2.3 diff --git a/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch b/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch deleted file mode 100644 index 30d5db27391e24..00000000000000 --- a/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/dist/index.js b/dist/index.js -index 57e375592d984e9a429bcd9f800fa2d15cd662e4..0c47d96df3608e23adfd77d887a8f72abbd501c0 100644 ---- a/dist/index.js -+++ b/dist/index.js -@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", { - }); - exports.default = void 0; - --var _crypto = _interopRequireDefault(require("crypto")); -+var _createHash = _interopRequireDefault(require("webpack/lib/util/createHash")); - - var _path = _interopRequireDefault(require("path")); - -@@ -227,7 +227,7 @@ class CompressionPlugin { - originalAlgorithm: this.options.algorithm, - compressionOptions: this.options.compressionOptions, - name, -- contentHash: _crypto.default.createHash("md4").update(input).digest("hex") -+ contentHash: _createHash.default("md4").update(input).digest("hex") - }; - } else { - cacheData.name = (0, _serializeJavascript.default)({ diff --git a/Dockerfile b/Dockerfile index 4d5bd57f1180e3..119c266b890da9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,15 +7,15 @@ ARG TARGETPLATFORM=${TARGETPLATFORM} ARG BUILDPLATFORM=${BUILDPLATFORM} -# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.2.2"] -ARG RUBY_VERSION="3.2.2" +# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.2.3"] +ARG RUBY_VERSION="3.2.3" # # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] ARG NODE_MAJOR_VERSION="20" # Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] ARG DEBIAN_VERSION="bookworm" # Node image to use for base image based on combined variables (ex: 20-bookworm-slim) FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node -# Ruby image to use for base image based on combined variables (ex: 3.2.2-slim-bookworm) +# Ruby image to use for base image based on combined variables (ex: 3.2.3-slim-bookworm) FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby # Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA @@ -103,6 +103,7 @@ RUN \ procps \ tini \ tzdata \ + wget \ ; \ # Patch Ruby to use jemalloc patchelf --add-needed libjemalloc.so.2 /usr/local/bin/ruby; \ diff --git a/FEDERATION.md b/FEDERATION.md index e3721d7241e033..2819fa935aa7c5 100644 --- a/FEDERATION.md +++ b/FEDERATION.md @@ -1,19 +1,35 @@ -## ActivityPub federation in Mastodon +# Federation + +## Supported federation protocols and standards + +- [ActivityPub](https://www.w3.org/TR/activitypub/) (Server-to-Server) +- [WebFinger](https://webfinger.net/) +- [Http Signatures](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures) +- [NodeInfo](https://nodeinfo.diaspora.software/) + +## Supported FEPs + +- [FEP-67ff: FEDERATION.md](https://codeberg.org/fediverse/fep/src/branch/main/fep/67ff/fep-67ff.md) +- [FEP-f1d5: NodeInfo in Fediverse Software](https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md) +- [FEP-8fcf: Followers collection synchronization across servers](https://codeberg.org/fediverse/fep/src/branch/main/fep/8fcf/fep-8fcf.md) +- [FEP-5feb: Search indexing consent for actors](https://codeberg.org/fediverse/fep/src/branch/main/fep/5feb/fep-5feb.md) + +## ActivityPub in Mastodon Mastodon largely follows the ActivityPub server-to-server specification but it makes uses of some non-standard extensions, some of which are required for interacting with Mastodon at all. -Supported vocabulary: https://docs.joinmastodon.org/spec/activitypub/ +- [Supported ActivityPub vocabulary](https://docs.joinmastodon.org/spec/activitypub/) ### Required extensions -#### Webfinger +#### WebFinger In Mastodon, users are identified by a `username` and `domain` pair (e.g., `Gargron@mastodon.social`). This is used both for discovery and for unambiguously mentioning users across the fediverse. Furthermore, this is part of Mastodon's database design from its very beginnings. As a result, Mastodon requires that each ActivityPub actor uniquely maps back to an `acct:` URI that can be resolved via WebFinger. -More information and examples are available at: https://docs.joinmastodon.org/spec/webfinger/ +- [WebFinger information and examples](https://docs.joinmastodon.org/spec/webfinger/) #### HTTP Signatures @@ -21,11 +37,13 @@ In order to authenticate activities, Mastodon relies on HTTP Signatures, signing Mastodon requires all `POST` requests to be signed, and MAY require `GET` requests to be signed, depending on the configuration of the Mastodon server. -More information on HTTP Signatures, as well as examples, can be found here: https://docs.joinmastodon.org/spec/security/#http +- [HTTP Signatures information and examples](https://docs.joinmastodon.org/spec/security/#http) ### Optional extensions -- Linked-Data Signatures: https://docs.joinmastodon.org/spec/security/#ld -- Bearcaps: https://docs.joinmastodon.org/spec/bearcaps/ -- Followers collection synchronization: https://codeberg.org/fediverse/fep/src/branch/main/fep/8fcf/fep-8fcf.md -- Search indexing consent for actors: https://codeberg.org/fediverse/fep/src/branch/main/fep/5feb/fep-5feb.md +- [Linked-Data Signatures](https://docs.joinmastodon.org/spec/security/#ld) +- [Bearcaps](https://docs.joinmastodon.org/spec/bearcaps/) + +### Additional documentation + +- [Mastodon documentation](https://docs.joinmastodon.org/) diff --git a/Gemfile b/Gemfile index cfcbcc0d3c4f37..2d4e504ac7d438 100644 --- a/Gemfile +++ b/Gemfile @@ -39,15 +39,14 @@ end gem 'net-ldap', '~> 0.18' -# TODO: Point back at released omniauth-cas gem when PR merged -# https://github.com/dlindahl/omniauth-cas/pull/68 -gem 'omniauth-cas', github: 'stanhu/omniauth-cas', ref: '4211e6d05941b4a981f9a36b49ec166cecd0e271' +gem 'omniauth-cas', '~> 3.0.0.beta.1' gem 'omniauth-saml', '~> 2.0' gem 'omniauth_openid_connect', '~> 0.6.1' gem 'omniauth', '~> 2.0' gem 'omniauth-rails_csrf_protection', '~> 1.0' gem 'color_diff', '~> 0.1' +gem 'csv', '~> 3.2' gem 'discard', '~> 1.2' gem 'doorkeeper', '~> 5.6' gem 'ed25519', '~> 1.3' @@ -75,7 +74,6 @@ gem 'premailer-rails' gem 'rack-attack', '~> 6.6' gem 'rack-cors', '~> 2.0', require: 'rack/cors' gem 'rails-i18n', '~> 7.0' -gem 'rails-settings-cached', '~> 0.6', git: 'https://github.com/mastodon/rails-settings-cached.git', branch: 'v0.6.6-aliases-true' gem 'redcarpet', '~> 3.6' gem 'redis', '~> 4.5', require: ['redis', 'redis/connection/hiredis'] gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' @@ -90,7 +88,7 @@ gem 'sidekiq-bulk', '~> 0.2.0' gem 'simple-navigation', '~> 4.4' gem 'simple_form', '~> 5.2' gem 'stoplight', '~> 3.0.1' -gem 'strong_migrations', '1.6.4' +gem 'strong_migrations', '1.7.0' gem 'tty-prompt', '~> 0.23', require: false gem 'twitter-text', '~> 3.1.0' gem 'tzinfo-data', '~> 1.2023' diff --git a/Gemfile.lock b/Gemfile.lock index 7a7fdb01c4fc84..93931d87245f19 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -18,56 +18,38 @@ GIT sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) -GIT - remote: https://github.com/mastodon/rails-settings-cached.git - revision: 86328ef0bd04ce21cc0504ff5e334591e8c2ccab - branch: v0.6.6-aliases-true - specs: - rails-settings-cached (0.6.6) - rails (>= 4.2.0) - -GIT - remote: https://github.com/stanhu/omniauth-cas.git - revision: 4211e6d05941b4a981f9a36b49ec166cecd0e271 - ref: 4211e6d05941b4a981f9a36b49ec166cecd0e271 - specs: - omniauth-cas (2.0.0) - addressable (~> 2.3) - nokogiri (~> 1.5) - omniauth (>= 1.2, < 3) - GEM remote: https://rubygems.org/ specs: - actioncable (7.1.2) - actionpack (= 7.1.2) - activesupport (= 7.1.2) + actioncable (7.1.3) + actionpack (= 7.1.3) + activesupport (= 7.1.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.2) - actionpack (= 7.1.2) - activejob (= 7.1.2) - activerecord (= 7.1.2) - activestorage (= 7.1.2) - activesupport (= 7.1.2) + actionmailbox (7.1.3) + actionpack (= 7.1.3) + activejob (= 7.1.3) + activerecord (= 7.1.3) + activestorage (= 7.1.3) + activesupport (= 7.1.3) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.1.2) - actionpack (= 7.1.2) - actionview (= 7.1.2) - activejob (= 7.1.2) - activesupport (= 7.1.2) + actionmailer (7.1.3) + actionpack (= 7.1.3) + actionview (= 7.1.3) + activejob (= 7.1.3) + activesupport (= 7.1.3) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.2) - actionpack (7.1.2) - actionview (= 7.1.2) - activesupport (= 7.1.2) + actionpack (7.1.3) + actionview (= 7.1.3) + activesupport (= 7.1.3) nokogiri (>= 1.8.5) racc rack (>= 2.2.4) @@ -75,15 +57,15 @@ GEM rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.2) - actionpack (= 7.1.2) - activerecord (= 7.1.2) - activestorage (= 7.1.2) - activesupport (= 7.1.2) + actiontext (7.1.3) + actionpack (= 7.1.3) + activerecord (= 7.1.3) + activestorage (= 7.1.3) + activesupport (= 7.1.3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.2) - activesupport (= 7.1.2) + actionview (7.1.3) + activesupport (= 7.1.3) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -93,22 +75,22 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.1.2) - activesupport (= 7.1.2) + activejob (7.1.3) + activesupport (= 7.1.3) globalid (>= 0.3.6) - activemodel (7.1.2) - activesupport (= 7.1.2) - activerecord (7.1.2) - activemodel (= 7.1.2) - activesupport (= 7.1.2) + activemodel (7.1.3) + activesupport (= 7.1.3) + activerecord (7.1.3) + activemodel (= 7.1.3) + activesupport (= 7.1.3) timeout (>= 0.4.0) - activestorage (7.1.2) - actionpack (= 7.1.2) - activejob (= 7.1.2) - activerecord (= 7.1.2) - activesupport (= 7.1.2) + activestorage (7.1.3) + actionpack (= 7.1.3) + activejob (= 7.1.3) + activerecord (= 7.1.3) + activesupport (= 7.1.3) marcel (~> 1.0) - activesupport (7.1.2) + activesupport (7.1.3) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -118,7 +100,7 @@ GEM minitest (>= 5.1) mutex_m tzinfo (~> 2.0) - addressable (2.8.5) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) aes_key_wrap (1.1.0) android_key_attestation (0.3.0) @@ -131,20 +113,20 @@ GEM attr_required (1.0.1) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.857.0) - aws-sdk-core (3.188.0) - aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (1.873.0) + aws-sdk-core (3.190.1) + aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.5) + aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.73.0) + aws-sdk-kms (1.75.0) aws-sdk-core (~> 3, >= 3.188.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.140.0) - aws-sdk-core (~> 3, >= 3.188.0) + aws-sdk-s3 (1.142.0) + aws-sdk-core (~> 3, >= 3.189.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.6) - aws-sigv4 (1.7.0) + aws-sigv4 (~> 1.8) + aws-sigv4 (1.8.0) aws-eventstream (~> 1, >= 1.0.2) azure-storage-blob (2.0.3) azure-storage-common (~> 2.0) @@ -168,14 +150,15 @@ GEM erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.4) + bigdecimal (3.1.6) bindata (2.4.15) binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) blurhash (0.1.7) - bootsnap (1.17.0) + bootsnap (1.17.1) msgpack (~> 1.2) - brakeman (6.1.0) + brakeman (6.1.1) + racc browser (5.3.1) brpoplpush-redis_script (0.1.3) concurrent-ruby (~> 1.0, >= 1.0.5) @@ -197,7 +180,7 @@ GEM activesupport cbor (0.5.9.6) charlock_holmes (0.7.7) - chewy (7.3.5) + chewy (7.4.0) activesupport (>= 5.2) elasticsearch (>= 7.12.0, < 7.14.0) elasticsearch-dsl @@ -205,7 +188,7 @@ GEM climate_control (0.2.0) cocoon (1.2.15) color_diff (0.1) - concurrent-ruby (1.2.2) + concurrent-ruby (1.2.3) connection_pool (2.4.1) cose (1.3.0) cbor (~> 0.5.9) @@ -215,14 +198,15 @@ GEM crass (1.0.6) css_parser (1.14.0) addressable + csv (3.2.8) database_cleaner-active_record (2.1.0) activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) date (3.3.4) - debug (1.8.0) - irb (>= 1.5.0) - reline (>= 0.3.1) + debug (1.9.1) + irb (~> 1.10) + reline (>= 0.3.8) debug_inspector (1.1.0) devise (4.9.3) bcrypt (~> 3.0) @@ -271,9 +255,9 @@ GEM erubi (1.12.0) et-orbi (1.2.7) tzinfo - excon (0.104.0) + excon (0.109.0) fabrication (2.31.0) - faker (3.2.2) + faker (3.2.3) i18n (>= 1.8.11, < 2) faraday (1.10.3) faraday-em_http (~> 1.0) @@ -301,12 +285,12 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fast_blank (1.0.1) - fastimage (2.2.7) + fastimage (2.3.0) ffi (1.15.5) ffi-compiler (1.0.1) ffi (>= 1.0.0) rake - fog-core (2.3.0) + fog-core (2.4.0) builder excon (~> 0.71) formatador (>= 0.2, < 2.0) @@ -326,7 +310,7 @@ GEM ruby-progressbar (~> 1.4) globalid (1.2.1) activesupport (>= 6.1) - haml (6.2.0) + haml (6.3.0) temple (>= 0.8.2) thor tilt @@ -335,8 +319,8 @@ GEM activesupport (>= 5.1) haml (>= 4.0.6) railties (>= 5.1) - haml_lint (0.51.0) - haml (>= 4.0) + haml_lint (0.53.0) + haml (>= 5.0) parallel (~> 1.10) rainbow rubocop (>= 1.0) @@ -376,12 +360,12 @@ GEM rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) idn-ruby (0.1.5) - io-console (0.6.0) - irb (1.10.1) + io-console (0.7.1) + irb (1.11.1) rdoc - reline (>= 0.3.8) + reline (>= 0.4.2) jmespath (1.6.2) - json (2.7.0) + json (2.7.1) json-canonicalization (1.0.0) json-jwt (1.15.3) activesupport (>= 4.2) @@ -414,12 +398,12 @@ GEM activerecord kaminari-core (= 1.2.2) kaminari-core (1.2.2) - kt-paperclip (7.2.1) + kt-paperclip (7.2.2) activemodel (>= 4.2.0) activesupport (>= 4.2.0) marcel (~> 1.0.1) mime-types - terrapin (~> 0.6.0) + terrapin (>= 0.6.0, < 2.0) language_server-protocol (3.17.0.3) launchy (2.5.2) addressable (~> 2.8) @@ -456,9 +440,9 @@ GEM azure-storage-blob (~> 2.0.1) hashie (~> 5.0) memory_profiler (1.0.1) - mime-types (3.5.1) + mime-types (3.5.2) mime-types-data (~> 3.2015) - mime-types-data (3.2023.1003) + mime-types-data (3.2023.1205) mini_mime (1.1.5) mini_portile2 (2.8.5) minitest (5.20.0) @@ -466,30 +450,34 @@ GEM multi_json (1.15.0) multipart-post (2.3.0) mutex_m (0.2.0) - net-http (0.4.0) + net-http (0.4.1) uri net-http-persistent (4.0.2) connection_pool (~> 2.2) - net-imap (0.4.4) + net-imap (0.4.9.1) date net-protocol - net-ldap (0.18.0) + net-ldap (0.19.0) net-pop (0.1.2) net-protocol net-protocol (0.2.2) timeout - net-smtp (0.4.0) + net-smtp (0.4.0.1) net-protocol nio4r (2.5.9) - nokogiri (1.15.5) + nokogiri (1.16.0) mini_portile2 (~> 2.8.2) racc (~> 1.4) - oj (3.16.2) - bigdecimal (~> 3.1) + oj (3.16.3) + bigdecimal (>= 3.0) omniauth (2.1.1) hashie (>= 3.4.6) rack (>= 2.2.3) rack-protection + omniauth-cas (3.0.0.beta.1) + addressable (~> 2.8) + nokogiri (~> 1.12) + omniauth (~> 2.1) omniauth-rails_csrf_protection (1.0.1) actionpack (>= 4.2) omniauth (~> 2.0) @@ -510,12 +498,12 @@ GEM validate_email validate_url webfinger (~> 1.2) - openssl (3.1.0) + openssl (3.2.0) openssl-signature_algorithm (1.3.0) openssl (> 2.0) orm_adapter (0.5.0) ox (2.14.17) - parallel (1.23.0) + parallel (1.24.0) parser (3.2.2.4) ast (~> 2.4.1) racc @@ -540,10 +528,10 @@ GEM activesupport (>= 7.0.0) rack railties (>= 7.0.0) - psych (5.1.1.1) + psych (5.1.2) stringio public_suffix (5.0.4) - puma (6.4.0) + puma (6.4.2) nio4r (~> 2.0) pundit (2.3.1) activesupport (>= 3.0.0) @@ -564,27 +552,27 @@ GEM rack rack-proxy (0.7.6) rack - rack-session (1.0.1) + rack-session (1.0.2) rack (< 3) rack-test (2.1.0) rack (>= 1.3) rackup (1.0.0) rack (< 3) webrick - rails (7.1.2) - actioncable (= 7.1.2) - actionmailbox (= 7.1.2) - actionmailer (= 7.1.2) - actionpack (= 7.1.2) - actiontext (= 7.1.2) - actionview (= 7.1.2) - activejob (= 7.1.2) - activemodel (= 7.1.2) - activerecord (= 7.1.2) - activestorage (= 7.1.2) - activesupport (= 7.1.2) + rails (7.1.3) + actioncable (= 7.1.3) + actionmailbox (= 7.1.3) + actionmailer (= 7.1.3) + actionpack (= 7.1.3) + actiontext (= 7.1.3) + actionview (= 7.1.3) + activejob (= 7.1.3) + activemodel (= 7.1.3) + activerecord (= 7.1.3) + activestorage (= 7.1.3) + activesupport (= 7.1.3) bundler (>= 1.15.0) - railties (= 7.1.2) + railties (= 7.1.3) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -599,9 +587,9 @@ GEM rails-i18n (7.0.8) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.2) - actionpack (= 7.1.2) - activesupport (= 7.1.2) + railties (7.1.3) + actionpack (= 7.1.3) + activesupport (= 7.1.3) irb rackup (>= 1.0.0) rake (>= 12.2) @@ -612,9 +600,9 @@ GEM rdf (3.3.1) bcp47_spec (~> 0.2) link_header (~> 0.0, >= 0.0.8) - rdf-normalize (0.6.1) - rdf (~> 3.2) - rdoc (6.6.1) + rdf-normalize (0.7.0) + rdf (~> 3.3) + rdoc (6.6.2) psych (>= 4.0.0) redcarpet (3.6.0) redis (4.8.1) @@ -622,8 +610,8 @@ GEM redis (>= 4) redlock (1.3.2) redis (>= 3.0.0, < 6.0) - regexp_parser (2.8.2) - reline (0.4.1) + regexp_parser (2.8.3) + reline (0.4.2) io-console (~> 0.5) request_store (1.5.1) rack (>= 1.4) @@ -662,7 +650,7 @@ GEM rspec-mocks (~> 3.0) sidekiq (>= 5, < 8) rspec-support (3.12.1) - rubocop (1.58.0) + rubocop (1.59.0) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -675,23 +663,23 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.30.0) parser (>= 3.2.1.0) - rubocop-capybara (2.19.0) + rubocop-capybara (2.20.0) rubocop (~> 1.41) - rubocop-factory_bot (2.24.0) + rubocop-factory_bot (2.25.0) rubocop (~> 1.33) - rubocop-performance (1.19.1) - rubocop (>= 1.7.0, < 2.0) - rubocop-ast (>= 0.4.0) - rubocop-rails (2.22.2) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rails (2.23.1) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) rubocop-ast (>= 1.30.0, < 2.0) - rubocop-rspec (2.25.0) + rubocop-rspec (2.26.1) rubocop (~> 1.40) rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) - ruby-prof (1.6.3) + ruby-prof (1.7.0) ruby-progressbar (1.13.0) ruby-saml (1.15.0) nokogiri (>= 1.13.10) @@ -723,7 +711,7 @@ GEM rufus-scheduler (~> 3.2) sidekiq (>= 6, < 8) tilt (>= 1.4.0) - sidekiq-unique-jobs (7.1.30) + sidekiq-unique-jobs (7.1.31) brpoplpush-redis_script (> 0.1.1, <= 2.0.0) concurrent-ruby (~> 1.0, >= 1.0.5) redis (< 5.0) @@ -742,12 +730,12 @@ GEM simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) smart_properties (1.17.0) - stackprof (0.2.25) + stackprof (0.2.26) statsd-ruby (1.5.0) stoplight (3.0.2) redlock (~> 1.0) stringio (3.1.0) - strong_migrations (1.6.4) + strong_migrations (1.7.0) activerecord (>= 5.2) swd (1.3.0) activesupport (>= 3) @@ -759,7 +747,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) terrapin (0.6.0) climate_control (>= 0.0.3, < 1.0) - test-prof (1.3.0) + test-prof (1.3.1) thor (1.3.0) tilt (2.3.0) timeout (0.4.1) @@ -782,7 +770,7 @@ GEM unf (~> 0.1.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - tzinfo-data (1.2023.3) + tzinfo-data (1.2023.4) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext @@ -797,7 +785,7 @@ GEM public_suffix warden (1.2.9) rack (>= 2.0.9) - webauthn (3.0.0) + webauthn (3.1.0) android_key_attestation (~> 0.3.0) awrence (~> 1.1) bindata (~> 2.4) @@ -852,6 +840,7 @@ DEPENDENCIES color_diff (~> 0.1) concurrent-ruby connection_pool + csv (~> 3.2) database_cleaner-active_record debug (~> 1.8) devise (~> 4.9) @@ -899,7 +888,7 @@ DEPENDENCIES nsa! oj (~> 3.14) omniauth (~> 2.0) - omniauth-cas! + omniauth-cas (~> 3.0.0.beta.1) omniauth-rails_csrf_protection (~> 1.0) omniauth-saml (~> 2.0) omniauth_openid_connect (~> 0.6.1) @@ -921,7 +910,6 @@ DEPENDENCIES rails (~> 7.1.1) rails-controller-testing (~> 1.0) rails-i18n (~> 7.0) - rails-settings-cached (~> 0.6)! rdf-normalize (~> 0.5) redcarpet (~> 3.6) redis (~> 4.5) @@ -951,7 +939,7 @@ DEPENDENCIES simplecov-lcov (~> 0.8) stackprof stoplight (~> 3.0.1) - strong_migrations (= 1.6.4) + strong_migrations (= 1.7.0) test-prof thor (~> 1.2) tty-prompt (~> 0.23) @@ -967,4 +955,4 @@ RUBY VERSION ruby 3.2.2p53 BUNDLED WITH - 2.4.20 + 2.5.4 diff --git a/README.md b/README.md index e45b296b314574..0f3ced3bdb79ee 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ You can open issues for bugs you've found or features you think are missing. You ## License -Copyright (C) 2016-2023 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md)) +Copyright (C) 2016-2024 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md)) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. diff --git a/SECURITY.md b/SECURITY.md index 954ff73a247425..81472b01b4306f 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -13,10 +13,8 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through ## Supported Versions -| Version | Supported | -| ------- | ---------------- | -| 4.2.x | Yes | -| 4.1.x | Yes | -| 4.0.x | No | -| 3.5.x | Until 2023-12-31 | -| < 3.5 | No | +| Version | Supported | +| ------- | --------- | +| 4.2.x | Yes | +| 4.1.x | Yes | +| < 4.1 | No | diff --git a/app/controllers/activitypub/followers_synchronizations_controller.rb b/app/controllers/activitypub/followers_synchronizations_controller.rb index 976caa34457df7..d2942104e5056f 100644 --- a/app/controllers/activitypub/followers_synchronizations_controller.rb +++ b/app/controllers/activitypub/followers_synchronizations_controller.rb @@ -24,7 +24,7 @@ def uri_prefix end def set_items - @items = @account.followers.where(Account.arel_table[:uri].matches("#{Account.sanitize_sql_like(uri_prefix)}/%", false, true)).or(@account.followers.where(uri: uri_prefix)).pluck(:uri) + @items = @account.followers.matches_uri_prefix(uri_prefix).pluck(:uri) end def collection_presenter diff --git a/app/controllers/admin/action_logs_controller.rb b/app/controllers/admin/action_logs_controller.rb index 37a00ad225a5f8..8b8e83fde77c8a 100644 --- a/app/controllers/admin/action_logs_controller.rb +++ b/app/controllers/admin/action_logs_controller.rb @@ -6,7 +6,7 @@ class ActionLogsController < BaseController def index authorize :audit_log, :index? - @auditable_accounts = Account.where(id: Admin::ActionLog.select('distinct account_id')).select(:id, :username) + @auditable_accounts = Account.auditable.select(:id, :username) end private diff --git a/app/controllers/admin/confirmations_controller.rb b/app/controllers/admin/confirmations_controller.rb index 6f4e42679722e2..7ccf5c9012de7c 100644 --- a/app/controllers/admin/confirmations_controller.rb +++ b/app/controllers/admin/confirmations_controller.rb @@ -7,7 +7,7 @@ class ConfirmationsController < BaseController def create authorize @user, :confirm? - @user.confirm! + @user.mark_email_as_confirmed! log_action :confirm, @user redirect_to admin_accounts_path end diff --git a/app/controllers/admin/email_domain_blocks_controller.rb b/app/controllers/admin/email_domain_blocks_controller.rb index 4a3228ec300466..ff754bc0b47033 100644 --- a/app/controllers/admin/email_domain_blocks_controller.rb +++ b/app/controllers/admin/email_domain_blocks_controller.rb @@ -40,7 +40,7 @@ def create (@email_domain_block.other_domains || []).uniq.each do |domain| next if EmailDomainBlock.where(domain: domain).exists? - other_email_domain_block = EmailDomainBlock.create!(domain: domain, parent: @email_domain_block) + other_email_domain_block = EmailDomainBlock.create!(domain: domain, allow_with_approval: @email_domain_block.allow_with_approval, parent: @email_domain_block) log_action :create, other_email_domain_block end end @@ -65,7 +65,7 @@ def set_resolved_records end def resource_params - params.require(:email_domain_block).permit(:domain, other_domains: []) + params.require(:email_domain_block).permit(:domain, :allow_with_approval, other_domains: []) end def form_email_domain_block_batch_params diff --git a/app/controllers/admin/export_domain_blocks_controller.rb b/app/controllers/admin/export_domain_blocks_controller.rb index 433b8a158787a7..ffc4478172634d 100644 --- a/app/controllers/admin/export_domain_blocks_controller.rb +++ b/app/controllers/admin/export_domain_blocks_controller.rb @@ -68,7 +68,7 @@ def export_headers def export_data CSV.generate(headers: export_headers, write_headers: true) do |content| - DomainBlock.with_limitations.each do |instance| + DomainBlock.with_limitations.order(id: :asc).each do |instance| content << [instance.domain, instance.severity, instance.reject_media, instance.reject_reports, instance.public_comment, instance.obfuscate] end end diff --git a/app/controllers/admin/follow_recommendations_controller.rb b/app/controllers/admin/follow_recommendations_controller.rb index 841e3cc7fbf86a..a54e41bd8c1c13 100644 --- a/app/controllers/admin/follow_recommendations_controller.rb +++ b/app/controllers/admin/follow_recommendations_controller.rb @@ -8,7 +8,7 @@ def show authorize :follow_recommendation, :show? @form = Form::AccountBatch.new - @accounts = filtered_follow_recommendations + @accounts = filtered_follow_recommendations.page(params[:page]) end def update diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index b3c60fcaf4b1e5..98fa1897ef0f6e 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -108,6 +108,10 @@ def require_not_suspended! render json: { error: 'Your login is currently disabled' }, status: 403 if current_user&.account&.unavailable? end + def require_valid_pagination_options! + render json: { error: 'Pagination values for `offset` and `limit` must be positive' }, status: 400 if pagination_options_invalid? + end + def require_user! if !current_user render json: { error: 'This method requires an authenticated user' }, status: 422 @@ -136,6 +140,10 @@ def disallow_unauthenticated_api_access? private + def pagination_options_invalid? + params.slice(:limit, :offset).values.map(&:to_i).any?(&:negative?) + end + def respond_with_error(code) render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code end diff --git a/app/controllers/api/v1/accounts/follower_accounts_controller.rb b/app/controllers/api/v1/accounts/follower_accounts_controller.rb index 21b1095f1845f8..f60181f1eb6481 100644 --- a/app/controllers/api/v1/accounts/follower_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/follower_accounts_controller.rb @@ -21,7 +21,7 @@ def load_accounts return [] if hide_results? scope = default_accounts - scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil? || current_account.id == @account.id + scope = scope.not_excluded_by_account(current_account) unless current_account.nil? || current_account.id == @account.id scope.merge(paginated_follows).to_a end @@ -30,7 +30,7 @@ def hide_results? end def default_accounts - Account.includes(:active_relationships, :account_stat).references(:active_relationships) + Account.includes(:active_relationships, :account_stat, :user).references(:active_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/accounts/following_accounts_controller.rb b/app/controllers/api/v1/accounts/following_accounts_controller.rb index 1db521f79cbbd5..3ab8c1efd6971a 100644 --- a/app/controllers/api/v1/accounts/following_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/following_accounts_controller.rb @@ -21,7 +21,7 @@ def load_accounts return [] if hide_results? scope = default_accounts - scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil? || current_account.id == @account.id + scope = scope.not_excluded_by_account(current_account) unless current_account.nil? || current_account.id == @account.id scope.merge(paginated_follows).to_a end @@ -30,7 +30,7 @@ def hide_results? end def default_accounts - Account.includes(:passive_relationships, :account_stat).references(:passive_relationships) + Account.includes(:passive_relationships, :account_stat, :user).references(:passive_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/accounts/notes_controller.rb b/app/controllers/api/v1/accounts/notes_controller.rb index 032e807d11ff94..6d115631a2b2d8 100644 --- a/app/controllers/api/v1/accounts/notes_controller.rb +++ b/app/controllers/api/v1/accounts/notes_controller.rb @@ -25,6 +25,6 @@ def set_account end def relationships_presenter - AccountRelationshipsPresenter.new([@account.id], current_user.account_id) + AccountRelationshipsPresenter.new([@account], current_user.account_id) end end diff --git a/app/controllers/api/v1/accounts/pins_controller.rb b/app/controllers/api/v1/accounts/pins_controller.rb index 73f845c6143a04..0eb13c048ce759 100644 --- a/app/controllers/api/v1/accounts/pins_controller.rb +++ b/app/controllers/api/v1/accounts/pins_controller.rb @@ -25,6 +25,6 @@ def set_account end def relationships_presenter - AccountRelationshipsPresenter.new([@account.id], current_user.account_id) + AccountRelationshipsPresenter.new([@account], current_user.account_id) end end diff --git a/app/controllers/api/v1/accounts/relationships_controller.rb b/app/controllers/api/v1/accounts/relationships_controller.rb index e5ae5b007ba937..d43832177a54bb 100644 --- a/app/controllers/api/v1/accounts/relationships_controller.rb +++ b/app/controllers/api/v1/accounts/relationships_controller.rb @@ -5,7 +5,7 @@ class Api::V1::Accounts::RelationshipsController < Api::BaseController before_action :require_user! def index - @accounts = Account.where(id: account_ids).select('id') + @accounts = Account.where(id: account_ids).select(:id, :domain) @accounts.merge!(Account.without_suspended) unless truthy_param?(:with_suspended) render json: @accounts, each_serializer: REST::RelationshipSerializer, relationships: relationships end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index be251b42594870..23fc85b4754268 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -88,7 +88,7 @@ def check_account_confirmation end def relationships(**options) - AccountRelationshipsPresenter.new([@account.id], current_user.account_id, **options) + AccountRelationshipsPresenter.new([@account], current_user.account_id, **options) end def account_params diff --git a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb index 850eda62241655..df54b9f0a404d1 100644 --- a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb @@ -55,7 +55,7 @@ def set_email_domain_block end def resource_params - params.permit(:domain) + params.permit(:domain, :allow_with_approval) end def insert_pagination_headers diff --git a/app/controllers/api/v1/annual_reports_controller.rb b/app/controllers/api/v1/annual_reports_controller.rb new file mode 100644 index 00000000000000..9bc8e68ac2430b --- /dev/null +++ b/app/controllers/api/v1/annual_reports_controller.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class Api::V1::AnnualReportsController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index + before_action :require_user! + before_action :set_annual_report, except: :index + + def index + with_read_replica do + @presenter = AnnualReportsPresenter.new(GeneratedAnnualReport.where(account_id: current_account.id).pending) + @relationships = StatusRelationshipsPresenter.new(@presenter.statuses, current_account.id) + end + + render json: @presenter, + serializer: REST::AnnualReportsSerializer, + relationships: @relationships + end + + def read + @annual_report.view! + render_empty + end + + private + + def set_annual_report + @annual_report = GeneratedAnnualReport.find_by!(account_id: current_account.id, year: params[:id]) + end +end diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index 06a8bfa8912fb9..0934622f88446a 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -17,7 +17,7 @@ def load_accounts end def paginated_blocks - @paginated_blocks ||= Block.eager_load(target_account: :account_stat) + @paginated_blocks ||= Block.eager_load(target_account: [:account_stat, :user]) .joins(:target_account) .merge(Account.without_suspended) .where(account: current_account) diff --git a/app/controllers/api/v1/directories_controller.rb b/app/controllers/api/v1/directories_controller.rb index 35c504a7ff0965..6c540404ea9235 100644 --- a/app/controllers/api/v1/directories_controller.rb +++ b/app/controllers/api/v1/directories_controller.rb @@ -12,7 +12,7 @@ def show private def require_enabled! - return not_found unless Setting.profile_directory + not_found unless Setting.profile_directory end def set_accounts @@ -27,7 +27,7 @@ def accounts_scope scope.merge!(local_account_scope) if local_accounts? scope.merge!(account_exclusion_scope) if current_account scope.merge!(account_domain_block_scope) if current_account && !local_accounts? - end + end.includes(:account_stat, user: :role) end def local_accounts? diff --git a/app/controllers/api/v1/endorsements_controller.rb b/app/controllers/api/v1/endorsements_controller.rb index 46e3fcd647ff1b..2216a9860d9efb 100644 --- a/app/controllers/api/v1/endorsements_controller.rb +++ b/app/controllers/api/v1/endorsements_controller.rb @@ -25,7 +25,7 @@ def load_accounts end def endorsed_accounts - current_account.endorsed_accounts.includes(:account_stat).without_suspended + current_account.endorsed_accounts.includes(:account_stat, :user).without_suspended end def insert_pagination_headers diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index 7c197ce6ba3179..87f6df5f9466b2 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -25,11 +25,11 @@ def reject private def account - Account.find(params[:id]) + @account ||= Account.find(params[:id]) end def relationships(**options) - AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, **options) + AccountRelationshipsPresenter.new([account], current_user.account_id, **options) end def load_accounts @@ -37,7 +37,7 @@ def load_accounts end def default_accounts - Account.without_suspended.includes(:follow_requests, :account_stat).references(:follow_requests) + Account.without_suspended.includes(:follow_requests, :account_stat, :user).references(:follow_requests) end def paginated_follow_requests diff --git a/app/controllers/api/v1/lists/accounts_controller.rb b/app/controllers/api/v1/lists/accounts_controller.rb index 8e12cb7b654818..0604ad60fc4635 100644 --- a/app/controllers/api/v1/lists/accounts_controller.rb +++ b/app/controllers/api/v1/lists/accounts_controller.rb @@ -37,9 +37,9 @@ def set_list def load_accounts if unlimited? - @list.accounts.without_suspended.includes(:account_stat).all + @list.accounts.without_suspended.includes(:account_stat, :user).all else - @list.accounts.without_suspended.includes(:account_stat).paginate_by_max_id(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:max_id], params[:since_id]) + @list.accounts.without_suspended.includes(:account_stat, :user).paginate_by_max_id(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:max_id], params[:since_id]) end end diff --git a/app/controllers/api/v1/markers_controller.rb b/app/controllers/api/v1/markers_controller.rb index f8dfba8a941bf6..8eaf7767df87e0 100644 --- a/app/controllers/api/v1/markers_controller.rb +++ b/app/controllers/api/v1/markers_controller.rb @@ -19,7 +19,7 @@ def create @markers = {} resource_params.each_pair do |timeline, timeline_params| - @markers[timeline] = current_user.markers.find_or_initialize_by(timeline: timeline) + @markers[timeline] = current_user.markers.find_or_create_by(timeline: timeline) @markers[timeline].update!(timeline_params) end end diff --git a/app/controllers/api/v1/mutes_controller.rb b/app/controllers/api/v1/mutes_controller.rb index 555485823c93bd..2fb685ac397a8d 100644 --- a/app/controllers/api/v1/mutes_controller.rb +++ b/app/controllers/api/v1/mutes_controller.rb @@ -17,7 +17,7 @@ def load_accounts end def paginated_mutes - @paginated_mutes ||= Mute.eager_load(:target_account) + @paginated_mutes ||= Mute.eager_load(target_account: [:account_stat, :user]) .joins(:target_account) .merge(Account.without_suspended) .where(account: current_account) diff --git a/app/controllers/api/v1/peers/search_controller.rb b/app/controllers/api/v1/peers/search_controller.rb index 0c503d9bc546fb..1780554c5d8bc0 100644 --- a/app/controllers/api/v1/peers/search_controller.rb +++ b/app/controllers/api/v1/peers/search_controller.rb @@ -27,7 +27,7 @@ def set_domains @domains = InstancesIndex.query(function_score: { query: { prefix: { - domain: TagManager.instance.normalize_domain(params[:q].strip), + domain: normalized_domain, }, }, @@ -37,11 +37,18 @@ def set_domains }, }).limit(10).pluck(:domain) else - domain = params[:q].strip - domain = TagManager.instance.normalize_domain(domain) - @domains = Instance.searchable.where(Instance.arel_table[:domain].matches("#{Instance.sanitize_sql_like(domain)}%", false, true)).limit(10).pluck(:domain) + domain = normalized_domain + @domains = Instance.searchable.domain_starts_with(domain).limit(10).pluck(:domain) end rescue Addressable::URI::InvalidURIError @domains = [] end + + def normalized_domain + TagManager.instance.normalize_domain(query_value) + end + + def query_value + params[:q].strip + end end diff --git a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb index 3cca246ce8dbe0..069ad37cb2092c 100644 --- a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb @@ -14,14 +14,14 @@ def index def load_accounts scope = default_accounts - scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil? + scope = scope.not_excluded_by_account(current_account) unless current_account.nil? scope.merge(paginated_favourites).to_a end def default_accounts Account .without_suspended - .includes(:favourites, :account_stat) + .includes(:favourites, :account_stat, :user) .references(:favourites) .where(favourites: { status_id: @status.id }) end diff --git a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb index dd3e60846b8a8d..b8a997518d5384 100644 --- a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb @@ -14,12 +14,12 @@ def index def load_accounts scope = default_accounts - scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil? + scope = scope.not_excluded_by_account(current_account) unless current_account.nil? scope.merge(paginated_statuses).to_a end def default_accounts - Account.without_suspended.includes(:statuses, :account_stat).references(:statuses) + Account.without_suspended.includes(:statuses, :account_stat, :user).references(:statuses) end def paginated_statuses diff --git a/app/controllers/api/v1/streaming_controller.rb b/app/controllers/api/v1/streaming_controller.rb index 0cdd00d62f7ef5..adb14676e12da0 100644 --- a/app/controllers/api/v1/streaming_controller.rb +++ b/app/controllers/api/v1/streaming_controller.rb @@ -2,7 +2,7 @@ class Api::V1::StreamingController < Api::BaseController def index - if Rails.configuration.x.streaming_api_base_url == request.host + if same_host? not_found else redirect_to streaming_api_url, status: 301, allow_other_host: true @@ -11,9 +11,16 @@ def index private + def same_host? + base_url = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url) + request.host == base_url.host && request.port == (base_url.port || 80) + end + def streaming_api_url Addressable::URI.parse(request.url).tap do |uri| - uri.host = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url).host + base_url = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url) + uri.host = base_url.host + uri.port = base_url.port end.to_s end end diff --git a/app/controllers/api/v1/suggestions_controller.rb b/app/controllers/api/v1/suggestions_controller.rb index 9737ae5cb620da..9ba1cef63cab75 100644 --- a/app/controllers/api/v1/suggestions_controller.rb +++ b/app/controllers/api/v1/suggestions_controller.rb @@ -3,22 +3,23 @@ class Api::V1::SuggestionsController < Api::BaseController include Authorization - before_action -> { doorkeeper_authorize! :read } + before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index before_action :require_user! + before_action :set_suggestions def index - suggestions = suggestions_source.get(current_account, limit: limit_param(DEFAULT_ACCOUNTS_LIMIT)) - render json: suggestions.map(&:account), each_serializer: REST::AccountSerializer + render json: @suggestions.get(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:offset].to_i).map(&:account), each_serializer: REST::AccountSerializer end def destroy - suggestions_source.remove(current_account, params[:id]) + @suggestions.remove(params[:id]) render_empty end private - def suggestions_source - AccountSuggestions::PastInteractionsSource.new + def set_suggestions + @suggestions = AccountSuggestions.new(current_account) end end diff --git a/app/controllers/api/v2/filters_controller.rb b/app/controllers/api/v2/filters_controller.rb index 2fcdeeae457202..09d4813f34b25c 100644 --- a/app/controllers/api/v2/filters_controller.rb +++ b/app/controllers/api/v2/filters_controller.rb @@ -35,7 +35,7 @@ def destroy private def set_filters - @filters = current_account.custom_filters.includes(:keywords) + @filters = current_account.custom_filters.includes(:keywords, :statuses) end def set_filter diff --git a/app/controllers/api/v2/search_controller.rb b/app/controllers/api/v2/search_controller.rb index 4339bee21e3aad..3cfc6e7919cc3f 100644 --- a/app/controllers/api/v2/search_controller.rb +++ b/app/controllers/api/v2/search_controller.rb @@ -12,6 +12,7 @@ class Api::V2::SearchController < Api::BaseController before_action :query_pagination_error, if: :pagination_requested? before_action :remote_resolve_error, if: :remote_resolve_requested? end + before_action :require_valid_pagination_options! def index @search = Search.new(search_results) diff --git a/app/controllers/api/v2/suggestions_controller.rb b/app/controllers/api/v2/suggestions_controller.rb index 35eb276c01fb7d..8516796e8600e6 100644 --- a/app/controllers/api/v2/suggestions_controller.rb +++ b/app/controllers/api/v2/suggestions_controller.rb @@ -3,17 +3,23 @@ class Api::V2::SuggestionsController < Api::BaseController include Authorization - before_action -> { doorkeeper_authorize! :read } + before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index before_action :require_user! before_action :set_suggestions def index - render json: @suggestions, each_serializer: REST::SuggestionSerializer + render json: @suggestions.get(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:offset].to_i), each_serializer: REST::SuggestionSerializer + end + + def destroy + @suggestions.remove(params[:id]) + render_empty end private def set_suggestions - @suggestions = AccountSuggestions.get(current_account, limit_param(DEFAULT_ACCOUNTS_LIMIT)) + @suggestions = AccountSuggestions.new(current_account) end end diff --git a/app/controllers/auth/confirmations_controller.rb b/app/controllers/auth/confirmations_controller.rb index 9f6be9c424d0c4..d9cd630905b418 100644 --- a/app/controllers/auth/confirmations_controller.rb +++ b/app/controllers/auth/confirmations_controller.rb @@ -62,7 +62,7 @@ def set_confirmation_user! end def captcha_user_bypass? - return true if @confirmation_user.nil? || @confirmation_user.confirmed? + @confirmation_user.nil? || @confirmation_user.confirmed? end def require_unconfirmed! diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index 148ad53755ef8f..962b78de65f026 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -1,6 +1,10 @@ # frozen_string_literal: true class Auth::SessionsController < Devise::SessionsController + include Redisable + + MAX_2FA_ATTEMPTS_PER_HOUR = 10 + layout 'auth' skip_before_action :check_self_destruct! @@ -130,9 +134,23 @@ def clear_attempt_from_session session.delete(:attempt_user_updated_at) end + def clear_2fa_attempt_from_user(user) + redis.del(second_factor_attempts_key(user)) + end + + def check_second_factor_rate_limits(user) + attempts, = redis.multi do |multi| + multi.incr(second_factor_attempts_key(user)) + multi.expire(second_factor_attempts_key(user), 1.hour) + end + + attempts >= MAX_2FA_ATTEMPTS_PER_HOUR + end + def on_authentication_success(user, security_measure) @on_authentication_success_called = true + clear_2fa_attempt_from_user(user) clear_attempt_from_session user.update_sign_in!(new_sign_in: true) @@ -163,5 +181,14 @@ def on_authentication_failure(user, security_measure, failure_reason) ip: request.remote_ip, user_agent: request.user_agent ) + + # Only send a notification email every hour at most + return if redis.set("2fa_failure_notification:#{user.id}", '1', ex: 1.hour, get: true).present? + + UserMailer.failed_2fa(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later! + end + + def second_factor_attempts_key(user) + "2fa_auth_attempts:#{user.id}:#{Time.now.utc.hour}" end end diff --git a/app/controllers/concerns/auth/two_factor_authentication_concern.rb b/app/controllers/concerns/auth/two_factor_authentication_concern.rb index effdb8d21c0885..404164751a86cb 100644 --- a/app/controllers/concerns/auth/two_factor_authentication_concern.rb +++ b/app/controllers/concerns/auth/two_factor_authentication_concern.rb @@ -66,6 +66,11 @@ def authenticate_with_two_factor_via_webauthn(user) end def authenticate_with_two_factor_via_otp(user) + if check_second_factor_rate_limits(user) + flash.now[:alert] = I18n.t('users.rate_limited') + return prompt_for_two_factor(user) + end + if valid_otp_attempt?(user) on_authentication_success(user, :otp) else diff --git a/app/controllers/concerns/cache_concern.rb b/app/controllers/concerns/cache_concern.rb index 2dfe5e263af05a..62f763fe2f28f0 100644 --- a/app/controllers/concerns/cache_concern.rb +++ b/app/controllers/concerns/cache_concern.rb @@ -3,150 +3,6 @@ module CacheConcern extend ActiveSupport::Concern - module ActiveRecordCoder - EMPTY_HASH = {}.freeze - - class << self - def dump(record) - instances = InstanceTracker.new - serialized_associations = serialize_associations(record, instances) - serialized_records = instances.map { |r| serialize_record(r) } - [serialized_associations, *serialized_records] - end - - def load(payload) - instances = InstanceTracker.new - serialized_associations, *serialized_records = payload - serialized_records.each { |attrs| instances.push(deserialize_record(*attrs)) } - deserialize_associations(serialized_associations, instances) - end - - private - - # Records without associations, or which have already been visited before, - # are serialized by their id alone. - # - # Records with associations are serialized as a two-element array including - # their id and the record's association cache. - # - def serialize_associations(record, instances) - return unless record - - if (id = instances.lookup(record)) - payload = id - else - payload = instances.push(record) - - cached_associations = record.class.reflect_on_all_associations.select do |reflection| - record.association_cached?(reflection.name) - end - - unless cached_associations.empty? - serialized_associations = cached_associations.map do |reflection| - association = record.association(reflection.name) - - serialized_target = if reflection.collection? - association.target.map { |target_record| serialize_associations(target_record, instances) } - else - serialize_associations(association.target, instances) - end - - [reflection.name, serialized_target] - end - - payload = [payload, serialized_associations] - end - end - - payload - end - - def deserialize_associations(payload, instances) - return unless payload - - id, associations = payload - record = instances.fetch(id) - - associations&.each do |name, serialized_target| - begin - association = record.association(name) - rescue ActiveRecord::AssociationNotFoundError - raise AssociationMissingError, "undefined association: #{name}" - end - - target = if association.reflection.collection? - serialized_target.map! { |serialized_record| deserialize_associations(serialized_record, instances) } - else - deserialize_associations(serialized_target, instances) - end - - association.target = target - end - - record - end - - def serialize_record(record) - arguments = [record.class.name, attributes_for_database(record)] - arguments << true if record.new_record? - arguments - end - - def attributes_for_database(record) - attributes = record.attributes_for_database - attributes.transform_values! { |attr| attr.is_a?(::ActiveModel::Type::Binary::Data) ? attr.to_s : attr } - attributes - end - - def deserialize_record(class_name, attributes_from_database, new_record = false) # rubocop:disable Style/OptionalBooleanParameter - begin - klass = Object.const_get(class_name) - rescue NameError - raise ClassMissingError, "undefined class: #{class_name}" - end - - # Ideally we'd like to call `klass.instantiate`, however it doesn't allow to pass - # wether the record was persisted or not. - attributes = klass.attributes_builder.build_from_database(attributes_from_database, EMPTY_HASH) - klass.allocate.init_with_attributes(attributes, new_record) - end - end - - class Error < StandardError - end - - class ClassMissingError < Error - end - - class AssociationMissingError < Error - end - - class InstanceTracker - def initialize - @instances = [] - @ids = {}.compare_by_identity - end - - def map(&block) - @instances.map(&block) - end - - def fetch(...) - @instances.fetch(...) - end - - def push(instance) - id = @ids[instance] = @instances.size - @instances << instance - id - end - - def lookup(instance) - @ids[instance] - end - end - end - class_methods do def vary_by(value, **kwargs) before_action(**kwargs) do |controller| @@ -196,11 +52,7 @@ def cache_collection(raw, klass) raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation) return [] if raw.empty? - cached_keys_with_value = begin - Rails.cache.read_multi(*raw).transform_keys(&:id).transform_values { |r| ActiveRecordCoder.load(r) } - rescue ActiveRecordCoder::Error - {} # The serialization format may have changed, let's pretend it's a cache miss. - end + cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id) uncached_ids = raw.map(&:id) - cached_keys_with_value.keys @@ -208,10 +60,7 @@ def cache_collection(raw, klass) unless uncached_ids.empty? uncached = klass.where(id: uncached_ids).with_includes.index_by(&:id) - - uncached.each_value do |item| - Rails.cache.write(item, ActiveRecordCoder.dump(item)) - end + Rails.cache.write_multi(uncached.values.to_h { |i| [i, i] }) end raw.filter_map { |item| cached_keys_with_value[item.id] || uncached[item.id] } diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index f0a344f1c97d64..35391e64c44390 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -91,14 +91,23 @@ def signed_request_actor raise SignatureVerificationError, "Public key not found for key #{signature_params['keyId']}" if actor.nil? signature = Base64.decode64(signature_params['signature']) - compare_signed_string = build_signed_string + compare_signed_string = build_signed_string(include_query_string: true) return actor unless verify_signature(actor, signature, compare_signed_string).nil? + # Compatibility quirk with older Mastodon versions + compare_signed_string = build_signed_string(include_query_string: false) + return actor unless verify_signature(actor, signature, compare_signed_string).nil? + actor = stoplight_wrap_request { actor_refresh_key!(actor) } raise SignatureVerificationError, "Could not refresh public key #{signature_params['keyId']}" if actor.nil? + compare_signed_string = build_signed_string(include_query_string: true) + return actor unless verify_signature(actor, signature, compare_signed_string).nil? + + # Compatibility quirk with older Mastodon versions + compare_signed_string = build_signed_string(include_query_string: false) return actor unless verify_signature(actor, signature, compare_signed_string).nil? fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)", signed_string: compare_signed_string, signature: signature_params['signature'] @@ -180,11 +189,18 @@ def verify_signature(actor, signature, compare_signed_string) nil end - def build_signed_string + def build_signed_string(include_query_string: true) signed_headers.map do |signed_header| case signed_header when Request::REQUEST_TARGET - "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.path}" + if include_query_string + "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.original_fullpath}" + else + # Current versions of Mastodon incorrectly omit the query string from the (request-target) pseudo-header. + # Therefore, temporarily support such incorrect signatures for compatibility. + # TODO: remove eventually some time after release of the fixed version + "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.path}" + end when '(created)' raise SignatureVerificationError, 'Invalid pseudo-header (created) for rsa-sha256' unless signature_algorithm == 'hs2019' raise SignatureVerificationError, 'Pseudo-header (created) used but corresponding argument missing' if signature_params['created'].blank? diff --git a/app/controllers/custom_css_controller.rb b/app/controllers/custom_css_controller.rb index e7a02ea89c087c..62f8e0d772e647 100644 --- a/app/controllers/custom_css_controller.rb +++ b/app/controllers/custom_css_controller.rb @@ -1,8 +1,21 @@ # frozen_string_literal: true class CustomCssController < ActionController::Base # rubocop:disable Rails/ApplicationController + before_action :set_user_roles + def show expires_in 3.minutes, public: true render content_type: 'text/css' end + + private + + def custom_css_styles + Setting.custom_css + end + helper_method :custom_css_styles + + def set_user_roles + @user_roles = UserRole.where(highlighted: true).where.not(color: [nil, '']) + end end diff --git a/app/controllers/health_controller.rb b/app/controllers/health_controller.rb index 2a22a05570d9f0..7bc424d0a4cd09 100644 --- a/app/controllers/health_controller.rb +++ b/app/controllers/health_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class HealthController < ActionController::Base +class HealthController < ActionController::Base # rubocop:disable Rails/ApplicationController def show render plain: 'OK' end diff --git a/app/controllers/relationships_controller.rb b/app/controllers/relationships_controller.rb index e87b5a656f1a48..dd794f3199eeec 100644 --- a/app/controllers/relationships_controller.rb +++ b/app/controllers/relationships_controller.rb @@ -33,7 +33,7 @@ def set_accounts end def set_relationships - @relationships = AccountRelationshipsPresenter.new(@accounts.pluck(:id), current_user.account_id) + @relationships = AccountRelationshipsPresenter.new(@accounts, current_user.account_id) end def form_account_batch_params diff --git a/app/controllers/well_known/webfinger_controller.rb b/app/controllers/well_known/webfinger_controller.rb index 364fbf8a18c47e..72f0ea890fc654 100644 --- a/app/controllers/well_known/webfinger_controller.rb +++ b/app/controllers/well_known/webfinger_controller.rb @@ -21,7 +21,7 @@ def set_account username = username_from_resource @account = begin - if username == Rails.configuration.x.local_domain + if username == Rails.configuration.x.local_domain || username == Rails.configuration.x.web_domain Account.representative else Account.find_local!(username) diff --git a/app/helpers/accounts_helper.rb b/app/helpers/accounts_helper.rb index e80cf5aa50e85a..ce9bf5e166ce21 100644 --- a/app/helpers/accounts_helper.rb +++ b/app/helpers/accounts_helper.rb @@ -27,20 +27,24 @@ def account_action_button(account) end end + def account_formatted_stat(value) + number_to_human(value, precision: 3, strip_insignificant_zeros: true) + end + def account_description(account) prepend_str = [ [ - number_to_human(account.statuses_count, precision: 3, strip_insignificant_zeros: true), + account_formatted_stat(account.statuses_count), I18n.t('accounts.posts', count: account.statuses_count), ].join(' '), [ - number_to_human(account.following_count, precision: 3, strip_insignificant_zeros: true), + account_formatted_stat(account.following_count), I18n.t('accounts.following', count: account.following_count), ].join(' '), [ - number_to_human(account.followers_count, precision: 3, strip_insignificant_zeros: true), + account_formatted_stat(account.followers_count), I18n.t('accounts.followers', count: account.followers_count), ].join(' '), ].join(', ') diff --git a/app/helpers/admin/settings_helper.rb b/app/helpers/admin/settings_helper.rb index 552a3ee5a86be8..6937331e1a6df9 100644 --- a/app/helpers/admin/settings_helper.rb +++ b/app/helpers/admin/settings_helper.rb @@ -4,4 +4,60 @@ module Admin::SettingsHelper def captcha_available? ENV['HCAPTCHA_SECRET_KEY'].present? && ENV['HCAPTCHA_SITE_KEY'].present? end + + def login_activity_title(activity) + t( + "login_activities.#{login_activity_key(activity)}", + method: login_activity_method(activity), + ip: login_activity_ip(activity), + browser: login_activity_browser(activity) + ) + end + + private + + def login_activity_key(activity) + activity.success? ? 'successful_sign_in_html' : 'failed_sign_in_html' + end + + def login_activity_method(activity) + content_tag( + :span, + login_activity_method_string(activity), + class: 'target' + ) + end + + def login_activity_ip(activity) + content_tag( + :span, + activity.ip, + class: 'target' + ) + end + + def login_activity_browser(activity) + content_tag( + :span, + login_activity_browser_description(activity), + class: 'target', + title: activity.user_agent + ) + end + + def login_activity_method_string(activity) + if activity.omniauth? + t("auth.providers.#{activity.provider}") + else + t("login_activities.authentication_methods.#{activity.authentication_method}") + end + end + + def login_activity_browser_description(activity) + t( + 'sessions.description', + browser: t(activity.browser, scope: 'sessions.browsers', default: activity.browser.to_s), + platform: t(activity.platform, scope: 'sessions.platforms', default: activity.platform.to_s) + ) + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 48d9119fbd5a14..4f7f66985db534 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -110,11 +110,11 @@ def class_for_scope(scope) def can?(action, record) return false if record.nil? - policy(record).public_send("#{action}?") + policy(record).public_send(:"#{action}?") end def fa_icon(icon, attributes = {}) - class_names = attributes[:class]&.split(' ') || [] + class_names = attributes[:class]&.split || [] class_names << 'fa' class_names += icon.split.map { |cl| "fa-#{cl}" } diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb index ce3ff094f6bdd4..b3d0d032c4d3ce 100644 --- a/app/helpers/jsonld_helper.rb +++ b/app/helpers/jsonld_helper.rb @@ -155,7 +155,7 @@ def safe_for_forwarding?(original, compacted) end end - def fetch_resource(uri, id, on_behalf_of = nil) + def fetch_resource(uri, id, on_behalf_of = nil, request_options: {}) unless id json = fetch_resource_without_id_validation(uri, on_behalf_of) @@ -164,14 +164,14 @@ def fetch_resource(uri, id, on_behalf_of = nil) uri = json['id'] end - json = fetch_resource_without_id_validation(uri, on_behalf_of) + json = fetch_resource_without_id_validation(uri, on_behalf_of, request_options: request_options) json.present? && json['id'] == uri ? json : nil end - def fetch_resource_without_id_validation(uri, on_behalf_of = nil, raise_on_temporary_error = false) + def fetch_resource_without_id_validation(uri, on_behalf_of = nil, raise_on_temporary_error = false, request_options: {}) on_behalf_of ||= Account.representative - build_request(uri, on_behalf_of).perform do |response| + build_request(uri, on_behalf_of, options: request_options).perform do |response| raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error body_to_json(response.body_with_limit) if response.code == 200 @@ -204,8 +204,8 @@ def response_error_unsalvageable?(response) response.code == 501 || ((400...500).cover?(response.code) && ![401, 408, 429].include?(response.code)) end - def build_request(uri, on_behalf_of = nil) - Request.new(:get, uri).tap do |request| + def build_request(uri, on_behalf_of = nil, options: {}) + Request.new(:get, uri, **options).tap do |request| request.on_behalf_of(on_behalf_of) if on_behalf_of request.add_headers('Accept' => 'application/activity+json, application/ld+json') end diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 64cd3c8fae1d13..1f1d3879bcc669 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -224,7 +224,7 @@ module LanguagesHelper 'en-GB': 'English (British)', 'es-AR': 'EspaÃąol (Argentina)', 'es-MX': 'EspaÃąol (MÊxico)', - 'fr-QC': 'Français (Canadien)', + 'fr-CA': 'Français (Canadien)', 'ja-IM': 'æ—ĨæœŦčĒž(im@s)', 'pt-BR': 'PortuguÃĒs (Brasil)', 'pt-PT': 'PortuguÃĒs (Portugal)', diff --git a/app/helpers/mascot_helper.rb b/app/helpers/mascot_helper.rb index 8ee04383ecea46..34b656411ebce3 100644 --- a/app/helpers/mascot_helper.rb +++ b/app/helpers/mascot_helper.rb @@ -2,7 +2,7 @@ module MascotHelper def mascot_url - full_asset_url(instance_presenter.mascot&.file&.url || asset_pack_path('media/images/elephant_ui_plane.svg')) + full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg')) end def instance_presenter diff --git a/app/helpers/routing_helper.rb b/app/helpers/routing_helper.rb index 2fb9ce72cbeb0e..15d988f64d2ef2 100644 --- a/app/helpers/routing_helper.rb +++ b/app/helpers/routing_helper.rb @@ -24,8 +24,12 @@ def asset_host Rails.configuration.action_controller.asset_host || root_url end - def full_pack_url(source, **options) - full_asset_url(asset_pack_path(source, **options)) + def frontend_asset_path(source, **options) + asset_pack_path("media/#{source}", **options) + end + + def frontend_asset_url(source, **options) + full_asset_url(frontend_asset_path(source, **options)) end def use_storage? diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 3c72b22c666b9b..10863a316c93b8 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -9,6 +9,19 @@ def ui_languages LanguagesHelper.sorted_locale_keys(I18n.available_locales) end + def featured_tags_hint(recently_used_tags) + safe_join( + [ + t('simple_form.hints.featured_tag.name'), + safe_join( + links_for_featured_tags(recently_used_tags), + ', ' + ), + ], + ' ' + ) + end + def session_device_icon(session) device = session.detection.device @@ -28,4 +41,18 @@ def compact_account_link_to(account) safe_join([image_tag(account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar'), content_tag(:span, account.acct, class: 'username')], ' ') end end + + private + + def links_for_featured_tags(tags) + tags.map { |tag| post_link_to_featured_tag(tag) } + end + + def post_link_to_featured_tag(tag) + link_to( + "##{tag.display_name}", + settings_featured_tags_path(featured_tag: { name: tag.name }), + method: :post + ) + end end diff --git a/app/javascript/__mocks__/svg.js b/app/javascript/__mocks__/svg.js index e725dc2da6d8d3..762bc165d04558 100644 --- a/app/javascript/__mocks__/svg.js +++ b/app/javascript/__mocks__/svg.js @@ -1,3 +1,3 @@ -// eslint-disable-next-line import/no-anonymous-default-export -export default 'SvgrURL'; -export const ReactComponent = 'div'; +const ReactComponent = 'div'; + +export default ReactComponent; diff --git a/app/javascript/fonts/inter/inter-variable-font-slnt-wght.woff2 b/app/javascript/fonts/inter/inter-variable-font-slnt-wght.woff2 new file mode 100644 index 00000000000000..e6345f2e3d462e Binary files /dev/null and b/app/javascript/fonts/inter/inter-variable-font-slnt-wght.woff2 differ diff --git a/app/javascript/images/mailer-new/common/header-bg-end.png b/app/javascript/images/mailer-new/common/header-bg-end.png new file mode 100644 index 00000000000000..900196678a3346 Binary files /dev/null and b/app/javascript/images/mailer-new/common/header-bg-end.png differ diff --git a/app/javascript/images/mailer-new/common/header-bg-start.png b/app/javascript/images/mailer-new/common/header-bg-start.png new file mode 100644 index 00000000000000..0037c1ad933ec8 Binary files /dev/null and b/app/javascript/images/mailer-new/common/header-bg-start.png differ diff --git a/app/javascript/images/mailer-new/common/logo-footer.png b/app/javascript/images/mailer-new/common/logo-footer.png new file mode 100644 index 00000000000000..2baafd8d7f8af9 Binary files /dev/null and b/app/javascript/images/mailer-new/common/logo-footer.png differ diff --git a/app/javascript/images/mailer-new/common/logo-header.png b/app/javascript/images/mailer-new/common/logo-header.png new file mode 100644 index 00000000000000..46a6bddaa104c7 Binary files /dev/null and b/app/javascript/images/mailer-new/common/logo-header.png differ diff --git a/app/javascript/images/mailer-new/heading/2fa-disabled.png b/app/javascript/images/mailer-new/heading/2fa-disabled.png new file mode 100644 index 00000000000000..b1e342a87cdcbc Binary files /dev/null and b/app/javascript/images/mailer-new/heading/2fa-disabled.png differ diff --git a/app/javascript/images/mailer-new/heading/2fa-enabled.png b/app/javascript/images/mailer-new/heading/2fa-enabled.png new file mode 100644 index 00000000000000..3ce3e04f848c2a Binary files /dev/null and b/app/javascript/images/mailer-new/heading/2fa-enabled.png differ diff --git a/app/javascript/images/mailer-new/heading/2fa-recovery.png b/app/javascript/images/mailer-new/heading/2fa-recovery.png new file mode 100644 index 00000000000000..cefb21e1eb0e2b Binary files /dev/null and b/app/javascript/images/mailer-new/heading/2fa-recovery.png differ diff --git a/app/javascript/images/mailer-new/heading/appeal-approved.png b/app/javascript/images/mailer-new/heading/appeal-approved.png new file mode 100755 index 00000000000000..b2476ec346b8dd Binary files /dev/null and b/app/javascript/images/mailer-new/heading/appeal-approved.png differ diff --git a/app/javascript/images/mailer-new/heading/appeal-rejected.png b/app/javascript/images/mailer-new/heading/appeal-rejected.png new file mode 100644 index 00000000000000..7ae38ad0c18ae1 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/appeal-rejected.png differ diff --git a/app/javascript/images/mailer-new/heading/archive.png b/app/javascript/images/mailer-new/heading/archive.png new file mode 100644 index 00000000000000..b0c7fad84dc54d Binary files /dev/null and b/app/javascript/images/mailer-new/heading/archive.png differ diff --git a/app/javascript/images/mailer-new/heading/boost.png b/app/javascript/images/mailer-new/heading/boost.png new file mode 100644 index 00000000000000..e33b759976fae8 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/boost.png differ diff --git a/app/javascript/images/mailer-new/heading/email.png b/app/javascript/images/mailer-new/heading/email.png new file mode 100644 index 00000000000000..c922c5239eefc9 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/email.png differ diff --git a/app/javascript/images/mailer-new/heading/favorite.png b/app/javascript/images/mailer-new/heading/favorite.png new file mode 100644 index 00000000000000..0e483ee9b2b18c Binary files /dev/null and b/app/javascript/images/mailer-new/heading/favorite.png differ diff --git a/app/javascript/images/mailer-new/heading/follow.png b/app/javascript/images/mailer-new/heading/follow.png new file mode 100644 index 00000000000000..ff5b7e00424a68 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/follow.png differ diff --git a/app/javascript/images/mailer-new/heading/key-added.png b/app/javascript/images/mailer-new/heading/key-added.png new file mode 100755 index 00000000000000..82dcd464bf3213 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-added.png differ diff --git a/app/javascript/images/mailer-new/heading/key-deleted.png b/app/javascript/images/mailer-new/heading/key-deleted.png new file mode 100755 index 00000000000000..2930f591a09963 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-deleted.png differ diff --git a/app/javascript/images/mailer-new/heading/key-disabled.png b/app/javascript/images/mailer-new/heading/key-disabled.png new file mode 100755 index 00000000000000..e0f259359aebd3 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-disabled.png differ diff --git a/app/javascript/images/mailer-new/heading/key-enabled.png b/app/javascript/images/mailer-new/heading/key-enabled.png new file mode 100644 index 00000000000000..b2476ec346b8dd Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-enabled.png differ diff --git a/app/javascript/images/mailer-new/heading/login.png b/app/javascript/images/mailer-new/heading/login.png new file mode 100644 index 00000000000000..89a6e9ee335aa8 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/login.png differ diff --git a/app/javascript/images/mailer-new/heading/mention.png b/app/javascript/images/mailer-new/heading/mention.png new file mode 100644 index 00000000000000..c4dccff8ef2f2f Binary files /dev/null and b/app/javascript/images/mailer-new/heading/mention.png differ diff --git a/app/javascript/images/mailer-new/heading/password.png b/app/javascript/images/mailer-new/heading/password.png new file mode 100755 index 00000000000000..552c7c06870404 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/password.png differ diff --git a/app/javascript/images/mailer-new/heading/user.png b/app/javascript/images/mailer-new/heading/user.png new file mode 100644 index 00000000000000..f1dd58a18d2f36 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/user.png differ diff --git a/app/javascript/images/mailer-new/heading/warning.png b/app/javascript/images/mailer-new/heading/warning.png new file mode 100755 index 00000000000000..7764837abef6e6 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/warning.png differ diff --git a/app/javascript/images/mailer-new/welcome/checkbox-off.png b/app/javascript/images/mailer-new/welcome/checkbox-off.png new file mode 100644 index 00000000000000..51c190efe6dde5 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/checkbox-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/checkbox-on.png b/app/javascript/images/mailer-new/welcome/checkbox-on.png new file mode 100644 index 00000000000000..162095e7df3df7 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/checkbox-on.png differ diff --git a/app/javascript/images/mailer-new/welcome/step1-on.png b/app/javascript/images/mailer-new/welcome/step1-on.png new file mode 100644 index 00000000000000..c3776d17dfb7e7 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step1-on.png differ diff --git a/app/javascript/images/mailer-new/welcome/step2-off.png b/app/javascript/images/mailer-new/welcome/step2-off.png new file mode 100755 index 00000000000000..a262454d2d51eb Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step2-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/step3-off.png b/app/javascript/images/mailer-new/welcome/step3-off.png new file mode 100755 index 00000000000000..972de65a569aff Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step3-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/step4-off.png b/app/javascript/images/mailer-new/welcome/step4-off.png new file mode 100755 index 00000000000000..f45e9a2c9ac181 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step4-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/step5-off.png b/app/javascript/images/mailer-new/welcome/step5-off.png new file mode 100755 index 00000000000000..ca270f54781c5a Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step5-off.png differ diff --git a/app/javascript/mastodon/actions/accounts_typed.ts b/app/javascript/mastodon/actions/accounts_typed.ts index b908e7528eeb60..058a68a0991316 100644 --- a/app/javascript/mastodon/actions/accounts_typed.ts +++ b/app/javascript/mastodon/actions/accounts_typed.ts @@ -21,7 +21,7 @@ function actionWithSkipLoadingTrue(args: Args) { } export const followAccountSuccess = createAction( - 'accounts/followAccountSuccess', + 'accounts/followAccount/SUCCESS', actionWithSkipLoadingTrue<{ relationship: ApiRelationshipJSON; alreadyFollowing: boolean; @@ -29,7 +29,7 @@ export const followAccountSuccess = createAction( ); export const unfollowAccountSuccess = createAction( - 'accounts/unfollowAccountSuccess', + 'accounts/unfollowAccount/SUCCESS', actionWithSkipLoadingTrue<{ relationship: ApiRelationshipJSON; statuses: unknown; @@ -38,60 +38,60 @@ export const unfollowAccountSuccess = createAction( ); export const authorizeFollowRequestSuccess = createAction<{ id: string }>( - 'accounts/followRequestAuthorizeSuccess', + 'accounts/followRequestAuthorize/SUCCESS', ); export const rejectFollowRequestSuccess = createAction<{ id: string }>( - 'accounts/followRequestRejectSuccess', + 'accounts/followRequestReject/SUCCESS', ); export const followAccountRequest = createAction( - 'accounts/followRequest', + 'accounts/follow/REQUEST', actionWithSkipLoadingTrue<{ id: string; locked: boolean }>, ); export const followAccountFail = createAction( - 'accounts/followFail', + 'accounts/follow/FAIL', actionWithSkipLoadingTrue<{ id: string; error: string; locked: boolean }>, ); export const unfollowAccountRequest = createAction( - 'accounts/unfollowRequest', + 'accounts/unfollow/REQUEST', actionWithSkipLoadingTrue<{ id: string }>, ); export const unfollowAccountFail = createAction( - 'accounts/unfollowFail', + 'accounts/unfollow/FAIL', actionWithSkipLoadingTrue<{ id: string; error: string }>, ); export const blockAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; statuses: unknown; -}>('accounts/blockSuccess'); +}>('accounts/block/SUCCESS'); export const unblockAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/unblockSuccess'); +}>('accounts/unblock/SUCCESS'); export const muteAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; statuses: unknown; -}>('accounts/muteSuccess'); +}>('accounts/mute/SUCCESS'); export const unmuteAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/unmuteSuccess'); +}>('accounts/unmute/SUCCESS'); export const pinAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/pinSuccess'); +}>('accounts/pin/SUCCESS'); export const unpinAccountSuccess = createAction<{ relationship: ApiRelationshipJSON; -}>('accounts/unpinSuccess'); +}>('accounts/unpin/SUCCESS'); export const fetchRelationshipsSuccess = createAction( - 'relationships/fetchSuccess', + 'relationships/fetch/SUCCESS', actionWithSkipLoadingTrue<{ relationships: ApiRelationshipJSON[] }>, ); diff --git a/app/javascript/mastodon/actions/domain_blocks_typed.ts b/app/javascript/mastodon/actions/domain_blocks_typed.ts index 08e0b4a1788e60..6a4cace0de91e7 100644 --- a/app/javascript/mastodon/actions/domain_blocks_typed.ts +++ b/app/javascript/mastodon/actions/domain_blocks_typed.ts @@ -5,9 +5,9 @@ import type { Account } from 'mastodon/models/account'; export const blockDomainSuccess = createAction<{ domain: string; accounts: Account[]; -}>('domain_blocks/blockSuccess'); +}>('domain_blocks/block/SUCCESS'); export const unblockDomainSuccess = createAction<{ domain: string; accounts: Account[]; -}>('domain_blocks/unblockSuccess'); +}>('domain_blocks/unblock/SUCCESS'); diff --git a/app/javascript/mastodon/actions/notifications_typed.ts b/app/javascript/mastodon/actions/notifications_typed.ts index 7e51fa51e7b7e8..176362f4b1edd4 100644 --- a/app/javascript/mastodon/actions/notifications_typed.ts +++ b/app/javascript/mastodon/actions/notifications_typed.ts @@ -18,6 +18,6 @@ export const notificationsUpdate = createAction( playSound: boolean; }) => ({ payload: args, - meta: { playSound: playSound ? { sound: 'boop' } : undefined }, + meta: { sound: playSound ? 'boop' : undefined }, }), ); diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js index 38a089b4869004..a34a490e760d6e 100644 --- a/app/javascript/mastodon/actions/search.js +++ b/app/javascript/mastodon/actions/search.js @@ -179,6 +179,11 @@ export const openURL = (value, history, onFailure) => (dispatch, getState) => { export const clickSearchResult = (q, type) => (dispatch, getState) => { const previous = getState().getIn(['search', 'recent']); + + if (previous.some(x => x.get('q') === q && x.get('type') === type)) { + return; + } + const me = getState().getIn(['meta', 'me']); const current = previous.add(fromJS({ type, q })).takeLast(4); @@ -207,4 +212,4 @@ export const hydrateSearch = () => (dispatch, getState) => { if (history !== null) { dispatch(updateSearchHistory(history)); } -}; \ No newline at end of file +}; diff --git a/app/javascript/mastodon/components/attachment_list.jsx b/app/javascript/mastodon/components/attachment_list.jsx index ebf092b83df001..c5ac046751893d 100644 --- a/app/javascript/mastodon/components/attachment_list.jsx +++ b/app/javascript/mastodon/components/attachment_list.jsx @@ -7,8 +7,7 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as LinkIcon } from '@material-symbols/svg-600/outlined/link.svg'; - +import LinkIcon from '@/material-icons/400-24px/link.svg?react'; import { Icon } from 'mastodon/components/icon'; const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; diff --git a/app/javascript/mastodon/components/badge.jsx b/app/javascript/mastodon/components/badge.jsx index 2f762fed5fb80a..646655c249b872 100644 --- a/app/javascript/mastodon/components/badge.jsx +++ b/app/javascript/mastodon/components/badge.jsx @@ -2,9 +2,9 @@ import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; -import { ReactComponent as GroupsIcon } from '@material-symbols/svg-600/outlined/group.svg'; -import { ReactComponent as PersonIcon } from '@material-symbols/svg-600/outlined/person.svg'; -import { ReactComponent as SmartToyIcon } from '@material-symbols/svg-600/outlined/smart_toy.svg'; +import GroupsIcon from '@/material-icons/400-24px/group.svg?react'; +import PersonIcon from '@/material-icons/400-24px/person.svg?react'; +import SmartToyIcon from '@/material-icons/400-24px/smart_toy.svg?react'; export const Badge = ({ icon, label, domain }) => ( @@ -31,4 +31,4 @@ export const GroupBadge = () => ( export const AutomatedBadge = () => ( } label={} /> -); \ No newline at end of file +); diff --git a/app/javascript/mastodon/components/column_back_button.tsx b/app/javascript/mastodon/components/column_back_button.tsx index b835e9e6ad3154..af38c1e1106818 100644 --- a/app/javascript/mastodon/components/column_back_button.tsx +++ b/app/javascript/mastodon/components/column_back_button.tsx @@ -2,8 +2,7 @@ import { useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; -import { ReactComponent as ArrowBackIcon } from '@material-symbols/svg-600/outlined/arrow_back.svg'; - +import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react'; import { Icon } from 'mastodon/components/icon'; import { ButtonInTabsBar } from 'mastodon/features/ui/util/columns_context'; diff --git a/app/javascript/mastodon/components/column_header.jsx b/app/javascript/mastodon/components/column_header.jsx index b78bd9a8ef4aaa..901888e7504c3d 100644 --- a/app/javascript/mastodon/components/column_header.jsx +++ b/app/javascript/mastodon/components/column_header.jsx @@ -6,13 +6,12 @@ import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; import classNames from 'classnames'; import { withRouter } from 'react-router-dom'; -import { ReactComponent as AddIcon } from '@material-symbols/svg-600/outlined/add.svg'; -import { ReactComponent as ArrowBackIcon } from '@material-symbols/svg-600/outlined/arrow_back.svg'; -import { ReactComponent as ChevronLeftIcon } from '@material-symbols/svg-600/outlined/chevron_left.svg'; -import { ReactComponent as ChevronRightIcon } from '@material-symbols/svg-600/outlined/chevron_right.svg'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; -import { ReactComponent as TuneIcon } from '@material-symbols/svg-600/outlined/tune.svg'; - +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react'; +import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; import { Icon } from 'mastodon/components/icon'; import { ButtonInTabsBar, useColumnsContext } from 'mastodon/features/ui/util/columns_context'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/components/copy_icon_button.jsx b/app/javascript/mastodon/components/copy_icon_button.jsx index 9b1a36d83ab0da..0c3c6c290b2637 100644 --- a/app/javascript/mastodon/components/copy_icon_button.jsx +++ b/app/javascript/mastodon/components/copy_icon_button.jsx @@ -7,8 +7,7 @@ import classNames from 'classnames'; import { useDispatch } from 'react-redux'; -import { ReactComponent as ContentCopyIcon } from '@material-symbols/svg-600/outlined/content_copy.svg'; - +import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react'; import { showAlert } from 'mastodon/actions/alerts'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/components/dismissable_banner.tsx b/app/javascript/mastodon/components/dismissable_banner.tsx index 4e6d3bb9a76730..bc40e46f8da114 100644 --- a/app/javascript/mastodon/components/dismissable_banner.tsx +++ b/app/javascript/mastodon/components/dismissable_banner.tsx @@ -8,8 +8,7 @@ import { useCallback, useState, useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; - +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { changeSetting } from 'mastodon/actions/settings'; import { bannerSettings } from 'mastodon/settings'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; diff --git a/app/javascript/mastodon/components/domain.tsx b/app/javascript/mastodon/components/domain.tsx index 34c376f530535b..ed5e8e7e4c20ef 100644 --- a/app/javascript/mastodon/components/domain.tsx +++ b/app/javascript/mastodon/components/domain.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import { ReactComponent as LockOpenIcon } from '@material-symbols/svg-600/outlined/lock_open.svg'; +import LockOpenIcon from '@/material-icons/400-24px/lock_open.svg?react'; import { IconButton } from './icon_button'; diff --git a/app/javascript/mastodon/components/dropdown_menu.jsx b/app/javascript/mastodon/components/dropdown_menu.jsx index de540b392ba27b..04c8bb09800ffa 100644 --- a/app/javascript/mastodon/components/dropdown_menu.jsx +++ b/app/javascript/mastodon/components/dropdown_menu.jsx @@ -6,10 +6,10 @@ import { withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { CircularProgress } from 'mastodon/components/circular_progress'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; @@ -257,7 +257,7 @@ class Dropdown extends PureComponent { }; findTarget = () => { - return this.target?.buttonRef?.current; + return this.target?.buttonRef?.current ?? this.target; }; componentWillUnmount = () => { diff --git a/app/javascript/mastodon/components/edited_timestamp/index.jsx b/app/javascript/mastodon/components/edited_timestamp/index.jsx index 4375166bcd4fbd..4ca00f8dda9713 100644 --- a/app/javascript/mastodon/components/edited_timestamp/index.jsx +++ b/app/javascript/mastodon/components/edited_timestamp/index.jsx @@ -5,8 +5,7 @@ import { FormattedMessage, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import { ReactComponent as ArrowDropDownIcon } from '@material-symbols/svg-600/outlined/arrow_drop_down.svg'; - +import ArrowDropDownIcon from '@/material-icons/400-24px/arrow_drop_down.svg?react'; import { openModal } from 'mastodon/actions/modal'; import { Icon } from 'mastodon/components/icon'; import InlineAccount from 'mastodon/components/inline_account'; diff --git a/app/javascript/mastodon/components/icon.tsx b/app/javascript/mastodon/components/icon.tsx index f0af11f7f69f5f..f388380c44aeb8 100644 --- a/app/javascript/mastodon/components/icon.tsx +++ b/app/javascript/mastodon/components/icon.tsx @@ -1,7 +1,6 @@ import classNames from 'classnames'; -import { ReactComponent as CheckBoxOutlineBlankIcon } from '@material-symbols/svg-600/outlined/check_box_outline_blank.svg'; - +import CheckBoxOutlineBlankIcon from '@/material-icons/400-24px/check_box_outline_blank.svg?react'; import { isProduction } from 'mastodon/utils/environment'; interface SVGPropsWithTitle extends React.SVGProps { diff --git a/app/javascript/mastodon/components/load_gap.tsx b/app/javascript/mastodon/components/load_gap.tsx index 27ca6648c39c16..1d4193a35951ab 100644 --- a/app/javascript/mastodon/components/load_gap.tsx +++ b/app/javascript/mastodon/components/load_gap.tsx @@ -2,8 +2,7 @@ import { useCallback } from 'react'; import { useIntl, defineMessages } from 'react-intl'; -import { ReactComponent as MoreHorizIcon } from '@material-symbols/svg-600/outlined/more_horiz.svg'; - +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { Icon } from 'mastodon/components/icon'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/components/logo.tsx b/app/javascript/mastodon/components/logo.tsx index 928aa29a7cbc42..b7f8bd6695008a 100644 --- a/app/javascript/mastodon/components/logo.tsx +++ b/app/javascript/mastodon/components/logo.tsx @@ -1,4 +1,4 @@ -import logo from 'mastodon/../images/logo.svg'; +import logo from '@/images/logo.svg'; export const WordmarkLogo: React.FC = () => ( diff --git a/app/javascript/mastodon/components/media_attachments.jsx b/app/javascript/mastodon/components/media_attachments.jsx index 7b945a0ea22f67..63fe3e67f9aef1 100644 --- a/app/javascript/mastodon/components/media_attachments.jsx +++ b/app/javascript/mastodon/components/media_attachments.jsx @@ -15,6 +15,7 @@ export default class MediaAttachments extends ImmutablePureComponent { lang: PropTypes.string, height: PropTypes.number, width: PropTypes.number, + visible: PropTypes.bool, }; static defaultProps = { @@ -51,7 +52,7 @@ export default class MediaAttachments extends ImmutablePureComponent { }; render () { - const { status, width, height } = this.props; + const { status, width, height, visible } = this.props; const mediaAttachments = status.get('media_attachments'); const language = status.getIn(['language', 'translation']) || status.get('language') || this.props.lang; @@ -99,6 +100,7 @@ export default class MediaAttachments extends ImmutablePureComponent { height={height} inline sensitive={status.get('sensitive')} + visible={visible} onOpenVideo={noop} /> )} @@ -113,6 +115,7 @@ export default class MediaAttachments extends ImmutablePureComponent { lang={language} sensitive={status.get('sensitive')} defaultWidth={width} + visible={visible} height={height} onOpenMedia={noop} /> diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 668c2a2a8af2bf..91459a1285c0d1 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -8,9 +8,9 @@ import classNames from 'classnames'; import { is } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import { ReactComponent as VisibilityOffIcon } from '@material-symbols/svg-600/outlined/visibility_off.svg'; import { debounce } from 'lodash'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; import { Blurhash } from 'mastodon/components/blurhash'; import { autoPlayGif, displayMedia, useBlurhash } from '../initial_state'; @@ -103,7 +103,7 @@ class Item extends PureComponent { } if (attachment.get('description')?.length > 0) { - badges.push(ALT); + badges.push(ALT); } const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); diff --git a/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx b/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx index 08a599cd427283..50f91a92753cbb 100644 --- a/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx +++ b/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx @@ -5,8 +5,7 @@ import { FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; -import { ReactComponent as CancelPresentationIcon } from '@material-symbols/svg-600/outlined/cancel_presentation.svg'; - +import CancelPresentationIcon from '@/material-icons/400-24px/cancel_presentation.svg?react'; import { removePictureInPicture } from 'mastodon/actions/picture_in_picture'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/components/poll.jsx b/app/javascript/mastodon/components/poll.jsx index 7cf2c57b783e01..c7036d111b28bd 100644 --- a/app/javascript/mastodon/components/poll.jsx +++ b/app/javascript/mastodon/components/poll.jsx @@ -7,10 +7,10 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/check.svg'; import escapeTextContentForBrowser from 'escape-html'; import spring from 'react-motion/lib/spring'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { Icon } from 'mastodon/components/icon'; import emojify from 'mastodon/features/emoji/emoji'; import Motion from 'mastodon/features/ui/util/optional_motion'; diff --git a/app/javascript/mastodon/components/regeneration_indicator.jsx b/app/javascript/mastodon/components/regeneration_indicator.jsx index 2f099fb61b17e2..21e9f1900e6930 100644 --- a/app/javascript/mastodon/components/regeneration_indicator.jsx +++ b/app/javascript/mastodon/components/regeneration_indicator.jsx @@ -1,6 +1,6 @@ import { FormattedMessage } from 'react-intl'; -import illustration from 'mastodon/../images/yukiho.png'; +import illustration from '@/images/yukiho.png'; const RegenerationIndicator = () => (
diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 83a9d9265c4830..9cabd2f3170d55 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -7,12 +7,12 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as AlternateEmailIcon } from '@material-symbols/svg-600/outlined/alternate_email.svg'; -import { ReactComponent as PushPinIcon } from '@material-symbols/svg-600/outlined/push_pin.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as ReplyIcon } from '@material-symbols/svg-600/outlined/reply.svg'; import { HotKeys } from 'react-hotkeys'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; import { Icon } from 'mastodon/components/icon'; import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; import { withOptionalRouter, WithOptionalRouterPropTypes } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index 25eab91fe38e68..bfe77a4900d417 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -9,18 +9,17 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as BookmarkIcon } from '@material-symbols/svg-600/outlined/bookmark-fill.svg'; -import { ReactComponent as BookmarkBorderIcon } from '@material-symbols/svg-600/outlined/bookmark.svg'; -import { ReactComponent as MoreHorizIcon } from '@material-symbols/svg-600/outlined/more_horiz.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as ReplyIcon } from '@material-symbols/svg-600/outlined/reply.svg'; -import { ReactComponent as ReplyAllIcon } from '@material-symbols/svg-600/outlined/reply_all.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star-fill.svg'; -import { ReactComponent as StarBorderIcon } from '@material-symbols/svg-600/outlined/star.svg'; -import { ReactComponent as VisibilityIcon } from '@material-symbols/svg-600/outlined/visibility.svg'; - -import { ReactComponent as RepeatDisabledIcon } from 'mastodon/../svg-icons/repeat_disabled.svg'; -import { ReactComponent as RepeatPrivateIcon } from 'mastodon/../svg-icons/repeat_private.svg'; +import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg'; +import BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import StarBorderIcon from '@/material-icons/400-24px/star.svg?react'; +import VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react'; +import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react'; +import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/components/status_content.jsx b/app/javascript/mastodon/components/status_content.jsx index d1f50fc8d771cf..4a7ba941eb6297 100644 --- a/app/javascript/mastodon/components/status_content.jsx +++ b/app/javascript/mastodon/components/status_content.jsx @@ -9,8 +9,7 @@ import { Link, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as ChevronRightIcon } from '@material-symbols/svg-600/outlined/chevron_right.svg'; - +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import { Icon } from 'mastodon/components/icon'; import PollContainer from 'mastodon/containers/poll_container'; import { autoPlayGif, languages as preloadedLanguages } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/components/verified_badge.tsx b/app/javascript/mastodon/components/verified_badge.tsx index e96bf8256339df..626cc500d6a672 100644 --- a/app/javascript/mastodon/components/verified_badge.tsx +++ b/app/javascript/mastodon/components/verified_badge.tsx @@ -1,4 +1,4 @@ -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/check.svg'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { Icon } from './icon'; diff --git a/app/javascript/mastodon/components/visibility_icon.tsx b/app/javascript/mastodon/components/visibility_icon.tsx index 3e9f36dc70d8fa..d6ad4095ebcd90 100644 --- a/app/javascript/mastodon/components/visibility_icon.tsx +++ b/app/javascript/mastodon/components/visibility_icon.tsx @@ -1,9 +1,9 @@ import { defineMessages, useIntl } from 'react-intl'; -import { ReactComponent as AlternateEmailIcon } from '@material-symbols/svg-600/outlined/alternate_email.svg'; -import { ReactComponent as LockIcon } from '@material-symbols/svg-600/outlined/lock.svg'; -import { ReactComponent as LockOpenIcon } from '@material-symbols/svg-600/outlined/lock_open.svg'; -import { ReactComponent as PublicIcon } from '@material-symbols/svg-600/outlined/public.svg'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import LockOpenIcon from '@/material-icons/400-24px/lock_open.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { Icon } from './icon'; diff --git a/app/javascript/mastodon/features/__tests__/toggle-play.jsx b/app/javascript/mastodon/features/__tests__/toggle-play.jsx deleted file mode 100644 index 9c999db8677ced..00000000000000 --- a/app/javascript/mastodon/features/__tests__/toggle-play.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; - -import { render, fireEvent } from '@testing-library/react'; - -class Media extends Component { - - constructor(props) { - super(props); - - this.state = { - paused: props.paused || false, - }; - } - - handleMediaClick = () => { - const { onClick } = this.props; - - this.setState(prevState => ({ - paused: !prevState.paused, - })); - - if (typeof onClick === 'function') { - onClick(); - } - - const { title } = this.props; - const mediaElements = document.querySelectorAll(`div[title="${title}"]`); - - setTimeout(() => { - mediaElements.forEach(element => { - if (element !== this && !element.classList.contains('paused')) { - element.click(); - } - }); - }, 0); - }; - - render() { - const { title } = this.props; - const { paused } = this.state; - - return ( - - ); - } - -} - -Media.propTypes = { - title: PropTypes.string.isRequired, - onClick: PropTypes.func, - paused: PropTypes.bool, -}; - -describe('Media attachments test', () => { - let currentMedia = null; - const togglePlayMock = jest.fn(); - - it('plays a new media file and pauses others that were playing', () => { - const container = render( -
- - -
, - ); - - fireEvent.click(container.getByTitle('firstMedia')); - expect(togglePlayMock).toHaveBeenCalledTimes(1); - currentMedia = container.getByTitle('firstMedia'); - expect(currentMedia.textContent).toMatch(/Playing/); - - fireEvent.click(container.getByTitle('secondMedia')); - expect(togglePlayMock).toHaveBeenCalledTimes(2); - currentMedia = container.getByTitle('secondMedia'); - expect(currentMedia.textContent).toMatch(/Playing/); - }); -}); diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index 380942b8ee104f..3287631ed1ba88 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -10,9 +10,8 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as ChevronRightIcon } from '@material-symbols/svg-600/outlined/chevron_right.svg'; -import { ReactComponent as ExpandMoreIcon } from '@material-symbols/svg-600/outlined/expand_more.svg'; - +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; +import ExpandMoreIcon from '@/material-icons/400-24px/expand_more.svg?react'; import { fetchServer, fetchExtendedDescription, fetchDomainBlocks } from 'mastodon/actions/server'; import Column from 'mastodon/components/column'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/account/components/follow_request_note.jsx b/app/javascript/mastodon/features/account/components/follow_request_note.jsx index 685c282df27761..d57fd030b2d9e2 100644 --- a/app/javascript/mastodon/features/account/components/follow_request_note.jsx +++ b/app/javascript/mastodon/features/account/components/follow_request_note.jsx @@ -3,9 +3,8 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/check.svg'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; - +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Icon } from 'mastodon/components/icon'; export default class FollowRequestNote extends ImmutablePureComponent { diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index 29b46cb43d4b5a..233d208c648233 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -9,13 +9,12 @@ import { NavLink, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/check.svg'; -import { ReactComponent as LockIcon } from '@material-symbols/svg-600/outlined/lock.svg'; -import { ReactComponent as MoreHorizIcon } from '@material-symbols/svg-600/outlined/more_horiz.svg'; -import { ReactComponent as NotificationsIcon } from '@material-symbols/svg-600/outlined/notifications.svg'; -import { ReactComponent as NotificationsActiveIcon } from '@material-symbols/svg-600/outlined/notifications_active-fill.svg'; -import { ReactComponent as ShareIcon } from '@material-symbols/svg-600/outlined/share.svg'; - +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react'; +import NotificationsActiveIcon from '@/material-icons/400-24px/notifications_active-fill.svg?react'; +import ShareIcon from '@/material-icons/400-24px/share.svg?react'; import { Avatar } from 'mastodon/components/avatar'; import { Badge, AutomatedBadge, GroupBadge } from 'mastodon/components/badge'; import { Button } from 'mastodon/components/button'; @@ -35,6 +34,8 @@ import FollowRequestNoteContainer from '../containers/follow_request_note_contai const messages = defineMessages({ unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' }, + followBack: { id: 'account.follow_back', defaultMessage: 'Follow back' }, + mutual: { id: 'account.mutual', defaultMessage: 'Mutual' }, cancel_follow_request: { id: 'account.cancel_follow_request', defaultMessage: 'Withdraw follow request' }, requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' }, unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, @@ -82,6 +83,20 @@ const titleFromAccount = account => { return `${prefix} (@${acct})`; }; +const messageForFollowButton = relationship => { + if(!relationship) return messages.follow; + + if (relationship.get('following') && relationship.get('followed_by')) { + return messages.mutual; + } else if (!relationship.get('following') && relationship.get('followed_by')) { + return messages.followBack; + } else if (relationship.get('following')) { + return messages.unfollow; + } else { + return messages.follow; + } +}; + const dateFormatOptions = { month: 'short', day: 'numeric', @@ -253,9 +268,7 @@ class Header extends ImmutablePureComponent { let info = []; let menu = []; - if (me !== account.get('id') && account.getIn(['relationship', 'followed_by'])) { - info.push(); - } else if (me !== account.get('id') && account.getIn(['relationship', 'blocking'])) { + if (me !== account.get('id') && account.getIn(['relationship', 'blocking'])) { info.push(); } @@ -281,7 +294,7 @@ class Header extends ImmutablePureComponent { } else if (account.getIn(['relationship', 'requested'])) { actionBtn = diff --git a/app/javascript/mastodon/features/compose/components/search_results.jsx b/app/javascript/mastodon/features/compose/components/search_results.jsx index 2667ed54377784..694deea04efb96 100644 --- a/app/javascript/mastodon/features/compose/components/search_results.jsx +++ b/app/javascript/mastodon/features/compose/components/search_results.jsx @@ -5,11 +5,10 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as FindInPageIcon } from '@material-symbols/svg-600/outlined/find_in_page.svg'; -import { ReactComponent as PeopleIcon } from '@material-symbols/svg-600/outlined/group.svg'; -import { ReactComponent as SearchIcon } from '@material-symbols/svg-600/outlined/search.svg'; -import { ReactComponent as TagIcon } from '@material-symbols/svg-600/outlined/tag.svg'; - +import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { Icon } from 'mastodon/components/icon'; import { LoadMore } from 'mastodon/components/load_more'; import { SearchSection } from 'mastodon/features/explore/components/search_section'; diff --git a/app/javascript/mastodon/features/compose/components/upload.jsx b/app/javascript/mastodon/features/compose/components/upload.jsx index a443741d5cf54d..76d394af7a41cc 100644 --- a/app/javascript/mastodon/features/compose/components/upload.jsx +++ b/app/javascript/mastodon/features/compose/components/upload.jsx @@ -5,11 +5,11 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; -import { ReactComponent as EditIcon } from '@material-symbols/svg-600/outlined/edit.svg'; -import { ReactComponent as InfoIcon } from '@material-symbols/svg-600/outlined/info.svg'; import spring from 'react-motion/lib/spring'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import InfoIcon from '@/material-icons/400-24px/info.svg?react'; import { Icon } from 'mastodon/components/icon'; import Motion from '../../ui/util/optional_motion'; diff --git a/app/javascript/mastodon/features/compose/components/upload_button.jsx b/app/javascript/mastodon/features/compose/components/upload_button.jsx index dda8a42ab082c9..923d6a3c47e458 100644 --- a/app/javascript/mastodon/features/compose/components/upload_button.jsx +++ b/app/javascript/mastodon/features/compose/components/upload_button.jsx @@ -6,7 +6,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as AddPhotoAlternateIcon } from '@material-symbols/svg-600/outlined/add_photo_alternate.svg'; +import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/compose/components/upload_progress.jsx b/app/javascript/mastodon/features/compose/components/upload_progress.jsx index 90c5142e24dd34..e4973b24fd604f 100644 --- a/app/javascript/mastodon/features/compose/components/upload_progress.jsx +++ b/app/javascript/mastodon/features/compose/components/upload_progress.jsx @@ -3,9 +3,9 @@ import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; -import { ReactComponent as UploadFileIcon } from '@material-symbols/svg-600/outlined/upload_file.svg'; import spring from 'react-motion/lib/spring'; +import UploadFileIcon from '@/material-icons/400-24px/upload_file.svg?react'; import { Icon } from 'mastodon/components/icon'; import Motion from '../../ui/util/optional_motion'; diff --git a/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js b/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js index a0e50029dfa303..8cf906b20a4913 100644 --- a/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js +++ b/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js @@ -1,6 +1,7 @@ +import { createSelector } from '@reduxjs/toolkit'; import { Map as ImmutableMap } from 'immutable'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; + import { useEmoji } from '../../../actions/emojis'; import { changeSetting } from '../../../actions/settings'; diff --git a/app/javascript/mastodon/features/compose/containers/language_dropdown_container.js b/app/javascript/mastodon/features/compose/containers/language_dropdown_container.js index e1e2f04024106f..ba4b5f05a598f7 100644 --- a/app/javascript/mastodon/features/compose/containers/language_dropdown_container.js +++ b/app/javascript/mastodon/features/compose/containers/language_dropdown_container.js @@ -1,6 +1,7 @@ +import { createSelector } from '@reduxjs/toolkit'; import { Map as ImmutableMap } from 'immutable'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; + import { changeComposeLanguage } from 'mastodon/actions/compose'; import { useLanguage } from 'mastodon/actions/languages'; diff --git a/app/javascript/mastodon/features/compose/containers/search_container.js b/app/javascript/mastodon/features/compose/containers/search_container.js index 758b6b07db9465..616b91369c63cf 100644 --- a/app/javascript/mastodon/features/compose/containers/search_container.js +++ b/app/javascript/mastodon/features/compose/containers/search_container.js @@ -1,3 +1,4 @@ +import { createSelector } from '@reduxjs/toolkit'; import { connect } from 'react-redux'; import { @@ -12,10 +13,15 @@ import { import Search from '../components/search'; +const getRecentSearches = createSelector( + state => state.getIn(['search', 'recent']), + recent => recent.reverse(), +); + const mapStateToProps = state => ({ value: state.getIn(['search', 'value']), submitted: state.getIn(['search', 'submitted']), - recent: state.getIn(['search', 'recent']).reverse(), + recent: getRecentSearches(state), }); const mapDispatchToProps = dispatch => ({ diff --git a/app/javascript/mastodon/features/compose/index.jsx b/app/javascript/mastodon/features/compose/index.jsx index e065ea0d180a22..eda337b017d9f9 100644 --- a/app/javascript/mastodon/features/compose/index.jsx +++ b/app/javascript/mastodon/features/compose/index.jsx @@ -9,15 +9,15 @@ import { Link } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as PeopleIcon } from '@material-symbols/svg-600/outlined/group.svg'; -import { ReactComponent as HomeIcon } from '@material-symbols/svg-600/outlined/home-fill.svg'; -import { ReactComponent as LogoutIcon } from '@material-symbols/svg-600/outlined/logout.svg'; -import { ReactComponent as MenuIcon } from '@material-symbols/svg-600/outlined/menu.svg'; -import { ReactComponent as NotificationsIcon } from '@material-symbols/svg-600/outlined/notifications-fill.svg'; -import { ReactComponent as PublicIcon } from '@material-symbols/svg-600/outlined/public.svg'; -import { ReactComponent as SettingsIcon } from '@material-symbols/svg-600/outlined/settings-fill.svg'; import spring from 'react-motion/lib/spring'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import LogoutIcon from '@/material-icons/400-24px/logout.svg?react'; +import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; import { openModal } from 'mastodon/actions/modal'; import Column from 'mastodon/components/column'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx b/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx index 005edc5c2b1522..274cfa69f53db3 100644 --- a/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx +++ b/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx @@ -8,10 +8,10 @@ import { Link, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as MoreHorizIcon } from '@material-symbols/svg-600/outlined/more_horiz.svg'; -import { ReactComponent as ReplyIcon } from '@material-symbols/svg-600/outlined/reply.svg'; import { HotKeys } from 'react-hotkeys'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; import AttachmentList from 'mastodon/components/attachment_list'; import AvatarComposite from 'mastodon/components/avatar_composite'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/direct_timeline/index.jsx b/app/javascript/mastodon/features/direct_timeline/index.jsx index 4e6d0c3e72ff62..af29d7a5b83257 100644 --- a/app/javascript/mastodon/features/direct_timeline/index.jsx +++ b/app/javascript/mastodon/features/direct_timeline/index.jsx @@ -7,8 +7,7 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; -import { ReactComponent as AlternateEmailIcon } from '@material-symbols/svg-600/outlined/alternate_email.svg'; - +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { mountConversations, unmountConversations, expandConversations } from 'mastodon/actions/conversations'; import { connectDirectStream } from 'mastodon/actions/streaming'; diff --git a/app/javascript/mastodon/features/directory/index.jsx b/app/javascript/mastodon/features/directory/index.jsx index 20c84d4df069f3..0d3408146e2eef 100644 --- a/app/javascript/mastodon/features/directory/index.jsx +++ b/app/javascript/mastodon/features/directory/index.jsx @@ -9,8 +9,7 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as PeopleIcon } from '@material-symbols/svg-600/outlined/group.svg'; - +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import { addColumn, removeColumn, moveColumn, changeColumnParams } from 'mastodon/actions/columns'; import { fetchDirectory, expandDirectory } from 'mastodon/actions/directory'; import Column from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/domain_blocks/index.jsx b/app/javascript/mastodon/features/domain_blocks/index.jsx index 142f14bf716617..964eada9c1e5b9 100644 --- a/app/javascript/mastodon/features/domain_blocks/index.jsx +++ b/app/javascript/mastodon/features/domain_blocks/index.jsx @@ -8,9 +8,10 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as BlockIcon } from '@material-symbols/svg-600/outlined/block-fill.svg'; import { debounce } from 'lodash'; +import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react'; + import { fetchDomainBlocks, expandDomainBlocks } from '../../actions/domain_blocks'; import { LoadingIndicator } from '../../components/loading_indicator'; import ScrollableList from '../../components/scrollable_list'; diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js index dd51dc621eac81..5918a65ed7df15 100644 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ b/app/javascript/mastodon/features/emoji/emoji.js @@ -14,8 +14,8 @@ const emojiFilenames = (emojis) => { }; // Emoji requiring extra borders depending on theme -const darkEmoji = emojiFilenames(['🎱', '🐜', 'âšĢ', '🖤', 'âŦ›', 'â—ŧī¸', '◾', 'â—ŧī¸', '✒ī¸', 'â–Ēī¸', 'đŸ’Ŗ', 'đŸŽŗ', '📷', '📸', 'â™Ŗī¸', 'đŸ•ļī¸', '✴ī¸', '🔌', '💂‍♀ī¸', 'đŸ“Ŋī¸', 'đŸŗ', 'đŸĻ', '💂', 'đŸ”Ē', 'đŸ•ŗī¸', '🕹ī¸', '🕋', '🖊ī¸', '🖋ī¸', '💂‍♂ī¸', '🎤', '🎓', 'đŸŽĨ', 'đŸŽŧ', '♠ī¸', '🎩', 'đŸĻƒ', 'đŸ“ŧ', '📹', '🎮', '🐃', '🏴', '🐞', 'đŸ•ē', '📱', '📲', '🚲']); -const lightEmoji = emojiFilenames(['đŸ‘Ŋ', '⚾', '🐔', '☁ī¸', '💨', '🕊ī¸', '👀', 'đŸĨ', 'đŸ‘ģ', '🐐', '❕', '❔', '⛸ī¸', '🌩ī¸', '🔊', '🔇', '📃', '🌧ī¸', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠ī¸', '🌨ī¸', '🔉', '🔈', 'đŸ’Ŧ', '💭', '🏐', 'đŸŗī¸', 'âšĒ', 'âŦœ', 'â—Ŋ', 'â—ģī¸', 'â–Ģī¸']); +const darkEmoji = emojiFilenames(['🎱', '🐜', 'âšĢ', '🖤', 'âŦ›', 'â—ŧī¸', '◾', 'â—ŧī¸', '✒ī¸', 'â–Ēī¸', 'đŸ’Ŗ', 'đŸŽŗ', '📷', '📸', 'â™Ŗī¸', 'đŸ•ļī¸', '✴ī¸', '🔌', '💂‍♀ī¸', 'đŸ“Ŋī¸', 'đŸŗ', 'đŸĻ', '💂', 'đŸ”Ē', 'đŸ•ŗī¸', '🕹ī¸', '🕋', '🖊ī¸', '🖋ī¸', '💂‍♂ī¸', '🎤', '🎓', 'đŸŽĨ', 'đŸŽŧ', '♠ī¸', '🎩', 'đŸĻƒ', 'đŸ“ŧ', '📹', '🎮', '🐃', '🏴', '🐞', 'đŸ•ē', '📱', '📲', '🚲', 'đŸĒŽ', 'đŸĻ‍âŦ›']); +const lightEmoji = emojiFilenames(['đŸ‘Ŋ', '⚾', '🐔', '☁ī¸', '💨', '🕊ī¸', '👀', 'đŸĨ', 'đŸ‘ģ', '🐐', '❕', '❔', '⛸ī¸', '🌩ī¸', '🔊', '🔇', '📃', '🌧ī¸', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠ī¸', '🌨ī¸', '🔉', '🔈', 'đŸ’Ŧ', '💭', '🏐', 'đŸŗī¸', 'âšĒ', 'âŦœ', 'â—Ŋ', 'â—ģī¸', 'â–Ģī¸', 'đŸĒŊ', 'đŸĒŋ']); const emojiFilename = (filename) => { const borderedEmoji = (document.body && document.body.classList.contains('theme-mastodon-light')) ? lightEmoji : darkEmoji; diff --git a/app/javascript/mastodon/features/emoji/emoji_compressed.js b/app/javascript/mastodon/features/emoji/emoji_compressed.js index 883bf21a4a7480..a4863566dad3ac 100644 --- a/app/javascript/mastodon/features/emoji/emoji_compressed.js +++ b/app/javascript/mastodon/features/emoji/emoji_compressed.js @@ -7,6 +7,10 @@ // It's designed to be emitted in an array format to take up less space // over the wire. +// This version comment should be bumped each time the emoji data is changed +// to ensure that the prevaled file is regenerated by Babel +// version: 2 + const { emojiIndex } = require('emoji-mart'); let data = require('emoji-mart/data/all.json'); const { uncompress: emojiMartUncompress } = require('emoji-mart/dist/utils/data'); @@ -15,7 +19,6 @@ const emojiMap = require('./emoji_map.json'); const { unicodeToFilename } = require('./unicode_to_filename'); const { unicodeToUnifiedName } = require('./unicode_to_unified_name'); - if(data.compressed) { data = emojiMartUncompress(data); } diff --git a/app/javascript/mastodon/features/emoji/emoji_map.json b/app/javascript/mastodon/features/emoji/emoji_map.json index 64f6615b7932f4..ddb863d1d4cd69 100644 --- a/app/javascript/mastodon/features/emoji/emoji_map.json +++ b/app/javascript/mastodon/features/emoji/emoji_map.json @@ -1 +1 @@ -{"😀":"1f600","😃":"1f603","😄":"1f604","😁":"1f601","😆":"1f606","😅":"1f605","đŸ¤Ŗ":"1f923","😂":"1f602","🙂":"1f642","🙃":"1f643","đŸĢ ":"1fae0","😉":"1f609","😊":"1f60a","😇":"1f607","đŸĨ°":"1f970","😍":"1f60d","🤩":"1f929","😘":"1f618","😗":"1f617","â˜ē":"263a","😚":"1f61a","😙":"1f619","đŸĨ˛":"1f972","😋":"1f60b","😛":"1f61b","😜":"1f61c","đŸ¤Ē":"1f92a","😝":"1f61d","🤑":"1f911","🤗":"1f917","🤭":"1f92d","đŸĢĸ":"1fae2","đŸĢŖ":"1fae3","đŸ¤Ģ":"1f92b","🤔":"1f914","đŸĢĄ":"1fae1","🤐":"1f910","🤨":"1f928","😐":"1f610","😑":"1f611","đŸ˜ļ":"1f636","đŸĢĨ":"1fae5","😏":"1f60f","😒":"1f612","🙄":"1f644","đŸ˜Ŧ":"1f62c","đŸ¤Ĩ":"1f925","😌":"1f60c","😔":"1f614","đŸ˜Ē":"1f62a","🤤":"1f924","😴":"1f634","😷":"1f637","🤒":"1f912","🤕":"1f915","đŸ¤ĸ":"1f922","🤮":"1f92e","🤧":"1f927","đŸĨĩ":"1f975","đŸĨļ":"1f976","đŸĨ´":"1f974","đŸ˜ĩ":"1f635","đŸ¤¯":"1f92f","🤠":"1f920","đŸĨŗ":"1f973","đŸĨ¸":"1f978","😎":"1f60e","🤓":"1f913","🧐":"1f9d0","😕":"1f615","đŸĢ¤":"1fae4","😟":"1f61f","🙁":"1f641","☚":"2639","😮":"1f62e","đŸ˜¯":"1f62f","😲":"1f632","đŸ˜ŗ":"1f633","đŸĨē":"1f97a","đŸĨš":"1f979","đŸ˜Ļ":"1f626","😧":"1f627","😨":"1f628","😰":"1f630","đŸ˜Ĩ":"1f625","đŸ˜ĸ":"1f622","😭":"1f62d","😱":"1f631","😖":"1f616","đŸ˜Ŗ":"1f623","😞":"1f61e","😓":"1f613","😩":"1f629","đŸ˜Ģ":"1f62b","đŸĨą":"1f971","😤":"1f624","😡":"1f621","😠":"1f620","đŸ¤Ŧ":"1f92c","😈":"1f608","đŸ‘ŋ":"1f47f","💀":"1f480","☠":"2620","💩":"1f4a9","🤡":"1f921","👹":"1f479","đŸ‘ē":"1f47a","đŸ‘ģ":"1f47b","đŸ‘Ŋ":"1f47d","👾":"1f47e","🤖":"1f916","đŸ˜ē":"1f63a","😸":"1f638","😹":"1f639","đŸ˜ģ":"1f63b","đŸ˜ŧ":"1f63c","đŸ˜Ŋ":"1f63d","🙀":"1f640","đŸ˜ŋ":"1f63f","😾":"1f63e","🙈":"1f648","🙉":"1f649","🙊":"1f64a","💋":"1f48b","💌":"1f48c","💘":"1f498","💝":"1f49d","💖":"1f496","💗":"1f497","💓":"1f493","💞":"1f49e","💕":"1f495","💟":"1f49f","âŖ":"2763","💔":"1f494","❤":"2764","🧡":"1f9e1","💛":"1f49b","💚":"1f49a","💙":"1f499","💜":"1f49c","🤎":"1f90e","🖤":"1f5a4","🤍":"1f90d","đŸ’¯":"1f4af","đŸ’ĸ":"1f4a2","đŸ’Ĩ":"1f4a5","đŸ’Ģ":"1f4ab","đŸ’Ļ":"1f4a6","💨":"1f4a8","đŸ•ŗ":"1f573","đŸ’Ŗ":"1f4a3","đŸ’Ŧ":"1f4ac","🗨":"1f5e8","đŸ—¯":"1f5ef","💭":"1f4ad","💤":"1f4a4","👋":"1f44b","🤚":"1f91a","🖐":"1f590","✋":"270b","🖖":"1f596","đŸĢą":"1faf1","đŸĢ˛":"1faf2","đŸĢŗ":"1faf3","đŸĢ´":"1faf4","👌":"1f44c","🤌":"1f90c","🤏":"1f90f","✌":"270c","🤞":"1f91e","đŸĢ°":"1faf0","🤟":"1f91f","🤘":"1f918","🤙":"1f919","👈":"1f448","👉":"1f449","👆":"1f446","🖕":"1f595","👇":"1f447","☝":"261d","đŸĢĩ":"1faf5","👍":"1f44d","👎":"1f44e","✊":"270a","👊":"1f44a","🤛":"1f91b","🤜":"1f91c","👏":"1f44f","🙌":"1f64c","đŸĢļ":"1faf6","👐":"1f450","🤲":"1f932","🤝":"1f91d","🙏":"1f64f","✍":"270d","💅":"1f485","đŸ¤ŗ":"1f933","đŸ’Ē":"1f4aa","đŸĻž":"1f9be","đŸĻŋ":"1f9bf","đŸĻĩ":"1f9b5","đŸĻļ":"1f9b6","👂":"1f442","đŸĻģ":"1f9bb","👃":"1f443","🧠":"1f9e0","đŸĢ€":"1fac0","đŸĢ":"1fac1","đŸĻˇ":"1f9b7","đŸĻ´":"1f9b4","👀":"1f440","👁":"1f441","👅":"1f445","👄":"1f444","đŸĢĻ":"1fae6","đŸ‘ļ":"1f476","🧒":"1f9d2","đŸ‘Ļ":"1f466","👧":"1f467","🧑":"1f9d1","👱":"1f471","👨":"1f468","🧔":"1f9d4","👩":"1f469","🧓":"1f9d3","👴":"1f474","đŸ‘ĩ":"1f475","🙍":"1f64d","🙎":"1f64e","🙅":"1f645","🙆":"1f646","💁":"1f481","🙋":"1f64b","🧏":"1f9cf","🙇":"1f647","đŸ¤Ļ":"1f926","🤷":"1f937","👮":"1f46e","đŸ•ĩ":"1f575","💂":"1f482","đŸĨˇ":"1f977","👷":"1f477","đŸĢ…":"1fac5","🤴":"1f934","👸":"1f478","đŸ‘ŗ":"1f473","👲":"1f472","🧕":"1f9d5","đŸ¤ĩ":"1f935","👰":"1f470","🤰":"1f930","đŸĢƒ":"1fac3","đŸĢ„":"1fac4","🤱":"1f931","đŸ‘ŧ":"1f47c","🎅":"1f385","đŸ¤ļ":"1f936","đŸĻ¸":"1f9b8","đŸĻš":"1f9b9","🧙":"1f9d9","🧚":"1f9da","🧛":"1f9db","🧜":"1f9dc","🧝":"1f9dd","🧞":"1f9de","🧟":"1f9df","🧌":"1f9cc","💆":"1f486","💇":"1f487","đŸšļ":"1f6b6","🧍":"1f9cd","🧎":"1f9ce","🏃":"1f3c3","💃":"1f483","đŸ•ē":"1f57a","🕴":"1f574","đŸ‘¯":"1f46f","🧖":"1f9d6","🧗":"1f9d7","đŸ¤ē":"1f93a","🏇":"1f3c7","⛷":"26f7","🏂":"1f3c2","🏌":"1f3cc","🏄":"1f3c4","đŸšŖ":"1f6a3","🏊":"1f3ca","⛹":"26f9","🏋":"1f3cb","🚴":"1f6b4","đŸšĩ":"1f6b5","🤸":"1f938","đŸ¤ŧ":"1f93c","đŸ¤Ŋ":"1f93d","🤾":"1f93e","🤹":"1f939","🧘":"1f9d8","🛀":"1f6c0","🛌":"1f6cc","👭":"1f46d","đŸ‘Ģ":"1f46b","đŸ‘Ŧ":"1f46c","💏":"1f48f","💑":"1f491","đŸ‘Ē":"1f46a","đŸ—Ŗ":"1f5e3","👤":"1f464","đŸ‘Ĩ":"1f465","đŸĢ‚":"1fac2","đŸ‘Ŗ":"1f463","đŸģ":"1f463","đŸŧ":"1f463","đŸŊ":"1f463","🏾":"1f463","đŸŋ":"1f463","đŸĻ°":"1f463","đŸĻą":"1f463","đŸĻŗ":"1f463","đŸĻ˛":"1f463","đŸĩ":"1f435","🐒":"1f412","đŸĻ":"1f98d","đŸĻ§":"1f9a7","đŸļ":"1f436","🐕":"1f415","đŸĻŽ":"1f9ae","🐩":"1f429","đŸē":"1f43a","đŸĻŠ":"1f98a","đŸĻ":"1f99d","🐱":"1f431","🐈":"1f408","đŸĻ":"1f981","đŸ¯":"1f42f","🐅":"1f405","🐆":"1f406","🐴":"1f434","🐎":"1f40e","đŸĻ„":"1f984","đŸĻ“":"1f993","đŸĻŒ":"1f98c","đŸĻŦ":"1f9ac","🐮":"1f42e","🐂":"1f402","🐃":"1f403","🐄":"1f404","🐷":"1f437","🐖":"1f416","🐗":"1f417","đŸŊ":"1f43d","🐏":"1f40f","🐑":"1f411","🐐":"1f410","đŸĒ":"1f42a","đŸĢ":"1f42b","đŸĻ™":"1f999","đŸĻ’":"1f992","🐘":"1f418","đŸĻŖ":"1f9a3","đŸĻ":"1f98f","đŸĻ›":"1f99b","🐭":"1f42d","🐁":"1f401","🐀":"1f400","🐹":"1f439","🐰":"1f430","🐇":"1f407","đŸŋ":"1f43f","đŸĻĢ":"1f9ab","đŸĻ”":"1f994","đŸĻ‡":"1f987","đŸģ":"1f43b","🐨":"1f428","đŸŧ":"1f43c","đŸĻĨ":"1f9a5","đŸĻĻ":"1f9a6","đŸĻ¨":"1f9a8","đŸĻ˜":"1f998","đŸĻĄ":"1f9a1","🐾":"1f43e","đŸĻƒ":"1f983","🐔":"1f414","🐓":"1f413","đŸŖ":"1f423","🐤":"1f424","đŸĨ":"1f425","đŸĻ":"1f426","🐧":"1f427","🕊":"1f54a","đŸĻ…":"1f985","đŸĻ†":"1f986","đŸĻĸ":"1f9a2","đŸĻ‰":"1f989","đŸĻ¤":"1f9a4","đŸĒļ":"1fab6","đŸĻŠ":"1f9a9","đŸĻš":"1f99a","đŸĻœ":"1f99c","🐸":"1f438","🐊":"1f40a","đŸĸ":"1f422","đŸĻŽ":"1f98e","🐍":"1f40d","🐲":"1f432","🐉":"1f409","đŸĻ•":"1f995","đŸĻ–":"1f996","đŸŗ":"1f433","🐋":"1f40b","đŸŦ":"1f42c","đŸĻ­":"1f9ad","🐟":"1f41f","🐠":"1f420","🐡":"1f421","đŸĻˆ":"1f988","🐙":"1f419","🐚":"1f41a","đŸĒ¸":"1fab8","🐌":"1f40c","đŸĻ‹":"1f98b","🐛":"1f41b","🐜":"1f41c","🐝":"1f41d","đŸĒ˛":"1fab2","🐞":"1f41e","đŸĻ—":"1f997","đŸĒŗ":"1fab3","🕷":"1f577","🕸":"1f578","đŸĻ‚":"1f982","đŸĻŸ":"1f99f","đŸĒ°":"1fab0","đŸĒą":"1fab1","đŸĻ ":"1f9a0","💐":"1f490","🌸":"1f338","💮":"1f4ae","đŸĒˇ":"1fab7","đŸĩ":"1f3f5","🌹":"1f339","đŸĨ€":"1f940","đŸŒē":"1f33a","đŸŒģ":"1f33b","đŸŒŧ":"1f33c","🌷":"1f337","🌱":"1f331","đŸĒ´":"1fab4","🌲":"1f332","đŸŒŗ":"1f333","🌴":"1f334","đŸŒĩ":"1f335","🌾":"1f33e","đŸŒŋ":"1f33f","☘":"2618","🍀":"1f340","🍁":"1f341","🍂":"1f342","🍃":"1f343","đŸĒš":"1fab9","đŸĒē":"1faba","🍇":"1f347","🍈":"1f348","🍉":"1f349","🍊":"1f34a","🍋":"1f34b","🍌":"1f34c","🍍":"1f34d","đŸĨ­":"1f96d","🍎":"1f34e","🍏":"1f34f","🍐":"1f350","🍑":"1f351","🍒":"1f352","🍓":"1f353","đŸĢ":"1fad0","đŸĨ":"1f95d","🍅":"1f345","đŸĢ’":"1fad2","đŸĨĨ":"1f965","đŸĨ‘":"1f951","🍆":"1f346","đŸĨ”":"1f954","đŸĨ•":"1f955","đŸŒŊ":"1f33d","đŸŒļ":"1f336","đŸĢ‘":"1fad1","đŸĨ’":"1f952","đŸĨŦ":"1f96c","đŸĨĻ":"1f966","🧄":"1f9c4","🧅":"1f9c5","🍄":"1f344","đŸĨœ":"1f95c","đŸĢ˜":"1fad8","🌰":"1f330","🍞":"1f35e","đŸĨ":"1f950","đŸĨ–":"1f956","đŸĢ“":"1fad3","đŸĨ¨":"1f968","đŸĨ¯":"1f96f","đŸĨž":"1f95e","🧇":"1f9c7","🧀":"1f9c0","🍖":"1f356","🍗":"1f357","đŸĨŠ":"1f969","đŸĨ“":"1f953","🍔":"1f354","🍟":"1f35f","🍕":"1f355","🌭":"1f32d","đŸĨĒ":"1f96a","🌮":"1f32e","đŸŒ¯":"1f32f","đŸĢ”":"1fad4","đŸĨ™":"1f959","🧆":"1f9c6","đŸĨš":"1f95a","đŸŗ":"1f373","đŸĨ˜":"1f958","🍲":"1f372","đŸĢ•":"1fad5","đŸĨŖ":"1f963","đŸĨ—":"1f957","đŸŋ":"1f37f","🧈":"1f9c8","🧂":"1f9c2","đŸĨĢ":"1f96b","🍱":"1f371","🍘":"1f358","🍙":"1f359","🍚":"1f35a","🍛":"1f35b","🍜":"1f35c","🍝":"1f35d","🍠":"1f360","đŸĸ":"1f362","đŸŖ":"1f363","🍤":"1f364","đŸĨ":"1f365","đŸĨŽ":"1f96e","🍡":"1f361","đŸĨŸ":"1f95f","đŸĨ ":"1f960","đŸĨĄ":"1f961","đŸĻ€":"1f980","đŸĻž":"1f99e","đŸĻ":"1f990","đŸĻ‘":"1f991","đŸĻĒ":"1f9aa","đŸĻ":"1f366","🍧":"1f367","🍨":"1f368","🍩":"1f369","đŸĒ":"1f36a","🎂":"1f382","🍰":"1f370","🧁":"1f9c1","đŸĨ§":"1f967","đŸĢ":"1f36b","đŸŦ":"1f36c","🍭":"1f36d","🍮":"1f36e","đŸ¯":"1f36f","đŸŧ":"1f37c","đŸĨ›":"1f95b","☕":"2615","đŸĢ–":"1fad6","đŸĩ":"1f375","đŸļ":"1f376","🍾":"1f37e","🍷":"1f377","🍸":"1f378","🍹":"1f379","đŸē":"1f37a","đŸģ":"1f37b","đŸĨ‚":"1f942","đŸĨƒ":"1f943","đŸĢ—":"1fad7","đŸĨ¤":"1f964","🧋":"1f9cb","🧃":"1f9c3","🧉":"1f9c9","🧊":"1f9ca","đŸĨĸ":"1f962","đŸŊ":"1f37d","🍴":"1f374","đŸĨ„":"1f944","đŸ”Ē":"1f52a","đŸĢ™":"1fad9","đŸē":"1f3fa","🌍":"1f30d","🌎":"1f30e","🌏":"1f30f","🌐":"1f310","đŸ—ē":"1f5fa","🗾":"1f5fe","🧭":"1f9ed","🏔":"1f3d4","⛰":"26f0","🌋":"1f30b","đŸ—ģ":"1f5fb","🏕":"1f3d5","🏖":"1f3d6","🏜":"1f3dc","🏝":"1f3dd","🏞":"1f3de","🏟":"1f3df","🏛":"1f3db","🏗":"1f3d7","🧱":"1f9f1","đŸĒ¨":"1faa8","đŸĒĩ":"1fab5","🛖":"1f6d6","🏘":"1f3d8","🏚":"1f3da","🏠":"1f3e0","🏡":"1f3e1","đŸĸ":"1f3e2","đŸŖ":"1f3e3","🏤":"1f3e4","đŸĨ":"1f3e5","đŸĻ":"1f3e6","🏨":"1f3e8","🏩":"1f3e9","đŸĒ":"1f3ea","đŸĢ":"1f3eb","đŸŦ":"1f3ec","🏭":"1f3ed","đŸ¯":"1f3ef","🏰":"1f3f0","💒":"1f492","đŸ—ŧ":"1f5fc","đŸ—Ŋ":"1f5fd","â›Ē":"26ea","🕌":"1f54c","🛕":"1f6d5","🕍":"1f54d","⛩":"26e9","🕋":"1f54b","⛲":"26f2","â›ē":"26fa","🌁":"1f301","🌃":"1f303","🏙":"1f3d9","🌄":"1f304","🌅":"1f305","🌆":"1f306","🌇":"1f307","🌉":"1f309","♨":"2668","🎠":"1f3a0","🛝":"1f6dd","🎡":"1f3a1","đŸŽĸ":"1f3a2","💈":"1f488","đŸŽĒ":"1f3aa","🚂":"1f682","🚃":"1f683","🚄":"1f684","🚅":"1f685","🚆":"1f686","🚇":"1f687","🚈":"1f688","🚉":"1f689","🚊":"1f68a","🚝":"1f69d","🚞":"1f69e","🚋":"1f68b","🚌":"1f68c","🚍":"1f68d","🚎":"1f68e","🚐":"1f690","🚑":"1f691","🚒":"1f692","🚓":"1f693","🚔":"1f694","🚕":"1f695","🚖":"1f696","🚗":"1f697","🚘":"1f698","🚙":"1f699","đŸ›ģ":"1f6fb","🚚":"1f69a","🚛":"1f69b","🚜":"1f69c","🏎":"1f3ce","🏍":"1f3cd","đŸ›ĩ":"1f6f5","đŸĻŊ":"1f9bd","đŸĻŧ":"1f9bc","đŸ›ē":"1f6fa","🚲":"1f6b2","🛴":"1f6f4","🛹":"1f6f9","đŸ›ŧ":"1f6fc","🚏":"1f68f","đŸ›Ŗ":"1f6e3","🛤":"1f6e4","đŸ›ĸ":"1f6e2","â›Ŋ":"26fd","🛞":"1f6de","🚨":"1f6a8","đŸšĨ":"1f6a5","đŸšĻ":"1f6a6","🛑":"1f6d1","🚧":"1f6a7","⚓":"2693","🛟":"1f6df","â›ĩ":"26f5","đŸ›ļ":"1f6f6","🚤":"1f6a4","đŸ›ŗ":"1f6f3","⛴":"26f4","đŸ›Ĩ":"1f6e5","đŸšĸ":"1f6a2","✈":"2708","🛩":"1f6e9","đŸ›Ģ":"1f6eb","đŸ›Ŧ":"1f6ec","đŸĒ‚":"1fa82","đŸ’ē":"1f4ba","🚁":"1f681","🚟":"1f69f","🚠":"1f6a0","🚡":"1f6a1","🛰":"1f6f0","🚀":"1f680","🛸":"1f6f8","🛎":"1f6ce","đŸ§ŗ":"1f9f3","⌛":"231b","âŗ":"23f3","⌚":"231a","⏰":"23f0","⏱":"23f1","⏲":"23f2","🕰":"1f570","🕛":"1f55b","🕧":"1f567","🕐":"1f550","🕜":"1f55c","🕑":"1f551","🕝":"1f55d","🕒":"1f552","🕞":"1f55e","🕓":"1f553","🕟":"1f55f","🕔":"1f554","🕠":"1f560","🕕":"1f555","🕡":"1f561","🕖":"1f556","đŸ•ĸ":"1f562","🕗":"1f557","đŸ•Ŗ":"1f563","🕘":"1f558","🕤":"1f564","🕙":"1f559","đŸ•Ĩ":"1f565","🕚":"1f55a","đŸ•Ļ":"1f566","🌑":"1f311","🌒":"1f312","🌓":"1f313","🌔":"1f314","🌕":"1f315","🌖":"1f316","🌗":"1f317","🌘":"1f318","🌙":"1f319","🌚":"1f31a","🌛":"1f31b","🌜":"1f31c","🌡":"1f321","☀":"2600","🌝":"1f31d","🌞":"1f31e","đŸĒ":"1fa90","⭐":"2b50","🌟":"1f31f","🌠":"1f320","🌌":"1f30c","☁":"2601","⛅":"26c5","⛈":"26c8","🌤":"1f324","đŸŒĨ":"1f325","đŸŒĻ":"1f326","🌧":"1f327","🌨":"1f328","🌩":"1f329","đŸŒĒ":"1f32a","đŸŒĢ":"1f32b","đŸŒŦ":"1f32c","🌀":"1f300","🌈":"1f308","🌂":"1f302","☂":"2602","☔":"2614","⛱":"26f1","⚡":"26a1","❄":"2744","☃":"2603","⛄":"26c4","☄":"2604","đŸ”Ĩ":"1f525","💧":"1f4a7","🌊":"1f30a","🎃":"1f383","🎄":"1f384","🎆":"1f386","🎇":"1f387","🧨":"1f9e8","✨":"2728","🎈":"1f388","🎉":"1f389","🎊":"1f38a","🎋":"1f38b","🎍":"1f38d","🎎":"1f38e","🎏":"1f38f","🎐":"1f390","🎑":"1f391","🧧":"1f9e7","🎀":"1f380","🎁":"1f381","🎗":"1f397","🎟":"1f39f","đŸŽĢ":"1f3ab","🎖":"1f396","🏆":"1f3c6","🏅":"1f3c5","đŸĨ‡":"1f947","đŸĨˆ":"1f948","đŸĨ‰":"1f949","âšŊ":"26bd","⚾":"26be","đŸĨŽ":"1f94e","🏀":"1f3c0","🏐":"1f3d0","🏈":"1f3c8","🏉":"1f3c9","🎾":"1f3be","đŸĨ":"1f94f","đŸŽŗ":"1f3b3","🏏":"1f3cf","🏑":"1f3d1","🏒":"1f3d2","đŸĨ":"1f94d","🏓":"1f3d3","🏸":"1f3f8","đŸĨŠ":"1f94a","đŸĨ‹":"1f94b","đŸĨ…":"1f945","â›ŗ":"26f3","⛸":"26f8","đŸŽŖ":"1f3a3","đŸ¤ŋ":"1f93f","đŸŽŊ":"1f3bd","đŸŽŋ":"1f3bf","🛷":"1f6f7","đŸĨŒ":"1f94c","đŸŽ¯":"1f3af","đŸĒ€":"1fa80","đŸĒ":"1fa81","🎱":"1f3b1","🔮":"1f52e","đŸĒ„":"1fa84","đŸ§ŋ":"1f9ff","đŸĒŦ":"1faac","🎮":"1f3ae","🕹":"1f579","🎰":"1f3b0","🎲":"1f3b2","🧩":"1f9e9","🧸":"1f9f8","đŸĒ…":"1fa85","đŸĒŠ":"1faa9","đŸĒ†":"1fa86","♠":"2660","â™Ĩ":"2665","â™Ļ":"2666","â™Ŗ":"2663","♟":"265f","🃏":"1f0cf","🀄":"1f004","🎴":"1f3b4","🎭":"1f3ad","đŸ–ŧ":"1f5bc","🎨":"1f3a8","đŸ§ĩ":"1f9f5","đŸĒĄ":"1faa1","đŸ§ļ":"1f9f6","đŸĒĸ":"1faa2","👓":"1f453","đŸ•ļ":"1f576","đŸĨŊ":"1f97d","đŸĨŧ":"1f97c","đŸĻē":"1f9ba","👔":"1f454","👕":"1f455","👖":"1f456","đŸ§Ŗ":"1f9e3","🧤":"1f9e4","đŸ§Ĩ":"1f9e5","đŸ§Ļ":"1f9e6","👗":"1f457","👘":"1f458","đŸĨģ":"1f97b","🩱":"1fa71","🩲":"1fa72","đŸŠŗ":"1fa73","👙":"1f459","👚":"1f45a","👛":"1f45b","👜":"1f45c","👝":"1f45d","🛍":"1f6cd","🎒":"1f392","🩴":"1fa74","👞":"1f45e","👟":"1f45f","đŸĨž":"1f97e","đŸĨŋ":"1f97f","👠":"1f460","👡":"1f461","🩰":"1fa70","đŸ‘ĸ":"1f462","👑":"1f451","👒":"1f452","🎩":"1f3a9","🎓":"1f393","đŸ§ĸ":"1f9e2","đŸĒ–":"1fa96","⛑":"26d1","đŸ“ŋ":"1f4ff","💄":"1f484","💍":"1f48d","💎":"1f48e","🔇":"1f507","🔈":"1f508","🔉":"1f509","🔊":"1f50a","đŸ“ĸ":"1f4e2","đŸ“Ŗ":"1f4e3","đŸ“¯":"1f4ef","🔔":"1f514","🔕":"1f515","đŸŽŧ":"1f3bc","đŸŽĩ":"1f3b5","đŸŽļ":"1f3b6","🎙":"1f399","🎚":"1f39a","🎛":"1f39b","🎤":"1f3a4","🎧":"1f3a7","đŸ“ģ":"1f4fb","🎷":"1f3b7","đŸĒ—":"1fa97","🎸":"1f3b8","🎹":"1f3b9","đŸŽē":"1f3ba","đŸŽģ":"1f3bb","đŸĒ•":"1fa95","đŸĨ":"1f941","đŸĒ˜":"1fa98","📱":"1f4f1","📲":"1f4f2","☎":"260e","📞":"1f4de","📟":"1f4df","📠":"1f4e0","🔋":"1f50b","đŸĒĢ":"1faab","🔌":"1f50c","đŸ’ģ":"1f4bb","đŸ–Ĩ":"1f5a5","🖨":"1f5a8","⌨":"2328","🖱":"1f5b1","🖲":"1f5b2","đŸ’Ŋ":"1f4bd","💾":"1f4be","đŸ’ŋ":"1f4bf","📀":"1f4c0","🧮":"1f9ee","đŸŽĨ":"1f3a5","🎞":"1f39e","đŸ“Ŋ":"1f4fd","đŸŽŦ":"1f3ac","đŸ“ē":"1f4fa","📷":"1f4f7","📸":"1f4f8","📹":"1f4f9","đŸ“ŧ":"1f4fc","🔍":"1f50d","🔎":"1f50e","đŸ•¯":"1f56f","💡":"1f4a1","đŸ”Ļ":"1f526","🏮":"1f3ee","đŸĒ”":"1fa94","📔":"1f4d4","📕":"1f4d5","📖":"1f4d6","📗":"1f4d7","📘":"1f4d8","📙":"1f4d9","📚":"1f4da","📓":"1f4d3","📒":"1f4d2","📃":"1f4c3","📜":"1f4dc","📄":"1f4c4","📰":"1f4f0","🗞":"1f5de","📑":"1f4d1","🔖":"1f516","🏷":"1f3f7","💰":"1f4b0","đŸĒ™":"1fa99","💴":"1f4b4","đŸ’ĩ":"1f4b5","đŸ’ļ":"1f4b6","💷":"1f4b7","💸":"1f4b8","đŸ’ŗ":"1f4b3","🧾":"1f9fe","💹":"1f4b9","✉":"2709","📧":"1f4e7","📨":"1f4e8","📩":"1f4e9","📤":"1f4e4","đŸ“Ĩ":"1f4e5","đŸ“Ļ":"1f4e6","đŸ“Ģ":"1f4eb","đŸ“Ē":"1f4ea","đŸ“Ŧ":"1f4ec","📭":"1f4ed","📮":"1f4ee","đŸ—ŗ":"1f5f3","✏":"270f","✒":"2712","🖋":"1f58b","🖊":"1f58a","🖌":"1f58c","🖍":"1f58d","📝":"1f4dd","đŸ’ŧ":"1f4bc","📁":"1f4c1","📂":"1f4c2","🗂":"1f5c2","📅":"1f4c5","📆":"1f4c6","🗒":"1f5d2","🗓":"1f5d3","📇":"1f4c7","📈":"1f4c8","📉":"1f4c9","📊":"1f4ca","📋":"1f4cb","📌":"1f4cc","📍":"1f4cd","📎":"1f4ce","🖇":"1f587","📏":"1f4cf","📐":"1f4d0","✂":"2702","🗃":"1f5c3","🗄":"1f5c4","🗑":"1f5d1","🔒":"1f512","🔓":"1f513","🔏":"1f50f","🔐":"1f510","🔑":"1f511","🗝":"1f5dd","🔨":"1f528","đŸĒ“":"1fa93","⛏":"26cf","⚒":"2692","🛠":"1f6e0","🗡":"1f5e1","⚔":"2694","đŸ”Ģ":"1f52b","đŸĒƒ":"1fa83","🏹":"1f3f9","🛡":"1f6e1","đŸĒš":"1fa9a","🔧":"1f527","đŸĒ›":"1fa9b","🔩":"1f529","⚙":"2699","🗜":"1f5dc","⚖":"2696","đŸĻ¯":"1f9af","🔗":"1f517","⛓":"26d3","đŸĒ":"1fa9d","🧰":"1f9f0","🧲":"1f9f2","đŸĒœ":"1fa9c","⚗":"2697","đŸ§Ē":"1f9ea","đŸ§Ģ":"1f9eb","đŸ§Ŧ":"1f9ec","đŸ”Ŧ":"1f52c","🔭":"1f52d","📡":"1f4e1","💉":"1f489","🩸":"1fa78","💊":"1f48a","🩹":"1fa79","đŸŠŧ":"1fa7c","đŸŠē":"1fa7a","đŸŠģ":"1fa7b","đŸšĒ":"1f6aa","🛗":"1f6d7","đŸĒž":"1fa9e","đŸĒŸ":"1fa9f","🛏":"1f6cf","🛋":"1f6cb","đŸĒ‘":"1fa91","đŸšŊ":"1f6bd","đŸĒ ":"1faa0","đŸšŋ":"1f6bf","🛁":"1f6c1","đŸĒ¤":"1faa4","đŸĒ’":"1fa92","🧴":"1f9f4","🧷":"1f9f7","🧹":"1f9f9","đŸ§ē":"1f9fa","đŸ§ģ":"1f9fb","đŸĒŖ":"1faa3","đŸ§ŧ":"1f9fc","đŸĢ§":"1fae7","đŸĒĨ":"1faa5","đŸ§Ŋ":"1f9fd","đŸ§¯":"1f9ef","🛒":"1f6d2","đŸšŦ":"1f6ac","⚰":"26b0","đŸĒĻ":"1faa6","⚱":"26b1","đŸ—ŋ":"1f5ff","đŸĒ§":"1faa7","đŸĒĒ":"1faaa","🏧":"1f3e7","🚮":"1f6ae","🚰":"1f6b0","â™ŋ":"267f","🚹":"1f6b9","đŸšē":"1f6ba","đŸšģ":"1f6bb","đŸšŧ":"1f6bc","🚾":"1f6be","🛂":"1f6c2","🛃":"1f6c3","🛄":"1f6c4","🛅":"1f6c5","⚠":"26a0","🚸":"1f6b8","⛔":"26d4","đŸšĢ":"1f6ab","đŸšŗ":"1f6b3","🚭":"1f6ad","đŸš¯":"1f6af","🚱":"1f6b1","🚷":"1f6b7","đŸ“ĩ":"1f4f5","🔞":"1f51e","â˜ĸ":"2622","â˜Ŗ":"2623","âŦ†":"2b06","↗":"2197","➡":"27a1","↘":"2198","âŦ‡":"2b07","↙":"2199","âŦ…":"2b05","↖":"2196","↕":"2195","↔":"2194","↩":"21a9","â†Ē":"21aa","⤴":"2934","â¤ĩ":"2935","🔃":"1f503","🔄":"1f504","🔙":"1f519","🔚":"1f51a","🔛":"1f51b","🔜":"1f51c","🔝":"1f51d","🛐":"1f6d0","⚛":"269b","🕉":"1f549","✡":"2721","☸":"2638","☯":"262f","✝":"271d","â˜Ļ":"2626","â˜Ē":"262a","☎":"262e","🕎":"1f54e","đŸ”¯":"1f52f","♈":"2648","♉":"2649","♊":"264a","♋":"264b","♌":"264c","♍":"264d","♎":"264e","♏":"264f","♐":"2650","♑":"2651","♒":"2652","♓":"2653","⛎":"26ce","🔀":"1f500","🔁":"1f501","🔂":"1f502","â–ļ":"25b6","⏊":"23e9","⏭":"23ed","⏯":"23ef","◀":"25c0","âĒ":"23ea","⏎":"23ee","đŸ”ŧ":"1f53c","âĢ":"23eb","đŸ”Ŋ":"1f53d","âŦ":"23ec","⏸":"23f8","⏚":"23f9","âē":"23fa","⏏":"23cf","đŸŽĻ":"1f3a6","🔅":"1f505","🔆":"1f506","đŸ“ļ":"1f4f6","đŸ“ŗ":"1f4f3","📴":"1f4f4","♀":"2640","♂":"2642","⚧":"26a7","✖":"2716","➕":"2795","➖":"2796","➗":"2797","🟰":"1f7f0","♾":"267e","â€ŧ":"203c","⁉":"2049","❓":"2753","❔":"2754","❕":"2755","❗":"2757","〰":"3030","💱":"1f4b1","💲":"1f4b2","⚕":"2695","â™ģ":"267b","⚜":"269c","🔱":"1f531","📛":"1f4db","🔰":"1f530","⭕":"2b55","✅":"2705","☑":"2611","✔":"2714","❌":"274c","❎":"274e","➰":"27b0","âžŋ":"27bf","ã€Ŋ":"303d","âœŗ":"2733","✴":"2734","❇":"2747","Š":"a9","ÂŽ":"ae","â„ĸ":"2122","🔟":"1f51f","🔠":"1f520","🔡":"1f521","đŸ”ĸ":"1f522","đŸ”Ŗ":"1f523","🔤":"1f524","🅰":"1f170","🆎":"1f18e","🅱":"1f171","🆑":"1f191","🆒":"1f192","🆓":"1f193","ℹ":"2139","🆔":"1f194","Ⓜ":"24c2","🆕":"1f195","🆖":"1f196","🅾":"1f17e","🆗":"1f197","đŸ…ŋ":"1f17f","🆘":"1f198","🆙":"1f199","🆚":"1f19a","🈁":"1f201","🈂":"1f202","🈷":"1f237","đŸˆļ":"1f236","đŸˆ¯":"1f22f","🉐":"1f250","🈹":"1f239","🈚":"1f21a","🈲":"1f232","🉑":"1f251","🈸":"1f238","🈴":"1f234","đŸˆŗ":"1f233","㊗":"3297","㊙":"3299","đŸˆē":"1f23a","đŸˆĩ":"1f235","🔴":"1f534","🟠":"1f7e0","🟡":"1f7e1","đŸŸĸ":"1f7e2","đŸ”ĩ":"1f535","đŸŸŖ":"1f7e3","🟤":"1f7e4","âšĢ":"26ab","âšĒ":"26aa","đŸŸĨ":"1f7e5","🟧":"1f7e7","🟨":"1f7e8","🟩":"1f7e9","đŸŸĻ":"1f7e6","đŸŸĒ":"1f7ea","đŸŸĢ":"1f7eb","âŦ›":"2b1b","âŦœ":"2b1c","â—ŧ":"25fc","â—ģ":"25fb","◾":"25fe","â—Ŋ":"25fd","â–Ē":"25aa","â–Ģ":"25ab","đŸ”ļ":"1f536","🔷":"1f537","🔸":"1f538","🔹":"1f539","đŸ”ē":"1f53a","đŸ”ģ":"1f53b","💠":"1f4a0","🔘":"1f518","đŸ”ŗ":"1f533","🔲":"1f532","🏁":"1f3c1","🚩":"1f6a9","🎌":"1f38c","🏴":"1f3f4","đŸŗ":"1f3f3","â˜ēī¸":"263a","☚ī¸":"2639","☠ī¸":"2620","âŖī¸":"2763","❤ī¸":"2764","đŸ•ŗī¸":"1f573","🗨ī¸":"1f5e8","đŸ—¯ī¸":"1f5ef","👋đŸģ":"1f44b-1f3fb","👋đŸŧ":"1f44b-1f3fc","👋đŸŊ":"1f44b-1f3fd","👋🏾":"1f44b-1f3fe","👋đŸŋ":"1f44b-1f3ff","🤚đŸģ":"1f91a-1f3fb","🤚đŸŧ":"1f91a-1f3fc","🤚đŸŊ":"1f91a-1f3fd","🤚🏾":"1f91a-1f3fe","🤚đŸŋ":"1f91a-1f3ff","🖐ī¸":"1f590","🖐đŸģ":"1f590-1f3fb","🖐đŸŧ":"1f590-1f3fc","🖐đŸŊ":"1f590-1f3fd","🖐🏾":"1f590-1f3fe","🖐đŸŋ":"1f590-1f3ff","✋đŸģ":"270b-1f3fb","✋đŸŧ":"270b-1f3fc","✋đŸŊ":"270b-1f3fd","✋🏾":"270b-1f3fe","✋đŸŋ":"270b-1f3ff","🖖đŸģ":"1f596-1f3fb","🖖đŸŧ":"1f596-1f3fc","🖖đŸŊ":"1f596-1f3fd","🖖🏾":"1f596-1f3fe","🖖đŸŋ":"1f596-1f3ff","đŸĢąđŸģ":"1faf1-1f3fb","đŸĢąđŸŧ":"1faf1-1f3fc","đŸĢąđŸŊ":"1faf1-1f3fd","đŸĢąđŸž":"1faf1-1f3fe","đŸĢąđŸŋ":"1faf1-1f3ff","đŸĢ˛đŸģ":"1faf2-1f3fb","đŸĢ˛đŸŧ":"1faf2-1f3fc","đŸĢ˛đŸŊ":"1faf2-1f3fd","đŸĢ˛đŸž":"1faf2-1f3fe","đŸĢ˛đŸŋ":"1faf2-1f3ff","đŸĢŗđŸģ":"1faf3-1f3fb","đŸĢŗđŸŧ":"1faf3-1f3fc","đŸĢŗđŸŊ":"1faf3-1f3fd","đŸĢŗ🏾":"1faf3-1f3fe","đŸĢŗđŸŋ":"1faf3-1f3ff","đŸĢ´đŸģ":"1faf4-1f3fb","đŸĢ´đŸŧ":"1faf4-1f3fc","đŸĢ´đŸŊ":"1faf4-1f3fd","đŸĢ´đŸž":"1faf4-1f3fe","đŸĢ´đŸŋ":"1faf4-1f3ff","👌đŸģ":"1f44c-1f3fb","👌đŸŧ":"1f44c-1f3fc","👌đŸŊ":"1f44c-1f3fd","👌🏾":"1f44c-1f3fe","👌đŸŋ":"1f44c-1f3ff","🤌đŸģ":"1f90c-1f3fb","🤌đŸŧ":"1f90c-1f3fc","🤌đŸŊ":"1f90c-1f3fd","🤌🏾":"1f90c-1f3fe","🤌đŸŋ":"1f90c-1f3ff","🤏đŸģ":"1f90f-1f3fb","🤏đŸŧ":"1f90f-1f3fc","🤏đŸŊ":"1f90f-1f3fd","🤏🏾":"1f90f-1f3fe","🤏đŸŋ":"1f90f-1f3ff","✌ī¸":"270c","✌đŸģ":"270c-1f3fb","✌đŸŧ":"270c-1f3fc","✌đŸŊ":"270c-1f3fd","✌🏾":"270c-1f3fe","✌đŸŋ":"270c-1f3ff","🤞đŸģ":"1f91e-1f3fb","🤞đŸŧ":"1f91e-1f3fc","🤞đŸŊ":"1f91e-1f3fd","🤞🏾":"1f91e-1f3fe","🤞đŸŋ":"1f91e-1f3ff","đŸĢ°đŸģ":"1faf0-1f3fb","đŸĢ°đŸŧ":"1faf0-1f3fc","đŸĢ°đŸŊ":"1faf0-1f3fd","đŸĢ°đŸž":"1faf0-1f3fe","đŸĢ°đŸŋ":"1faf0-1f3ff","🤟đŸģ":"1f91f-1f3fb","🤟đŸŧ":"1f91f-1f3fc","🤟đŸŊ":"1f91f-1f3fd","🤟🏾":"1f91f-1f3fe","🤟đŸŋ":"1f91f-1f3ff","🤘đŸģ":"1f918-1f3fb","🤘đŸŧ":"1f918-1f3fc","🤘đŸŊ":"1f918-1f3fd","🤘🏾":"1f918-1f3fe","🤘đŸŋ":"1f918-1f3ff","🤙đŸģ":"1f919-1f3fb","🤙đŸŧ":"1f919-1f3fc","🤙đŸŊ":"1f919-1f3fd","🤙🏾":"1f919-1f3fe","🤙đŸŋ":"1f919-1f3ff","👈đŸģ":"1f448-1f3fb","👈đŸŧ":"1f448-1f3fc","👈đŸŊ":"1f448-1f3fd","👈🏾":"1f448-1f3fe","👈đŸŋ":"1f448-1f3ff","👉đŸģ":"1f449-1f3fb","👉đŸŧ":"1f449-1f3fc","👉đŸŊ":"1f449-1f3fd","👉🏾":"1f449-1f3fe","👉đŸŋ":"1f449-1f3ff","👆đŸģ":"1f446-1f3fb","👆đŸŧ":"1f446-1f3fc","👆đŸŊ":"1f446-1f3fd","👆🏾":"1f446-1f3fe","👆đŸŋ":"1f446-1f3ff","🖕đŸģ":"1f595-1f3fb","🖕đŸŧ":"1f595-1f3fc","🖕đŸŊ":"1f595-1f3fd","🖕🏾":"1f595-1f3fe","🖕đŸŋ":"1f595-1f3ff","👇đŸģ":"1f447-1f3fb","👇đŸŧ":"1f447-1f3fc","👇đŸŊ":"1f447-1f3fd","👇🏾":"1f447-1f3fe","👇đŸŋ":"1f447-1f3ff","☝ī¸":"261d","☝đŸģ":"261d-1f3fb","☝đŸŧ":"261d-1f3fc","☝đŸŊ":"261d-1f3fd","☝🏾":"261d-1f3fe","☝đŸŋ":"261d-1f3ff","đŸĢĩđŸģ":"1faf5-1f3fb","đŸĢĩđŸŧ":"1faf5-1f3fc","đŸĢĩđŸŊ":"1faf5-1f3fd","đŸĢĩ🏾":"1faf5-1f3fe","đŸĢĩđŸŋ":"1faf5-1f3ff","👍đŸģ":"1f44d-1f3fb","👍đŸŧ":"1f44d-1f3fc","👍đŸŊ":"1f44d-1f3fd","👍🏾":"1f44d-1f3fe","👍đŸŋ":"1f44d-1f3ff","👎đŸģ":"1f44e-1f3fb","👎đŸŧ":"1f44e-1f3fc","👎đŸŊ":"1f44e-1f3fd","👎🏾":"1f44e-1f3fe","👎đŸŋ":"1f44e-1f3ff","✊đŸģ":"270a-1f3fb","✊đŸŧ":"270a-1f3fc","✊đŸŊ":"270a-1f3fd","✊🏾":"270a-1f3fe","✊đŸŋ":"270a-1f3ff","👊đŸģ":"1f44a-1f3fb","👊đŸŧ":"1f44a-1f3fc","👊đŸŊ":"1f44a-1f3fd","👊🏾":"1f44a-1f3fe","👊đŸŋ":"1f44a-1f3ff","🤛đŸģ":"1f91b-1f3fb","🤛đŸŧ":"1f91b-1f3fc","🤛đŸŊ":"1f91b-1f3fd","🤛🏾":"1f91b-1f3fe","🤛đŸŋ":"1f91b-1f3ff","🤜đŸģ":"1f91c-1f3fb","🤜đŸŧ":"1f91c-1f3fc","🤜đŸŊ":"1f91c-1f3fd","🤜🏾":"1f91c-1f3fe","🤜đŸŋ":"1f91c-1f3ff","👏đŸģ":"1f44f-1f3fb","👏đŸŧ":"1f44f-1f3fc","👏đŸŊ":"1f44f-1f3fd","👏🏾":"1f44f-1f3fe","👏đŸŋ":"1f44f-1f3ff","🙌đŸģ":"1f64c-1f3fb","🙌đŸŧ":"1f64c-1f3fc","🙌đŸŊ":"1f64c-1f3fd","🙌🏾":"1f64c-1f3fe","🙌đŸŋ":"1f64c-1f3ff","đŸĢļđŸģ":"1faf6-1f3fb","đŸĢļđŸŧ":"1faf6-1f3fc","đŸĢļđŸŊ":"1faf6-1f3fd","đŸĢļ🏾":"1faf6-1f3fe","đŸĢļđŸŋ":"1faf6-1f3ff","👐đŸģ":"1f450-1f3fb","👐đŸŧ":"1f450-1f3fc","👐đŸŊ":"1f450-1f3fd","👐🏾":"1f450-1f3fe","👐đŸŋ":"1f450-1f3ff","🤲đŸģ":"1f932-1f3fb","🤲đŸŧ":"1f932-1f3fc","🤲đŸŊ":"1f932-1f3fd","🤲🏾":"1f932-1f3fe","🤲đŸŋ":"1f932-1f3ff","🤝đŸģ":"1f91d-1f3fb","🤝đŸŧ":"1f91d-1f3fc","🤝đŸŊ":"1f91d-1f3fd","🤝🏾":"1f91d-1f3fe","🤝đŸŋ":"1f91d-1f3ff","🙏đŸģ":"1f64f-1f3fb","🙏đŸŧ":"1f64f-1f3fc","🙏đŸŊ":"1f64f-1f3fd","🙏🏾":"1f64f-1f3fe","🙏đŸŋ":"1f64f-1f3ff","✍ī¸":"270d","✍đŸģ":"270d-1f3fb","✍đŸŧ":"270d-1f3fc","✍đŸŊ":"270d-1f3fd","✍🏾":"270d-1f3fe","✍đŸŋ":"270d-1f3ff","💅đŸģ":"1f485-1f3fb","💅đŸŧ":"1f485-1f3fc","💅đŸŊ":"1f485-1f3fd","💅🏾":"1f485-1f3fe","💅đŸŋ":"1f485-1f3ff","đŸ¤ŗđŸģ":"1f933-1f3fb","đŸ¤ŗđŸŧ":"1f933-1f3fc","đŸ¤ŗđŸŊ":"1f933-1f3fd","đŸ¤ŗ🏾":"1f933-1f3fe","đŸ¤ŗđŸŋ":"1f933-1f3ff","đŸ’ĒđŸģ":"1f4aa-1f3fb","đŸ’ĒđŸŧ":"1f4aa-1f3fc","đŸ’ĒđŸŊ":"1f4aa-1f3fd","đŸ’Ē🏾":"1f4aa-1f3fe","đŸ’ĒđŸŋ":"1f4aa-1f3ff","đŸĻĩđŸģ":"1f9b5-1f3fb","đŸĻĩđŸŧ":"1f9b5-1f3fc","đŸĻĩđŸŊ":"1f9b5-1f3fd","đŸĻĩ🏾":"1f9b5-1f3fe","đŸĻĩđŸŋ":"1f9b5-1f3ff","đŸĻļđŸģ":"1f9b6-1f3fb","đŸĻļđŸŧ":"1f9b6-1f3fc","đŸĻļđŸŊ":"1f9b6-1f3fd","đŸĻļ🏾":"1f9b6-1f3fe","đŸĻļđŸŋ":"1f9b6-1f3ff","👂đŸģ":"1f442-1f3fb","👂đŸŧ":"1f442-1f3fc","👂đŸŊ":"1f442-1f3fd","👂🏾":"1f442-1f3fe","👂đŸŋ":"1f442-1f3ff","đŸĻģđŸģ":"1f9bb-1f3fb","đŸĻģđŸŧ":"1f9bb-1f3fc","đŸĻģđŸŊ":"1f9bb-1f3fd","đŸĻģ🏾":"1f9bb-1f3fe","đŸĻģđŸŋ":"1f9bb-1f3ff","👃đŸģ":"1f443-1f3fb","👃đŸŧ":"1f443-1f3fc","👃đŸŊ":"1f443-1f3fd","👃🏾":"1f443-1f3fe","👃đŸŋ":"1f443-1f3ff","👁ī¸":"1f441","đŸ‘ļđŸģ":"1f476-1f3fb","đŸ‘ļđŸŧ":"1f476-1f3fc","đŸ‘ļđŸŊ":"1f476-1f3fd","đŸ‘ļ🏾":"1f476-1f3fe","đŸ‘ļđŸŋ":"1f476-1f3ff","🧒đŸģ":"1f9d2-1f3fb","🧒đŸŧ":"1f9d2-1f3fc","🧒đŸŊ":"1f9d2-1f3fd","🧒🏾":"1f9d2-1f3fe","🧒đŸŋ":"1f9d2-1f3ff","đŸ‘ĻđŸģ":"1f466-1f3fb","đŸ‘ĻđŸŧ":"1f466-1f3fc","đŸ‘ĻđŸŊ":"1f466-1f3fd","đŸ‘Ļ🏾":"1f466-1f3fe","đŸ‘ĻđŸŋ":"1f466-1f3ff","👧đŸģ":"1f467-1f3fb","👧đŸŧ":"1f467-1f3fc","👧đŸŊ":"1f467-1f3fd","👧🏾":"1f467-1f3fe","👧đŸŋ":"1f467-1f3ff","🧑đŸģ":"1f9d1-1f3fb","🧑đŸŧ":"1f9d1-1f3fc","🧑đŸŊ":"1f9d1-1f3fd","🧑🏾":"1f9d1-1f3fe","🧑đŸŋ":"1f9d1-1f3ff","👱đŸģ":"1f471-1f3fb","👱đŸŧ":"1f471-1f3fc","👱đŸŊ":"1f471-1f3fd","👱🏾":"1f471-1f3fe","👱đŸŋ":"1f471-1f3ff","👨đŸģ":"1f468-1f3fb","👨đŸŧ":"1f468-1f3fc","👨đŸŊ":"1f468-1f3fd","👨🏾":"1f468-1f3fe","👨đŸŋ":"1f468-1f3ff","🧔đŸģ":"1f9d4-1f3fb","🧔đŸŧ":"1f9d4-1f3fc","🧔đŸŊ":"1f9d4-1f3fd","🧔🏾":"1f9d4-1f3fe","🧔đŸŋ":"1f9d4-1f3ff","👩đŸģ":"1f469-1f3fb","👩đŸŧ":"1f469-1f3fc","👩đŸŊ":"1f469-1f3fd","👩🏾":"1f469-1f3fe","👩đŸŋ":"1f469-1f3ff","🧓đŸģ":"1f9d3-1f3fb","🧓đŸŧ":"1f9d3-1f3fc","🧓đŸŊ":"1f9d3-1f3fd","🧓🏾":"1f9d3-1f3fe","🧓đŸŋ":"1f9d3-1f3ff","👴đŸģ":"1f474-1f3fb","👴đŸŧ":"1f474-1f3fc","👴đŸŊ":"1f474-1f3fd","👴🏾":"1f474-1f3fe","👴đŸŋ":"1f474-1f3ff","đŸ‘ĩđŸģ":"1f475-1f3fb","đŸ‘ĩđŸŧ":"1f475-1f3fc","đŸ‘ĩđŸŊ":"1f475-1f3fd","đŸ‘ĩ🏾":"1f475-1f3fe","đŸ‘ĩđŸŋ":"1f475-1f3ff","🙍đŸģ":"1f64d-1f3fb","🙍đŸŧ":"1f64d-1f3fc","🙍đŸŊ":"1f64d-1f3fd","🙍🏾":"1f64d-1f3fe","🙍đŸŋ":"1f64d-1f3ff","🙎đŸģ":"1f64e-1f3fb","🙎đŸŧ":"1f64e-1f3fc","🙎đŸŊ":"1f64e-1f3fd","🙎🏾":"1f64e-1f3fe","🙎đŸŋ":"1f64e-1f3ff","🙅đŸģ":"1f645-1f3fb","🙅đŸŧ":"1f645-1f3fc","🙅đŸŊ":"1f645-1f3fd","🙅🏾":"1f645-1f3fe","🙅đŸŋ":"1f645-1f3ff","🙆đŸģ":"1f646-1f3fb","🙆đŸŧ":"1f646-1f3fc","🙆đŸŊ":"1f646-1f3fd","🙆🏾":"1f646-1f3fe","🙆đŸŋ":"1f646-1f3ff","💁đŸģ":"1f481-1f3fb","💁đŸŧ":"1f481-1f3fc","💁đŸŊ":"1f481-1f3fd","💁🏾":"1f481-1f3fe","💁đŸŋ":"1f481-1f3ff","🙋đŸģ":"1f64b-1f3fb","🙋đŸŧ":"1f64b-1f3fc","🙋đŸŊ":"1f64b-1f3fd","🙋🏾":"1f64b-1f3fe","🙋đŸŋ":"1f64b-1f3ff","🧏đŸģ":"1f9cf-1f3fb","🧏đŸŧ":"1f9cf-1f3fc","🧏đŸŊ":"1f9cf-1f3fd","🧏🏾":"1f9cf-1f3fe","🧏đŸŋ":"1f9cf-1f3ff","🙇đŸģ":"1f647-1f3fb","🙇đŸŧ":"1f647-1f3fc","🙇đŸŊ":"1f647-1f3fd","🙇🏾":"1f647-1f3fe","🙇đŸŋ":"1f647-1f3ff","đŸ¤ĻđŸģ":"1f926-1f3fb","đŸ¤ĻđŸŧ":"1f926-1f3fc","đŸ¤ĻđŸŊ":"1f926-1f3fd","đŸ¤Ļ🏾":"1f926-1f3fe","đŸ¤ĻđŸŋ":"1f926-1f3ff","🤷đŸģ":"1f937-1f3fb","🤷đŸŧ":"1f937-1f3fc","🤷đŸŊ":"1f937-1f3fd","🤷🏾":"1f937-1f3fe","🤷đŸŋ":"1f937-1f3ff","👮đŸģ":"1f46e-1f3fb","👮đŸŧ":"1f46e-1f3fc","👮đŸŊ":"1f46e-1f3fd","👮🏾":"1f46e-1f3fe","👮đŸŋ":"1f46e-1f3ff","đŸ•ĩī¸":"1f575","đŸ•ĩđŸģ":"1f575-1f3fb","đŸ•ĩđŸŧ":"1f575-1f3fc","đŸ•ĩđŸŊ":"1f575-1f3fd","đŸ•ĩ🏾":"1f575-1f3fe","đŸ•ĩđŸŋ":"1f575-1f3ff","💂đŸģ":"1f482-1f3fb","💂đŸŧ":"1f482-1f3fc","💂đŸŊ":"1f482-1f3fd","💂🏾":"1f482-1f3fe","💂đŸŋ":"1f482-1f3ff","đŸĨˇđŸģ":"1f977-1f3fb","đŸĨˇđŸŧ":"1f977-1f3fc","đŸĨˇđŸŊ":"1f977-1f3fd","đŸĨˇđŸž":"1f977-1f3fe","đŸĨˇđŸŋ":"1f977-1f3ff","👷đŸģ":"1f477-1f3fb","👷đŸŧ":"1f477-1f3fc","👷đŸŊ":"1f477-1f3fd","👷🏾":"1f477-1f3fe","👷đŸŋ":"1f477-1f3ff","đŸĢ…đŸģ":"1fac5-1f3fb","đŸĢ…đŸŧ":"1fac5-1f3fc","đŸĢ…đŸŊ":"1fac5-1f3fd","đŸĢ…đŸž":"1fac5-1f3fe","đŸĢ…đŸŋ":"1fac5-1f3ff","🤴đŸģ":"1f934-1f3fb","🤴đŸŧ":"1f934-1f3fc","🤴đŸŊ":"1f934-1f3fd","🤴🏾":"1f934-1f3fe","🤴đŸŋ":"1f934-1f3ff","👸đŸģ":"1f478-1f3fb","👸đŸŧ":"1f478-1f3fc","👸đŸŊ":"1f478-1f3fd","👸🏾":"1f478-1f3fe","👸đŸŋ":"1f478-1f3ff","đŸ‘ŗđŸģ":"1f473-1f3fb","đŸ‘ŗđŸŧ":"1f473-1f3fc","đŸ‘ŗđŸŊ":"1f473-1f3fd","đŸ‘ŗ🏾":"1f473-1f3fe","đŸ‘ŗđŸŋ":"1f473-1f3ff","👲đŸģ":"1f472-1f3fb","👲đŸŧ":"1f472-1f3fc","👲đŸŊ":"1f472-1f3fd","👲🏾":"1f472-1f3fe","👲đŸŋ":"1f472-1f3ff","🧕đŸģ":"1f9d5-1f3fb","🧕đŸŧ":"1f9d5-1f3fc","🧕đŸŊ":"1f9d5-1f3fd","🧕🏾":"1f9d5-1f3fe","🧕đŸŋ":"1f9d5-1f3ff","đŸ¤ĩđŸģ":"1f935-1f3fb","đŸ¤ĩđŸŧ":"1f935-1f3fc","đŸ¤ĩđŸŊ":"1f935-1f3fd","đŸ¤ĩ🏾":"1f935-1f3fe","đŸ¤ĩđŸŋ":"1f935-1f3ff","👰đŸģ":"1f470-1f3fb","👰đŸŧ":"1f470-1f3fc","👰đŸŊ":"1f470-1f3fd","👰🏾":"1f470-1f3fe","👰đŸŋ":"1f470-1f3ff","🤰đŸģ":"1f930-1f3fb","🤰đŸŧ":"1f930-1f3fc","🤰đŸŊ":"1f930-1f3fd","🤰🏾":"1f930-1f3fe","🤰đŸŋ":"1f930-1f3ff","đŸĢƒđŸģ":"1fac3-1f3fb","đŸĢƒđŸŧ":"1fac3-1f3fc","đŸĢƒđŸŊ":"1fac3-1f3fd","đŸĢƒđŸž":"1fac3-1f3fe","đŸĢƒđŸŋ":"1fac3-1f3ff","đŸĢ„đŸģ":"1fac4-1f3fb","đŸĢ„đŸŧ":"1fac4-1f3fc","đŸĢ„đŸŊ":"1fac4-1f3fd","đŸĢ„đŸž":"1fac4-1f3fe","đŸĢ„đŸŋ":"1fac4-1f3ff","🤱đŸģ":"1f931-1f3fb","🤱đŸŧ":"1f931-1f3fc","🤱đŸŊ":"1f931-1f3fd","🤱🏾":"1f931-1f3fe","🤱đŸŋ":"1f931-1f3ff","đŸ‘ŧđŸģ":"1f47c-1f3fb","đŸ‘ŧđŸŧ":"1f47c-1f3fc","đŸ‘ŧđŸŊ":"1f47c-1f3fd","đŸ‘ŧ🏾":"1f47c-1f3fe","đŸ‘ŧđŸŋ":"1f47c-1f3ff","🎅đŸģ":"1f385-1f3fb","🎅đŸŧ":"1f385-1f3fc","🎅đŸŊ":"1f385-1f3fd","🎅🏾":"1f385-1f3fe","🎅đŸŋ":"1f385-1f3ff","đŸ¤ļđŸģ":"1f936-1f3fb","đŸ¤ļđŸŧ":"1f936-1f3fc","đŸ¤ļđŸŊ":"1f936-1f3fd","đŸ¤ļ🏾":"1f936-1f3fe","đŸ¤ļđŸŋ":"1f936-1f3ff","đŸĻ¸đŸģ":"1f9b8-1f3fb","đŸĻ¸đŸŧ":"1f9b8-1f3fc","đŸĻ¸đŸŊ":"1f9b8-1f3fd","đŸĻ¸đŸž":"1f9b8-1f3fe","đŸĻ¸đŸŋ":"1f9b8-1f3ff","đŸĻšđŸģ":"1f9b9-1f3fb","đŸĻšđŸŧ":"1f9b9-1f3fc","đŸĻšđŸŊ":"1f9b9-1f3fd","đŸĻšđŸž":"1f9b9-1f3fe","đŸĻšđŸŋ":"1f9b9-1f3ff","🧙đŸģ":"1f9d9-1f3fb","🧙đŸŧ":"1f9d9-1f3fc","🧙đŸŊ":"1f9d9-1f3fd","🧙🏾":"1f9d9-1f3fe","🧙đŸŋ":"1f9d9-1f3ff","🧚đŸģ":"1f9da-1f3fb","🧚đŸŧ":"1f9da-1f3fc","🧚đŸŊ":"1f9da-1f3fd","🧚🏾":"1f9da-1f3fe","🧚đŸŋ":"1f9da-1f3ff","🧛đŸģ":"1f9db-1f3fb","🧛đŸŧ":"1f9db-1f3fc","🧛đŸŊ":"1f9db-1f3fd","🧛🏾":"1f9db-1f3fe","🧛đŸŋ":"1f9db-1f3ff","🧜đŸģ":"1f9dc-1f3fb","🧜đŸŧ":"1f9dc-1f3fc","🧜đŸŊ":"1f9dc-1f3fd","🧜🏾":"1f9dc-1f3fe","🧜đŸŋ":"1f9dc-1f3ff","🧝đŸģ":"1f9dd-1f3fb","🧝đŸŧ":"1f9dd-1f3fc","🧝đŸŊ":"1f9dd-1f3fd","🧝🏾":"1f9dd-1f3fe","🧝đŸŋ":"1f9dd-1f3ff","💆đŸģ":"1f486-1f3fb","💆đŸŧ":"1f486-1f3fc","💆đŸŊ":"1f486-1f3fd","💆🏾":"1f486-1f3fe","💆đŸŋ":"1f486-1f3ff","💇đŸģ":"1f487-1f3fb","💇đŸŧ":"1f487-1f3fc","💇đŸŊ":"1f487-1f3fd","💇🏾":"1f487-1f3fe","💇đŸŋ":"1f487-1f3ff","đŸšļđŸģ":"1f6b6-1f3fb","đŸšļđŸŧ":"1f6b6-1f3fc","đŸšļđŸŊ":"1f6b6-1f3fd","đŸšļ🏾":"1f6b6-1f3fe","đŸšļđŸŋ":"1f6b6-1f3ff","🧍đŸģ":"1f9cd-1f3fb","🧍đŸŧ":"1f9cd-1f3fc","🧍đŸŊ":"1f9cd-1f3fd","🧍🏾":"1f9cd-1f3fe","🧍đŸŋ":"1f9cd-1f3ff","🧎đŸģ":"1f9ce-1f3fb","🧎đŸŧ":"1f9ce-1f3fc","🧎đŸŊ":"1f9ce-1f3fd","🧎🏾":"1f9ce-1f3fe","🧎đŸŋ":"1f9ce-1f3ff","🏃đŸģ":"1f3c3-1f3fb","🏃đŸŧ":"1f3c3-1f3fc","🏃đŸŊ":"1f3c3-1f3fd","🏃🏾":"1f3c3-1f3fe","🏃đŸŋ":"1f3c3-1f3ff","💃đŸģ":"1f483-1f3fb","💃đŸŧ":"1f483-1f3fc","💃đŸŊ":"1f483-1f3fd","💃🏾":"1f483-1f3fe","💃đŸŋ":"1f483-1f3ff","đŸ•ēđŸģ":"1f57a-1f3fb","đŸ•ēđŸŧ":"1f57a-1f3fc","đŸ•ēđŸŊ":"1f57a-1f3fd","đŸ•ē🏾":"1f57a-1f3fe","đŸ•ēđŸŋ":"1f57a-1f3ff","🕴ī¸":"1f574","🕴đŸģ":"1f574-1f3fb","🕴đŸŧ":"1f574-1f3fc","🕴đŸŊ":"1f574-1f3fd","🕴🏾":"1f574-1f3fe","🕴đŸŋ":"1f574-1f3ff","🧖đŸģ":"1f9d6-1f3fb","🧖đŸŧ":"1f9d6-1f3fc","🧖đŸŊ":"1f9d6-1f3fd","🧖🏾":"1f9d6-1f3fe","🧖đŸŋ":"1f9d6-1f3ff","🧗đŸģ":"1f9d7-1f3fb","🧗đŸŧ":"1f9d7-1f3fc","🧗đŸŊ":"1f9d7-1f3fd","🧗🏾":"1f9d7-1f3fe","🧗đŸŋ":"1f9d7-1f3ff","🏇đŸģ":"1f3c7-1f3fb","🏇đŸŧ":"1f3c7-1f3fc","🏇đŸŊ":"1f3c7-1f3fd","🏇🏾":"1f3c7-1f3fe","🏇đŸŋ":"1f3c7-1f3ff","⛷ī¸":"26f7","🏂đŸģ":"1f3c2-1f3fb","🏂đŸŧ":"1f3c2-1f3fc","🏂đŸŊ":"1f3c2-1f3fd","🏂🏾":"1f3c2-1f3fe","🏂đŸŋ":"1f3c2-1f3ff","🏌ī¸":"1f3cc","🏌đŸģ":"1f3cc-1f3fb","🏌đŸŧ":"1f3cc-1f3fc","🏌đŸŊ":"1f3cc-1f3fd","🏌🏾":"1f3cc-1f3fe","🏌đŸŋ":"1f3cc-1f3ff","🏄đŸģ":"1f3c4-1f3fb","🏄đŸŧ":"1f3c4-1f3fc","🏄đŸŊ":"1f3c4-1f3fd","🏄🏾":"1f3c4-1f3fe","🏄đŸŋ":"1f3c4-1f3ff","đŸšŖđŸģ":"1f6a3-1f3fb","đŸšŖđŸŧ":"1f6a3-1f3fc","đŸšŖđŸŊ":"1f6a3-1f3fd","đŸšŖ🏾":"1f6a3-1f3fe","đŸšŖđŸŋ":"1f6a3-1f3ff","🏊đŸģ":"1f3ca-1f3fb","🏊đŸŧ":"1f3ca-1f3fc","🏊đŸŊ":"1f3ca-1f3fd","🏊🏾":"1f3ca-1f3fe","🏊đŸŋ":"1f3ca-1f3ff","⛹ī¸":"26f9","⛹đŸģ":"26f9-1f3fb","⛹đŸŧ":"26f9-1f3fc","⛹đŸŊ":"26f9-1f3fd","⛹🏾":"26f9-1f3fe","⛹đŸŋ":"26f9-1f3ff","🏋ī¸":"1f3cb","🏋đŸģ":"1f3cb-1f3fb","🏋đŸŧ":"1f3cb-1f3fc","🏋đŸŊ":"1f3cb-1f3fd","🏋🏾":"1f3cb-1f3fe","🏋đŸŋ":"1f3cb-1f3ff","🚴đŸģ":"1f6b4-1f3fb","🚴đŸŧ":"1f6b4-1f3fc","🚴đŸŊ":"1f6b4-1f3fd","🚴🏾":"1f6b4-1f3fe","🚴đŸŋ":"1f6b4-1f3ff","đŸšĩđŸģ":"1f6b5-1f3fb","đŸšĩđŸŧ":"1f6b5-1f3fc","đŸšĩđŸŊ":"1f6b5-1f3fd","đŸšĩ🏾":"1f6b5-1f3fe","đŸšĩđŸŋ":"1f6b5-1f3ff","🤸đŸģ":"1f938-1f3fb","🤸đŸŧ":"1f938-1f3fc","🤸đŸŊ":"1f938-1f3fd","🤸🏾":"1f938-1f3fe","🤸đŸŋ":"1f938-1f3ff","đŸ¤ŊđŸģ":"1f93d-1f3fb","đŸ¤ŊđŸŧ":"1f93d-1f3fc","đŸ¤ŊđŸŊ":"1f93d-1f3fd","đŸ¤Ŋ🏾":"1f93d-1f3fe","đŸ¤ŊđŸŋ":"1f93d-1f3ff","🤾đŸģ":"1f93e-1f3fb","🤾đŸŧ":"1f93e-1f3fc","🤾đŸŊ":"1f93e-1f3fd","🤾🏾":"1f93e-1f3fe","🤾đŸŋ":"1f93e-1f3ff","🤹đŸģ":"1f939-1f3fb","🤹đŸŧ":"1f939-1f3fc","🤹đŸŊ":"1f939-1f3fd","🤹🏾":"1f939-1f3fe","🤹đŸŋ":"1f939-1f3ff","🧘đŸģ":"1f9d8-1f3fb","🧘đŸŧ":"1f9d8-1f3fc","🧘đŸŊ":"1f9d8-1f3fd","🧘🏾":"1f9d8-1f3fe","🧘đŸŋ":"1f9d8-1f3ff","🛀đŸģ":"1f6c0-1f3fb","🛀đŸŧ":"1f6c0-1f3fc","🛀đŸŊ":"1f6c0-1f3fd","🛀🏾":"1f6c0-1f3fe","🛀đŸŋ":"1f6c0-1f3ff","🛌đŸģ":"1f6cc-1f3fb","🛌đŸŧ":"1f6cc-1f3fc","🛌đŸŊ":"1f6cc-1f3fd","🛌🏾":"1f6cc-1f3fe","🛌đŸŋ":"1f6cc-1f3ff","👭đŸģ":"1f46d-1f3fb","👭đŸŧ":"1f46d-1f3fc","👭đŸŊ":"1f46d-1f3fd","👭🏾":"1f46d-1f3fe","👭đŸŋ":"1f46d-1f3ff","đŸ‘ĢđŸģ":"1f46b-1f3fb","đŸ‘ĢđŸŧ":"1f46b-1f3fc","đŸ‘ĢđŸŊ":"1f46b-1f3fd","đŸ‘Ģ🏾":"1f46b-1f3fe","đŸ‘ĢđŸŋ":"1f46b-1f3ff","đŸ‘ŦđŸģ":"1f46c-1f3fb","đŸ‘ŦđŸŧ":"1f46c-1f3fc","đŸ‘ŦđŸŊ":"1f46c-1f3fd","đŸ‘Ŧ🏾":"1f46c-1f3fe","đŸ‘ŦđŸŋ":"1f46c-1f3ff","💏đŸģ":"1f48f-1f3fb","💏đŸŧ":"1f48f-1f3fc","💏đŸŊ":"1f48f-1f3fd","💏🏾":"1f48f-1f3fe","💏đŸŋ":"1f48f-1f3ff","💑đŸģ":"1f491-1f3fb","💑đŸŧ":"1f491-1f3fc","💑đŸŊ":"1f491-1f3fd","💑🏾":"1f491-1f3fe","💑đŸŋ":"1f491-1f3ff","đŸ—Ŗī¸":"1f5e3","đŸŋī¸":"1f43f","🕊ī¸":"1f54a","🕷ī¸":"1f577","🕸ī¸":"1f578","đŸĩī¸":"1f3f5","☘ī¸":"2618","đŸŒļī¸":"1f336","đŸŊī¸":"1f37d","đŸ—ēī¸":"1f5fa","🏔ī¸":"1f3d4","⛰ī¸":"26f0","🏕ī¸":"1f3d5","🏖ī¸":"1f3d6","🏜ī¸":"1f3dc","🏝ī¸":"1f3dd","🏞ī¸":"1f3de","🏟ī¸":"1f3df","🏛ī¸":"1f3db","🏗ī¸":"1f3d7","🏘ī¸":"1f3d8","🏚ī¸":"1f3da","⛩ī¸":"26e9","🏙ī¸":"1f3d9","♨ī¸":"2668","🏎ī¸":"1f3ce","🏍ī¸":"1f3cd","đŸ›Ŗī¸":"1f6e3","🛤ī¸":"1f6e4","đŸ›ĸī¸":"1f6e2","đŸ›ŗī¸":"1f6f3","⛴ī¸":"26f4","đŸ›Ĩī¸":"1f6e5","✈ī¸":"2708","🛩ī¸":"1f6e9","🛰ī¸":"1f6f0","🛎ī¸":"1f6ce","⏱ī¸":"23f1","⏲ī¸":"23f2","🕰ī¸":"1f570","🌡ī¸":"1f321","☀ī¸":"2600","☁ī¸":"2601","⛈ī¸":"26c8","🌤ī¸":"1f324","đŸŒĨī¸":"1f325","đŸŒĻī¸":"1f326","🌧ī¸":"1f327","🌨ī¸":"1f328","🌩ī¸":"1f329","đŸŒĒī¸":"1f32a","đŸŒĢī¸":"1f32b","đŸŒŦī¸":"1f32c","☂ī¸":"2602","⛱ī¸":"26f1","❄ī¸":"2744","☃ī¸":"2603","☄ī¸":"2604","🎗ī¸":"1f397","🎟ī¸":"1f39f","🎖ī¸":"1f396","⛸ī¸":"26f8","🕹ī¸":"1f579","♠ī¸":"2660","â™Ĩī¸":"2665","â™Ļī¸":"2666","â™Ŗī¸":"2663","♟ī¸":"265f","đŸ–ŧī¸":"1f5bc","đŸ•ļī¸":"1f576","🛍ī¸":"1f6cd","⛑ī¸":"26d1","🎙ī¸":"1f399","🎚ī¸":"1f39a","🎛ī¸":"1f39b","☎ī¸":"260e","đŸ–Ĩī¸":"1f5a5","🖨ī¸":"1f5a8","⌨ī¸":"2328","🖱ī¸":"1f5b1","🖲ī¸":"1f5b2","🎞ī¸":"1f39e","đŸ“Ŋī¸":"1f4fd","đŸ•¯ī¸":"1f56f","🗞ī¸":"1f5de","🏷ī¸":"1f3f7","✉ī¸":"2709","đŸ—ŗī¸":"1f5f3","✏ī¸":"270f","✒ī¸":"2712","🖋ī¸":"1f58b","🖊ī¸":"1f58a","🖌ī¸":"1f58c","🖍ī¸":"1f58d","🗂ī¸":"1f5c2","🗒ī¸":"1f5d2","🗓ī¸":"1f5d3","🖇ī¸":"1f587","✂ī¸":"2702","🗃ī¸":"1f5c3","🗄ī¸":"1f5c4","🗑ī¸":"1f5d1","🗝ī¸":"1f5dd","⛏ī¸":"26cf","⚒ī¸":"2692","🛠ī¸":"1f6e0","🗡ī¸":"1f5e1","⚔ī¸":"2694","🛡ī¸":"1f6e1","⚙ī¸":"2699","🗜ī¸":"1f5dc","⚖ī¸":"2696","⛓ī¸":"26d3","⚗ī¸":"2697","🛏ī¸":"1f6cf","🛋ī¸":"1f6cb","⚰ī¸":"26b0","⚱ī¸":"26b1","⚠ī¸":"26a0","â˜ĸī¸":"2622","â˜Ŗī¸":"2623","âŦ†ī¸":"2b06","↗ī¸":"2197","➡ī¸":"27a1","↘ī¸":"2198","âŦ‡ī¸":"2b07","↙ī¸":"2199","âŦ…ī¸":"2b05","↖ī¸":"2196","↕ī¸":"2195","↔ī¸":"2194","↩ī¸":"21a9","â†Ēī¸":"21aa","⤴ī¸":"2934","â¤ĩī¸":"2935","⚛ī¸":"269b","🕉ī¸":"1f549","✡ī¸":"2721","☸ī¸":"2638","☯ī¸":"262f","✝ī¸":"271d","â˜Ļī¸":"2626","â˜Ēī¸":"262a","☎ī¸":"262e","â–ļī¸":"25b6","⏭ī¸":"23ed","⏯ī¸":"23ef","◀ī¸":"25c0","⏎ī¸":"23ee","⏸ī¸":"23f8","⏚ī¸":"23f9","âēī¸":"23fa","⏏ī¸":"23cf","♀ī¸":"2640","♂ī¸":"2642","⚧ī¸":"26a7","✖ī¸":"2716","♾ī¸":"267e","â€ŧī¸":"203c","⁉ī¸":"2049","〰ī¸":"3030","⚕ī¸":"2695","â™ģī¸":"267b","⚜ī¸":"269c","☑ī¸":"2611","✔ī¸":"2714","ã€Ŋī¸":"303d","âœŗī¸":"2733","✴ī¸":"2734","❇ī¸":"2747","Šī¸":"a9","ÂŽī¸":"ae","â„ĸī¸":"2122","#âƒŖ":"23-20e3","*âƒŖ":"2a-20e3","0âƒŖ":"30-20e3","1âƒŖ":"31-20e3","2âƒŖ":"32-20e3","3âƒŖ":"33-20e3","4âƒŖ":"34-20e3","5âƒŖ":"35-20e3","6âƒŖ":"36-20e3","7âƒŖ":"37-20e3","8âƒŖ":"38-20e3","9âƒŖ":"39-20e3","🅰ī¸":"1f170","🅱ī¸":"1f171","ℹī¸":"2139","Ⓜī¸":"24c2","🅾ī¸":"1f17e","đŸ…ŋī¸":"1f17f","🈂ī¸":"1f202","🈷ī¸":"1f237","㊗ī¸":"3297","㊙ī¸":"3299","â—ŧī¸":"25fc","â—ģī¸":"25fb","â–Ēī¸":"25aa","â–Ģī¸":"25ab","đŸŗī¸":"1f3f3","đŸ‡Ļ🇨":"1f1e6-1f1e8","đŸ‡Ļ🇩":"1f1e6-1f1e9","đŸ‡ĻđŸ‡Ē":"1f1e6-1f1ea","đŸ‡ĻđŸ‡Ģ":"1f1e6-1f1eb","đŸ‡ĻđŸ‡Ŧ":"1f1e6-1f1ec","đŸ‡Ļ🇮":"1f1e6-1f1ee","đŸ‡Ļ🇱":"1f1e6-1f1f1","đŸ‡Ļ🇲":"1f1e6-1f1f2","đŸ‡Ļ🇴":"1f1e6-1f1f4","đŸ‡ĻđŸ‡ļ":"1f1e6-1f1f6","đŸ‡Ļ🇷":"1f1e6-1f1f7","đŸ‡Ļ🇸":"1f1e6-1f1f8","đŸ‡Ļ🇹":"1f1e6-1f1f9","đŸ‡ĻđŸ‡ē":"1f1e6-1f1fa","đŸ‡ĻđŸ‡ŧ":"1f1e6-1f1fc","đŸ‡ĻđŸ‡Ŋ":"1f1e6-1f1fd","đŸ‡ĻđŸ‡ŋ":"1f1e6-1f1ff","🇧đŸ‡Ļ":"1f1e7-1f1e6","🇧🇧":"1f1e7-1f1e7","🇧🇩":"1f1e7-1f1e9","🇧đŸ‡Ē":"1f1e7-1f1ea","🇧đŸ‡Ģ":"1f1e7-1f1eb","🇧đŸ‡Ŧ":"1f1e7-1f1ec","🇧🇭":"1f1e7-1f1ed","🇧🇮":"1f1e7-1f1ee","đŸ‡§đŸ‡¯":"1f1e7-1f1ef","🇧🇱":"1f1e7-1f1f1","🇧🇲":"1f1e7-1f1f2","🇧đŸ‡ŗ":"1f1e7-1f1f3","🇧🇴":"1f1e7-1f1f4","🇧đŸ‡ļ":"1f1e7-1f1f6","🇧🇷":"1f1e7-1f1f7","🇧🇸":"1f1e7-1f1f8","🇧🇹":"1f1e7-1f1f9","🇧đŸ‡ģ":"1f1e7-1f1fb","🇧đŸ‡ŧ":"1f1e7-1f1fc","🇧🇾":"1f1e7-1f1fe","🇧đŸ‡ŋ":"1f1e7-1f1ff","🇨đŸ‡Ļ":"1f1e8-1f1e6","🇨🇨":"1f1e8-1f1e8","🇨🇩":"1f1e8-1f1e9","🇨đŸ‡Ģ":"1f1e8-1f1eb","🇨đŸ‡Ŧ":"1f1e8-1f1ec","🇨🇭":"1f1e8-1f1ed","🇨🇮":"1f1e8-1f1ee","🇨🇰":"1f1e8-1f1f0","🇨🇱":"1f1e8-1f1f1","🇨🇲":"1f1e8-1f1f2","🇨đŸ‡ŗ":"1f1e8-1f1f3","🇨🇴":"1f1e8-1f1f4","🇨đŸ‡ĩ":"1f1e8-1f1f5","🇨🇷":"1f1e8-1f1f7","🇨đŸ‡ē":"1f1e8-1f1fa","🇨đŸ‡ģ":"1f1e8-1f1fb","🇨đŸ‡ŧ":"1f1e8-1f1fc","🇨đŸ‡Ŋ":"1f1e8-1f1fd","🇨🇾":"1f1e8-1f1fe","🇨đŸ‡ŋ":"1f1e8-1f1ff","🇩đŸ‡Ē":"1f1e9-1f1ea","🇩đŸ‡Ŧ":"1f1e9-1f1ec","đŸ‡ŠđŸ‡¯":"1f1e9-1f1ef","🇩🇰":"1f1e9-1f1f0","🇩🇲":"1f1e9-1f1f2","🇩🇴":"1f1e9-1f1f4","🇩đŸ‡ŋ":"1f1e9-1f1ff","đŸ‡ĒđŸ‡Ļ":"1f1ea-1f1e6","đŸ‡Ē🇨":"1f1ea-1f1e8","đŸ‡ĒđŸ‡Ē":"1f1ea-1f1ea","đŸ‡ĒđŸ‡Ŧ":"1f1ea-1f1ec","đŸ‡Ē🇭":"1f1ea-1f1ed","đŸ‡Ē🇷":"1f1ea-1f1f7","đŸ‡Ē🇸":"1f1ea-1f1f8","đŸ‡Ē🇹":"1f1ea-1f1f9","đŸ‡ĒđŸ‡ē":"1f1ea-1f1fa","đŸ‡Ģ🇮":"1f1eb-1f1ee","đŸ‡ĢđŸ‡¯":"1f1eb-1f1ef","đŸ‡Ģ🇰":"1f1eb-1f1f0","đŸ‡Ģ🇲":"1f1eb-1f1f2","đŸ‡Ģ🇴":"1f1eb-1f1f4","đŸ‡Ģ🇷":"1f1eb-1f1f7","đŸ‡ŦđŸ‡Ļ":"1f1ec-1f1e6","đŸ‡Ŧ🇧":"1f1ec-1f1e7","đŸ‡Ŧ🇩":"1f1ec-1f1e9","đŸ‡ŦđŸ‡Ē":"1f1ec-1f1ea","đŸ‡ŦđŸ‡Ģ":"1f1ec-1f1eb","đŸ‡ŦđŸ‡Ŧ":"1f1ec-1f1ec","đŸ‡Ŧ🇭":"1f1ec-1f1ed","đŸ‡Ŧ🇮":"1f1ec-1f1ee","đŸ‡Ŧ🇱":"1f1ec-1f1f1","đŸ‡Ŧ🇲":"1f1ec-1f1f2","đŸ‡ŦđŸ‡ŗ":"1f1ec-1f1f3","đŸ‡ŦđŸ‡ĩ":"1f1ec-1f1f5","đŸ‡ŦđŸ‡ļ":"1f1ec-1f1f6","đŸ‡Ŧ🇷":"1f1ec-1f1f7","đŸ‡Ŧ🇸":"1f1ec-1f1f8","đŸ‡Ŧ🇹":"1f1ec-1f1f9","đŸ‡ŦđŸ‡ē":"1f1ec-1f1fa","đŸ‡ŦđŸ‡ŧ":"1f1ec-1f1fc","đŸ‡Ŧ🇾":"1f1ec-1f1fe","🇭🇰":"1f1ed-1f1f0","🇭🇲":"1f1ed-1f1f2","🇭đŸ‡ŗ":"1f1ed-1f1f3","🇭🇷":"1f1ed-1f1f7","🇭🇹":"1f1ed-1f1f9","🇭đŸ‡ē":"1f1ed-1f1fa","🇮🇨":"1f1ee-1f1e8","🇮🇩":"1f1ee-1f1e9","🇮đŸ‡Ē":"1f1ee-1f1ea","🇮🇱":"1f1ee-1f1f1","🇮🇲":"1f1ee-1f1f2","🇮đŸ‡ŗ":"1f1ee-1f1f3","🇮🇴":"1f1ee-1f1f4","🇮đŸ‡ļ":"1f1ee-1f1f6","🇮🇷":"1f1ee-1f1f7","🇮🇸":"1f1ee-1f1f8","🇮🇹":"1f1ee-1f1f9","đŸ‡¯đŸ‡Ē":"1f1ef-1f1ea","đŸ‡¯đŸ‡˛":"1f1ef-1f1f2","đŸ‡¯đŸ‡´":"1f1ef-1f1f4","đŸ‡¯đŸ‡ĩ":"1f1ef-1f1f5","🇰đŸ‡Ē":"1f1f0-1f1ea","🇰đŸ‡Ŧ":"1f1f0-1f1ec","🇰🇭":"1f1f0-1f1ed","🇰🇮":"1f1f0-1f1ee","🇰🇲":"1f1f0-1f1f2","🇰đŸ‡ŗ":"1f1f0-1f1f3","🇰đŸ‡ĩ":"1f1f0-1f1f5","🇰🇷":"1f1f0-1f1f7","🇰đŸ‡ŧ":"1f1f0-1f1fc","🇰🇾":"1f1f0-1f1fe","🇰đŸ‡ŋ":"1f1f0-1f1ff","🇱đŸ‡Ļ":"1f1f1-1f1e6","🇱🇧":"1f1f1-1f1e7","🇱🇨":"1f1f1-1f1e8","🇱🇮":"1f1f1-1f1ee","🇱🇰":"1f1f1-1f1f0","🇱🇷":"1f1f1-1f1f7","🇱🇸":"1f1f1-1f1f8","🇱🇹":"1f1f1-1f1f9","🇱đŸ‡ē":"1f1f1-1f1fa","🇱đŸ‡ģ":"1f1f1-1f1fb","🇱🇾":"1f1f1-1f1fe","🇲đŸ‡Ļ":"1f1f2-1f1e6","🇲🇨":"1f1f2-1f1e8","🇲🇩":"1f1f2-1f1e9","🇲đŸ‡Ē":"1f1f2-1f1ea","🇲đŸ‡Ģ":"1f1f2-1f1eb","🇲đŸ‡Ŧ":"1f1f2-1f1ec","🇲🇭":"1f1f2-1f1ed","🇲🇰":"1f1f2-1f1f0","🇲🇱":"1f1f2-1f1f1","🇲🇲":"1f1f2-1f1f2","🇲đŸ‡ŗ":"1f1f2-1f1f3","🇲🇴":"1f1f2-1f1f4","🇲đŸ‡ĩ":"1f1f2-1f1f5","🇲đŸ‡ļ":"1f1f2-1f1f6","🇲🇷":"1f1f2-1f1f7","🇲🇸":"1f1f2-1f1f8","🇲🇹":"1f1f2-1f1f9","🇲đŸ‡ē":"1f1f2-1f1fa","🇲đŸ‡ģ":"1f1f2-1f1fb","🇲đŸ‡ŧ":"1f1f2-1f1fc","🇲đŸ‡Ŋ":"1f1f2-1f1fd","🇲🇾":"1f1f2-1f1fe","🇲đŸ‡ŋ":"1f1f2-1f1ff","đŸ‡ŗđŸ‡Ļ":"1f1f3-1f1e6","đŸ‡ŗ🇨":"1f1f3-1f1e8","đŸ‡ŗđŸ‡Ē":"1f1f3-1f1ea","đŸ‡ŗđŸ‡Ģ":"1f1f3-1f1eb","đŸ‡ŗđŸ‡Ŧ":"1f1f3-1f1ec","đŸ‡ŗ🇮":"1f1f3-1f1ee","đŸ‡ŗ🇱":"1f1f3-1f1f1","đŸ‡ŗ🇴":"1f1f3-1f1f4","đŸ‡ŗđŸ‡ĩ":"1f1f3-1f1f5","đŸ‡ŗ🇷":"1f1f3-1f1f7","đŸ‡ŗđŸ‡ē":"1f1f3-1f1fa","đŸ‡ŗđŸ‡ŋ":"1f1f3-1f1ff","🇴🇲":"1f1f4-1f1f2","đŸ‡ĩđŸ‡Ļ":"1f1f5-1f1e6","đŸ‡ĩđŸ‡Ē":"1f1f5-1f1ea","đŸ‡ĩđŸ‡Ģ":"1f1f5-1f1eb","đŸ‡ĩđŸ‡Ŧ":"1f1f5-1f1ec","đŸ‡ĩ🇭":"1f1f5-1f1ed","đŸ‡ĩ🇰":"1f1f5-1f1f0","đŸ‡ĩ🇱":"1f1f5-1f1f1","đŸ‡ĩ🇲":"1f1f5-1f1f2","đŸ‡ĩđŸ‡ŗ":"1f1f5-1f1f3","đŸ‡ĩ🇷":"1f1f5-1f1f7","đŸ‡ĩ🇸":"1f1f5-1f1f8","đŸ‡ĩ🇹":"1f1f5-1f1f9","đŸ‡ĩđŸ‡ŧ":"1f1f5-1f1fc","đŸ‡ĩ🇾":"1f1f5-1f1fe","đŸ‡ļđŸ‡Ļ":"1f1f6-1f1e6","🇷đŸ‡Ē":"1f1f7-1f1ea","🇷🇴":"1f1f7-1f1f4","🇷🇸":"1f1f7-1f1f8","🇷đŸ‡ē":"1f1f7-1f1fa","🇷đŸ‡ŧ":"1f1f7-1f1fc","🇸đŸ‡Ļ":"1f1f8-1f1e6","🇸🇧":"1f1f8-1f1e7","🇸🇨":"1f1f8-1f1e8","🇸🇩":"1f1f8-1f1e9","🇸đŸ‡Ē":"1f1f8-1f1ea","🇸đŸ‡Ŧ":"1f1f8-1f1ec","🇸🇭":"1f1f8-1f1ed","🇸🇮":"1f1f8-1f1ee","đŸ‡¸đŸ‡¯":"1f1f8-1f1ef","🇸🇰":"1f1f8-1f1f0","🇸🇱":"1f1f8-1f1f1","🇸🇲":"1f1f8-1f1f2","🇸đŸ‡ŗ":"1f1f8-1f1f3","🇸🇴":"1f1f8-1f1f4","🇸🇷":"1f1f8-1f1f7","🇸🇸":"1f1f8-1f1f8","🇸🇹":"1f1f8-1f1f9","🇸đŸ‡ģ":"1f1f8-1f1fb","🇸đŸ‡Ŋ":"1f1f8-1f1fd","🇸🇾":"1f1f8-1f1fe","🇸đŸ‡ŋ":"1f1f8-1f1ff","🇹đŸ‡Ļ":"1f1f9-1f1e6","🇹🇨":"1f1f9-1f1e8","🇹🇩":"1f1f9-1f1e9","🇹đŸ‡Ģ":"1f1f9-1f1eb","🇹đŸ‡Ŧ":"1f1f9-1f1ec","🇹🇭":"1f1f9-1f1ed","đŸ‡šđŸ‡¯":"1f1f9-1f1ef","🇹🇰":"1f1f9-1f1f0","🇹🇱":"1f1f9-1f1f1","🇹🇲":"1f1f9-1f1f2","🇹đŸ‡ŗ":"1f1f9-1f1f3","🇹🇴":"1f1f9-1f1f4","🇹🇷":"1f1f9-1f1f7","🇹🇹":"1f1f9-1f1f9","🇹đŸ‡ģ":"1f1f9-1f1fb","🇹đŸ‡ŧ":"1f1f9-1f1fc","🇹đŸ‡ŋ":"1f1f9-1f1ff","đŸ‡ēđŸ‡Ļ":"1f1fa-1f1e6","đŸ‡ēđŸ‡Ŧ":"1f1fa-1f1ec","đŸ‡ē🇲":"1f1fa-1f1f2","đŸ‡ēđŸ‡ŗ":"1f1fa-1f1f3","đŸ‡ē🇸":"1f1fa-1f1f8","đŸ‡ē🇾":"1f1fa-1f1fe","đŸ‡ēđŸ‡ŋ":"1f1fa-1f1ff","đŸ‡ģđŸ‡Ļ":"1f1fb-1f1e6","đŸ‡ģ🇨":"1f1fb-1f1e8","đŸ‡ģđŸ‡Ē":"1f1fb-1f1ea","đŸ‡ģđŸ‡Ŧ":"1f1fb-1f1ec","đŸ‡ģ🇮":"1f1fb-1f1ee","đŸ‡ģđŸ‡ŗ":"1f1fb-1f1f3","đŸ‡ģđŸ‡ē":"1f1fb-1f1fa","đŸ‡ŧđŸ‡Ģ":"1f1fc-1f1eb","đŸ‡ŧ🇸":"1f1fc-1f1f8","đŸ‡Ŋ🇰":"1f1fd-1f1f0","🇾đŸ‡Ē":"1f1fe-1f1ea","🇾🇹":"1f1fe-1f1f9","đŸ‡ŋđŸ‡Ļ":"1f1ff-1f1e6","đŸ‡ŋ🇲":"1f1ff-1f1f2","đŸ‡ŋđŸ‡ŧ":"1f1ff-1f1fc","đŸ˜ļ‍đŸŒĢ":"1f636-200d-1f32b-fe0f","😮‍💨":"1f62e-200d-1f4a8","đŸ˜ĩ‍đŸ’Ģ":"1f635-200d-1f4ab","❤‍đŸ”Ĩ":"2764-fe0f-200d-1f525","❤‍🩹":"2764-fe0f-200d-1fa79","👁‍🗨":"1f441-200d-1f5e8","🧔‍♂":"1f9d4-200d-2642-fe0f","🧔‍♀":"1f9d4-200d-2640-fe0f","👨‍đŸĻ°":"1f468-200d-1f9b0","👨‍đŸĻą":"1f468-200d-1f9b1","👨‍đŸĻŗ":"1f468-200d-1f9b3","👨‍đŸĻ˛":"1f468-200d-1f9b2","👩‍đŸĻ°":"1f469-200d-1f9b0","🧑‍đŸĻ°":"1f9d1-200d-1f9b0","👩‍đŸĻą":"1f469-200d-1f9b1","🧑‍đŸĻą":"1f9d1-200d-1f9b1","👩‍đŸĻŗ":"1f469-200d-1f9b3","🧑‍đŸĻŗ":"1f9d1-200d-1f9b3","👩‍đŸĻ˛":"1f469-200d-1f9b2","🧑‍đŸĻ˛":"1f9d1-200d-1f9b2","👱‍♀":"1f471-200d-2640-fe0f","👱‍♂":"1f471-200d-2642-fe0f","🙍‍♂":"1f64d-200d-2642-fe0f","🙍‍♀":"1f64d-200d-2640-fe0f","🙎‍♂":"1f64e-200d-2642-fe0f","🙎‍♀":"1f64e-200d-2640-fe0f","🙅‍♂":"1f645-200d-2642-fe0f","🙅‍♀":"1f645-200d-2640-fe0f","🙆‍♂":"1f646-200d-2642-fe0f","🙆‍♀":"1f646-200d-2640-fe0f","💁‍♂":"1f481-200d-2642-fe0f","💁‍♀":"1f481-200d-2640-fe0f","🙋‍♂":"1f64b-200d-2642-fe0f","🙋‍♀":"1f64b-200d-2640-fe0f","🧏‍♂":"1f9cf-200d-2642-fe0f","🧏‍♀":"1f9cf-200d-2640-fe0f","🙇‍♂":"1f647-200d-2642-fe0f","🙇‍♀":"1f647-200d-2640-fe0f","đŸ¤Ļ‍♂":"1f926-200d-2642-fe0f","đŸ¤Ļ‍♀":"1f926-200d-2640-fe0f","🤷‍♂":"1f937-200d-2642-fe0f","🤷‍♀":"1f937-200d-2640-fe0f","🧑‍⚕":"1f9d1-200d-2695-fe0f","👨‍⚕":"1f468-200d-2695-fe0f","👩‍⚕":"1f469-200d-2695-fe0f","🧑‍🎓":"1f9d1-200d-1f393","👨‍🎓":"1f468-200d-1f393","👩‍🎓":"1f469-200d-1f393","🧑‍đŸĢ":"1f9d1-200d-1f3eb","👨‍đŸĢ":"1f468-200d-1f3eb","👩‍đŸĢ":"1f469-200d-1f3eb","🧑‍⚖":"1f9d1-200d-2696-fe0f","👨‍⚖":"1f468-200d-2696-fe0f","👩‍⚖":"1f469-200d-2696-fe0f","🧑‍🌾":"1f9d1-200d-1f33e","👨‍🌾":"1f468-200d-1f33e","👩‍🌾":"1f469-200d-1f33e","🧑‍đŸŗ":"1f9d1-200d-1f373","👨‍đŸŗ":"1f468-200d-1f373","👩‍đŸŗ":"1f469-200d-1f373","🧑‍🔧":"1f9d1-200d-1f527","👨‍🔧":"1f468-200d-1f527","👩‍🔧":"1f469-200d-1f527","🧑‍🏭":"1f9d1-200d-1f3ed","👨‍🏭":"1f468-200d-1f3ed","👩‍🏭":"1f469-200d-1f3ed","🧑‍đŸ’ŧ":"1f9d1-200d-1f4bc","👨‍đŸ’ŧ":"1f468-200d-1f4bc","👩‍đŸ’ŧ":"1f469-200d-1f4bc","🧑‍đŸ”Ŧ":"1f9d1-200d-1f52c","👨‍đŸ”Ŧ":"1f468-200d-1f52c","👩‍đŸ”Ŧ":"1f469-200d-1f52c","🧑‍đŸ’ģ":"1f9d1-200d-1f4bb","👨‍đŸ’ģ":"1f468-200d-1f4bb","👩‍đŸ’ģ":"1f469-200d-1f4bb","🧑‍🎤":"1f9d1-200d-1f3a4","👨‍🎤":"1f468-200d-1f3a4","👩‍🎤":"1f469-200d-1f3a4","🧑‍🎨":"1f9d1-200d-1f3a8","👨‍🎨":"1f468-200d-1f3a8","👩‍🎨":"1f469-200d-1f3a8","🧑‍✈":"1f9d1-200d-2708-fe0f","👨‍✈":"1f468-200d-2708-fe0f","👩‍✈":"1f469-200d-2708-fe0f","🧑‍🚀":"1f9d1-200d-1f680","👨‍🚀":"1f468-200d-1f680","👩‍🚀":"1f469-200d-1f680","🧑‍🚒":"1f9d1-200d-1f692","👨‍🚒":"1f468-200d-1f692","👩‍🚒":"1f469-200d-1f692","👮‍♂":"1f46e-200d-2642-fe0f","👮‍♀":"1f46e-200d-2640-fe0f","đŸ•ĩ‍♂":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩ‍♀":"1f575-fe0f-200d-2640-fe0f","💂‍♂":"1f482-200d-2642-fe0f","💂‍♀":"1f482-200d-2640-fe0f","👷‍♂":"1f477-200d-2642-fe0f","👷‍♀":"1f477-200d-2640-fe0f","đŸ‘ŗ‍♂":"1f473-200d-2642-fe0f","đŸ‘ŗ‍♀":"1f473-200d-2640-fe0f","đŸ¤ĩ‍♂":"1f935-200d-2642-fe0f","đŸ¤ĩ‍♀":"1f935-200d-2640-fe0f","👰‍♂":"1f470-200d-2642-fe0f","👰‍♀":"1f470-200d-2640-fe0f","👩‍đŸŧ":"1f469-200d-1f37c","👨‍đŸŧ":"1f468-200d-1f37c","🧑‍đŸŧ":"1f9d1-200d-1f37c","🧑‍🎄":"1f9d1-200d-1f384","đŸĻ¸â€â™‚":"1f9b8-200d-2642-fe0f","đŸĻ¸â€â™€":"1f9b8-200d-2640-fe0f","đŸĻšâ€â™‚":"1f9b9-200d-2642-fe0f","đŸĻšâ€â™€":"1f9b9-200d-2640-fe0f","🧙‍♂":"1f9d9-200d-2642-fe0f","🧙‍♀":"1f9d9-200d-2640-fe0f","🧚‍♂":"1f9da-200d-2642-fe0f","🧚‍♀":"1f9da-200d-2640-fe0f","🧛‍♂":"1f9db-200d-2642-fe0f","🧛‍♀":"1f9db-200d-2640-fe0f","🧜‍♂":"1f9dc-200d-2642-fe0f","🧜‍♀":"1f9dc-200d-2640-fe0f","🧝‍♂":"1f9dd-200d-2642-fe0f","🧝‍♀":"1f9dd-200d-2640-fe0f","🧞‍♂":"1f9de-200d-2642-fe0f","🧞‍♀":"1f9de-200d-2640-fe0f","🧟‍♂":"1f9df-200d-2642-fe0f","🧟‍♀":"1f9df-200d-2640-fe0f","💆‍♂":"1f486-200d-2642-fe0f","💆‍♀":"1f486-200d-2640-fe0f","💇‍♂":"1f487-200d-2642-fe0f","💇‍♀":"1f487-200d-2640-fe0f","đŸšļ‍♂":"1f6b6-200d-2642-fe0f","đŸšļ‍♀":"1f6b6-200d-2640-fe0f","🧍‍♂":"1f9cd-200d-2642-fe0f","🧍‍♀":"1f9cd-200d-2640-fe0f","🧎‍♂":"1f9ce-200d-2642-fe0f","🧎‍♀":"1f9ce-200d-2640-fe0f","🧑‍đŸĻ¯":"1f9d1-200d-1f9af","👨‍đŸĻ¯":"1f468-200d-1f9af","👩‍đŸĻ¯":"1f469-200d-1f9af","🧑‍đŸĻŧ":"1f9d1-200d-1f9bc","👨‍đŸĻŧ":"1f468-200d-1f9bc","👩‍đŸĻŧ":"1f469-200d-1f9bc","🧑‍đŸĻŊ":"1f9d1-200d-1f9bd","👨‍đŸĻŊ":"1f468-200d-1f9bd","👩‍đŸĻŊ":"1f469-200d-1f9bd","🏃‍♂":"1f3c3-200d-2642-fe0f","🏃‍♀":"1f3c3-200d-2640-fe0f","đŸ‘¯â€â™‚":"1f46f-200d-2642-fe0f","đŸ‘¯â€â™€":"1f46f-200d-2640-fe0f","🧖‍♂":"1f9d6-200d-2642-fe0f","🧖‍♀":"1f9d6-200d-2640-fe0f","🧗‍♂":"1f9d7-200d-2642-fe0f","🧗‍♀":"1f9d7-200d-2640-fe0f","🏌‍♂":"1f3cc-fe0f-200d-2642-fe0f","🏌‍♀":"1f3cc-fe0f-200d-2640-fe0f","🏄‍♂":"1f3c4-200d-2642-fe0f","🏄‍♀":"1f3c4-200d-2640-fe0f","đŸšŖ‍♂":"1f6a3-200d-2642-fe0f","đŸšŖ‍♀":"1f6a3-200d-2640-fe0f","🏊‍♂":"1f3ca-200d-2642-fe0f","🏊‍♀":"1f3ca-200d-2640-fe0f","⛹‍♂":"26f9-fe0f-200d-2642-fe0f","⛹‍♀":"26f9-fe0f-200d-2640-fe0f","🏋‍♂":"1f3cb-fe0f-200d-2642-fe0f","🏋‍♀":"1f3cb-fe0f-200d-2640-fe0f","🚴‍♂":"1f6b4-200d-2642-fe0f","🚴‍♀":"1f6b4-200d-2640-fe0f","đŸšĩ‍♂":"1f6b5-200d-2642-fe0f","đŸšĩ‍♀":"1f6b5-200d-2640-fe0f","🤸‍♂":"1f938-200d-2642-fe0f","🤸‍♀":"1f938-200d-2640-fe0f","đŸ¤ŧ‍♂":"1f93c-200d-2642-fe0f","đŸ¤ŧ‍♀":"1f93c-200d-2640-fe0f","đŸ¤Ŋ‍♂":"1f93d-200d-2642-fe0f","đŸ¤Ŋ‍♀":"1f93d-200d-2640-fe0f","🤾‍♂":"1f93e-200d-2642-fe0f","🤾‍♀":"1f93e-200d-2640-fe0f","🤹‍♂":"1f939-200d-2642-fe0f","🤹‍♀":"1f939-200d-2640-fe0f","🧘‍♂":"1f9d8-200d-2642-fe0f","🧘‍♀":"1f9d8-200d-2640-fe0f","👨‍đŸ‘Ļ":"1f468-200d-1f466","👨‍👧":"1f468-200d-1f467","👩‍đŸ‘Ļ":"1f469-200d-1f466","👩‍👧":"1f469-200d-1f467","🐕‍đŸĻē":"1f415-200d-1f9ba","🐈‍âŦ›":"1f408-200d-2b1b","đŸģ‍❄":"1f43b-200d-2744-fe0f","#ī¸âƒŖ":"23-20e3","*ī¸âƒŖ":"2a-20e3","0ī¸âƒŖ":"30-20e3","1ī¸âƒŖ":"31-20e3","2ī¸âƒŖ":"32-20e3","3ī¸âƒŖ":"33-20e3","4ī¸âƒŖ":"34-20e3","5ī¸âƒŖ":"35-20e3","6ī¸âƒŖ":"36-20e3","7ī¸âƒŖ":"37-20e3","8ī¸âƒŖ":"38-20e3","9ī¸âƒŖ":"39-20e3","đŸŗ‍🌈":"1f3f3-fe0f-200d-1f308","đŸŗ‍⚧":"1f3f3-fe0f-200d-26a7-fe0f","🏴‍☠":"1f3f4-200d-2620-fe0f","đŸ˜ļ‍đŸŒĢī¸":"1f636-200d-1f32b-fe0f","❤ī¸â€đŸ”Ĩ":"2764-fe0f-200d-1f525","❤ī¸â€đŸŠš":"2764-fe0f-200d-1fa79","👁‍🗨ī¸":"1f441-200d-1f5e8","👁ī¸â€đŸ—¨":"1f441-200d-1f5e8","🧔‍♂ī¸":"1f9d4-200d-2642-fe0f","🧔đŸģ‍♂":"1f9d4-1f3fb-200d-2642-fe0f","🧔đŸŧ‍♂":"1f9d4-1f3fc-200d-2642-fe0f","🧔đŸŊ‍♂":"1f9d4-1f3fd-200d-2642-fe0f","🧔🏾‍♂":"1f9d4-1f3fe-200d-2642-fe0f","🧔đŸŋ‍♂":"1f9d4-1f3ff-200d-2642-fe0f","🧔‍♀ī¸":"1f9d4-200d-2640-fe0f","🧔đŸģ‍♀":"1f9d4-1f3fb-200d-2640-fe0f","🧔đŸŧ‍♀":"1f9d4-1f3fc-200d-2640-fe0f","🧔đŸŊ‍♀":"1f9d4-1f3fd-200d-2640-fe0f","🧔🏾‍♀":"1f9d4-1f3fe-200d-2640-fe0f","🧔đŸŋ‍♀":"1f9d4-1f3ff-200d-2640-fe0f","👨đŸģ‍đŸĻ°":"1f468-1f3fb-200d-1f9b0","👨đŸŧ‍đŸĻ°":"1f468-1f3fc-200d-1f9b0","👨đŸŊ‍đŸĻ°":"1f468-1f3fd-200d-1f9b0","👨🏾‍đŸĻ°":"1f468-1f3fe-200d-1f9b0","👨đŸŋ‍đŸĻ°":"1f468-1f3ff-200d-1f9b0","👨đŸģ‍đŸĻą":"1f468-1f3fb-200d-1f9b1","👨đŸŧ‍đŸĻą":"1f468-1f3fc-200d-1f9b1","👨đŸŊ‍đŸĻą":"1f468-1f3fd-200d-1f9b1","👨🏾‍đŸĻą":"1f468-1f3fe-200d-1f9b1","👨đŸŋ‍đŸĻą":"1f468-1f3ff-200d-1f9b1","👨đŸģ‍đŸĻŗ":"1f468-1f3fb-200d-1f9b3","👨đŸŧ‍đŸĻŗ":"1f468-1f3fc-200d-1f9b3","👨đŸŊ‍đŸĻŗ":"1f468-1f3fd-200d-1f9b3","👨🏾‍đŸĻŗ":"1f468-1f3fe-200d-1f9b3","👨đŸŋ‍đŸĻŗ":"1f468-1f3ff-200d-1f9b3","👨đŸģ‍đŸĻ˛":"1f468-1f3fb-200d-1f9b2","👨đŸŧ‍đŸĻ˛":"1f468-1f3fc-200d-1f9b2","👨đŸŊ‍đŸĻ˛":"1f468-1f3fd-200d-1f9b2","👨🏾‍đŸĻ˛":"1f468-1f3fe-200d-1f9b2","👨đŸŋ‍đŸĻ˛":"1f468-1f3ff-200d-1f9b2","👩đŸģ‍đŸĻ°":"1f469-1f3fb-200d-1f9b0","👩đŸŧ‍đŸĻ°":"1f469-1f3fc-200d-1f9b0","👩đŸŊ‍đŸĻ°":"1f469-1f3fd-200d-1f9b0","👩🏾‍đŸĻ°":"1f469-1f3fe-200d-1f9b0","👩đŸŋ‍đŸĻ°":"1f469-1f3ff-200d-1f9b0","🧑đŸģ‍đŸĻ°":"1f9d1-1f3fb-200d-1f9b0","🧑đŸŧ‍đŸĻ°":"1f9d1-1f3fc-200d-1f9b0","🧑đŸŊ‍đŸĻ°":"1f9d1-1f3fd-200d-1f9b0","🧑🏾‍đŸĻ°":"1f9d1-1f3fe-200d-1f9b0","🧑đŸŋ‍đŸĻ°":"1f9d1-1f3ff-200d-1f9b0","👩đŸģ‍đŸĻą":"1f469-1f3fb-200d-1f9b1","👩đŸŧ‍đŸĻą":"1f469-1f3fc-200d-1f9b1","👩đŸŊ‍đŸĻą":"1f469-1f3fd-200d-1f9b1","👩🏾‍đŸĻą":"1f469-1f3fe-200d-1f9b1","👩đŸŋ‍đŸĻą":"1f469-1f3ff-200d-1f9b1","🧑đŸģ‍đŸĻą":"1f9d1-1f3fb-200d-1f9b1","🧑đŸŧ‍đŸĻą":"1f9d1-1f3fc-200d-1f9b1","🧑đŸŊ‍đŸĻą":"1f9d1-1f3fd-200d-1f9b1","🧑🏾‍đŸĻą":"1f9d1-1f3fe-200d-1f9b1","🧑đŸŋ‍đŸĻą":"1f9d1-1f3ff-200d-1f9b1","👩đŸģ‍đŸĻŗ":"1f469-1f3fb-200d-1f9b3","👩đŸŧ‍đŸĻŗ":"1f469-1f3fc-200d-1f9b3","👩đŸŊ‍đŸĻŗ":"1f469-1f3fd-200d-1f9b3","👩🏾‍đŸĻŗ":"1f469-1f3fe-200d-1f9b3","👩đŸŋ‍đŸĻŗ":"1f469-1f3ff-200d-1f9b3","🧑đŸģ‍đŸĻŗ":"1f9d1-1f3fb-200d-1f9b3","🧑đŸŧ‍đŸĻŗ":"1f9d1-1f3fc-200d-1f9b3","🧑đŸŊ‍đŸĻŗ":"1f9d1-1f3fd-200d-1f9b3","🧑🏾‍đŸĻŗ":"1f9d1-1f3fe-200d-1f9b3","🧑đŸŋ‍đŸĻŗ":"1f9d1-1f3ff-200d-1f9b3","👩đŸģ‍đŸĻ˛":"1f469-1f3fb-200d-1f9b2","👩đŸŧ‍đŸĻ˛":"1f469-1f3fc-200d-1f9b2","👩đŸŊ‍đŸĻ˛":"1f469-1f3fd-200d-1f9b2","👩🏾‍đŸĻ˛":"1f469-1f3fe-200d-1f9b2","👩đŸŋ‍đŸĻ˛":"1f469-1f3ff-200d-1f9b2","🧑đŸģ‍đŸĻ˛":"1f9d1-1f3fb-200d-1f9b2","🧑đŸŧ‍đŸĻ˛":"1f9d1-1f3fc-200d-1f9b2","🧑đŸŊ‍đŸĻ˛":"1f9d1-1f3fd-200d-1f9b2","🧑🏾‍đŸĻ˛":"1f9d1-1f3fe-200d-1f9b2","🧑đŸŋ‍đŸĻ˛":"1f9d1-1f3ff-200d-1f9b2","👱‍♀ī¸":"1f471-200d-2640-fe0f","👱đŸģ‍♀":"1f471-1f3fb-200d-2640-fe0f","👱đŸŧ‍♀":"1f471-1f3fc-200d-2640-fe0f","👱đŸŊ‍♀":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀":"1f471-1f3fe-200d-2640-fe0f","👱đŸŋ‍♀":"1f471-1f3ff-200d-2640-fe0f","👱‍♂ī¸":"1f471-200d-2642-fe0f","👱đŸģ‍♂":"1f471-1f3fb-200d-2642-fe0f","👱đŸŧ‍♂":"1f471-1f3fc-200d-2642-fe0f","👱đŸŊ‍♂":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂":"1f471-1f3fe-200d-2642-fe0f","👱đŸŋ‍♂":"1f471-1f3ff-200d-2642-fe0f","🙍‍♂ī¸":"1f64d-200d-2642-fe0f","🙍đŸģ‍♂":"1f64d-1f3fb-200d-2642-fe0f","🙍đŸŧ‍♂":"1f64d-1f3fc-200d-2642-fe0f","🙍đŸŊ‍♂":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂":"1f64d-1f3fe-200d-2642-fe0f","🙍đŸŋ‍♂":"1f64d-1f3ff-200d-2642-fe0f","🙍‍♀ī¸":"1f64d-200d-2640-fe0f","🙍đŸģ‍♀":"1f64d-1f3fb-200d-2640-fe0f","🙍đŸŧ‍♀":"1f64d-1f3fc-200d-2640-fe0f","🙍đŸŊ‍♀":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀":"1f64d-1f3fe-200d-2640-fe0f","🙍đŸŋ‍♀":"1f64d-1f3ff-200d-2640-fe0f","🙎‍♂ī¸":"1f64e-200d-2642-fe0f","🙎đŸģ‍♂":"1f64e-1f3fb-200d-2642-fe0f","🙎đŸŧ‍♂":"1f64e-1f3fc-200d-2642-fe0f","🙎đŸŊ‍♂":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂":"1f64e-1f3fe-200d-2642-fe0f","🙎đŸŋ‍♂":"1f64e-1f3ff-200d-2642-fe0f","🙎‍♀ī¸":"1f64e-200d-2640-fe0f","🙎đŸģ‍♀":"1f64e-1f3fb-200d-2640-fe0f","🙎đŸŧ‍♀":"1f64e-1f3fc-200d-2640-fe0f","🙎đŸŊ‍♀":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀":"1f64e-1f3fe-200d-2640-fe0f","🙎đŸŋ‍♀":"1f64e-1f3ff-200d-2640-fe0f","🙅‍♂ī¸":"1f645-200d-2642-fe0f","🙅đŸģ‍♂":"1f645-1f3fb-200d-2642-fe0f","🙅đŸŧ‍♂":"1f645-1f3fc-200d-2642-fe0f","🙅đŸŊ‍♂":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂":"1f645-1f3fe-200d-2642-fe0f","🙅đŸŋ‍♂":"1f645-1f3ff-200d-2642-fe0f","🙅‍♀ī¸":"1f645-200d-2640-fe0f","🙅đŸģ‍♀":"1f645-1f3fb-200d-2640-fe0f","🙅đŸŧ‍♀":"1f645-1f3fc-200d-2640-fe0f","🙅đŸŊ‍♀":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀":"1f645-1f3fe-200d-2640-fe0f","🙅đŸŋ‍♀":"1f645-1f3ff-200d-2640-fe0f","🙆‍♂ī¸":"1f646-200d-2642-fe0f","🙆đŸģ‍♂":"1f646-1f3fb-200d-2642-fe0f","🙆đŸŧ‍♂":"1f646-1f3fc-200d-2642-fe0f","🙆đŸŊ‍♂":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂":"1f646-1f3fe-200d-2642-fe0f","🙆đŸŋ‍♂":"1f646-1f3ff-200d-2642-fe0f","🙆‍♀ī¸":"1f646-200d-2640-fe0f","🙆đŸģ‍♀":"1f646-1f3fb-200d-2640-fe0f","🙆đŸŧ‍♀":"1f646-1f3fc-200d-2640-fe0f","🙆đŸŊ‍♀":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀":"1f646-1f3fe-200d-2640-fe0f","🙆đŸŋ‍♀":"1f646-1f3ff-200d-2640-fe0f","💁‍♂ī¸":"1f481-200d-2642-fe0f","💁đŸģ‍♂":"1f481-1f3fb-200d-2642-fe0f","💁đŸŧ‍♂":"1f481-1f3fc-200d-2642-fe0f","💁đŸŊ‍♂":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂":"1f481-1f3fe-200d-2642-fe0f","💁đŸŋ‍♂":"1f481-1f3ff-200d-2642-fe0f","💁‍♀ī¸":"1f481-200d-2640-fe0f","💁đŸģ‍♀":"1f481-1f3fb-200d-2640-fe0f","💁đŸŧ‍♀":"1f481-1f3fc-200d-2640-fe0f","💁đŸŊ‍♀":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀":"1f481-1f3fe-200d-2640-fe0f","💁đŸŋ‍♀":"1f481-1f3ff-200d-2640-fe0f","🙋‍♂ī¸":"1f64b-200d-2642-fe0f","🙋đŸģ‍♂":"1f64b-1f3fb-200d-2642-fe0f","🙋đŸŧ‍♂":"1f64b-1f3fc-200d-2642-fe0f","🙋đŸŊ‍♂":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂":"1f64b-1f3fe-200d-2642-fe0f","🙋đŸŋ‍♂":"1f64b-1f3ff-200d-2642-fe0f","🙋‍♀ī¸":"1f64b-200d-2640-fe0f","🙋đŸģ‍♀":"1f64b-1f3fb-200d-2640-fe0f","🙋đŸŧ‍♀":"1f64b-1f3fc-200d-2640-fe0f","🙋đŸŊ‍♀":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀":"1f64b-1f3fe-200d-2640-fe0f","🙋đŸŋ‍♀":"1f64b-1f3ff-200d-2640-fe0f","🧏‍♂ī¸":"1f9cf-200d-2642-fe0f","🧏đŸģ‍♂":"1f9cf-1f3fb-200d-2642-fe0f","🧏đŸŧ‍♂":"1f9cf-1f3fc-200d-2642-fe0f","🧏đŸŊ‍♂":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂":"1f9cf-1f3fe-200d-2642-fe0f","🧏đŸŋ‍♂":"1f9cf-1f3ff-200d-2642-fe0f","🧏‍♀ī¸":"1f9cf-200d-2640-fe0f","🧏đŸģ‍♀":"1f9cf-1f3fb-200d-2640-fe0f","🧏đŸŧ‍♀":"1f9cf-1f3fc-200d-2640-fe0f","🧏đŸŊ‍♀":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀":"1f9cf-1f3fe-200d-2640-fe0f","🧏đŸŋ‍♀":"1f9cf-1f3ff-200d-2640-fe0f","🙇‍♂ī¸":"1f647-200d-2642-fe0f","🙇đŸģ‍♂":"1f647-1f3fb-200d-2642-fe0f","🙇đŸŧ‍♂":"1f647-1f3fc-200d-2642-fe0f","🙇đŸŊ‍♂":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂":"1f647-1f3fe-200d-2642-fe0f","🙇đŸŋ‍♂":"1f647-1f3ff-200d-2642-fe0f","🙇‍♀ī¸":"1f647-200d-2640-fe0f","🙇đŸģ‍♀":"1f647-1f3fb-200d-2640-fe0f","🙇đŸŧ‍♀":"1f647-1f3fc-200d-2640-fe0f","🙇đŸŊ‍♀":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀":"1f647-1f3fe-200d-2640-fe0f","🙇đŸŋ‍♀":"1f647-1f3ff-200d-2640-fe0f","đŸ¤Ļ‍♂ī¸":"1f926-200d-2642-fe0f","đŸ¤ĻđŸģ‍♂":"1f926-1f3fb-200d-2642-fe0f","đŸ¤ĻđŸŧ‍♂":"1f926-1f3fc-200d-2642-fe0f","đŸ¤ĻđŸŊ‍♂":"1f926-1f3fd-200d-2642-fe0f","đŸ¤Ļ🏾‍♂":"1f926-1f3fe-200d-2642-fe0f","đŸ¤ĻđŸŋ‍♂":"1f926-1f3ff-200d-2642-fe0f","đŸ¤Ļ‍♀ī¸":"1f926-200d-2640-fe0f","đŸ¤ĻđŸģ‍♀":"1f926-1f3fb-200d-2640-fe0f","đŸ¤ĻđŸŧ‍♀":"1f926-1f3fc-200d-2640-fe0f","đŸ¤ĻđŸŊ‍♀":"1f926-1f3fd-200d-2640-fe0f","đŸ¤Ļ🏾‍♀":"1f926-1f3fe-200d-2640-fe0f","đŸ¤ĻđŸŋ‍♀":"1f926-1f3ff-200d-2640-fe0f","🤷‍♂ī¸":"1f937-200d-2642-fe0f","🤷đŸģ‍♂":"1f937-1f3fb-200d-2642-fe0f","🤷đŸŧ‍♂":"1f937-1f3fc-200d-2642-fe0f","🤷đŸŊ‍♂":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂":"1f937-1f3fe-200d-2642-fe0f","🤷đŸŋ‍♂":"1f937-1f3ff-200d-2642-fe0f","🤷‍♀ī¸":"1f937-200d-2640-fe0f","🤷đŸģ‍♀":"1f937-1f3fb-200d-2640-fe0f","🤷đŸŧ‍♀":"1f937-1f3fc-200d-2640-fe0f","🤷đŸŊ‍♀":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀":"1f937-1f3fe-200d-2640-fe0f","🤷đŸŋ‍♀":"1f937-1f3ff-200d-2640-fe0f","🧑‍⚕ī¸":"1f9d1-200d-2695-fe0f","🧑đŸģ‍⚕":"1f9d1-1f3fb-200d-2695-fe0f","🧑đŸŧ‍⚕":"1f9d1-1f3fc-200d-2695-fe0f","🧑đŸŊ‍⚕":"1f9d1-1f3fd-200d-2695-fe0f","🧑🏾‍⚕":"1f9d1-1f3fe-200d-2695-fe0f","🧑đŸŋ‍⚕":"1f9d1-1f3ff-200d-2695-fe0f","👨‍⚕ī¸":"1f468-200d-2695-fe0f","👨đŸģ‍⚕":"1f468-1f3fb-200d-2695-fe0f","👨đŸŧ‍⚕":"1f468-1f3fc-200d-2695-fe0f","👨đŸŊ‍⚕":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕":"1f468-1f3fe-200d-2695-fe0f","👨đŸŋ‍⚕":"1f468-1f3ff-200d-2695-fe0f","👩‍⚕ī¸":"1f469-200d-2695-fe0f","👩đŸģ‍⚕":"1f469-1f3fb-200d-2695-fe0f","👩đŸŧ‍⚕":"1f469-1f3fc-200d-2695-fe0f","👩đŸŊ‍⚕":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕":"1f469-1f3fe-200d-2695-fe0f","👩đŸŋ‍⚕":"1f469-1f3ff-200d-2695-fe0f","🧑đŸģ‍🎓":"1f9d1-1f3fb-200d-1f393","🧑đŸŧ‍🎓":"1f9d1-1f3fc-200d-1f393","🧑đŸŊ‍🎓":"1f9d1-1f3fd-200d-1f393","🧑🏾‍🎓":"1f9d1-1f3fe-200d-1f393","🧑đŸŋ‍🎓":"1f9d1-1f3ff-200d-1f393","👨đŸģ‍🎓":"1f468-1f3fb-200d-1f393","👨đŸŧ‍🎓":"1f468-1f3fc-200d-1f393","👨đŸŊ‍🎓":"1f468-1f3fd-200d-1f393","👨🏾‍🎓":"1f468-1f3fe-200d-1f393","👨đŸŋ‍🎓":"1f468-1f3ff-200d-1f393","👩đŸģ‍🎓":"1f469-1f3fb-200d-1f393","👩đŸŧ‍🎓":"1f469-1f3fc-200d-1f393","👩đŸŊ‍🎓":"1f469-1f3fd-200d-1f393","👩🏾‍🎓":"1f469-1f3fe-200d-1f393","👩đŸŋ‍🎓":"1f469-1f3ff-200d-1f393","🧑đŸģ‍đŸĢ":"1f9d1-1f3fb-200d-1f3eb","🧑đŸŧ‍đŸĢ":"1f9d1-1f3fc-200d-1f3eb","🧑đŸŊ‍đŸĢ":"1f9d1-1f3fd-200d-1f3eb","🧑🏾‍đŸĢ":"1f9d1-1f3fe-200d-1f3eb","🧑đŸŋ‍đŸĢ":"1f9d1-1f3ff-200d-1f3eb","👨đŸģ‍đŸĢ":"1f468-1f3fb-200d-1f3eb","👨đŸŧ‍đŸĢ":"1f468-1f3fc-200d-1f3eb","👨đŸŊ‍đŸĢ":"1f468-1f3fd-200d-1f3eb","👨🏾‍đŸĢ":"1f468-1f3fe-200d-1f3eb","👨đŸŋ‍đŸĢ":"1f468-1f3ff-200d-1f3eb","👩đŸģ‍đŸĢ":"1f469-1f3fb-200d-1f3eb","👩đŸŧ‍đŸĢ":"1f469-1f3fc-200d-1f3eb","👩đŸŊ‍đŸĢ":"1f469-1f3fd-200d-1f3eb","👩🏾‍đŸĢ":"1f469-1f3fe-200d-1f3eb","👩đŸŋ‍đŸĢ":"1f469-1f3ff-200d-1f3eb","🧑‍⚖ī¸":"1f9d1-200d-2696-fe0f","🧑đŸģ‍⚖":"1f9d1-1f3fb-200d-2696-fe0f","🧑đŸŧ‍⚖":"1f9d1-1f3fc-200d-2696-fe0f","🧑đŸŊ‍⚖":"1f9d1-1f3fd-200d-2696-fe0f","🧑🏾‍⚖":"1f9d1-1f3fe-200d-2696-fe0f","🧑đŸŋ‍⚖":"1f9d1-1f3ff-200d-2696-fe0f","👨‍⚖ī¸":"1f468-200d-2696-fe0f","👨đŸģ‍⚖":"1f468-1f3fb-200d-2696-fe0f","👨đŸŧ‍⚖":"1f468-1f3fc-200d-2696-fe0f","👨đŸŊ‍⚖":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖":"1f468-1f3fe-200d-2696-fe0f","👨đŸŋ‍⚖":"1f468-1f3ff-200d-2696-fe0f","👩‍⚖ī¸":"1f469-200d-2696-fe0f","👩đŸģ‍⚖":"1f469-1f3fb-200d-2696-fe0f","👩đŸŧ‍⚖":"1f469-1f3fc-200d-2696-fe0f","👩đŸŊ‍⚖":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖":"1f469-1f3fe-200d-2696-fe0f","👩đŸŋ‍⚖":"1f469-1f3ff-200d-2696-fe0f","🧑đŸģ‍🌾":"1f9d1-1f3fb-200d-1f33e","🧑đŸŧ‍🌾":"1f9d1-1f3fc-200d-1f33e","🧑đŸŊ‍🌾":"1f9d1-1f3fd-200d-1f33e","🧑🏾‍🌾":"1f9d1-1f3fe-200d-1f33e","🧑đŸŋ‍🌾":"1f9d1-1f3ff-200d-1f33e","👨đŸģ‍🌾":"1f468-1f3fb-200d-1f33e","👨đŸŧ‍🌾":"1f468-1f3fc-200d-1f33e","👨đŸŊ‍🌾":"1f468-1f3fd-200d-1f33e","👨🏾‍🌾":"1f468-1f3fe-200d-1f33e","👨đŸŋ‍🌾":"1f468-1f3ff-200d-1f33e","👩đŸģ‍🌾":"1f469-1f3fb-200d-1f33e","👩đŸŧ‍🌾":"1f469-1f3fc-200d-1f33e","👩đŸŊ‍🌾":"1f469-1f3fd-200d-1f33e","👩🏾‍🌾":"1f469-1f3fe-200d-1f33e","👩đŸŋ‍🌾":"1f469-1f3ff-200d-1f33e","🧑đŸģ‍đŸŗ":"1f9d1-1f3fb-200d-1f373","🧑đŸŧ‍đŸŗ":"1f9d1-1f3fc-200d-1f373","🧑đŸŊ‍đŸŗ":"1f9d1-1f3fd-200d-1f373","🧑🏾‍đŸŗ":"1f9d1-1f3fe-200d-1f373","🧑đŸŋ‍đŸŗ":"1f9d1-1f3ff-200d-1f373","👨đŸģ‍đŸŗ":"1f468-1f3fb-200d-1f373","👨đŸŧ‍đŸŗ":"1f468-1f3fc-200d-1f373","👨đŸŊ‍đŸŗ":"1f468-1f3fd-200d-1f373","👨🏾‍đŸŗ":"1f468-1f3fe-200d-1f373","👨đŸŋ‍đŸŗ":"1f468-1f3ff-200d-1f373","👩đŸģ‍đŸŗ":"1f469-1f3fb-200d-1f373","👩đŸŧ‍đŸŗ":"1f469-1f3fc-200d-1f373","👩đŸŊ‍đŸŗ":"1f469-1f3fd-200d-1f373","👩🏾‍đŸŗ":"1f469-1f3fe-200d-1f373","👩đŸŋ‍đŸŗ":"1f469-1f3ff-200d-1f373","🧑đŸģ‍🔧":"1f9d1-1f3fb-200d-1f527","🧑đŸŧ‍🔧":"1f9d1-1f3fc-200d-1f527","🧑đŸŊ‍🔧":"1f9d1-1f3fd-200d-1f527","🧑🏾‍🔧":"1f9d1-1f3fe-200d-1f527","🧑đŸŋ‍🔧":"1f9d1-1f3ff-200d-1f527","👨đŸģ‍🔧":"1f468-1f3fb-200d-1f527","👨đŸŧ‍🔧":"1f468-1f3fc-200d-1f527","👨đŸŊ‍🔧":"1f468-1f3fd-200d-1f527","👨🏾‍🔧":"1f468-1f3fe-200d-1f527","👨đŸŋ‍🔧":"1f468-1f3ff-200d-1f527","👩đŸģ‍🔧":"1f469-1f3fb-200d-1f527","👩đŸŧ‍🔧":"1f469-1f3fc-200d-1f527","👩đŸŊ‍🔧":"1f469-1f3fd-200d-1f527","👩🏾‍🔧":"1f469-1f3fe-200d-1f527","👩đŸŋ‍🔧":"1f469-1f3ff-200d-1f527","🧑đŸģ‍🏭":"1f9d1-1f3fb-200d-1f3ed","🧑đŸŧ‍🏭":"1f9d1-1f3fc-200d-1f3ed","🧑đŸŊ‍🏭":"1f9d1-1f3fd-200d-1f3ed","🧑🏾‍🏭":"1f9d1-1f3fe-200d-1f3ed","🧑đŸŋ‍🏭":"1f9d1-1f3ff-200d-1f3ed","👨đŸģ‍🏭":"1f468-1f3fb-200d-1f3ed","👨đŸŧ‍🏭":"1f468-1f3fc-200d-1f3ed","👨đŸŊ‍🏭":"1f468-1f3fd-200d-1f3ed","👨🏾‍🏭":"1f468-1f3fe-200d-1f3ed","👨đŸŋ‍🏭":"1f468-1f3ff-200d-1f3ed","👩đŸģ‍🏭":"1f469-1f3fb-200d-1f3ed","👩đŸŧ‍🏭":"1f469-1f3fc-200d-1f3ed","👩đŸŊ‍🏭":"1f469-1f3fd-200d-1f3ed","👩🏾‍🏭":"1f469-1f3fe-200d-1f3ed","👩đŸŋ‍🏭":"1f469-1f3ff-200d-1f3ed","🧑đŸģ‍đŸ’ŧ":"1f9d1-1f3fb-200d-1f4bc","🧑đŸŧ‍đŸ’ŧ":"1f9d1-1f3fc-200d-1f4bc","🧑đŸŊ‍đŸ’ŧ":"1f9d1-1f3fd-200d-1f4bc","🧑🏾‍đŸ’ŧ":"1f9d1-1f3fe-200d-1f4bc","🧑đŸŋ‍đŸ’ŧ":"1f9d1-1f3ff-200d-1f4bc","👨đŸģ‍đŸ’ŧ":"1f468-1f3fb-200d-1f4bc","👨đŸŧ‍đŸ’ŧ":"1f468-1f3fc-200d-1f4bc","👨đŸŊ‍đŸ’ŧ":"1f468-1f3fd-200d-1f4bc","👨🏾‍đŸ’ŧ":"1f468-1f3fe-200d-1f4bc","👨đŸŋ‍đŸ’ŧ":"1f468-1f3ff-200d-1f4bc","👩đŸģ‍đŸ’ŧ":"1f469-1f3fb-200d-1f4bc","👩đŸŧ‍đŸ’ŧ":"1f469-1f3fc-200d-1f4bc","👩đŸŊ‍đŸ’ŧ":"1f469-1f3fd-200d-1f4bc","👩🏾‍đŸ’ŧ":"1f469-1f3fe-200d-1f4bc","👩đŸŋ‍đŸ’ŧ":"1f469-1f3ff-200d-1f4bc","🧑đŸģ‍đŸ”Ŧ":"1f9d1-1f3fb-200d-1f52c","🧑đŸŧ‍đŸ”Ŧ":"1f9d1-1f3fc-200d-1f52c","🧑đŸŊ‍đŸ”Ŧ":"1f9d1-1f3fd-200d-1f52c","🧑🏾‍đŸ”Ŧ":"1f9d1-1f3fe-200d-1f52c","🧑đŸŋ‍đŸ”Ŧ":"1f9d1-1f3ff-200d-1f52c","👨đŸģ‍đŸ”Ŧ":"1f468-1f3fb-200d-1f52c","👨đŸŧ‍đŸ”Ŧ":"1f468-1f3fc-200d-1f52c","👨đŸŊ‍đŸ”Ŧ":"1f468-1f3fd-200d-1f52c","👨🏾‍đŸ”Ŧ":"1f468-1f3fe-200d-1f52c","👨đŸŋ‍đŸ”Ŧ":"1f468-1f3ff-200d-1f52c","👩đŸģ‍đŸ”Ŧ":"1f469-1f3fb-200d-1f52c","👩đŸŧ‍đŸ”Ŧ":"1f469-1f3fc-200d-1f52c","👩đŸŊ‍đŸ”Ŧ":"1f469-1f3fd-200d-1f52c","👩🏾‍đŸ”Ŧ":"1f469-1f3fe-200d-1f52c","👩đŸŋ‍đŸ”Ŧ":"1f469-1f3ff-200d-1f52c","🧑đŸģ‍đŸ’ģ":"1f9d1-1f3fb-200d-1f4bb","🧑đŸŧ‍đŸ’ģ":"1f9d1-1f3fc-200d-1f4bb","🧑đŸŊ‍đŸ’ģ":"1f9d1-1f3fd-200d-1f4bb","🧑🏾‍đŸ’ģ":"1f9d1-1f3fe-200d-1f4bb","🧑đŸŋ‍đŸ’ģ":"1f9d1-1f3ff-200d-1f4bb","👨đŸģ‍đŸ’ģ":"1f468-1f3fb-200d-1f4bb","👨đŸŧ‍đŸ’ģ":"1f468-1f3fc-200d-1f4bb","👨đŸŊ‍đŸ’ģ":"1f468-1f3fd-200d-1f4bb","👨🏾‍đŸ’ģ":"1f468-1f3fe-200d-1f4bb","👨đŸŋ‍đŸ’ģ":"1f468-1f3ff-200d-1f4bb","👩đŸģ‍đŸ’ģ":"1f469-1f3fb-200d-1f4bb","👩đŸŧ‍đŸ’ģ":"1f469-1f3fc-200d-1f4bb","👩đŸŊ‍đŸ’ģ":"1f469-1f3fd-200d-1f4bb","👩🏾‍đŸ’ģ":"1f469-1f3fe-200d-1f4bb","👩đŸŋ‍đŸ’ģ":"1f469-1f3ff-200d-1f4bb","🧑đŸģ‍🎤":"1f9d1-1f3fb-200d-1f3a4","🧑đŸŧ‍🎤":"1f9d1-1f3fc-200d-1f3a4","🧑đŸŊ‍🎤":"1f9d1-1f3fd-200d-1f3a4","🧑🏾‍🎤":"1f9d1-1f3fe-200d-1f3a4","🧑đŸŋ‍🎤":"1f9d1-1f3ff-200d-1f3a4","👨đŸģ‍🎤":"1f468-1f3fb-200d-1f3a4","👨đŸŧ‍🎤":"1f468-1f3fc-200d-1f3a4","👨đŸŊ‍🎤":"1f468-1f3fd-200d-1f3a4","👨🏾‍🎤":"1f468-1f3fe-200d-1f3a4","👨đŸŋ‍🎤":"1f468-1f3ff-200d-1f3a4","👩đŸģ‍🎤":"1f469-1f3fb-200d-1f3a4","👩đŸŧ‍🎤":"1f469-1f3fc-200d-1f3a4","👩đŸŊ‍🎤":"1f469-1f3fd-200d-1f3a4","👩🏾‍🎤":"1f469-1f3fe-200d-1f3a4","👩đŸŋ‍🎤":"1f469-1f3ff-200d-1f3a4","🧑đŸģ‍🎨":"1f9d1-1f3fb-200d-1f3a8","🧑đŸŧ‍🎨":"1f9d1-1f3fc-200d-1f3a8","🧑đŸŊ‍🎨":"1f9d1-1f3fd-200d-1f3a8","🧑🏾‍🎨":"1f9d1-1f3fe-200d-1f3a8","🧑đŸŋ‍🎨":"1f9d1-1f3ff-200d-1f3a8","👨đŸģ‍🎨":"1f468-1f3fb-200d-1f3a8","👨đŸŧ‍🎨":"1f468-1f3fc-200d-1f3a8","👨đŸŊ‍🎨":"1f468-1f3fd-200d-1f3a8","👨🏾‍🎨":"1f468-1f3fe-200d-1f3a8","👨đŸŋ‍🎨":"1f468-1f3ff-200d-1f3a8","👩đŸģ‍🎨":"1f469-1f3fb-200d-1f3a8","👩đŸŧ‍🎨":"1f469-1f3fc-200d-1f3a8","👩đŸŊ‍🎨":"1f469-1f3fd-200d-1f3a8","👩🏾‍🎨":"1f469-1f3fe-200d-1f3a8","👩đŸŋ‍🎨":"1f469-1f3ff-200d-1f3a8","🧑‍✈ī¸":"1f9d1-200d-2708-fe0f","🧑đŸģ‍✈":"1f9d1-1f3fb-200d-2708-fe0f","🧑đŸŧ‍✈":"1f9d1-1f3fc-200d-2708-fe0f","🧑đŸŊ‍✈":"1f9d1-1f3fd-200d-2708-fe0f","🧑🏾‍✈":"1f9d1-1f3fe-200d-2708-fe0f","🧑đŸŋ‍✈":"1f9d1-1f3ff-200d-2708-fe0f","👨‍✈ī¸":"1f468-200d-2708-fe0f","👨đŸģ‍✈":"1f468-1f3fb-200d-2708-fe0f","👨đŸŧ‍✈":"1f468-1f3fc-200d-2708-fe0f","👨đŸŊ‍✈":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈":"1f468-1f3fe-200d-2708-fe0f","👨đŸŋ‍✈":"1f468-1f3ff-200d-2708-fe0f","👩‍✈ī¸":"1f469-200d-2708-fe0f","👩đŸģ‍✈":"1f469-1f3fb-200d-2708-fe0f","👩đŸŧ‍✈":"1f469-1f3fc-200d-2708-fe0f","👩đŸŊ‍✈":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈":"1f469-1f3fe-200d-2708-fe0f","👩đŸŋ‍✈":"1f469-1f3ff-200d-2708-fe0f","🧑đŸģ‍🚀":"1f9d1-1f3fb-200d-1f680","🧑đŸŧ‍🚀":"1f9d1-1f3fc-200d-1f680","🧑đŸŊ‍🚀":"1f9d1-1f3fd-200d-1f680","🧑🏾‍🚀":"1f9d1-1f3fe-200d-1f680","🧑đŸŋ‍🚀":"1f9d1-1f3ff-200d-1f680","👨đŸģ‍🚀":"1f468-1f3fb-200d-1f680","👨đŸŧ‍🚀":"1f468-1f3fc-200d-1f680","👨đŸŊ‍🚀":"1f468-1f3fd-200d-1f680","👨🏾‍🚀":"1f468-1f3fe-200d-1f680","👨đŸŋ‍🚀":"1f468-1f3ff-200d-1f680","👩đŸģ‍🚀":"1f469-1f3fb-200d-1f680","👩đŸŧ‍🚀":"1f469-1f3fc-200d-1f680","👩đŸŊ‍🚀":"1f469-1f3fd-200d-1f680","👩🏾‍🚀":"1f469-1f3fe-200d-1f680","👩đŸŋ‍🚀":"1f469-1f3ff-200d-1f680","🧑đŸģ‍🚒":"1f9d1-1f3fb-200d-1f692","🧑đŸŧ‍🚒":"1f9d1-1f3fc-200d-1f692","🧑đŸŊ‍🚒":"1f9d1-1f3fd-200d-1f692","🧑🏾‍🚒":"1f9d1-1f3fe-200d-1f692","🧑đŸŋ‍🚒":"1f9d1-1f3ff-200d-1f692","👨đŸģ‍🚒":"1f468-1f3fb-200d-1f692","👨đŸŧ‍🚒":"1f468-1f3fc-200d-1f692","👨đŸŊ‍🚒":"1f468-1f3fd-200d-1f692","👨🏾‍🚒":"1f468-1f3fe-200d-1f692","👨đŸŋ‍🚒":"1f468-1f3ff-200d-1f692","👩đŸģ‍🚒":"1f469-1f3fb-200d-1f692","👩đŸŧ‍🚒":"1f469-1f3fc-200d-1f692","👩đŸŊ‍🚒":"1f469-1f3fd-200d-1f692","👩🏾‍🚒":"1f469-1f3fe-200d-1f692","👩đŸŋ‍🚒":"1f469-1f3ff-200d-1f692","👮‍♂ī¸":"1f46e-200d-2642-fe0f","👮đŸģ‍♂":"1f46e-1f3fb-200d-2642-fe0f","👮đŸŧ‍♂":"1f46e-1f3fc-200d-2642-fe0f","👮đŸŊ‍♂":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂":"1f46e-1f3fe-200d-2642-fe0f","👮đŸŋ‍♂":"1f46e-1f3ff-200d-2642-fe0f","👮‍♀ī¸":"1f46e-200d-2640-fe0f","👮đŸģ‍♀":"1f46e-1f3fb-200d-2640-fe0f","👮đŸŧ‍♀":"1f46e-1f3fc-200d-2640-fe0f","👮đŸŊ‍♀":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀":"1f46e-1f3fe-200d-2640-fe0f","👮đŸŋ‍♀":"1f46e-1f3ff-200d-2640-fe0f","đŸ•ĩ‍♂ī¸":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩī¸â€â™‚":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩđŸģ‍♂":"1f575-1f3fb-200d-2642-fe0f","đŸ•ĩđŸŧ‍♂":"1f575-1f3fc-200d-2642-fe0f","đŸ•ĩđŸŊ‍♂":"1f575-1f3fd-200d-2642-fe0f","đŸ•ĩ🏾‍♂":"1f575-1f3fe-200d-2642-fe0f","đŸ•ĩđŸŋ‍♂":"1f575-1f3ff-200d-2642-fe0f","đŸ•ĩ‍♀ī¸":"1f575-fe0f-200d-2640-fe0f","đŸ•ĩī¸â€â™€":"1f575-fe0f-200d-2640-fe0f","đŸ•ĩđŸģ‍♀":"1f575-1f3fb-200d-2640-fe0f","đŸ•ĩđŸŧ‍♀":"1f575-1f3fc-200d-2640-fe0f","đŸ•ĩđŸŊ‍♀":"1f575-1f3fd-200d-2640-fe0f","đŸ•ĩ🏾‍♀":"1f575-1f3fe-200d-2640-fe0f","đŸ•ĩđŸŋ‍♀":"1f575-1f3ff-200d-2640-fe0f","💂‍♂ī¸":"1f482-200d-2642-fe0f","💂đŸģ‍♂":"1f482-1f3fb-200d-2642-fe0f","💂đŸŧ‍♂":"1f482-1f3fc-200d-2642-fe0f","💂đŸŊ‍♂":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂":"1f482-1f3fe-200d-2642-fe0f","💂đŸŋ‍♂":"1f482-1f3ff-200d-2642-fe0f","💂‍♀ī¸":"1f482-200d-2640-fe0f","💂đŸģ‍♀":"1f482-1f3fb-200d-2640-fe0f","💂đŸŧ‍♀":"1f482-1f3fc-200d-2640-fe0f","💂đŸŊ‍♀":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀":"1f482-1f3fe-200d-2640-fe0f","💂đŸŋ‍♀":"1f482-1f3ff-200d-2640-fe0f","👷‍♂ī¸":"1f477-200d-2642-fe0f","👷đŸģ‍♂":"1f477-1f3fb-200d-2642-fe0f","👷đŸŧ‍♂":"1f477-1f3fc-200d-2642-fe0f","👷đŸŊ‍♂":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂":"1f477-1f3fe-200d-2642-fe0f","👷đŸŋ‍♂":"1f477-1f3ff-200d-2642-fe0f","👷‍♀ī¸":"1f477-200d-2640-fe0f","👷đŸģ‍♀":"1f477-1f3fb-200d-2640-fe0f","👷đŸŧ‍♀":"1f477-1f3fc-200d-2640-fe0f","👷đŸŊ‍♀":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀":"1f477-1f3fe-200d-2640-fe0f","👷đŸŋ‍♀":"1f477-1f3ff-200d-2640-fe0f","đŸ‘ŗ‍♂ī¸":"1f473-200d-2642-fe0f","đŸ‘ŗđŸģ‍♂":"1f473-1f3fb-200d-2642-fe0f","đŸ‘ŗđŸŧ‍♂":"1f473-1f3fc-200d-2642-fe0f","đŸ‘ŗđŸŊ‍♂":"1f473-1f3fd-200d-2642-fe0f","đŸ‘ŗ🏾‍♂":"1f473-1f3fe-200d-2642-fe0f","đŸ‘ŗđŸŋ‍♂":"1f473-1f3ff-200d-2642-fe0f","đŸ‘ŗ‍♀ī¸":"1f473-200d-2640-fe0f","đŸ‘ŗđŸģ‍♀":"1f473-1f3fb-200d-2640-fe0f","đŸ‘ŗđŸŧ‍♀":"1f473-1f3fc-200d-2640-fe0f","đŸ‘ŗđŸŊ‍♀":"1f473-1f3fd-200d-2640-fe0f","đŸ‘ŗ🏾‍♀":"1f473-1f3fe-200d-2640-fe0f","đŸ‘ŗđŸŋ‍♀":"1f473-1f3ff-200d-2640-fe0f","đŸ¤ĩ‍♂ī¸":"1f935-200d-2642-fe0f","đŸ¤ĩđŸģ‍♂":"1f935-1f3fb-200d-2642-fe0f","đŸ¤ĩđŸŧ‍♂":"1f935-1f3fc-200d-2642-fe0f","đŸ¤ĩđŸŊ‍♂":"1f935-1f3fd-200d-2642-fe0f","đŸ¤ĩ🏾‍♂":"1f935-1f3fe-200d-2642-fe0f","đŸ¤ĩđŸŋ‍♂":"1f935-1f3ff-200d-2642-fe0f","đŸ¤ĩ‍♀ī¸":"1f935-200d-2640-fe0f","đŸ¤ĩđŸģ‍♀":"1f935-1f3fb-200d-2640-fe0f","đŸ¤ĩđŸŧ‍♀":"1f935-1f3fc-200d-2640-fe0f","đŸ¤ĩđŸŊ‍♀":"1f935-1f3fd-200d-2640-fe0f","đŸ¤ĩ🏾‍♀":"1f935-1f3fe-200d-2640-fe0f","đŸ¤ĩđŸŋ‍♀":"1f935-1f3ff-200d-2640-fe0f","👰‍♂ī¸":"1f470-200d-2642-fe0f","👰đŸģ‍♂":"1f470-1f3fb-200d-2642-fe0f","👰đŸŧ‍♂":"1f470-1f3fc-200d-2642-fe0f","👰đŸŊ‍♂":"1f470-1f3fd-200d-2642-fe0f","👰🏾‍♂":"1f470-1f3fe-200d-2642-fe0f","👰đŸŋ‍♂":"1f470-1f3ff-200d-2642-fe0f","👰‍♀ī¸":"1f470-200d-2640-fe0f","👰đŸģ‍♀":"1f470-1f3fb-200d-2640-fe0f","👰đŸŧ‍♀":"1f470-1f3fc-200d-2640-fe0f","👰đŸŊ‍♀":"1f470-1f3fd-200d-2640-fe0f","👰🏾‍♀":"1f470-1f3fe-200d-2640-fe0f","👰đŸŋ‍♀":"1f470-1f3ff-200d-2640-fe0f","👩đŸģ‍đŸŧ":"1f469-1f3fb-200d-1f37c","👩đŸŧ‍đŸŧ":"1f469-1f3fc-200d-1f37c","👩đŸŊ‍đŸŧ":"1f469-1f3fd-200d-1f37c","👩🏾‍đŸŧ":"1f469-1f3fe-200d-1f37c","👩đŸŋ‍đŸŧ":"1f469-1f3ff-200d-1f37c","👨đŸģ‍đŸŧ":"1f468-1f3fb-200d-1f37c","👨đŸŧ‍đŸŧ":"1f468-1f3fc-200d-1f37c","👨đŸŊ‍đŸŧ":"1f468-1f3fd-200d-1f37c","👨🏾‍đŸŧ":"1f468-1f3fe-200d-1f37c","👨đŸŋ‍đŸŧ":"1f468-1f3ff-200d-1f37c","🧑đŸģ‍đŸŧ":"1f9d1-1f3fb-200d-1f37c","🧑đŸŧ‍đŸŧ":"1f9d1-1f3fc-200d-1f37c","🧑đŸŊ‍đŸŧ":"1f9d1-1f3fd-200d-1f37c","🧑🏾‍đŸŧ":"1f9d1-1f3fe-200d-1f37c","🧑đŸŋ‍đŸŧ":"1f9d1-1f3ff-200d-1f37c","🧑đŸģ‍🎄":"1f9d1-1f3fb-200d-1f384","🧑đŸŧ‍🎄":"1f9d1-1f3fc-200d-1f384","🧑đŸŊ‍🎄":"1f9d1-1f3fd-200d-1f384","🧑🏾‍🎄":"1f9d1-1f3fe-200d-1f384","🧑đŸŋ‍🎄":"1f9d1-1f3ff-200d-1f384","đŸĻ¸â€â™‚ī¸":"1f9b8-200d-2642-fe0f","đŸĻ¸đŸģ‍♂":"1f9b8-1f3fb-200d-2642-fe0f","đŸĻ¸đŸŧ‍♂":"1f9b8-1f3fc-200d-2642-fe0f","đŸĻ¸đŸŊ‍♂":"1f9b8-1f3fd-200d-2642-fe0f","đŸĻ¸đŸžâ€â™‚":"1f9b8-1f3fe-200d-2642-fe0f","đŸĻ¸đŸŋ‍♂":"1f9b8-1f3ff-200d-2642-fe0f","đŸĻ¸â€â™€ī¸":"1f9b8-200d-2640-fe0f","đŸĻ¸đŸģ‍♀":"1f9b8-1f3fb-200d-2640-fe0f","đŸĻ¸đŸŧ‍♀":"1f9b8-1f3fc-200d-2640-fe0f","đŸĻ¸đŸŊ‍♀":"1f9b8-1f3fd-200d-2640-fe0f","đŸĻ¸đŸžâ€â™€":"1f9b8-1f3fe-200d-2640-fe0f","đŸĻ¸đŸŋ‍♀":"1f9b8-1f3ff-200d-2640-fe0f","đŸĻšâ€â™‚ī¸":"1f9b9-200d-2642-fe0f","đŸĻšđŸģ‍♂":"1f9b9-1f3fb-200d-2642-fe0f","đŸĻšđŸŧ‍♂":"1f9b9-1f3fc-200d-2642-fe0f","đŸĻšđŸŊ‍♂":"1f9b9-1f3fd-200d-2642-fe0f","đŸĻšđŸžâ€â™‚":"1f9b9-1f3fe-200d-2642-fe0f","đŸĻšđŸŋ‍♂":"1f9b9-1f3ff-200d-2642-fe0f","đŸĻšâ€â™€ī¸":"1f9b9-200d-2640-fe0f","đŸĻšđŸģ‍♀":"1f9b9-1f3fb-200d-2640-fe0f","đŸĻšđŸŧ‍♀":"1f9b9-1f3fc-200d-2640-fe0f","đŸĻšđŸŊ‍♀":"1f9b9-1f3fd-200d-2640-fe0f","đŸĻšđŸžâ€â™€":"1f9b9-1f3fe-200d-2640-fe0f","đŸĻšđŸŋ‍♀":"1f9b9-1f3ff-200d-2640-fe0f","🧙‍♂ī¸":"1f9d9-200d-2642-fe0f","🧙đŸģ‍♂":"1f9d9-1f3fb-200d-2642-fe0f","🧙đŸŧ‍♂":"1f9d9-1f3fc-200d-2642-fe0f","🧙đŸŊ‍♂":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂":"1f9d9-1f3fe-200d-2642-fe0f","🧙đŸŋ‍♂":"1f9d9-1f3ff-200d-2642-fe0f","🧙‍♀ī¸":"1f9d9-200d-2640-fe0f","🧙đŸģ‍♀":"1f9d9-1f3fb-200d-2640-fe0f","🧙đŸŧ‍♀":"1f9d9-1f3fc-200d-2640-fe0f","🧙đŸŊ‍♀":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀":"1f9d9-1f3fe-200d-2640-fe0f","🧙đŸŋ‍♀":"1f9d9-1f3ff-200d-2640-fe0f","🧚‍♂ī¸":"1f9da-200d-2642-fe0f","🧚đŸģ‍♂":"1f9da-1f3fb-200d-2642-fe0f","🧚đŸŧ‍♂":"1f9da-1f3fc-200d-2642-fe0f","🧚đŸŊ‍♂":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂":"1f9da-1f3fe-200d-2642-fe0f","🧚đŸŋ‍♂":"1f9da-1f3ff-200d-2642-fe0f","🧚‍♀ī¸":"1f9da-200d-2640-fe0f","🧚đŸģ‍♀":"1f9da-1f3fb-200d-2640-fe0f","🧚đŸŧ‍♀":"1f9da-1f3fc-200d-2640-fe0f","🧚đŸŊ‍♀":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀":"1f9da-1f3fe-200d-2640-fe0f","🧚đŸŋ‍♀":"1f9da-1f3ff-200d-2640-fe0f","🧛‍♂ī¸":"1f9db-200d-2642-fe0f","🧛đŸģ‍♂":"1f9db-1f3fb-200d-2642-fe0f","🧛đŸŧ‍♂":"1f9db-1f3fc-200d-2642-fe0f","🧛đŸŊ‍♂":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂":"1f9db-1f3fe-200d-2642-fe0f","🧛đŸŋ‍♂":"1f9db-1f3ff-200d-2642-fe0f","🧛‍♀ī¸":"1f9db-200d-2640-fe0f","🧛đŸģ‍♀":"1f9db-1f3fb-200d-2640-fe0f","🧛đŸŧ‍♀":"1f9db-1f3fc-200d-2640-fe0f","🧛đŸŊ‍♀":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀":"1f9db-1f3fe-200d-2640-fe0f","🧛đŸŋ‍♀":"1f9db-1f3ff-200d-2640-fe0f","🧜‍♂ī¸":"1f9dc-200d-2642-fe0f","🧜đŸģ‍♂":"1f9dc-1f3fb-200d-2642-fe0f","🧜đŸŧ‍♂":"1f9dc-1f3fc-200d-2642-fe0f","🧜đŸŊ‍♂":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂":"1f9dc-1f3fe-200d-2642-fe0f","🧜đŸŋ‍♂":"1f9dc-1f3ff-200d-2642-fe0f","🧜‍♀ī¸":"1f9dc-200d-2640-fe0f","🧜đŸģ‍♀":"1f9dc-1f3fb-200d-2640-fe0f","🧜đŸŧ‍♀":"1f9dc-1f3fc-200d-2640-fe0f","🧜đŸŊ‍♀":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀":"1f9dc-1f3fe-200d-2640-fe0f","🧜đŸŋ‍♀":"1f9dc-1f3ff-200d-2640-fe0f","🧝‍♂ī¸":"1f9dd-200d-2642-fe0f","🧝đŸģ‍♂":"1f9dd-1f3fb-200d-2642-fe0f","🧝đŸŧ‍♂":"1f9dd-1f3fc-200d-2642-fe0f","🧝đŸŊ‍♂":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂":"1f9dd-1f3fe-200d-2642-fe0f","🧝đŸŋ‍♂":"1f9dd-1f3ff-200d-2642-fe0f","🧝‍♀ī¸":"1f9dd-200d-2640-fe0f","🧝đŸģ‍♀":"1f9dd-1f3fb-200d-2640-fe0f","🧝đŸŧ‍♀":"1f9dd-1f3fc-200d-2640-fe0f","🧝đŸŊ‍♀":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀":"1f9dd-1f3fe-200d-2640-fe0f","🧝đŸŋ‍♀":"1f9dd-1f3ff-200d-2640-fe0f","🧞‍♂ī¸":"1f9de-200d-2642-fe0f","🧞‍♀ī¸":"1f9de-200d-2640-fe0f","🧟‍♂ī¸":"1f9df-200d-2642-fe0f","🧟‍♀ī¸":"1f9df-200d-2640-fe0f","💆‍♂ī¸":"1f486-200d-2642-fe0f","💆đŸģ‍♂":"1f486-1f3fb-200d-2642-fe0f","💆đŸŧ‍♂":"1f486-1f3fc-200d-2642-fe0f","💆đŸŊ‍♂":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂":"1f486-1f3fe-200d-2642-fe0f","💆đŸŋ‍♂":"1f486-1f3ff-200d-2642-fe0f","💆‍♀ī¸":"1f486-200d-2640-fe0f","💆đŸģ‍♀":"1f486-1f3fb-200d-2640-fe0f","💆đŸŧ‍♀":"1f486-1f3fc-200d-2640-fe0f","💆đŸŊ‍♀":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀":"1f486-1f3fe-200d-2640-fe0f","💆đŸŋ‍♀":"1f486-1f3ff-200d-2640-fe0f","💇‍♂ī¸":"1f487-200d-2642-fe0f","💇đŸģ‍♂":"1f487-1f3fb-200d-2642-fe0f","💇đŸŧ‍♂":"1f487-1f3fc-200d-2642-fe0f","💇đŸŊ‍♂":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂":"1f487-1f3fe-200d-2642-fe0f","💇đŸŋ‍♂":"1f487-1f3ff-200d-2642-fe0f","💇‍♀ī¸":"1f487-200d-2640-fe0f","💇đŸģ‍♀":"1f487-1f3fb-200d-2640-fe0f","💇đŸŧ‍♀":"1f487-1f3fc-200d-2640-fe0f","💇đŸŊ‍♀":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀":"1f487-1f3fe-200d-2640-fe0f","💇đŸŋ‍♀":"1f487-1f3ff-200d-2640-fe0f","đŸšļ‍♂ī¸":"1f6b6-200d-2642-fe0f","đŸšļđŸģ‍♂":"1f6b6-1f3fb-200d-2642-fe0f","đŸšļđŸŧ‍♂":"1f6b6-1f3fc-200d-2642-fe0f","đŸšļđŸŊ‍♂":"1f6b6-1f3fd-200d-2642-fe0f","đŸšļ🏾‍♂":"1f6b6-1f3fe-200d-2642-fe0f","đŸšļđŸŋ‍♂":"1f6b6-1f3ff-200d-2642-fe0f","đŸšļ‍♀ī¸":"1f6b6-200d-2640-fe0f","đŸšļđŸģ‍♀":"1f6b6-1f3fb-200d-2640-fe0f","đŸšļđŸŧ‍♀":"1f6b6-1f3fc-200d-2640-fe0f","đŸšļđŸŊ‍♀":"1f6b6-1f3fd-200d-2640-fe0f","đŸšļ🏾‍♀":"1f6b6-1f3fe-200d-2640-fe0f","đŸšļđŸŋ‍♀":"1f6b6-1f3ff-200d-2640-fe0f","🧍‍♂ī¸":"1f9cd-200d-2642-fe0f","🧍đŸģ‍♂":"1f9cd-1f3fb-200d-2642-fe0f","🧍đŸŧ‍♂":"1f9cd-1f3fc-200d-2642-fe0f","🧍đŸŊ‍♂":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂":"1f9cd-1f3fe-200d-2642-fe0f","🧍đŸŋ‍♂":"1f9cd-1f3ff-200d-2642-fe0f","🧍‍♀ī¸":"1f9cd-200d-2640-fe0f","🧍đŸģ‍♀":"1f9cd-1f3fb-200d-2640-fe0f","🧍đŸŧ‍♀":"1f9cd-1f3fc-200d-2640-fe0f","🧍đŸŊ‍♀":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀":"1f9cd-1f3fe-200d-2640-fe0f","🧍đŸŋ‍♀":"1f9cd-1f3ff-200d-2640-fe0f","🧎‍♂ī¸":"1f9ce-200d-2642-fe0f","🧎đŸģ‍♂":"1f9ce-1f3fb-200d-2642-fe0f","🧎đŸŧ‍♂":"1f9ce-1f3fc-200d-2642-fe0f","🧎đŸŊ‍♂":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂":"1f9ce-1f3fe-200d-2642-fe0f","🧎đŸŋ‍♂":"1f9ce-1f3ff-200d-2642-fe0f","🧎‍♀ī¸":"1f9ce-200d-2640-fe0f","🧎đŸģ‍♀":"1f9ce-1f3fb-200d-2640-fe0f","🧎đŸŧ‍♀":"1f9ce-1f3fc-200d-2640-fe0f","🧎đŸŊ‍♀":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀":"1f9ce-1f3fe-200d-2640-fe0f","🧎đŸŋ‍♀":"1f9ce-1f3ff-200d-2640-fe0f","🧑đŸģ‍đŸĻ¯":"1f9d1-1f3fb-200d-1f9af","🧑đŸŧ‍đŸĻ¯":"1f9d1-1f3fc-200d-1f9af","🧑đŸŊ‍đŸĻ¯":"1f9d1-1f3fd-200d-1f9af","🧑🏾‍đŸĻ¯":"1f9d1-1f3fe-200d-1f9af","🧑đŸŋ‍đŸĻ¯":"1f9d1-1f3ff-200d-1f9af","👨đŸģ‍đŸĻ¯":"1f468-1f3fb-200d-1f9af","👨đŸŧ‍đŸĻ¯":"1f468-1f3fc-200d-1f9af","👨đŸŊ‍đŸĻ¯":"1f468-1f3fd-200d-1f9af","👨🏾‍đŸĻ¯":"1f468-1f3fe-200d-1f9af","👨đŸŋ‍đŸĻ¯":"1f468-1f3ff-200d-1f9af","👩đŸģ‍đŸĻ¯":"1f469-1f3fb-200d-1f9af","👩đŸŧ‍đŸĻ¯":"1f469-1f3fc-200d-1f9af","👩đŸŊ‍đŸĻ¯":"1f469-1f3fd-200d-1f9af","👩🏾‍đŸĻ¯":"1f469-1f3fe-200d-1f9af","👩đŸŋ‍đŸĻ¯":"1f469-1f3ff-200d-1f9af","🧑đŸģ‍đŸĻŧ":"1f9d1-1f3fb-200d-1f9bc","🧑đŸŧ‍đŸĻŧ":"1f9d1-1f3fc-200d-1f9bc","🧑đŸŊ‍đŸĻŧ":"1f9d1-1f3fd-200d-1f9bc","🧑🏾‍đŸĻŧ":"1f9d1-1f3fe-200d-1f9bc","🧑đŸŋ‍đŸĻŧ":"1f9d1-1f3ff-200d-1f9bc","👨đŸģ‍đŸĻŧ":"1f468-1f3fb-200d-1f9bc","👨đŸŧ‍đŸĻŧ":"1f468-1f3fc-200d-1f9bc","👨đŸŊ‍đŸĻŧ":"1f468-1f3fd-200d-1f9bc","👨🏾‍đŸĻŧ":"1f468-1f3fe-200d-1f9bc","👨đŸŋ‍đŸĻŧ":"1f468-1f3ff-200d-1f9bc","👩đŸģ‍đŸĻŧ":"1f469-1f3fb-200d-1f9bc","👩đŸŧ‍đŸĻŧ":"1f469-1f3fc-200d-1f9bc","👩đŸŊ‍đŸĻŧ":"1f469-1f3fd-200d-1f9bc","👩🏾‍đŸĻŧ":"1f469-1f3fe-200d-1f9bc","👩đŸŋ‍đŸĻŧ":"1f469-1f3ff-200d-1f9bc","🧑đŸģ‍đŸĻŊ":"1f9d1-1f3fb-200d-1f9bd","🧑đŸŧ‍đŸĻŊ":"1f9d1-1f3fc-200d-1f9bd","🧑đŸŊ‍đŸĻŊ":"1f9d1-1f3fd-200d-1f9bd","🧑🏾‍đŸĻŊ":"1f9d1-1f3fe-200d-1f9bd","🧑đŸŋ‍đŸĻŊ":"1f9d1-1f3ff-200d-1f9bd","👨đŸģ‍đŸĻŊ":"1f468-1f3fb-200d-1f9bd","👨đŸŧ‍đŸĻŊ":"1f468-1f3fc-200d-1f9bd","👨đŸŊ‍đŸĻŊ":"1f468-1f3fd-200d-1f9bd","👨🏾‍đŸĻŊ":"1f468-1f3fe-200d-1f9bd","👨đŸŋ‍đŸĻŊ":"1f468-1f3ff-200d-1f9bd","👩đŸģ‍đŸĻŊ":"1f469-1f3fb-200d-1f9bd","👩đŸŧ‍đŸĻŊ":"1f469-1f3fc-200d-1f9bd","👩đŸŊ‍đŸĻŊ":"1f469-1f3fd-200d-1f9bd","👩🏾‍đŸĻŊ":"1f469-1f3fe-200d-1f9bd","👩đŸŋ‍đŸĻŊ":"1f469-1f3ff-200d-1f9bd","🏃‍♂ī¸":"1f3c3-200d-2642-fe0f","🏃đŸģ‍♂":"1f3c3-1f3fb-200d-2642-fe0f","🏃đŸŧ‍♂":"1f3c3-1f3fc-200d-2642-fe0f","🏃đŸŊ‍♂":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂":"1f3c3-1f3fe-200d-2642-fe0f","🏃đŸŋ‍♂":"1f3c3-1f3ff-200d-2642-fe0f","🏃‍♀ī¸":"1f3c3-200d-2640-fe0f","🏃đŸģ‍♀":"1f3c3-1f3fb-200d-2640-fe0f","🏃đŸŧ‍♀":"1f3c3-1f3fc-200d-2640-fe0f","🏃đŸŊ‍♀":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀":"1f3c3-1f3fe-200d-2640-fe0f","🏃đŸŋ‍♀":"1f3c3-1f3ff-200d-2640-fe0f","đŸ‘¯â€â™‚ī¸":"1f46f-200d-2642-fe0f","đŸ‘¯â€â™€ī¸":"1f46f-200d-2640-fe0f","🧖‍♂ī¸":"1f9d6-200d-2642-fe0f","🧖đŸģ‍♂":"1f9d6-1f3fb-200d-2642-fe0f","🧖đŸŧ‍♂":"1f9d6-1f3fc-200d-2642-fe0f","🧖đŸŊ‍♂":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂":"1f9d6-1f3fe-200d-2642-fe0f","🧖đŸŋ‍♂":"1f9d6-1f3ff-200d-2642-fe0f","🧖‍♀ī¸":"1f9d6-200d-2640-fe0f","🧖đŸģ‍♀":"1f9d6-1f3fb-200d-2640-fe0f","🧖đŸŧ‍♀":"1f9d6-1f3fc-200d-2640-fe0f","🧖đŸŊ‍♀":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀":"1f9d6-1f3fe-200d-2640-fe0f","🧖đŸŋ‍♀":"1f9d6-1f3ff-200d-2640-fe0f","🧗‍♂ī¸":"1f9d7-200d-2642-fe0f","🧗đŸģ‍♂":"1f9d7-1f3fb-200d-2642-fe0f","🧗đŸŧ‍♂":"1f9d7-1f3fc-200d-2642-fe0f","🧗đŸŊ‍♂":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂":"1f9d7-1f3fe-200d-2642-fe0f","🧗đŸŋ‍♂":"1f9d7-1f3ff-200d-2642-fe0f","🧗‍♀ī¸":"1f9d7-200d-2640-fe0f","🧗đŸģ‍♀":"1f9d7-1f3fb-200d-2640-fe0f","🧗đŸŧ‍♀":"1f9d7-1f3fc-200d-2640-fe0f","🧗đŸŊ‍♀":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀":"1f9d7-1f3fe-200d-2640-fe0f","🧗đŸŋ‍♀":"1f9d7-1f3ff-200d-2640-fe0f","🏌‍♂ī¸":"1f3cc-fe0f-200d-2642-fe0f","🏌ī¸â€â™‚":"1f3cc-fe0f-200d-2642-fe0f","🏌đŸģ‍♂":"1f3cc-1f3fb-200d-2642-fe0f","🏌đŸŧ‍♂":"1f3cc-1f3fc-200d-2642-fe0f","🏌đŸŊ‍♂":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂":"1f3cc-1f3fe-200d-2642-fe0f","🏌đŸŋ‍♂":"1f3cc-1f3ff-200d-2642-fe0f","🏌‍♀ī¸":"1f3cc-fe0f-200d-2640-fe0f","🏌ī¸â€â™€":"1f3cc-fe0f-200d-2640-fe0f","🏌đŸģ‍♀":"1f3cc-1f3fb-200d-2640-fe0f","🏌đŸŧ‍♀":"1f3cc-1f3fc-200d-2640-fe0f","🏌đŸŊ‍♀":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀":"1f3cc-1f3fe-200d-2640-fe0f","🏌đŸŋ‍♀":"1f3cc-1f3ff-200d-2640-fe0f","🏄‍♂ī¸":"1f3c4-200d-2642-fe0f","🏄đŸģ‍♂":"1f3c4-1f3fb-200d-2642-fe0f","🏄đŸŧ‍♂":"1f3c4-1f3fc-200d-2642-fe0f","🏄đŸŊ‍♂":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂":"1f3c4-1f3fe-200d-2642-fe0f","🏄đŸŋ‍♂":"1f3c4-1f3ff-200d-2642-fe0f","🏄‍♀ī¸":"1f3c4-200d-2640-fe0f","🏄đŸģ‍♀":"1f3c4-1f3fb-200d-2640-fe0f","🏄đŸŧ‍♀":"1f3c4-1f3fc-200d-2640-fe0f","🏄đŸŊ‍♀":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀":"1f3c4-1f3fe-200d-2640-fe0f","🏄đŸŋ‍♀":"1f3c4-1f3ff-200d-2640-fe0f","đŸšŖ‍♂ī¸":"1f6a3-200d-2642-fe0f","đŸšŖđŸģ‍♂":"1f6a3-1f3fb-200d-2642-fe0f","đŸšŖđŸŧ‍♂":"1f6a3-1f3fc-200d-2642-fe0f","đŸšŖđŸŊ‍♂":"1f6a3-1f3fd-200d-2642-fe0f","đŸšŖ🏾‍♂":"1f6a3-1f3fe-200d-2642-fe0f","đŸšŖđŸŋ‍♂":"1f6a3-1f3ff-200d-2642-fe0f","đŸšŖ‍♀ī¸":"1f6a3-200d-2640-fe0f","đŸšŖđŸģ‍♀":"1f6a3-1f3fb-200d-2640-fe0f","đŸšŖđŸŧ‍♀":"1f6a3-1f3fc-200d-2640-fe0f","đŸšŖđŸŊ‍♀":"1f6a3-1f3fd-200d-2640-fe0f","đŸšŖ🏾‍♀":"1f6a3-1f3fe-200d-2640-fe0f","đŸšŖđŸŋ‍♀":"1f6a3-1f3ff-200d-2640-fe0f","🏊‍♂ī¸":"1f3ca-200d-2642-fe0f","🏊đŸģ‍♂":"1f3ca-1f3fb-200d-2642-fe0f","🏊đŸŧ‍♂":"1f3ca-1f3fc-200d-2642-fe0f","🏊đŸŊ‍♂":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂":"1f3ca-1f3fe-200d-2642-fe0f","🏊đŸŋ‍♂":"1f3ca-1f3ff-200d-2642-fe0f","🏊‍♀ī¸":"1f3ca-200d-2640-fe0f","🏊đŸģ‍♀":"1f3ca-1f3fb-200d-2640-fe0f","🏊đŸŧ‍♀":"1f3ca-1f3fc-200d-2640-fe0f","🏊đŸŊ‍♀":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀":"1f3ca-1f3fe-200d-2640-fe0f","🏊đŸŋ‍♀":"1f3ca-1f3ff-200d-2640-fe0f","⛹‍♂ī¸":"26f9-fe0f-200d-2642-fe0f","⛹ī¸â€â™‚":"26f9-fe0f-200d-2642-fe0f","⛹đŸģ‍♂":"26f9-1f3fb-200d-2642-fe0f","⛹đŸŧ‍♂":"26f9-1f3fc-200d-2642-fe0f","⛹đŸŊ‍♂":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂":"26f9-1f3fe-200d-2642-fe0f","⛹đŸŋ‍♂":"26f9-1f3ff-200d-2642-fe0f","⛹‍♀ī¸":"26f9-fe0f-200d-2640-fe0f","⛹ī¸â€â™€":"26f9-fe0f-200d-2640-fe0f","⛹đŸģ‍♀":"26f9-1f3fb-200d-2640-fe0f","⛹đŸŧ‍♀":"26f9-1f3fc-200d-2640-fe0f","⛹đŸŊ‍♀":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀":"26f9-1f3fe-200d-2640-fe0f","⛹đŸŋ‍♀":"26f9-1f3ff-200d-2640-fe0f","🏋‍♂ī¸":"1f3cb-fe0f-200d-2642-fe0f","🏋ī¸â€â™‚":"1f3cb-fe0f-200d-2642-fe0f","🏋đŸģ‍♂":"1f3cb-1f3fb-200d-2642-fe0f","🏋đŸŧ‍♂":"1f3cb-1f3fc-200d-2642-fe0f","🏋đŸŊ‍♂":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂":"1f3cb-1f3fe-200d-2642-fe0f","🏋đŸŋ‍♂":"1f3cb-1f3ff-200d-2642-fe0f","🏋‍♀ī¸":"1f3cb-fe0f-200d-2640-fe0f","🏋ī¸â€â™€":"1f3cb-fe0f-200d-2640-fe0f","🏋đŸģ‍♀":"1f3cb-1f3fb-200d-2640-fe0f","🏋đŸŧ‍♀":"1f3cb-1f3fc-200d-2640-fe0f","🏋đŸŊ‍♀":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀":"1f3cb-1f3fe-200d-2640-fe0f","🏋đŸŋ‍♀":"1f3cb-1f3ff-200d-2640-fe0f","🚴‍♂ī¸":"1f6b4-200d-2642-fe0f","🚴đŸģ‍♂":"1f6b4-1f3fb-200d-2642-fe0f","🚴đŸŧ‍♂":"1f6b4-1f3fc-200d-2642-fe0f","🚴đŸŊ‍♂":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂":"1f6b4-1f3fe-200d-2642-fe0f","🚴đŸŋ‍♂":"1f6b4-1f3ff-200d-2642-fe0f","🚴‍♀ī¸":"1f6b4-200d-2640-fe0f","🚴đŸģ‍♀":"1f6b4-1f3fb-200d-2640-fe0f","🚴đŸŧ‍♀":"1f6b4-1f3fc-200d-2640-fe0f","🚴đŸŊ‍♀":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀":"1f6b4-1f3fe-200d-2640-fe0f","🚴đŸŋ‍♀":"1f6b4-1f3ff-200d-2640-fe0f","đŸšĩ‍♂ī¸":"1f6b5-200d-2642-fe0f","đŸšĩđŸģ‍♂":"1f6b5-1f3fb-200d-2642-fe0f","đŸšĩđŸŧ‍♂":"1f6b5-1f3fc-200d-2642-fe0f","đŸšĩđŸŊ‍♂":"1f6b5-1f3fd-200d-2642-fe0f","đŸšĩ🏾‍♂":"1f6b5-1f3fe-200d-2642-fe0f","đŸšĩđŸŋ‍♂":"1f6b5-1f3ff-200d-2642-fe0f","đŸšĩ‍♀ī¸":"1f6b5-200d-2640-fe0f","đŸšĩđŸģ‍♀":"1f6b5-1f3fb-200d-2640-fe0f","đŸšĩđŸŧ‍♀":"1f6b5-1f3fc-200d-2640-fe0f","đŸšĩđŸŊ‍♀":"1f6b5-1f3fd-200d-2640-fe0f","đŸšĩ🏾‍♀":"1f6b5-1f3fe-200d-2640-fe0f","đŸšĩđŸŋ‍♀":"1f6b5-1f3ff-200d-2640-fe0f","🤸‍♂ī¸":"1f938-200d-2642-fe0f","🤸đŸģ‍♂":"1f938-1f3fb-200d-2642-fe0f","🤸đŸŧ‍♂":"1f938-1f3fc-200d-2642-fe0f","🤸đŸŊ‍♂":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂":"1f938-1f3fe-200d-2642-fe0f","🤸đŸŋ‍♂":"1f938-1f3ff-200d-2642-fe0f","🤸‍♀ī¸":"1f938-200d-2640-fe0f","🤸đŸģ‍♀":"1f938-1f3fb-200d-2640-fe0f","🤸đŸŧ‍♀":"1f938-1f3fc-200d-2640-fe0f","🤸đŸŊ‍♀":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀":"1f938-1f3fe-200d-2640-fe0f","🤸đŸŋ‍♀":"1f938-1f3ff-200d-2640-fe0f","đŸ¤ŧ‍♂ī¸":"1f93c-200d-2642-fe0f","đŸ¤ŧ‍♀ī¸":"1f93c-200d-2640-fe0f","đŸ¤Ŋ‍♂ī¸":"1f93d-200d-2642-fe0f","đŸ¤ŊđŸģ‍♂":"1f93d-1f3fb-200d-2642-fe0f","đŸ¤ŊđŸŧ‍♂":"1f93d-1f3fc-200d-2642-fe0f","đŸ¤ŊđŸŊ‍♂":"1f93d-1f3fd-200d-2642-fe0f","đŸ¤Ŋ🏾‍♂":"1f93d-1f3fe-200d-2642-fe0f","đŸ¤ŊđŸŋ‍♂":"1f93d-1f3ff-200d-2642-fe0f","đŸ¤Ŋ‍♀ī¸":"1f93d-200d-2640-fe0f","đŸ¤ŊđŸģ‍♀":"1f93d-1f3fb-200d-2640-fe0f","đŸ¤ŊđŸŧ‍♀":"1f93d-1f3fc-200d-2640-fe0f","đŸ¤ŊđŸŊ‍♀":"1f93d-1f3fd-200d-2640-fe0f","đŸ¤Ŋ🏾‍♀":"1f93d-1f3fe-200d-2640-fe0f","đŸ¤ŊđŸŋ‍♀":"1f93d-1f3ff-200d-2640-fe0f","🤾‍♂ī¸":"1f93e-200d-2642-fe0f","🤾đŸģ‍♂":"1f93e-1f3fb-200d-2642-fe0f","🤾đŸŧ‍♂":"1f93e-1f3fc-200d-2642-fe0f","🤾đŸŊ‍♂":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂":"1f93e-1f3fe-200d-2642-fe0f","🤾đŸŋ‍♂":"1f93e-1f3ff-200d-2642-fe0f","🤾‍♀ī¸":"1f93e-200d-2640-fe0f","🤾đŸģ‍♀":"1f93e-1f3fb-200d-2640-fe0f","🤾đŸŧ‍♀":"1f93e-1f3fc-200d-2640-fe0f","🤾đŸŊ‍♀":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀":"1f93e-1f3fe-200d-2640-fe0f","🤾đŸŋ‍♀":"1f93e-1f3ff-200d-2640-fe0f","🤹‍♂ī¸":"1f939-200d-2642-fe0f","🤹đŸģ‍♂":"1f939-1f3fb-200d-2642-fe0f","🤹đŸŧ‍♂":"1f939-1f3fc-200d-2642-fe0f","🤹đŸŊ‍♂":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂":"1f939-1f3fe-200d-2642-fe0f","🤹đŸŋ‍♂":"1f939-1f3ff-200d-2642-fe0f","🤹‍♀ī¸":"1f939-200d-2640-fe0f","🤹đŸģ‍♀":"1f939-1f3fb-200d-2640-fe0f","🤹đŸŧ‍♀":"1f939-1f3fc-200d-2640-fe0f","🤹đŸŊ‍♀":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀":"1f939-1f3fe-200d-2640-fe0f","🤹đŸŋ‍♀":"1f939-1f3ff-200d-2640-fe0f","🧘‍♂ī¸":"1f9d8-200d-2642-fe0f","🧘đŸģ‍♂":"1f9d8-1f3fb-200d-2642-fe0f","🧘đŸŧ‍♂":"1f9d8-1f3fc-200d-2642-fe0f","🧘đŸŊ‍♂":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂":"1f9d8-1f3fe-200d-2642-fe0f","🧘đŸŋ‍♂":"1f9d8-1f3ff-200d-2642-fe0f","🧘‍♀ī¸":"1f9d8-200d-2640-fe0f","🧘đŸģ‍♀":"1f9d8-1f3fb-200d-2640-fe0f","🧘đŸŧ‍♀":"1f9d8-1f3fc-200d-2640-fe0f","🧘đŸŊ‍♀":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀":"1f9d8-1f3fe-200d-2640-fe0f","🧘đŸŋ‍♀":"1f9d8-1f3ff-200d-2640-fe0f","đŸģ‍❄ī¸":"1f43b-200d-2744-fe0f","đŸŗī¸â€đŸŒˆ":"1f3f3-fe0f-200d-1f308","đŸŗ‍⚧ī¸":"1f3f3-fe0f-200d-26a7-fe0f","đŸŗī¸â€âš§":"1f3f3-fe0f-200d-26a7-fe0f","🏴‍☠ī¸":"1f3f4-200d-2620-fe0f","👁ī¸â€đŸ—¨ī¸":"1f441-200d-1f5e8","đŸĢąđŸģ‍đŸĢ˛đŸŧ":"1faf1-1f3fb-200d-1faf2-1f3fc","đŸĢąđŸģ‍đŸĢ˛đŸŊ":"1faf1-1f3fb-200d-1faf2-1f3fd","đŸĢąđŸģ‍đŸĢ˛đŸž":"1faf1-1f3fb-200d-1faf2-1f3fe","đŸĢąđŸģ‍đŸĢ˛đŸŋ":"1faf1-1f3fb-200d-1faf2-1f3ff","đŸĢąđŸŧ‍đŸĢ˛đŸģ":"1faf1-1f3fc-200d-1faf2-1f3fb","đŸĢąđŸŧ‍đŸĢ˛đŸŊ":"1faf1-1f3fc-200d-1faf2-1f3fd","đŸĢąđŸŧ‍đŸĢ˛đŸž":"1faf1-1f3fc-200d-1faf2-1f3fe","đŸĢąđŸŧ‍đŸĢ˛đŸŋ":"1faf1-1f3fc-200d-1faf2-1f3ff","đŸĢąđŸŊ‍đŸĢ˛đŸģ":"1faf1-1f3fd-200d-1faf2-1f3fb","đŸĢąđŸŊ‍đŸĢ˛đŸŧ":"1faf1-1f3fd-200d-1faf2-1f3fc","đŸĢąđŸŊ‍đŸĢ˛đŸž":"1faf1-1f3fd-200d-1faf2-1f3fe","đŸĢąđŸŊ‍đŸĢ˛đŸŋ":"1faf1-1f3fd-200d-1faf2-1f3ff","đŸĢąđŸžâ€đŸĢ˛đŸģ":"1faf1-1f3fe-200d-1faf2-1f3fb","đŸĢąđŸžâ€đŸĢ˛đŸŧ":"1faf1-1f3fe-200d-1faf2-1f3fc","đŸĢąđŸžâ€đŸĢ˛đŸŊ":"1faf1-1f3fe-200d-1faf2-1f3fd","đŸĢąđŸžâ€đŸĢ˛đŸŋ":"1faf1-1f3fe-200d-1faf2-1f3ff","đŸĢąđŸŋ‍đŸĢ˛đŸģ":"1faf1-1f3ff-200d-1faf2-1f3fb","đŸĢąđŸŋ‍đŸĢ˛đŸŧ":"1faf1-1f3ff-200d-1faf2-1f3fc","đŸĢąđŸŋ‍đŸĢ˛đŸŊ":"1faf1-1f3ff-200d-1faf2-1f3fd","đŸĢąđŸŋ‍đŸĢ˛đŸž":"1faf1-1f3ff-200d-1faf2-1f3fe","🧔đŸģ‍♂ī¸":"1f9d4-1f3fb-200d-2642-fe0f","🧔đŸŧ‍♂ī¸":"1f9d4-1f3fc-200d-2642-fe0f","🧔đŸŊ‍♂ī¸":"1f9d4-1f3fd-200d-2642-fe0f","🧔🏾‍♂ī¸":"1f9d4-1f3fe-200d-2642-fe0f","🧔đŸŋ‍♂ī¸":"1f9d4-1f3ff-200d-2642-fe0f","🧔đŸģ‍♀ī¸":"1f9d4-1f3fb-200d-2640-fe0f","🧔đŸŧ‍♀ī¸":"1f9d4-1f3fc-200d-2640-fe0f","🧔đŸŊ‍♀ī¸":"1f9d4-1f3fd-200d-2640-fe0f","🧔🏾‍♀ī¸":"1f9d4-1f3fe-200d-2640-fe0f","🧔đŸŋ‍♀ī¸":"1f9d4-1f3ff-200d-2640-fe0f","👱đŸģ‍♀ī¸":"1f471-1f3fb-200d-2640-fe0f","👱đŸŧ‍♀ī¸":"1f471-1f3fc-200d-2640-fe0f","👱đŸŊ‍♀ī¸":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀ī¸":"1f471-1f3fe-200d-2640-fe0f","👱đŸŋ‍♀ī¸":"1f471-1f3ff-200d-2640-fe0f","👱đŸģ‍♂ī¸":"1f471-1f3fb-200d-2642-fe0f","👱đŸŧ‍♂ī¸":"1f471-1f3fc-200d-2642-fe0f","👱đŸŊ‍♂ī¸":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂ī¸":"1f471-1f3fe-200d-2642-fe0f","👱đŸŋ‍♂ī¸":"1f471-1f3ff-200d-2642-fe0f","🙍đŸģ‍♂ī¸":"1f64d-1f3fb-200d-2642-fe0f","🙍đŸŧ‍♂ī¸":"1f64d-1f3fc-200d-2642-fe0f","🙍đŸŊ‍♂ī¸":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂ī¸":"1f64d-1f3fe-200d-2642-fe0f","🙍đŸŋ‍♂ī¸":"1f64d-1f3ff-200d-2642-fe0f","🙍đŸģ‍♀ī¸":"1f64d-1f3fb-200d-2640-fe0f","🙍đŸŧ‍♀ī¸":"1f64d-1f3fc-200d-2640-fe0f","🙍đŸŊ‍♀ī¸":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀ī¸":"1f64d-1f3fe-200d-2640-fe0f","🙍đŸŋ‍♀ī¸":"1f64d-1f3ff-200d-2640-fe0f","🙎đŸģ‍♂ī¸":"1f64e-1f3fb-200d-2642-fe0f","🙎đŸŧ‍♂ī¸":"1f64e-1f3fc-200d-2642-fe0f","🙎đŸŊ‍♂ī¸":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂ī¸":"1f64e-1f3fe-200d-2642-fe0f","🙎đŸŋ‍♂ī¸":"1f64e-1f3ff-200d-2642-fe0f","🙎đŸģ‍♀ī¸":"1f64e-1f3fb-200d-2640-fe0f","🙎đŸŧ‍♀ī¸":"1f64e-1f3fc-200d-2640-fe0f","🙎đŸŊ‍♀ī¸":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀ī¸":"1f64e-1f3fe-200d-2640-fe0f","🙎đŸŋ‍♀ī¸":"1f64e-1f3ff-200d-2640-fe0f","🙅đŸģ‍♂ī¸":"1f645-1f3fb-200d-2642-fe0f","🙅đŸŧ‍♂ī¸":"1f645-1f3fc-200d-2642-fe0f","🙅đŸŊ‍♂ī¸":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂ī¸":"1f645-1f3fe-200d-2642-fe0f","🙅đŸŋ‍♂ī¸":"1f645-1f3ff-200d-2642-fe0f","🙅đŸģ‍♀ī¸":"1f645-1f3fb-200d-2640-fe0f","🙅đŸŧ‍♀ī¸":"1f645-1f3fc-200d-2640-fe0f","🙅đŸŊ‍♀ī¸":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀ī¸":"1f645-1f3fe-200d-2640-fe0f","🙅đŸŋ‍♀ī¸":"1f645-1f3ff-200d-2640-fe0f","🙆đŸģ‍♂ī¸":"1f646-1f3fb-200d-2642-fe0f","🙆đŸŧ‍♂ī¸":"1f646-1f3fc-200d-2642-fe0f","🙆đŸŊ‍♂ī¸":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂ī¸":"1f646-1f3fe-200d-2642-fe0f","🙆đŸŋ‍♂ī¸":"1f646-1f3ff-200d-2642-fe0f","🙆đŸģ‍♀ī¸":"1f646-1f3fb-200d-2640-fe0f","🙆đŸŧ‍♀ī¸":"1f646-1f3fc-200d-2640-fe0f","🙆đŸŊ‍♀ī¸":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀ī¸":"1f646-1f3fe-200d-2640-fe0f","🙆đŸŋ‍♀ī¸":"1f646-1f3ff-200d-2640-fe0f","💁đŸģ‍♂ī¸":"1f481-1f3fb-200d-2642-fe0f","💁đŸŧ‍♂ī¸":"1f481-1f3fc-200d-2642-fe0f","💁đŸŊ‍♂ī¸":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂ī¸":"1f481-1f3fe-200d-2642-fe0f","💁đŸŋ‍♂ī¸":"1f481-1f3ff-200d-2642-fe0f","💁đŸģ‍♀ī¸":"1f481-1f3fb-200d-2640-fe0f","💁đŸŧ‍♀ī¸":"1f481-1f3fc-200d-2640-fe0f","💁đŸŊ‍♀ī¸":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀ī¸":"1f481-1f3fe-200d-2640-fe0f","💁đŸŋ‍♀ī¸":"1f481-1f3ff-200d-2640-fe0f","🙋đŸģ‍♂ī¸":"1f64b-1f3fb-200d-2642-fe0f","🙋đŸŧ‍♂ī¸":"1f64b-1f3fc-200d-2642-fe0f","🙋đŸŊ‍♂ī¸":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂ī¸":"1f64b-1f3fe-200d-2642-fe0f","🙋đŸŋ‍♂ī¸":"1f64b-1f3ff-200d-2642-fe0f","🙋đŸģ‍♀ī¸":"1f64b-1f3fb-200d-2640-fe0f","🙋đŸŧ‍♀ī¸":"1f64b-1f3fc-200d-2640-fe0f","🙋đŸŊ‍♀ī¸":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀ī¸":"1f64b-1f3fe-200d-2640-fe0f","🙋đŸŋ‍♀ī¸":"1f64b-1f3ff-200d-2640-fe0f","🧏đŸģ‍♂ī¸":"1f9cf-1f3fb-200d-2642-fe0f","🧏đŸŧ‍♂ī¸":"1f9cf-1f3fc-200d-2642-fe0f","🧏đŸŊ‍♂ī¸":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂ī¸":"1f9cf-1f3fe-200d-2642-fe0f","🧏đŸŋ‍♂ī¸":"1f9cf-1f3ff-200d-2642-fe0f","🧏đŸģ‍♀ī¸":"1f9cf-1f3fb-200d-2640-fe0f","🧏đŸŧ‍♀ī¸":"1f9cf-1f3fc-200d-2640-fe0f","🧏đŸŊ‍♀ī¸":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀ī¸":"1f9cf-1f3fe-200d-2640-fe0f","🧏đŸŋ‍♀ī¸":"1f9cf-1f3ff-200d-2640-fe0f","🙇đŸģ‍♂ī¸":"1f647-1f3fb-200d-2642-fe0f","🙇đŸŧ‍♂ī¸":"1f647-1f3fc-200d-2642-fe0f","🙇đŸŊ‍♂ī¸":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂ī¸":"1f647-1f3fe-200d-2642-fe0f","🙇đŸŋ‍♂ī¸":"1f647-1f3ff-200d-2642-fe0f","🙇đŸģ‍♀ī¸":"1f647-1f3fb-200d-2640-fe0f","🙇đŸŧ‍♀ī¸":"1f647-1f3fc-200d-2640-fe0f","🙇đŸŊ‍♀ī¸":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀ī¸":"1f647-1f3fe-200d-2640-fe0f","🙇đŸŋ‍♀ī¸":"1f647-1f3ff-200d-2640-fe0f","đŸ¤ĻđŸģ‍♂ī¸":"1f926-1f3fb-200d-2642-fe0f","đŸ¤ĻđŸŧ‍♂ī¸":"1f926-1f3fc-200d-2642-fe0f","đŸ¤ĻđŸŊ‍♂ī¸":"1f926-1f3fd-200d-2642-fe0f","đŸ¤Ļ🏾‍♂ī¸":"1f926-1f3fe-200d-2642-fe0f","đŸ¤ĻđŸŋ‍♂ī¸":"1f926-1f3ff-200d-2642-fe0f","đŸ¤ĻđŸģ‍♀ī¸":"1f926-1f3fb-200d-2640-fe0f","đŸ¤ĻđŸŧ‍♀ī¸":"1f926-1f3fc-200d-2640-fe0f","đŸ¤ĻđŸŊ‍♀ī¸":"1f926-1f3fd-200d-2640-fe0f","đŸ¤Ļ🏾‍♀ī¸":"1f926-1f3fe-200d-2640-fe0f","đŸ¤ĻđŸŋ‍♀ī¸":"1f926-1f3ff-200d-2640-fe0f","🤷đŸģ‍♂ī¸":"1f937-1f3fb-200d-2642-fe0f","🤷đŸŧ‍♂ī¸":"1f937-1f3fc-200d-2642-fe0f","🤷đŸŊ‍♂ī¸":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂ī¸":"1f937-1f3fe-200d-2642-fe0f","🤷đŸŋ‍♂ī¸":"1f937-1f3ff-200d-2642-fe0f","🤷đŸģ‍♀ī¸":"1f937-1f3fb-200d-2640-fe0f","🤷đŸŧ‍♀ī¸":"1f937-1f3fc-200d-2640-fe0f","🤷đŸŊ‍♀ī¸":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀ī¸":"1f937-1f3fe-200d-2640-fe0f","🤷đŸŋ‍♀ī¸":"1f937-1f3ff-200d-2640-fe0f","🧑đŸģ‍⚕ī¸":"1f9d1-1f3fb-200d-2695-fe0f","🧑đŸŧ‍⚕ī¸":"1f9d1-1f3fc-200d-2695-fe0f","🧑đŸŊ‍⚕ī¸":"1f9d1-1f3fd-200d-2695-fe0f","🧑🏾‍⚕ī¸":"1f9d1-1f3fe-200d-2695-fe0f","🧑đŸŋ‍⚕ī¸":"1f9d1-1f3ff-200d-2695-fe0f","👨đŸģ‍⚕ī¸":"1f468-1f3fb-200d-2695-fe0f","👨đŸŧ‍⚕ī¸":"1f468-1f3fc-200d-2695-fe0f","👨đŸŊ‍⚕ī¸":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕ī¸":"1f468-1f3fe-200d-2695-fe0f","👨đŸŋ‍⚕ī¸":"1f468-1f3ff-200d-2695-fe0f","👩đŸģ‍⚕ī¸":"1f469-1f3fb-200d-2695-fe0f","👩đŸŧ‍⚕ī¸":"1f469-1f3fc-200d-2695-fe0f","👩đŸŊ‍⚕ī¸":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕ī¸":"1f469-1f3fe-200d-2695-fe0f","👩đŸŋ‍⚕ī¸":"1f469-1f3ff-200d-2695-fe0f","🧑đŸģ‍⚖ī¸":"1f9d1-1f3fb-200d-2696-fe0f","🧑đŸŧ‍⚖ī¸":"1f9d1-1f3fc-200d-2696-fe0f","🧑đŸŊ‍⚖ī¸":"1f9d1-1f3fd-200d-2696-fe0f","🧑🏾‍⚖ī¸":"1f9d1-1f3fe-200d-2696-fe0f","🧑đŸŋ‍⚖ī¸":"1f9d1-1f3ff-200d-2696-fe0f","👨đŸģ‍⚖ī¸":"1f468-1f3fb-200d-2696-fe0f","👨đŸŧ‍⚖ī¸":"1f468-1f3fc-200d-2696-fe0f","👨đŸŊ‍⚖ī¸":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖ī¸":"1f468-1f3fe-200d-2696-fe0f","👨đŸŋ‍⚖ī¸":"1f468-1f3ff-200d-2696-fe0f","👩đŸģ‍⚖ī¸":"1f469-1f3fb-200d-2696-fe0f","👩đŸŧ‍⚖ī¸":"1f469-1f3fc-200d-2696-fe0f","👩đŸŊ‍⚖ī¸":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖ī¸":"1f469-1f3fe-200d-2696-fe0f","👩đŸŋ‍⚖ī¸":"1f469-1f3ff-200d-2696-fe0f","🧑đŸģ‍✈ī¸":"1f9d1-1f3fb-200d-2708-fe0f","🧑đŸŧ‍✈ī¸":"1f9d1-1f3fc-200d-2708-fe0f","🧑đŸŊ‍✈ī¸":"1f9d1-1f3fd-200d-2708-fe0f","🧑🏾‍✈ī¸":"1f9d1-1f3fe-200d-2708-fe0f","🧑đŸŋ‍✈ī¸":"1f9d1-1f3ff-200d-2708-fe0f","👨đŸģ‍✈ī¸":"1f468-1f3fb-200d-2708-fe0f","👨đŸŧ‍✈ī¸":"1f468-1f3fc-200d-2708-fe0f","👨đŸŊ‍✈ī¸":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈ī¸":"1f468-1f3fe-200d-2708-fe0f","👨đŸŋ‍✈ī¸":"1f468-1f3ff-200d-2708-fe0f","👩đŸģ‍✈ī¸":"1f469-1f3fb-200d-2708-fe0f","👩đŸŧ‍✈ī¸":"1f469-1f3fc-200d-2708-fe0f","👩đŸŊ‍✈ī¸":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈ī¸":"1f469-1f3fe-200d-2708-fe0f","👩đŸŋ‍✈ī¸":"1f469-1f3ff-200d-2708-fe0f","👮đŸģ‍♂ī¸":"1f46e-1f3fb-200d-2642-fe0f","👮đŸŧ‍♂ī¸":"1f46e-1f3fc-200d-2642-fe0f","👮đŸŊ‍♂ī¸":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂ī¸":"1f46e-1f3fe-200d-2642-fe0f","👮đŸŋ‍♂ī¸":"1f46e-1f3ff-200d-2642-fe0f","👮đŸģ‍♀ī¸":"1f46e-1f3fb-200d-2640-fe0f","👮đŸŧ‍♀ī¸":"1f46e-1f3fc-200d-2640-fe0f","👮đŸŊ‍♀ī¸":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀ī¸":"1f46e-1f3fe-200d-2640-fe0f","👮đŸŋ‍♀ī¸":"1f46e-1f3ff-200d-2640-fe0f","đŸ•ĩī¸â€â™‚ī¸":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩđŸģ‍♂ī¸":"1f575-1f3fb-200d-2642-fe0f","đŸ•ĩđŸŧ‍♂ī¸":"1f575-1f3fc-200d-2642-fe0f","đŸ•ĩđŸŊ‍♂ī¸":"1f575-1f3fd-200d-2642-fe0f","đŸ•ĩ🏾‍♂ī¸":"1f575-1f3fe-200d-2642-fe0f","đŸ•ĩđŸŋ‍♂ī¸":"1f575-1f3ff-200d-2642-fe0f","đŸ•ĩī¸â€â™€ī¸":"1f575-fe0f-200d-2640-fe0f","đŸ•ĩđŸģ‍♀ī¸":"1f575-1f3fb-200d-2640-fe0f","đŸ•ĩđŸŧ‍♀ī¸":"1f575-1f3fc-200d-2640-fe0f","đŸ•ĩđŸŊ‍♀ī¸":"1f575-1f3fd-200d-2640-fe0f","đŸ•ĩ🏾‍♀ī¸":"1f575-1f3fe-200d-2640-fe0f","đŸ•ĩđŸŋ‍♀ī¸":"1f575-1f3ff-200d-2640-fe0f","💂đŸģ‍♂ī¸":"1f482-1f3fb-200d-2642-fe0f","💂đŸŧ‍♂ī¸":"1f482-1f3fc-200d-2642-fe0f","💂đŸŊ‍♂ī¸":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂ī¸":"1f482-1f3fe-200d-2642-fe0f","💂đŸŋ‍♂ī¸":"1f482-1f3ff-200d-2642-fe0f","💂đŸģ‍♀ī¸":"1f482-1f3fb-200d-2640-fe0f","💂đŸŧ‍♀ī¸":"1f482-1f3fc-200d-2640-fe0f","💂đŸŊ‍♀ī¸":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀ī¸":"1f482-1f3fe-200d-2640-fe0f","💂đŸŋ‍♀ī¸":"1f482-1f3ff-200d-2640-fe0f","👷đŸģ‍♂ī¸":"1f477-1f3fb-200d-2642-fe0f","👷đŸŧ‍♂ī¸":"1f477-1f3fc-200d-2642-fe0f","👷đŸŊ‍♂ī¸":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂ī¸":"1f477-1f3fe-200d-2642-fe0f","👷đŸŋ‍♂ī¸":"1f477-1f3ff-200d-2642-fe0f","👷đŸģ‍♀ī¸":"1f477-1f3fb-200d-2640-fe0f","👷đŸŧ‍♀ī¸":"1f477-1f3fc-200d-2640-fe0f","👷đŸŊ‍♀ī¸":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀ī¸":"1f477-1f3fe-200d-2640-fe0f","👷đŸŋ‍♀ī¸":"1f477-1f3ff-200d-2640-fe0f","đŸ‘ŗđŸģ‍♂ī¸":"1f473-1f3fb-200d-2642-fe0f","đŸ‘ŗđŸŧ‍♂ī¸":"1f473-1f3fc-200d-2642-fe0f","đŸ‘ŗđŸŊ‍♂ī¸":"1f473-1f3fd-200d-2642-fe0f","đŸ‘ŗ🏾‍♂ī¸":"1f473-1f3fe-200d-2642-fe0f","đŸ‘ŗđŸŋ‍♂ī¸":"1f473-1f3ff-200d-2642-fe0f","đŸ‘ŗđŸģ‍♀ī¸":"1f473-1f3fb-200d-2640-fe0f","đŸ‘ŗđŸŧ‍♀ī¸":"1f473-1f3fc-200d-2640-fe0f","đŸ‘ŗđŸŊ‍♀ī¸":"1f473-1f3fd-200d-2640-fe0f","đŸ‘ŗ🏾‍♀ī¸":"1f473-1f3fe-200d-2640-fe0f","đŸ‘ŗđŸŋ‍♀ī¸":"1f473-1f3ff-200d-2640-fe0f","đŸ¤ĩđŸģ‍♂ī¸":"1f935-1f3fb-200d-2642-fe0f","đŸ¤ĩđŸŧ‍♂ī¸":"1f935-1f3fc-200d-2642-fe0f","đŸ¤ĩđŸŊ‍♂ī¸":"1f935-1f3fd-200d-2642-fe0f","đŸ¤ĩ🏾‍♂ī¸":"1f935-1f3fe-200d-2642-fe0f","đŸ¤ĩđŸŋ‍♂ī¸":"1f935-1f3ff-200d-2642-fe0f","đŸ¤ĩđŸģ‍♀ī¸":"1f935-1f3fb-200d-2640-fe0f","đŸ¤ĩđŸŧ‍♀ī¸":"1f935-1f3fc-200d-2640-fe0f","đŸ¤ĩđŸŊ‍♀ī¸":"1f935-1f3fd-200d-2640-fe0f","đŸ¤ĩ🏾‍♀ī¸":"1f935-1f3fe-200d-2640-fe0f","đŸ¤ĩđŸŋ‍♀ī¸":"1f935-1f3ff-200d-2640-fe0f","👰đŸģ‍♂ī¸":"1f470-1f3fb-200d-2642-fe0f","👰đŸŧ‍♂ī¸":"1f470-1f3fc-200d-2642-fe0f","👰đŸŊ‍♂ī¸":"1f470-1f3fd-200d-2642-fe0f","👰🏾‍♂ī¸":"1f470-1f3fe-200d-2642-fe0f","👰đŸŋ‍♂ī¸":"1f470-1f3ff-200d-2642-fe0f","👰đŸģ‍♀ī¸":"1f470-1f3fb-200d-2640-fe0f","👰đŸŧ‍♀ī¸":"1f470-1f3fc-200d-2640-fe0f","👰đŸŊ‍♀ī¸":"1f470-1f3fd-200d-2640-fe0f","👰🏾‍♀ī¸":"1f470-1f3fe-200d-2640-fe0f","👰đŸŋ‍♀ī¸":"1f470-1f3ff-200d-2640-fe0f","đŸĻ¸đŸģ‍♂ī¸":"1f9b8-1f3fb-200d-2642-fe0f","đŸĻ¸đŸŧ‍♂ī¸":"1f9b8-1f3fc-200d-2642-fe0f","đŸĻ¸đŸŊ‍♂ī¸":"1f9b8-1f3fd-200d-2642-fe0f","đŸĻ¸đŸžâ€â™‚ī¸":"1f9b8-1f3fe-200d-2642-fe0f","đŸĻ¸đŸŋ‍♂ī¸":"1f9b8-1f3ff-200d-2642-fe0f","đŸĻ¸đŸģ‍♀ī¸":"1f9b8-1f3fb-200d-2640-fe0f","đŸĻ¸đŸŧ‍♀ī¸":"1f9b8-1f3fc-200d-2640-fe0f","đŸĻ¸đŸŊ‍♀ī¸":"1f9b8-1f3fd-200d-2640-fe0f","đŸĻ¸đŸžâ€â™€ī¸":"1f9b8-1f3fe-200d-2640-fe0f","đŸĻ¸đŸŋ‍♀ī¸":"1f9b8-1f3ff-200d-2640-fe0f","đŸĻšđŸģ‍♂ī¸":"1f9b9-1f3fb-200d-2642-fe0f","đŸĻšđŸŧ‍♂ī¸":"1f9b9-1f3fc-200d-2642-fe0f","đŸĻšđŸŊ‍♂ī¸":"1f9b9-1f3fd-200d-2642-fe0f","đŸĻšđŸžâ€â™‚ī¸":"1f9b9-1f3fe-200d-2642-fe0f","đŸĻšđŸŋ‍♂ī¸":"1f9b9-1f3ff-200d-2642-fe0f","đŸĻšđŸģ‍♀ī¸":"1f9b9-1f3fb-200d-2640-fe0f","đŸĻšđŸŧ‍♀ī¸":"1f9b9-1f3fc-200d-2640-fe0f","đŸĻšđŸŊ‍♀ī¸":"1f9b9-1f3fd-200d-2640-fe0f","đŸĻšđŸžâ€â™€ī¸":"1f9b9-1f3fe-200d-2640-fe0f","đŸĻšđŸŋ‍♀ī¸":"1f9b9-1f3ff-200d-2640-fe0f","🧙đŸģ‍♂ī¸":"1f9d9-1f3fb-200d-2642-fe0f","🧙đŸŧ‍♂ī¸":"1f9d9-1f3fc-200d-2642-fe0f","🧙đŸŊ‍♂ī¸":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂ī¸":"1f9d9-1f3fe-200d-2642-fe0f","🧙đŸŋ‍♂ī¸":"1f9d9-1f3ff-200d-2642-fe0f","🧙đŸģ‍♀ī¸":"1f9d9-1f3fb-200d-2640-fe0f","🧙đŸŧ‍♀ī¸":"1f9d9-1f3fc-200d-2640-fe0f","🧙đŸŊ‍♀ī¸":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀ī¸":"1f9d9-1f3fe-200d-2640-fe0f","🧙đŸŋ‍♀ī¸":"1f9d9-1f3ff-200d-2640-fe0f","🧚đŸģ‍♂ī¸":"1f9da-1f3fb-200d-2642-fe0f","🧚đŸŧ‍♂ī¸":"1f9da-1f3fc-200d-2642-fe0f","🧚đŸŊ‍♂ī¸":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂ī¸":"1f9da-1f3fe-200d-2642-fe0f","🧚đŸŋ‍♂ī¸":"1f9da-1f3ff-200d-2642-fe0f","🧚đŸģ‍♀ī¸":"1f9da-1f3fb-200d-2640-fe0f","🧚đŸŧ‍♀ī¸":"1f9da-1f3fc-200d-2640-fe0f","🧚đŸŊ‍♀ī¸":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀ī¸":"1f9da-1f3fe-200d-2640-fe0f","🧚đŸŋ‍♀ī¸":"1f9da-1f3ff-200d-2640-fe0f","🧛đŸģ‍♂ī¸":"1f9db-1f3fb-200d-2642-fe0f","🧛đŸŧ‍♂ī¸":"1f9db-1f3fc-200d-2642-fe0f","🧛đŸŊ‍♂ī¸":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂ī¸":"1f9db-1f3fe-200d-2642-fe0f","🧛đŸŋ‍♂ī¸":"1f9db-1f3ff-200d-2642-fe0f","🧛đŸģ‍♀ī¸":"1f9db-1f3fb-200d-2640-fe0f","🧛đŸŧ‍♀ī¸":"1f9db-1f3fc-200d-2640-fe0f","🧛đŸŊ‍♀ī¸":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀ī¸":"1f9db-1f3fe-200d-2640-fe0f","🧛đŸŋ‍♀ī¸":"1f9db-1f3ff-200d-2640-fe0f","🧜đŸģ‍♂ī¸":"1f9dc-1f3fb-200d-2642-fe0f","🧜đŸŧ‍♂ī¸":"1f9dc-1f3fc-200d-2642-fe0f","🧜đŸŊ‍♂ī¸":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂ī¸":"1f9dc-1f3fe-200d-2642-fe0f","🧜đŸŋ‍♂ī¸":"1f9dc-1f3ff-200d-2642-fe0f","🧜đŸģ‍♀ī¸":"1f9dc-1f3fb-200d-2640-fe0f","🧜đŸŧ‍♀ī¸":"1f9dc-1f3fc-200d-2640-fe0f","🧜đŸŊ‍♀ī¸":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀ī¸":"1f9dc-1f3fe-200d-2640-fe0f","🧜đŸŋ‍♀ī¸":"1f9dc-1f3ff-200d-2640-fe0f","🧝đŸģ‍♂ī¸":"1f9dd-1f3fb-200d-2642-fe0f","🧝đŸŧ‍♂ī¸":"1f9dd-1f3fc-200d-2642-fe0f","🧝đŸŊ‍♂ī¸":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂ī¸":"1f9dd-1f3fe-200d-2642-fe0f","🧝đŸŋ‍♂ī¸":"1f9dd-1f3ff-200d-2642-fe0f","🧝đŸģ‍♀ī¸":"1f9dd-1f3fb-200d-2640-fe0f","🧝đŸŧ‍♀ī¸":"1f9dd-1f3fc-200d-2640-fe0f","🧝đŸŊ‍♀ī¸":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀ī¸":"1f9dd-1f3fe-200d-2640-fe0f","🧝đŸŋ‍♀ī¸":"1f9dd-1f3ff-200d-2640-fe0f","💆đŸģ‍♂ī¸":"1f486-1f3fb-200d-2642-fe0f","💆đŸŧ‍♂ī¸":"1f486-1f3fc-200d-2642-fe0f","💆đŸŊ‍♂ī¸":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂ī¸":"1f486-1f3fe-200d-2642-fe0f","💆đŸŋ‍♂ī¸":"1f486-1f3ff-200d-2642-fe0f","💆đŸģ‍♀ī¸":"1f486-1f3fb-200d-2640-fe0f","💆đŸŧ‍♀ī¸":"1f486-1f3fc-200d-2640-fe0f","💆đŸŊ‍♀ī¸":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀ī¸":"1f486-1f3fe-200d-2640-fe0f","💆đŸŋ‍♀ī¸":"1f486-1f3ff-200d-2640-fe0f","💇đŸģ‍♂ī¸":"1f487-1f3fb-200d-2642-fe0f","💇đŸŧ‍♂ī¸":"1f487-1f3fc-200d-2642-fe0f","💇đŸŊ‍♂ī¸":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂ī¸":"1f487-1f3fe-200d-2642-fe0f","💇đŸŋ‍♂ī¸":"1f487-1f3ff-200d-2642-fe0f","💇đŸģ‍♀ī¸":"1f487-1f3fb-200d-2640-fe0f","💇đŸŧ‍♀ī¸":"1f487-1f3fc-200d-2640-fe0f","💇đŸŊ‍♀ī¸":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀ī¸":"1f487-1f3fe-200d-2640-fe0f","💇đŸŋ‍♀ī¸":"1f487-1f3ff-200d-2640-fe0f","đŸšļđŸģ‍♂ī¸":"1f6b6-1f3fb-200d-2642-fe0f","đŸšļđŸŧ‍♂ī¸":"1f6b6-1f3fc-200d-2642-fe0f","đŸšļđŸŊ‍♂ī¸":"1f6b6-1f3fd-200d-2642-fe0f","đŸšļ🏾‍♂ī¸":"1f6b6-1f3fe-200d-2642-fe0f","đŸšļđŸŋ‍♂ī¸":"1f6b6-1f3ff-200d-2642-fe0f","đŸšļđŸģ‍♀ī¸":"1f6b6-1f3fb-200d-2640-fe0f","đŸšļđŸŧ‍♀ī¸":"1f6b6-1f3fc-200d-2640-fe0f","đŸšļđŸŊ‍♀ī¸":"1f6b6-1f3fd-200d-2640-fe0f","đŸšļ🏾‍♀ī¸":"1f6b6-1f3fe-200d-2640-fe0f","đŸšļđŸŋ‍♀ī¸":"1f6b6-1f3ff-200d-2640-fe0f","🧍đŸģ‍♂ī¸":"1f9cd-1f3fb-200d-2642-fe0f","🧍đŸŧ‍♂ī¸":"1f9cd-1f3fc-200d-2642-fe0f","🧍đŸŊ‍♂ī¸":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂ī¸":"1f9cd-1f3fe-200d-2642-fe0f","🧍đŸŋ‍♂ī¸":"1f9cd-1f3ff-200d-2642-fe0f","🧍đŸģ‍♀ī¸":"1f9cd-1f3fb-200d-2640-fe0f","🧍đŸŧ‍♀ī¸":"1f9cd-1f3fc-200d-2640-fe0f","🧍đŸŊ‍♀ī¸":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀ī¸":"1f9cd-1f3fe-200d-2640-fe0f","🧍đŸŋ‍♀ī¸":"1f9cd-1f3ff-200d-2640-fe0f","🧎đŸģ‍♂ī¸":"1f9ce-1f3fb-200d-2642-fe0f","🧎đŸŧ‍♂ī¸":"1f9ce-1f3fc-200d-2642-fe0f","🧎đŸŊ‍♂ī¸":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂ī¸":"1f9ce-1f3fe-200d-2642-fe0f","🧎đŸŋ‍♂ī¸":"1f9ce-1f3ff-200d-2642-fe0f","🧎đŸģ‍♀ī¸":"1f9ce-1f3fb-200d-2640-fe0f","🧎đŸŧ‍♀ī¸":"1f9ce-1f3fc-200d-2640-fe0f","🧎đŸŊ‍♀ī¸":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀ī¸":"1f9ce-1f3fe-200d-2640-fe0f","🧎đŸŋ‍♀ī¸":"1f9ce-1f3ff-200d-2640-fe0f","🏃đŸģ‍♂ī¸":"1f3c3-1f3fb-200d-2642-fe0f","🏃đŸŧ‍♂ī¸":"1f3c3-1f3fc-200d-2642-fe0f","🏃đŸŊ‍♂ī¸":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂ī¸":"1f3c3-1f3fe-200d-2642-fe0f","🏃đŸŋ‍♂ī¸":"1f3c3-1f3ff-200d-2642-fe0f","🏃đŸģ‍♀ī¸":"1f3c3-1f3fb-200d-2640-fe0f","🏃đŸŧ‍♀ī¸":"1f3c3-1f3fc-200d-2640-fe0f","🏃đŸŊ‍♀ī¸":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀ī¸":"1f3c3-1f3fe-200d-2640-fe0f","🏃đŸŋ‍♀ī¸":"1f3c3-1f3ff-200d-2640-fe0f","🧖đŸģ‍♂ī¸":"1f9d6-1f3fb-200d-2642-fe0f","🧖đŸŧ‍♂ī¸":"1f9d6-1f3fc-200d-2642-fe0f","🧖đŸŊ‍♂ī¸":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂ī¸":"1f9d6-1f3fe-200d-2642-fe0f","🧖đŸŋ‍♂ī¸":"1f9d6-1f3ff-200d-2642-fe0f","🧖đŸģ‍♀ī¸":"1f9d6-1f3fb-200d-2640-fe0f","🧖đŸŧ‍♀ī¸":"1f9d6-1f3fc-200d-2640-fe0f","🧖đŸŊ‍♀ī¸":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀ī¸":"1f9d6-1f3fe-200d-2640-fe0f","🧖đŸŋ‍♀ī¸":"1f9d6-1f3ff-200d-2640-fe0f","🧗đŸģ‍♂ī¸":"1f9d7-1f3fb-200d-2642-fe0f","🧗đŸŧ‍♂ī¸":"1f9d7-1f3fc-200d-2642-fe0f","🧗đŸŊ‍♂ī¸":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂ī¸":"1f9d7-1f3fe-200d-2642-fe0f","🧗đŸŋ‍♂ī¸":"1f9d7-1f3ff-200d-2642-fe0f","🧗đŸģ‍♀ī¸":"1f9d7-1f3fb-200d-2640-fe0f","🧗đŸŧ‍♀ī¸":"1f9d7-1f3fc-200d-2640-fe0f","🧗đŸŊ‍♀ī¸":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀ī¸":"1f9d7-1f3fe-200d-2640-fe0f","🧗đŸŋ‍♀ī¸":"1f9d7-1f3ff-200d-2640-fe0f","🏌ī¸â€â™‚ī¸":"1f3cc-fe0f-200d-2642-fe0f","🏌đŸģ‍♂ī¸":"1f3cc-1f3fb-200d-2642-fe0f","🏌đŸŧ‍♂ī¸":"1f3cc-1f3fc-200d-2642-fe0f","🏌đŸŊ‍♂ī¸":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂ī¸":"1f3cc-1f3fe-200d-2642-fe0f","🏌đŸŋ‍♂ī¸":"1f3cc-1f3ff-200d-2642-fe0f","🏌ī¸â€â™€ī¸":"1f3cc-fe0f-200d-2640-fe0f","🏌đŸģ‍♀ī¸":"1f3cc-1f3fb-200d-2640-fe0f","🏌đŸŧ‍♀ī¸":"1f3cc-1f3fc-200d-2640-fe0f","🏌đŸŊ‍♀ī¸":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀ī¸":"1f3cc-1f3fe-200d-2640-fe0f","🏌đŸŋ‍♀ī¸":"1f3cc-1f3ff-200d-2640-fe0f","🏄đŸģ‍♂ī¸":"1f3c4-1f3fb-200d-2642-fe0f","🏄đŸŧ‍♂ī¸":"1f3c4-1f3fc-200d-2642-fe0f","🏄đŸŊ‍♂ī¸":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂ī¸":"1f3c4-1f3fe-200d-2642-fe0f","🏄đŸŋ‍♂ī¸":"1f3c4-1f3ff-200d-2642-fe0f","🏄đŸģ‍♀ī¸":"1f3c4-1f3fb-200d-2640-fe0f","🏄đŸŧ‍♀ī¸":"1f3c4-1f3fc-200d-2640-fe0f","🏄đŸŊ‍♀ī¸":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀ī¸":"1f3c4-1f3fe-200d-2640-fe0f","🏄đŸŋ‍♀ī¸":"1f3c4-1f3ff-200d-2640-fe0f","đŸšŖđŸģ‍♂ī¸":"1f6a3-1f3fb-200d-2642-fe0f","đŸšŖđŸŧ‍♂ī¸":"1f6a3-1f3fc-200d-2642-fe0f","đŸšŖđŸŊ‍♂ī¸":"1f6a3-1f3fd-200d-2642-fe0f","đŸšŖ🏾‍♂ī¸":"1f6a3-1f3fe-200d-2642-fe0f","đŸšŖđŸŋ‍♂ī¸":"1f6a3-1f3ff-200d-2642-fe0f","đŸšŖđŸģ‍♀ī¸":"1f6a3-1f3fb-200d-2640-fe0f","đŸšŖđŸŧ‍♀ī¸":"1f6a3-1f3fc-200d-2640-fe0f","đŸšŖđŸŊ‍♀ī¸":"1f6a3-1f3fd-200d-2640-fe0f","đŸšŖ🏾‍♀ī¸":"1f6a3-1f3fe-200d-2640-fe0f","đŸšŖđŸŋ‍♀ī¸":"1f6a3-1f3ff-200d-2640-fe0f","🏊đŸģ‍♂ī¸":"1f3ca-1f3fb-200d-2642-fe0f","🏊đŸŧ‍♂ī¸":"1f3ca-1f3fc-200d-2642-fe0f","🏊đŸŊ‍♂ī¸":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂ī¸":"1f3ca-1f3fe-200d-2642-fe0f","🏊đŸŋ‍♂ī¸":"1f3ca-1f3ff-200d-2642-fe0f","🏊đŸģ‍♀ī¸":"1f3ca-1f3fb-200d-2640-fe0f","🏊đŸŧ‍♀ī¸":"1f3ca-1f3fc-200d-2640-fe0f","🏊đŸŊ‍♀ī¸":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀ī¸":"1f3ca-1f3fe-200d-2640-fe0f","🏊đŸŋ‍♀ī¸":"1f3ca-1f3ff-200d-2640-fe0f","⛹ī¸â€â™‚ī¸":"26f9-fe0f-200d-2642-fe0f","⛹đŸģ‍♂ī¸":"26f9-1f3fb-200d-2642-fe0f","⛹đŸŧ‍♂ī¸":"26f9-1f3fc-200d-2642-fe0f","⛹đŸŊ‍♂ī¸":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂ī¸":"26f9-1f3fe-200d-2642-fe0f","⛹đŸŋ‍♂ī¸":"26f9-1f3ff-200d-2642-fe0f","⛹ī¸â€â™€ī¸":"26f9-fe0f-200d-2640-fe0f","⛹đŸģ‍♀ī¸":"26f9-1f3fb-200d-2640-fe0f","⛹đŸŧ‍♀ī¸":"26f9-1f3fc-200d-2640-fe0f","⛹đŸŊ‍♀ī¸":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀ī¸":"26f9-1f3fe-200d-2640-fe0f","⛹đŸŋ‍♀ī¸":"26f9-1f3ff-200d-2640-fe0f","🏋ī¸â€â™‚ī¸":"1f3cb-fe0f-200d-2642-fe0f","🏋đŸģ‍♂ī¸":"1f3cb-1f3fb-200d-2642-fe0f","🏋đŸŧ‍♂ī¸":"1f3cb-1f3fc-200d-2642-fe0f","🏋đŸŊ‍♂ī¸":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂ī¸":"1f3cb-1f3fe-200d-2642-fe0f","🏋đŸŋ‍♂ī¸":"1f3cb-1f3ff-200d-2642-fe0f","🏋ī¸â€â™€ī¸":"1f3cb-fe0f-200d-2640-fe0f","🏋đŸģ‍♀ī¸":"1f3cb-1f3fb-200d-2640-fe0f","🏋đŸŧ‍♀ī¸":"1f3cb-1f3fc-200d-2640-fe0f","🏋đŸŊ‍♀ī¸":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀ī¸":"1f3cb-1f3fe-200d-2640-fe0f","🏋đŸŋ‍♀ī¸":"1f3cb-1f3ff-200d-2640-fe0f","🚴đŸģ‍♂ī¸":"1f6b4-1f3fb-200d-2642-fe0f","🚴đŸŧ‍♂ī¸":"1f6b4-1f3fc-200d-2642-fe0f","🚴đŸŊ‍♂ī¸":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂ī¸":"1f6b4-1f3fe-200d-2642-fe0f","🚴đŸŋ‍♂ī¸":"1f6b4-1f3ff-200d-2642-fe0f","🚴đŸģ‍♀ī¸":"1f6b4-1f3fb-200d-2640-fe0f","🚴đŸŧ‍♀ī¸":"1f6b4-1f3fc-200d-2640-fe0f","🚴đŸŊ‍♀ī¸":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀ī¸":"1f6b4-1f3fe-200d-2640-fe0f","🚴đŸŋ‍♀ī¸":"1f6b4-1f3ff-200d-2640-fe0f","đŸšĩđŸģ‍♂ī¸":"1f6b5-1f3fb-200d-2642-fe0f","đŸšĩđŸŧ‍♂ī¸":"1f6b5-1f3fc-200d-2642-fe0f","đŸšĩđŸŊ‍♂ī¸":"1f6b5-1f3fd-200d-2642-fe0f","đŸšĩ🏾‍♂ī¸":"1f6b5-1f3fe-200d-2642-fe0f","đŸšĩđŸŋ‍♂ī¸":"1f6b5-1f3ff-200d-2642-fe0f","đŸšĩđŸģ‍♀ī¸":"1f6b5-1f3fb-200d-2640-fe0f","đŸšĩđŸŧ‍♀ī¸":"1f6b5-1f3fc-200d-2640-fe0f","đŸšĩđŸŊ‍♀ī¸":"1f6b5-1f3fd-200d-2640-fe0f","đŸšĩ🏾‍♀ī¸":"1f6b5-1f3fe-200d-2640-fe0f","đŸšĩđŸŋ‍♀ī¸":"1f6b5-1f3ff-200d-2640-fe0f","🤸đŸģ‍♂ī¸":"1f938-1f3fb-200d-2642-fe0f","🤸đŸŧ‍♂ī¸":"1f938-1f3fc-200d-2642-fe0f","🤸đŸŊ‍♂ī¸":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂ī¸":"1f938-1f3fe-200d-2642-fe0f","🤸đŸŋ‍♂ī¸":"1f938-1f3ff-200d-2642-fe0f","🤸đŸģ‍♀ī¸":"1f938-1f3fb-200d-2640-fe0f","🤸đŸŧ‍♀ī¸":"1f938-1f3fc-200d-2640-fe0f","🤸đŸŊ‍♀ī¸":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀ī¸":"1f938-1f3fe-200d-2640-fe0f","🤸đŸŋ‍♀ī¸":"1f938-1f3ff-200d-2640-fe0f","đŸ¤ŊđŸģ‍♂ī¸":"1f93d-1f3fb-200d-2642-fe0f","đŸ¤ŊđŸŧ‍♂ī¸":"1f93d-1f3fc-200d-2642-fe0f","đŸ¤ŊđŸŊ‍♂ī¸":"1f93d-1f3fd-200d-2642-fe0f","đŸ¤Ŋ🏾‍♂ī¸":"1f93d-1f3fe-200d-2642-fe0f","đŸ¤ŊđŸŋ‍♂ī¸":"1f93d-1f3ff-200d-2642-fe0f","đŸ¤ŊđŸģ‍♀ī¸":"1f93d-1f3fb-200d-2640-fe0f","đŸ¤ŊđŸŧ‍♀ī¸":"1f93d-1f3fc-200d-2640-fe0f","đŸ¤ŊđŸŊ‍♀ī¸":"1f93d-1f3fd-200d-2640-fe0f","đŸ¤Ŋ🏾‍♀ī¸":"1f93d-1f3fe-200d-2640-fe0f","đŸ¤ŊđŸŋ‍♀ī¸":"1f93d-1f3ff-200d-2640-fe0f","🤾đŸģ‍♂ī¸":"1f93e-1f3fb-200d-2642-fe0f","🤾đŸŧ‍♂ī¸":"1f93e-1f3fc-200d-2642-fe0f","🤾đŸŊ‍♂ī¸":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂ī¸":"1f93e-1f3fe-200d-2642-fe0f","🤾đŸŋ‍♂ī¸":"1f93e-1f3ff-200d-2642-fe0f","🤾đŸģ‍♀ī¸":"1f93e-1f3fb-200d-2640-fe0f","🤾đŸŧ‍♀ī¸":"1f93e-1f3fc-200d-2640-fe0f","🤾đŸŊ‍♀ī¸":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀ī¸":"1f93e-1f3fe-200d-2640-fe0f","🤾đŸŋ‍♀ī¸":"1f93e-1f3ff-200d-2640-fe0f","🤹đŸģ‍♂ī¸":"1f939-1f3fb-200d-2642-fe0f","🤹đŸŧ‍♂ī¸":"1f939-1f3fc-200d-2642-fe0f","🤹đŸŊ‍♂ī¸":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂ī¸":"1f939-1f3fe-200d-2642-fe0f","🤹đŸŋ‍♂ī¸":"1f939-1f3ff-200d-2642-fe0f","🤹đŸģ‍♀ī¸":"1f939-1f3fb-200d-2640-fe0f","🤹đŸŧ‍♀ī¸":"1f939-1f3fc-200d-2640-fe0f","🤹đŸŊ‍♀ī¸":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀ī¸":"1f939-1f3fe-200d-2640-fe0f","🤹đŸŋ‍♀ī¸":"1f939-1f3ff-200d-2640-fe0f","🧘đŸģ‍♂ī¸":"1f9d8-1f3fb-200d-2642-fe0f","🧘đŸŧ‍♂ī¸":"1f9d8-1f3fc-200d-2642-fe0f","🧘đŸŊ‍♂ī¸":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂ī¸":"1f9d8-1f3fe-200d-2642-fe0f","🧘đŸŋ‍♂ī¸":"1f9d8-1f3ff-200d-2642-fe0f","🧘đŸģ‍♀ī¸":"1f9d8-1f3fb-200d-2640-fe0f","🧘đŸŧ‍♀ī¸":"1f9d8-1f3fc-200d-2640-fe0f","🧘đŸŊ‍♀ī¸":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀ī¸":"1f9d8-1f3fe-200d-2640-fe0f","🧘đŸŋ‍♀ī¸":"1f9d8-1f3ff-200d-2640-fe0f","🧑‍🤝‍🧑":"1f9d1-200d-1f91d-200d-1f9d1","👩‍❤‍👨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤‍👨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤‍👩":"1f469-200d-2764-fe0f-200d-1f469","👨‍👩‍đŸ‘Ļ":"1f468-200d-1f469-200d-1f466","👨‍👩‍👧":"1f468-200d-1f469-200d-1f467","👨‍👨‍đŸ‘Ļ":"1f468-200d-1f468-200d-1f466","👨‍👨‍👧":"1f468-200d-1f468-200d-1f467","👩‍👩‍đŸ‘Ļ":"1f469-200d-1f469-200d-1f466","👩‍👩‍👧":"1f469-200d-1f469-200d-1f467","👨‍đŸ‘Ļ‍đŸ‘Ļ":"1f468-200d-1f466-200d-1f466","👨‍👧‍đŸ‘Ļ":"1f468-200d-1f467-200d-1f466","👨‍👧‍👧":"1f468-200d-1f467-200d-1f467","👩‍đŸ‘Ļ‍đŸ‘Ļ":"1f469-200d-1f466-200d-1f466","👩‍👧‍đŸ‘Ļ":"1f469-200d-1f467-200d-1f466","👩‍👧‍👧":"1f469-200d-1f467-200d-1f467","đŸŗī¸â€âš§ī¸":"1f3f3-fe0f-200d-26a7-fe0f","👩‍❤ī¸â€đŸ‘¨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤ī¸â€đŸ‘¨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤ī¸â€đŸ‘Š":"1f469-200d-2764-fe0f-200d-1f469","🧑đŸģ‍🤝‍🧑đŸģ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸģ‍🤝‍🧑đŸŧ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸģ‍🤝‍🧑đŸŊ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸģ‍🤝‍🧑🏾":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸģ‍🤝‍🧑đŸŋ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff","🧑đŸŧ‍🤝‍🧑đŸģ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸŧ‍🤝‍🧑đŸŧ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸŧ‍🤝‍🧑đŸŊ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸŧ‍🤝‍🧑🏾":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸŧ‍🤝‍🧑đŸŋ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff","🧑đŸŊ‍🤝‍🧑đŸģ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸŊ‍🤝‍🧑đŸŧ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸŊ‍🤝‍🧑đŸŊ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸŊ‍🤝‍🧑🏾":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸŊ‍🤝‍🧑đŸŋ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff","🧑🏾‍🤝‍🧑đŸģ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb","🧑🏾‍🤝‍🧑đŸŧ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc","🧑🏾‍🤝‍🧑đŸŊ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd","🧑🏾‍🤝‍🧑🏾":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe","🧑🏾‍🤝‍🧑đŸŋ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff","🧑đŸŋ‍🤝‍🧑đŸģ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸŋ‍🤝‍🧑đŸŧ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸŋ‍🤝‍🧑đŸŊ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸŋ‍🤝‍🧑🏾":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸŋ‍🤝‍🧑đŸŋ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff","👩đŸģ‍🤝‍👩đŸŧ":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc","👩đŸģ‍🤝‍👩đŸŊ":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd","👩đŸģ‍🤝‍👩🏾":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe","👩đŸģ‍🤝‍👩đŸŋ":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff","👩đŸŧ‍🤝‍👩đŸģ":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb","👩đŸŧ‍🤝‍👩đŸŊ":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd","👩đŸŧ‍🤝‍👩🏾":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe","👩đŸŧ‍🤝‍👩đŸŋ":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff","👩đŸŊ‍🤝‍👩đŸģ":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb","👩đŸŊ‍🤝‍👩đŸŧ":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc","👩đŸŊ‍🤝‍👩🏾":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe","👩đŸŊ‍🤝‍👩đŸŋ":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff","👩🏾‍🤝‍👩đŸģ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb","👩🏾‍🤝‍👩đŸŧ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc","👩🏾‍🤝‍👩đŸŊ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd","👩🏾‍🤝‍👩đŸŋ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff","👩đŸŋ‍🤝‍👩đŸģ":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb","👩đŸŋ‍🤝‍👩đŸŧ":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc","👩đŸŋ‍🤝‍👩đŸŊ":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd","👩đŸŋ‍🤝‍👩🏾":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe","👩đŸģ‍🤝‍👨đŸŧ":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc","👩đŸģ‍🤝‍👨đŸŊ":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd","👩đŸģ‍🤝‍👨🏾":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe","👩đŸģ‍🤝‍👨đŸŋ":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff","👩đŸŧ‍🤝‍👨đŸģ":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb","👩đŸŧ‍🤝‍👨đŸŊ":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd","👩đŸŧ‍🤝‍👨🏾":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe","👩đŸŧ‍🤝‍👨đŸŋ":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff","👩đŸŊ‍🤝‍👨đŸģ":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb","👩đŸŊ‍🤝‍👨đŸŧ":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc","👩đŸŊ‍🤝‍👨🏾":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe","👩đŸŊ‍🤝‍👨đŸŋ":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff","👩🏾‍🤝‍👨đŸģ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb","👩🏾‍🤝‍👨đŸŧ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc","👩🏾‍🤝‍👨đŸŊ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd","👩🏾‍🤝‍👨đŸŋ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff","👩đŸŋ‍🤝‍👨đŸģ":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb","👩đŸŋ‍🤝‍👨đŸŧ":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc","👩đŸŋ‍🤝‍👨đŸŊ":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd","👩đŸŋ‍🤝‍👨🏾":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe","👨đŸģ‍🤝‍👨đŸŧ":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc","👨đŸģ‍🤝‍👨đŸŊ":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd","👨đŸģ‍🤝‍👨🏾":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe","👨đŸģ‍🤝‍👨đŸŋ":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff","👨đŸŧ‍🤝‍👨đŸģ":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb","👨đŸŧ‍🤝‍👨đŸŊ":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd","👨đŸŧ‍🤝‍👨🏾":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe","👨đŸŧ‍🤝‍👨đŸŋ":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff","👨đŸŊ‍🤝‍👨đŸģ":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb","👨đŸŊ‍🤝‍👨đŸŧ":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc","👨đŸŊ‍🤝‍👨🏾":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe","👨đŸŊ‍🤝‍👨đŸŋ":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff","👨🏾‍🤝‍👨đŸģ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb","👨🏾‍🤝‍👨đŸŧ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc","👨🏾‍🤝‍👨đŸŊ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd","👨🏾‍🤝‍👨đŸŋ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff","👨đŸŋ‍🤝‍👨đŸģ":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb","👨đŸŋ‍🤝‍👨đŸŧ":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc","👨đŸŋ‍🤝‍👨đŸŊ":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd","👨đŸŋ‍🤝‍👨🏾":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe","👩‍❤‍💋‍👨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤‍💋‍👨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤‍💋‍👩":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","🧑đŸģ‍❤‍🧑đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸģ‍❤‍🧑đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸģ‍❤‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸģ‍❤‍🧑đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŧ‍❤‍🧑đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŧ‍❤‍🧑đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŧ‍❤‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŧ‍❤‍🧑đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŊ‍❤‍🧑đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŊ‍❤‍🧑đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŊ‍❤‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŊ‍❤‍🧑đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏾‍❤‍🧑đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏾‍❤‍🧑đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏾‍❤‍🧑đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏾‍❤‍🧑đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŋ‍❤‍🧑đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŋ‍❤‍🧑đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŋ‍❤‍🧑đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŋ‍❤‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe","👩đŸģ‍❤‍👨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸģ‍❤‍👨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸģ‍❤‍👨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸģ‍❤‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸģ‍❤‍👨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŧ‍❤‍👨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŧ‍❤‍👨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŧ‍❤‍👨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŧ‍❤‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŧ‍❤‍👨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŊ‍❤‍👨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŊ‍❤‍👨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŊ‍❤‍👨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŊ‍❤‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŊ‍❤‍👨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👩🏾‍❤‍👨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👩🏾‍❤‍👨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👩🏾‍❤‍👨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👩🏾‍❤‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👩🏾‍❤‍👨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŋ‍❤‍👨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŋ‍❤‍👨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŋ‍❤‍👨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŋ‍❤‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŋ‍❤‍👨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸģ‍❤‍👨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸģ‍❤‍👨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸģ‍❤‍👨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸģ‍❤‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸģ‍❤‍👨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŧ‍❤‍👨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŧ‍❤‍👨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŧ‍❤‍👨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŧ‍❤‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŧ‍❤‍👨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŊ‍❤‍👨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŊ‍❤‍👨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŊ‍❤‍👨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŊ‍❤‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŊ‍❤‍👨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👨🏾‍❤‍👨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👨🏾‍❤‍👨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👨🏾‍❤‍👨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👨🏾‍❤‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👨🏾‍❤‍👨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŋ‍❤‍👨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŋ‍❤‍👨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŋ‍❤‍👨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŋ‍❤‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŋ‍❤‍👨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸģ‍❤‍👩đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸģ‍❤‍👩đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸģ‍❤‍👩đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸģ‍❤‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸģ‍❤‍👩đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŧ‍❤‍👩đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŧ‍❤‍👩đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŧ‍❤‍👩đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŧ‍❤‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŧ‍❤‍👩đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŊ‍❤‍👩đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŊ‍❤‍👩đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŊ‍❤‍👩đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŊ‍❤‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŊ‍❤‍👩đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff","👩🏾‍❤‍👩đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb","👩🏾‍❤‍👩đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc","👩🏾‍❤‍👩đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd","👩🏾‍❤‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe","👩🏾‍❤‍👩đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŋ‍❤‍👩đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŋ‍❤‍👩đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŋ‍❤‍👩đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŋ‍❤‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŋ‍❤‍👩đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff","👨‍👩‍👧‍đŸ‘Ļ":"1f468-200d-1f469-200d-1f467-200d-1f466","👨‍👩‍đŸ‘Ļ‍đŸ‘Ļ":"1f468-200d-1f469-200d-1f466-200d-1f466","👨‍👩‍👧‍👧":"1f468-200d-1f469-200d-1f467-200d-1f467","👨‍👨‍👧‍đŸ‘Ļ":"1f468-200d-1f468-200d-1f467-200d-1f466","👨‍👨‍đŸ‘Ļ‍đŸ‘Ļ":"1f468-200d-1f468-200d-1f466-200d-1f466","👨‍👨‍👧‍👧":"1f468-200d-1f468-200d-1f467-200d-1f467","👩‍👩‍👧‍đŸ‘Ļ":"1f469-200d-1f469-200d-1f467-200d-1f466","👩‍👩‍đŸ‘Ļ‍đŸ‘Ļ":"1f469-200d-1f469-200d-1f466-200d-1f466","👩‍👩‍👧‍👧":"1f469-200d-1f469-200d-1f467-200d-1f467","🏴ķ §ķ ĸķ Ĩķ Žķ §ķ ŋ":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","🏴ķ §ķ ĸķ ŗķ Ŗķ ´ķ ŋ":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","🏴ķ §ķ ĸķ ˇķ Ŧķ ŗķ ŋ":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","👩‍❤ī¸â€đŸ’‹â€đŸ‘¨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤ī¸â€đŸ’‹â€đŸ‘¨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤ī¸â€đŸ’‹â€đŸ‘Š":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","🧑đŸģ‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸģ‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸģ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸģ‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏾‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏾‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏾‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏾‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe","👩đŸģ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸģ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸģ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸģ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸģ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👩🏾‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👩🏾‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👩🏾‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👩🏾‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👩🏾‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸģ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸģ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸģ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸģ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸģ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👨🏾‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👨🏾‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👨🏾‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👨🏾‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👨🏾‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff","👩🏾‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb","👩🏾‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc","👩🏾‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd","👩🏾‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe","👩🏾‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff","🧑đŸģ‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸģ‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸģ‍❤‍💋‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸģ‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŧ‍❤‍💋‍🧑đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŧ‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŧ‍❤‍💋‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŧ‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŊ‍❤‍💋‍🧑đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŊ‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŊ‍❤‍💋‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŊ‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏾‍❤‍💋‍🧑đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏾‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏾‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏾‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŋ‍❤‍💋‍🧑đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŋ‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŋ‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŋ‍❤‍💋‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","👩đŸģ‍❤‍💋‍👨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸģ‍❤‍💋‍👨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸģ‍❤‍💋‍👨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸģ‍❤‍💋‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸģ‍❤‍💋‍👨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŧ‍❤‍💋‍👨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŧ‍❤‍💋‍👨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŧ‍❤‍💋‍👨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŧ‍❤‍💋‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŧ‍❤‍💋‍👨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŊ‍❤‍💋‍👨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŊ‍❤‍💋‍👨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŊ‍❤‍💋‍👨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŊ‍❤‍💋‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŊ‍❤‍💋‍👨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏾‍❤‍💋‍👨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏾‍❤‍💋‍👨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏾‍❤‍💋‍👨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏾‍❤‍💋‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏾‍❤‍💋‍👨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŋ‍❤‍💋‍👨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŋ‍❤‍💋‍👨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŋ‍❤‍💋‍👨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŋ‍❤‍💋‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŋ‍❤‍💋‍👨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸģ‍❤‍💋‍👨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸģ‍❤‍💋‍👨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸģ‍❤‍💋‍👨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸģ‍❤‍💋‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸģ‍❤‍💋‍👨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŧ‍❤‍💋‍👨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŧ‍❤‍💋‍👨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŧ‍❤‍💋‍👨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŧ‍❤‍💋‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŧ‍❤‍💋‍👨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŊ‍❤‍💋‍👨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŊ‍❤‍💋‍👨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŊ‍❤‍💋‍👨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŊ‍❤‍💋‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŊ‍❤‍💋‍👨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏾‍❤‍💋‍👨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏾‍❤‍💋‍👨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏾‍❤‍💋‍👨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏾‍❤‍💋‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏾‍❤‍💋‍👨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŋ‍❤‍💋‍👨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŋ‍❤‍💋‍👨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŋ‍❤‍💋‍👨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŋ‍❤‍💋‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŋ‍❤‍💋‍👨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸģ‍❤‍💋‍👩đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸģ‍❤‍💋‍👩đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸģ‍❤‍💋‍👩đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸģ‍❤‍💋‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸģ‍❤‍💋‍👩đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŧ‍❤‍💋‍👩đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŧ‍❤‍💋‍👩đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŧ‍❤‍💋‍👩đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŧ‍❤‍💋‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŧ‍❤‍💋‍👩đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŊ‍❤‍💋‍👩đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŊ‍❤‍💋‍👩đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŊ‍❤‍💋‍👩đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŊ‍❤‍💋‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŊ‍❤‍💋‍👩đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏾‍❤‍💋‍👩đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏾‍❤‍💋‍👩đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏾‍❤‍💋‍👩đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏾‍❤‍💋‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏾‍❤‍💋‍👩đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŋ‍❤‍💋‍👩đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŋ‍❤‍💋‍👩đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŋ‍❤‍💋‍👩đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŋ‍❤‍💋‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŋ‍❤‍💋‍👩đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff"} \ No newline at end of file +{"😀":"1f600","😃":"1f603","😄":"1f604","😁":"1f601","😆":"1f606","😅":"1f605","đŸ¤Ŗ":"1f923","😂":"1f602","🙂":"1f642","🙃":"1f643","đŸĢ ":"1fae0","😉":"1f609","😊":"1f60a","😇":"1f607","đŸĨ°":"1f970","😍":"1f60d","🤩":"1f929","😘":"1f618","😗":"1f617","â˜ē":"263a","😚":"1f61a","😙":"1f619","đŸĨ˛":"1f972","😋":"1f60b","😛":"1f61b","😜":"1f61c","đŸ¤Ē":"1f92a","😝":"1f61d","🤑":"1f911","🤗":"1f917","🤭":"1f92d","đŸĢĸ":"1fae2","đŸĢŖ":"1fae3","đŸ¤Ģ":"1f92b","🤔":"1f914","đŸĢĄ":"1fae1","🤐":"1f910","🤨":"1f928","😐":"1f610","😑":"1f611","đŸ˜ļ":"1f636","đŸĢĨ":"1fae5","😏":"1f60f","😒":"1f612","🙄":"1f644","đŸ˜Ŧ":"1f62c","đŸ¤Ĩ":"1f925","đŸĢ¨":"1fae8","😌":"1f60c","😔":"1f614","đŸ˜Ē":"1f62a","🤤":"1f924","😴":"1f634","😷":"1f637","🤒":"1f912","🤕":"1f915","đŸ¤ĸ":"1f922","🤮":"1f92e","🤧":"1f927","đŸĨĩ":"1f975","đŸĨļ":"1f976","đŸĨ´":"1f974","đŸ˜ĩ":"1f635","đŸ¤¯":"1f92f","🤠":"1f920","đŸĨŗ":"1f973","đŸĨ¸":"1f978","😎":"1f60e","🤓":"1f913","🧐":"1f9d0","😕":"1f615","đŸĢ¤":"1fae4","😟":"1f61f","🙁":"1f641","☚":"2639","😮":"1f62e","đŸ˜¯":"1f62f","😲":"1f632","đŸ˜ŗ":"1f633","đŸĨē":"1f97a","đŸĨš":"1f979","đŸ˜Ļ":"1f626","😧":"1f627","😨":"1f628","😰":"1f630","đŸ˜Ĩ":"1f625","đŸ˜ĸ":"1f622","😭":"1f62d","😱":"1f631","😖":"1f616","đŸ˜Ŗ":"1f623","😞":"1f61e","😓":"1f613","😩":"1f629","đŸ˜Ģ":"1f62b","đŸĨą":"1f971","😤":"1f624","😡":"1f621","😠":"1f620","đŸ¤Ŧ":"1f92c","😈":"1f608","đŸ‘ŋ":"1f47f","💀":"1f480","☠":"2620","💩":"1f4a9","🤡":"1f921","👹":"1f479","đŸ‘ē":"1f47a","đŸ‘ģ":"1f47b","đŸ‘Ŋ":"1f47d","👾":"1f47e","🤖":"1f916","đŸ˜ē":"1f63a","😸":"1f638","😹":"1f639","đŸ˜ģ":"1f63b","đŸ˜ŧ":"1f63c","đŸ˜Ŋ":"1f63d","🙀":"1f640","đŸ˜ŋ":"1f63f","😾":"1f63e","🙈":"1f648","🙉":"1f649","🙊":"1f64a","💌":"1f48c","💘":"1f498","💝":"1f49d","💖":"1f496","💗":"1f497","💓":"1f493","💞":"1f49e","💕":"1f495","💟":"1f49f","âŖ":"2763","💔":"1f494","❤":"2764","🩷":"1fa77","🧡":"1f9e1","💛":"1f49b","💚":"1f49a","💙":"1f499","đŸŠĩ":"1fa75","💜":"1f49c","🤎":"1f90e","🖤":"1f5a4","đŸŠļ":"1fa76","🤍":"1f90d","💋":"1f48b","đŸ’¯":"1f4af","đŸ’ĸ":"1f4a2","đŸ’Ĩ":"1f4a5","đŸ’Ģ":"1f4ab","đŸ’Ļ":"1f4a6","💨":"1f4a8","đŸ•ŗ":"1f573","đŸ’Ŧ":"1f4ac","🗨":"1f5e8","đŸ—¯":"1f5ef","💭":"1f4ad","💤":"1f4a4","👋":"1f44b","🤚":"1f91a","🖐":"1f590","✋":"270b","🖖":"1f596","đŸĢą":"1faf1","đŸĢ˛":"1faf2","đŸĢŗ":"1faf3","đŸĢ´":"1faf4","đŸĢˇ":"1faf7","đŸĢ¸":"1faf8","👌":"1f44c","🤌":"1f90c","🤏":"1f90f","✌":"270c","🤞":"1f91e","đŸĢ°":"1faf0","🤟":"1f91f","🤘":"1f918","🤙":"1f919","👈":"1f448","👉":"1f449","👆":"1f446","🖕":"1f595","👇":"1f447","☝":"261d","đŸĢĩ":"1faf5","👍":"1f44d","👎":"1f44e","✊":"270a","👊":"1f44a","🤛":"1f91b","🤜":"1f91c","👏":"1f44f","🙌":"1f64c","đŸĢļ":"1faf6","👐":"1f450","🤲":"1f932","🤝":"1f91d","🙏":"1f64f","✍":"270d","💅":"1f485","đŸ¤ŗ":"1f933","đŸ’Ē":"1f4aa","đŸĻž":"1f9be","đŸĻŋ":"1f9bf","đŸĻĩ":"1f9b5","đŸĻļ":"1f9b6","👂":"1f442","đŸĻģ":"1f9bb","👃":"1f443","🧠":"1f9e0","đŸĢ€":"1fac0","đŸĢ":"1fac1","đŸĻˇ":"1f9b7","đŸĻ´":"1f9b4","👀":"1f440","👁":"1f441","👅":"1f445","👄":"1f444","đŸĢĻ":"1fae6","đŸ‘ļ":"1f476","🧒":"1f9d2","đŸ‘Ļ":"1f466","👧":"1f467","🧑":"1f9d1","👱":"1f471","👨":"1f468","🧔":"1f9d4","👩":"1f469","🧓":"1f9d3","👴":"1f474","đŸ‘ĩ":"1f475","🙍":"1f64d","🙎":"1f64e","🙅":"1f645","🙆":"1f646","💁":"1f481","🙋":"1f64b","🧏":"1f9cf","🙇":"1f647","đŸ¤Ļ":"1f926","🤷":"1f937","👮":"1f46e","đŸ•ĩ":"1f575","💂":"1f482","đŸĨˇ":"1f977","👷":"1f477","đŸĢ…":"1fac5","🤴":"1f934","👸":"1f478","đŸ‘ŗ":"1f473","👲":"1f472","🧕":"1f9d5","đŸ¤ĩ":"1f935","👰":"1f470","🤰":"1f930","đŸĢƒ":"1fac3","đŸĢ„":"1fac4","🤱":"1f931","đŸ‘ŧ":"1f47c","🎅":"1f385","đŸ¤ļ":"1f936","đŸĻ¸":"1f9b8","đŸĻš":"1f9b9","🧙":"1f9d9","🧚":"1f9da","🧛":"1f9db","🧜":"1f9dc","🧝":"1f9dd","🧞":"1f9de","🧟":"1f9df","🧌":"1f9cc","💆":"1f486","💇":"1f487","đŸšļ":"1f6b6","🧍":"1f9cd","🧎":"1f9ce","🏃":"1f3c3","💃":"1f483","đŸ•ē":"1f57a","🕴":"1f574","đŸ‘¯":"1f46f","🧖":"1f9d6","🧗":"1f9d7","đŸ¤ē":"1f93a","🏇":"1f3c7","⛷":"26f7","🏂":"1f3c2","🏌":"1f3cc","🏄":"1f3c4","đŸšŖ":"1f6a3","🏊":"1f3ca","⛹":"26f9","🏋":"1f3cb","🚴":"1f6b4","đŸšĩ":"1f6b5","🤸":"1f938","đŸ¤ŧ":"1f93c","đŸ¤Ŋ":"1f93d","🤾":"1f93e","🤹":"1f939","🧘":"1f9d8","🛀":"1f6c0","🛌":"1f6cc","👭":"1f46d","đŸ‘Ģ":"1f46b","đŸ‘Ŧ":"1f46c","💏":"1f48f","💑":"1f491","đŸ‘Ē":"1f46a","đŸ—Ŗ":"1f5e3","👤":"1f464","đŸ‘Ĩ":"1f465","đŸĢ‚":"1fac2","đŸ‘Ŗ":"1f463","đŸģ":"1f463","đŸŧ":"1f463","đŸŊ":"1f463","🏾":"1f463","đŸŋ":"1f463","đŸĻ°":"1f463","đŸĻą":"1f463","đŸĻŗ":"1f463","đŸĻ˛":"1f463","đŸĩ":"1f435","🐒":"1f412","đŸĻ":"1f98d","đŸĻ§":"1f9a7","đŸļ":"1f436","🐕":"1f415","đŸĻŽ":"1f9ae","🐩":"1f429","đŸē":"1f43a","đŸĻŠ":"1f98a","đŸĻ":"1f99d","🐱":"1f431","🐈":"1f408","đŸĻ":"1f981","đŸ¯":"1f42f","🐅":"1f405","🐆":"1f406","🐴":"1f434","đŸĢŽ":"1face","đŸĢ":"1facf","🐎":"1f40e","đŸĻ„":"1f984","đŸĻ“":"1f993","đŸĻŒ":"1f98c","đŸĻŦ":"1f9ac","🐮":"1f42e","🐂":"1f402","🐃":"1f403","🐄":"1f404","🐷":"1f437","🐖":"1f416","🐗":"1f417","đŸŊ":"1f43d","🐏":"1f40f","🐑":"1f411","🐐":"1f410","đŸĒ":"1f42a","đŸĢ":"1f42b","đŸĻ™":"1f999","đŸĻ’":"1f992","🐘":"1f418","đŸĻŖ":"1f9a3","đŸĻ":"1f98f","đŸĻ›":"1f99b","🐭":"1f42d","🐁":"1f401","🐀":"1f400","🐹":"1f439","🐰":"1f430","🐇":"1f407","đŸŋ":"1f43f","đŸĻĢ":"1f9ab","đŸĻ”":"1f994","đŸĻ‡":"1f987","đŸģ":"1f43b","🐨":"1f428","đŸŧ":"1f43c","đŸĻĨ":"1f9a5","đŸĻĻ":"1f9a6","đŸĻ¨":"1f9a8","đŸĻ˜":"1f998","đŸĻĄ":"1f9a1","🐾":"1f43e","đŸĻƒ":"1f983","🐔":"1f414","🐓":"1f413","đŸŖ":"1f423","🐤":"1f424","đŸĨ":"1f425","đŸĻ":"1f426","🐧":"1f427","🕊":"1f54a","đŸĻ…":"1f985","đŸĻ†":"1f986","đŸĻĸ":"1f9a2","đŸĻ‰":"1f989","đŸĻ¤":"1f9a4","đŸĒļ":"1fab6","đŸĻŠ":"1f9a9","đŸĻš":"1f99a","đŸĻœ":"1f99c","đŸĒŊ":"1fabd","đŸĒŋ":"1fabf","🐸":"1f438","🐊":"1f40a","đŸĸ":"1f422","đŸĻŽ":"1f98e","🐍":"1f40d","🐲":"1f432","🐉":"1f409","đŸĻ•":"1f995","đŸĻ–":"1f996","đŸŗ":"1f433","🐋":"1f40b","đŸŦ":"1f42c","đŸĻ­":"1f9ad","🐟":"1f41f","🐠":"1f420","🐡":"1f421","đŸĻˆ":"1f988","🐙":"1f419","🐚":"1f41a","đŸĒ¸":"1fab8","đŸĒŧ":"1fabc","🐌":"1f40c","đŸĻ‹":"1f98b","🐛":"1f41b","🐜":"1f41c","🐝":"1f41d","đŸĒ˛":"1fab2","🐞":"1f41e","đŸĻ—":"1f997","đŸĒŗ":"1fab3","🕷":"1f577","🕸":"1f578","đŸĻ‚":"1f982","đŸĻŸ":"1f99f","đŸĒ°":"1fab0","đŸĒą":"1fab1","đŸĻ ":"1f9a0","💐":"1f490","🌸":"1f338","💮":"1f4ae","đŸĒˇ":"1fab7","đŸĩ":"1f3f5","🌹":"1f339","đŸĨ€":"1f940","đŸŒē":"1f33a","đŸŒģ":"1f33b","đŸŒŧ":"1f33c","🌷":"1f337","đŸĒģ":"1fabb","🌱":"1f331","đŸĒ´":"1fab4","🌲":"1f332","đŸŒŗ":"1f333","🌴":"1f334","đŸŒĩ":"1f335","🌾":"1f33e","đŸŒŋ":"1f33f","☘":"2618","🍀":"1f340","🍁":"1f341","🍂":"1f342","🍃":"1f343","đŸĒš":"1fab9","đŸĒē":"1faba","🍄":"1f344","🍇":"1f347","🍈":"1f348","🍉":"1f349","🍊":"1f34a","🍋":"1f34b","🍌":"1f34c","🍍":"1f34d","đŸĨ­":"1f96d","🍎":"1f34e","🍏":"1f34f","🍐":"1f350","🍑":"1f351","🍒":"1f352","🍓":"1f353","đŸĢ":"1fad0","đŸĨ":"1f95d","🍅":"1f345","đŸĢ’":"1fad2","đŸĨĨ":"1f965","đŸĨ‘":"1f951","🍆":"1f346","đŸĨ”":"1f954","đŸĨ•":"1f955","đŸŒŊ":"1f33d","đŸŒļ":"1f336","đŸĢ‘":"1fad1","đŸĨ’":"1f952","đŸĨŦ":"1f96c","đŸĨĻ":"1f966","🧄":"1f9c4","🧅":"1f9c5","đŸĨœ":"1f95c","đŸĢ˜":"1fad8","🌰":"1f330","đŸĢš":"1fada","đŸĢ›":"1fadb","🍞":"1f35e","đŸĨ":"1f950","đŸĨ–":"1f956","đŸĢ“":"1fad3","đŸĨ¨":"1f968","đŸĨ¯":"1f96f","đŸĨž":"1f95e","🧇":"1f9c7","🧀":"1f9c0","🍖":"1f356","🍗":"1f357","đŸĨŠ":"1f969","đŸĨ“":"1f953","🍔":"1f354","🍟":"1f35f","🍕":"1f355","🌭":"1f32d","đŸĨĒ":"1f96a","🌮":"1f32e","đŸŒ¯":"1f32f","đŸĢ”":"1fad4","đŸĨ™":"1f959","🧆":"1f9c6","đŸĨš":"1f95a","đŸŗ":"1f373","đŸĨ˜":"1f958","🍲":"1f372","đŸĢ•":"1fad5","đŸĨŖ":"1f963","đŸĨ—":"1f957","đŸŋ":"1f37f","🧈":"1f9c8","🧂":"1f9c2","đŸĨĢ":"1f96b","🍱":"1f371","🍘":"1f358","🍙":"1f359","🍚":"1f35a","🍛":"1f35b","🍜":"1f35c","🍝":"1f35d","🍠":"1f360","đŸĸ":"1f362","đŸŖ":"1f363","🍤":"1f364","đŸĨ":"1f365","đŸĨŽ":"1f96e","🍡":"1f361","đŸĨŸ":"1f95f","đŸĨ ":"1f960","đŸĨĄ":"1f961","đŸĻ€":"1f980","đŸĻž":"1f99e","đŸĻ":"1f990","đŸĻ‘":"1f991","đŸĻĒ":"1f9aa","đŸĻ":"1f366","🍧":"1f367","🍨":"1f368","🍩":"1f369","đŸĒ":"1f36a","🎂":"1f382","🍰":"1f370","🧁":"1f9c1","đŸĨ§":"1f967","đŸĢ":"1f36b","đŸŦ":"1f36c","🍭":"1f36d","🍮":"1f36e","đŸ¯":"1f36f","đŸŧ":"1f37c","đŸĨ›":"1f95b","☕":"2615","đŸĢ–":"1fad6","đŸĩ":"1f375","đŸļ":"1f376","🍾":"1f37e","🍷":"1f377","🍸":"1f378","🍹":"1f379","đŸē":"1f37a","đŸģ":"1f37b","đŸĨ‚":"1f942","đŸĨƒ":"1f943","đŸĢ—":"1fad7","đŸĨ¤":"1f964","🧋":"1f9cb","🧃":"1f9c3","🧉":"1f9c9","🧊":"1f9ca","đŸĨĸ":"1f962","đŸŊ":"1f37d","🍴":"1f374","đŸĨ„":"1f944","đŸ”Ē":"1f52a","đŸĢ™":"1fad9","đŸē":"1f3fa","🌍":"1f30d","🌎":"1f30e","🌏":"1f30f","🌐":"1f310","đŸ—ē":"1f5fa","🗾":"1f5fe","🧭":"1f9ed","🏔":"1f3d4","⛰":"26f0","🌋":"1f30b","đŸ—ģ":"1f5fb","🏕":"1f3d5","🏖":"1f3d6","🏜":"1f3dc","🏝":"1f3dd","🏞":"1f3de","🏟":"1f3df","🏛":"1f3db","🏗":"1f3d7","🧱":"1f9f1","đŸĒ¨":"1faa8","đŸĒĩ":"1fab5","🛖":"1f6d6","🏘":"1f3d8","🏚":"1f3da","🏠":"1f3e0","🏡":"1f3e1","đŸĸ":"1f3e2","đŸŖ":"1f3e3","🏤":"1f3e4","đŸĨ":"1f3e5","đŸĻ":"1f3e6","🏨":"1f3e8","🏩":"1f3e9","đŸĒ":"1f3ea","đŸĢ":"1f3eb","đŸŦ":"1f3ec","🏭":"1f3ed","đŸ¯":"1f3ef","🏰":"1f3f0","💒":"1f492","đŸ—ŧ":"1f5fc","đŸ—Ŋ":"1f5fd","â›Ē":"26ea","🕌":"1f54c","🛕":"1f6d5","🕍":"1f54d","⛩":"26e9","🕋":"1f54b","⛲":"26f2","â›ē":"26fa","🌁":"1f301","🌃":"1f303","🏙":"1f3d9","🌄":"1f304","🌅":"1f305","🌆":"1f306","🌇":"1f307","🌉":"1f309","♨":"2668","🎠":"1f3a0","🛝":"1f6dd","🎡":"1f3a1","đŸŽĸ":"1f3a2","💈":"1f488","đŸŽĒ":"1f3aa","🚂":"1f682","🚃":"1f683","🚄":"1f684","🚅":"1f685","🚆":"1f686","🚇":"1f687","🚈":"1f688","🚉":"1f689","🚊":"1f68a","🚝":"1f69d","🚞":"1f69e","🚋":"1f68b","🚌":"1f68c","🚍":"1f68d","🚎":"1f68e","🚐":"1f690","🚑":"1f691","🚒":"1f692","🚓":"1f693","🚔":"1f694","🚕":"1f695","🚖":"1f696","🚗":"1f697","🚘":"1f698","🚙":"1f699","đŸ›ģ":"1f6fb","🚚":"1f69a","🚛":"1f69b","🚜":"1f69c","🏎":"1f3ce","🏍":"1f3cd","đŸ›ĩ":"1f6f5","đŸĻŊ":"1f9bd","đŸĻŧ":"1f9bc","đŸ›ē":"1f6fa","🚲":"1f6b2","🛴":"1f6f4","🛹":"1f6f9","đŸ›ŧ":"1f6fc","🚏":"1f68f","đŸ›Ŗ":"1f6e3","🛤":"1f6e4","đŸ›ĸ":"1f6e2","â›Ŋ":"26fd","🛞":"1f6de","🚨":"1f6a8","đŸšĨ":"1f6a5","đŸšĻ":"1f6a6","🛑":"1f6d1","🚧":"1f6a7","⚓":"2693","🛟":"1f6df","â›ĩ":"26f5","đŸ›ļ":"1f6f6","🚤":"1f6a4","đŸ›ŗ":"1f6f3","⛴":"26f4","đŸ›Ĩ":"1f6e5","đŸšĸ":"1f6a2","✈":"2708","🛩":"1f6e9","đŸ›Ģ":"1f6eb","đŸ›Ŧ":"1f6ec","đŸĒ‚":"1fa82","đŸ’ē":"1f4ba","🚁":"1f681","🚟":"1f69f","🚠":"1f6a0","🚡":"1f6a1","🛰":"1f6f0","🚀":"1f680","🛸":"1f6f8","🛎":"1f6ce","đŸ§ŗ":"1f9f3","⌛":"231b","âŗ":"23f3","⌚":"231a","⏰":"23f0","⏱":"23f1","⏲":"23f2","🕰":"1f570","🕛":"1f55b","🕧":"1f567","🕐":"1f550","🕜":"1f55c","🕑":"1f551","🕝":"1f55d","🕒":"1f552","🕞":"1f55e","🕓":"1f553","🕟":"1f55f","🕔":"1f554","🕠":"1f560","🕕":"1f555","🕡":"1f561","🕖":"1f556","đŸ•ĸ":"1f562","🕗":"1f557","đŸ•Ŗ":"1f563","🕘":"1f558","🕤":"1f564","🕙":"1f559","đŸ•Ĩ":"1f565","🕚":"1f55a","đŸ•Ļ":"1f566","🌑":"1f311","🌒":"1f312","🌓":"1f313","🌔":"1f314","🌕":"1f315","🌖":"1f316","🌗":"1f317","🌘":"1f318","🌙":"1f319","🌚":"1f31a","🌛":"1f31b","🌜":"1f31c","🌡":"1f321","☀":"2600","🌝":"1f31d","🌞":"1f31e","đŸĒ":"1fa90","⭐":"2b50","🌟":"1f31f","🌠":"1f320","🌌":"1f30c","☁":"2601","⛅":"26c5","⛈":"26c8","🌤":"1f324","đŸŒĨ":"1f325","đŸŒĻ":"1f326","🌧":"1f327","🌨":"1f328","🌩":"1f329","đŸŒĒ":"1f32a","đŸŒĢ":"1f32b","đŸŒŦ":"1f32c","🌀":"1f300","🌈":"1f308","🌂":"1f302","☂":"2602","☔":"2614","⛱":"26f1","⚡":"26a1","❄":"2744","☃":"2603","⛄":"26c4","☄":"2604","đŸ”Ĩ":"1f525","💧":"1f4a7","🌊":"1f30a","🎃":"1f383","🎄":"1f384","🎆":"1f386","🎇":"1f387","🧨":"1f9e8","✨":"2728","🎈":"1f388","🎉":"1f389","🎊":"1f38a","🎋":"1f38b","🎍":"1f38d","🎎":"1f38e","🎏":"1f38f","🎐":"1f390","🎑":"1f391","🧧":"1f9e7","🎀":"1f380","🎁":"1f381","🎗":"1f397","🎟":"1f39f","đŸŽĢ":"1f3ab","🎖":"1f396","🏆":"1f3c6","🏅":"1f3c5","đŸĨ‡":"1f947","đŸĨˆ":"1f948","đŸĨ‰":"1f949","âšŊ":"26bd","⚾":"26be","đŸĨŽ":"1f94e","🏀":"1f3c0","🏐":"1f3d0","🏈":"1f3c8","🏉":"1f3c9","🎾":"1f3be","đŸĨ":"1f94f","đŸŽŗ":"1f3b3","🏏":"1f3cf","🏑":"1f3d1","🏒":"1f3d2","đŸĨ":"1f94d","🏓":"1f3d3","🏸":"1f3f8","đŸĨŠ":"1f94a","đŸĨ‹":"1f94b","đŸĨ…":"1f945","â›ŗ":"26f3","⛸":"26f8","đŸŽŖ":"1f3a3","đŸ¤ŋ":"1f93f","đŸŽŊ":"1f3bd","đŸŽŋ":"1f3bf","🛷":"1f6f7","đŸĨŒ":"1f94c","đŸŽ¯":"1f3af","đŸĒ€":"1fa80","đŸĒ":"1fa81","đŸ”Ģ":"1f52b","🎱":"1f3b1","🔮":"1f52e","đŸĒ„":"1fa84","🎮":"1f3ae","🕹":"1f579","🎰":"1f3b0","🎲":"1f3b2","🧩":"1f9e9","🧸":"1f9f8","đŸĒ…":"1fa85","đŸĒŠ":"1faa9","đŸĒ†":"1fa86","♠":"2660","â™Ĩ":"2665","â™Ļ":"2666","â™Ŗ":"2663","♟":"265f","🃏":"1f0cf","🀄":"1f004","🎴":"1f3b4","🎭":"1f3ad","đŸ–ŧ":"1f5bc","🎨":"1f3a8","đŸ§ĩ":"1f9f5","đŸĒĄ":"1faa1","đŸ§ļ":"1f9f6","đŸĒĸ":"1faa2","👓":"1f453","đŸ•ļ":"1f576","đŸĨŊ":"1f97d","đŸĨŧ":"1f97c","đŸĻē":"1f9ba","👔":"1f454","👕":"1f455","👖":"1f456","đŸ§Ŗ":"1f9e3","🧤":"1f9e4","đŸ§Ĩ":"1f9e5","đŸ§Ļ":"1f9e6","👗":"1f457","👘":"1f458","đŸĨģ":"1f97b","🩱":"1fa71","🩲":"1fa72","đŸŠŗ":"1fa73","👙":"1f459","👚":"1f45a","đŸĒ­":"1faad","👛":"1f45b","👜":"1f45c","👝":"1f45d","🛍":"1f6cd","🎒":"1f392","🩴":"1fa74","👞":"1f45e","👟":"1f45f","đŸĨž":"1f97e","đŸĨŋ":"1f97f","👠":"1f460","👡":"1f461","🩰":"1fa70","đŸ‘ĸ":"1f462","đŸĒŽ":"1faae","👑":"1f451","👒":"1f452","🎩":"1f3a9","🎓":"1f393","đŸ§ĸ":"1f9e2","đŸĒ–":"1fa96","⛑":"26d1","đŸ“ŋ":"1f4ff","💄":"1f484","💍":"1f48d","💎":"1f48e","🔇":"1f507","🔈":"1f508","🔉":"1f509","🔊":"1f50a","đŸ“ĸ":"1f4e2","đŸ“Ŗ":"1f4e3","đŸ“¯":"1f4ef","🔔":"1f514","🔕":"1f515","đŸŽŧ":"1f3bc","đŸŽĩ":"1f3b5","đŸŽļ":"1f3b6","🎙":"1f399","🎚":"1f39a","🎛":"1f39b","🎤":"1f3a4","🎧":"1f3a7","đŸ“ģ":"1f4fb","🎷":"1f3b7","đŸĒ—":"1fa97","🎸":"1f3b8","🎹":"1f3b9","đŸŽē":"1f3ba","đŸŽģ":"1f3bb","đŸĒ•":"1fa95","đŸĨ":"1f941","đŸĒ˜":"1fa98","đŸĒ‡":"1fa87","đŸĒˆ":"1fa88","📱":"1f4f1","📲":"1f4f2","☎":"260e","📞":"1f4de","📟":"1f4df","📠":"1f4e0","🔋":"1f50b","đŸĒĢ":"1faab","🔌":"1f50c","đŸ’ģ":"1f4bb","đŸ–Ĩ":"1f5a5","🖨":"1f5a8","⌨":"2328","🖱":"1f5b1","🖲":"1f5b2","đŸ’Ŋ":"1f4bd","💾":"1f4be","đŸ’ŋ":"1f4bf","📀":"1f4c0","🧮":"1f9ee","đŸŽĨ":"1f3a5","🎞":"1f39e","đŸ“Ŋ":"1f4fd","đŸŽŦ":"1f3ac","đŸ“ē":"1f4fa","📷":"1f4f7","📸":"1f4f8","📹":"1f4f9","đŸ“ŧ":"1f4fc","🔍":"1f50d","🔎":"1f50e","đŸ•¯":"1f56f","💡":"1f4a1","đŸ”Ļ":"1f526","🏮":"1f3ee","đŸĒ”":"1fa94","📔":"1f4d4","📕":"1f4d5","📖":"1f4d6","📗":"1f4d7","📘":"1f4d8","📙":"1f4d9","📚":"1f4da","📓":"1f4d3","📒":"1f4d2","📃":"1f4c3","📜":"1f4dc","📄":"1f4c4","📰":"1f4f0","🗞":"1f5de","📑":"1f4d1","🔖":"1f516","🏷":"1f3f7","💰":"1f4b0","đŸĒ™":"1fa99","💴":"1f4b4","đŸ’ĩ":"1f4b5","đŸ’ļ":"1f4b6","💷":"1f4b7","💸":"1f4b8","đŸ’ŗ":"1f4b3","🧾":"1f9fe","💹":"1f4b9","✉":"2709","📧":"1f4e7","📨":"1f4e8","📩":"1f4e9","📤":"1f4e4","đŸ“Ĩ":"1f4e5","đŸ“Ļ":"1f4e6","đŸ“Ģ":"1f4eb","đŸ“Ē":"1f4ea","đŸ“Ŧ":"1f4ec","📭":"1f4ed","📮":"1f4ee","đŸ—ŗ":"1f5f3","✏":"270f","✒":"2712","🖋":"1f58b","🖊":"1f58a","🖌":"1f58c","🖍":"1f58d","📝":"1f4dd","đŸ’ŧ":"1f4bc","📁":"1f4c1","📂":"1f4c2","🗂":"1f5c2","📅":"1f4c5","📆":"1f4c6","🗒":"1f5d2","🗓":"1f5d3","📇":"1f4c7","📈":"1f4c8","📉":"1f4c9","📊":"1f4ca","📋":"1f4cb","📌":"1f4cc","📍":"1f4cd","📎":"1f4ce","🖇":"1f587","📏":"1f4cf","📐":"1f4d0","✂":"2702","🗃":"1f5c3","🗄":"1f5c4","🗑":"1f5d1","🔒":"1f512","🔓":"1f513","🔏":"1f50f","🔐":"1f510","🔑":"1f511","🗝":"1f5dd","🔨":"1f528","đŸĒ“":"1fa93","⛏":"26cf","⚒":"2692","🛠":"1f6e0","🗡":"1f5e1","⚔":"2694","đŸ’Ŗ":"1f4a3","đŸĒƒ":"1fa83","🏹":"1f3f9","🛡":"1f6e1","đŸĒš":"1fa9a","🔧":"1f527","đŸĒ›":"1fa9b","🔩":"1f529","⚙":"2699","🗜":"1f5dc","⚖":"2696","đŸĻ¯":"1f9af","🔗":"1f517","⛓":"26d3","đŸĒ":"1fa9d","🧰":"1f9f0","🧲":"1f9f2","đŸĒœ":"1fa9c","⚗":"2697","đŸ§Ē":"1f9ea","đŸ§Ģ":"1f9eb","đŸ§Ŧ":"1f9ec","đŸ”Ŧ":"1f52c","🔭":"1f52d","📡":"1f4e1","💉":"1f489","🩸":"1fa78","💊":"1f48a","🩹":"1fa79","đŸŠŧ":"1fa7c","đŸŠē":"1fa7a","đŸŠģ":"1fa7b","đŸšĒ":"1f6aa","🛗":"1f6d7","đŸĒž":"1fa9e","đŸĒŸ":"1fa9f","🛏":"1f6cf","🛋":"1f6cb","đŸĒ‘":"1fa91","đŸšŊ":"1f6bd","đŸĒ ":"1faa0","đŸšŋ":"1f6bf","🛁":"1f6c1","đŸĒ¤":"1faa4","đŸĒ’":"1fa92","🧴":"1f9f4","🧷":"1f9f7","🧹":"1f9f9","đŸ§ē":"1f9fa","đŸ§ģ":"1f9fb","đŸĒŖ":"1faa3","đŸ§ŧ":"1f9fc","đŸĢ§":"1fae7","đŸĒĨ":"1faa5","đŸ§Ŋ":"1f9fd","đŸ§¯":"1f9ef","🛒":"1f6d2","đŸšŦ":"1f6ac","⚰":"26b0","đŸĒĻ":"1faa6","⚱":"26b1","đŸ§ŋ":"1f9ff","đŸĒŦ":"1faac","đŸ—ŋ":"1f5ff","đŸĒ§":"1faa7","đŸĒĒ":"1faaa","🏧":"1f3e7","🚮":"1f6ae","🚰":"1f6b0","â™ŋ":"267f","🚹":"1f6b9","đŸšē":"1f6ba","đŸšģ":"1f6bb","đŸšŧ":"1f6bc","🚾":"1f6be","🛂":"1f6c2","🛃":"1f6c3","🛄":"1f6c4","🛅":"1f6c5","⚠":"26a0","🚸":"1f6b8","⛔":"26d4","đŸšĢ":"1f6ab","đŸšŗ":"1f6b3","🚭":"1f6ad","đŸš¯":"1f6af","🚱":"1f6b1","🚷":"1f6b7","đŸ“ĩ":"1f4f5","🔞":"1f51e","â˜ĸ":"2622","â˜Ŗ":"2623","âŦ†":"2b06","↗":"2197","➡":"27a1","↘":"2198","âŦ‡":"2b07","↙":"2199","âŦ…":"2b05","↖":"2196","↕":"2195","↔":"2194","↩":"21a9","â†Ē":"21aa","⤴":"2934","â¤ĩ":"2935","🔃":"1f503","🔄":"1f504","🔙":"1f519","🔚":"1f51a","🔛":"1f51b","🔜":"1f51c","🔝":"1f51d","🛐":"1f6d0","⚛":"269b","🕉":"1f549","✡":"2721","☸":"2638","☯":"262f","✝":"271d","â˜Ļ":"2626","â˜Ē":"262a","☎":"262e","🕎":"1f54e","đŸ”¯":"1f52f","đŸĒ¯":"1faaf","♈":"2648","♉":"2649","♊":"264a","♋":"264b","♌":"264c","♍":"264d","♎":"264e","♏":"264f","♐":"2650","♑":"2651","♒":"2652","♓":"2653","⛎":"26ce","🔀":"1f500","🔁":"1f501","🔂":"1f502","â–ļ":"25b6","⏊":"23e9","⏭":"23ed","⏯":"23ef","◀":"25c0","âĒ":"23ea","⏎":"23ee","đŸ”ŧ":"1f53c","âĢ":"23eb","đŸ”Ŋ":"1f53d","âŦ":"23ec","⏸":"23f8","⏚":"23f9","âē":"23fa","⏏":"23cf","đŸŽĻ":"1f3a6","🔅":"1f505","🔆":"1f506","đŸ“ļ":"1f4f6","🛜":"1f6dc","đŸ“ŗ":"1f4f3","📴":"1f4f4","♀":"2640","♂":"2642","⚧":"26a7","✖":"2716","➕":"2795","➖":"2796","➗":"2797","🟰":"1f7f0","♾":"267e","â€ŧ":"203c","⁉":"2049","❓":"2753","❔":"2754","❕":"2755","❗":"2757","〰":"3030","💱":"1f4b1","💲":"1f4b2","⚕":"2695","â™ģ":"267b","⚜":"269c","🔱":"1f531","📛":"1f4db","🔰":"1f530","⭕":"2b55","✅":"2705","☑":"2611","✔":"2714","❌":"274c","❎":"274e","➰":"27b0","âžŋ":"27bf","ã€Ŋ":"303d","âœŗ":"2733","✴":"2734","❇":"2747","Š":"a9","ÂŽ":"ae","â„ĸ":"2122","🔟":"1f51f","🔠":"1f520","🔡":"1f521","đŸ”ĸ":"1f522","đŸ”Ŗ":"1f523","🔤":"1f524","🅰":"1f170","🆎":"1f18e","🅱":"1f171","🆑":"1f191","🆒":"1f192","🆓":"1f193","ℹ":"2139","🆔":"1f194","Ⓜ":"24c2","🆕":"1f195","🆖":"1f196","🅾":"1f17e","🆗":"1f197","đŸ…ŋ":"1f17f","🆘":"1f198","🆙":"1f199","🆚":"1f19a","🈁":"1f201","🈂":"1f202","🈷":"1f237","đŸˆļ":"1f236","đŸˆ¯":"1f22f","🉐":"1f250","🈹":"1f239","🈚":"1f21a","🈲":"1f232","🉑":"1f251","🈸":"1f238","🈴":"1f234","đŸˆŗ":"1f233","㊗":"3297","㊙":"3299","đŸˆē":"1f23a","đŸˆĩ":"1f235","🔴":"1f534","🟠":"1f7e0","🟡":"1f7e1","đŸŸĸ":"1f7e2","đŸ”ĩ":"1f535","đŸŸŖ":"1f7e3","🟤":"1f7e4","âšĢ":"26ab","âšĒ":"26aa","đŸŸĨ":"1f7e5","🟧":"1f7e7","🟨":"1f7e8","🟩":"1f7e9","đŸŸĻ":"1f7e6","đŸŸĒ":"1f7ea","đŸŸĢ":"1f7eb","âŦ›":"2b1b","âŦœ":"2b1c","â—ŧ":"25fc","â—ģ":"25fb","◾":"25fe","â—Ŋ":"25fd","â–Ē":"25aa","â–Ģ":"25ab","đŸ”ļ":"1f536","🔷":"1f537","🔸":"1f538","🔹":"1f539","đŸ”ē":"1f53a","đŸ”ģ":"1f53b","💠":"1f4a0","🔘":"1f518","đŸ”ŗ":"1f533","🔲":"1f532","🏁":"1f3c1","🚩":"1f6a9","🎌":"1f38c","🏴":"1f3f4","đŸŗ":"1f3f3","â˜ēī¸":"263a","☚ī¸":"2639","☠ī¸":"2620","âŖī¸":"2763","❤ī¸":"2764","đŸ•ŗī¸":"1f573","🗨ī¸":"1f5e8","đŸ—¯ī¸":"1f5ef","👋đŸģ":"1f44b-1f3fb","👋đŸŧ":"1f44b-1f3fc","👋đŸŊ":"1f44b-1f3fd","👋🏾":"1f44b-1f3fe","👋đŸŋ":"1f44b-1f3ff","🤚đŸģ":"1f91a-1f3fb","🤚đŸŧ":"1f91a-1f3fc","🤚đŸŊ":"1f91a-1f3fd","🤚🏾":"1f91a-1f3fe","🤚đŸŋ":"1f91a-1f3ff","🖐ī¸":"1f590","🖐đŸģ":"1f590-1f3fb","🖐đŸŧ":"1f590-1f3fc","🖐đŸŊ":"1f590-1f3fd","🖐🏾":"1f590-1f3fe","🖐đŸŋ":"1f590-1f3ff","✋đŸģ":"270b-1f3fb","✋đŸŧ":"270b-1f3fc","✋đŸŊ":"270b-1f3fd","✋🏾":"270b-1f3fe","✋đŸŋ":"270b-1f3ff","🖖đŸģ":"1f596-1f3fb","🖖đŸŧ":"1f596-1f3fc","🖖đŸŊ":"1f596-1f3fd","🖖🏾":"1f596-1f3fe","🖖đŸŋ":"1f596-1f3ff","đŸĢąđŸģ":"1faf1-1f3fb","đŸĢąđŸŧ":"1faf1-1f3fc","đŸĢąđŸŊ":"1faf1-1f3fd","đŸĢąđŸž":"1faf1-1f3fe","đŸĢąđŸŋ":"1faf1-1f3ff","đŸĢ˛đŸģ":"1faf2-1f3fb","đŸĢ˛đŸŧ":"1faf2-1f3fc","đŸĢ˛đŸŊ":"1faf2-1f3fd","đŸĢ˛đŸž":"1faf2-1f3fe","đŸĢ˛đŸŋ":"1faf2-1f3ff","đŸĢŗđŸģ":"1faf3-1f3fb","đŸĢŗđŸŧ":"1faf3-1f3fc","đŸĢŗđŸŊ":"1faf3-1f3fd","đŸĢŗ🏾":"1faf3-1f3fe","đŸĢŗđŸŋ":"1faf3-1f3ff","đŸĢ´đŸģ":"1faf4-1f3fb","đŸĢ´đŸŧ":"1faf4-1f3fc","đŸĢ´đŸŊ":"1faf4-1f3fd","đŸĢ´đŸž":"1faf4-1f3fe","đŸĢ´đŸŋ":"1faf4-1f3ff","đŸĢˇđŸģ":"1faf7-1f3fb","đŸĢˇđŸŧ":"1faf7-1f3fc","đŸĢˇđŸŊ":"1faf7-1f3fd","đŸĢˇđŸž":"1faf7-1f3fe","đŸĢˇđŸŋ":"1faf7-1f3ff","đŸĢ¸đŸģ":"1faf8-1f3fb","đŸĢ¸đŸŧ":"1faf8-1f3fc","đŸĢ¸đŸŊ":"1faf8-1f3fd","đŸĢ¸đŸž":"1faf8-1f3fe","đŸĢ¸đŸŋ":"1faf8-1f3ff","👌đŸģ":"1f44c-1f3fb","👌đŸŧ":"1f44c-1f3fc","👌đŸŊ":"1f44c-1f3fd","👌🏾":"1f44c-1f3fe","👌đŸŋ":"1f44c-1f3ff","🤌đŸģ":"1f90c-1f3fb","🤌đŸŧ":"1f90c-1f3fc","🤌đŸŊ":"1f90c-1f3fd","🤌🏾":"1f90c-1f3fe","🤌đŸŋ":"1f90c-1f3ff","🤏đŸģ":"1f90f-1f3fb","🤏đŸŧ":"1f90f-1f3fc","🤏đŸŊ":"1f90f-1f3fd","🤏🏾":"1f90f-1f3fe","🤏đŸŋ":"1f90f-1f3ff","✌ī¸":"270c","✌đŸģ":"270c-1f3fb","✌đŸŧ":"270c-1f3fc","✌đŸŊ":"270c-1f3fd","✌🏾":"270c-1f3fe","✌đŸŋ":"270c-1f3ff","🤞đŸģ":"1f91e-1f3fb","🤞đŸŧ":"1f91e-1f3fc","🤞đŸŊ":"1f91e-1f3fd","🤞🏾":"1f91e-1f3fe","🤞đŸŋ":"1f91e-1f3ff","đŸĢ°đŸģ":"1faf0-1f3fb","đŸĢ°đŸŧ":"1faf0-1f3fc","đŸĢ°đŸŊ":"1faf0-1f3fd","đŸĢ°đŸž":"1faf0-1f3fe","đŸĢ°đŸŋ":"1faf0-1f3ff","🤟đŸģ":"1f91f-1f3fb","🤟đŸŧ":"1f91f-1f3fc","🤟đŸŊ":"1f91f-1f3fd","🤟🏾":"1f91f-1f3fe","🤟đŸŋ":"1f91f-1f3ff","🤘đŸģ":"1f918-1f3fb","🤘đŸŧ":"1f918-1f3fc","🤘đŸŊ":"1f918-1f3fd","🤘🏾":"1f918-1f3fe","🤘đŸŋ":"1f918-1f3ff","🤙đŸģ":"1f919-1f3fb","🤙đŸŧ":"1f919-1f3fc","🤙đŸŊ":"1f919-1f3fd","🤙🏾":"1f919-1f3fe","🤙đŸŋ":"1f919-1f3ff","👈đŸģ":"1f448-1f3fb","👈đŸŧ":"1f448-1f3fc","👈đŸŊ":"1f448-1f3fd","👈🏾":"1f448-1f3fe","👈đŸŋ":"1f448-1f3ff","👉đŸģ":"1f449-1f3fb","👉đŸŧ":"1f449-1f3fc","👉đŸŊ":"1f449-1f3fd","👉🏾":"1f449-1f3fe","👉đŸŋ":"1f449-1f3ff","👆đŸģ":"1f446-1f3fb","👆đŸŧ":"1f446-1f3fc","👆đŸŊ":"1f446-1f3fd","👆🏾":"1f446-1f3fe","👆đŸŋ":"1f446-1f3ff","🖕đŸģ":"1f595-1f3fb","🖕đŸŧ":"1f595-1f3fc","🖕đŸŊ":"1f595-1f3fd","🖕🏾":"1f595-1f3fe","🖕đŸŋ":"1f595-1f3ff","👇đŸģ":"1f447-1f3fb","👇đŸŧ":"1f447-1f3fc","👇đŸŊ":"1f447-1f3fd","👇🏾":"1f447-1f3fe","👇đŸŋ":"1f447-1f3ff","☝ī¸":"261d","☝đŸģ":"261d-1f3fb","☝đŸŧ":"261d-1f3fc","☝đŸŊ":"261d-1f3fd","☝🏾":"261d-1f3fe","☝đŸŋ":"261d-1f3ff","đŸĢĩđŸģ":"1faf5-1f3fb","đŸĢĩđŸŧ":"1faf5-1f3fc","đŸĢĩđŸŊ":"1faf5-1f3fd","đŸĢĩ🏾":"1faf5-1f3fe","đŸĢĩđŸŋ":"1faf5-1f3ff","👍đŸģ":"1f44d-1f3fb","👍đŸŧ":"1f44d-1f3fc","👍đŸŊ":"1f44d-1f3fd","👍🏾":"1f44d-1f3fe","👍đŸŋ":"1f44d-1f3ff","👎đŸģ":"1f44e-1f3fb","👎đŸŧ":"1f44e-1f3fc","👎đŸŊ":"1f44e-1f3fd","👎🏾":"1f44e-1f3fe","👎đŸŋ":"1f44e-1f3ff","✊đŸģ":"270a-1f3fb","✊đŸŧ":"270a-1f3fc","✊đŸŊ":"270a-1f3fd","✊🏾":"270a-1f3fe","✊đŸŋ":"270a-1f3ff","👊đŸģ":"1f44a-1f3fb","👊đŸŧ":"1f44a-1f3fc","👊đŸŊ":"1f44a-1f3fd","👊🏾":"1f44a-1f3fe","👊đŸŋ":"1f44a-1f3ff","🤛đŸģ":"1f91b-1f3fb","🤛đŸŧ":"1f91b-1f3fc","🤛đŸŊ":"1f91b-1f3fd","🤛🏾":"1f91b-1f3fe","🤛đŸŋ":"1f91b-1f3ff","🤜đŸģ":"1f91c-1f3fb","🤜đŸŧ":"1f91c-1f3fc","🤜đŸŊ":"1f91c-1f3fd","🤜🏾":"1f91c-1f3fe","🤜đŸŋ":"1f91c-1f3ff","👏đŸģ":"1f44f-1f3fb","👏đŸŧ":"1f44f-1f3fc","👏đŸŊ":"1f44f-1f3fd","👏🏾":"1f44f-1f3fe","👏đŸŋ":"1f44f-1f3ff","🙌đŸģ":"1f64c-1f3fb","🙌đŸŧ":"1f64c-1f3fc","🙌đŸŊ":"1f64c-1f3fd","🙌🏾":"1f64c-1f3fe","🙌đŸŋ":"1f64c-1f3ff","đŸĢļđŸģ":"1faf6-1f3fb","đŸĢļđŸŧ":"1faf6-1f3fc","đŸĢļđŸŊ":"1faf6-1f3fd","đŸĢļ🏾":"1faf6-1f3fe","đŸĢļđŸŋ":"1faf6-1f3ff","👐đŸģ":"1f450-1f3fb","👐đŸŧ":"1f450-1f3fc","👐đŸŊ":"1f450-1f3fd","👐🏾":"1f450-1f3fe","👐đŸŋ":"1f450-1f3ff","🤲đŸģ":"1f932-1f3fb","🤲đŸŧ":"1f932-1f3fc","🤲đŸŊ":"1f932-1f3fd","🤲🏾":"1f932-1f3fe","🤲đŸŋ":"1f932-1f3ff","🤝đŸģ":"1f91d-1f3fb","🤝đŸŧ":"1f91d-1f3fc","🤝đŸŊ":"1f91d-1f3fd","🤝🏾":"1f91d-1f3fe","🤝đŸŋ":"1f91d-1f3ff","🙏đŸģ":"1f64f-1f3fb","🙏đŸŧ":"1f64f-1f3fc","🙏đŸŊ":"1f64f-1f3fd","🙏🏾":"1f64f-1f3fe","🙏đŸŋ":"1f64f-1f3ff","✍ī¸":"270d","✍đŸģ":"270d-1f3fb","✍đŸŧ":"270d-1f3fc","✍đŸŊ":"270d-1f3fd","✍🏾":"270d-1f3fe","✍đŸŋ":"270d-1f3ff","💅đŸģ":"1f485-1f3fb","💅đŸŧ":"1f485-1f3fc","💅đŸŊ":"1f485-1f3fd","💅🏾":"1f485-1f3fe","💅đŸŋ":"1f485-1f3ff","đŸ¤ŗđŸģ":"1f933-1f3fb","đŸ¤ŗđŸŧ":"1f933-1f3fc","đŸ¤ŗđŸŊ":"1f933-1f3fd","đŸ¤ŗ🏾":"1f933-1f3fe","đŸ¤ŗđŸŋ":"1f933-1f3ff","đŸ’ĒđŸģ":"1f4aa-1f3fb","đŸ’ĒđŸŧ":"1f4aa-1f3fc","đŸ’ĒđŸŊ":"1f4aa-1f3fd","đŸ’Ē🏾":"1f4aa-1f3fe","đŸ’ĒđŸŋ":"1f4aa-1f3ff","đŸĻĩđŸģ":"1f9b5-1f3fb","đŸĻĩđŸŧ":"1f9b5-1f3fc","đŸĻĩđŸŊ":"1f9b5-1f3fd","đŸĻĩ🏾":"1f9b5-1f3fe","đŸĻĩđŸŋ":"1f9b5-1f3ff","đŸĻļđŸģ":"1f9b6-1f3fb","đŸĻļđŸŧ":"1f9b6-1f3fc","đŸĻļđŸŊ":"1f9b6-1f3fd","đŸĻļ🏾":"1f9b6-1f3fe","đŸĻļđŸŋ":"1f9b6-1f3ff","👂đŸģ":"1f442-1f3fb","👂đŸŧ":"1f442-1f3fc","👂đŸŊ":"1f442-1f3fd","👂🏾":"1f442-1f3fe","👂đŸŋ":"1f442-1f3ff","đŸĻģđŸģ":"1f9bb-1f3fb","đŸĻģđŸŧ":"1f9bb-1f3fc","đŸĻģđŸŊ":"1f9bb-1f3fd","đŸĻģ🏾":"1f9bb-1f3fe","đŸĻģđŸŋ":"1f9bb-1f3ff","👃đŸģ":"1f443-1f3fb","👃đŸŧ":"1f443-1f3fc","👃đŸŊ":"1f443-1f3fd","👃🏾":"1f443-1f3fe","👃đŸŋ":"1f443-1f3ff","👁ī¸":"1f441","đŸ‘ļđŸģ":"1f476-1f3fb","đŸ‘ļđŸŧ":"1f476-1f3fc","đŸ‘ļđŸŊ":"1f476-1f3fd","đŸ‘ļ🏾":"1f476-1f3fe","đŸ‘ļđŸŋ":"1f476-1f3ff","🧒đŸģ":"1f9d2-1f3fb","🧒đŸŧ":"1f9d2-1f3fc","🧒đŸŊ":"1f9d2-1f3fd","🧒🏾":"1f9d2-1f3fe","🧒đŸŋ":"1f9d2-1f3ff","đŸ‘ĻđŸģ":"1f466-1f3fb","đŸ‘ĻđŸŧ":"1f466-1f3fc","đŸ‘ĻđŸŊ":"1f466-1f3fd","đŸ‘Ļ🏾":"1f466-1f3fe","đŸ‘ĻđŸŋ":"1f466-1f3ff","👧đŸģ":"1f467-1f3fb","👧đŸŧ":"1f467-1f3fc","👧đŸŊ":"1f467-1f3fd","👧🏾":"1f467-1f3fe","👧đŸŋ":"1f467-1f3ff","🧑đŸģ":"1f9d1-1f3fb","🧑đŸŧ":"1f9d1-1f3fc","🧑đŸŊ":"1f9d1-1f3fd","🧑🏾":"1f9d1-1f3fe","🧑đŸŋ":"1f9d1-1f3ff","👱đŸģ":"1f471-1f3fb","👱đŸŧ":"1f471-1f3fc","👱đŸŊ":"1f471-1f3fd","👱🏾":"1f471-1f3fe","👱đŸŋ":"1f471-1f3ff","👨đŸģ":"1f468-1f3fb","👨đŸŧ":"1f468-1f3fc","👨đŸŊ":"1f468-1f3fd","👨🏾":"1f468-1f3fe","👨đŸŋ":"1f468-1f3ff","🧔đŸģ":"1f9d4-1f3fb","🧔đŸŧ":"1f9d4-1f3fc","🧔đŸŊ":"1f9d4-1f3fd","🧔🏾":"1f9d4-1f3fe","🧔đŸŋ":"1f9d4-1f3ff","👩đŸģ":"1f469-1f3fb","👩đŸŧ":"1f469-1f3fc","👩đŸŊ":"1f469-1f3fd","👩🏾":"1f469-1f3fe","👩đŸŋ":"1f469-1f3ff","🧓đŸģ":"1f9d3-1f3fb","🧓đŸŧ":"1f9d3-1f3fc","🧓đŸŊ":"1f9d3-1f3fd","🧓🏾":"1f9d3-1f3fe","🧓đŸŋ":"1f9d3-1f3ff","👴đŸģ":"1f474-1f3fb","👴đŸŧ":"1f474-1f3fc","👴đŸŊ":"1f474-1f3fd","👴🏾":"1f474-1f3fe","👴đŸŋ":"1f474-1f3ff","đŸ‘ĩđŸģ":"1f475-1f3fb","đŸ‘ĩđŸŧ":"1f475-1f3fc","đŸ‘ĩđŸŊ":"1f475-1f3fd","đŸ‘ĩ🏾":"1f475-1f3fe","đŸ‘ĩđŸŋ":"1f475-1f3ff","🙍đŸģ":"1f64d-1f3fb","🙍đŸŧ":"1f64d-1f3fc","🙍đŸŊ":"1f64d-1f3fd","🙍🏾":"1f64d-1f3fe","🙍đŸŋ":"1f64d-1f3ff","🙎đŸģ":"1f64e-1f3fb","🙎đŸŧ":"1f64e-1f3fc","🙎đŸŊ":"1f64e-1f3fd","🙎🏾":"1f64e-1f3fe","🙎đŸŋ":"1f64e-1f3ff","🙅đŸģ":"1f645-1f3fb","🙅đŸŧ":"1f645-1f3fc","🙅đŸŊ":"1f645-1f3fd","🙅🏾":"1f645-1f3fe","🙅đŸŋ":"1f645-1f3ff","🙆đŸģ":"1f646-1f3fb","🙆đŸŧ":"1f646-1f3fc","🙆đŸŊ":"1f646-1f3fd","🙆🏾":"1f646-1f3fe","🙆đŸŋ":"1f646-1f3ff","💁đŸģ":"1f481-1f3fb","💁đŸŧ":"1f481-1f3fc","💁đŸŊ":"1f481-1f3fd","💁🏾":"1f481-1f3fe","💁đŸŋ":"1f481-1f3ff","🙋đŸģ":"1f64b-1f3fb","🙋đŸŧ":"1f64b-1f3fc","🙋đŸŊ":"1f64b-1f3fd","🙋🏾":"1f64b-1f3fe","🙋đŸŋ":"1f64b-1f3ff","🧏đŸģ":"1f9cf-1f3fb","🧏đŸŧ":"1f9cf-1f3fc","🧏đŸŊ":"1f9cf-1f3fd","🧏🏾":"1f9cf-1f3fe","🧏đŸŋ":"1f9cf-1f3ff","🙇đŸģ":"1f647-1f3fb","🙇đŸŧ":"1f647-1f3fc","🙇đŸŊ":"1f647-1f3fd","🙇🏾":"1f647-1f3fe","🙇đŸŋ":"1f647-1f3ff","đŸ¤ĻđŸģ":"1f926-1f3fb","đŸ¤ĻđŸŧ":"1f926-1f3fc","đŸ¤ĻđŸŊ":"1f926-1f3fd","đŸ¤Ļ🏾":"1f926-1f3fe","đŸ¤ĻđŸŋ":"1f926-1f3ff","🤷đŸģ":"1f937-1f3fb","🤷đŸŧ":"1f937-1f3fc","🤷đŸŊ":"1f937-1f3fd","🤷🏾":"1f937-1f3fe","🤷đŸŋ":"1f937-1f3ff","👮đŸģ":"1f46e-1f3fb","👮đŸŧ":"1f46e-1f3fc","👮đŸŊ":"1f46e-1f3fd","👮🏾":"1f46e-1f3fe","👮đŸŋ":"1f46e-1f3ff","đŸ•ĩī¸":"1f575","đŸ•ĩđŸģ":"1f575-1f3fb","đŸ•ĩđŸŧ":"1f575-1f3fc","đŸ•ĩđŸŊ":"1f575-1f3fd","đŸ•ĩ🏾":"1f575-1f3fe","đŸ•ĩđŸŋ":"1f575-1f3ff","💂đŸģ":"1f482-1f3fb","💂đŸŧ":"1f482-1f3fc","💂đŸŊ":"1f482-1f3fd","💂🏾":"1f482-1f3fe","💂đŸŋ":"1f482-1f3ff","đŸĨˇđŸģ":"1f977-1f3fb","đŸĨˇđŸŧ":"1f977-1f3fc","đŸĨˇđŸŊ":"1f977-1f3fd","đŸĨˇđŸž":"1f977-1f3fe","đŸĨˇđŸŋ":"1f977-1f3ff","👷đŸģ":"1f477-1f3fb","👷đŸŧ":"1f477-1f3fc","👷đŸŊ":"1f477-1f3fd","👷🏾":"1f477-1f3fe","👷đŸŋ":"1f477-1f3ff","đŸĢ…đŸģ":"1fac5-1f3fb","đŸĢ…đŸŧ":"1fac5-1f3fc","đŸĢ…đŸŊ":"1fac5-1f3fd","đŸĢ…đŸž":"1fac5-1f3fe","đŸĢ…đŸŋ":"1fac5-1f3ff","🤴đŸģ":"1f934-1f3fb","🤴đŸŧ":"1f934-1f3fc","🤴đŸŊ":"1f934-1f3fd","🤴🏾":"1f934-1f3fe","🤴đŸŋ":"1f934-1f3ff","👸đŸģ":"1f478-1f3fb","👸đŸŧ":"1f478-1f3fc","👸đŸŊ":"1f478-1f3fd","👸🏾":"1f478-1f3fe","👸đŸŋ":"1f478-1f3ff","đŸ‘ŗđŸģ":"1f473-1f3fb","đŸ‘ŗđŸŧ":"1f473-1f3fc","đŸ‘ŗđŸŊ":"1f473-1f3fd","đŸ‘ŗ🏾":"1f473-1f3fe","đŸ‘ŗđŸŋ":"1f473-1f3ff","👲đŸģ":"1f472-1f3fb","👲đŸŧ":"1f472-1f3fc","👲đŸŊ":"1f472-1f3fd","👲🏾":"1f472-1f3fe","👲đŸŋ":"1f472-1f3ff","🧕đŸģ":"1f9d5-1f3fb","🧕đŸŧ":"1f9d5-1f3fc","🧕đŸŊ":"1f9d5-1f3fd","🧕🏾":"1f9d5-1f3fe","🧕đŸŋ":"1f9d5-1f3ff","đŸ¤ĩđŸģ":"1f935-1f3fb","đŸ¤ĩđŸŧ":"1f935-1f3fc","đŸ¤ĩđŸŊ":"1f935-1f3fd","đŸ¤ĩ🏾":"1f935-1f3fe","đŸ¤ĩđŸŋ":"1f935-1f3ff","👰đŸģ":"1f470-1f3fb","👰đŸŧ":"1f470-1f3fc","👰đŸŊ":"1f470-1f3fd","👰🏾":"1f470-1f3fe","👰đŸŋ":"1f470-1f3ff","🤰đŸģ":"1f930-1f3fb","🤰đŸŧ":"1f930-1f3fc","🤰đŸŊ":"1f930-1f3fd","🤰🏾":"1f930-1f3fe","🤰đŸŋ":"1f930-1f3ff","đŸĢƒđŸģ":"1fac3-1f3fb","đŸĢƒđŸŧ":"1fac3-1f3fc","đŸĢƒđŸŊ":"1fac3-1f3fd","đŸĢƒđŸž":"1fac3-1f3fe","đŸĢƒđŸŋ":"1fac3-1f3ff","đŸĢ„đŸģ":"1fac4-1f3fb","đŸĢ„đŸŧ":"1fac4-1f3fc","đŸĢ„đŸŊ":"1fac4-1f3fd","đŸĢ„đŸž":"1fac4-1f3fe","đŸĢ„đŸŋ":"1fac4-1f3ff","🤱đŸģ":"1f931-1f3fb","🤱đŸŧ":"1f931-1f3fc","🤱đŸŊ":"1f931-1f3fd","🤱🏾":"1f931-1f3fe","🤱đŸŋ":"1f931-1f3ff","đŸ‘ŧđŸģ":"1f47c-1f3fb","đŸ‘ŧđŸŧ":"1f47c-1f3fc","đŸ‘ŧđŸŊ":"1f47c-1f3fd","đŸ‘ŧ🏾":"1f47c-1f3fe","đŸ‘ŧđŸŋ":"1f47c-1f3ff","🎅đŸģ":"1f385-1f3fb","🎅đŸŧ":"1f385-1f3fc","🎅đŸŊ":"1f385-1f3fd","🎅🏾":"1f385-1f3fe","🎅đŸŋ":"1f385-1f3ff","đŸ¤ļđŸģ":"1f936-1f3fb","đŸ¤ļđŸŧ":"1f936-1f3fc","đŸ¤ļđŸŊ":"1f936-1f3fd","đŸ¤ļ🏾":"1f936-1f3fe","đŸ¤ļđŸŋ":"1f936-1f3ff","đŸĻ¸đŸģ":"1f9b8-1f3fb","đŸĻ¸đŸŧ":"1f9b8-1f3fc","đŸĻ¸đŸŊ":"1f9b8-1f3fd","đŸĻ¸đŸž":"1f9b8-1f3fe","đŸĻ¸đŸŋ":"1f9b8-1f3ff","đŸĻšđŸģ":"1f9b9-1f3fb","đŸĻšđŸŧ":"1f9b9-1f3fc","đŸĻšđŸŊ":"1f9b9-1f3fd","đŸĻšđŸž":"1f9b9-1f3fe","đŸĻšđŸŋ":"1f9b9-1f3ff","🧙đŸģ":"1f9d9-1f3fb","🧙đŸŧ":"1f9d9-1f3fc","🧙đŸŊ":"1f9d9-1f3fd","🧙🏾":"1f9d9-1f3fe","🧙đŸŋ":"1f9d9-1f3ff","🧚đŸģ":"1f9da-1f3fb","🧚đŸŧ":"1f9da-1f3fc","🧚đŸŊ":"1f9da-1f3fd","🧚🏾":"1f9da-1f3fe","🧚đŸŋ":"1f9da-1f3ff","🧛đŸģ":"1f9db-1f3fb","🧛đŸŧ":"1f9db-1f3fc","🧛đŸŊ":"1f9db-1f3fd","🧛🏾":"1f9db-1f3fe","🧛đŸŋ":"1f9db-1f3ff","🧜đŸģ":"1f9dc-1f3fb","🧜đŸŧ":"1f9dc-1f3fc","🧜đŸŊ":"1f9dc-1f3fd","🧜🏾":"1f9dc-1f3fe","🧜đŸŋ":"1f9dc-1f3ff","🧝đŸģ":"1f9dd-1f3fb","🧝đŸŧ":"1f9dd-1f3fc","🧝đŸŊ":"1f9dd-1f3fd","🧝🏾":"1f9dd-1f3fe","🧝đŸŋ":"1f9dd-1f3ff","💆đŸģ":"1f486-1f3fb","💆đŸŧ":"1f486-1f3fc","💆đŸŊ":"1f486-1f3fd","💆🏾":"1f486-1f3fe","💆đŸŋ":"1f486-1f3ff","💇đŸģ":"1f487-1f3fb","💇đŸŧ":"1f487-1f3fc","💇đŸŊ":"1f487-1f3fd","💇🏾":"1f487-1f3fe","💇đŸŋ":"1f487-1f3ff","đŸšļđŸģ":"1f6b6-1f3fb","đŸšļđŸŧ":"1f6b6-1f3fc","đŸšļđŸŊ":"1f6b6-1f3fd","đŸšļ🏾":"1f6b6-1f3fe","đŸšļđŸŋ":"1f6b6-1f3ff","🧍đŸģ":"1f9cd-1f3fb","🧍đŸŧ":"1f9cd-1f3fc","🧍đŸŊ":"1f9cd-1f3fd","🧍🏾":"1f9cd-1f3fe","🧍đŸŋ":"1f9cd-1f3ff","🧎đŸģ":"1f9ce-1f3fb","🧎đŸŧ":"1f9ce-1f3fc","🧎đŸŊ":"1f9ce-1f3fd","🧎🏾":"1f9ce-1f3fe","🧎đŸŋ":"1f9ce-1f3ff","🏃đŸģ":"1f3c3-1f3fb","🏃đŸŧ":"1f3c3-1f3fc","🏃đŸŊ":"1f3c3-1f3fd","🏃🏾":"1f3c3-1f3fe","🏃đŸŋ":"1f3c3-1f3ff","💃đŸģ":"1f483-1f3fb","💃đŸŧ":"1f483-1f3fc","💃đŸŊ":"1f483-1f3fd","💃🏾":"1f483-1f3fe","💃đŸŋ":"1f483-1f3ff","đŸ•ēđŸģ":"1f57a-1f3fb","đŸ•ēđŸŧ":"1f57a-1f3fc","đŸ•ēđŸŊ":"1f57a-1f3fd","đŸ•ē🏾":"1f57a-1f3fe","đŸ•ēđŸŋ":"1f57a-1f3ff","🕴ī¸":"1f574","🕴đŸģ":"1f574-1f3fb","🕴đŸŧ":"1f574-1f3fc","🕴đŸŊ":"1f574-1f3fd","🕴🏾":"1f574-1f3fe","🕴đŸŋ":"1f574-1f3ff","🧖đŸģ":"1f9d6-1f3fb","🧖đŸŧ":"1f9d6-1f3fc","🧖đŸŊ":"1f9d6-1f3fd","🧖🏾":"1f9d6-1f3fe","🧖đŸŋ":"1f9d6-1f3ff","🧗đŸģ":"1f9d7-1f3fb","🧗đŸŧ":"1f9d7-1f3fc","🧗đŸŊ":"1f9d7-1f3fd","🧗🏾":"1f9d7-1f3fe","🧗đŸŋ":"1f9d7-1f3ff","🏇đŸģ":"1f3c7-1f3fb","🏇đŸŧ":"1f3c7-1f3fc","🏇đŸŊ":"1f3c7-1f3fd","🏇🏾":"1f3c7-1f3fe","🏇đŸŋ":"1f3c7-1f3ff","⛷ī¸":"26f7","🏂đŸģ":"1f3c2-1f3fb","🏂đŸŧ":"1f3c2-1f3fc","🏂đŸŊ":"1f3c2-1f3fd","🏂🏾":"1f3c2-1f3fe","🏂đŸŋ":"1f3c2-1f3ff","🏌ī¸":"1f3cc","🏌đŸģ":"1f3cc-1f3fb","🏌đŸŧ":"1f3cc-1f3fc","🏌đŸŊ":"1f3cc-1f3fd","🏌🏾":"1f3cc-1f3fe","🏌đŸŋ":"1f3cc-1f3ff","🏄đŸģ":"1f3c4-1f3fb","🏄đŸŧ":"1f3c4-1f3fc","🏄đŸŊ":"1f3c4-1f3fd","🏄🏾":"1f3c4-1f3fe","🏄đŸŋ":"1f3c4-1f3ff","đŸšŖđŸģ":"1f6a3-1f3fb","đŸšŖđŸŧ":"1f6a3-1f3fc","đŸšŖđŸŊ":"1f6a3-1f3fd","đŸšŖ🏾":"1f6a3-1f3fe","đŸšŖđŸŋ":"1f6a3-1f3ff","🏊đŸģ":"1f3ca-1f3fb","🏊đŸŧ":"1f3ca-1f3fc","🏊đŸŊ":"1f3ca-1f3fd","🏊🏾":"1f3ca-1f3fe","🏊đŸŋ":"1f3ca-1f3ff","⛹ī¸":"26f9","⛹đŸģ":"26f9-1f3fb","⛹đŸŧ":"26f9-1f3fc","⛹đŸŊ":"26f9-1f3fd","⛹🏾":"26f9-1f3fe","⛹đŸŋ":"26f9-1f3ff","🏋ī¸":"1f3cb","🏋đŸģ":"1f3cb-1f3fb","🏋đŸŧ":"1f3cb-1f3fc","🏋đŸŊ":"1f3cb-1f3fd","🏋🏾":"1f3cb-1f3fe","🏋đŸŋ":"1f3cb-1f3ff","🚴đŸģ":"1f6b4-1f3fb","🚴đŸŧ":"1f6b4-1f3fc","🚴đŸŊ":"1f6b4-1f3fd","🚴🏾":"1f6b4-1f3fe","🚴đŸŋ":"1f6b4-1f3ff","đŸšĩđŸģ":"1f6b5-1f3fb","đŸšĩđŸŧ":"1f6b5-1f3fc","đŸšĩđŸŊ":"1f6b5-1f3fd","đŸšĩ🏾":"1f6b5-1f3fe","đŸšĩđŸŋ":"1f6b5-1f3ff","🤸đŸģ":"1f938-1f3fb","🤸đŸŧ":"1f938-1f3fc","🤸đŸŊ":"1f938-1f3fd","🤸🏾":"1f938-1f3fe","🤸đŸŋ":"1f938-1f3ff","đŸ¤ŊđŸģ":"1f93d-1f3fb","đŸ¤ŊđŸŧ":"1f93d-1f3fc","đŸ¤ŊđŸŊ":"1f93d-1f3fd","đŸ¤Ŋ🏾":"1f93d-1f3fe","đŸ¤ŊđŸŋ":"1f93d-1f3ff","🤾đŸģ":"1f93e-1f3fb","🤾đŸŧ":"1f93e-1f3fc","🤾đŸŊ":"1f93e-1f3fd","🤾🏾":"1f93e-1f3fe","🤾đŸŋ":"1f93e-1f3ff","🤹đŸģ":"1f939-1f3fb","🤹đŸŧ":"1f939-1f3fc","🤹đŸŊ":"1f939-1f3fd","🤹🏾":"1f939-1f3fe","🤹đŸŋ":"1f939-1f3ff","🧘đŸģ":"1f9d8-1f3fb","🧘đŸŧ":"1f9d8-1f3fc","🧘đŸŊ":"1f9d8-1f3fd","🧘🏾":"1f9d8-1f3fe","🧘đŸŋ":"1f9d8-1f3ff","🛀đŸģ":"1f6c0-1f3fb","🛀đŸŧ":"1f6c0-1f3fc","🛀đŸŊ":"1f6c0-1f3fd","🛀🏾":"1f6c0-1f3fe","🛀đŸŋ":"1f6c0-1f3ff","🛌đŸģ":"1f6cc-1f3fb","🛌đŸŧ":"1f6cc-1f3fc","🛌đŸŊ":"1f6cc-1f3fd","🛌🏾":"1f6cc-1f3fe","🛌đŸŋ":"1f6cc-1f3ff","👭đŸģ":"1f46d-1f3fb","👭đŸŧ":"1f46d-1f3fc","👭đŸŊ":"1f46d-1f3fd","👭🏾":"1f46d-1f3fe","👭đŸŋ":"1f46d-1f3ff","đŸ‘ĢđŸģ":"1f46b-1f3fb","đŸ‘ĢđŸŧ":"1f46b-1f3fc","đŸ‘ĢđŸŊ":"1f46b-1f3fd","đŸ‘Ģ🏾":"1f46b-1f3fe","đŸ‘ĢđŸŋ":"1f46b-1f3ff","đŸ‘ŦđŸģ":"1f46c-1f3fb","đŸ‘ŦđŸŧ":"1f46c-1f3fc","đŸ‘ŦđŸŊ":"1f46c-1f3fd","đŸ‘Ŧ🏾":"1f46c-1f3fe","đŸ‘ŦđŸŋ":"1f46c-1f3ff","💏đŸģ":"1f48f-1f3fb","💏đŸŧ":"1f48f-1f3fc","💏đŸŊ":"1f48f-1f3fd","💏🏾":"1f48f-1f3fe","💏đŸŋ":"1f48f-1f3ff","💑đŸģ":"1f491-1f3fb","💑đŸŧ":"1f491-1f3fc","💑đŸŊ":"1f491-1f3fd","💑🏾":"1f491-1f3fe","💑đŸŋ":"1f491-1f3ff","đŸ—Ŗī¸":"1f5e3","đŸŋī¸":"1f43f","🕊ī¸":"1f54a","🕷ī¸":"1f577","🕸ī¸":"1f578","đŸĩī¸":"1f3f5","☘ī¸":"2618","đŸŒļī¸":"1f336","đŸŊī¸":"1f37d","đŸ—ēī¸":"1f5fa","🏔ī¸":"1f3d4","⛰ī¸":"26f0","🏕ī¸":"1f3d5","🏖ī¸":"1f3d6","🏜ī¸":"1f3dc","🏝ī¸":"1f3dd","🏞ī¸":"1f3de","🏟ī¸":"1f3df","🏛ī¸":"1f3db","🏗ī¸":"1f3d7","🏘ī¸":"1f3d8","🏚ī¸":"1f3da","⛩ī¸":"26e9","🏙ī¸":"1f3d9","♨ī¸":"2668","🏎ī¸":"1f3ce","🏍ī¸":"1f3cd","đŸ›Ŗī¸":"1f6e3","🛤ī¸":"1f6e4","đŸ›ĸī¸":"1f6e2","đŸ›ŗī¸":"1f6f3","⛴ī¸":"26f4","đŸ›Ĩī¸":"1f6e5","✈ī¸":"2708","🛩ī¸":"1f6e9","🛰ī¸":"1f6f0","🛎ī¸":"1f6ce","⏱ī¸":"23f1","⏲ī¸":"23f2","🕰ī¸":"1f570","🌡ī¸":"1f321","☀ī¸":"2600","☁ī¸":"2601","⛈ī¸":"26c8","🌤ī¸":"1f324","đŸŒĨī¸":"1f325","đŸŒĻī¸":"1f326","🌧ī¸":"1f327","🌨ī¸":"1f328","🌩ī¸":"1f329","đŸŒĒī¸":"1f32a","đŸŒĢī¸":"1f32b","đŸŒŦī¸":"1f32c","☂ī¸":"2602","⛱ī¸":"26f1","❄ī¸":"2744","☃ī¸":"2603","☄ī¸":"2604","🎗ī¸":"1f397","🎟ī¸":"1f39f","🎖ī¸":"1f396","⛸ī¸":"26f8","🕹ī¸":"1f579","♠ī¸":"2660","â™Ĩī¸":"2665","â™Ļī¸":"2666","â™Ŗī¸":"2663","♟ī¸":"265f","đŸ–ŧī¸":"1f5bc","đŸ•ļī¸":"1f576","🛍ī¸":"1f6cd","⛑ī¸":"26d1","🎙ī¸":"1f399","🎚ī¸":"1f39a","🎛ī¸":"1f39b","☎ī¸":"260e","đŸ–Ĩī¸":"1f5a5","🖨ī¸":"1f5a8","⌨ī¸":"2328","🖱ī¸":"1f5b1","🖲ī¸":"1f5b2","🎞ī¸":"1f39e","đŸ“Ŋī¸":"1f4fd","đŸ•¯ī¸":"1f56f","🗞ī¸":"1f5de","🏷ī¸":"1f3f7","✉ī¸":"2709","đŸ—ŗī¸":"1f5f3","✏ī¸":"270f","✒ī¸":"2712","🖋ī¸":"1f58b","🖊ī¸":"1f58a","🖌ī¸":"1f58c","🖍ī¸":"1f58d","🗂ī¸":"1f5c2","🗒ī¸":"1f5d2","🗓ī¸":"1f5d3","🖇ī¸":"1f587","✂ī¸":"2702","🗃ī¸":"1f5c3","🗄ī¸":"1f5c4","🗑ī¸":"1f5d1","🗝ī¸":"1f5dd","⛏ī¸":"26cf","⚒ī¸":"2692","🛠ī¸":"1f6e0","🗡ī¸":"1f5e1","⚔ī¸":"2694","🛡ī¸":"1f6e1","⚙ī¸":"2699","🗜ī¸":"1f5dc","⚖ī¸":"2696","⛓ī¸":"26d3","⚗ī¸":"2697","🛏ī¸":"1f6cf","🛋ī¸":"1f6cb","⚰ī¸":"26b0","⚱ī¸":"26b1","⚠ī¸":"26a0","â˜ĸī¸":"2622","â˜Ŗī¸":"2623","âŦ†ī¸":"2b06","↗ī¸":"2197","➡ī¸":"27a1","↘ī¸":"2198","âŦ‡ī¸":"2b07","↙ī¸":"2199","âŦ…ī¸":"2b05","↖ī¸":"2196","↕ī¸":"2195","↔ī¸":"2194","↩ī¸":"21a9","â†Ēī¸":"21aa","⤴ī¸":"2934","â¤ĩī¸":"2935","⚛ī¸":"269b","🕉ī¸":"1f549","✡ī¸":"2721","☸ī¸":"2638","☯ī¸":"262f","✝ī¸":"271d","â˜Ļī¸":"2626","â˜Ēī¸":"262a","☎ī¸":"262e","â–ļī¸":"25b6","⏭ī¸":"23ed","⏯ī¸":"23ef","◀ī¸":"25c0","⏎ī¸":"23ee","⏸ī¸":"23f8","⏚ī¸":"23f9","âēī¸":"23fa","⏏ī¸":"23cf","♀ī¸":"2640","♂ī¸":"2642","⚧ī¸":"26a7","✖ī¸":"2716","♾ī¸":"267e","â€ŧī¸":"203c","⁉ī¸":"2049","〰ī¸":"3030","⚕ī¸":"2695","â™ģī¸":"267b","⚜ī¸":"269c","☑ī¸":"2611","✔ī¸":"2714","ã€Ŋī¸":"303d","âœŗī¸":"2733","✴ī¸":"2734","❇ī¸":"2747","Šī¸":"a9","ÂŽī¸":"ae","â„ĸī¸":"2122","#âƒŖ":"23-20e3","*âƒŖ":"2a-20e3","0âƒŖ":"30-20e3","1âƒŖ":"31-20e3","2âƒŖ":"32-20e3","3âƒŖ":"33-20e3","4âƒŖ":"34-20e3","5âƒŖ":"35-20e3","6âƒŖ":"36-20e3","7âƒŖ":"37-20e3","8âƒŖ":"38-20e3","9âƒŖ":"39-20e3","🅰ī¸":"1f170","🅱ī¸":"1f171","ℹī¸":"2139","Ⓜī¸":"24c2","🅾ī¸":"1f17e","đŸ…ŋī¸":"1f17f","🈂ī¸":"1f202","🈷ī¸":"1f237","㊗ī¸":"3297","㊙ī¸":"3299","â—ŧī¸":"25fc","â—ģī¸":"25fb","â–Ēī¸":"25aa","â–Ģī¸":"25ab","đŸŗī¸":"1f3f3","đŸ‡Ļ🇨":"1f1e6-1f1e8","đŸ‡Ļ🇩":"1f1e6-1f1e9","đŸ‡ĻđŸ‡Ē":"1f1e6-1f1ea","đŸ‡ĻđŸ‡Ģ":"1f1e6-1f1eb","đŸ‡ĻđŸ‡Ŧ":"1f1e6-1f1ec","đŸ‡Ļ🇮":"1f1e6-1f1ee","đŸ‡Ļ🇱":"1f1e6-1f1f1","đŸ‡Ļ🇲":"1f1e6-1f1f2","đŸ‡Ļ🇴":"1f1e6-1f1f4","đŸ‡ĻđŸ‡ļ":"1f1e6-1f1f6","đŸ‡Ļ🇷":"1f1e6-1f1f7","đŸ‡Ļ🇸":"1f1e6-1f1f8","đŸ‡Ļ🇹":"1f1e6-1f1f9","đŸ‡ĻđŸ‡ē":"1f1e6-1f1fa","đŸ‡ĻđŸ‡ŧ":"1f1e6-1f1fc","đŸ‡ĻđŸ‡Ŋ":"1f1e6-1f1fd","đŸ‡ĻđŸ‡ŋ":"1f1e6-1f1ff","🇧đŸ‡Ļ":"1f1e7-1f1e6","🇧🇧":"1f1e7-1f1e7","🇧🇩":"1f1e7-1f1e9","🇧đŸ‡Ē":"1f1e7-1f1ea","🇧đŸ‡Ģ":"1f1e7-1f1eb","🇧đŸ‡Ŧ":"1f1e7-1f1ec","🇧🇭":"1f1e7-1f1ed","🇧🇮":"1f1e7-1f1ee","đŸ‡§đŸ‡¯":"1f1e7-1f1ef","🇧🇱":"1f1e7-1f1f1","🇧🇲":"1f1e7-1f1f2","🇧đŸ‡ŗ":"1f1e7-1f1f3","🇧🇴":"1f1e7-1f1f4","🇧đŸ‡ļ":"1f1e7-1f1f6","🇧🇷":"1f1e7-1f1f7","🇧🇸":"1f1e7-1f1f8","🇧🇹":"1f1e7-1f1f9","🇧đŸ‡ģ":"1f1e7-1f1fb","🇧đŸ‡ŧ":"1f1e7-1f1fc","🇧🇾":"1f1e7-1f1fe","🇧đŸ‡ŋ":"1f1e7-1f1ff","🇨đŸ‡Ļ":"1f1e8-1f1e6","🇨🇨":"1f1e8-1f1e8","🇨🇩":"1f1e8-1f1e9","🇨đŸ‡Ģ":"1f1e8-1f1eb","🇨đŸ‡Ŧ":"1f1e8-1f1ec","🇨🇭":"1f1e8-1f1ed","🇨🇮":"1f1e8-1f1ee","🇨🇰":"1f1e8-1f1f0","🇨🇱":"1f1e8-1f1f1","🇨🇲":"1f1e8-1f1f2","🇨đŸ‡ŗ":"1f1e8-1f1f3","🇨🇴":"1f1e8-1f1f4","🇨đŸ‡ĩ":"1f1e8-1f1f5","🇨🇷":"1f1e8-1f1f7","🇨đŸ‡ē":"1f1e8-1f1fa","🇨đŸ‡ģ":"1f1e8-1f1fb","🇨đŸ‡ŧ":"1f1e8-1f1fc","🇨đŸ‡Ŋ":"1f1e8-1f1fd","🇨🇾":"1f1e8-1f1fe","🇨đŸ‡ŋ":"1f1e8-1f1ff","🇩đŸ‡Ē":"1f1e9-1f1ea","🇩đŸ‡Ŧ":"1f1e9-1f1ec","đŸ‡ŠđŸ‡¯":"1f1e9-1f1ef","🇩🇰":"1f1e9-1f1f0","🇩🇲":"1f1e9-1f1f2","🇩🇴":"1f1e9-1f1f4","🇩đŸ‡ŋ":"1f1e9-1f1ff","đŸ‡ĒđŸ‡Ļ":"1f1ea-1f1e6","đŸ‡Ē🇨":"1f1ea-1f1e8","đŸ‡ĒđŸ‡Ē":"1f1ea-1f1ea","đŸ‡ĒđŸ‡Ŧ":"1f1ea-1f1ec","đŸ‡Ē🇭":"1f1ea-1f1ed","đŸ‡Ē🇷":"1f1ea-1f1f7","đŸ‡Ē🇸":"1f1ea-1f1f8","đŸ‡Ē🇹":"1f1ea-1f1f9","đŸ‡ĒđŸ‡ē":"1f1ea-1f1fa","đŸ‡Ģ🇮":"1f1eb-1f1ee","đŸ‡ĢđŸ‡¯":"1f1eb-1f1ef","đŸ‡Ģ🇰":"1f1eb-1f1f0","đŸ‡Ģ🇲":"1f1eb-1f1f2","đŸ‡Ģ🇴":"1f1eb-1f1f4","đŸ‡Ģ🇷":"1f1eb-1f1f7","đŸ‡ŦđŸ‡Ļ":"1f1ec-1f1e6","đŸ‡Ŧ🇧":"1f1ec-1f1e7","đŸ‡Ŧ🇩":"1f1ec-1f1e9","đŸ‡ŦđŸ‡Ē":"1f1ec-1f1ea","đŸ‡ŦđŸ‡Ģ":"1f1ec-1f1eb","đŸ‡ŦđŸ‡Ŧ":"1f1ec-1f1ec","đŸ‡Ŧ🇭":"1f1ec-1f1ed","đŸ‡Ŧ🇮":"1f1ec-1f1ee","đŸ‡Ŧ🇱":"1f1ec-1f1f1","đŸ‡Ŧ🇲":"1f1ec-1f1f2","đŸ‡ŦđŸ‡ŗ":"1f1ec-1f1f3","đŸ‡ŦđŸ‡ĩ":"1f1ec-1f1f5","đŸ‡ŦđŸ‡ļ":"1f1ec-1f1f6","đŸ‡Ŧ🇷":"1f1ec-1f1f7","đŸ‡Ŧ🇸":"1f1ec-1f1f8","đŸ‡Ŧ🇹":"1f1ec-1f1f9","đŸ‡ŦđŸ‡ē":"1f1ec-1f1fa","đŸ‡ŦđŸ‡ŧ":"1f1ec-1f1fc","đŸ‡Ŧ🇾":"1f1ec-1f1fe","🇭🇰":"1f1ed-1f1f0","🇭🇲":"1f1ed-1f1f2","🇭đŸ‡ŗ":"1f1ed-1f1f3","🇭🇷":"1f1ed-1f1f7","🇭🇹":"1f1ed-1f1f9","🇭đŸ‡ē":"1f1ed-1f1fa","🇮🇨":"1f1ee-1f1e8","🇮🇩":"1f1ee-1f1e9","🇮đŸ‡Ē":"1f1ee-1f1ea","🇮🇱":"1f1ee-1f1f1","🇮🇲":"1f1ee-1f1f2","🇮đŸ‡ŗ":"1f1ee-1f1f3","🇮🇴":"1f1ee-1f1f4","🇮đŸ‡ļ":"1f1ee-1f1f6","🇮🇷":"1f1ee-1f1f7","🇮🇸":"1f1ee-1f1f8","🇮🇹":"1f1ee-1f1f9","đŸ‡¯đŸ‡Ē":"1f1ef-1f1ea","đŸ‡¯đŸ‡˛":"1f1ef-1f1f2","đŸ‡¯đŸ‡´":"1f1ef-1f1f4","đŸ‡¯đŸ‡ĩ":"1f1ef-1f1f5","🇰đŸ‡Ē":"1f1f0-1f1ea","🇰đŸ‡Ŧ":"1f1f0-1f1ec","🇰🇭":"1f1f0-1f1ed","🇰🇮":"1f1f0-1f1ee","🇰🇲":"1f1f0-1f1f2","🇰đŸ‡ŗ":"1f1f0-1f1f3","🇰đŸ‡ĩ":"1f1f0-1f1f5","🇰🇷":"1f1f0-1f1f7","🇰đŸ‡ŧ":"1f1f0-1f1fc","🇰🇾":"1f1f0-1f1fe","🇰đŸ‡ŋ":"1f1f0-1f1ff","🇱đŸ‡Ļ":"1f1f1-1f1e6","🇱🇧":"1f1f1-1f1e7","🇱🇨":"1f1f1-1f1e8","🇱🇮":"1f1f1-1f1ee","🇱🇰":"1f1f1-1f1f0","🇱🇷":"1f1f1-1f1f7","🇱🇸":"1f1f1-1f1f8","🇱🇹":"1f1f1-1f1f9","🇱đŸ‡ē":"1f1f1-1f1fa","🇱đŸ‡ģ":"1f1f1-1f1fb","🇱🇾":"1f1f1-1f1fe","🇲đŸ‡Ļ":"1f1f2-1f1e6","🇲🇨":"1f1f2-1f1e8","🇲🇩":"1f1f2-1f1e9","🇲đŸ‡Ē":"1f1f2-1f1ea","🇲đŸ‡Ģ":"1f1f2-1f1eb","🇲đŸ‡Ŧ":"1f1f2-1f1ec","🇲🇭":"1f1f2-1f1ed","🇲🇰":"1f1f2-1f1f0","🇲🇱":"1f1f2-1f1f1","🇲🇲":"1f1f2-1f1f2","🇲đŸ‡ŗ":"1f1f2-1f1f3","🇲🇴":"1f1f2-1f1f4","🇲đŸ‡ĩ":"1f1f2-1f1f5","🇲đŸ‡ļ":"1f1f2-1f1f6","🇲🇷":"1f1f2-1f1f7","🇲🇸":"1f1f2-1f1f8","🇲🇹":"1f1f2-1f1f9","🇲đŸ‡ē":"1f1f2-1f1fa","🇲đŸ‡ģ":"1f1f2-1f1fb","🇲đŸ‡ŧ":"1f1f2-1f1fc","🇲đŸ‡Ŋ":"1f1f2-1f1fd","🇲🇾":"1f1f2-1f1fe","🇲đŸ‡ŋ":"1f1f2-1f1ff","đŸ‡ŗđŸ‡Ļ":"1f1f3-1f1e6","đŸ‡ŗ🇨":"1f1f3-1f1e8","đŸ‡ŗđŸ‡Ē":"1f1f3-1f1ea","đŸ‡ŗđŸ‡Ģ":"1f1f3-1f1eb","đŸ‡ŗđŸ‡Ŧ":"1f1f3-1f1ec","đŸ‡ŗ🇮":"1f1f3-1f1ee","đŸ‡ŗ🇱":"1f1f3-1f1f1","đŸ‡ŗ🇴":"1f1f3-1f1f4","đŸ‡ŗđŸ‡ĩ":"1f1f3-1f1f5","đŸ‡ŗ🇷":"1f1f3-1f1f7","đŸ‡ŗđŸ‡ē":"1f1f3-1f1fa","đŸ‡ŗđŸ‡ŋ":"1f1f3-1f1ff","🇴🇲":"1f1f4-1f1f2","đŸ‡ĩđŸ‡Ļ":"1f1f5-1f1e6","đŸ‡ĩđŸ‡Ē":"1f1f5-1f1ea","đŸ‡ĩđŸ‡Ģ":"1f1f5-1f1eb","đŸ‡ĩđŸ‡Ŧ":"1f1f5-1f1ec","đŸ‡ĩ🇭":"1f1f5-1f1ed","đŸ‡ĩ🇰":"1f1f5-1f1f0","đŸ‡ĩ🇱":"1f1f5-1f1f1","đŸ‡ĩ🇲":"1f1f5-1f1f2","đŸ‡ĩđŸ‡ŗ":"1f1f5-1f1f3","đŸ‡ĩ🇷":"1f1f5-1f1f7","đŸ‡ĩ🇸":"1f1f5-1f1f8","đŸ‡ĩ🇹":"1f1f5-1f1f9","đŸ‡ĩđŸ‡ŧ":"1f1f5-1f1fc","đŸ‡ĩ🇾":"1f1f5-1f1fe","đŸ‡ļđŸ‡Ļ":"1f1f6-1f1e6","🇷đŸ‡Ē":"1f1f7-1f1ea","🇷🇴":"1f1f7-1f1f4","🇷🇸":"1f1f7-1f1f8","🇷đŸ‡ē":"1f1f7-1f1fa","🇷đŸ‡ŧ":"1f1f7-1f1fc","🇸đŸ‡Ļ":"1f1f8-1f1e6","🇸🇧":"1f1f8-1f1e7","🇸🇨":"1f1f8-1f1e8","🇸🇩":"1f1f8-1f1e9","🇸đŸ‡Ē":"1f1f8-1f1ea","🇸đŸ‡Ŧ":"1f1f8-1f1ec","🇸🇭":"1f1f8-1f1ed","🇸🇮":"1f1f8-1f1ee","đŸ‡¸đŸ‡¯":"1f1f8-1f1ef","🇸🇰":"1f1f8-1f1f0","🇸🇱":"1f1f8-1f1f1","🇸🇲":"1f1f8-1f1f2","🇸đŸ‡ŗ":"1f1f8-1f1f3","🇸🇴":"1f1f8-1f1f4","🇸🇷":"1f1f8-1f1f7","🇸🇸":"1f1f8-1f1f8","🇸🇹":"1f1f8-1f1f9","🇸đŸ‡ģ":"1f1f8-1f1fb","🇸đŸ‡Ŋ":"1f1f8-1f1fd","🇸🇾":"1f1f8-1f1fe","🇸đŸ‡ŋ":"1f1f8-1f1ff","🇹đŸ‡Ļ":"1f1f9-1f1e6","🇹🇨":"1f1f9-1f1e8","🇹🇩":"1f1f9-1f1e9","🇹đŸ‡Ģ":"1f1f9-1f1eb","🇹đŸ‡Ŧ":"1f1f9-1f1ec","🇹🇭":"1f1f9-1f1ed","đŸ‡šđŸ‡¯":"1f1f9-1f1ef","🇹🇰":"1f1f9-1f1f0","🇹🇱":"1f1f9-1f1f1","🇹🇲":"1f1f9-1f1f2","🇹đŸ‡ŗ":"1f1f9-1f1f3","🇹🇴":"1f1f9-1f1f4","🇹🇷":"1f1f9-1f1f7","🇹🇹":"1f1f9-1f1f9","🇹đŸ‡ģ":"1f1f9-1f1fb","🇹đŸ‡ŧ":"1f1f9-1f1fc","🇹đŸ‡ŋ":"1f1f9-1f1ff","đŸ‡ēđŸ‡Ļ":"1f1fa-1f1e6","đŸ‡ēđŸ‡Ŧ":"1f1fa-1f1ec","đŸ‡ē🇲":"1f1fa-1f1f2","đŸ‡ēđŸ‡ŗ":"1f1fa-1f1f3","đŸ‡ē🇸":"1f1fa-1f1f8","đŸ‡ē🇾":"1f1fa-1f1fe","đŸ‡ēđŸ‡ŋ":"1f1fa-1f1ff","đŸ‡ģđŸ‡Ļ":"1f1fb-1f1e6","đŸ‡ģ🇨":"1f1fb-1f1e8","đŸ‡ģđŸ‡Ē":"1f1fb-1f1ea","đŸ‡ģđŸ‡Ŧ":"1f1fb-1f1ec","đŸ‡ģ🇮":"1f1fb-1f1ee","đŸ‡ģđŸ‡ŗ":"1f1fb-1f1f3","đŸ‡ģđŸ‡ē":"1f1fb-1f1fa","đŸ‡ŧđŸ‡Ģ":"1f1fc-1f1eb","đŸ‡ŧ🇸":"1f1fc-1f1f8","đŸ‡Ŋ🇰":"1f1fd-1f1f0","🇾đŸ‡Ē":"1f1fe-1f1ea","🇾🇹":"1f1fe-1f1f9","đŸ‡ŋđŸ‡Ļ":"1f1ff-1f1e6","đŸ‡ŋ🇲":"1f1ff-1f1f2","đŸ‡ŋđŸ‡ŧ":"1f1ff-1f1fc","đŸ˜ļ‍đŸŒĢ":"1f636-200d-1f32b-fe0f","😮‍💨":"1f62e-200d-1f4a8","đŸ˜ĩ‍đŸ’Ģ":"1f635-200d-1f4ab","❤‍đŸ”Ĩ":"2764-fe0f-200d-1f525","❤‍🩹":"2764-fe0f-200d-1fa79","👁‍🗨":"1f441-200d-1f5e8","🧔‍♂":"1f9d4-200d-2642-fe0f","🧔‍♀":"1f9d4-200d-2640-fe0f","👨‍đŸĻ°":"1f468-200d-1f9b0","👨‍đŸĻą":"1f468-200d-1f9b1","👨‍đŸĻŗ":"1f468-200d-1f9b3","👨‍đŸĻ˛":"1f468-200d-1f9b2","👩‍đŸĻ°":"1f469-200d-1f9b0","🧑‍đŸĻ°":"1f9d1-200d-1f9b0","👩‍đŸĻą":"1f469-200d-1f9b1","🧑‍đŸĻą":"1f9d1-200d-1f9b1","👩‍đŸĻŗ":"1f469-200d-1f9b3","🧑‍đŸĻŗ":"1f9d1-200d-1f9b3","👩‍đŸĻ˛":"1f469-200d-1f9b2","🧑‍đŸĻ˛":"1f9d1-200d-1f9b2","👱‍♀":"1f471-200d-2640-fe0f","👱‍♂":"1f471-200d-2642-fe0f","🙍‍♂":"1f64d-200d-2642-fe0f","🙍‍♀":"1f64d-200d-2640-fe0f","🙎‍♂":"1f64e-200d-2642-fe0f","🙎‍♀":"1f64e-200d-2640-fe0f","🙅‍♂":"1f645-200d-2642-fe0f","🙅‍♀":"1f645-200d-2640-fe0f","🙆‍♂":"1f646-200d-2642-fe0f","🙆‍♀":"1f646-200d-2640-fe0f","💁‍♂":"1f481-200d-2642-fe0f","💁‍♀":"1f481-200d-2640-fe0f","🙋‍♂":"1f64b-200d-2642-fe0f","🙋‍♀":"1f64b-200d-2640-fe0f","🧏‍♂":"1f9cf-200d-2642-fe0f","🧏‍♀":"1f9cf-200d-2640-fe0f","🙇‍♂":"1f647-200d-2642-fe0f","🙇‍♀":"1f647-200d-2640-fe0f","đŸ¤Ļ‍♂":"1f926-200d-2642-fe0f","đŸ¤Ļ‍♀":"1f926-200d-2640-fe0f","🤷‍♂":"1f937-200d-2642-fe0f","🤷‍♀":"1f937-200d-2640-fe0f","🧑‍⚕":"1f9d1-200d-2695-fe0f","👨‍⚕":"1f468-200d-2695-fe0f","👩‍⚕":"1f469-200d-2695-fe0f","🧑‍🎓":"1f9d1-200d-1f393","👨‍🎓":"1f468-200d-1f393","👩‍🎓":"1f469-200d-1f393","🧑‍đŸĢ":"1f9d1-200d-1f3eb","👨‍đŸĢ":"1f468-200d-1f3eb","👩‍đŸĢ":"1f469-200d-1f3eb","🧑‍⚖":"1f9d1-200d-2696-fe0f","👨‍⚖":"1f468-200d-2696-fe0f","👩‍⚖":"1f469-200d-2696-fe0f","🧑‍🌾":"1f9d1-200d-1f33e","👨‍🌾":"1f468-200d-1f33e","👩‍🌾":"1f469-200d-1f33e","🧑‍đŸŗ":"1f9d1-200d-1f373","👨‍đŸŗ":"1f468-200d-1f373","👩‍đŸŗ":"1f469-200d-1f373","🧑‍🔧":"1f9d1-200d-1f527","👨‍🔧":"1f468-200d-1f527","👩‍🔧":"1f469-200d-1f527","🧑‍🏭":"1f9d1-200d-1f3ed","👨‍🏭":"1f468-200d-1f3ed","👩‍🏭":"1f469-200d-1f3ed","🧑‍đŸ’ŧ":"1f9d1-200d-1f4bc","👨‍đŸ’ŧ":"1f468-200d-1f4bc","👩‍đŸ’ŧ":"1f469-200d-1f4bc","🧑‍đŸ”Ŧ":"1f9d1-200d-1f52c","👨‍đŸ”Ŧ":"1f468-200d-1f52c","👩‍đŸ”Ŧ":"1f469-200d-1f52c","🧑‍đŸ’ģ":"1f9d1-200d-1f4bb","👨‍đŸ’ģ":"1f468-200d-1f4bb","👩‍đŸ’ģ":"1f469-200d-1f4bb","🧑‍🎤":"1f9d1-200d-1f3a4","👨‍🎤":"1f468-200d-1f3a4","👩‍🎤":"1f469-200d-1f3a4","🧑‍🎨":"1f9d1-200d-1f3a8","👨‍🎨":"1f468-200d-1f3a8","👩‍🎨":"1f469-200d-1f3a8","🧑‍✈":"1f9d1-200d-2708-fe0f","👨‍✈":"1f468-200d-2708-fe0f","👩‍✈":"1f469-200d-2708-fe0f","🧑‍🚀":"1f9d1-200d-1f680","👨‍🚀":"1f468-200d-1f680","👩‍🚀":"1f469-200d-1f680","🧑‍🚒":"1f9d1-200d-1f692","👨‍🚒":"1f468-200d-1f692","👩‍🚒":"1f469-200d-1f692","👮‍♂":"1f46e-200d-2642-fe0f","👮‍♀":"1f46e-200d-2640-fe0f","đŸ•ĩ‍♂":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩ‍♀":"1f575-fe0f-200d-2640-fe0f","💂‍♂":"1f482-200d-2642-fe0f","💂‍♀":"1f482-200d-2640-fe0f","👷‍♂":"1f477-200d-2642-fe0f","👷‍♀":"1f477-200d-2640-fe0f","đŸ‘ŗ‍♂":"1f473-200d-2642-fe0f","đŸ‘ŗ‍♀":"1f473-200d-2640-fe0f","đŸ¤ĩ‍♂":"1f935-200d-2642-fe0f","đŸ¤ĩ‍♀":"1f935-200d-2640-fe0f","👰‍♂":"1f470-200d-2642-fe0f","👰‍♀":"1f470-200d-2640-fe0f","👩‍đŸŧ":"1f469-200d-1f37c","👨‍đŸŧ":"1f468-200d-1f37c","🧑‍đŸŧ":"1f9d1-200d-1f37c","🧑‍🎄":"1f9d1-200d-1f384","đŸĻ¸â€â™‚":"1f9b8-200d-2642-fe0f","đŸĻ¸â€â™€":"1f9b8-200d-2640-fe0f","đŸĻšâ€â™‚":"1f9b9-200d-2642-fe0f","đŸĻšâ€â™€":"1f9b9-200d-2640-fe0f","🧙‍♂":"1f9d9-200d-2642-fe0f","🧙‍♀":"1f9d9-200d-2640-fe0f","🧚‍♂":"1f9da-200d-2642-fe0f","🧚‍♀":"1f9da-200d-2640-fe0f","🧛‍♂":"1f9db-200d-2642-fe0f","🧛‍♀":"1f9db-200d-2640-fe0f","🧜‍♂":"1f9dc-200d-2642-fe0f","🧜‍♀":"1f9dc-200d-2640-fe0f","🧝‍♂":"1f9dd-200d-2642-fe0f","🧝‍♀":"1f9dd-200d-2640-fe0f","🧞‍♂":"1f9de-200d-2642-fe0f","🧞‍♀":"1f9de-200d-2640-fe0f","🧟‍♂":"1f9df-200d-2642-fe0f","🧟‍♀":"1f9df-200d-2640-fe0f","💆‍♂":"1f486-200d-2642-fe0f","💆‍♀":"1f486-200d-2640-fe0f","💇‍♂":"1f487-200d-2642-fe0f","💇‍♀":"1f487-200d-2640-fe0f","đŸšļ‍♂":"1f6b6-200d-2642-fe0f","đŸšļ‍♀":"1f6b6-200d-2640-fe0f","🧍‍♂":"1f9cd-200d-2642-fe0f","🧍‍♀":"1f9cd-200d-2640-fe0f","🧎‍♂":"1f9ce-200d-2642-fe0f","🧎‍♀":"1f9ce-200d-2640-fe0f","🧑‍đŸĻ¯":"1f9d1-200d-1f9af","👨‍đŸĻ¯":"1f468-200d-1f9af","👩‍đŸĻ¯":"1f469-200d-1f9af","🧑‍đŸĻŧ":"1f9d1-200d-1f9bc","👨‍đŸĻŧ":"1f468-200d-1f9bc","👩‍đŸĻŧ":"1f469-200d-1f9bc","🧑‍đŸĻŊ":"1f9d1-200d-1f9bd","👨‍đŸĻŊ":"1f468-200d-1f9bd","👩‍đŸĻŊ":"1f469-200d-1f9bd","🏃‍♂":"1f3c3-200d-2642-fe0f","🏃‍♀":"1f3c3-200d-2640-fe0f","đŸ‘¯â€â™‚":"1f46f-200d-2642-fe0f","đŸ‘¯â€â™€":"1f46f-200d-2640-fe0f","🧖‍♂":"1f9d6-200d-2642-fe0f","🧖‍♀":"1f9d6-200d-2640-fe0f","🧗‍♂":"1f9d7-200d-2642-fe0f","🧗‍♀":"1f9d7-200d-2640-fe0f","🏌‍♂":"1f3cc-fe0f-200d-2642-fe0f","🏌‍♀":"1f3cc-fe0f-200d-2640-fe0f","🏄‍♂":"1f3c4-200d-2642-fe0f","🏄‍♀":"1f3c4-200d-2640-fe0f","đŸšŖ‍♂":"1f6a3-200d-2642-fe0f","đŸšŖ‍♀":"1f6a3-200d-2640-fe0f","🏊‍♂":"1f3ca-200d-2642-fe0f","🏊‍♀":"1f3ca-200d-2640-fe0f","⛹‍♂":"26f9-fe0f-200d-2642-fe0f","⛹‍♀":"26f9-fe0f-200d-2640-fe0f","🏋‍♂":"1f3cb-fe0f-200d-2642-fe0f","🏋‍♀":"1f3cb-fe0f-200d-2640-fe0f","🚴‍♂":"1f6b4-200d-2642-fe0f","🚴‍♀":"1f6b4-200d-2640-fe0f","đŸšĩ‍♂":"1f6b5-200d-2642-fe0f","đŸšĩ‍♀":"1f6b5-200d-2640-fe0f","🤸‍♂":"1f938-200d-2642-fe0f","🤸‍♀":"1f938-200d-2640-fe0f","đŸ¤ŧ‍♂":"1f93c-200d-2642-fe0f","đŸ¤ŧ‍♀":"1f93c-200d-2640-fe0f","đŸ¤Ŋ‍♂":"1f93d-200d-2642-fe0f","đŸ¤Ŋ‍♀":"1f93d-200d-2640-fe0f","🤾‍♂":"1f93e-200d-2642-fe0f","🤾‍♀":"1f93e-200d-2640-fe0f","🤹‍♂":"1f939-200d-2642-fe0f","🤹‍♀":"1f939-200d-2640-fe0f","🧘‍♂":"1f9d8-200d-2642-fe0f","🧘‍♀":"1f9d8-200d-2640-fe0f","👨‍đŸ‘Ļ":"1f468-200d-1f466","👨‍👧":"1f468-200d-1f467","👩‍đŸ‘Ļ":"1f469-200d-1f466","👩‍👧":"1f469-200d-1f467","🐕‍đŸĻē":"1f415-200d-1f9ba","🐈‍âŦ›":"1f408-200d-2b1b","đŸģ‍❄":"1f43b-200d-2744-fe0f","đŸĻ‍âŦ›":"1f426-200d-2b1b","#ī¸âƒŖ":"23-20e3","*ī¸âƒŖ":"2a-20e3","0ī¸âƒŖ":"30-20e3","1ī¸âƒŖ":"31-20e3","2ī¸âƒŖ":"32-20e3","3ī¸âƒŖ":"33-20e3","4ī¸âƒŖ":"34-20e3","5ī¸âƒŖ":"35-20e3","6ī¸âƒŖ":"36-20e3","7ī¸âƒŖ":"37-20e3","8ī¸âƒŖ":"38-20e3","9ī¸âƒŖ":"39-20e3","đŸŗ‍🌈":"1f3f3-fe0f-200d-1f308","đŸŗ‍⚧":"1f3f3-fe0f-200d-26a7-fe0f","🏴‍☠":"1f3f4-200d-2620-fe0f","đŸ˜ļ‍đŸŒĢī¸":"1f636-200d-1f32b-fe0f","❤ī¸â€đŸ”Ĩ":"2764-fe0f-200d-1f525","❤ī¸â€đŸŠš":"2764-fe0f-200d-1fa79","👁‍🗨ī¸":"1f441-200d-1f5e8","👁ī¸â€đŸ—¨":"1f441-200d-1f5e8","🧔‍♂ī¸":"1f9d4-200d-2642-fe0f","🧔đŸģ‍♂":"1f9d4-1f3fb-200d-2642-fe0f","🧔đŸŧ‍♂":"1f9d4-1f3fc-200d-2642-fe0f","🧔đŸŊ‍♂":"1f9d4-1f3fd-200d-2642-fe0f","🧔🏾‍♂":"1f9d4-1f3fe-200d-2642-fe0f","🧔đŸŋ‍♂":"1f9d4-1f3ff-200d-2642-fe0f","🧔‍♀ī¸":"1f9d4-200d-2640-fe0f","🧔đŸģ‍♀":"1f9d4-1f3fb-200d-2640-fe0f","🧔đŸŧ‍♀":"1f9d4-1f3fc-200d-2640-fe0f","🧔đŸŊ‍♀":"1f9d4-1f3fd-200d-2640-fe0f","🧔🏾‍♀":"1f9d4-1f3fe-200d-2640-fe0f","🧔đŸŋ‍♀":"1f9d4-1f3ff-200d-2640-fe0f","👨đŸģ‍đŸĻ°":"1f468-1f3fb-200d-1f9b0","👨đŸŧ‍đŸĻ°":"1f468-1f3fc-200d-1f9b0","👨đŸŊ‍đŸĻ°":"1f468-1f3fd-200d-1f9b0","👨🏾‍đŸĻ°":"1f468-1f3fe-200d-1f9b0","👨đŸŋ‍đŸĻ°":"1f468-1f3ff-200d-1f9b0","👨đŸģ‍đŸĻą":"1f468-1f3fb-200d-1f9b1","👨đŸŧ‍đŸĻą":"1f468-1f3fc-200d-1f9b1","👨đŸŊ‍đŸĻą":"1f468-1f3fd-200d-1f9b1","👨🏾‍đŸĻą":"1f468-1f3fe-200d-1f9b1","👨đŸŋ‍đŸĻą":"1f468-1f3ff-200d-1f9b1","👨đŸģ‍đŸĻŗ":"1f468-1f3fb-200d-1f9b3","👨đŸŧ‍đŸĻŗ":"1f468-1f3fc-200d-1f9b3","👨đŸŊ‍đŸĻŗ":"1f468-1f3fd-200d-1f9b3","👨🏾‍đŸĻŗ":"1f468-1f3fe-200d-1f9b3","👨đŸŋ‍đŸĻŗ":"1f468-1f3ff-200d-1f9b3","👨đŸģ‍đŸĻ˛":"1f468-1f3fb-200d-1f9b2","👨đŸŧ‍đŸĻ˛":"1f468-1f3fc-200d-1f9b2","👨đŸŊ‍đŸĻ˛":"1f468-1f3fd-200d-1f9b2","👨🏾‍đŸĻ˛":"1f468-1f3fe-200d-1f9b2","👨đŸŋ‍đŸĻ˛":"1f468-1f3ff-200d-1f9b2","👩đŸģ‍đŸĻ°":"1f469-1f3fb-200d-1f9b0","👩đŸŧ‍đŸĻ°":"1f469-1f3fc-200d-1f9b0","👩đŸŊ‍đŸĻ°":"1f469-1f3fd-200d-1f9b0","👩🏾‍đŸĻ°":"1f469-1f3fe-200d-1f9b0","👩đŸŋ‍đŸĻ°":"1f469-1f3ff-200d-1f9b0","🧑đŸģ‍đŸĻ°":"1f9d1-1f3fb-200d-1f9b0","🧑đŸŧ‍đŸĻ°":"1f9d1-1f3fc-200d-1f9b0","🧑đŸŊ‍đŸĻ°":"1f9d1-1f3fd-200d-1f9b0","🧑🏾‍đŸĻ°":"1f9d1-1f3fe-200d-1f9b0","🧑đŸŋ‍đŸĻ°":"1f9d1-1f3ff-200d-1f9b0","👩đŸģ‍đŸĻą":"1f469-1f3fb-200d-1f9b1","👩đŸŧ‍đŸĻą":"1f469-1f3fc-200d-1f9b1","👩đŸŊ‍đŸĻą":"1f469-1f3fd-200d-1f9b1","👩🏾‍đŸĻą":"1f469-1f3fe-200d-1f9b1","👩đŸŋ‍đŸĻą":"1f469-1f3ff-200d-1f9b1","🧑đŸģ‍đŸĻą":"1f9d1-1f3fb-200d-1f9b1","🧑đŸŧ‍đŸĻą":"1f9d1-1f3fc-200d-1f9b1","🧑đŸŊ‍đŸĻą":"1f9d1-1f3fd-200d-1f9b1","🧑🏾‍đŸĻą":"1f9d1-1f3fe-200d-1f9b1","🧑đŸŋ‍đŸĻą":"1f9d1-1f3ff-200d-1f9b1","👩đŸģ‍đŸĻŗ":"1f469-1f3fb-200d-1f9b3","👩đŸŧ‍đŸĻŗ":"1f469-1f3fc-200d-1f9b3","👩đŸŊ‍đŸĻŗ":"1f469-1f3fd-200d-1f9b3","👩🏾‍đŸĻŗ":"1f469-1f3fe-200d-1f9b3","👩đŸŋ‍đŸĻŗ":"1f469-1f3ff-200d-1f9b3","🧑đŸģ‍đŸĻŗ":"1f9d1-1f3fb-200d-1f9b3","🧑đŸŧ‍đŸĻŗ":"1f9d1-1f3fc-200d-1f9b3","🧑đŸŊ‍đŸĻŗ":"1f9d1-1f3fd-200d-1f9b3","🧑🏾‍đŸĻŗ":"1f9d1-1f3fe-200d-1f9b3","🧑đŸŋ‍đŸĻŗ":"1f9d1-1f3ff-200d-1f9b3","👩đŸģ‍đŸĻ˛":"1f469-1f3fb-200d-1f9b2","👩đŸŧ‍đŸĻ˛":"1f469-1f3fc-200d-1f9b2","👩đŸŊ‍đŸĻ˛":"1f469-1f3fd-200d-1f9b2","👩🏾‍đŸĻ˛":"1f469-1f3fe-200d-1f9b2","👩đŸŋ‍đŸĻ˛":"1f469-1f3ff-200d-1f9b2","🧑đŸģ‍đŸĻ˛":"1f9d1-1f3fb-200d-1f9b2","🧑đŸŧ‍đŸĻ˛":"1f9d1-1f3fc-200d-1f9b2","🧑đŸŊ‍đŸĻ˛":"1f9d1-1f3fd-200d-1f9b2","🧑🏾‍đŸĻ˛":"1f9d1-1f3fe-200d-1f9b2","🧑đŸŋ‍đŸĻ˛":"1f9d1-1f3ff-200d-1f9b2","👱‍♀ī¸":"1f471-200d-2640-fe0f","👱đŸģ‍♀":"1f471-1f3fb-200d-2640-fe0f","👱đŸŧ‍♀":"1f471-1f3fc-200d-2640-fe0f","👱đŸŊ‍♀":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀":"1f471-1f3fe-200d-2640-fe0f","👱đŸŋ‍♀":"1f471-1f3ff-200d-2640-fe0f","👱‍♂ī¸":"1f471-200d-2642-fe0f","👱đŸģ‍♂":"1f471-1f3fb-200d-2642-fe0f","👱đŸŧ‍♂":"1f471-1f3fc-200d-2642-fe0f","👱đŸŊ‍♂":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂":"1f471-1f3fe-200d-2642-fe0f","👱đŸŋ‍♂":"1f471-1f3ff-200d-2642-fe0f","🙍‍♂ī¸":"1f64d-200d-2642-fe0f","🙍đŸģ‍♂":"1f64d-1f3fb-200d-2642-fe0f","🙍đŸŧ‍♂":"1f64d-1f3fc-200d-2642-fe0f","🙍đŸŊ‍♂":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂":"1f64d-1f3fe-200d-2642-fe0f","🙍đŸŋ‍♂":"1f64d-1f3ff-200d-2642-fe0f","🙍‍♀ī¸":"1f64d-200d-2640-fe0f","🙍đŸģ‍♀":"1f64d-1f3fb-200d-2640-fe0f","🙍đŸŧ‍♀":"1f64d-1f3fc-200d-2640-fe0f","🙍đŸŊ‍♀":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀":"1f64d-1f3fe-200d-2640-fe0f","🙍đŸŋ‍♀":"1f64d-1f3ff-200d-2640-fe0f","🙎‍♂ī¸":"1f64e-200d-2642-fe0f","🙎đŸģ‍♂":"1f64e-1f3fb-200d-2642-fe0f","🙎đŸŧ‍♂":"1f64e-1f3fc-200d-2642-fe0f","🙎đŸŊ‍♂":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂":"1f64e-1f3fe-200d-2642-fe0f","🙎đŸŋ‍♂":"1f64e-1f3ff-200d-2642-fe0f","🙎‍♀ī¸":"1f64e-200d-2640-fe0f","🙎đŸģ‍♀":"1f64e-1f3fb-200d-2640-fe0f","🙎đŸŧ‍♀":"1f64e-1f3fc-200d-2640-fe0f","🙎đŸŊ‍♀":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀":"1f64e-1f3fe-200d-2640-fe0f","🙎đŸŋ‍♀":"1f64e-1f3ff-200d-2640-fe0f","🙅‍♂ī¸":"1f645-200d-2642-fe0f","🙅đŸģ‍♂":"1f645-1f3fb-200d-2642-fe0f","🙅đŸŧ‍♂":"1f645-1f3fc-200d-2642-fe0f","🙅đŸŊ‍♂":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂":"1f645-1f3fe-200d-2642-fe0f","🙅đŸŋ‍♂":"1f645-1f3ff-200d-2642-fe0f","🙅‍♀ī¸":"1f645-200d-2640-fe0f","🙅đŸģ‍♀":"1f645-1f3fb-200d-2640-fe0f","🙅đŸŧ‍♀":"1f645-1f3fc-200d-2640-fe0f","🙅đŸŊ‍♀":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀":"1f645-1f3fe-200d-2640-fe0f","🙅đŸŋ‍♀":"1f645-1f3ff-200d-2640-fe0f","🙆‍♂ī¸":"1f646-200d-2642-fe0f","🙆đŸģ‍♂":"1f646-1f3fb-200d-2642-fe0f","🙆đŸŧ‍♂":"1f646-1f3fc-200d-2642-fe0f","🙆đŸŊ‍♂":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂":"1f646-1f3fe-200d-2642-fe0f","🙆đŸŋ‍♂":"1f646-1f3ff-200d-2642-fe0f","🙆‍♀ī¸":"1f646-200d-2640-fe0f","🙆đŸģ‍♀":"1f646-1f3fb-200d-2640-fe0f","🙆đŸŧ‍♀":"1f646-1f3fc-200d-2640-fe0f","🙆đŸŊ‍♀":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀":"1f646-1f3fe-200d-2640-fe0f","🙆đŸŋ‍♀":"1f646-1f3ff-200d-2640-fe0f","💁‍♂ī¸":"1f481-200d-2642-fe0f","💁đŸģ‍♂":"1f481-1f3fb-200d-2642-fe0f","💁đŸŧ‍♂":"1f481-1f3fc-200d-2642-fe0f","💁đŸŊ‍♂":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂":"1f481-1f3fe-200d-2642-fe0f","💁đŸŋ‍♂":"1f481-1f3ff-200d-2642-fe0f","💁‍♀ī¸":"1f481-200d-2640-fe0f","💁đŸģ‍♀":"1f481-1f3fb-200d-2640-fe0f","💁đŸŧ‍♀":"1f481-1f3fc-200d-2640-fe0f","💁đŸŊ‍♀":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀":"1f481-1f3fe-200d-2640-fe0f","💁đŸŋ‍♀":"1f481-1f3ff-200d-2640-fe0f","🙋‍♂ī¸":"1f64b-200d-2642-fe0f","🙋đŸģ‍♂":"1f64b-1f3fb-200d-2642-fe0f","🙋đŸŧ‍♂":"1f64b-1f3fc-200d-2642-fe0f","🙋đŸŊ‍♂":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂":"1f64b-1f3fe-200d-2642-fe0f","🙋đŸŋ‍♂":"1f64b-1f3ff-200d-2642-fe0f","🙋‍♀ī¸":"1f64b-200d-2640-fe0f","🙋đŸģ‍♀":"1f64b-1f3fb-200d-2640-fe0f","🙋đŸŧ‍♀":"1f64b-1f3fc-200d-2640-fe0f","🙋đŸŊ‍♀":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀":"1f64b-1f3fe-200d-2640-fe0f","🙋đŸŋ‍♀":"1f64b-1f3ff-200d-2640-fe0f","🧏‍♂ī¸":"1f9cf-200d-2642-fe0f","🧏đŸģ‍♂":"1f9cf-1f3fb-200d-2642-fe0f","🧏đŸŧ‍♂":"1f9cf-1f3fc-200d-2642-fe0f","🧏đŸŊ‍♂":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂":"1f9cf-1f3fe-200d-2642-fe0f","🧏đŸŋ‍♂":"1f9cf-1f3ff-200d-2642-fe0f","🧏‍♀ī¸":"1f9cf-200d-2640-fe0f","🧏đŸģ‍♀":"1f9cf-1f3fb-200d-2640-fe0f","🧏đŸŧ‍♀":"1f9cf-1f3fc-200d-2640-fe0f","🧏đŸŊ‍♀":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀":"1f9cf-1f3fe-200d-2640-fe0f","🧏đŸŋ‍♀":"1f9cf-1f3ff-200d-2640-fe0f","🙇‍♂ī¸":"1f647-200d-2642-fe0f","🙇đŸģ‍♂":"1f647-1f3fb-200d-2642-fe0f","🙇đŸŧ‍♂":"1f647-1f3fc-200d-2642-fe0f","🙇đŸŊ‍♂":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂":"1f647-1f3fe-200d-2642-fe0f","🙇đŸŋ‍♂":"1f647-1f3ff-200d-2642-fe0f","🙇‍♀ī¸":"1f647-200d-2640-fe0f","🙇đŸģ‍♀":"1f647-1f3fb-200d-2640-fe0f","🙇đŸŧ‍♀":"1f647-1f3fc-200d-2640-fe0f","🙇đŸŊ‍♀":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀":"1f647-1f3fe-200d-2640-fe0f","🙇đŸŋ‍♀":"1f647-1f3ff-200d-2640-fe0f","đŸ¤Ļ‍♂ī¸":"1f926-200d-2642-fe0f","đŸ¤ĻđŸģ‍♂":"1f926-1f3fb-200d-2642-fe0f","đŸ¤ĻđŸŧ‍♂":"1f926-1f3fc-200d-2642-fe0f","đŸ¤ĻđŸŊ‍♂":"1f926-1f3fd-200d-2642-fe0f","đŸ¤Ļ🏾‍♂":"1f926-1f3fe-200d-2642-fe0f","đŸ¤ĻđŸŋ‍♂":"1f926-1f3ff-200d-2642-fe0f","đŸ¤Ļ‍♀ī¸":"1f926-200d-2640-fe0f","đŸ¤ĻđŸģ‍♀":"1f926-1f3fb-200d-2640-fe0f","đŸ¤ĻđŸŧ‍♀":"1f926-1f3fc-200d-2640-fe0f","đŸ¤ĻđŸŊ‍♀":"1f926-1f3fd-200d-2640-fe0f","đŸ¤Ļ🏾‍♀":"1f926-1f3fe-200d-2640-fe0f","đŸ¤ĻđŸŋ‍♀":"1f926-1f3ff-200d-2640-fe0f","🤷‍♂ī¸":"1f937-200d-2642-fe0f","🤷đŸģ‍♂":"1f937-1f3fb-200d-2642-fe0f","🤷đŸŧ‍♂":"1f937-1f3fc-200d-2642-fe0f","🤷đŸŊ‍♂":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂":"1f937-1f3fe-200d-2642-fe0f","🤷đŸŋ‍♂":"1f937-1f3ff-200d-2642-fe0f","🤷‍♀ī¸":"1f937-200d-2640-fe0f","🤷đŸģ‍♀":"1f937-1f3fb-200d-2640-fe0f","🤷đŸŧ‍♀":"1f937-1f3fc-200d-2640-fe0f","🤷đŸŊ‍♀":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀":"1f937-1f3fe-200d-2640-fe0f","🤷đŸŋ‍♀":"1f937-1f3ff-200d-2640-fe0f","🧑‍⚕ī¸":"1f9d1-200d-2695-fe0f","🧑đŸģ‍⚕":"1f9d1-1f3fb-200d-2695-fe0f","🧑đŸŧ‍⚕":"1f9d1-1f3fc-200d-2695-fe0f","🧑đŸŊ‍⚕":"1f9d1-1f3fd-200d-2695-fe0f","🧑🏾‍⚕":"1f9d1-1f3fe-200d-2695-fe0f","🧑đŸŋ‍⚕":"1f9d1-1f3ff-200d-2695-fe0f","👨‍⚕ī¸":"1f468-200d-2695-fe0f","👨đŸģ‍⚕":"1f468-1f3fb-200d-2695-fe0f","👨đŸŧ‍⚕":"1f468-1f3fc-200d-2695-fe0f","👨đŸŊ‍⚕":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕":"1f468-1f3fe-200d-2695-fe0f","👨đŸŋ‍⚕":"1f468-1f3ff-200d-2695-fe0f","👩‍⚕ī¸":"1f469-200d-2695-fe0f","👩đŸģ‍⚕":"1f469-1f3fb-200d-2695-fe0f","👩đŸŧ‍⚕":"1f469-1f3fc-200d-2695-fe0f","👩đŸŊ‍⚕":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕":"1f469-1f3fe-200d-2695-fe0f","👩đŸŋ‍⚕":"1f469-1f3ff-200d-2695-fe0f","🧑đŸģ‍🎓":"1f9d1-1f3fb-200d-1f393","🧑đŸŧ‍🎓":"1f9d1-1f3fc-200d-1f393","🧑đŸŊ‍🎓":"1f9d1-1f3fd-200d-1f393","🧑🏾‍🎓":"1f9d1-1f3fe-200d-1f393","🧑đŸŋ‍🎓":"1f9d1-1f3ff-200d-1f393","👨đŸģ‍🎓":"1f468-1f3fb-200d-1f393","👨đŸŧ‍🎓":"1f468-1f3fc-200d-1f393","👨đŸŊ‍🎓":"1f468-1f3fd-200d-1f393","👨🏾‍🎓":"1f468-1f3fe-200d-1f393","👨đŸŋ‍🎓":"1f468-1f3ff-200d-1f393","👩đŸģ‍🎓":"1f469-1f3fb-200d-1f393","👩đŸŧ‍🎓":"1f469-1f3fc-200d-1f393","👩đŸŊ‍🎓":"1f469-1f3fd-200d-1f393","👩🏾‍🎓":"1f469-1f3fe-200d-1f393","👩đŸŋ‍🎓":"1f469-1f3ff-200d-1f393","🧑đŸģ‍đŸĢ":"1f9d1-1f3fb-200d-1f3eb","🧑đŸŧ‍đŸĢ":"1f9d1-1f3fc-200d-1f3eb","🧑đŸŊ‍đŸĢ":"1f9d1-1f3fd-200d-1f3eb","🧑🏾‍đŸĢ":"1f9d1-1f3fe-200d-1f3eb","🧑đŸŋ‍đŸĢ":"1f9d1-1f3ff-200d-1f3eb","👨đŸģ‍đŸĢ":"1f468-1f3fb-200d-1f3eb","👨đŸŧ‍đŸĢ":"1f468-1f3fc-200d-1f3eb","👨đŸŊ‍đŸĢ":"1f468-1f3fd-200d-1f3eb","👨🏾‍đŸĢ":"1f468-1f3fe-200d-1f3eb","👨đŸŋ‍đŸĢ":"1f468-1f3ff-200d-1f3eb","👩đŸģ‍đŸĢ":"1f469-1f3fb-200d-1f3eb","👩đŸŧ‍đŸĢ":"1f469-1f3fc-200d-1f3eb","👩đŸŊ‍đŸĢ":"1f469-1f3fd-200d-1f3eb","👩🏾‍đŸĢ":"1f469-1f3fe-200d-1f3eb","👩đŸŋ‍đŸĢ":"1f469-1f3ff-200d-1f3eb","🧑‍⚖ī¸":"1f9d1-200d-2696-fe0f","🧑đŸģ‍⚖":"1f9d1-1f3fb-200d-2696-fe0f","🧑đŸŧ‍⚖":"1f9d1-1f3fc-200d-2696-fe0f","🧑đŸŊ‍⚖":"1f9d1-1f3fd-200d-2696-fe0f","🧑🏾‍⚖":"1f9d1-1f3fe-200d-2696-fe0f","🧑đŸŋ‍⚖":"1f9d1-1f3ff-200d-2696-fe0f","👨‍⚖ī¸":"1f468-200d-2696-fe0f","👨đŸģ‍⚖":"1f468-1f3fb-200d-2696-fe0f","👨đŸŧ‍⚖":"1f468-1f3fc-200d-2696-fe0f","👨đŸŊ‍⚖":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖":"1f468-1f3fe-200d-2696-fe0f","👨đŸŋ‍⚖":"1f468-1f3ff-200d-2696-fe0f","👩‍⚖ī¸":"1f469-200d-2696-fe0f","👩đŸģ‍⚖":"1f469-1f3fb-200d-2696-fe0f","👩đŸŧ‍⚖":"1f469-1f3fc-200d-2696-fe0f","👩đŸŊ‍⚖":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖":"1f469-1f3fe-200d-2696-fe0f","👩đŸŋ‍⚖":"1f469-1f3ff-200d-2696-fe0f","🧑đŸģ‍🌾":"1f9d1-1f3fb-200d-1f33e","🧑đŸŧ‍🌾":"1f9d1-1f3fc-200d-1f33e","🧑đŸŊ‍🌾":"1f9d1-1f3fd-200d-1f33e","🧑🏾‍🌾":"1f9d1-1f3fe-200d-1f33e","🧑đŸŋ‍🌾":"1f9d1-1f3ff-200d-1f33e","👨đŸģ‍🌾":"1f468-1f3fb-200d-1f33e","👨đŸŧ‍🌾":"1f468-1f3fc-200d-1f33e","👨đŸŊ‍🌾":"1f468-1f3fd-200d-1f33e","👨🏾‍🌾":"1f468-1f3fe-200d-1f33e","👨đŸŋ‍🌾":"1f468-1f3ff-200d-1f33e","👩đŸģ‍🌾":"1f469-1f3fb-200d-1f33e","👩đŸŧ‍🌾":"1f469-1f3fc-200d-1f33e","👩đŸŊ‍🌾":"1f469-1f3fd-200d-1f33e","👩🏾‍🌾":"1f469-1f3fe-200d-1f33e","👩đŸŋ‍🌾":"1f469-1f3ff-200d-1f33e","🧑đŸģ‍đŸŗ":"1f9d1-1f3fb-200d-1f373","🧑đŸŧ‍đŸŗ":"1f9d1-1f3fc-200d-1f373","🧑đŸŊ‍đŸŗ":"1f9d1-1f3fd-200d-1f373","🧑🏾‍đŸŗ":"1f9d1-1f3fe-200d-1f373","🧑đŸŋ‍đŸŗ":"1f9d1-1f3ff-200d-1f373","👨đŸģ‍đŸŗ":"1f468-1f3fb-200d-1f373","👨đŸŧ‍đŸŗ":"1f468-1f3fc-200d-1f373","👨đŸŊ‍đŸŗ":"1f468-1f3fd-200d-1f373","👨🏾‍đŸŗ":"1f468-1f3fe-200d-1f373","👨đŸŋ‍đŸŗ":"1f468-1f3ff-200d-1f373","👩đŸģ‍đŸŗ":"1f469-1f3fb-200d-1f373","👩đŸŧ‍đŸŗ":"1f469-1f3fc-200d-1f373","👩đŸŊ‍đŸŗ":"1f469-1f3fd-200d-1f373","👩🏾‍đŸŗ":"1f469-1f3fe-200d-1f373","👩đŸŋ‍đŸŗ":"1f469-1f3ff-200d-1f373","🧑đŸģ‍🔧":"1f9d1-1f3fb-200d-1f527","🧑đŸŧ‍🔧":"1f9d1-1f3fc-200d-1f527","🧑đŸŊ‍🔧":"1f9d1-1f3fd-200d-1f527","🧑🏾‍🔧":"1f9d1-1f3fe-200d-1f527","🧑đŸŋ‍🔧":"1f9d1-1f3ff-200d-1f527","👨đŸģ‍🔧":"1f468-1f3fb-200d-1f527","👨đŸŧ‍🔧":"1f468-1f3fc-200d-1f527","👨đŸŊ‍🔧":"1f468-1f3fd-200d-1f527","👨🏾‍🔧":"1f468-1f3fe-200d-1f527","👨đŸŋ‍🔧":"1f468-1f3ff-200d-1f527","👩đŸģ‍🔧":"1f469-1f3fb-200d-1f527","👩đŸŧ‍🔧":"1f469-1f3fc-200d-1f527","👩đŸŊ‍🔧":"1f469-1f3fd-200d-1f527","👩🏾‍🔧":"1f469-1f3fe-200d-1f527","👩đŸŋ‍🔧":"1f469-1f3ff-200d-1f527","🧑đŸģ‍🏭":"1f9d1-1f3fb-200d-1f3ed","🧑đŸŧ‍🏭":"1f9d1-1f3fc-200d-1f3ed","🧑đŸŊ‍🏭":"1f9d1-1f3fd-200d-1f3ed","🧑🏾‍🏭":"1f9d1-1f3fe-200d-1f3ed","🧑đŸŋ‍🏭":"1f9d1-1f3ff-200d-1f3ed","👨đŸģ‍🏭":"1f468-1f3fb-200d-1f3ed","👨đŸŧ‍🏭":"1f468-1f3fc-200d-1f3ed","👨đŸŊ‍🏭":"1f468-1f3fd-200d-1f3ed","👨🏾‍🏭":"1f468-1f3fe-200d-1f3ed","👨đŸŋ‍🏭":"1f468-1f3ff-200d-1f3ed","👩đŸģ‍🏭":"1f469-1f3fb-200d-1f3ed","👩đŸŧ‍🏭":"1f469-1f3fc-200d-1f3ed","👩đŸŊ‍🏭":"1f469-1f3fd-200d-1f3ed","👩🏾‍🏭":"1f469-1f3fe-200d-1f3ed","👩đŸŋ‍🏭":"1f469-1f3ff-200d-1f3ed","🧑đŸģ‍đŸ’ŧ":"1f9d1-1f3fb-200d-1f4bc","🧑đŸŧ‍đŸ’ŧ":"1f9d1-1f3fc-200d-1f4bc","🧑đŸŊ‍đŸ’ŧ":"1f9d1-1f3fd-200d-1f4bc","🧑🏾‍đŸ’ŧ":"1f9d1-1f3fe-200d-1f4bc","🧑đŸŋ‍đŸ’ŧ":"1f9d1-1f3ff-200d-1f4bc","👨đŸģ‍đŸ’ŧ":"1f468-1f3fb-200d-1f4bc","👨đŸŧ‍đŸ’ŧ":"1f468-1f3fc-200d-1f4bc","👨đŸŊ‍đŸ’ŧ":"1f468-1f3fd-200d-1f4bc","👨🏾‍đŸ’ŧ":"1f468-1f3fe-200d-1f4bc","👨đŸŋ‍đŸ’ŧ":"1f468-1f3ff-200d-1f4bc","👩đŸģ‍đŸ’ŧ":"1f469-1f3fb-200d-1f4bc","👩đŸŧ‍đŸ’ŧ":"1f469-1f3fc-200d-1f4bc","👩đŸŊ‍đŸ’ŧ":"1f469-1f3fd-200d-1f4bc","👩🏾‍đŸ’ŧ":"1f469-1f3fe-200d-1f4bc","👩đŸŋ‍đŸ’ŧ":"1f469-1f3ff-200d-1f4bc","🧑đŸģ‍đŸ”Ŧ":"1f9d1-1f3fb-200d-1f52c","🧑đŸŧ‍đŸ”Ŧ":"1f9d1-1f3fc-200d-1f52c","🧑đŸŊ‍đŸ”Ŧ":"1f9d1-1f3fd-200d-1f52c","🧑🏾‍đŸ”Ŧ":"1f9d1-1f3fe-200d-1f52c","🧑đŸŋ‍đŸ”Ŧ":"1f9d1-1f3ff-200d-1f52c","👨đŸģ‍đŸ”Ŧ":"1f468-1f3fb-200d-1f52c","👨đŸŧ‍đŸ”Ŧ":"1f468-1f3fc-200d-1f52c","👨đŸŊ‍đŸ”Ŧ":"1f468-1f3fd-200d-1f52c","👨🏾‍đŸ”Ŧ":"1f468-1f3fe-200d-1f52c","👨đŸŋ‍đŸ”Ŧ":"1f468-1f3ff-200d-1f52c","👩đŸģ‍đŸ”Ŧ":"1f469-1f3fb-200d-1f52c","👩đŸŧ‍đŸ”Ŧ":"1f469-1f3fc-200d-1f52c","👩đŸŊ‍đŸ”Ŧ":"1f469-1f3fd-200d-1f52c","👩🏾‍đŸ”Ŧ":"1f469-1f3fe-200d-1f52c","👩đŸŋ‍đŸ”Ŧ":"1f469-1f3ff-200d-1f52c","🧑đŸģ‍đŸ’ģ":"1f9d1-1f3fb-200d-1f4bb","🧑đŸŧ‍đŸ’ģ":"1f9d1-1f3fc-200d-1f4bb","🧑đŸŊ‍đŸ’ģ":"1f9d1-1f3fd-200d-1f4bb","🧑🏾‍đŸ’ģ":"1f9d1-1f3fe-200d-1f4bb","🧑đŸŋ‍đŸ’ģ":"1f9d1-1f3ff-200d-1f4bb","👨đŸģ‍đŸ’ģ":"1f468-1f3fb-200d-1f4bb","👨đŸŧ‍đŸ’ģ":"1f468-1f3fc-200d-1f4bb","👨đŸŊ‍đŸ’ģ":"1f468-1f3fd-200d-1f4bb","👨🏾‍đŸ’ģ":"1f468-1f3fe-200d-1f4bb","👨đŸŋ‍đŸ’ģ":"1f468-1f3ff-200d-1f4bb","👩đŸģ‍đŸ’ģ":"1f469-1f3fb-200d-1f4bb","👩đŸŧ‍đŸ’ģ":"1f469-1f3fc-200d-1f4bb","👩đŸŊ‍đŸ’ģ":"1f469-1f3fd-200d-1f4bb","👩🏾‍đŸ’ģ":"1f469-1f3fe-200d-1f4bb","👩đŸŋ‍đŸ’ģ":"1f469-1f3ff-200d-1f4bb","🧑đŸģ‍🎤":"1f9d1-1f3fb-200d-1f3a4","🧑đŸŧ‍🎤":"1f9d1-1f3fc-200d-1f3a4","🧑đŸŊ‍🎤":"1f9d1-1f3fd-200d-1f3a4","🧑🏾‍🎤":"1f9d1-1f3fe-200d-1f3a4","🧑đŸŋ‍🎤":"1f9d1-1f3ff-200d-1f3a4","👨đŸģ‍🎤":"1f468-1f3fb-200d-1f3a4","👨đŸŧ‍🎤":"1f468-1f3fc-200d-1f3a4","👨đŸŊ‍🎤":"1f468-1f3fd-200d-1f3a4","👨🏾‍🎤":"1f468-1f3fe-200d-1f3a4","👨đŸŋ‍🎤":"1f468-1f3ff-200d-1f3a4","👩đŸģ‍🎤":"1f469-1f3fb-200d-1f3a4","👩đŸŧ‍🎤":"1f469-1f3fc-200d-1f3a4","👩đŸŊ‍🎤":"1f469-1f3fd-200d-1f3a4","👩🏾‍🎤":"1f469-1f3fe-200d-1f3a4","👩đŸŋ‍🎤":"1f469-1f3ff-200d-1f3a4","🧑đŸģ‍🎨":"1f9d1-1f3fb-200d-1f3a8","🧑đŸŧ‍🎨":"1f9d1-1f3fc-200d-1f3a8","🧑đŸŊ‍🎨":"1f9d1-1f3fd-200d-1f3a8","🧑🏾‍🎨":"1f9d1-1f3fe-200d-1f3a8","🧑đŸŋ‍🎨":"1f9d1-1f3ff-200d-1f3a8","👨đŸģ‍🎨":"1f468-1f3fb-200d-1f3a8","👨đŸŧ‍🎨":"1f468-1f3fc-200d-1f3a8","👨đŸŊ‍🎨":"1f468-1f3fd-200d-1f3a8","👨🏾‍🎨":"1f468-1f3fe-200d-1f3a8","👨đŸŋ‍🎨":"1f468-1f3ff-200d-1f3a8","👩đŸģ‍🎨":"1f469-1f3fb-200d-1f3a8","👩đŸŧ‍🎨":"1f469-1f3fc-200d-1f3a8","👩đŸŊ‍🎨":"1f469-1f3fd-200d-1f3a8","👩🏾‍🎨":"1f469-1f3fe-200d-1f3a8","👩đŸŋ‍🎨":"1f469-1f3ff-200d-1f3a8","🧑‍✈ī¸":"1f9d1-200d-2708-fe0f","🧑đŸģ‍✈":"1f9d1-1f3fb-200d-2708-fe0f","🧑đŸŧ‍✈":"1f9d1-1f3fc-200d-2708-fe0f","🧑đŸŊ‍✈":"1f9d1-1f3fd-200d-2708-fe0f","🧑🏾‍✈":"1f9d1-1f3fe-200d-2708-fe0f","🧑đŸŋ‍✈":"1f9d1-1f3ff-200d-2708-fe0f","👨‍✈ī¸":"1f468-200d-2708-fe0f","👨đŸģ‍✈":"1f468-1f3fb-200d-2708-fe0f","👨đŸŧ‍✈":"1f468-1f3fc-200d-2708-fe0f","👨đŸŊ‍✈":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈":"1f468-1f3fe-200d-2708-fe0f","👨đŸŋ‍✈":"1f468-1f3ff-200d-2708-fe0f","👩‍✈ī¸":"1f469-200d-2708-fe0f","👩đŸģ‍✈":"1f469-1f3fb-200d-2708-fe0f","👩đŸŧ‍✈":"1f469-1f3fc-200d-2708-fe0f","👩đŸŊ‍✈":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈":"1f469-1f3fe-200d-2708-fe0f","👩đŸŋ‍✈":"1f469-1f3ff-200d-2708-fe0f","🧑đŸģ‍🚀":"1f9d1-1f3fb-200d-1f680","🧑đŸŧ‍🚀":"1f9d1-1f3fc-200d-1f680","🧑đŸŊ‍🚀":"1f9d1-1f3fd-200d-1f680","🧑🏾‍🚀":"1f9d1-1f3fe-200d-1f680","🧑đŸŋ‍🚀":"1f9d1-1f3ff-200d-1f680","👨đŸģ‍🚀":"1f468-1f3fb-200d-1f680","👨đŸŧ‍🚀":"1f468-1f3fc-200d-1f680","👨đŸŊ‍🚀":"1f468-1f3fd-200d-1f680","👨🏾‍🚀":"1f468-1f3fe-200d-1f680","👨đŸŋ‍🚀":"1f468-1f3ff-200d-1f680","👩đŸģ‍🚀":"1f469-1f3fb-200d-1f680","👩đŸŧ‍🚀":"1f469-1f3fc-200d-1f680","👩đŸŊ‍🚀":"1f469-1f3fd-200d-1f680","👩🏾‍🚀":"1f469-1f3fe-200d-1f680","👩đŸŋ‍🚀":"1f469-1f3ff-200d-1f680","🧑đŸģ‍🚒":"1f9d1-1f3fb-200d-1f692","🧑đŸŧ‍🚒":"1f9d1-1f3fc-200d-1f692","🧑đŸŊ‍🚒":"1f9d1-1f3fd-200d-1f692","🧑🏾‍🚒":"1f9d1-1f3fe-200d-1f692","🧑đŸŋ‍🚒":"1f9d1-1f3ff-200d-1f692","👨đŸģ‍🚒":"1f468-1f3fb-200d-1f692","👨đŸŧ‍🚒":"1f468-1f3fc-200d-1f692","👨đŸŊ‍🚒":"1f468-1f3fd-200d-1f692","👨🏾‍🚒":"1f468-1f3fe-200d-1f692","👨đŸŋ‍🚒":"1f468-1f3ff-200d-1f692","👩đŸģ‍🚒":"1f469-1f3fb-200d-1f692","👩đŸŧ‍🚒":"1f469-1f3fc-200d-1f692","👩đŸŊ‍🚒":"1f469-1f3fd-200d-1f692","👩🏾‍🚒":"1f469-1f3fe-200d-1f692","👩đŸŋ‍🚒":"1f469-1f3ff-200d-1f692","👮‍♂ī¸":"1f46e-200d-2642-fe0f","👮đŸģ‍♂":"1f46e-1f3fb-200d-2642-fe0f","👮đŸŧ‍♂":"1f46e-1f3fc-200d-2642-fe0f","👮đŸŊ‍♂":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂":"1f46e-1f3fe-200d-2642-fe0f","👮đŸŋ‍♂":"1f46e-1f3ff-200d-2642-fe0f","👮‍♀ī¸":"1f46e-200d-2640-fe0f","👮đŸģ‍♀":"1f46e-1f3fb-200d-2640-fe0f","👮đŸŧ‍♀":"1f46e-1f3fc-200d-2640-fe0f","👮đŸŊ‍♀":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀":"1f46e-1f3fe-200d-2640-fe0f","👮đŸŋ‍♀":"1f46e-1f3ff-200d-2640-fe0f","đŸ•ĩ‍♂ī¸":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩī¸â€â™‚":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩđŸģ‍♂":"1f575-1f3fb-200d-2642-fe0f","đŸ•ĩđŸŧ‍♂":"1f575-1f3fc-200d-2642-fe0f","đŸ•ĩđŸŊ‍♂":"1f575-1f3fd-200d-2642-fe0f","đŸ•ĩ🏾‍♂":"1f575-1f3fe-200d-2642-fe0f","đŸ•ĩđŸŋ‍♂":"1f575-1f3ff-200d-2642-fe0f","đŸ•ĩ‍♀ī¸":"1f575-fe0f-200d-2640-fe0f","đŸ•ĩī¸â€â™€":"1f575-fe0f-200d-2640-fe0f","đŸ•ĩđŸģ‍♀":"1f575-1f3fb-200d-2640-fe0f","đŸ•ĩđŸŧ‍♀":"1f575-1f3fc-200d-2640-fe0f","đŸ•ĩđŸŊ‍♀":"1f575-1f3fd-200d-2640-fe0f","đŸ•ĩ🏾‍♀":"1f575-1f3fe-200d-2640-fe0f","đŸ•ĩđŸŋ‍♀":"1f575-1f3ff-200d-2640-fe0f","💂‍♂ī¸":"1f482-200d-2642-fe0f","💂đŸģ‍♂":"1f482-1f3fb-200d-2642-fe0f","💂đŸŧ‍♂":"1f482-1f3fc-200d-2642-fe0f","💂đŸŊ‍♂":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂":"1f482-1f3fe-200d-2642-fe0f","💂đŸŋ‍♂":"1f482-1f3ff-200d-2642-fe0f","💂‍♀ī¸":"1f482-200d-2640-fe0f","💂đŸģ‍♀":"1f482-1f3fb-200d-2640-fe0f","💂đŸŧ‍♀":"1f482-1f3fc-200d-2640-fe0f","💂đŸŊ‍♀":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀":"1f482-1f3fe-200d-2640-fe0f","💂đŸŋ‍♀":"1f482-1f3ff-200d-2640-fe0f","👷‍♂ī¸":"1f477-200d-2642-fe0f","👷đŸģ‍♂":"1f477-1f3fb-200d-2642-fe0f","👷đŸŧ‍♂":"1f477-1f3fc-200d-2642-fe0f","👷đŸŊ‍♂":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂":"1f477-1f3fe-200d-2642-fe0f","👷đŸŋ‍♂":"1f477-1f3ff-200d-2642-fe0f","👷‍♀ī¸":"1f477-200d-2640-fe0f","👷đŸģ‍♀":"1f477-1f3fb-200d-2640-fe0f","👷đŸŧ‍♀":"1f477-1f3fc-200d-2640-fe0f","👷đŸŊ‍♀":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀":"1f477-1f3fe-200d-2640-fe0f","👷đŸŋ‍♀":"1f477-1f3ff-200d-2640-fe0f","đŸ‘ŗ‍♂ī¸":"1f473-200d-2642-fe0f","đŸ‘ŗđŸģ‍♂":"1f473-1f3fb-200d-2642-fe0f","đŸ‘ŗđŸŧ‍♂":"1f473-1f3fc-200d-2642-fe0f","đŸ‘ŗđŸŊ‍♂":"1f473-1f3fd-200d-2642-fe0f","đŸ‘ŗ🏾‍♂":"1f473-1f3fe-200d-2642-fe0f","đŸ‘ŗđŸŋ‍♂":"1f473-1f3ff-200d-2642-fe0f","đŸ‘ŗ‍♀ī¸":"1f473-200d-2640-fe0f","đŸ‘ŗđŸģ‍♀":"1f473-1f3fb-200d-2640-fe0f","đŸ‘ŗđŸŧ‍♀":"1f473-1f3fc-200d-2640-fe0f","đŸ‘ŗđŸŊ‍♀":"1f473-1f3fd-200d-2640-fe0f","đŸ‘ŗ🏾‍♀":"1f473-1f3fe-200d-2640-fe0f","đŸ‘ŗđŸŋ‍♀":"1f473-1f3ff-200d-2640-fe0f","đŸ¤ĩ‍♂ī¸":"1f935-200d-2642-fe0f","đŸ¤ĩđŸģ‍♂":"1f935-1f3fb-200d-2642-fe0f","đŸ¤ĩđŸŧ‍♂":"1f935-1f3fc-200d-2642-fe0f","đŸ¤ĩđŸŊ‍♂":"1f935-1f3fd-200d-2642-fe0f","đŸ¤ĩ🏾‍♂":"1f935-1f3fe-200d-2642-fe0f","đŸ¤ĩđŸŋ‍♂":"1f935-1f3ff-200d-2642-fe0f","đŸ¤ĩ‍♀ī¸":"1f935-200d-2640-fe0f","đŸ¤ĩđŸģ‍♀":"1f935-1f3fb-200d-2640-fe0f","đŸ¤ĩđŸŧ‍♀":"1f935-1f3fc-200d-2640-fe0f","đŸ¤ĩđŸŊ‍♀":"1f935-1f3fd-200d-2640-fe0f","đŸ¤ĩ🏾‍♀":"1f935-1f3fe-200d-2640-fe0f","đŸ¤ĩđŸŋ‍♀":"1f935-1f3ff-200d-2640-fe0f","👰‍♂ī¸":"1f470-200d-2642-fe0f","👰đŸģ‍♂":"1f470-1f3fb-200d-2642-fe0f","👰đŸŧ‍♂":"1f470-1f3fc-200d-2642-fe0f","👰đŸŊ‍♂":"1f470-1f3fd-200d-2642-fe0f","👰🏾‍♂":"1f470-1f3fe-200d-2642-fe0f","👰đŸŋ‍♂":"1f470-1f3ff-200d-2642-fe0f","👰‍♀ī¸":"1f470-200d-2640-fe0f","👰đŸģ‍♀":"1f470-1f3fb-200d-2640-fe0f","👰đŸŧ‍♀":"1f470-1f3fc-200d-2640-fe0f","👰đŸŊ‍♀":"1f470-1f3fd-200d-2640-fe0f","👰🏾‍♀":"1f470-1f3fe-200d-2640-fe0f","👰đŸŋ‍♀":"1f470-1f3ff-200d-2640-fe0f","👩đŸģ‍đŸŧ":"1f469-1f3fb-200d-1f37c","👩đŸŧ‍đŸŧ":"1f469-1f3fc-200d-1f37c","👩đŸŊ‍đŸŧ":"1f469-1f3fd-200d-1f37c","👩🏾‍đŸŧ":"1f469-1f3fe-200d-1f37c","👩đŸŋ‍đŸŧ":"1f469-1f3ff-200d-1f37c","👨đŸģ‍đŸŧ":"1f468-1f3fb-200d-1f37c","👨đŸŧ‍đŸŧ":"1f468-1f3fc-200d-1f37c","👨đŸŊ‍đŸŧ":"1f468-1f3fd-200d-1f37c","👨🏾‍đŸŧ":"1f468-1f3fe-200d-1f37c","👨đŸŋ‍đŸŧ":"1f468-1f3ff-200d-1f37c","🧑đŸģ‍đŸŧ":"1f9d1-1f3fb-200d-1f37c","🧑đŸŧ‍đŸŧ":"1f9d1-1f3fc-200d-1f37c","🧑đŸŊ‍đŸŧ":"1f9d1-1f3fd-200d-1f37c","🧑🏾‍đŸŧ":"1f9d1-1f3fe-200d-1f37c","🧑đŸŋ‍đŸŧ":"1f9d1-1f3ff-200d-1f37c","🧑đŸģ‍🎄":"1f9d1-1f3fb-200d-1f384","🧑đŸŧ‍🎄":"1f9d1-1f3fc-200d-1f384","🧑đŸŊ‍🎄":"1f9d1-1f3fd-200d-1f384","🧑🏾‍🎄":"1f9d1-1f3fe-200d-1f384","🧑đŸŋ‍🎄":"1f9d1-1f3ff-200d-1f384","đŸĻ¸â€â™‚ī¸":"1f9b8-200d-2642-fe0f","đŸĻ¸đŸģ‍♂":"1f9b8-1f3fb-200d-2642-fe0f","đŸĻ¸đŸŧ‍♂":"1f9b8-1f3fc-200d-2642-fe0f","đŸĻ¸đŸŊ‍♂":"1f9b8-1f3fd-200d-2642-fe0f","đŸĻ¸đŸžâ€â™‚":"1f9b8-1f3fe-200d-2642-fe0f","đŸĻ¸đŸŋ‍♂":"1f9b8-1f3ff-200d-2642-fe0f","đŸĻ¸â€â™€ī¸":"1f9b8-200d-2640-fe0f","đŸĻ¸đŸģ‍♀":"1f9b8-1f3fb-200d-2640-fe0f","đŸĻ¸đŸŧ‍♀":"1f9b8-1f3fc-200d-2640-fe0f","đŸĻ¸đŸŊ‍♀":"1f9b8-1f3fd-200d-2640-fe0f","đŸĻ¸đŸžâ€â™€":"1f9b8-1f3fe-200d-2640-fe0f","đŸĻ¸đŸŋ‍♀":"1f9b8-1f3ff-200d-2640-fe0f","đŸĻšâ€â™‚ī¸":"1f9b9-200d-2642-fe0f","đŸĻšđŸģ‍♂":"1f9b9-1f3fb-200d-2642-fe0f","đŸĻšđŸŧ‍♂":"1f9b9-1f3fc-200d-2642-fe0f","đŸĻšđŸŊ‍♂":"1f9b9-1f3fd-200d-2642-fe0f","đŸĻšđŸžâ€â™‚":"1f9b9-1f3fe-200d-2642-fe0f","đŸĻšđŸŋ‍♂":"1f9b9-1f3ff-200d-2642-fe0f","đŸĻšâ€â™€ī¸":"1f9b9-200d-2640-fe0f","đŸĻšđŸģ‍♀":"1f9b9-1f3fb-200d-2640-fe0f","đŸĻšđŸŧ‍♀":"1f9b9-1f3fc-200d-2640-fe0f","đŸĻšđŸŊ‍♀":"1f9b9-1f3fd-200d-2640-fe0f","đŸĻšđŸžâ€â™€":"1f9b9-1f3fe-200d-2640-fe0f","đŸĻšđŸŋ‍♀":"1f9b9-1f3ff-200d-2640-fe0f","🧙‍♂ī¸":"1f9d9-200d-2642-fe0f","🧙đŸģ‍♂":"1f9d9-1f3fb-200d-2642-fe0f","🧙đŸŧ‍♂":"1f9d9-1f3fc-200d-2642-fe0f","🧙đŸŊ‍♂":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂":"1f9d9-1f3fe-200d-2642-fe0f","🧙đŸŋ‍♂":"1f9d9-1f3ff-200d-2642-fe0f","🧙‍♀ī¸":"1f9d9-200d-2640-fe0f","🧙đŸģ‍♀":"1f9d9-1f3fb-200d-2640-fe0f","🧙đŸŧ‍♀":"1f9d9-1f3fc-200d-2640-fe0f","🧙đŸŊ‍♀":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀":"1f9d9-1f3fe-200d-2640-fe0f","🧙đŸŋ‍♀":"1f9d9-1f3ff-200d-2640-fe0f","🧚‍♂ī¸":"1f9da-200d-2642-fe0f","🧚đŸģ‍♂":"1f9da-1f3fb-200d-2642-fe0f","🧚đŸŧ‍♂":"1f9da-1f3fc-200d-2642-fe0f","🧚đŸŊ‍♂":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂":"1f9da-1f3fe-200d-2642-fe0f","🧚đŸŋ‍♂":"1f9da-1f3ff-200d-2642-fe0f","🧚‍♀ī¸":"1f9da-200d-2640-fe0f","🧚đŸģ‍♀":"1f9da-1f3fb-200d-2640-fe0f","🧚đŸŧ‍♀":"1f9da-1f3fc-200d-2640-fe0f","🧚đŸŊ‍♀":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀":"1f9da-1f3fe-200d-2640-fe0f","🧚đŸŋ‍♀":"1f9da-1f3ff-200d-2640-fe0f","🧛‍♂ī¸":"1f9db-200d-2642-fe0f","🧛đŸģ‍♂":"1f9db-1f3fb-200d-2642-fe0f","🧛đŸŧ‍♂":"1f9db-1f3fc-200d-2642-fe0f","🧛đŸŊ‍♂":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂":"1f9db-1f3fe-200d-2642-fe0f","🧛đŸŋ‍♂":"1f9db-1f3ff-200d-2642-fe0f","🧛‍♀ī¸":"1f9db-200d-2640-fe0f","🧛đŸģ‍♀":"1f9db-1f3fb-200d-2640-fe0f","🧛đŸŧ‍♀":"1f9db-1f3fc-200d-2640-fe0f","🧛đŸŊ‍♀":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀":"1f9db-1f3fe-200d-2640-fe0f","🧛đŸŋ‍♀":"1f9db-1f3ff-200d-2640-fe0f","🧜‍♂ī¸":"1f9dc-200d-2642-fe0f","🧜đŸģ‍♂":"1f9dc-1f3fb-200d-2642-fe0f","🧜đŸŧ‍♂":"1f9dc-1f3fc-200d-2642-fe0f","🧜đŸŊ‍♂":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂":"1f9dc-1f3fe-200d-2642-fe0f","🧜đŸŋ‍♂":"1f9dc-1f3ff-200d-2642-fe0f","🧜‍♀ī¸":"1f9dc-200d-2640-fe0f","🧜đŸģ‍♀":"1f9dc-1f3fb-200d-2640-fe0f","🧜đŸŧ‍♀":"1f9dc-1f3fc-200d-2640-fe0f","🧜đŸŊ‍♀":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀":"1f9dc-1f3fe-200d-2640-fe0f","🧜đŸŋ‍♀":"1f9dc-1f3ff-200d-2640-fe0f","🧝‍♂ī¸":"1f9dd-200d-2642-fe0f","🧝đŸģ‍♂":"1f9dd-1f3fb-200d-2642-fe0f","🧝đŸŧ‍♂":"1f9dd-1f3fc-200d-2642-fe0f","🧝đŸŊ‍♂":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂":"1f9dd-1f3fe-200d-2642-fe0f","🧝đŸŋ‍♂":"1f9dd-1f3ff-200d-2642-fe0f","🧝‍♀ī¸":"1f9dd-200d-2640-fe0f","🧝đŸģ‍♀":"1f9dd-1f3fb-200d-2640-fe0f","🧝đŸŧ‍♀":"1f9dd-1f3fc-200d-2640-fe0f","🧝đŸŊ‍♀":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀":"1f9dd-1f3fe-200d-2640-fe0f","🧝đŸŋ‍♀":"1f9dd-1f3ff-200d-2640-fe0f","🧞‍♂ī¸":"1f9de-200d-2642-fe0f","🧞‍♀ī¸":"1f9de-200d-2640-fe0f","🧟‍♂ī¸":"1f9df-200d-2642-fe0f","🧟‍♀ī¸":"1f9df-200d-2640-fe0f","💆‍♂ī¸":"1f486-200d-2642-fe0f","💆đŸģ‍♂":"1f486-1f3fb-200d-2642-fe0f","💆đŸŧ‍♂":"1f486-1f3fc-200d-2642-fe0f","💆đŸŊ‍♂":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂":"1f486-1f3fe-200d-2642-fe0f","💆đŸŋ‍♂":"1f486-1f3ff-200d-2642-fe0f","💆‍♀ī¸":"1f486-200d-2640-fe0f","💆đŸģ‍♀":"1f486-1f3fb-200d-2640-fe0f","💆đŸŧ‍♀":"1f486-1f3fc-200d-2640-fe0f","💆đŸŊ‍♀":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀":"1f486-1f3fe-200d-2640-fe0f","💆đŸŋ‍♀":"1f486-1f3ff-200d-2640-fe0f","💇‍♂ī¸":"1f487-200d-2642-fe0f","💇đŸģ‍♂":"1f487-1f3fb-200d-2642-fe0f","💇đŸŧ‍♂":"1f487-1f3fc-200d-2642-fe0f","💇đŸŊ‍♂":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂":"1f487-1f3fe-200d-2642-fe0f","💇đŸŋ‍♂":"1f487-1f3ff-200d-2642-fe0f","💇‍♀ī¸":"1f487-200d-2640-fe0f","💇đŸģ‍♀":"1f487-1f3fb-200d-2640-fe0f","💇đŸŧ‍♀":"1f487-1f3fc-200d-2640-fe0f","💇đŸŊ‍♀":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀":"1f487-1f3fe-200d-2640-fe0f","💇đŸŋ‍♀":"1f487-1f3ff-200d-2640-fe0f","đŸšļ‍♂ī¸":"1f6b6-200d-2642-fe0f","đŸšļđŸģ‍♂":"1f6b6-1f3fb-200d-2642-fe0f","đŸšļđŸŧ‍♂":"1f6b6-1f3fc-200d-2642-fe0f","đŸšļđŸŊ‍♂":"1f6b6-1f3fd-200d-2642-fe0f","đŸšļ🏾‍♂":"1f6b6-1f3fe-200d-2642-fe0f","đŸšļđŸŋ‍♂":"1f6b6-1f3ff-200d-2642-fe0f","đŸšļ‍♀ī¸":"1f6b6-200d-2640-fe0f","đŸšļđŸģ‍♀":"1f6b6-1f3fb-200d-2640-fe0f","đŸšļđŸŧ‍♀":"1f6b6-1f3fc-200d-2640-fe0f","đŸšļđŸŊ‍♀":"1f6b6-1f3fd-200d-2640-fe0f","đŸšļ🏾‍♀":"1f6b6-1f3fe-200d-2640-fe0f","đŸšļđŸŋ‍♀":"1f6b6-1f3ff-200d-2640-fe0f","🧍‍♂ī¸":"1f9cd-200d-2642-fe0f","🧍đŸģ‍♂":"1f9cd-1f3fb-200d-2642-fe0f","🧍đŸŧ‍♂":"1f9cd-1f3fc-200d-2642-fe0f","🧍đŸŊ‍♂":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂":"1f9cd-1f3fe-200d-2642-fe0f","🧍đŸŋ‍♂":"1f9cd-1f3ff-200d-2642-fe0f","🧍‍♀ī¸":"1f9cd-200d-2640-fe0f","🧍đŸģ‍♀":"1f9cd-1f3fb-200d-2640-fe0f","🧍đŸŧ‍♀":"1f9cd-1f3fc-200d-2640-fe0f","🧍đŸŊ‍♀":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀":"1f9cd-1f3fe-200d-2640-fe0f","🧍đŸŋ‍♀":"1f9cd-1f3ff-200d-2640-fe0f","🧎‍♂ī¸":"1f9ce-200d-2642-fe0f","🧎đŸģ‍♂":"1f9ce-1f3fb-200d-2642-fe0f","🧎đŸŧ‍♂":"1f9ce-1f3fc-200d-2642-fe0f","🧎đŸŊ‍♂":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂":"1f9ce-1f3fe-200d-2642-fe0f","🧎đŸŋ‍♂":"1f9ce-1f3ff-200d-2642-fe0f","🧎‍♀ī¸":"1f9ce-200d-2640-fe0f","🧎đŸģ‍♀":"1f9ce-1f3fb-200d-2640-fe0f","🧎đŸŧ‍♀":"1f9ce-1f3fc-200d-2640-fe0f","🧎đŸŊ‍♀":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀":"1f9ce-1f3fe-200d-2640-fe0f","🧎đŸŋ‍♀":"1f9ce-1f3ff-200d-2640-fe0f","🧑đŸģ‍đŸĻ¯":"1f9d1-1f3fb-200d-1f9af","🧑đŸŧ‍đŸĻ¯":"1f9d1-1f3fc-200d-1f9af","🧑đŸŊ‍đŸĻ¯":"1f9d1-1f3fd-200d-1f9af","🧑🏾‍đŸĻ¯":"1f9d1-1f3fe-200d-1f9af","🧑đŸŋ‍đŸĻ¯":"1f9d1-1f3ff-200d-1f9af","👨đŸģ‍đŸĻ¯":"1f468-1f3fb-200d-1f9af","👨đŸŧ‍đŸĻ¯":"1f468-1f3fc-200d-1f9af","👨đŸŊ‍đŸĻ¯":"1f468-1f3fd-200d-1f9af","👨🏾‍đŸĻ¯":"1f468-1f3fe-200d-1f9af","👨đŸŋ‍đŸĻ¯":"1f468-1f3ff-200d-1f9af","👩đŸģ‍đŸĻ¯":"1f469-1f3fb-200d-1f9af","👩đŸŧ‍đŸĻ¯":"1f469-1f3fc-200d-1f9af","👩đŸŊ‍đŸĻ¯":"1f469-1f3fd-200d-1f9af","👩🏾‍đŸĻ¯":"1f469-1f3fe-200d-1f9af","👩đŸŋ‍đŸĻ¯":"1f469-1f3ff-200d-1f9af","🧑đŸģ‍đŸĻŧ":"1f9d1-1f3fb-200d-1f9bc","🧑đŸŧ‍đŸĻŧ":"1f9d1-1f3fc-200d-1f9bc","🧑đŸŊ‍đŸĻŧ":"1f9d1-1f3fd-200d-1f9bc","🧑🏾‍đŸĻŧ":"1f9d1-1f3fe-200d-1f9bc","🧑đŸŋ‍đŸĻŧ":"1f9d1-1f3ff-200d-1f9bc","👨đŸģ‍đŸĻŧ":"1f468-1f3fb-200d-1f9bc","👨đŸŧ‍đŸĻŧ":"1f468-1f3fc-200d-1f9bc","👨đŸŊ‍đŸĻŧ":"1f468-1f3fd-200d-1f9bc","👨🏾‍đŸĻŧ":"1f468-1f3fe-200d-1f9bc","👨đŸŋ‍đŸĻŧ":"1f468-1f3ff-200d-1f9bc","👩đŸģ‍đŸĻŧ":"1f469-1f3fb-200d-1f9bc","👩đŸŧ‍đŸĻŧ":"1f469-1f3fc-200d-1f9bc","👩đŸŊ‍đŸĻŧ":"1f469-1f3fd-200d-1f9bc","👩🏾‍đŸĻŧ":"1f469-1f3fe-200d-1f9bc","👩đŸŋ‍đŸĻŧ":"1f469-1f3ff-200d-1f9bc","🧑đŸģ‍đŸĻŊ":"1f9d1-1f3fb-200d-1f9bd","🧑đŸŧ‍đŸĻŊ":"1f9d1-1f3fc-200d-1f9bd","🧑đŸŊ‍đŸĻŊ":"1f9d1-1f3fd-200d-1f9bd","🧑🏾‍đŸĻŊ":"1f9d1-1f3fe-200d-1f9bd","🧑đŸŋ‍đŸĻŊ":"1f9d1-1f3ff-200d-1f9bd","👨đŸģ‍đŸĻŊ":"1f468-1f3fb-200d-1f9bd","👨đŸŧ‍đŸĻŊ":"1f468-1f3fc-200d-1f9bd","👨đŸŊ‍đŸĻŊ":"1f468-1f3fd-200d-1f9bd","👨🏾‍đŸĻŊ":"1f468-1f3fe-200d-1f9bd","👨đŸŋ‍đŸĻŊ":"1f468-1f3ff-200d-1f9bd","👩đŸģ‍đŸĻŊ":"1f469-1f3fb-200d-1f9bd","👩đŸŧ‍đŸĻŊ":"1f469-1f3fc-200d-1f9bd","👩đŸŊ‍đŸĻŊ":"1f469-1f3fd-200d-1f9bd","👩🏾‍đŸĻŊ":"1f469-1f3fe-200d-1f9bd","👩đŸŋ‍đŸĻŊ":"1f469-1f3ff-200d-1f9bd","🏃‍♂ī¸":"1f3c3-200d-2642-fe0f","🏃đŸģ‍♂":"1f3c3-1f3fb-200d-2642-fe0f","🏃đŸŧ‍♂":"1f3c3-1f3fc-200d-2642-fe0f","🏃đŸŊ‍♂":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂":"1f3c3-1f3fe-200d-2642-fe0f","🏃đŸŋ‍♂":"1f3c3-1f3ff-200d-2642-fe0f","🏃‍♀ī¸":"1f3c3-200d-2640-fe0f","🏃đŸģ‍♀":"1f3c3-1f3fb-200d-2640-fe0f","🏃đŸŧ‍♀":"1f3c3-1f3fc-200d-2640-fe0f","🏃đŸŊ‍♀":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀":"1f3c3-1f3fe-200d-2640-fe0f","🏃đŸŋ‍♀":"1f3c3-1f3ff-200d-2640-fe0f","đŸ‘¯â€â™‚ī¸":"1f46f-200d-2642-fe0f","đŸ‘¯â€â™€ī¸":"1f46f-200d-2640-fe0f","🧖‍♂ī¸":"1f9d6-200d-2642-fe0f","🧖đŸģ‍♂":"1f9d6-1f3fb-200d-2642-fe0f","🧖đŸŧ‍♂":"1f9d6-1f3fc-200d-2642-fe0f","🧖đŸŊ‍♂":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂":"1f9d6-1f3fe-200d-2642-fe0f","🧖đŸŋ‍♂":"1f9d6-1f3ff-200d-2642-fe0f","🧖‍♀ī¸":"1f9d6-200d-2640-fe0f","🧖đŸģ‍♀":"1f9d6-1f3fb-200d-2640-fe0f","🧖đŸŧ‍♀":"1f9d6-1f3fc-200d-2640-fe0f","🧖đŸŊ‍♀":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀":"1f9d6-1f3fe-200d-2640-fe0f","🧖đŸŋ‍♀":"1f9d6-1f3ff-200d-2640-fe0f","🧗‍♂ī¸":"1f9d7-200d-2642-fe0f","🧗đŸģ‍♂":"1f9d7-1f3fb-200d-2642-fe0f","🧗đŸŧ‍♂":"1f9d7-1f3fc-200d-2642-fe0f","🧗đŸŊ‍♂":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂":"1f9d7-1f3fe-200d-2642-fe0f","🧗đŸŋ‍♂":"1f9d7-1f3ff-200d-2642-fe0f","🧗‍♀ī¸":"1f9d7-200d-2640-fe0f","🧗đŸģ‍♀":"1f9d7-1f3fb-200d-2640-fe0f","🧗đŸŧ‍♀":"1f9d7-1f3fc-200d-2640-fe0f","🧗đŸŊ‍♀":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀":"1f9d7-1f3fe-200d-2640-fe0f","🧗đŸŋ‍♀":"1f9d7-1f3ff-200d-2640-fe0f","🏌‍♂ī¸":"1f3cc-fe0f-200d-2642-fe0f","🏌ī¸â€â™‚":"1f3cc-fe0f-200d-2642-fe0f","🏌đŸģ‍♂":"1f3cc-1f3fb-200d-2642-fe0f","🏌đŸŧ‍♂":"1f3cc-1f3fc-200d-2642-fe0f","🏌đŸŊ‍♂":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂":"1f3cc-1f3fe-200d-2642-fe0f","🏌đŸŋ‍♂":"1f3cc-1f3ff-200d-2642-fe0f","🏌‍♀ī¸":"1f3cc-fe0f-200d-2640-fe0f","🏌ī¸â€â™€":"1f3cc-fe0f-200d-2640-fe0f","🏌đŸģ‍♀":"1f3cc-1f3fb-200d-2640-fe0f","🏌đŸŧ‍♀":"1f3cc-1f3fc-200d-2640-fe0f","🏌đŸŊ‍♀":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀":"1f3cc-1f3fe-200d-2640-fe0f","🏌đŸŋ‍♀":"1f3cc-1f3ff-200d-2640-fe0f","🏄‍♂ī¸":"1f3c4-200d-2642-fe0f","🏄đŸģ‍♂":"1f3c4-1f3fb-200d-2642-fe0f","🏄đŸŧ‍♂":"1f3c4-1f3fc-200d-2642-fe0f","🏄đŸŊ‍♂":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂":"1f3c4-1f3fe-200d-2642-fe0f","🏄đŸŋ‍♂":"1f3c4-1f3ff-200d-2642-fe0f","🏄‍♀ī¸":"1f3c4-200d-2640-fe0f","🏄đŸģ‍♀":"1f3c4-1f3fb-200d-2640-fe0f","🏄đŸŧ‍♀":"1f3c4-1f3fc-200d-2640-fe0f","🏄đŸŊ‍♀":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀":"1f3c4-1f3fe-200d-2640-fe0f","🏄đŸŋ‍♀":"1f3c4-1f3ff-200d-2640-fe0f","đŸšŖ‍♂ī¸":"1f6a3-200d-2642-fe0f","đŸšŖđŸģ‍♂":"1f6a3-1f3fb-200d-2642-fe0f","đŸšŖđŸŧ‍♂":"1f6a3-1f3fc-200d-2642-fe0f","đŸšŖđŸŊ‍♂":"1f6a3-1f3fd-200d-2642-fe0f","đŸšŖ🏾‍♂":"1f6a3-1f3fe-200d-2642-fe0f","đŸšŖđŸŋ‍♂":"1f6a3-1f3ff-200d-2642-fe0f","đŸšŖ‍♀ī¸":"1f6a3-200d-2640-fe0f","đŸšŖđŸģ‍♀":"1f6a3-1f3fb-200d-2640-fe0f","đŸšŖđŸŧ‍♀":"1f6a3-1f3fc-200d-2640-fe0f","đŸšŖđŸŊ‍♀":"1f6a3-1f3fd-200d-2640-fe0f","đŸšŖ🏾‍♀":"1f6a3-1f3fe-200d-2640-fe0f","đŸšŖđŸŋ‍♀":"1f6a3-1f3ff-200d-2640-fe0f","🏊‍♂ī¸":"1f3ca-200d-2642-fe0f","🏊đŸģ‍♂":"1f3ca-1f3fb-200d-2642-fe0f","🏊đŸŧ‍♂":"1f3ca-1f3fc-200d-2642-fe0f","🏊đŸŊ‍♂":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂":"1f3ca-1f3fe-200d-2642-fe0f","🏊đŸŋ‍♂":"1f3ca-1f3ff-200d-2642-fe0f","🏊‍♀ī¸":"1f3ca-200d-2640-fe0f","🏊đŸģ‍♀":"1f3ca-1f3fb-200d-2640-fe0f","🏊đŸŧ‍♀":"1f3ca-1f3fc-200d-2640-fe0f","🏊đŸŊ‍♀":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀":"1f3ca-1f3fe-200d-2640-fe0f","🏊đŸŋ‍♀":"1f3ca-1f3ff-200d-2640-fe0f","⛹‍♂ī¸":"26f9-fe0f-200d-2642-fe0f","⛹ī¸â€â™‚":"26f9-fe0f-200d-2642-fe0f","⛹đŸģ‍♂":"26f9-1f3fb-200d-2642-fe0f","⛹đŸŧ‍♂":"26f9-1f3fc-200d-2642-fe0f","⛹đŸŊ‍♂":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂":"26f9-1f3fe-200d-2642-fe0f","⛹đŸŋ‍♂":"26f9-1f3ff-200d-2642-fe0f","⛹‍♀ī¸":"26f9-fe0f-200d-2640-fe0f","⛹ī¸â€â™€":"26f9-fe0f-200d-2640-fe0f","⛹đŸģ‍♀":"26f9-1f3fb-200d-2640-fe0f","⛹đŸŧ‍♀":"26f9-1f3fc-200d-2640-fe0f","⛹đŸŊ‍♀":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀":"26f9-1f3fe-200d-2640-fe0f","⛹đŸŋ‍♀":"26f9-1f3ff-200d-2640-fe0f","🏋‍♂ī¸":"1f3cb-fe0f-200d-2642-fe0f","🏋ī¸â€â™‚":"1f3cb-fe0f-200d-2642-fe0f","🏋đŸģ‍♂":"1f3cb-1f3fb-200d-2642-fe0f","🏋đŸŧ‍♂":"1f3cb-1f3fc-200d-2642-fe0f","🏋đŸŊ‍♂":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂":"1f3cb-1f3fe-200d-2642-fe0f","🏋đŸŋ‍♂":"1f3cb-1f3ff-200d-2642-fe0f","🏋‍♀ī¸":"1f3cb-fe0f-200d-2640-fe0f","🏋ī¸â€â™€":"1f3cb-fe0f-200d-2640-fe0f","🏋đŸģ‍♀":"1f3cb-1f3fb-200d-2640-fe0f","🏋đŸŧ‍♀":"1f3cb-1f3fc-200d-2640-fe0f","🏋đŸŊ‍♀":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀":"1f3cb-1f3fe-200d-2640-fe0f","🏋đŸŋ‍♀":"1f3cb-1f3ff-200d-2640-fe0f","🚴‍♂ī¸":"1f6b4-200d-2642-fe0f","🚴đŸģ‍♂":"1f6b4-1f3fb-200d-2642-fe0f","🚴đŸŧ‍♂":"1f6b4-1f3fc-200d-2642-fe0f","🚴đŸŊ‍♂":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂":"1f6b4-1f3fe-200d-2642-fe0f","🚴đŸŋ‍♂":"1f6b4-1f3ff-200d-2642-fe0f","🚴‍♀ī¸":"1f6b4-200d-2640-fe0f","🚴đŸģ‍♀":"1f6b4-1f3fb-200d-2640-fe0f","🚴đŸŧ‍♀":"1f6b4-1f3fc-200d-2640-fe0f","🚴đŸŊ‍♀":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀":"1f6b4-1f3fe-200d-2640-fe0f","🚴đŸŋ‍♀":"1f6b4-1f3ff-200d-2640-fe0f","đŸšĩ‍♂ī¸":"1f6b5-200d-2642-fe0f","đŸšĩđŸģ‍♂":"1f6b5-1f3fb-200d-2642-fe0f","đŸšĩđŸŧ‍♂":"1f6b5-1f3fc-200d-2642-fe0f","đŸšĩđŸŊ‍♂":"1f6b5-1f3fd-200d-2642-fe0f","đŸšĩ🏾‍♂":"1f6b5-1f3fe-200d-2642-fe0f","đŸšĩđŸŋ‍♂":"1f6b5-1f3ff-200d-2642-fe0f","đŸšĩ‍♀ī¸":"1f6b5-200d-2640-fe0f","đŸšĩđŸģ‍♀":"1f6b5-1f3fb-200d-2640-fe0f","đŸšĩđŸŧ‍♀":"1f6b5-1f3fc-200d-2640-fe0f","đŸšĩđŸŊ‍♀":"1f6b5-1f3fd-200d-2640-fe0f","đŸšĩ🏾‍♀":"1f6b5-1f3fe-200d-2640-fe0f","đŸšĩđŸŋ‍♀":"1f6b5-1f3ff-200d-2640-fe0f","🤸‍♂ī¸":"1f938-200d-2642-fe0f","🤸đŸģ‍♂":"1f938-1f3fb-200d-2642-fe0f","🤸đŸŧ‍♂":"1f938-1f3fc-200d-2642-fe0f","🤸đŸŊ‍♂":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂":"1f938-1f3fe-200d-2642-fe0f","🤸đŸŋ‍♂":"1f938-1f3ff-200d-2642-fe0f","🤸‍♀ī¸":"1f938-200d-2640-fe0f","🤸đŸģ‍♀":"1f938-1f3fb-200d-2640-fe0f","🤸đŸŧ‍♀":"1f938-1f3fc-200d-2640-fe0f","🤸đŸŊ‍♀":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀":"1f938-1f3fe-200d-2640-fe0f","🤸đŸŋ‍♀":"1f938-1f3ff-200d-2640-fe0f","đŸ¤ŧ‍♂ī¸":"1f93c-200d-2642-fe0f","đŸ¤ŧ‍♀ī¸":"1f93c-200d-2640-fe0f","đŸ¤Ŋ‍♂ī¸":"1f93d-200d-2642-fe0f","đŸ¤ŊđŸģ‍♂":"1f93d-1f3fb-200d-2642-fe0f","đŸ¤ŊđŸŧ‍♂":"1f93d-1f3fc-200d-2642-fe0f","đŸ¤ŊđŸŊ‍♂":"1f93d-1f3fd-200d-2642-fe0f","đŸ¤Ŋ🏾‍♂":"1f93d-1f3fe-200d-2642-fe0f","đŸ¤ŊđŸŋ‍♂":"1f93d-1f3ff-200d-2642-fe0f","đŸ¤Ŋ‍♀ī¸":"1f93d-200d-2640-fe0f","đŸ¤ŊđŸģ‍♀":"1f93d-1f3fb-200d-2640-fe0f","đŸ¤ŊđŸŧ‍♀":"1f93d-1f3fc-200d-2640-fe0f","đŸ¤ŊđŸŊ‍♀":"1f93d-1f3fd-200d-2640-fe0f","đŸ¤Ŋ🏾‍♀":"1f93d-1f3fe-200d-2640-fe0f","đŸ¤ŊđŸŋ‍♀":"1f93d-1f3ff-200d-2640-fe0f","🤾‍♂ī¸":"1f93e-200d-2642-fe0f","🤾đŸģ‍♂":"1f93e-1f3fb-200d-2642-fe0f","🤾đŸŧ‍♂":"1f93e-1f3fc-200d-2642-fe0f","🤾đŸŊ‍♂":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂":"1f93e-1f3fe-200d-2642-fe0f","🤾đŸŋ‍♂":"1f93e-1f3ff-200d-2642-fe0f","🤾‍♀ī¸":"1f93e-200d-2640-fe0f","🤾đŸģ‍♀":"1f93e-1f3fb-200d-2640-fe0f","🤾đŸŧ‍♀":"1f93e-1f3fc-200d-2640-fe0f","🤾đŸŊ‍♀":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀":"1f93e-1f3fe-200d-2640-fe0f","🤾đŸŋ‍♀":"1f93e-1f3ff-200d-2640-fe0f","🤹‍♂ī¸":"1f939-200d-2642-fe0f","🤹đŸģ‍♂":"1f939-1f3fb-200d-2642-fe0f","🤹đŸŧ‍♂":"1f939-1f3fc-200d-2642-fe0f","🤹đŸŊ‍♂":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂":"1f939-1f3fe-200d-2642-fe0f","🤹đŸŋ‍♂":"1f939-1f3ff-200d-2642-fe0f","🤹‍♀ī¸":"1f939-200d-2640-fe0f","🤹đŸģ‍♀":"1f939-1f3fb-200d-2640-fe0f","🤹đŸŧ‍♀":"1f939-1f3fc-200d-2640-fe0f","🤹đŸŊ‍♀":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀":"1f939-1f3fe-200d-2640-fe0f","🤹đŸŋ‍♀":"1f939-1f3ff-200d-2640-fe0f","🧘‍♂ī¸":"1f9d8-200d-2642-fe0f","🧘đŸģ‍♂":"1f9d8-1f3fb-200d-2642-fe0f","🧘đŸŧ‍♂":"1f9d8-1f3fc-200d-2642-fe0f","🧘đŸŊ‍♂":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂":"1f9d8-1f3fe-200d-2642-fe0f","🧘đŸŋ‍♂":"1f9d8-1f3ff-200d-2642-fe0f","🧘‍♀ī¸":"1f9d8-200d-2640-fe0f","🧘đŸģ‍♀":"1f9d8-1f3fb-200d-2640-fe0f","🧘đŸŧ‍♀":"1f9d8-1f3fc-200d-2640-fe0f","🧘đŸŊ‍♀":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀":"1f9d8-1f3fe-200d-2640-fe0f","🧘đŸŋ‍♀":"1f9d8-1f3ff-200d-2640-fe0f","đŸģ‍❄ī¸":"1f43b-200d-2744-fe0f","đŸŗī¸â€đŸŒˆ":"1f3f3-fe0f-200d-1f308","đŸŗ‍⚧ī¸":"1f3f3-fe0f-200d-26a7-fe0f","đŸŗī¸â€âš§":"1f3f3-fe0f-200d-26a7-fe0f","🏴‍☠ī¸":"1f3f4-200d-2620-fe0f","👁ī¸â€đŸ—¨ī¸":"1f441-200d-1f5e8","đŸĢąđŸģ‍đŸĢ˛đŸŧ":"1faf1-1f3fb-200d-1faf2-1f3fc","đŸĢąđŸģ‍đŸĢ˛đŸŊ":"1faf1-1f3fb-200d-1faf2-1f3fd","đŸĢąđŸģ‍đŸĢ˛đŸž":"1faf1-1f3fb-200d-1faf2-1f3fe","đŸĢąđŸģ‍đŸĢ˛đŸŋ":"1faf1-1f3fb-200d-1faf2-1f3ff","đŸĢąđŸŧ‍đŸĢ˛đŸģ":"1faf1-1f3fc-200d-1faf2-1f3fb","đŸĢąđŸŧ‍đŸĢ˛đŸŊ":"1faf1-1f3fc-200d-1faf2-1f3fd","đŸĢąđŸŧ‍đŸĢ˛đŸž":"1faf1-1f3fc-200d-1faf2-1f3fe","đŸĢąđŸŧ‍đŸĢ˛đŸŋ":"1faf1-1f3fc-200d-1faf2-1f3ff","đŸĢąđŸŊ‍đŸĢ˛đŸģ":"1faf1-1f3fd-200d-1faf2-1f3fb","đŸĢąđŸŊ‍đŸĢ˛đŸŧ":"1faf1-1f3fd-200d-1faf2-1f3fc","đŸĢąđŸŊ‍đŸĢ˛đŸž":"1faf1-1f3fd-200d-1faf2-1f3fe","đŸĢąđŸŊ‍đŸĢ˛đŸŋ":"1faf1-1f3fd-200d-1faf2-1f3ff","đŸĢąđŸžâ€đŸĢ˛đŸģ":"1faf1-1f3fe-200d-1faf2-1f3fb","đŸĢąđŸžâ€đŸĢ˛đŸŧ":"1faf1-1f3fe-200d-1faf2-1f3fc","đŸĢąđŸžâ€đŸĢ˛đŸŊ":"1faf1-1f3fe-200d-1faf2-1f3fd","đŸĢąđŸžâ€đŸĢ˛đŸŋ":"1faf1-1f3fe-200d-1faf2-1f3ff","đŸĢąđŸŋ‍đŸĢ˛đŸģ":"1faf1-1f3ff-200d-1faf2-1f3fb","đŸĢąđŸŋ‍đŸĢ˛đŸŧ":"1faf1-1f3ff-200d-1faf2-1f3fc","đŸĢąđŸŋ‍đŸĢ˛đŸŊ":"1faf1-1f3ff-200d-1faf2-1f3fd","đŸĢąđŸŋ‍đŸĢ˛đŸž":"1faf1-1f3ff-200d-1faf2-1f3fe","🧔đŸģ‍♂ī¸":"1f9d4-1f3fb-200d-2642-fe0f","🧔đŸŧ‍♂ī¸":"1f9d4-1f3fc-200d-2642-fe0f","🧔đŸŊ‍♂ī¸":"1f9d4-1f3fd-200d-2642-fe0f","🧔🏾‍♂ī¸":"1f9d4-1f3fe-200d-2642-fe0f","🧔đŸŋ‍♂ī¸":"1f9d4-1f3ff-200d-2642-fe0f","🧔đŸģ‍♀ī¸":"1f9d4-1f3fb-200d-2640-fe0f","🧔đŸŧ‍♀ī¸":"1f9d4-1f3fc-200d-2640-fe0f","🧔đŸŊ‍♀ī¸":"1f9d4-1f3fd-200d-2640-fe0f","🧔🏾‍♀ī¸":"1f9d4-1f3fe-200d-2640-fe0f","🧔đŸŋ‍♀ī¸":"1f9d4-1f3ff-200d-2640-fe0f","👱đŸģ‍♀ī¸":"1f471-1f3fb-200d-2640-fe0f","👱đŸŧ‍♀ī¸":"1f471-1f3fc-200d-2640-fe0f","👱đŸŊ‍♀ī¸":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀ī¸":"1f471-1f3fe-200d-2640-fe0f","👱đŸŋ‍♀ī¸":"1f471-1f3ff-200d-2640-fe0f","👱đŸģ‍♂ī¸":"1f471-1f3fb-200d-2642-fe0f","👱đŸŧ‍♂ī¸":"1f471-1f3fc-200d-2642-fe0f","👱đŸŊ‍♂ī¸":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂ī¸":"1f471-1f3fe-200d-2642-fe0f","👱đŸŋ‍♂ī¸":"1f471-1f3ff-200d-2642-fe0f","🙍đŸģ‍♂ī¸":"1f64d-1f3fb-200d-2642-fe0f","🙍đŸŧ‍♂ī¸":"1f64d-1f3fc-200d-2642-fe0f","🙍đŸŊ‍♂ī¸":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂ī¸":"1f64d-1f3fe-200d-2642-fe0f","🙍đŸŋ‍♂ī¸":"1f64d-1f3ff-200d-2642-fe0f","🙍đŸģ‍♀ī¸":"1f64d-1f3fb-200d-2640-fe0f","🙍đŸŧ‍♀ī¸":"1f64d-1f3fc-200d-2640-fe0f","🙍đŸŊ‍♀ī¸":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀ī¸":"1f64d-1f3fe-200d-2640-fe0f","🙍đŸŋ‍♀ī¸":"1f64d-1f3ff-200d-2640-fe0f","🙎đŸģ‍♂ī¸":"1f64e-1f3fb-200d-2642-fe0f","🙎đŸŧ‍♂ī¸":"1f64e-1f3fc-200d-2642-fe0f","🙎đŸŊ‍♂ī¸":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂ī¸":"1f64e-1f3fe-200d-2642-fe0f","🙎đŸŋ‍♂ī¸":"1f64e-1f3ff-200d-2642-fe0f","🙎đŸģ‍♀ī¸":"1f64e-1f3fb-200d-2640-fe0f","🙎đŸŧ‍♀ī¸":"1f64e-1f3fc-200d-2640-fe0f","🙎đŸŊ‍♀ī¸":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀ī¸":"1f64e-1f3fe-200d-2640-fe0f","🙎đŸŋ‍♀ī¸":"1f64e-1f3ff-200d-2640-fe0f","🙅đŸģ‍♂ī¸":"1f645-1f3fb-200d-2642-fe0f","🙅đŸŧ‍♂ī¸":"1f645-1f3fc-200d-2642-fe0f","🙅đŸŊ‍♂ī¸":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂ī¸":"1f645-1f3fe-200d-2642-fe0f","🙅đŸŋ‍♂ī¸":"1f645-1f3ff-200d-2642-fe0f","🙅đŸģ‍♀ī¸":"1f645-1f3fb-200d-2640-fe0f","🙅đŸŧ‍♀ī¸":"1f645-1f3fc-200d-2640-fe0f","🙅đŸŊ‍♀ī¸":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀ī¸":"1f645-1f3fe-200d-2640-fe0f","🙅đŸŋ‍♀ī¸":"1f645-1f3ff-200d-2640-fe0f","🙆đŸģ‍♂ī¸":"1f646-1f3fb-200d-2642-fe0f","🙆đŸŧ‍♂ī¸":"1f646-1f3fc-200d-2642-fe0f","🙆đŸŊ‍♂ī¸":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂ī¸":"1f646-1f3fe-200d-2642-fe0f","🙆đŸŋ‍♂ī¸":"1f646-1f3ff-200d-2642-fe0f","🙆đŸģ‍♀ī¸":"1f646-1f3fb-200d-2640-fe0f","🙆đŸŧ‍♀ī¸":"1f646-1f3fc-200d-2640-fe0f","🙆đŸŊ‍♀ī¸":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀ī¸":"1f646-1f3fe-200d-2640-fe0f","🙆đŸŋ‍♀ī¸":"1f646-1f3ff-200d-2640-fe0f","💁đŸģ‍♂ī¸":"1f481-1f3fb-200d-2642-fe0f","💁đŸŧ‍♂ī¸":"1f481-1f3fc-200d-2642-fe0f","💁đŸŊ‍♂ī¸":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂ī¸":"1f481-1f3fe-200d-2642-fe0f","💁đŸŋ‍♂ī¸":"1f481-1f3ff-200d-2642-fe0f","💁đŸģ‍♀ī¸":"1f481-1f3fb-200d-2640-fe0f","💁đŸŧ‍♀ī¸":"1f481-1f3fc-200d-2640-fe0f","💁đŸŊ‍♀ī¸":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀ī¸":"1f481-1f3fe-200d-2640-fe0f","💁đŸŋ‍♀ī¸":"1f481-1f3ff-200d-2640-fe0f","🙋đŸģ‍♂ī¸":"1f64b-1f3fb-200d-2642-fe0f","🙋đŸŧ‍♂ī¸":"1f64b-1f3fc-200d-2642-fe0f","🙋đŸŊ‍♂ī¸":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂ī¸":"1f64b-1f3fe-200d-2642-fe0f","🙋đŸŋ‍♂ī¸":"1f64b-1f3ff-200d-2642-fe0f","🙋đŸģ‍♀ī¸":"1f64b-1f3fb-200d-2640-fe0f","🙋đŸŧ‍♀ī¸":"1f64b-1f3fc-200d-2640-fe0f","🙋đŸŊ‍♀ī¸":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀ī¸":"1f64b-1f3fe-200d-2640-fe0f","🙋đŸŋ‍♀ī¸":"1f64b-1f3ff-200d-2640-fe0f","🧏đŸģ‍♂ī¸":"1f9cf-1f3fb-200d-2642-fe0f","🧏đŸŧ‍♂ī¸":"1f9cf-1f3fc-200d-2642-fe0f","🧏đŸŊ‍♂ī¸":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂ī¸":"1f9cf-1f3fe-200d-2642-fe0f","🧏đŸŋ‍♂ī¸":"1f9cf-1f3ff-200d-2642-fe0f","🧏đŸģ‍♀ī¸":"1f9cf-1f3fb-200d-2640-fe0f","🧏đŸŧ‍♀ī¸":"1f9cf-1f3fc-200d-2640-fe0f","🧏đŸŊ‍♀ī¸":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀ī¸":"1f9cf-1f3fe-200d-2640-fe0f","🧏đŸŋ‍♀ī¸":"1f9cf-1f3ff-200d-2640-fe0f","🙇đŸģ‍♂ī¸":"1f647-1f3fb-200d-2642-fe0f","🙇đŸŧ‍♂ī¸":"1f647-1f3fc-200d-2642-fe0f","🙇đŸŊ‍♂ī¸":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂ī¸":"1f647-1f3fe-200d-2642-fe0f","🙇đŸŋ‍♂ī¸":"1f647-1f3ff-200d-2642-fe0f","🙇đŸģ‍♀ī¸":"1f647-1f3fb-200d-2640-fe0f","🙇đŸŧ‍♀ī¸":"1f647-1f3fc-200d-2640-fe0f","🙇đŸŊ‍♀ī¸":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀ī¸":"1f647-1f3fe-200d-2640-fe0f","🙇đŸŋ‍♀ī¸":"1f647-1f3ff-200d-2640-fe0f","đŸ¤ĻđŸģ‍♂ī¸":"1f926-1f3fb-200d-2642-fe0f","đŸ¤ĻđŸŧ‍♂ī¸":"1f926-1f3fc-200d-2642-fe0f","đŸ¤ĻđŸŊ‍♂ī¸":"1f926-1f3fd-200d-2642-fe0f","đŸ¤Ļ🏾‍♂ī¸":"1f926-1f3fe-200d-2642-fe0f","đŸ¤ĻđŸŋ‍♂ī¸":"1f926-1f3ff-200d-2642-fe0f","đŸ¤ĻđŸģ‍♀ī¸":"1f926-1f3fb-200d-2640-fe0f","đŸ¤ĻđŸŧ‍♀ī¸":"1f926-1f3fc-200d-2640-fe0f","đŸ¤ĻđŸŊ‍♀ī¸":"1f926-1f3fd-200d-2640-fe0f","đŸ¤Ļ🏾‍♀ī¸":"1f926-1f3fe-200d-2640-fe0f","đŸ¤ĻđŸŋ‍♀ī¸":"1f926-1f3ff-200d-2640-fe0f","🤷đŸģ‍♂ī¸":"1f937-1f3fb-200d-2642-fe0f","🤷đŸŧ‍♂ī¸":"1f937-1f3fc-200d-2642-fe0f","🤷đŸŊ‍♂ī¸":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂ī¸":"1f937-1f3fe-200d-2642-fe0f","🤷đŸŋ‍♂ī¸":"1f937-1f3ff-200d-2642-fe0f","🤷đŸģ‍♀ī¸":"1f937-1f3fb-200d-2640-fe0f","🤷đŸŧ‍♀ī¸":"1f937-1f3fc-200d-2640-fe0f","🤷đŸŊ‍♀ī¸":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀ī¸":"1f937-1f3fe-200d-2640-fe0f","🤷đŸŋ‍♀ī¸":"1f937-1f3ff-200d-2640-fe0f","🧑đŸģ‍⚕ī¸":"1f9d1-1f3fb-200d-2695-fe0f","🧑đŸŧ‍⚕ī¸":"1f9d1-1f3fc-200d-2695-fe0f","🧑đŸŊ‍⚕ī¸":"1f9d1-1f3fd-200d-2695-fe0f","🧑🏾‍⚕ī¸":"1f9d1-1f3fe-200d-2695-fe0f","🧑đŸŋ‍⚕ī¸":"1f9d1-1f3ff-200d-2695-fe0f","👨đŸģ‍⚕ī¸":"1f468-1f3fb-200d-2695-fe0f","👨đŸŧ‍⚕ī¸":"1f468-1f3fc-200d-2695-fe0f","👨đŸŊ‍⚕ī¸":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕ī¸":"1f468-1f3fe-200d-2695-fe0f","👨đŸŋ‍⚕ī¸":"1f468-1f3ff-200d-2695-fe0f","👩đŸģ‍⚕ī¸":"1f469-1f3fb-200d-2695-fe0f","👩đŸŧ‍⚕ī¸":"1f469-1f3fc-200d-2695-fe0f","👩đŸŊ‍⚕ī¸":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕ī¸":"1f469-1f3fe-200d-2695-fe0f","👩đŸŋ‍⚕ī¸":"1f469-1f3ff-200d-2695-fe0f","🧑đŸģ‍⚖ī¸":"1f9d1-1f3fb-200d-2696-fe0f","🧑đŸŧ‍⚖ī¸":"1f9d1-1f3fc-200d-2696-fe0f","🧑đŸŊ‍⚖ī¸":"1f9d1-1f3fd-200d-2696-fe0f","🧑🏾‍⚖ī¸":"1f9d1-1f3fe-200d-2696-fe0f","🧑đŸŋ‍⚖ī¸":"1f9d1-1f3ff-200d-2696-fe0f","👨đŸģ‍⚖ī¸":"1f468-1f3fb-200d-2696-fe0f","👨đŸŧ‍⚖ī¸":"1f468-1f3fc-200d-2696-fe0f","👨đŸŊ‍⚖ī¸":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖ī¸":"1f468-1f3fe-200d-2696-fe0f","👨đŸŋ‍⚖ī¸":"1f468-1f3ff-200d-2696-fe0f","👩đŸģ‍⚖ī¸":"1f469-1f3fb-200d-2696-fe0f","👩đŸŧ‍⚖ī¸":"1f469-1f3fc-200d-2696-fe0f","👩đŸŊ‍⚖ī¸":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖ī¸":"1f469-1f3fe-200d-2696-fe0f","👩đŸŋ‍⚖ī¸":"1f469-1f3ff-200d-2696-fe0f","🧑đŸģ‍✈ī¸":"1f9d1-1f3fb-200d-2708-fe0f","🧑đŸŧ‍✈ī¸":"1f9d1-1f3fc-200d-2708-fe0f","🧑đŸŊ‍✈ī¸":"1f9d1-1f3fd-200d-2708-fe0f","🧑🏾‍✈ī¸":"1f9d1-1f3fe-200d-2708-fe0f","🧑đŸŋ‍✈ī¸":"1f9d1-1f3ff-200d-2708-fe0f","👨đŸģ‍✈ī¸":"1f468-1f3fb-200d-2708-fe0f","👨đŸŧ‍✈ī¸":"1f468-1f3fc-200d-2708-fe0f","👨đŸŊ‍✈ī¸":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈ī¸":"1f468-1f3fe-200d-2708-fe0f","👨đŸŋ‍✈ī¸":"1f468-1f3ff-200d-2708-fe0f","👩đŸģ‍✈ī¸":"1f469-1f3fb-200d-2708-fe0f","👩đŸŧ‍✈ī¸":"1f469-1f3fc-200d-2708-fe0f","👩đŸŊ‍✈ī¸":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈ī¸":"1f469-1f3fe-200d-2708-fe0f","👩đŸŋ‍✈ī¸":"1f469-1f3ff-200d-2708-fe0f","👮đŸģ‍♂ī¸":"1f46e-1f3fb-200d-2642-fe0f","👮đŸŧ‍♂ī¸":"1f46e-1f3fc-200d-2642-fe0f","👮đŸŊ‍♂ī¸":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂ī¸":"1f46e-1f3fe-200d-2642-fe0f","👮đŸŋ‍♂ī¸":"1f46e-1f3ff-200d-2642-fe0f","👮đŸģ‍♀ī¸":"1f46e-1f3fb-200d-2640-fe0f","👮đŸŧ‍♀ī¸":"1f46e-1f3fc-200d-2640-fe0f","👮đŸŊ‍♀ī¸":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀ī¸":"1f46e-1f3fe-200d-2640-fe0f","👮đŸŋ‍♀ī¸":"1f46e-1f3ff-200d-2640-fe0f","đŸ•ĩī¸â€â™‚ī¸":"1f575-fe0f-200d-2642-fe0f","đŸ•ĩđŸģ‍♂ī¸":"1f575-1f3fb-200d-2642-fe0f","đŸ•ĩđŸŧ‍♂ī¸":"1f575-1f3fc-200d-2642-fe0f","đŸ•ĩđŸŊ‍♂ī¸":"1f575-1f3fd-200d-2642-fe0f","đŸ•ĩ🏾‍♂ī¸":"1f575-1f3fe-200d-2642-fe0f","đŸ•ĩđŸŋ‍♂ī¸":"1f575-1f3ff-200d-2642-fe0f","đŸ•ĩī¸â€â™€ī¸":"1f575-fe0f-200d-2640-fe0f","đŸ•ĩđŸģ‍♀ī¸":"1f575-1f3fb-200d-2640-fe0f","đŸ•ĩđŸŧ‍♀ī¸":"1f575-1f3fc-200d-2640-fe0f","đŸ•ĩđŸŊ‍♀ī¸":"1f575-1f3fd-200d-2640-fe0f","đŸ•ĩ🏾‍♀ī¸":"1f575-1f3fe-200d-2640-fe0f","đŸ•ĩđŸŋ‍♀ī¸":"1f575-1f3ff-200d-2640-fe0f","💂đŸģ‍♂ī¸":"1f482-1f3fb-200d-2642-fe0f","💂đŸŧ‍♂ī¸":"1f482-1f3fc-200d-2642-fe0f","💂đŸŊ‍♂ī¸":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂ī¸":"1f482-1f3fe-200d-2642-fe0f","💂đŸŋ‍♂ī¸":"1f482-1f3ff-200d-2642-fe0f","💂đŸģ‍♀ī¸":"1f482-1f3fb-200d-2640-fe0f","💂đŸŧ‍♀ī¸":"1f482-1f3fc-200d-2640-fe0f","💂đŸŊ‍♀ī¸":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀ī¸":"1f482-1f3fe-200d-2640-fe0f","💂đŸŋ‍♀ī¸":"1f482-1f3ff-200d-2640-fe0f","👷đŸģ‍♂ī¸":"1f477-1f3fb-200d-2642-fe0f","👷đŸŧ‍♂ī¸":"1f477-1f3fc-200d-2642-fe0f","👷đŸŊ‍♂ī¸":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂ī¸":"1f477-1f3fe-200d-2642-fe0f","👷đŸŋ‍♂ī¸":"1f477-1f3ff-200d-2642-fe0f","👷đŸģ‍♀ī¸":"1f477-1f3fb-200d-2640-fe0f","👷đŸŧ‍♀ī¸":"1f477-1f3fc-200d-2640-fe0f","👷đŸŊ‍♀ī¸":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀ī¸":"1f477-1f3fe-200d-2640-fe0f","👷đŸŋ‍♀ī¸":"1f477-1f3ff-200d-2640-fe0f","đŸ‘ŗđŸģ‍♂ī¸":"1f473-1f3fb-200d-2642-fe0f","đŸ‘ŗđŸŧ‍♂ī¸":"1f473-1f3fc-200d-2642-fe0f","đŸ‘ŗđŸŊ‍♂ī¸":"1f473-1f3fd-200d-2642-fe0f","đŸ‘ŗ🏾‍♂ī¸":"1f473-1f3fe-200d-2642-fe0f","đŸ‘ŗđŸŋ‍♂ī¸":"1f473-1f3ff-200d-2642-fe0f","đŸ‘ŗđŸģ‍♀ī¸":"1f473-1f3fb-200d-2640-fe0f","đŸ‘ŗđŸŧ‍♀ī¸":"1f473-1f3fc-200d-2640-fe0f","đŸ‘ŗđŸŊ‍♀ī¸":"1f473-1f3fd-200d-2640-fe0f","đŸ‘ŗ🏾‍♀ī¸":"1f473-1f3fe-200d-2640-fe0f","đŸ‘ŗđŸŋ‍♀ī¸":"1f473-1f3ff-200d-2640-fe0f","đŸ¤ĩđŸģ‍♂ī¸":"1f935-1f3fb-200d-2642-fe0f","đŸ¤ĩđŸŧ‍♂ī¸":"1f935-1f3fc-200d-2642-fe0f","đŸ¤ĩđŸŊ‍♂ī¸":"1f935-1f3fd-200d-2642-fe0f","đŸ¤ĩ🏾‍♂ī¸":"1f935-1f3fe-200d-2642-fe0f","đŸ¤ĩđŸŋ‍♂ī¸":"1f935-1f3ff-200d-2642-fe0f","đŸ¤ĩđŸģ‍♀ī¸":"1f935-1f3fb-200d-2640-fe0f","đŸ¤ĩđŸŧ‍♀ī¸":"1f935-1f3fc-200d-2640-fe0f","đŸ¤ĩđŸŊ‍♀ī¸":"1f935-1f3fd-200d-2640-fe0f","đŸ¤ĩ🏾‍♀ī¸":"1f935-1f3fe-200d-2640-fe0f","đŸ¤ĩđŸŋ‍♀ī¸":"1f935-1f3ff-200d-2640-fe0f","👰đŸģ‍♂ī¸":"1f470-1f3fb-200d-2642-fe0f","👰đŸŧ‍♂ī¸":"1f470-1f3fc-200d-2642-fe0f","👰đŸŊ‍♂ī¸":"1f470-1f3fd-200d-2642-fe0f","👰🏾‍♂ī¸":"1f470-1f3fe-200d-2642-fe0f","👰đŸŋ‍♂ī¸":"1f470-1f3ff-200d-2642-fe0f","👰đŸģ‍♀ī¸":"1f470-1f3fb-200d-2640-fe0f","👰đŸŧ‍♀ī¸":"1f470-1f3fc-200d-2640-fe0f","👰đŸŊ‍♀ī¸":"1f470-1f3fd-200d-2640-fe0f","👰🏾‍♀ī¸":"1f470-1f3fe-200d-2640-fe0f","👰đŸŋ‍♀ī¸":"1f470-1f3ff-200d-2640-fe0f","đŸĻ¸đŸģ‍♂ī¸":"1f9b8-1f3fb-200d-2642-fe0f","đŸĻ¸đŸŧ‍♂ī¸":"1f9b8-1f3fc-200d-2642-fe0f","đŸĻ¸đŸŊ‍♂ī¸":"1f9b8-1f3fd-200d-2642-fe0f","đŸĻ¸đŸžâ€â™‚ī¸":"1f9b8-1f3fe-200d-2642-fe0f","đŸĻ¸đŸŋ‍♂ī¸":"1f9b8-1f3ff-200d-2642-fe0f","đŸĻ¸đŸģ‍♀ī¸":"1f9b8-1f3fb-200d-2640-fe0f","đŸĻ¸đŸŧ‍♀ī¸":"1f9b8-1f3fc-200d-2640-fe0f","đŸĻ¸đŸŊ‍♀ī¸":"1f9b8-1f3fd-200d-2640-fe0f","đŸĻ¸đŸžâ€â™€ī¸":"1f9b8-1f3fe-200d-2640-fe0f","đŸĻ¸đŸŋ‍♀ī¸":"1f9b8-1f3ff-200d-2640-fe0f","đŸĻšđŸģ‍♂ī¸":"1f9b9-1f3fb-200d-2642-fe0f","đŸĻšđŸŧ‍♂ī¸":"1f9b9-1f3fc-200d-2642-fe0f","đŸĻšđŸŊ‍♂ī¸":"1f9b9-1f3fd-200d-2642-fe0f","đŸĻšđŸžâ€â™‚ī¸":"1f9b9-1f3fe-200d-2642-fe0f","đŸĻšđŸŋ‍♂ī¸":"1f9b9-1f3ff-200d-2642-fe0f","đŸĻšđŸģ‍♀ī¸":"1f9b9-1f3fb-200d-2640-fe0f","đŸĻšđŸŧ‍♀ī¸":"1f9b9-1f3fc-200d-2640-fe0f","đŸĻšđŸŊ‍♀ī¸":"1f9b9-1f3fd-200d-2640-fe0f","đŸĻšđŸžâ€â™€ī¸":"1f9b9-1f3fe-200d-2640-fe0f","đŸĻšđŸŋ‍♀ī¸":"1f9b9-1f3ff-200d-2640-fe0f","🧙đŸģ‍♂ī¸":"1f9d9-1f3fb-200d-2642-fe0f","🧙đŸŧ‍♂ī¸":"1f9d9-1f3fc-200d-2642-fe0f","🧙đŸŊ‍♂ī¸":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂ī¸":"1f9d9-1f3fe-200d-2642-fe0f","🧙đŸŋ‍♂ī¸":"1f9d9-1f3ff-200d-2642-fe0f","🧙đŸģ‍♀ī¸":"1f9d9-1f3fb-200d-2640-fe0f","🧙đŸŧ‍♀ī¸":"1f9d9-1f3fc-200d-2640-fe0f","🧙đŸŊ‍♀ī¸":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀ī¸":"1f9d9-1f3fe-200d-2640-fe0f","🧙đŸŋ‍♀ī¸":"1f9d9-1f3ff-200d-2640-fe0f","🧚đŸģ‍♂ī¸":"1f9da-1f3fb-200d-2642-fe0f","🧚đŸŧ‍♂ī¸":"1f9da-1f3fc-200d-2642-fe0f","🧚đŸŊ‍♂ī¸":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂ī¸":"1f9da-1f3fe-200d-2642-fe0f","🧚đŸŋ‍♂ī¸":"1f9da-1f3ff-200d-2642-fe0f","🧚đŸģ‍♀ī¸":"1f9da-1f3fb-200d-2640-fe0f","🧚đŸŧ‍♀ī¸":"1f9da-1f3fc-200d-2640-fe0f","🧚đŸŊ‍♀ī¸":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀ī¸":"1f9da-1f3fe-200d-2640-fe0f","🧚đŸŋ‍♀ī¸":"1f9da-1f3ff-200d-2640-fe0f","🧛đŸģ‍♂ī¸":"1f9db-1f3fb-200d-2642-fe0f","🧛đŸŧ‍♂ī¸":"1f9db-1f3fc-200d-2642-fe0f","🧛đŸŊ‍♂ī¸":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂ī¸":"1f9db-1f3fe-200d-2642-fe0f","🧛đŸŋ‍♂ī¸":"1f9db-1f3ff-200d-2642-fe0f","🧛đŸģ‍♀ī¸":"1f9db-1f3fb-200d-2640-fe0f","🧛đŸŧ‍♀ī¸":"1f9db-1f3fc-200d-2640-fe0f","🧛đŸŊ‍♀ī¸":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀ī¸":"1f9db-1f3fe-200d-2640-fe0f","🧛đŸŋ‍♀ī¸":"1f9db-1f3ff-200d-2640-fe0f","🧜đŸģ‍♂ī¸":"1f9dc-1f3fb-200d-2642-fe0f","🧜đŸŧ‍♂ī¸":"1f9dc-1f3fc-200d-2642-fe0f","🧜đŸŊ‍♂ī¸":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂ī¸":"1f9dc-1f3fe-200d-2642-fe0f","🧜đŸŋ‍♂ī¸":"1f9dc-1f3ff-200d-2642-fe0f","🧜đŸģ‍♀ī¸":"1f9dc-1f3fb-200d-2640-fe0f","🧜đŸŧ‍♀ī¸":"1f9dc-1f3fc-200d-2640-fe0f","🧜đŸŊ‍♀ī¸":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀ī¸":"1f9dc-1f3fe-200d-2640-fe0f","🧜đŸŋ‍♀ī¸":"1f9dc-1f3ff-200d-2640-fe0f","🧝đŸģ‍♂ī¸":"1f9dd-1f3fb-200d-2642-fe0f","🧝đŸŧ‍♂ī¸":"1f9dd-1f3fc-200d-2642-fe0f","🧝đŸŊ‍♂ī¸":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂ī¸":"1f9dd-1f3fe-200d-2642-fe0f","🧝đŸŋ‍♂ī¸":"1f9dd-1f3ff-200d-2642-fe0f","🧝đŸģ‍♀ī¸":"1f9dd-1f3fb-200d-2640-fe0f","🧝đŸŧ‍♀ī¸":"1f9dd-1f3fc-200d-2640-fe0f","🧝đŸŊ‍♀ī¸":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀ī¸":"1f9dd-1f3fe-200d-2640-fe0f","🧝đŸŋ‍♀ī¸":"1f9dd-1f3ff-200d-2640-fe0f","💆đŸģ‍♂ī¸":"1f486-1f3fb-200d-2642-fe0f","💆đŸŧ‍♂ī¸":"1f486-1f3fc-200d-2642-fe0f","💆đŸŊ‍♂ī¸":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂ī¸":"1f486-1f3fe-200d-2642-fe0f","💆đŸŋ‍♂ī¸":"1f486-1f3ff-200d-2642-fe0f","💆đŸģ‍♀ī¸":"1f486-1f3fb-200d-2640-fe0f","💆đŸŧ‍♀ī¸":"1f486-1f3fc-200d-2640-fe0f","💆đŸŊ‍♀ī¸":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀ī¸":"1f486-1f3fe-200d-2640-fe0f","💆đŸŋ‍♀ī¸":"1f486-1f3ff-200d-2640-fe0f","💇đŸģ‍♂ī¸":"1f487-1f3fb-200d-2642-fe0f","💇đŸŧ‍♂ī¸":"1f487-1f3fc-200d-2642-fe0f","💇đŸŊ‍♂ī¸":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂ī¸":"1f487-1f3fe-200d-2642-fe0f","💇đŸŋ‍♂ī¸":"1f487-1f3ff-200d-2642-fe0f","💇đŸģ‍♀ī¸":"1f487-1f3fb-200d-2640-fe0f","💇đŸŧ‍♀ī¸":"1f487-1f3fc-200d-2640-fe0f","💇đŸŊ‍♀ī¸":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀ī¸":"1f487-1f3fe-200d-2640-fe0f","💇đŸŋ‍♀ī¸":"1f487-1f3ff-200d-2640-fe0f","đŸšļđŸģ‍♂ī¸":"1f6b6-1f3fb-200d-2642-fe0f","đŸšļđŸŧ‍♂ī¸":"1f6b6-1f3fc-200d-2642-fe0f","đŸšļđŸŊ‍♂ī¸":"1f6b6-1f3fd-200d-2642-fe0f","đŸšļ🏾‍♂ī¸":"1f6b6-1f3fe-200d-2642-fe0f","đŸšļđŸŋ‍♂ī¸":"1f6b6-1f3ff-200d-2642-fe0f","đŸšļđŸģ‍♀ī¸":"1f6b6-1f3fb-200d-2640-fe0f","đŸšļđŸŧ‍♀ī¸":"1f6b6-1f3fc-200d-2640-fe0f","đŸšļđŸŊ‍♀ī¸":"1f6b6-1f3fd-200d-2640-fe0f","đŸšļ🏾‍♀ī¸":"1f6b6-1f3fe-200d-2640-fe0f","đŸšļđŸŋ‍♀ī¸":"1f6b6-1f3ff-200d-2640-fe0f","🧍đŸģ‍♂ī¸":"1f9cd-1f3fb-200d-2642-fe0f","🧍đŸŧ‍♂ī¸":"1f9cd-1f3fc-200d-2642-fe0f","🧍đŸŊ‍♂ī¸":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂ī¸":"1f9cd-1f3fe-200d-2642-fe0f","🧍đŸŋ‍♂ī¸":"1f9cd-1f3ff-200d-2642-fe0f","🧍đŸģ‍♀ī¸":"1f9cd-1f3fb-200d-2640-fe0f","🧍đŸŧ‍♀ī¸":"1f9cd-1f3fc-200d-2640-fe0f","🧍đŸŊ‍♀ī¸":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀ī¸":"1f9cd-1f3fe-200d-2640-fe0f","🧍đŸŋ‍♀ī¸":"1f9cd-1f3ff-200d-2640-fe0f","🧎đŸģ‍♂ī¸":"1f9ce-1f3fb-200d-2642-fe0f","🧎đŸŧ‍♂ī¸":"1f9ce-1f3fc-200d-2642-fe0f","🧎đŸŊ‍♂ī¸":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂ī¸":"1f9ce-1f3fe-200d-2642-fe0f","🧎đŸŋ‍♂ī¸":"1f9ce-1f3ff-200d-2642-fe0f","🧎đŸģ‍♀ī¸":"1f9ce-1f3fb-200d-2640-fe0f","🧎đŸŧ‍♀ī¸":"1f9ce-1f3fc-200d-2640-fe0f","🧎đŸŊ‍♀ī¸":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀ī¸":"1f9ce-1f3fe-200d-2640-fe0f","🧎đŸŋ‍♀ī¸":"1f9ce-1f3ff-200d-2640-fe0f","🏃đŸģ‍♂ī¸":"1f3c3-1f3fb-200d-2642-fe0f","🏃đŸŧ‍♂ī¸":"1f3c3-1f3fc-200d-2642-fe0f","🏃đŸŊ‍♂ī¸":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂ī¸":"1f3c3-1f3fe-200d-2642-fe0f","🏃đŸŋ‍♂ī¸":"1f3c3-1f3ff-200d-2642-fe0f","🏃đŸģ‍♀ī¸":"1f3c3-1f3fb-200d-2640-fe0f","🏃đŸŧ‍♀ī¸":"1f3c3-1f3fc-200d-2640-fe0f","🏃đŸŊ‍♀ī¸":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀ī¸":"1f3c3-1f3fe-200d-2640-fe0f","🏃đŸŋ‍♀ī¸":"1f3c3-1f3ff-200d-2640-fe0f","🧖đŸģ‍♂ī¸":"1f9d6-1f3fb-200d-2642-fe0f","🧖đŸŧ‍♂ī¸":"1f9d6-1f3fc-200d-2642-fe0f","🧖đŸŊ‍♂ī¸":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂ī¸":"1f9d6-1f3fe-200d-2642-fe0f","🧖đŸŋ‍♂ī¸":"1f9d6-1f3ff-200d-2642-fe0f","🧖đŸģ‍♀ī¸":"1f9d6-1f3fb-200d-2640-fe0f","🧖đŸŧ‍♀ī¸":"1f9d6-1f3fc-200d-2640-fe0f","🧖đŸŊ‍♀ī¸":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀ī¸":"1f9d6-1f3fe-200d-2640-fe0f","🧖đŸŋ‍♀ī¸":"1f9d6-1f3ff-200d-2640-fe0f","🧗đŸģ‍♂ī¸":"1f9d7-1f3fb-200d-2642-fe0f","🧗đŸŧ‍♂ī¸":"1f9d7-1f3fc-200d-2642-fe0f","🧗đŸŊ‍♂ī¸":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂ī¸":"1f9d7-1f3fe-200d-2642-fe0f","🧗đŸŋ‍♂ī¸":"1f9d7-1f3ff-200d-2642-fe0f","🧗đŸģ‍♀ī¸":"1f9d7-1f3fb-200d-2640-fe0f","🧗đŸŧ‍♀ī¸":"1f9d7-1f3fc-200d-2640-fe0f","🧗đŸŊ‍♀ī¸":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀ī¸":"1f9d7-1f3fe-200d-2640-fe0f","🧗đŸŋ‍♀ī¸":"1f9d7-1f3ff-200d-2640-fe0f","🏌ī¸â€â™‚ī¸":"1f3cc-fe0f-200d-2642-fe0f","🏌đŸģ‍♂ī¸":"1f3cc-1f3fb-200d-2642-fe0f","🏌đŸŧ‍♂ī¸":"1f3cc-1f3fc-200d-2642-fe0f","🏌đŸŊ‍♂ī¸":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂ī¸":"1f3cc-1f3fe-200d-2642-fe0f","🏌đŸŋ‍♂ī¸":"1f3cc-1f3ff-200d-2642-fe0f","🏌ī¸â€â™€ī¸":"1f3cc-fe0f-200d-2640-fe0f","🏌đŸģ‍♀ī¸":"1f3cc-1f3fb-200d-2640-fe0f","🏌đŸŧ‍♀ī¸":"1f3cc-1f3fc-200d-2640-fe0f","🏌đŸŊ‍♀ī¸":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀ī¸":"1f3cc-1f3fe-200d-2640-fe0f","🏌đŸŋ‍♀ī¸":"1f3cc-1f3ff-200d-2640-fe0f","🏄đŸģ‍♂ī¸":"1f3c4-1f3fb-200d-2642-fe0f","🏄đŸŧ‍♂ī¸":"1f3c4-1f3fc-200d-2642-fe0f","🏄đŸŊ‍♂ī¸":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂ī¸":"1f3c4-1f3fe-200d-2642-fe0f","🏄đŸŋ‍♂ī¸":"1f3c4-1f3ff-200d-2642-fe0f","🏄đŸģ‍♀ī¸":"1f3c4-1f3fb-200d-2640-fe0f","🏄đŸŧ‍♀ī¸":"1f3c4-1f3fc-200d-2640-fe0f","🏄đŸŊ‍♀ī¸":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀ī¸":"1f3c4-1f3fe-200d-2640-fe0f","🏄đŸŋ‍♀ī¸":"1f3c4-1f3ff-200d-2640-fe0f","đŸšŖđŸģ‍♂ī¸":"1f6a3-1f3fb-200d-2642-fe0f","đŸšŖđŸŧ‍♂ī¸":"1f6a3-1f3fc-200d-2642-fe0f","đŸšŖđŸŊ‍♂ī¸":"1f6a3-1f3fd-200d-2642-fe0f","đŸšŖ🏾‍♂ī¸":"1f6a3-1f3fe-200d-2642-fe0f","đŸšŖđŸŋ‍♂ī¸":"1f6a3-1f3ff-200d-2642-fe0f","đŸšŖđŸģ‍♀ī¸":"1f6a3-1f3fb-200d-2640-fe0f","đŸšŖđŸŧ‍♀ī¸":"1f6a3-1f3fc-200d-2640-fe0f","đŸšŖđŸŊ‍♀ī¸":"1f6a3-1f3fd-200d-2640-fe0f","đŸšŖ🏾‍♀ī¸":"1f6a3-1f3fe-200d-2640-fe0f","đŸšŖđŸŋ‍♀ī¸":"1f6a3-1f3ff-200d-2640-fe0f","🏊đŸģ‍♂ī¸":"1f3ca-1f3fb-200d-2642-fe0f","🏊đŸŧ‍♂ī¸":"1f3ca-1f3fc-200d-2642-fe0f","🏊đŸŊ‍♂ī¸":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂ī¸":"1f3ca-1f3fe-200d-2642-fe0f","🏊đŸŋ‍♂ī¸":"1f3ca-1f3ff-200d-2642-fe0f","🏊đŸģ‍♀ī¸":"1f3ca-1f3fb-200d-2640-fe0f","🏊đŸŧ‍♀ī¸":"1f3ca-1f3fc-200d-2640-fe0f","🏊đŸŊ‍♀ī¸":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀ī¸":"1f3ca-1f3fe-200d-2640-fe0f","🏊đŸŋ‍♀ī¸":"1f3ca-1f3ff-200d-2640-fe0f","⛹ī¸â€â™‚ī¸":"26f9-fe0f-200d-2642-fe0f","⛹đŸģ‍♂ī¸":"26f9-1f3fb-200d-2642-fe0f","⛹đŸŧ‍♂ī¸":"26f9-1f3fc-200d-2642-fe0f","⛹đŸŊ‍♂ī¸":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂ī¸":"26f9-1f3fe-200d-2642-fe0f","⛹đŸŋ‍♂ī¸":"26f9-1f3ff-200d-2642-fe0f","⛹ī¸â€â™€ī¸":"26f9-fe0f-200d-2640-fe0f","⛹đŸģ‍♀ī¸":"26f9-1f3fb-200d-2640-fe0f","⛹đŸŧ‍♀ī¸":"26f9-1f3fc-200d-2640-fe0f","⛹đŸŊ‍♀ī¸":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀ī¸":"26f9-1f3fe-200d-2640-fe0f","⛹đŸŋ‍♀ī¸":"26f9-1f3ff-200d-2640-fe0f","🏋ī¸â€â™‚ī¸":"1f3cb-fe0f-200d-2642-fe0f","🏋đŸģ‍♂ī¸":"1f3cb-1f3fb-200d-2642-fe0f","🏋đŸŧ‍♂ī¸":"1f3cb-1f3fc-200d-2642-fe0f","🏋đŸŊ‍♂ī¸":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂ī¸":"1f3cb-1f3fe-200d-2642-fe0f","🏋đŸŋ‍♂ī¸":"1f3cb-1f3ff-200d-2642-fe0f","🏋ī¸â€â™€ī¸":"1f3cb-fe0f-200d-2640-fe0f","🏋đŸģ‍♀ī¸":"1f3cb-1f3fb-200d-2640-fe0f","🏋đŸŧ‍♀ī¸":"1f3cb-1f3fc-200d-2640-fe0f","🏋đŸŊ‍♀ī¸":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀ī¸":"1f3cb-1f3fe-200d-2640-fe0f","🏋đŸŋ‍♀ī¸":"1f3cb-1f3ff-200d-2640-fe0f","🚴đŸģ‍♂ī¸":"1f6b4-1f3fb-200d-2642-fe0f","🚴đŸŧ‍♂ī¸":"1f6b4-1f3fc-200d-2642-fe0f","🚴đŸŊ‍♂ī¸":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂ī¸":"1f6b4-1f3fe-200d-2642-fe0f","🚴đŸŋ‍♂ī¸":"1f6b4-1f3ff-200d-2642-fe0f","🚴đŸģ‍♀ī¸":"1f6b4-1f3fb-200d-2640-fe0f","🚴đŸŧ‍♀ī¸":"1f6b4-1f3fc-200d-2640-fe0f","🚴đŸŊ‍♀ī¸":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀ī¸":"1f6b4-1f3fe-200d-2640-fe0f","🚴đŸŋ‍♀ī¸":"1f6b4-1f3ff-200d-2640-fe0f","đŸšĩđŸģ‍♂ī¸":"1f6b5-1f3fb-200d-2642-fe0f","đŸšĩđŸŧ‍♂ī¸":"1f6b5-1f3fc-200d-2642-fe0f","đŸšĩđŸŊ‍♂ī¸":"1f6b5-1f3fd-200d-2642-fe0f","đŸšĩ🏾‍♂ī¸":"1f6b5-1f3fe-200d-2642-fe0f","đŸšĩđŸŋ‍♂ī¸":"1f6b5-1f3ff-200d-2642-fe0f","đŸšĩđŸģ‍♀ī¸":"1f6b5-1f3fb-200d-2640-fe0f","đŸšĩđŸŧ‍♀ī¸":"1f6b5-1f3fc-200d-2640-fe0f","đŸšĩđŸŊ‍♀ī¸":"1f6b5-1f3fd-200d-2640-fe0f","đŸšĩ🏾‍♀ī¸":"1f6b5-1f3fe-200d-2640-fe0f","đŸšĩđŸŋ‍♀ī¸":"1f6b5-1f3ff-200d-2640-fe0f","🤸đŸģ‍♂ī¸":"1f938-1f3fb-200d-2642-fe0f","🤸đŸŧ‍♂ī¸":"1f938-1f3fc-200d-2642-fe0f","🤸đŸŊ‍♂ī¸":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂ī¸":"1f938-1f3fe-200d-2642-fe0f","🤸đŸŋ‍♂ī¸":"1f938-1f3ff-200d-2642-fe0f","🤸đŸģ‍♀ī¸":"1f938-1f3fb-200d-2640-fe0f","🤸đŸŧ‍♀ī¸":"1f938-1f3fc-200d-2640-fe0f","🤸đŸŊ‍♀ī¸":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀ī¸":"1f938-1f3fe-200d-2640-fe0f","🤸đŸŋ‍♀ī¸":"1f938-1f3ff-200d-2640-fe0f","đŸ¤ŊđŸģ‍♂ī¸":"1f93d-1f3fb-200d-2642-fe0f","đŸ¤ŊđŸŧ‍♂ī¸":"1f93d-1f3fc-200d-2642-fe0f","đŸ¤ŊđŸŊ‍♂ī¸":"1f93d-1f3fd-200d-2642-fe0f","đŸ¤Ŋ🏾‍♂ī¸":"1f93d-1f3fe-200d-2642-fe0f","đŸ¤ŊđŸŋ‍♂ī¸":"1f93d-1f3ff-200d-2642-fe0f","đŸ¤ŊđŸģ‍♀ī¸":"1f93d-1f3fb-200d-2640-fe0f","đŸ¤ŊđŸŧ‍♀ī¸":"1f93d-1f3fc-200d-2640-fe0f","đŸ¤ŊđŸŊ‍♀ī¸":"1f93d-1f3fd-200d-2640-fe0f","đŸ¤Ŋ🏾‍♀ī¸":"1f93d-1f3fe-200d-2640-fe0f","đŸ¤ŊđŸŋ‍♀ī¸":"1f93d-1f3ff-200d-2640-fe0f","🤾đŸģ‍♂ī¸":"1f93e-1f3fb-200d-2642-fe0f","🤾đŸŧ‍♂ī¸":"1f93e-1f3fc-200d-2642-fe0f","🤾đŸŊ‍♂ī¸":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂ī¸":"1f93e-1f3fe-200d-2642-fe0f","🤾đŸŋ‍♂ī¸":"1f93e-1f3ff-200d-2642-fe0f","🤾đŸģ‍♀ī¸":"1f93e-1f3fb-200d-2640-fe0f","🤾đŸŧ‍♀ī¸":"1f93e-1f3fc-200d-2640-fe0f","🤾đŸŊ‍♀ī¸":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀ī¸":"1f93e-1f3fe-200d-2640-fe0f","🤾đŸŋ‍♀ī¸":"1f93e-1f3ff-200d-2640-fe0f","🤹đŸģ‍♂ī¸":"1f939-1f3fb-200d-2642-fe0f","🤹đŸŧ‍♂ī¸":"1f939-1f3fc-200d-2642-fe0f","🤹đŸŊ‍♂ī¸":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂ī¸":"1f939-1f3fe-200d-2642-fe0f","🤹đŸŋ‍♂ī¸":"1f939-1f3ff-200d-2642-fe0f","🤹đŸģ‍♀ī¸":"1f939-1f3fb-200d-2640-fe0f","🤹đŸŧ‍♀ī¸":"1f939-1f3fc-200d-2640-fe0f","🤹đŸŊ‍♀ī¸":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀ī¸":"1f939-1f3fe-200d-2640-fe0f","🤹đŸŋ‍♀ī¸":"1f939-1f3ff-200d-2640-fe0f","🧘đŸģ‍♂ī¸":"1f9d8-1f3fb-200d-2642-fe0f","🧘đŸŧ‍♂ī¸":"1f9d8-1f3fc-200d-2642-fe0f","🧘đŸŊ‍♂ī¸":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂ī¸":"1f9d8-1f3fe-200d-2642-fe0f","🧘đŸŋ‍♂ī¸":"1f9d8-1f3ff-200d-2642-fe0f","🧘đŸģ‍♀ī¸":"1f9d8-1f3fb-200d-2640-fe0f","🧘đŸŧ‍♀ī¸":"1f9d8-1f3fc-200d-2640-fe0f","🧘đŸŊ‍♀ī¸":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀ī¸":"1f9d8-1f3fe-200d-2640-fe0f","🧘đŸŋ‍♀ī¸":"1f9d8-1f3ff-200d-2640-fe0f","🧑‍🤝‍🧑":"1f9d1-200d-1f91d-200d-1f9d1","👩‍❤‍👨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤‍👨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤‍👩":"1f469-200d-2764-fe0f-200d-1f469","👨‍👩‍đŸ‘Ļ":"1f468-200d-1f469-200d-1f466","👨‍👩‍👧":"1f468-200d-1f469-200d-1f467","👨‍👨‍đŸ‘Ļ":"1f468-200d-1f468-200d-1f466","👨‍👨‍👧":"1f468-200d-1f468-200d-1f467","👩‍👩‍đŸ‘Ļ":"1f469-200d-1f469-200d-1f466","👩‍👩‍👧":"1f469-200d-1f469-200d-1f467","👨‍đŸ‘Ļ‍đŸ‘Ļ":"1f468-200d-1f466-200d-1f466","👨‍👧‍đŸ‘Ļ":"1f468-200d-1f467-200d-1f466","👨‍👧‍👧":"1f468-200d-1f467-200d-1f467","👩‍đŸ‘Ļ‍đŸ‘Ļ":"1f469-200d-1f466-200d-1f466","👩‍👧‍đŸ‘Ļ":"1f469-200d-1f467-200d-1f466","👩‍👧‍👧":"1f469-200d-1f467-200d-1f467","đŸŗī¸â€âš§ī¸":"1f3f3-fe0f-200d-26a7-fe0f","👩‍❤ī¸â€đŸ‘¨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤ī¸â€đŸ‘¨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤ī¸â€đŸ‘Š":"1f469-200d-2764-fe0f-200d-1f469","🧑đŸģ‍🤝‍🧑đŸģ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸģ‍🤝‍🧑đŸŧ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸģ‍🤝‍🧑đŸŊ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸģ‍🤝‍🧑🏾":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸģ‍🤝‍🧑đŸŋ":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff","🧑đŸŧ‍🤝‍🧑đŸģ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸŧ‍🤝‍🧑đŸŧ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸŧ‍🤝‍🧑đŸŊ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸŧ‍🤝‍🧑🏾":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸŧ‍🤝‍🧑đŸŋ":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff","🧑đŸŊ‍🤝‍🧑đŸģ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸŊ‍🤝‍🧑đŸŧ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸŊ‍🤝‍🧑đŸŊ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸŊ‍🤝‍🧑🏾":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸŊ‍🤝‍🧑đŸŋ":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff","🧑🏾‍🤝‍🧑đŸģ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb","🧑🏾‍🤝‍🧑đŸŧ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc","🧑🏾‍🤝‍🧑đŸŊ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd","🧑🏾‍🤝‍🧑🏾":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe","🧑🏾‍🤝‍🧑đŸŋ":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff","🧑đŸŋ‍🤝‍🧑đŸģ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb","🧑đŸŋ‍🤝‍🧑đŸŧ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc","🧑đŸŋ‍🤝‍🧑đŸŊ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd","🧑đŸŋ‍🤝‍🧑🏾":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe","🧑đŸŋ‍🤝‍🧑đŸŋ":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff","👩đŸģ‍🤝‍👩đŸŧ":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc","👩đŸģ‍🤝‍👩đŸŊ":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd","👩đŸģ‍🤝‍👩🏾":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe","👩đŸģ‍🤝‍👩đŸŋ":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff","👩đŸŧ‍🤝‍👩đŸģ":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb","👩đŸŧ‍🤝‍👩đŸŊ":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd","👩đŸŧ‍🤝‍👩🏾":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe","👩đŸŧ‍🤝‍👩đŸŋ":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff","👩đŸŊ‍🤝‍👩đŸģ":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb","👩đŸŊ‍🤝‍👩đŸŧ":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc","👩đŸŊ‍🤝‍👩🏾":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe","👩đŸŊ‍🤝‍👩đŸŋ":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff","👩🏾‍🤝‍👩đŸģ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb","👩🏾‍🤝‍👩đŸŧ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc","👩🏾‍🤝‍👩đŸŊ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd","👩🏾‍🤝‍👩đŸŋ":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff","👩đŸŋ‍🤝‍👩đŸģ":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb","👩đŸŋ‍🤝‍👩đŸŧ":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc","👩đŸŋ‍🤝‍👩đŸŊ":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd","👩đŸŋ‍🤝‍👩🏾":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe","👩đŸģ‍🤝‍👨đŸŧ":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc","👩đŸģ‍🤝‍👨đŸŊ":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd","👩đŸģ‍🤝‍👨🏾":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe","👩đŸģ‍🤝‍👨đŸŋ":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff","👩đŸŧ‍🤝‍👨đŸģ":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb","👩đŸŧ‍🤝‍👨đŸŊ":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd","👩đŸŧ‍🤝‍👨🏾":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe","👩đŸŧ‍🤝‍👨đŸŋ":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff","👩đŸŊ‍🤝‍👨đŸģ":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb","👩đŸŊ‍🤝‍👨đŸŧ":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc","👩đŸŊ‍🤝‍👨🏾":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe","👩đŸŊ‍🤝‍👨đŸŋ":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff","👩🏾‍🤝‍👨đŸģ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb","👩🏾‍🤝‍👨đŸŧ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc","👩🏾‍🤝‍👨đŸŊ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd","👩🏾‍🤝‍👨đŸŋ":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff","👩đŸŋ‍🤝‍👨đŸģ":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb","👩đŸŋ‍🤝‍👨đŸŧ":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc","👩đŸŋ‍🤝‍👨đŸŊ":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd","👩đŸŋ‍🤝‍👨🏾":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe","👨đŸģ‍🤝‍👨đŸŧ":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc","👨đŸģ‍🤝‍👨đŸŊ":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd","👨đŸģ‍🤝‍👨🏾":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe","👨đŸģ‍🤝‍👨đŸŋ":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff","👨đŸŧ‍🤝‍👨đŸģ":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb","👨đŸŧ‍🤝‍👨đŸŊ":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd","👨đŸŧ‍🤝‍👨🏾":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe","👨đŸŧ‍🤝‍👨đŸŋ":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff","👨đŸŊ‍🤝‍👨đŸģ":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb","👨đŸŊ‍🤝‍👨đŸŧ":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc","👨đŸŊ‍🤝‍👨🏾":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe","👨đŸŊ‍🤝‍👨đŸŋ":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff","👨🏾‍🤝‍👨đŸģ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb","👨🏾‍🤝‍👨đŸŧ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc","👨🏾‍🤝‍👨đŸŊ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd","👨🏾‍🤝‍👨đŸŋ":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff","👨đŸŋ‍🤝‍👨đŸģ":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb","👨đŸŋ‍🤝‍👨đŸŧ":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc","👨đŸŋ‍🤝‍👨đŸŊ":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd","👨đŸŋ‍🤝‍👨🏾":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe","👩‍❤‍💋‍👨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤‍💋‍👨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤‍💋‍👩":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","🧑đŸģ‍❤‍🧑đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸģ‍❤‍🧑đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸģ‍❤‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸģ‍❤‍🧑đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŧ‍❤‍🧑đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŧ‍❤‍🧑đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŧ‍❤‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŧ‍❤‍🧑đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŊ‍❤‍🧑đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŊ‍❤‍🧑đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŊ‍❤‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŊ‍❤‍🧑đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏾‍❤‍🧑đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏾‍❤‍🧑đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏾‍❤‍🧑đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏾‍❤‍🧑đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŋ‍❤‍🧑đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŋ‍❤‍🧑đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŋ‍❤‍🧑đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŋ‍❤‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe","👩đŸģ‍❤‍👨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸģ‍❤‍👨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸģ‍❤‍👨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸģ‍❤‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸģ‍❤‍👨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŧ‍❤‍👨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŧ‍❤‍👨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŧ‍❤‍👨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŧ‍❤‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŧ‍❤‍👨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŊ‍❤‍👨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŊ‍❤‍👨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŊ‍❤‍👨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŊ‍❤‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŊ‍❤‍👨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👩🏾‍❤‍👨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👩🏾‍❤‍👨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👩🏾‍❤‍👨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👩🏾‍❤‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👩🏾‍❤‍👨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŋ‍❤‍👨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŋ‍❤‍👨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŋ‍❤‍👨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŋ‍❤‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŋ‍❤‍👨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸģ‍❤‍👨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸģ‍❤‍👨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸģ‍❤‍👨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸģ‍❤‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸģ‍❤‍👨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŧ‍❤‍👨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŧ‍❤‍👨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŧ‍❤‍👨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŧ‍❤‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŧ‍❤‍👨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŊ‍❤‍👨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŊ‍❤‍👨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŊ‍❤‍👨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŊ‍❤‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŊ‍❤‍👨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👨🏾‍❤‍👨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👨🏾‍❤‍👨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👨🏾‍❤‍👨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👨🏾‍❤‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👨🏾‍❤‍👨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŋ‍❤‍👨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŋ‍❤‍👨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŋ‍❤‍👨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŋ‍❤‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŋ‍❤‍👨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸģ‍❤‍👩đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸģ‍❤‍👩đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸģ‍❤‍👩đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸģ‍❤‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸģ‍❤‍👩đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŧ‍❤‍👩đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŧ‍❤‍👩đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŧ‍❤‍👩đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŧ‍❤‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŧ‍❤‍👩đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŊ‍❤‍👩đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŊ‍❤‍👩đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŊ‍❤‍👩đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŊ‍❤‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŊ‍❤‍👩đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff","👩🏾‍❤‍👩đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb","👩🏾‍❤‍👩đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc","👩🏾‍❤‍👩đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd","👩🏾‍❤‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe","👩🏾‍❤‍👩đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŋ‍❤‍👩đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŋ‍❤‍👩đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŋ‍❤‍👩đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŋ‍❤‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŋ‍❤‍👩đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff","👨‍👩‍👧‍đŸ‘Ļ":"1f468-200d-1f469-200d-1f467-200d-1f466","👨‍👩‍đŸ‘Ļ‍đŸ‘Ļ":"1f468-200d-1f469-200d-1f466-200d-1f466","👨‍👩‍👧‍👧":"1f468-200d-1f469-200d-1f467-200d-1f467","👨‍👨‍👧‍đŸ‘Ļ":"1f468-200d-1f468-200d-1f467-200d-1f466","👨‍👨‍đŸ‘Ļ‍đŸ‘Ļ":"1f468-200d-1f468-200d-1f466-200d-1f466","👨‍👨‍👧‍👧":"1f468-200d-1f468-200d-1f467-200d-1f467","👩‍👩‍👧‍đŸ‘Ļ":"1f469-200d-1f469-200d-1f467-200d-1f466","👩‍👩‍đŸ‘Ļ‍đŸ‘Ļ":"1f469-200d-1f469-200d-1f466-200d-1f466","👩‍👩‍👧‍👧":"1f469-200d-1f469-200d-1f467-200d-1f467","🏴ķ §ķ ĸķ Ĩķ Žķ §ķ ŋ":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","🏴ķ §ķ ĸķ ŗķ Ŗķ ´ķ ŋ":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","🏴ķ §ķ ĸķ ˇķ Ŧķ ŗķ ŋ":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","👩‍❤ī¸â€đŸ’‹â€đŸ‘¨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤ī¸â€đŸ’‹â€đŸ‘¨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤ī¸â€đŸ’‹â€đŸ‘Š":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","🧑đŸģ‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸģ‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸģ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸģ‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŧ‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑đŸŊ‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏾‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏾‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏾‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏾‍❤ī¸â€đŸ§‘đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑đŸŋ‍❤ī¸â€đŸ§‘đŸž":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe","👩đŸģ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸģ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸģ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸģ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸģ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŧ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŊ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👩🏾‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👩🏾‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👩🏾‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👩🏾‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👩🏾‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👩đŸŋ‍❤ī¸â€đŸ‘¨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸģ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸģ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸģ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸģ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸģ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŧ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŊ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👨🏾‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👨🏾‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👨🏾‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👨🏾‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👨🏾‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸž":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👨đŸŋ‍❤ī¸â€đŸ‘¨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸģ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŧ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŊ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff","👩🏾‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb","👩🏾‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc","👩🏾‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd","👩🏾‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe","👩🏾‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe","👩đŸŋ‍❤ī¸â€đŸ‘ŠđŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff","🧑đŸģ‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸģ‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸģ‍❤‍💋‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸģ‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŧ‍❤‍💋‍🧑đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŧ‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŧ‍❤‍💋‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŧ‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŊ‍❤‍💋‍🧑đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŊ‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŊ‍❤‍💋‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŊ‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏾‍❤‍💋‍🧑đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏾‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏾‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏾‍❤‍💋‍🧑đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŋ‍❤‍💋‍🧑đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŋ‍❤‍💋‍🧑đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŋ‍❤‍💋‍🧑đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŋ‍❤‍💋‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","👩đŸģ‍❤‍💋‍👨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸģ‍❤‍💋‍👨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸģ‍❤‍💋‍👨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸģ‍❤‍💋‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸģ‍❤‍💋‍👨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŧ‍❤‍💋‍👨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŧ‍❤‍💋‍👨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŧ‍❤‍💋‍👨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŧ‍❤‍💋‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŧ‍❤‍💋‍👨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŊ‍❤‍💋‍👨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŊ‍❤‍💋‍👨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŊ‍❤‍💋‍👨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŊ‍❤‍💋‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŊ‍❤‍💋‍👨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏾‍❤‍💋‍👨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏾‍❤‍💋‍👨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏾‍❤‍💋‍👨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏾‍❤‍💋‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏾‍❤‍💋‍👨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŋ‍❤‍💋‍👨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŋ‍❤‍💋‍👨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŋ‍❤‍💋‍👨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŋ‍❤‍💋‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŋ‍❤‍💋‍👨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸģ‍❤‍💋‍👨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸģ‍❤‍💋‍👨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸģ‍❤‍💋‍👨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸģ‍❤‍💋‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸģ‍❤‍💋‍👨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŧ‍❤‍💋‍👨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŧ‍❤‍💋‍👨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŧ‍❤‍💋‍👨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŧ‍❤‍💋‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŧ‍❤‍💋‍👨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŊ‍❤‍💋‍👨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŊ‍❤‍💋‍👨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŊ‍❤‍💋‍👨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŊ‍❤‍💋‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŊ‍❤‍💋‍👨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏾‍❤‍💋‍👨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏾‍❤‍💋‍👨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏾‍❤‍💋‍👨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏾‍❤‍💋‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏾‍❤‍💋‍👨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŋ‍❤‍💋‍👨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŋ‍❤‍💋‍👨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŋ‍❤‍💋‍👨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŋ‍❤‍💋‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŋ‍❤‍💋‍👨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸģ‍❤‍💋‍👩đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸģ‍❤‍💋‍👩đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸģ‍❤‍💋‍👩đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸģ‍❤‍💋‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸģ‍❤‍💋‍👩đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŧ‍❤‍💋‍👩đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŧ‍❤‍💋‍👩đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŧ‍❤‍💋‍👩đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŧ‍❤‍💋‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŧ‍❤‍💋‍👩đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŊ‍❤‍💋‍👩đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŊ‍❤‍💋‍👩đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŊ‍❤‍💋‍👩đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŊ‍❤‍💋‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŊ‍❤‍💋‍👩đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏾‍❤‍💋‍👩đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏾‍❤‍💋‍👩đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏾‍❤‍💋‍👩đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏾‍❤‍💋‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏾‍❤‍💋‍👩đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŋ‍❤‍💋‍👩đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŋ‍❤‍💋‍👩đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŋ‍❤‍💋‍👩đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŋ‍❤‍💋‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŋ‍❤‍💋‍👩đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸģ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŧ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑đŸŊ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏾‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŋ":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸģ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŧ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸŊ":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑đŸŋ‍❤ī¸â€đŸ’‹â€đŸ§‘đŸž":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏾‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸģ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŧ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŊ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸž":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘¨đŸŋ":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸģ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŊ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏾‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŧ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŊ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸž":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩đŸŋ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸŋ":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff"} \ No newline at end of file diff --git a/app/javascript/mastodon/features/explore/index.jsx b/app/javascript/mastodon/features/explore/index.jsx index 80825e456396cb..8ebaccd0132de7 100644 --- a/app/javascript/mastodon/features/explore/index.jsx +++ b/app/javascript/mastodon/features/explore/index.jsx @@ -8,9 +8,8 @@ import { NavLink, Switch, Route } from 'react-router-dom'; import { connect } from 'react-redux'; -import { ReactComponent as SearchIcon } from '@material-symbols/svg-600/outlined/search.svg'; -import { ReactComponent as TagIcon } from '@material-symbols/svg-600/outlined/tag.svg'; - +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import Search from 'mastodon/features/compose/containers/search_container'; diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx index 8c172c134a0989..355c0f1c4c8532 100644 --- a/app/javascript/mastodon/features/explore/results.jsx +++ b/app/javascript/mastodon/features/explore/results.jsx @@ -9,10 +9,9 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as FindInPageIcon } from '@material-symbols/svg-600/outlined/find_in_page.svg'; -import { ReactComponent as PeopleIcon } from '@material-symbols/svg-600/outlined/group.svg'; -import { ReactComponent as TagIcon } from '@material-symbols/svg-600/outlined/tag.svg'; - +import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { submitSearch, expandSearch } from 'mastodon/actions/search'; import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/favourited_statuses/index.jsx b/app/javascript/mastodon/features/favourited_statuses/index.jsx index d3c3cc9f091698..8e65ff5b68beb4 100644 --- a/app/javascript/mastodon/features/favourited_statuses/index.jsx +++ b/app/javascript/mastodon/features/favourited_statuses/index.jsx @@ -8,9 +8,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star-fill.svg'; import { debounce } from 'lodash'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { fetchFavouritedStatuses, expandFavouritedStatuses } from 'mastodon/actions/favourites'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/favourites/index.jsx b/app/javascript/mastodon/features/favourites/index.jsx index 637a9d6994a198..27ca169409221f 100644 --- a/app/javascript/mastodon/features/favourites/index.jsx +++ b/app/javascript/mastodon/features/favourites/index.jsx @@ -8,9 +8,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as RefreshIcon } from '@material-symbols/svg-600/outlined/refresh.svg'; import { debounce } from 'lodash'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { fetchFavourites, expandFavourites } from 'mastodon/actions/interactions'; import ColumnHeader from 'mastodon/components/column_header'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/filters/select_filter.jsx b/app/javascript/mastodon/features/filters/select_filter.jsx index 9e8f87e0051a89..5b2eb64952f0e5 100644 --- a/app/javascript/mastodon/features/filters/select_filter.jsx +++ b/app/javascript/mastodon/features/filters/select_filter.jsx @@ -5,9 +5,9 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; -import { ReactComponent as AddIcon } from '@material-symbols/svg-600/outlined/add.svg'; import fuzzysort from 'fuzzysort'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; import { Icon } from 'mastodon/components/icon'; import { toServerSideType } from 'mastodon/utils/filters'; import { loupeIcon, deleteIcon } from 'mastodon/utils/icons'; diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index 0ed8aa11aa6ad3..6355efbfe00865 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -6,8 +6,7 @@ import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; import { NavLink } from 'react-router-dom'; -import { ReactComponent as PublicIcon } from '@material-symbols/svg-600/outlined/public.svg'; - +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { addColumn } from 'mastodon/actions/columns'; import { changeSetting } from 'mastodon/actions/settings'; import { connectPublicStream, connectCommunityStream } from 'mastodon/actions/streaming'; diff --git a/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx b/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx index ca2b454143a468..dd308c87cb1fc3 100644 --- a/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx +++ b/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx @@ -7,8 +7,8 @@ import { Link } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/check.svg'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Avatar } from '../../../components/avatar'; import { DisplayName } from '../../../components/display_name'; diff --git a/app/javascript/mastodon/features/follow_requests/index.jsx b/app/javascript/mastodon/features/follow_requests/index.jsx index 3b98791926991a..7d651f2ca69c24 100644 --- a/app/javascript/mastodon/features/follow_requests/index.jsx +++ b/app/javascript/mastodon/features/follow_requests/index.jsx @@ -8,9 +8,10 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as PersonAddIcon } from '@material-symbols/svg-600/outlined/person_add.svg'; import { debounce } from 'lodash'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; + import { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts'; import ScrollableList from '../../components/scrollable_list'; import { me } from '../../initial_state'; diff --git a/app/javascript/mastodon/features/followed_tags/index.jsx b/app/javascript/mastodon/features/followed_tags/index.jsx index dec53f01210107..21248e6de99e97 100644 --- a/app/javascript/mastodon/features/followed_tags/index.jsx +++ b/app/javascript/mastodon/features/followed_tags/index.jsx @@ -8,9 +8,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as TagIcon } from '@material-symbols/svg-600/outlined/tag.svg'; import { debounce } from 'lodash'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { expandFollowedHashtags, fetchFollowedHashtags } from 'mastodon/actions/tags'; import ColumnHeader from 'mastodon/components/column_header'; import { Hashtag } from 'mastodon/components/hashtag'; diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.jsx b/app/javascript/mastodon/features/getting_started/components/announcements.jsx index 1999316a8e776d..ea36cefd7dc240 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.jsx +++ b/app/javascript/mastodon/features/getting_started/components/announcements.jsx @@ -9,14 +9,14 @@ import { withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as AddIcon } from '@material-symbols/svg-600/outlined/add.svg'; -import { ReactComponent as ChevronLeftIcon } from '@material-symbols/svg-600/outlined/chevron_left.svg'; -import { ReactComponent as ChevronRightIcon } from '@material-symbols/svg-600/outlined/chevron_right.svg'; import TransitionMotion from 'react-motion/lib/TransitionMotion'; import spring from 'react-motion/lib/spring'; import ReactSwipeableViews from 'react-swipeable-views'; -import elephantUIPlane from 'mastodon/../images/elephant_ui_plane.svg'; +import elephantUIPlane from '@/images/elephant_ui_plane.svg'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import { AnimatedNumber } from 'mastodon/components/animated_number'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/getting_started/containers/announcements_container.js b/app/javascript/mastodon/features/getting_started/containers/announcements_container.js index c33e624324d371..3bb1b8e8d182c7 100644 --- a/app/javascript/mastodon/features/getting_started/containers/announcements_container.js +++ b/app/javascript/mastodon/features/getting_started/containers/announcements_container.js @@ -1,6 +1,7 @@ +import { createSelector } from '@reduxjs/toolkit'; import { Map as ImmutableMap } from 'immutable'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; + import { addReaction, removeReaction, dismissAnnouncement } from 'mastodon/actions/announcements'; diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index cfc6f40400c088..badf767e1a4b9c 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -9,18 +9,17 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as AlternateEmailIcon } from '@material-symbols/svg-600/outlined/alternate_email.svg'; -import { ReactComponent as BookmarksIcon } from '@material-symbols/svg-600/outlined/bookmarks-fill.svg'; -import { ReactComponent as PeopleIcon } from '@material-symbols/svg-600/outlined/group.svg'; -import { ReactComponent as HomeIcon } from '@material-symbols/svg-600/outlined/home-fill.svg'; -import { ReactComponent as ListAltIcon } from '@material-symbols/svg-600/outlined/list_alt.svg'; -import { ReactComponent as MenuIcon } from '@material-symbols/svg-600/outlined/menu.svg'; -import { ReactComponent as PersonAddIcon } from '@material-symbols/svg-600/outlined/person_add.svg'; -import { ReactComponent as PublicIcon } from '@material-symbols/svg-600/outlined/public.svg'; -import { ReactComponent as SettingsIcon } from '@material-symbols/svg-600/outlined/settings-fill.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star.svg'; -import { ReactComponent as TagIcon } from '@material-symbols/svg-600/outlined/tag.svg'; - +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.jsx b/app/javascript/mastodon/features/hashtag_timeline/index.jsx index fc18885b46cee9..460d9745d9583d 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.jsx +++ b/app/javascript/mastodon/features/hashtag_timeline/index.jsx @@ -8,9 +8,9 @@ import { Helmet } from 'react-helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as TagIcon } from '@material-symbols/svg-600/outlined/tag.svg'; import { isEqual } from 'lodash'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { connectHashtagStream } from 'mastodon/actions/streaming'; import { fetchHashtag, followHashtag, unfollowHashtag } from 'mastodon/actions/tags'; diff --git a/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx b/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx index 9eeec00e3478dc..960d30e2caea4a 100644 --- a/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx +++ b/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx @@ -2,7 +2,7 @@ import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; -import background from 'mastodon/../images/friends-cropped.png'; +import background from '@/images/friends-cropped.png'; import { DismissableBanner } from 'mastodon/components/dismissable_banner'; export const ExplorePrompt = () => ( diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index 7c9c7a4e52e550..069f52b0beaf2c 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -6,13 +6,12 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; import { Helmet } from 'react-helmet'; +import { createSelector } from '@reduxjs/toolkit'; import { List as ImmutableList } from 'immutable'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; - -import { ReactComponent as CampaignIcon } from '@material-symbols/svg-600/outlined/campaign.svg'; -import { ReactComponent as HomeIcon } from '@material-symbols/svg-600/outlined/home-fill.svg'; +import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import { fetchAnnouncements, toggleShowAnnouncements } from 'mastodon/actions/announcements'; import { IconWithBadge } from 'mastodon/components/icon_with_badge'; import { NotSignedInIndicator } from 'mastodon/components/not_signed_in_indicator'; diff --git a/app/javascript/mastodon/features/interaction_modal/index.jsx b/app/javascript/mastodon/features/interaction_modal/index.jsx index 216c63a7e609a1..07f1e6fe5a1e31 100644 --- a/app/javascript/mastodon/features/interaction_modal/index.jsx +++ b/app/javascript/mastodon/features/interaction_modal/index.jsx @@ -7,12 +7,12 @@ import classNames from 'classnames'; import { connect } from 'react-redux'; -import { ReactComponent as PersonAddIcon } from '@material-symbols/svg-600/outlined/person_add.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as ReplyIcon } from '@material-symbols/svg-600/outlined/reply.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star.svg'; import { throttle, escapeRegExp } from 'lodash'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; import { openModal, closeModal } from 'mastodon/actions/modal'; import api from 'mastodon/api'; import { Button } from 'mastodon/components/button'; diff --git a/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx b/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx index 7552e1799b4ec8..622ca525c1a7b2 100644 --- a/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx +++ b/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx @@ -6,8 +6,7 @@ import { Helmet } from 'react-helmet'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as InfoIcon } from '@material-symbols/svg-600/outlined/info.svg'; - +import InfoIcon from '@/material-icons/400-24px/info.svg?react'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/list_adder/components/list.jsx b/app/javascript/mastodon/features/list_adder/components/list.jsx index 6c5aab85da7fff..a7cfd60bf3af78 100644 --- a/app/javascript/mastodon/features/list_adder/components/list.jsx +++ b/app/javascript/mastodon/features/list_adder/components/list.jsx @@ -6,10 +6,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as AddIcon } from '@material-symbols/svg-600/outlined/add.svg'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; -import { ReactComponent as ListAltIcon } from '@material-symbols/svg-600/outlined/list_alt.svg'; - +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { Icon } from 'mastodon/components/icon'; import { removeFromListAdder, addToListAdder } from '../../../actions/lists'; diff --git a/app/javascript/mastodon/features/list_adder/index.jsx b/app/javascript/mastodon/features/list_adder/index.jsx index 1ba9972e00d346..4e7bd46bdfd993 100644 --- a/app/javascript/mastodon/features/list_adder/index.jsx +++ b/app/javascript/mastodon/features/list_adder/index.jsx @@ -2,10 +2,10 @@ import PropTypes from 'prop-types'; import { injectIntl } from 'react-intl'; +import { createSelector } from '@reduxjs/toolkit'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; import { setupListAdder, resetListAdder } from '../../actions/lists'; import NewListForm from '../lists/components/new_list_form'; diff --git a/app/javascript/mastodon/features/list_editor/components/account.jsx b/app/javascript/mastodon/features/list_editor/components/account.jsx index 18d5e905cbc0b7..77d32af80a25a2 100644 --- a/app/javascript/mastodon/features/list_editor/components/account.jsx +++ b/app/javascript/mastodon/features/list_editor/components/account.jsx @@ -6,8 +6,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as AddIcon } from '@material-symbols/svg-600/outlined/add.svg'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { removeFromListEditor, addToListEditor } from '../../../actions/lists'; import { Avatar } from '../../../components/avatar'; diff --git a/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx b/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx index 1e2446f92b81fe..89f596636ead95 100644 --- a/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx +++ b/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx @@ -5,7 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/check.svg'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { changeListEditorTitle, submitListEditor } from '../../../actions/lists'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/list_editor/components/search.jsx b/app/javascript/mastodon/features/list_editor/components/search.jsx index 093af5cd4e2ceb..097d4f3f41a2ff 100644 --- a/app/javascript/mastodon/features/list_editor/components/search.jsx +++ b/app/javascript/mastodon/features/list_editor/components/search.jsx @@ -7,9 +7,8 @@ import classNames from 'classnames'; import { connect } from 'react-redux'; -import { ReactComponent as CancelIcon } from '@material-symbols/svg-600/outlined/cancel.svg'; -import { ReactComponent as SearchIcon } from '@material-symbols/svg-600/outlined/search.svg'; - +import CancelIcon from '@/material-icons/400-24px/cancel.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'mastodon/components/icon'; import { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from '../../../actions/lists'; diff --git a/app/javascript/mastodon/features/list_timeline/index.jsx b/app/javascript/mastodon/features/list_timeline/index.jsx index 55579c2fd1fcf7..24bf122facb347 100644 --- a/app/javascript/mastodon/features/list_timeline/index.jsx +++ b/app/javascript/mastodon/features/list_timeline/index.jsx @@ -9,11 +9,11 @@ import { withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as DeleteIcon } from '@material-symbols/svg-600/outlined/delete.svg'; -import { ReactComponent as EditIcon } from '@material-symbols/svg-600/outlined/edit.svg'; -import { ReactComponent as ListAltIcon } from '@material-symbols/svg-600/outlined/list_alt.svg'; import Toggle from 'react-toggle'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { fetchList, deleteList, updateList } from 'mastodon/actions/lists'; import { openModal } from 'mastodon/actions/modal'; diff --git a/app/javascript/mastodon/features/lists/index.jsx b/app/javascript/mastodon/features/lists/index.jsx index 58e85b4d288ca9..a7648f55b21f70 100644 --- a/app/javascript/mastodon/features/lists/index.jsx +++ b/app/javascript/mastodon/features/lists/index.jsx @@ -4,13 +4,12 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; +import { createSelector } from '@reduxjs/toolkit'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; - -import { ReactComponent as ListAltIcon } from '@material-symbols/svg-600/outlined/list_alt.svg'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { fetchLists } from 'mastodon/actions/lists'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/mutes/index.jsx b/app/javascript/mastodon/features/mutes/index.jsx index 7f66edc03dc67c..3b50244ea4b192 100644 --- a/app/javascript/mastodon/features/mutes/index.jsx +++ b/app/javascript/mastodon/features/mutes/index.jsx @@ -8,9 +8,10 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as VolumeOffIcon } from '@material-symbols/svg-600/outlined/volume_off.svg'; import { debounce } from 'lodash'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; + import { fetchMutes, expandMutes } from '../../actions/mutes'; import { LoadingIndicator } from '../../components/loading_indicator'; import ScrollableList from '../../components/scrollable_list'; diff --git a/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx b/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx index 54fa16fb6704d3..73eaecba59f3fc 100644 --- a/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx +++ b/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx @@ -3,8 +3,7 @@ import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; -import { ReactComponent as DeleteForeverIcon } from '@material-symbols/svg-600/outlined/delete_forever.svg'; - +import DeleteForeverIcon from '@/material-icons/400-24px/delete_forever.svg?react'; import { Icon } from 'mastodon/components/icon'; export default class ClearColumnButton extends PureComponent { diff --git a/app/javascript/mastodon/features/notifications/components/filter_bar.jsx b/app/javascript/mastodon/features/notifications/components/filter_bar.jsx index 84bd4791ca084a..c288c2c0de2c9e 100644 --- a/app/javascript/mastodon/features/notifications/components/filter_bar.jsx +++ b/app/javascript/mastodon/features/notifications/components/filter_bar.jsx @@ -3,13 +3,12 @@ import { PureComponent } from 'react'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import { ReactComponent as HomeIcon } from '@material-symbols/svg-600/outlined/home-fill.svg'; -import { ReactComponent as InsertChartIcon } from '@material-symbols/svg-600/outlined/insert_chart.svg'; -import { ReactComponent as PersonAddIcon } from '@material-symbols/svg-600/outlined/person_add.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as ReplyAllIcon } from '@material-symbols/svg-600/outlined/reply_all.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star.svg'; - +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; import { Icon } from 'mastodon/components/icon'; const tooltips = defineMessages({ diff --git a/app/javascript/mastodon/features/notifications/components/follow_request.jsx b/app/javascript/mastodon/features/notifications/components/follow_request.jsx index 03420b6c01e6e8..4024455cbd7364 100644 --- a/app/javascript/mastodon/features/notifications/components/follow_request.jsx +++ b/app/javascript/mastodon/features/notifications/components/follow_request.jsx @@ -7,9 +7,8 @@ import { Link } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/check.svg'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; - +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Avatar } from 'mastodon/components/avatar'; import { DisplayName } from 'mastodon/components/display_name'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/notifications/components/notification.jsx b/app/javascript/mastodon/features/notifications/components/notification.jsx index ad7308b26fc6f0..d7101f8384f61e 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.jsx +++ b/app/javascript/mastodon/features/notifications/components/notification.jsx @@ -8,16 +8,16 @@ import { Link, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as EditIcon } from '@material-symbols/svg-600/outlined/edit.svg'; -import { ReactComponent as FlagIcon } from '@material-symbols/svg-600/outlined/flag-fill.svg'; -import { ReactComponent as HomeIcon } from '@material-symbols/svg-600/outlined/home-fill.svg'; -import { ReactComponent as InsertChartIcon } from '@material-symbols/svg-600/outlined/insert_chart.svg'; -import { ReactComponent as PersonIcon } from '@material-symbols/svg-600/outlined/person-fill.svg'; -import { ReactComponent as PersonAddIcon } from '@material-symbols/svg-600/outlined/person_add-fill.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star-fill.svg'; import { HotKeys } from 'react-hotkeys'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import FlagIcon from '@/material-icons/400-24px/flag-fill.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; +import PersonIcon from '@/material-icons/400-24px/person-fill.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import { Icon } from 'mastodon/components/icon'; import AccountContainer from 'mastodon/containers/account_container'; import StatusContainer from 'mastodon/containers/status_container'; diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx index b7ebb4c4675dcf..1cdf5b5dfef100 100644 --- a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx @@ -5,9 +5,8 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; -import { ReactComponent as TuneIcon } from '@material-symbols/svg-600/outlined/tune.svg'; - +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; import { requestBrowserPermission } from 'mastodon/actions/notifications'; import { changeSetting } from 'mastodon/actions/settings'; import { Button } from 'mastodon/components/button'; diff --git a/app/javascript/mastodon/features/notifications/index.jsx b/app/javascript/mastodon/features/notifications/index.jsx index 379932b7b7feb1..30c63ed32ac0d3 100644 --- a/app/javascript/mastodon/features/notifications/index.jsx +++ b/app/javascript/mastodon/features/notifications/index.jsx @@ -5,15 +5,15 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; +import { createSelector } from '@reduxjs/toolkit'; import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import { ReactComponent as DoneAllIcon } from '@material-symbols/svg-600/outlined/done_all.svg'; -import { ReactComponent as NotificationsIcon } from '@material-symbols/svg-600/outlined/notifications-fill.svg'; import { debounce } from 'lodash'; +import DoneAllIcon from '@/material-icons/400-24px/done_all.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; import { compareId } from 'mastodon/compare_id'; import { Icon } from 'mastodon/components/icon'; import { NotSignedInIndicator } from 'mastodon/components/not_signed_in_indicator'; diff --git a/app/javascript/mastodon/features/onboarding/components/step.jsx b/app/javascript/mastodon/features/onboarding/components/step.jsx index 1f83f20801632b..a2a1653b8ab25d 100644 --- a/app/javascript/mastodon/features/onboarding/components/step.jsx +++ b/app/javascript/mastodon/features/onboarding/components/step.jsx @@ -2,9 +2,8 @@ import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; -import { ReactComponent as ArrowRightAltIcon } from '@material-symbols/svg-600/outlined/arrow_right_alt.svg'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/done.svg'; - +import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react'; +import CheckIcon from '@/material-icons/400-24px/done.svg?react'; import { Icon } from 'mastodon/components/icon'; export const Step = ({ label, description, icon, iconComponent, completed, onClick, href, to }) => { diff --git a/app/javascript/mastodon/features/onboarding/index.jsx b/app/javascript/mastodon/features/onboarding/index.jsx index 51677fbc7a580b..5900b9ec76db14 100644 --- a/app/javascript/mastodon/features/onboarding/index.jsx +++ b/app/javascript/mastodon/features/onboarding/index.jsx @@ -8,13 +8,12 @@ import { Link, Switch, Route, useHistory } from 'react-router-dom'; import { useDispatch } from 'react-redux'; -import { ReactComponent as AccountCircleIcon } from '@material-symbols/svg-600/outlined/account_circle.svg'; -import { ReactComponent as ArrowRightAltIcon } from '@material-symbols/svg-600/outlined/arrow_right_alt.svg'; -import { ReactComponent as ContentCopyIcon } from '@material-symbols/svg-600/outlined/content_copy.svg'; -import { ReactComponent as EditNoteIcon } from '@material-symbols/svg-600/outlined/edit_note.svg'; -import { ReactComponent as PersonAddIcon } from '@material-symbols/svg-600/outlined/person_add.svg'; - -import illustration from 'mastodon/../images/elephant_ui_conversation.svg'; +import illustration from '@/images/elephant_ui_conversation.svg'; +import AccountCircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; +import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react'; +import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react'; +import EditNoteIcon from '@/material-icons/400-24px/edit_note.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import { focusCompose } from 'mastodon/actions/compose'; import { Icon } from 'mastodon/components/icon'; import Column from 'mastodon/features/ui/components/column'; diff --git a/app/javascript/mastodon/features/onboarding/profile.jsx b/app/javascript/mastodon/features/onboarding/profile.jsx index 09e6b2c6c69358..14250ae39bd399 100644 --- a/app/javascript/mastodon/features/onboarding/profile.jsx +++ b/app/javascript/mastodon/features/onboarding/profile.jsx @@ -8,10 +8,10 @@ import { useHistory } from 'react-router-dom'; import { useDispatch } from 'react-redux'; -import { ReactComponent as AddPhotoAlternateIcon } from '@material-symbols/svg-600/outlined/add_photo_alternate.svg'; -import { ReactComponent as EditIcon } from '@material-symbols/svg-600/outlined/edit.svg'; import Toggle from 'react-toggle'; +import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import { updateAccount } from 'mastodon/actions/accounts'; import { Button } from 'mastodon/components/button'; import { ColumnBackButton } from 'mastodon/components/column_back_button'; @@ -26,6 +26,8 @@ const messages = defineMessages({ uploadAvatar: { id: 'onboarding.profile.upload_avatar', defaultMessage: 'Upload profile picture' }, }); +const nullIfMissing = path => path.endsWith('missing.png') ? null : path; + export const Profile = () => { const account = useAppSelector(state => state.getIn(['accounts', me])); const [displayName, setDisplayName] = useState(account.get('display_name')); @@ -61,8 +63,8 @@ export const Profile = () => { setHeader(e.target?.files?.[0]); }, [setHeader]); - const avatarPreview = useMemo(() => avatar ? URL.createObjectURL(avatar) : account.get('avatar'), [avatar, account]); - const headerPreview = useMemo(() => header ? URL.createObjectURL(header) : account.get('header'), [header, account]); + const avatarPreview = useMemo(() => avatar ? URL.createObjectURL(avatar) : nullIfMissing(account.get('avatar')), [avatar, account]); + const headerPreview = useMemo(() => header ? URL.createObjectURL(header) : nullIfMissing(account.get('header')), [header, account]); const handleSubmit = useCallback(() => { setIsSaving(true); diff --git a/app/javascript/mastodon/features/onboarding/share.jsx b/app/javascript/mastodon/features/onboarding/share.jsx index adc0f9cba3672f..32a86ab6cc0724 100644 --- a/app/javascript/mastodon/features/onboarding/share.jsx +++ b/app/javascript/mastodon/features/onboarding/share.jsx @@ -7,10 +7,10 @@ import classNames from 'classnames'; import { Link } from 'react-router-dom'; -import { ReactComponent as ArrowRightAltIcon } from '@material-symbols/svg-600/outlined/arrow_right_alt.svg'; -import { ReactComponent as ContentCopyIcon } from '@material-symbols/svg-600/outlined/content_copy.svg'; import SwipeableViews from 'react-swipeable-views'; +import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react'; +import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react'; import { ColumnBackButton } from 'mastodon/components/column_back_button'; import { Icon } from 'mastodon/components/icon'; import { me, domain } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx index 9b26e2d75360aa..8dfbf54cb649d6 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx @@ -9,12 +9,11 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as OpenInNewIcon } from '@material-symbols/svg-600/outlined/open_in_new.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as ReplyIcon } from '@material-symbols/svg-600/outlined/reply.svg'; -import { ReactComponent as ReplyAllIcon } from '@material-symbols/svg-600/outlined/reply_all.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star.svg'; - +import OpenInNewIcon from '@/material-icons/400-24px/open_in_new.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; import { initBoostModal } from 'mastodon/actions/boosts'; import { replyCompose } from 'mastodon/actions/compose'; import { reblog, favourite, unreblog, unfavourite } from 'mastodon/actions/interactions'; @@ -179,7 +178,7 @@ class Footer extends ImmutablePureComponent { if (status.get('in_reply_to_id', null) === null) { replyIcon = 'reply'; - replyIconComponent = RepeatIcon; + replyIconComponent = ReplyIcon; replyTitle = intl.formatMessage(messages.reply); } else { replyIcon = 'reply-all'; diff --git a/app/javascript/mastodon/features/picture_in_picture/components/header.jsx b/app/javascript/mastodon/features/picture_in_picture/components/header.jsx index 80a13bd2e35b81..31073d7387c9bc 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/header.jsx +++ b/app/javascript/mastodon/features/picture_in_picture/components/header.jsx @@ -8,8 +8,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; - +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Avatar } from 'mastodon/components/avatar'; import { DisplayName } from 'mastodon/components/display_name'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/pinned_statuses/index.jsx b/app/javascript/mastodon/features/pinned_statuses/index.jsx index 82398ccda93ab0..921e9a60721923 100644 --- a/app/javascript/mastodon/features/pinned_statuses/index.jsx +++ b/app/javascript/mastodon/features/pinned_statuses/index.jsx @@ -8,8 +8,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as PushPinIcon } from '@material-symbols/svg-600/outlined/push_pin.svg'; - +import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react'; import { getStatusList } from 'mastodon/selectors'; import { fetchPinnedStatuses } from '../../actions/pin_statuses'; diff --git a/app/javascript/mastodon/features/public_timeline/index.jsx b/app/javascript/mastodon/features/public_timeline/index.jsx index 09a9f6821f4aa0..3601dfeae80a12 100644 --- a/app/javascript/mastodon/features/public_timeline/index.jsx +++ b/app/javascript/mastodon/features/public_timeline/index.jsx @@ -7,8 +7,7 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; -import { ReactComponent as PublicIcon } from '@material-symbols/svg-600/outlined/public.svg'; - +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { DismissableBanner } from 'mastodon/components/dismissable_banner'; import { domain } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/reblogs/index.jsx b/app/javascript/mastodon/features/reblogs/index.jsx index be17668418e09f..3d1fc94cb78d3b 100644 --- a/app/javascript/mastodon/features/reblogs/index.jsx +++ b/app/javascript/mastodon/features/reblogs/index.jsx @@ -8,9 +8,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as RefreshIcon } from '@material-symbols/svg-600/outlined/refresh.svg'; import { debounce } from 'lodash'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { Icon } from 'mastodon/components/icon'; import { fetchReblogs, expandReblogs } from '../../actions/interactions'; diff --git a/app/javascript/mastodon/features/report/comment.jsx b/app/javascript/mastodon/features/report/comment.jsx index ec597469234ce7..b80c14fcb921fd 100644 --- a/app/javascript/mastodon/features/report/comment.jsx +++ b/app/javascript/mastodon/features/report/comment.jsx @@ -3,10 +3,10 @@ import { useCallback, useEffect, useRef } from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; +import { createSelector } from '@reduxjs/toolkit'; import { OrderedSet, List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { shallowEqual } from 'react-redux'; -import { createSelector } from 'reselect'; import Toggle from 'react-toggle'; diff --git a/app/javascript/mastodon/features/report/components/option.jsx b/app/javascript/mastodon/features/report/components/option.jsx index b3602219f5be9b..7aa0dd1379740c 100644 --- a/app/javascript/mastodon/features/report/components/option.jsx +++ b/app/javascript/mastodon/features/report/components/option.jsx @@ -3,8 +3,7 @@ import { PureComponent } from 'react'; import classNames from 'classnames'; -import { ReactComponent as CheckIcon } from '@material-symbols/svg-600/outlined/done.svg'; - +import CheckIcon from '@/material-icons/400-24px/done.svg?react'; import { Icon } from 'mastodon/components/icon'; export default class Option extends PureComponent { diff --git a/app/javascript/mastodon/features/report/components/status_check_box.jsx b/app/javascript/mastodon/features/report/components/status_check_box.jsx index 8bee76e591944c..481ee3e5edd049 100644 --- a/app/javascript/mastodon/features/report/components/status_check_box.jsx +++ b/app/javascript/mastodon/features/report/components/status_check_box.jsx @@ -47,7 +47,7 @@ class StatusCheckBox extends PureComponent {
- + ); diff --git a/app/javascript/mastodon/features/status/components/action_bar.jsx b/app/javascript/mastodon/features/status/components/action_bar.jsx index 663bce74319004..4cb06aac2cfe7b 100644 --- a/app/javascript/mastodon/features/status/components/action_bar.jsx +++ b/app/javascript/mastodon/features/status/components/action_bar.jsx @@ -9,17 +9,16 @@ import { withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { ReactComponent as BookmarkIcon } from '@material-symbols/svg-600/outlined/bookmark-fill.svg'; -import { ReactComponent as BookmarkBorderIcon } from '@material-symbols/svg-600/outlined/bookmark.svg'; -import { ReactComponent as MoreHorizIcon } from '@material-symbols/svg-600/outlined/more_horiz.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as ReplyIcon } from '@material-symbols/svg-600/outlined/reply.svg'; -import { ReactComponent as ReplyAllIcon } from '@material-symbols/svg-600/outlined/reply_all.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star-fill.svg'; -import { ReactComponent as StarBorderIcon } from '@material-symbols/svg-600/outlined/star.svg'; - -import { ReactComponent as RepeatDisabledIcon } from 'mastodon/../svg-icons/repeat_disabled.svg'; -import { ReactComponent as RepeatPrivateIcon } from 'mastodon/../svg-icons/repeat_private.svg'; +import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg?react'; +import BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import StarBorderIcon from '@/material-icons/400-24px/star.svg?react'; +import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react'; +import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx index d7d688952d6405..f37b558c4cd50e 100644 --- a/app/javascript/mastodon/features/status/components/card.jsx +++ b/app/javascript/mastodon/features/status/components/card.jsx @@ -10,10 +10,9 @@ import classNames from 'classnames'; import Immutable from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import { ReactComponent as DescriptionIcon } from '@material-symbols/svg-600/outlined/description-fill.svg'; -import { ReactComponent as OpenInNewIcon } from '@material-symbols/svg-600/outlined/open_in_new.svg'; -import { ReactComponent as PlayArrowIcon } from '@material-symbols/svg-600/outlined/play_arrow-fill.svg'; - +import DescriptionIcon from '@/material-icons/400-24px/description-fill.svg?react'; +import OpenInNewIcon from '@/material-icons/400-24px/open_in_new.svg?react'; +import PlayArrowIcon from '@/material-icons/400-24px/play_arrow-fill.svg?react'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; import { RelativeTimestamp } from 'mastodon/components/relative_timestamp'; diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index d8d9559127d251..437e9e86bff294 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -8,10 +8,9 @@ import { Link, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as AlternateEmailIcon } from '@material-symbols/svg-600/outlined/alternate_email.svg'; -import { ReactComponent as RepeatIcon } from '@material-symbols/svg-600/outlined/repeat.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star-fill.svg'; - +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import { AnimatedNumber } from 'mastodon/components/animated_number'; import EditedTimestamp from 'mastodon/components/edited_timestamp'; import { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar'; diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx index 67a9697311ebbd..a3034bb5707180 100644 --- a/app/javascript/mastodon/features/status/index.jsx +++ b/app/javascript/mastodon/features/status/index.jsx @@ -6,16 +6,16 @@ import classNames from 'classnames'; import { Helmet } from 'react-helmet'; import { withRouter } from 'react-router-dom'; +import { createSelector } from '@reduxjs/toolkit'; import Immutable from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import { ReactComponent as VisibilityIcon } from '@material-symbols/svg-600/outlined/visibility.svg'; -import { ReactComponent as VisibilityOffIcon } from '@material-symbols/svg-600/outlined/visibility_off.svg'; import { HotKeys } from 'react-hotkeys'; +import VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; import { Icon } from 'mastodon/components/icon'; import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import ScrollContainer from 'mastodon/containers/scroll_container'; @@ -582,16 +582,20 @@ class Status extends ImmutablePureComponent { )); } - setRef = c => { + setContainerRef = c => { this.node = c; }; + setStatusRef = c => { + this.statusNode = c; + }; + _scrollStatusIntoView () { const { status, multiColumn } = this.props; if (status) { - window.requestAnimationFrame(() => { - this.node?.querySelector('.detailed-status__wrapper')?.scrollIntoView(true); + requestIdleCallback(() => { + this.statusNode?.scrollIntoView(true); // In the single-column interface, `scrollIntoView` will put the post behind the header, // so compensate for that. @@ -629,9 +633,8 @@ class Status extends ImmutablePureComponent { } // Scroll to focused post if it is loaded - const child = this.node?.querySelector('.detailed-status__wrapper'); - if (child) { - return [0, child.offsetTop]; + if (this.statusNode) { + return [0, this.statusNode.offsetTop]; } // Do not scroll otherwise, `componentDidUpdate` will take care of that @@ -692,11 +695,11 @@ class Status extends ImmutablePureComponent { /> -
+
{ancestors} -
+
{ if (status === 'recognizing text') { this.setState({ ocrStatus: 'detecting', progress }); diff --git a/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx b/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx index 314b2a2652f6de..4aa009263150cd 100644 --- a/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx +++ b/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx @@ -6,8 +6,7 @@ import { injectIntl, defineMessages } from 'react-intl'; import { List as ImmutableList } from 'immutable'; import { connect } from 'react-redux'; -import { ReactComponent as PersonAddIcon } from '@material-symbols/svg-600/outlined/person_add.svg'; - +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import { IconWithBadge } from 'mastodon/components/icon_with_badge'; import ColumnLink from 'mastodon/features/ui/components/column_link'; diff --git a/app/javascript/mastodon/features/ui/components/header.jsx b/app/javascript/mastodon/features/ui/components/header.jsx index 150647ffb3c796..2f8636b12a0e99 100644 --- a/app/javascript/mastodon/features/ui/components/header.jsx +++ b/app/javascript/mastodon/features/ui/components/header.jsx @@ -7,8 +7,7 @@ import { Link, withRouter } from 'react-router-dom'; import { connect } from 'react-redux'; -import { ReactComponent as SearchIcon } from '@material-symbols/svg-600/outlined/search.svg'; - +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { openModal } from 'mastodon/actions/modal'; import { fetchServer } from 'mastodon/actions/server'; import { Avatar } from 'mastodon/components/avatar'; diff --git a/app/javascript/mastodon/features/ui/components/image_modal.jsx b/app/javascript/mastodon/features/ui/components/image_modal.jsx index c534bf16362ba7..f08ce15342e061 100644 --- a/app/javascript/mastodon/features/ui/components/image_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/image_modal.jsx @@ -5,8 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import classNames from 'classnames'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; - +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { IconButton } from 'mastodon/components/icon_button'; import ImageLoader from './image_loader'; diff --git a/app/javascript/mastodon/features/ui/components/list_panel.jsx b/app/javascript/mastodon/features/ui/components/list_panel.jsx index 8dbd28f0940678..fec21f14ca15c8 100644 --- a/app/javascript/mastodon/features/ui/components/list_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/list_panel.jsx @@ -1,12 +1,11 @@ import PropTypes from 'prop-types'; +import { createSelector } from '@reduxjs/toolkit'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; - -import { ReactComponent as ListAltIcon } from '@material-symbols/svg-600/outlined/list_alt.svg'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { fetchLists } from 'mastodon/actions/lists'; import ColumnLink from './column_link'; diff --git a/app/javascript/mastodon/features/ui/components/media_modal.jsx b/app/javascript/mastodon/features/ui/components/media_modal.jsx index 8c06a965311ddd..0f6e8a727bea3f 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/media_modal.jsx @@ -7,11 +7,11 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { ReactComponent as ChevronLeftIcon } from '@material-symbols/svg-600/outlined/chevron_left.svg'; -import { ReactComponent as ChevronRightIcon } from '@material-symbols/svg-600/outlined/chevron_right.svg'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; import ReactSwipeableViews from 'react-swipeable-views'; +import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { getAverageFromBlurhash } from 'mastodon/blurhash'; import { GIFV } from 'mastodon/components/gifv'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 96a180aade2905..1c62ef62c9af79 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -5,18 +5,17 @@ import { defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router-dom'; -import { ReactComponent as AlternateEmailIcon } from '@material-symbols/svg-600/outlined/alternate_email.svg'; -import { ReactComponent as BookmarksIcon } from '@material-symbols/svg-600/outlined/bookmarks-fill.svg'; -import { ReactComponent as HomeIcon } from '@material-symbols/svg-600/outlined/home-fill.svg'; -import { ReactComponent as ListAltIcon } from '@material-symbols/svg-600/outlined/list_alt.svg'; -import { ReactComponent as MoreHorizIcon } from '@material-symbols/svg-600/outlined/more_horiz.svg'; -import { ReactComponent as PublicIcon } from '@material-symbols/svg-600/outlined/public.svg'; -import { ReactComponent as FaqIcon } from '@material-symbols/svg-600/outlined/question_mark.svg'; -import { ReactComponent as SearchIcon } from '@material-symbols/svg-600/outlined/search.svg'; -import { ReactComponent as SettingsIcon } from '@material-symbols/svg-600/outlined/settings-fill.svg'; -import { ReactComponent as StarIcon } from '@material-symbols/svg-600/outlined/star-fill.svg'; -import { ReactComponent as TagIcon } from '@material-symbols/svg-600/outlined/tag.svg'; - +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import FaqIcon from '@/material-icons/400-24px/question_mark.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { WordmarkLogo } from 'mastodon/components/logo'; import { NavigationPortal } from 'mastodon/components/navigation_portal'; import { timelinePreview, trendsEnabled } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js index b3e9950e93ffbd..7d59d616d83003 100644 --- a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js +++ b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js @@ -1,7 +1,6 @@ import { connect } from 'react-redux'; -import { ReactComponent as NotificationsIcon } from '@material-symbols/svg-600/outlined/notifications-fill.svg'; - +import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; import { IconWithBadge } from 'mastodon/components/icon_with_badge'; diff --git a/app/javascript/mastodon/features/ui/components/report_modal.jsx b/app/javascript/mastodon/features/ui/components/report_modal.jsx index 3fd8ff127d8789..6584364609522c 100644 --- a/app/javascript/mastodon/features/ui/components/report_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/report_modal.jsx @@ -7,8 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { ReactComponent as CloseIcon } from '@material-symbols/svg-600/outlined/close.svg'; - +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { submitReport } from 'mastodon/actions/reports'; import { fetchServer } from 'mastodon/actions/server'; import { expandAccountTimeline } from 'mastodon/actions/timelines'; diff --git a/app/javascript/mastodon/features/ui/components/zoomable_image.jsx b/app/javascript/mastodon/features/ui/components/zoomable_image.jsx index 5e71da9d9687be..272a3cff009186 100644 --- a/app/javascript/mastodon/features/ui/components/zoomable_image.jsx +++ b/app/javascript/mastodon/features/ui/components/zoomable_image.jsx @@ -3,9 +3,8 @@ import { PureComponent } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; -import { ReactComponent as FullscreenExitIcon } from '@material-symbols/svg-600/outlined/fullscreen_exit.svg'; -import { ReactComponent as RectangleIcon } from '@material-symbols/svg-600/outlined/rectangle.svg'; - +import FullscreenExitIcon from '@/material-icons/400-24px/fullscreen_exit.svg?react'; +import RectangleIcon from '@/material-icons/400-24px/rectangle.svg?react'; import { IconButton } from 'mastodon/components/icon_button'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/features/ui/containers/status_list_container.js b/app/javascript/mastodon/features/ui/containers/status_list_container.js index 36a8f58f8b5517..3e7ae2add02d42 100644 --- a/app/javascript/mastodon/features/ui/containers/status_list_container.js +++ b/app/javascript/mastodon/features/ui/containers/status_list_container.js @@ -1,6 +1,6 @@ +import { createSelector } from '@reduxjs/toolkit'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; import { debounce } from 'lodash'; diff --git a/app/javascript/mastodon/features/video/index.jsx b/app/javascript/mastodon/features/video/index.jsx index 9ff6d3589ef39c..89a8ba560a0e85 100644 --- a/app/javascript/mastodon/features/video/index.jsx +++ b/app/javascript/mastodon/features/video/index.jsx @@ -7,22 +7,21 @@ import classNames from 'classnames'; import { is } from 'immutable'; -import { ReactComponent as FullscreenIcon } from '@material-symbols/svg-600/outlined/fullscreen.svg'; -import { ReactComponent as FullscreenExitIcon } from '@material-symbols/svg-600/outlined/fullscreen_exit.svg'; -import { ReactComponent as PauseIcon } from '@material-symbols/svg-600/outlined/pause.svg'; -import { ReactComponent as PlayArrowIcon } from '@material-symbols/svg-600/outlined/play_arrow-fill.svg'; -import { ReactComponent as RectangleIcon } from '@material-symbols/svg-600/outlined/rectangle.svg'; -import { ReactComponent as VisibilityOffIcon } from '@material-symbols/svg-600/outlined/visibility_off.svg'; -import { ReactComponent as VolumeOffIcon } from '@material-symbols/svg-600/outlined/volume_off-fill.svg'; -import { ReactComponent as VolumeUpIcon } from '@material-symbols/svg-600/outlined/volume_up-fill.svg'; import { throttle } from 'lodash'; +import FullscreenIcon from '@/material-icons/400-24px/fullscreen.svg?react'; +import FullscreenExitIcon from '@/material-icons/400-24px/fullscreen_exit.svg?react'; +import PauseIcon from '@/material-icons/400-24px/pause.svg?react'; +import PlayArrowIcon from '@/material-icons/400-24px/play_arrow-fill.svg?react'; +import RectangleIcon from '@/material-icons/400-24px/rectangle.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off-fill.svg?react'; +import VolumeUpIcon from '@/material-icons/400-24px/volume_up-fill.svg?react'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; import { playerSettings } from 'mastodon/settings'; import { displayMedia, useBlurhash } from '../../initial_state'; -import { currentMedia, setCurrentMedia } from '../../reducers/media_attachments'; import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen'; const messages = defineMessages({ @@ -182,7 +181,6 @@ class Video extends PureComponent { }; handlePause = () => { - this.video.pause(); this.setState({ paused: true }); }; @@ -346,32 +344,11 @@ class Video extends PureComponent { }; togglePlay = () => { - const videos = document.querySelectorAll('video'); - - videos.forEach((video) => { - const button = video.nextElementSibling; - button.addEventListener('click', () => { - if (video.paused) { - videos.forEach((e) => { - if (e !== video) { - e.pause(); - } - }); - video.play(); - this.setState({ paused: false }); - } else { - video.pause(); - this.setState({ paused: true }); - } - }); - }); - - if (currentMedia !== null) { - currentMedia.pause(); + if (this.state.paused) { + this.setState({ paused: false }, () => this.video.play()); + } else { + this.setState({ paused: true }, () => this.video.pause()); } - - this.video.play(); - setCurrentMedia(this.video); }; toggleFullscreen = () => { diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index d3cc40c60c0012..6c37cdf5ca4622 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -30,7 +30,6 @@ "account.followers.empty": "Hierdie gebruiker het nog nie volgers nie.", "account.following": "Volg", "account.follows.empty": "Die gebruiker volg nog niemand.", - "account.follows_you": "Volg jou", "account.go_to_profile": "Gaan na profiel", "account.hide_reblogs": "Versteek plasings wat deur @{name} aangestuur is", "account.joined_short": "Aangesluit", diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index b2134551bfbb8b..23899b10072d4d 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -35,7 +35,6 @@ "account.following": "Seguindo", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Seguindo}}", "account.follows.empty": "Este usuario encara no sigue a dengÃēn.", - "account.follows_you": "Te sigue", "account.go_to_profile": "Ir ta lo perfil", "account.hide_reblogs": "Amagar retutz de @{name}", "account.joined_short": "S'uniÃŗ", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 979bc9a701f33b..c0d07cc6484a8f 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -37,7 +37,6 @@ "account.following": "اŲ„اشØĒØąØ§ŲƒØ§ØĒ", "account.following_counter": "{count, plural, zero{Ų„ا ŲŠŲØĒابŲØš ØŖحدŲ‹Ø§} one {ŲŠŲØĒابŲØšŲ ŲˆØ§Ø­Ø¯} two{ŲŠŲØĒابŲØšŲ اŲØĢŲ†Ø§Ų†} few{ŲŠŲØĒابŲØšŲ {counter}} many{ŲŠŲØĒابŲØšŲ {counter}} other {ŲŠŲØĒابŲØšŲ {counter}}}", "account.follows.empty": "Ų„ا ŲŠŲØĒابؚ Ų‡Ø°Ø§ اŲ„Ų…ŲØŗØĒ؎دŲ…Ų ØŖŲŠŲ‘ŲŽ ØŖحدŲ Ø­ØĒŲ‰ اŲ„ØĸŲ†.", - "account.follows_you": "ŲŠŲØĒابŲØšŲŲƒ", "account.go_to_profile": "اذŲ‡Ø¨ ØĨŲ„Ų‰ اŲ„Ų…Ų„Ų اŲ„Ø´ØŽØĩŲŠ", "account.hide_reblogs": "ØĨØŽŲØ§ØĄ اŲ„Ų…ؚاد Ų†Ø´ØąŲ‡Ø§ Ų…ŲŲ† @{name}", "account.in_memoriam": "ŲŲŠ اŲ„Ø°ŲƒØąŲ‰.", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 98f622c29342e1..1467f8891eb2c3 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -13,14 +13,12 @@ "about.rules": "Normes del sirvidor", "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Amestar o quitar de les llistes", - "account.badges.bot": "AutomatizÃĄu", "account.badges.group": "Grupu", "account.block": "Bloquiar a @{name}", "account.block_domain": "Bloquiar el dominiu {domain}", "account.block_short": "Bloquiar", "account.blocked": "Perfil bloquiÃĄu", "account.browse_more_on_origin_server": "Restolar mÃĄs nel perfil orixinal", - "account.cancel_follow_request": "Atayar siguimientu", "account.copy": "Copiar I'enllaz al perfil", "account.direct": "Mentar a @{name} per privao", "account.disable_notifications": "Dexar d'avisame cuando @{name} espublice artículos", @@ -28,22 +26,18 @@ "account.edit_profile": "Editar el perfil", "account.enable_notifications": "Avisame cuando @{name} espublice artículos", "account.endorse": "Destacar nel perfil", - "account.featured_tags.last_status_at": "Últimu estÃĄu en {date}", - "account.featured_tags.last_status_never": "Sin estaos", + "account.featured_tags.last_status_never": "Nun hai nengÃēn artículu", "account.featured_tags.title": "Etiquetes destacaes de: {name}", "account.follow": "Siguir", "account.followers": "Siguidores", "account.followers.empty": "Naide sigue a esti perfil.", - "account.followers_counter": "{count, plural, one {{counter} Siguíu} other {{counter} Siguíos}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural,one {Sigue a {counter}} other {Sigue a {counter}}}", "account.follows.empty": "Esti perfil nun sigue a naide.", - "account.follows_you": "Síguete", "account.go_to_profile": "Dir al perfil", "account.hide_reblogs": "Anubrir los artículos compartíos de @{name}", "account.in_memoriam": "N'alcordanza.", "account.joined_short": "Data de xuniÃŗn", - "account.languages": "Camudar llingÃŧes suscrites", "account.link_verified_on": "La propiedÃĄ d'esti enllaz foi comprobada'l {date}", "account.media": "Multimedia", "account.mention": "Mentar a @{name}", @@ -109,6 +103,7 @@ "community.column_settings.remote_only": "NamÃĄs lo remoto", "compose.language.change": "Camudar la llingua", "compose.language.search": "Buscar llingÃŧesâ€Ļ", + "compose.published.body": "EspublizÃŗse l'artículu.", "compose_form.direct_message_warning_learn_more": "Saber mÃĄs", "compose_form.encryption_warning": "Los artículos de Mastodon nun tÃĄn cifraos de puntu a puntu. Nun compartas nengÃēn tipu d'informaciÃŗn sensible per Mastodon.", "compose_form.lock_disclaimer": "La to cuenta nun ye {locked}. Cualesquier perfil pue siguite pa ver los artículos que son namÃĄs pa siguidores.", @@ -121,7 +116,6 @@ "compose_form.publish_form": "Artículu nuevu", "compose_form.publish_loud": "ÂĄ{publish}!", "compose_form.save_changes": "Guardar los cambeos", - "compose_form.spoiler.unmarked": "Text is not hidden", "confirmation_modal.cancel": "Encaboxar", "confirmations.block.block_and_report": "Bloquiar ya informar", "confirmations.block.confirm": "Bloquiar", @@ -151,6 +145,7 @@ "dismissable_banner.community_timeline": "Esta seiciÃŗn contiÊn los artículos pÃēblicos mÃĄs actuales de los perfiles agospiaos nel dominiu {domain}.", "dismissable_banner.dismiss": "Escartar", "dismissable_banner.explore_tags": "Esta seiciÃŗn contiÊn les etiquetes del fediversu que tÃĄn ganando popularidÃĄ gÃŧei. Les etiquetes mÃĄs usaes polos perfiles apaecen no cimero.", + "dismissable_banner.public_timeline": "Esta seiciÃŗn contiÊn los artículos mÃĄs nuevos de les persones na web social que les persones de {domain} siguen.", "embed.instructions": "Empotra esti artículu nel to sitiu web pente la copia del cÃŗdigu d'abaxo.", "embed.preview": "Va apaecer asina:", "emoji_button.activity": "ActividÃĄ", @@ -160,6 +155,7 @@ "emoji_button.not_found": "Nun s'atoparon fustaxes que concasen", "emoji_button.objects": "Oxetos", "emoji_button.people": "Persones", + "emoji_button.recent": "D'usu frecuente", "emoji_button.search": "Buscarâ€Ļ", "emoji_button.search_results": "Resultaos de la busca", "emoji_button.symbols": "Símbolos", @@ -222,7 +218,6 @@ "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "ensin {additional}", "hashtag.column_settings.select.no_options_message": "Nun s'atopÃŗ nenguna suxerencia", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.follow": "Siguir a la etiqueta", "hashtag.unfollow": "Dexar de siguir a la etiqueta", @@ -264,7 +259,6 @@ "keyboard_shortcuts.reply": "Responder a un artículu", "keyboard_shortcuts.requests": "Abrir la llista de solicitÃēes de siguimientu", "keyboard_shortcuts.search": "Enfocar la barra de busca", - "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "Abrir la columna ÂĢEntamarÂģ", "keyboard_shortcuts.toggle_sensitivity": "Amosar/anubrir el conteníu multimedia", "keyboard_shortcuts.toot": "Comenzar un artículu nuevu", @@ -300,6 +294,7 @@ "navigation_bar.lists": "Llistes", "navigation_bar.logout": "Zarrar la sesiÃŗn", "navigation_bar.mutes": "Perfiles colos avisos desactivaos", + "navigation_bar.opened_in_classic_interface": "Los artículos, les cuentes ya otres pÃĄxines específiques ÃĄbrense por defeutu na interfaz web clÃĄsica.", "navigation_bar.pins": "Artículos fixaos", "navigation_bar.preferences": "Preferencies", "navigation_bar.public_timeline": "Llinia de tiempu federada", @@ -335,7 +330,7 @@ "notifications.group": "{count} avisos", "notifications.mark_as_read": "Marcar tolos avisos como lleíos", "notifications.permission_required": "Los avisos d'escritoriu nun tÃĄn disponibles porque nun se concediÃŗ'l permisu riquíu.", - "onboarding.actions.go_to_explore": "See what's trending", + "onboarding.profile.note_hint": "Pues @mentar a otros perfiles o poner #etiquetesâ€Ļ", "onboarding.start.lead": "XÃĄ yes parte de Mastodon, una plataforma social multimedia descentralizada onde tu ya non un algoritmu, personalices la to esperiencia. Vamos presentate esti llugar social nuevu:", "onboarding.start.skip": "ÂŋNun precises ayuda pa comenzar?", "onboarding.steps.follow_people.body": "Mastodon trata namÃĄs de siguir a cuentes interesantes.", @@ -416,12 +411,16 @@ "search.quick_action.go_to_hashtag": "Dir a la etiqueta {x}", "search.quick_action.status_search": "Artículos que concasen con {x}", "search.search_or_paste": "Busca o apiega una URL", + "search_popout.language_code": "cÃŗdigu de llingua ISO", "search_popout.quick_actions": "Aiciones rÃĄpides", "search_popout.recent": "Busques de reciÊn", + "search_popout.specific_date": "data específica", + "search_popout.user": "perfil", "search_results.accounts": "Perfiles", "search_results.all": "Too", "search_results.hashtags": "Etiquetes", "search_results.nothing_found": "Nun se pudo atopar nada con esos tÊrminos de busca", + "search_results.see_all": "Ver too", "search_results.statuses": "Artículos", "search_results.title": "Busca de: {q}", "server_banner.introduction": "{domain} ye parte de la rede social descentralizada que tien la teunoloxía de {mastodon}.", @@ -464,6 +463,7 @@ "status.replied_to": "En rempuesta a {name}", "status.reply": "Responder", "status.replyAll": "Responder al filu", + "status.report": "Informar de @{name}", "status.sensitive_warning": "Conteníu sensible", "status.show_filter_reason": "Amosar de toes toes", "status.show_less": "Amosar menos", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index f94a8b79ff9fbc..773af40343c6a9 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "НŅĐŧĐ° Đ´ĐžĐŋŅ–ŅĐ°Ņž", "account.featured_tags.title": "ĐĸŅĐŗŅ–, вŅ‹ĐąŅ€Đ°ĐŊŅ‹Ņ {name}", "account.follow": "ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ°", + "account.follow_back": "ПадĐŋŅ–ŅĐ°Ņ†Ņ†Đ° Ņž Đ°Đ´ĐēаС", "account.followers": "ПадĐŋŅ–ŅŅ‡Ņ‹ĐēŅ–", "account.followers.empty": "НŅ–Ņ…Ņ‚Đž ĐŋĐ°ĐēŅƒĐģŅŒ ĐŊĐĩ ĐŋĐ°Đ´ĐŋŅ–ŅĐ°ĐŊŅ‹ ĐŊĐ° ĐŗŅŅ‚Đ°ĐŗĐ° ĐēĐ°Ņ€Ņ‹ŅŅ‚Đ°ĐģŅŒĐŊŅ–ĐēĐ°.", "account.followers_counter": "{count, plural, one {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅŅ‡Ņ‹Đē} few {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅŅ‡Ņ‹ĐēŅ–} many {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅŅ‡Ņ‹ĐēĐ°Ņž} other {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅŅ‡Ņ‹ĐēĐ°}}", "account.following": "ПадĐŋŅ–ŅĐēŅ–", "account.following_counter": "{count, plural, one {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅĐēĐ°} few {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅĐēŅ–} many {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅĐ°Đē} other {{counter} ĐŋĐ°Đ´ĐŋŅ–ŅĐēŅ–}}", "account.follows.empty": "КаŅ€Ņ‹ŅŅ‚Đ°ĐģŅŒĐŊŅ–Đē ĐŊŅ– ĐŊĐ° ĐēĐ°ĐŗĐž ĐŊĐĩ ĐŋĐ°Đ´ĐŋŅ–ŅĐ°ĐŊŅ‹.", - "account.follows_you": "ПадĐŋŅ–ŅĐ°ĐŊŅ‹ ĐŊĐ° ваŅ", "account.go_to_profile": "ПĐĩŅ€Đ°ĐšŅŅ†Ņ– Đ´Đ° ĐŋŅ€ĐžŅ„Ņ–ĐģŅŽ", "account.hide_reblogs": "ĐĄŅ…аваŅ†ŅŒ ĐŋĐ°ŅˆŅ‹Ņ€ŅĐŊĐŊŅ– Đ°Đ´ @{name}", "account.in_memoriam": "ĐŖ ĐŋĐ°ĐŧŅŅ†ŅŒ.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "НĐĩ Đ°ĐŋавŅŅˆŅ‡Đ°Ņ†ŅŒ", "account.mute_short": "ІĐŗĐŊĐ°Ņ€Đ°Đ˛Đ°Ņ†ŅŒ", "account.muted": "ІĐŗĐŊĐ°Ņ€ŅƒĐĩŅ†Ņ†Đ°", + "account.mutual": "ĐŖСаĐĩĐŧĐŊŅ‹Ņ", "account.no_bio": "АĐŋŅ–ŅĐ°ĐŊĐŊĐĩ Đ°Đ´ŅŅƒŅ‚ĐŊŅ–Ņ‡Đ°Đĩ.", "account.open_original_page": "АдĐēŅ€Ņ‹Ņ†ŅŒ Đ°Ņ€Ņ‹ĐŗŅ–ĐŊĐ°ĐģŅŒĐŊŅƒŅŽ ŅŅ‚Đ°Ņ€ĐžĐŊĐēŅƒ", "account.posts": "ДоĐŋŅ–ŅŅ‹", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index f57d868c7a88e7..7ee3c868ae1f16 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "НŅĐŧĐ° ĐŋŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸", "account.featured_tags.title": "ГĐģавĐŊи Ņ…Đ°ŅˆŅ‚Đ°ĐŗОвĐĩ ĐŊĐ° {name}", "account.follow": "ПоŅĐģĐĩдваĐŊĐĩ", + "account.follow_back": "ПоŅĐģĐĩдваĐŊĐĩ вСаиĐŧĐŊĐž", "account.followers": "ПоŅĐģĐĩдОваŅ‚ĐĩĐģи", "account.followers.empty": "ОŅ‰Đĩ ĐŊиĐēОК ĐŊĐĩ ŅĐģĐĩдва ĐŋĐžŅ‚Ņ€ĐĩйиŅ‚ĐĩĐģŅ.", "account.followers_counter": "{count, plural, one {{counter} ĐŋĐžŅĐģĐĩдОваŅ‚ĐĩĐģ} other {{counter} ĐŋĐžŅĐģĐĩдОваŅ‚ĐĩĐģи}}", "account.following": "ПоŅĐģĐĩдваĐŊĐž", "account.following_counter": "{count, plural, one {{counter} ĐŋĐžŅĐģĐĩдваĐŊ} other {{counter} ĐŋĐžŅĐģĐĩдваĐŊи}}", "account.follows.empty": "ПоŅ‚Ņ€ĐĩйиŅ‚ĐĩĐģŅŅ‚ ĐžŅ‰Đĩ ĐŊиĐēĐžĐŗĐž ĐŊĐĩ ŅĐģĐĩдва.", - "account.follows_you": "ĐĄĐģĐĩдва ви", "account.go_to_profile": "КŅŠĐŧ ĐŋŅ€ĐžŅ„иĐģĐ°", "account.hide_reblogs": "ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊĐ° ĐŋОдŅĐ¸ĐģваĐŊиŅ ĐžŅ‚ @{name}", "account.in_memoriam": "В ĐŋĐ°ĐŧĐĩŅ‚ ĐŊĐ°.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ЗаĐŗĐģŅƒŅˆĐ°Đ˛Đ°ĐŊĐĩ ĐŊĐ° иСвĐĩŅŅ‚иŅŅ‚Đ°", "account.mute_short": "ЗаĐŗĐģŅƒŅˆĐ°Đ˛Đ°ĐŊĐĩ", "account.muted": "ЗаĐŗĐģŅƒŅˆĐĩĐŊĐž", + "account.mutual": "ВзаиĐŧĐŊи", "account.no_bio": "НŅĐŧĐ° ĐŋŅ€ĐĩĐ´ŅŅ‚авĐĩĐŊ ĐžĐŋиŅ.", "account.open_original_page": "ОŅ‚ваŅ€ŅĐŊĐĩ ĐŊĐ° ĐŋŅŠŅ€Đ˛ĐžĐžĐąŅ€Đ°ĐˇĐŊĐ°Ņ‚Đ° ŅŅ‚Ņ€Đ°ĐŊиŅ†Đ°", "account.posts": "ПŅƒĐąĐģиĐēĐ°Ņ†Đ¸Đ¸", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index b6e4fbb965f6f6..fe3d2a627c3f23 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -37,7 +37,6 @@ "account.following": "āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡", "account.following_counter": "{count, plural,one {{counter} āĻœāĻ¨āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ} other {{counter} āĻœāĻ¨āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ}}", "account.follows.empty": "āĻāĻ‡ āĻ¸āĻĻāĻ¸ā§āĻ¯ āĻ•āĻžāĻ‰āĻ•ā§‡ āĻāĻ–āĻ¨ā§‹ āĻĢāĻ˛ā§‹ āĻ•āĻ°ā§‡āĻ¨ āĻ¨āĻž.", - "account.follows_you": "āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĢāĻ˛ā§‹ āĻ•āĻ°ā§‡", "account.go_to_profile": "āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¯āĻžāĻ¨", "account.hide_reblogs": "@{name}'āĻ° āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ˛ā§āĻ•āĻŋā§Ÿā§‡ āĻĢā§‡āĻ˛ā§āĻ¨", "account.in_memoriam": "āĻ¸ā§āĻŽā§ƒāĻ¤āĻŋāĻ¤ā§‡.", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 39cd73241940ae..ad6e55c5e1ed7f 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -1,5 +1,5 @@ { - "about.blocks": "ServijerioÚ habaskaet", + "about.blocks": "ServijerioÚ evezhiet", "about.contact": "Darempred :", "about.disclaimer": "Mastodon zo ur meziant frank, open-source hag ur merk marilhet eus Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Abeg dihegerz", @@ -21,6 +21,8 @@ "account.blocked": "Stanket", "account.browse_more_on_origin_server": "Furchal pelloc'h war ar profil orin", "account.cancel_follow_request": "NullaÃą ar reked heuliaÃą", + "account.copy": "EilaÃą al liamm war-zu ho profil", + "account.direct": "MenegiÃą @{name} ent-prevez", "account.disable_notifications": "Paouez d'am c'hemenn pa vez embannet traoÚ gant @{name}", "account.domain_blocked": "Domani stanket", "account.edit_profile": "KemmaÃą ar profil", @@ -28,17 +30,18 @@ "account.endorse": "Lakaat war-wel war ar profil", "account.featured_tags.last_status_at": "Toud diwezhaÃą : {date}", "account.featured_tags.last_status_never": "Toud ebet", - "account.featured_tags.title": "PenngerioÚ-klik {name}", + "account.featured_tags.title": "HashtagoÚ pennaÃą {name}", "account.follow": "HeuliaÃą", + "account.follow_back": "HeuliaÃą d'ho tro", "account.followers": "Tud koumanantet", "account.followers.empty": "Den na heul an implijer¡ez-maÃą c'hoazh.", "account.followers_counter": "{count, plural, other{{counter} Heulier¡ez}}", "account.following": "KoumanantoÚ", "account.following_counter": "{count, plural, one{{counter} C'houmanant} two{{counter} Goumanant} other {{counter} a Goumanant}}", "account.follows.empty": "An implijer¡ez-maÃą na heul den ebet.", - "account.follows_you": "Ho heuilh", "account.go_to_profile": "Gwelet ar profil", "account.hide_reblogs": "Kuzh skignadennoÚ gant @{name}", + "account.in_memoriam": "E koun.", "account.joined_short": "AmaÃą abaoe", "account.languages": "CheÃąch ar yezhoÚ koumanantet", "account.link_verified_on": "Gwiriet eo bet perc'hennidigezh al liamm d'an deiziad-maÃą : {date}", @@ -50,11 +53,13 @@ "account.mute_notifications_short": "Kuzhat ar c'hemennoÚ", "account.mute_short": "Kuzhat", "account.muted": "Kuzhet", + "account.no_bio": "Deskrivadur ebet da gaout.", "account.open_original_page": "DigeriÃą ar bajenn orin", - "account.posts": "ToudoÚ", - "account.posts_with_replies": "ToudoÚ ha respontoÚ", + "account.posts": "EmbannadurioÚ", + "account.posts_with_replies": "EmbannadurioÚ ha respontoÚ", "account.report": "DisklÃĒriaÃą @{name}", "account.requested": "O c'hortoz an asant. Klikit evit nullaÃą ar goulenn heuliaÃą", + "account.requested_follow": "Gant {name} eo bet goulennet ho heuliaÃą", "account.share": "SkignaÃą profil @{name}", "account.show_reblogs": "Diskouez skignadennoÚ @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toud} two {{counter} Doud} other {{counter} a DoudoÚ}}", @@ -64,6 +69,7 @@ "account.unendorse": "Paouez da lakaat war-wel war ar profil", "account.unfollow": "DiheuliaÃą", "account.unmute": "Diguzhat @{name}", + "account.unmute_notifications_short": "Diguzhat ar c'hemennoÚ", "account.unmute_short": "Diguzhat", "account_note.placeholder": "Klikit evit ouzhpennaÃą un notenn", "admin.dashboard.daily_retention": "Feur azdalc'h an implijerien¡ezed dre zeiz goude bezaÃą lakaet o anv", @@ -71,6 +77,9 @@ "admin.dashboard.retention.average": "Keidenn", "admin.dashboard.retention.cohort": "Miz an enrolladur", "admin.dashboard.retention.cohort_size": "Implijerien.erezed nevez", + "admin.impact_report.instance_accounts": "ProfiloÚ kontoÚ a vefe dilamet", + "admin.impact_report.instance_followers": "Heulierien a gollfe hon implijerien", + "admin.impact_report.instance_follows": "Heulierien a gollfe o implijerien", "alert.rate_limited.message": "Klaskit en-dro a-benn {retry_time, time, medium}.", "alert.rate_limited.title": "Feur bevennet", "alert.unexpected.message": "Ur fazi dic'hortozet zo degouezhet.", @@ -101,8 +110,10 @@ "column.blocks": "Implijer¡ezed¡ien berzet", "column.bookmarks": "SinedoÚ", "column.community": "Red-amzer lec'hel", + "column.direct": "MenegoÚ prevez", "column.directory": "Mont a-dreuz ar profiloÚ", "column.domain_blocks": "Domani berzet", + "column.favourites": "MuiaÃą-karet", "column.follow_requests": "RekedoÚ heuliaÃą", "column.home": "Degemer", "column.lists": "ListennoÚ", @@ -123,6 +134,9 @@ "community.column_settings.remote_only": "Nemet a-bell", "compose.language.change": "CheÃąch yezh", "compose.language.search": "Klask yezhoÚ...", + "compose.published.body": "Embannet.", + "compose.published.open": "DigeriÃą", + "compose.saved.body": "Enrollet.", "compose_form.direct_message_warning_learn_more": "Gouzout hiroc'h", "compose_form.encryption_warning": "ToudoÚ war Mastodon na vezont ket sifret penn-da-benn. Na rannit ket titouroÚ kizidik dre Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", @@ -159,6 +173,7 @@ "confirmations.discard_edit_media.message": "Bez ez eus kemmoÚ n'int ket enrollet e deskrivadur ar media pe ar rakwel, nullaÃą anezho evelato?", "confirmations.domain_block.confirm": "BerzaÃą an domani a-bezh", "confirmations.domain_block.message": "Ha sur oc'h e fell deoc'h berzaÃą an {domain} a-bezh? PeurvuiaÃą eo trawalc'h berzaÃą pe mudaÃą un nebeud implijer¡ezed¡ien. Ne welot danvez ebet o tont eus an domani-maÃą. Dilamet e vo ar c'houmanantoÚ war an domani-maÃą.", + "confirmations.edit.confirm": "KemmaÃą", "confirmations.logout.confirm": "DigevreaÃą", "confirmations.logout.message": "Ha sur oc'h e fell deoc'h digevreaÃą ?", "confirmations.mute.confirm": "Kuzhat", @@ -173,7 +188,9 @@ "conversation.mark_as_read": "MerkaÃą evel lennet", "conversation.open": "Gwelout ar gaozeadenn", "conversation.with": "Gant {names}", + "copy_icon_button.copied": "Eilet er golver", "copypaste.copied": "Eilet", + "copypaste.copy_to_clipboard": "EilaÃą er golver", "directory.federated": "Eus ar fedibed anavezet", "directory.local": "Eus {domain} hepken", "directory.new_arrivals": "Degouezhet a-nevez", @@ -210,7 +227,8 @@ "empty_column.domain_blocks": "N'eus domani kuzh ebet c'hoazh.", "empty_column.explore_statuses": "N'eus tuadur ebet evit c'hoazh. Distroit diwezhatoc'h !", "empty_column.follow_requests": "N'ho peus reked heuliaÃą ebet c'hoazh. Pa vo resevet unan e teuio war wel amaÃą.", - "empty_column.hashtag": "N'eus netra er ger-klik-maÃą c'hoazh.", + "empty_column.followed_tags": "N'emaoc'h oc'h heuliaÃą hashtag ebet evit poent. Pa vioc'h e vo d'o gwelet amaÃą.", + "empty_column.hashtag": "N'eus netra en hashtag-maÃą c'hoazh.", "empty_column.home": "Goullo eo ho red-amzer degemer! Kit da weladenniÃą {public} pe implijit ar c'hlask evit kregiÃą ganti ha kejaÃą gant implijer¡ien¡ezed all.", "empty_column.list": "Goullo eo al listenn-maÃą evit c'hoazh. Pa vo embannet toudoÚ nevez gant e izili e teuint war wel amaÃą.", "empty_column.lists": "N'ho peus roll ebet c'hoazh. Pa vo krouet unan ganeoc'h e vo diskouezet amaÃą.", @@ -224,7 +242,11 @@ "errors.unexpected_crash.copy_stacktrace": "EilaÃą ar roudoÚ diveugaÃą er golver", "errors.unexpected_crash.report_issue": "DanevellaÃą ur fazi", "explore.search_results": "Disoc'hoÚ an enklask", + "explore.suggested_follows": "Tud", "explore.title": "Furchal", + "explore.trending_links": "Keleier", + "explore.trending_statuses": "EmbannadurioÚ", + "explore.trending_tags": "HashtagoÚ", "filter_modal.added.context_mismatch_title": "Kenarroud digenglotus !", "filter_modal.added.expired_title": "Sil deuet d'e dermen !", "filter_modal.added.review_and_configure_title": "ArventennoÚ ar sil", @@ -238,9 +260,13 @@ "filter_modal.select_filter.subtitle": "Implijout ur rummad a zo anezhaÃą pe krouiÃą unan nevez", "filter_modal.select_filter.title": "SilaÃą an toud-maÃą", "filter_modal.title.status": "SilaÃą un toud", + "firehose.all": "Pep tra", + "firehose.local": "Ar servijer-maÃą", + "firehose.remote": "ServijerioÚ all", "follow_request.authorize": "Aotren", "follow_request.reject": "Nac'haÃą", "follow_requests.unlocked_explanation": "Daoust ma n'eo ket ho kont prennet, skipailh {domain} a soÃąj e fellfe deoc'h gwiriekaat pedadennoÚ heuliaÃą deus ar c'hontoÚ-se diwar-zorn.", + "followed_tags": "HashtagoÚ o heuliaÃą", "footer.about": "Diwar-benn", "footer.directory": "Kavlec'h ar profiloÚ", "footer.get_app": "PellgargaÃą an arload", @@ -248,29 +274,40 @@ "footer.keyboard_shortcuts": "BerradennoÚ klavier", "footer.privacy_policy": "ReolennoÚ prevezded", "footer.source_code": "Gwelet kod mammenn", + "footer.status": "Statud", "generic.saved": "Enrollet", "getting_started.heading": "Loc'haÃą", - "hashtag.column_header.tag_mode.all": "ha {additional}", + "hashtag.column_header.tag_mode.all": "ha(g) {additional}", "hashtag.column_header.tag_mode.any": "pe {additional}", "hashtag.column_header.tag_mode.none": "hep {additional}", "hashtag.column_settings.select.no_options_message": "N'eus bet kavet ali ebet", - "hashtag.column_settings.select.placeholder": "OuzhpennaÃą gerioÚ-klikâ€Ļ", - "hashtag.column_settings.tag_mode.all": "An holl elfennoÚ-maÃą", + "hashtag.column_settings.select.placeholder": "OuzhpennaÃą hashtagoÚâ€Ļ", + "hashtag.column_settings.tag_mode.all": "An holl anezho", "hashtag.column_settings.tag_mode.any": "Unan e mesk anezho", "hashtag.column_settings.tag_mode.none": "Hini ebet anezho", "hashtag.column_settings.tag_toggle": "Endelc'her gerioÚ-alc'hwez ouzhpenn evit ar bannad-maÃą", + "hashtag.counter_by_uses": "{count, plural, one {{counter} embannadur} other {{counter} embannadur}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} embannadur} other {{counter} embannadur}} hiziv", "hashtag.follow": "HeuliaÃą ar ger-klik", - "hashtag.unfollow": "DiheuliaÃą ar ger-klik", + "hashtag.unfollow": "Paouez heuliaÃą an hashtag", + "hashtags.and_other": "â€Ļ{count, plural, one {hag # all} other {ha # all}}", + "home.actions.go_to_explore": "Gwelet petra zo diouzh ar c'hiz", + "home.actions.go_to_suggestions": "Kavout tud da heuliaÃą", "home.column_settings.basic": "Diazez", "home.column_settings.show_reblogs": "Diskouez ar skignadennoÚ", "home.column_settings.show_replies": "Diskouez ar respontoÚ", + "home.explore_prompt.title": "HomaÃą eo ho pajenn degemer e-barzh Mastodon.", "home.hide_announcements": "Kuzhat ar c'hemennoÚ", + "home.pending_critical_update.body": "Hizivait ho servijer Mastodon kerkent ha ma c'hallit mar plij!", + "home.pending_critical_update.link": "Gwelet an hizivadennoÚ", "home.show_announcements": "Diskouez ar c'hemennoÚ", "interaction_modal.description.follow": "Gant ur gont Mastodon e c'hellit heuliaÃą {name} evit resev an toudoÚ a embann war ho red degemer.", "interaction_modal.description.reblog": "Gant ur gont Mastodon e c'hellit skignaÃą an toud-maÃą evit rannaÃą anezhaÃą gant ho heulierien¡ezed.", "interaction_modal.description.reply": "Gant ur gont Mastodon e c'hellit respont d'an toud-maÃą.", + "interaction_modal.no_account_yet": "N'eo ket war vMastodon?", "interaction_modal.on_another_server": "War ur servijer all", "interaction_modal.on_this_server": "War ar servijer-maÃą", + "interaction_modal.title.favourite": "OuzhpennaÃą embannadur {name} d'ar re vuiaÃą-karet", "interaction_modal.title.follow": "HeuliaÃą {name}", "interaction_modal.title.reblog": "SkignaÃą toud {name}", "interaction_modal.title.reply": "Respont da doud {name}", @@ -286,6 +323,8 @@ "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "DiskennaÃą er roll", "keyboard_shortcuts.enter": "DigeriÃą an toud", + "keyboard_shortcuts.favourite": "OuzhpennaÃą an embannadur d'ar re vuiaÃą-karet", + "keyboard_shortcuts.favourites": "DigeriÃą roll an embannadurioÚ muiaÃą-karet", "keyboard_shortcuts.federated": "DigeriÃą ar red-amzer kevredet", "keyboard_shortcuts.heading": "BerradennoÚ klavier", "keyboard_shortcuts.home": "DigeriÃą ho red-amzer degemer", @@ -315,6 +354,8 @@ "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", "limited_account_hint.action": "Diskouez an aelad memes tra", + "limited_account_hint.title": "Kuzhet eo bet ar profil-maÃą gant an evezhierien eus {domain}.", + "link_preview.author": "Gant {name}", "lists.account.add": "OuzhpennaÃą d'al listenn", "lists.account.remove": "Lemel kuit eus al listenn", "lists.delete": "Dilemel al listenn", @@ -329,6 +370,7 @@ "lists.search": "Klask e-touez tud heuliet ganeoc'h", "lists.subheading": "Ho listennoÚ", "load_pending": "{count, plural, one {# dra nevez} other {# dra nevez}}", + "loading_indicator.label": "O kargaÃąâ€Ļ", "media_gallery.toggle_visible": "{number, plural, one {Kuzhat ar skeudenn} other {Kuzhat ar skeudenn}}", "mute_modal.duration": "Padelezh", "mute_modal.hide_notifications": "Kuzhat kemenadennoÚ eus an implijer-se ?", @@ -338,12 +380,15 @@ "navigation_bar.bookmarks": "SinedoÚ", "navigation_bar.community_timeline": "Red-amzer lec'hel", "navigation_bar.compose": "SkrivaÃą un toud nevez", + "navigation_bar.direct": "MenegoÚ prevez", "navigation_bar.discover": "DizoleiÃą", "navigation_bar.domain_blocks": "DomanioÚ kuzhet", "navigation_bar.edit_profile": "KemmaÃą ar profil", "navigation_bar.explore": "Furchal", + "navigation_bar.favourites": "MuiaÃą-karet", "navigation_bar.filters": "GerioÚ kuzhet", "navigation_bar.follow_requests": "PedadoÚ heuliaÃą", + "navigation_bar.followed_tags": "HashtagoÚ o heuliaÃą", "navigation_bar.follows_and_followers": "HeuliadennoÚ ha heulier¡ezed¡ien", "navigation_bar.lists": "ListennoÚ", "navigation_bar.logout": "DigennaskaÃą", @@ -370,6 +415,7 @@ "notifications.column_settings.admin.report": "DisklÃĒriadurioÚ nevez :", "notifications.column_settings.admin.sign_up": "EnskrivadurioÚ nevez :", "notifications.column_settings.alert": "KemennoÚ war ar burev", + "notifications.column_settings.favourite": "MuiaÃą-karet:", "notifications.column_settings.filter_bar.advanced": "SkrammaÃą an-holl rummadoÚ", "notifications.column_settings.filter_bar.category": "Barrenn siloÚ prim", "notifications.column_settings.filter_bar.show_bar": "Diskouezh barrenn siloÚ", @@ -387,6 +433,7 @@ "notifications.column_settings.update": "KemmoÚ :", "notifications.filter.all": "Pep tra", "notifications.filter.boosts": "SkignadennoÚ", + "notifications.filter.favourites": "MuiaÃą-karet", "notifications.filter.follows": "HeuliaÃą", "notifications.filter.mentions": "MenegoÚ", "notifications.filter.polls": "Disoc'hoÚ ar sontadegoÚ", @@ -400,22 +447,38 @@ "notifications_permission_banner.enable": "Lezel kemennoÚ war ar burev", "notifications_permission_banner.how_to_control": "Evit reseviÃą kemennoÚ pa ne vez ket digoret Mastodon, lezelit kemennoÚ war ar burev. Gallout a rit kontrollaÃą peseurt eskemmoÚ a c'henel kemennoÚ war ar burev gant ar {icon} nozelenn a-us kentre ma'z int lezelet.", "notifications_permission_banner.title": "Na vankit netra morse", + "onboarding.action.back": "DistreiÃą", + "onboarding.actions.back": "DistreiÃą", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Salud #Mastodon!", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", + "onboarding.profile.display_name": "Anv diskouezet", + "onboarding.profile.display_name_hint": "Hoc'h anv klok pe hoc'h anv fentusâ€Ļ", + "onboarding.profile.note": "Berr-ha-berr", + "onboarding.profile.note_hint": "Gallout a rit @menegiÃą tud all pe #hashtagoÚâ€Ļ", + "onboarding.profile.save_and_continue": "EnrollaÃą ha kenderc'hel", + "onboarding.profile.upload_avatar": "EnporzhiaÃą ur skeudenn profil", + "onboarding.share.lead": "Roit da c'houzout d'an dud e c'hallont ho kavout war vMastondon!", + "onboarding.share.message": "Me a zo {username} war #Mastodon! Heuilhit ac'hanon war {url}", + "onboarding.share.title": "SkignaÃą ho profil", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.start.title": "Deuet oc'h a-benn!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.title": "Grit hoc'h embannadur kentaÃą", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", + "password_confirmation.mismatching": "DisheÃąvel eo an daou c'her-termen-se", "picture_in_picture.restore": "Adlakaat", "poll.closed": "Serret", "poll.refresh": "Azbevaat", + "poll.reveal": "Gwelet an disoc'hoÚ", "poll.total_people": "{count, plural, one {# den} other {# a zen}}", "poll.total_votes": "{count, plural, one {# votadenn} other {# votadenn}}", "poll.vote": "MouezhiaÃą", @@ -434,6 +497,7 @@ "privacy.unlisted.short": "Anlistennet", "privacy_policy.last_updated": "Hizivadenn ziwezhaÃą {date}", "privacy_policy.title": "ReolennoÚ Prevezded", + "recommended": "Erbedet", "refresh": "Freskaat", "regeneration_indicator.label": "O kargaÃąâ€Ļ", "regeneration_indicator.sublabel": "War brientiÃą emaÃą ho red degemer!", @@ -451,6 +515,7 @@ "reply_indicator.cancel": "NullaÃą", "report.block": "StankaÃą", "report.block_explanation": "Ne vo ket gwelet toudoÚ ar gont-se ken. Ne welo ket ho toudoÚ ha ne c'hello ket ho heuliaÃą ken. Gouzout a raio eo bet stanket ganeoc'h.", + "report.categories.legal": "Lezennel", "report.categories.other": "All", "report.categories.spam": "Spam", "report.categories.violation": "Torret e vez gant an endalc'had unan pe meur a reolenn", @@ -468,6 +533,7 @@ "report.placeholder": "AskelennoÚ ouzhpenn", "report.reasons.dislike": "Ne blij ket din", "report.reasons.dislike_description": "An dra-se na fell ket deoc'h gwelet", + "report.reasons.legal": "Enep al lezenn eo", "report.reasons.other": "Un abeg all eo", "report.reasons.other_description": "Ar gudenn na glot ket gant ar rummadoÚ all", "report.reasons.spam": "Spam eo", @@ -483,16 +549,32 @@ "report.thanks.title": "Ne fell ket deoc'h gwelet an dra-se ?", "report.thanks.title_actionable": "Trugarez evit bezaÃą disklÃĒriet, emaomp o vont da glask pelloc'h.", "report.unfollow": "DiheuliaÃą @{name}", - "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", + "report_notification.attached_statuses": "{count, plural, one {{count} embannadur} other {{count} embannadur}} stag", + "report_notification.categories.legal": "Lezennel", "report_notification.categories.other": "All", "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Torradur da reolennoÚ ar servijer", "report_notification.open": "DigeriÃą an disklÃĒriadur", + "search.no_recent_searches": "Klask nevez ebet", "search.placeholder": "Klask", + "search.quick_action.account_search": "ProfiloÚ a glot gant {x}", + "search.quick_action.go_to_account": "Mont d'ar profil {x}", + "search.quick_action.go_to_hashtag": "Mont d'an hashtag {x}", + "search.quick_action.open_url": "DigeriÃą an URL e-barzh Mastodon", + "search.quick_action.status_search": "EmbannadurioÚ a glot gant {x}", "search.search_or_paste": "Klask pe pegaÃą un URL", + "search_popout.full_text_search_disabled_message": "N'eo ket da gaout war {domain}.", + "search_popout.language_code": "Kod yezh ISO", + "search_popout.options": "DibarzhioÚ klask", + "search_popout.quick_actions": "OberoÚ prim", + "search_popout.recent": "KlaskoÚ nevesaÃą", + "search_popout.specific_date": "deiziad resis", + "search_popout.user": "implijer¡ez", + "search_results.accounts": "ProfiloÚ", "search_results.all": "Pep tra", - "search_results.hashtags": "GerioÚ-klik", + "search_results.hashtags": "HashtagoÚ", "search_results.nothing_found": "Disoc'h ebet gant ar gerioÚ-se", + "search_results.see_all": "Gwelet pep tra", "search_results.statuses": "ToudoÚ", "search_results.title": "Klask {q}", "server_banner.active_users": "implijerien¡ezed oberiant", @@ -501,8 +583,10 @@ "server_banner.server_stats": "StadegoÚ ar servijer :", "sign_in_banner.create_account": "KrouiÃą ur gont", "sign_in_banner.sign_in": "KevreaÃą", - "status.admin_account": "DigeriÃą etrefas evezherezh evit @{name}", - "status.admin_status": "DigeriÃą an toud e-barzh an etrefas evezherezh", + "sign_in_banner.sso_redirect": "KennaskaÃą pe lakaat hoc'h anv", + "status.admin_account": "DigeriÃą etrefas evezhiaÃą evit @{name}", + "status.admin_domain": "DigeriÃą an etrefas evezhiaÃą evit {domain}", + "status.admin_status": "DigeriÃą an embannadenn e-barzh an etrefas evezhiaÃą", "status.block": "BerzaÃą @{name}", "status.bookmark": "OuzhpennaÃą d'ar sinedoÚ", "status.cancel_reblog_private": "Nac'haÃą ar skignadenn", @@ -510,15 +594,21 @@ "status.copy": "EilaÃą liamm ar c'hannad", "status.delete": "Dilemel", "status.detailed_status": "Gwel kaozeadenn munudek", + "status.direct": "MenegiÃą @{name} ent-prevez", + "status.direct_indicator": "Meneg prevez", "status.edit": "KemmaÃą", "status.edited": "Aozet {date}", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", "status.embed": "EnframmaÃą", + "status.favourite": "MuiaÃą-karet", "status.filter": "SilaÃą ar c'hannad-maÃą", "status.filtered": "Silet", + "status.hide": "Kuzhat an embannadur", "status.history.created": "Krouet gant {name} {date}", "status.history.edited": "Kemmet gant {name} {date}", "status.load_more": "KargaÃą muioc'h", + "status.media.open": "Klikit evit digeriÃą", + "status.media.show": "Klikit evit diskouez", "status.media_hidden": "Media kuzhet", "status.mention": "MenegiÃą @{name}", "status.more": "Muioc'h", @@ -549,6 +639,7 @@ "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", "status.translate": "TreiÃą", "status.translated_from_with": "Troet diwar {lang} gant {provider}", + "status.uncached_media_warning": "Rakwel n'eo ket da gaout", "status.unmute_conversation": "Diguzhat ar gaozeadenn", "status.unpin": "DispilhennaÃą eus ar profil", "subscribed_languages.save": "EnrollaÃą ar cheÃąchamantoÚ", @@ -593,6 +684,7 @@ "upload_modal.preview_label": "Rakwel ({ratio})", "upload_progress.label": "O pellgargaÃą...", "upload_progress.processing": "War oberâ€Ļ", + "username.taken": "Tapet eo an anv implijer-maÃą dija. Klaskit skrivaÃą unan all", "video.close": "SerriÃą ar video", "video.download": "PellgargaÃą ar restr", "video.exit_fullscreen": "Kuitaat ar mod skramm leun", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 5ae49325f6ea24..7d1049a30f4fc5 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "No hi ha tuts", "account.featured_tags.title": "etiquetes destacades de {name}", "account.follow": "Segueix", + "account.follow_back": "Segueix tu tambÊ", "account.followers": "Seguidors", "account.followers.empty": "A aquest usuari encara no el segueix ningÃē.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} Seguidors}}", "account.following": "Seguint", "account.following_counter": "{count, plural, other {{counter} Seguint-ne}}", "account.follows.empty": "Aquest usuari encara no segueix ningÃē.", - "account.follows_you": "Et segueix", "account.go_to_profile": "VÊs al perfil", "account.hide_reblogs": "Amaga els impulsos de @{name}", "account.in_memoriam": "En MemÃ˛ria.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silencia les notificacions", "account.mute_short": "Silencia", "account.muted": "Silenciat", + "account.mutual": "Mutu", "account.no_bio": "No s'ha proporcionat cap descripciÃŗ.", "account.open_original_page": "Obre la pàgina original", "account.posts": "Tuts", @@ -149,7 +150,7 @@ "compose_form.poll.duration": "Durada de l'enquesta", "compose_form.poll.option_placeholder": "OpciÃŗ {number}", "compose_form.poll.remove_option": "Elimina aquesta opciÃŗ", - "compose_form.poll.switch_to_multiple": "Canvia l’enquesta per a permetre diverses opcions", + "compose_form.poll.switch_to_multiple": "Canvia l’enquesta per a permetre mÃēltiples opcions", "compose_form.poll.switch_to_single": "Canvia l’enquesta per a permetre una Ãēnica opciÃŗ", "compose_form.publish": "Tut", "compose_form.publish_form": "Nou tut", @@ -606,7 +607,7 @@ "search.quick_action.status_search": "Tuts coincidint amb {x}", "search.search_or_paste": "Cerca o escriu l'URL", "search_popout.full_text_search_disabled_message": "No disponible a {domain}.", - "search_popout.full_text_search_logged_out_message": "NomÊs disponible en iniciar la sessiÃŗ.", + "search_popout.full_text_search_logged_out_message": "NomÊs disponible amb la sessiÃŗ iniciada.", "search_popout.language_code": "Codi de llengua ISO", "search_popout.options": "Opcions de cerca", "search_popout.quick_actions": "Accions ràpides", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 7e964183292d12..f1cafd1ac474e3 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -36,7 +36,6 @@ "account.following": "بەدŲˆØ§Ø¯Ø§", "account.following_counter": "{count, plural, one {{counter} Ø´ŲˆÛŽŲ†ÚŠÛ•ŲˆØĒŲˆŲˆ} other {{counter} Ø´ŲˆÛŽŲ†ÚŠÛ•ŲˆØĒŲˆŲˆ}}", "account.follows.empty": "ØĻەŲ… Ø¨Û•ÚŠØ§ØąŲ‡ÛŽŲ†Û•ØąÛ• ØĒا ØĻێØŗØĒا Ø´ŲˆÛŽŲ† ÚŠÛ•Øŗ Ų†Û•ÚŠÛ•ŲˆØĒŲˆŲˆÛ•.", - "account.follows_you": "Ø´ŲˆÛŽŲ†ØĒ دەڊەŲˆÛŽØĒ", "account.go_to_profile": "بڕۆ بۆ ŲžÚ•Û†ŲØ§ÛŒŲ„ÛŒ", "account.hide_reblogs": "Ø¯Ø§Ø´Ø§ØąØ¯Ų†ÛŒ بŲˆŲˆØŗØĒەڊاŲ† Ų„Û• @{name}", "account.joined_short": "Ø¨Û•Ø´Ø¯Ø§ØąÛŒ ÚŠØąØ¯ŲˆŲˆÛ•", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index d4bb2f82ba463e..9f90c3d211dffa 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -19,7 +19,6 @@ "account.followers_counter": "{count, plural, one {{counter} Abbunatu} other {{counter} Abbunati}}", "account.following_counter": "{count, plural, one {{counter} Abbunamentu} other {{counter} Abbunamenti}}", "account.follows.empty": "St'utilizatore Ún seguita nisunu.", - "account.follows_you": "Vi seguita", "account.hide_reblogs": "Piattà spartere da @{name}", "account.link_verified_on": "A prupietà di stu ligame hè stata verificata u {date}", "account.locked_info": "U statutu di vita privata di u contu hè chjosu. U pruprietariu esamina manualmente e dumande d'abbunamentu.", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 16bf5020c50eee..e18cabcec1f194 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -38,7 +38,6 @@ "account.following": "Sledujete", "account.following_counter": "{count, plural, one {{counter} SledovanÃŊ} few {{counter} Sledovaní} many {{counter} SledovanÃŊch} other {{counter} SledovanÃŊch}}", "account.follows.empty": "Tento uÅživatel zatím nikoho nesleduje.", - "account.follows_you": "Sleduje vÃĄs", "account.go_to_profile": "Přejít na profil", "account.hide_reblogs": "SkrÃŊt boosty od @{name}", "account.in_memoriam": "In Memoriam.", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 4ecf48735e1f94..04b39904e48136 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -21,6 +21,7 @@ "account.blocked": "Blociwyd", "account.browse_more_on_origin_server": "Pori mwy ar y proffil gwreiddiol", "account.cancel_follow_request": "Tynnu cais i ddilyn", + "account.copy": "Copïo dolen i'r proffil", "account.direct": "Crybwyll yn breifat @{name}", "account.disable_notifications": "Stopiwch fy hysbysu pan fydd @{name} yn postio", "account.domain_blocked": "Parth wedi ei flocio", @@ -31,13 +32,13 @@ "account.featured_tags.last_status_never": "Dim postiadau", "account.featured_tags.title": "Prif hashnodau {name}", "account.follow": "Dilyn", + "account.follow_back": "Dilyn yn ôl", "account.followers": "Dilynwyr", "account.followers.empty": "Does neb yn dilyn y defnyddiwr hwn eto.", "account.followers_counter": "{count, plural, one {Dilynwr: {counter}} other {Dilynwyr: {counter}}}", "account.following": "Yn dilyn", "account.following_counter": "{count, plural, one {Yn dilyn: {counter}} other {Yn dilyn: {counter}}}", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", - "account.follows_you": "Yn eich dilyn chi", "account.go_to_profile": "Mynd i'r proffil", "account.hide_reblogs": "Cuddio hybiau gan @{name}", "account.in_memoriam": "Er Cof.", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Distewi hysbysiadau", "account.mute_short": "Tewi", "account.muted": "Wedi anwybyddu", + "account.mutual": "Cydgydnabod", "account.no_bio": "Dim disgrifiad wedi'i gynnig.", "account.open_original_page": "Agor y dudalen wreiddiol", "account.posts": "Postiadau", @@ -169,9 +171,9 @@ "confirmations.delete.confirm": "Dileu", "confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y post hwn?", "confirmations.delete_list.confirm": "Dileu", - "confirmations.delete_list.message": "Ydych chi'n siÅĩr eich bod eisiau dileu y rhestr hwn am byth?", + "confirmations.delete_list.message": "Ydych chi'n siÅĩr eich bod eisiau dileu'r rhestr hwn am byth?", "confirmations.discard_edit_media.confirm": "Dileu", - "confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg, eu taflu beth bynnag?", + "confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?", "confirmations.domain_block.confirm": "Blocio parth cyfan", "confirmations.domain_block.message": "Ydych chi wir, wir eisiau blocio'r holl {domain}? Fel arfer, mae blocio neu dewi pobl penodol yn broses mwy effeithiol. Fyddwch chi ddim yn gweld cynnwys o'r parth hwnnw mewn ffrydiau cyhoeddus neu yn eich hysbysiadau. Bydd eich dilynwyr o'r parth hwnnw yn cael eu ddileu.", "confirmations.edit.confirm": "Golygu", @@ -482,12 +484,15 @@ "onboarding.follows.title": "Yn boblogaidd ar Mastodon", "onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod", "onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a thueddiadau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd Ãĸ diddordebau tebyg i chi.", + "onboarding.profile.display_name": "Enw dangos", "onboarding.profile.display_name_hint": "Eich enw llawn neu'ch enw hwylâ€Ļ", + "onboarding.profile.lead": "Gallwch chi bob amser gwblhau hyn yn ddiweddarach yn y gosodiadau, lle mae hyd yn oed mwy o ddewisiadau cyfaddasu ar gael.", "onboarding.profile.note": "Bywgraffiad", "onboarding.profile.note_hint": "Gallwch @grybwyll pobl eraill neu #hashnodauâ€Ļ", "onboarding.profile.save_and_continue": "Cadw a pharhau", "onboarding.profile.title": "Gosodiad proffil", "onboarding.profile.upload_avatar": "Llwytho llun proffil", + "onboarding.profile.upload_header": "Llwytho pennyn proffil", "onboarding.share.lead": "Cofiwch ddweud wrth bobl sut y gallan nhw ddod o hyd i chi ar Mastodon!", "onboarding.share.message": "Fi yw {username} ar #Mastodon! Dewch i'm dilyn i yn {url}", "onboarding.share.next_steps": "Camau nesaf posib:", @@ -602,6 +607,7 @@ "search.quick_action.status_search": "Postiadau sy'n cyfateb i {x}", "search.search_or_paste": "Chwilio neu gludo URL", "search_popout.full_text_search_disabled_message": "Ddim ar gael ar {domain}.", + "search_popout.full_text_search_logged_out_message": "Dim ond ar gael pan wedi mewngofnodi.", "search_popout.language_code": "Cod iaith ISO", "search_popout.options": "Dewisiadau chwilio", "search_popout.quick_actions": "Gweithredoedd cyflym", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 04fc43734f360c..3bc830ad27f2fe 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Ingen indlÃĻg", "account.featured_tags.title": "{name}s fremhÃĻvede hashtags", "account.follow": "Følg", + "account.follow_back": "Følg tilbage", "account.followers": "Følgere", "account.followers.empty": "Ingen følger denne bruger endnu.", "account.followers_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}", "account.following": "Følger", "account.following_counter": "{count, plural, one {{counter} Følges} other {{counter} Følges}}", "account.follows.empty": "Denne bruger følger ikke nogen endnu.", - "account.follows_you": "Følger dig", "account.go_to_profile": "GÃĨ til profil", "account.hide_reblogs": "Skjul boosts fra @{name}", "account.in_memoriam": "Til minde om.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "SlÃĨ lyden fra for notifikationer", "account.mute_short": "Skjul (mute)", "account.muted": "Skjult (muted)", + "account.mutual": "FÃĻlles", "account.no_bio": "Ingen beskrivelse til rÃĨdighed.", "account.open_original_page": "Åbn oprindelig side", "account.posts": "IndlÃĻg", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index cf545e48c1b63d..462352750c35c2 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Keine Beiträge", "account.featured_tags.title": "Von {name} vorgestellte Hashtags", "account.follow": "Folgen", + "account.follow_back": "Ebenfalls folgen", "account.followers": "Follower", "account.followers.empty": "Diesem Profil folgt noch niemand.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}", "account.following": "Folge ich", "account.following_counter": "{count, plural, one {{counter} Folge ich} other {{counter} Folge ich}}", "account.follows.empty": "Dieses Profil folgt noch niemandem.", - "account.follows_you": "Folgt dir", "account.go_to_profile": "Profil aufrufen", "account.hide_reblogs": "Geteilte Beiträge von @{name} ausblenden", "account.in_memoriam": "Zum Andenken.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Benachrichtigungen stummschalten", "account.mute_short": "Stummschalten", "account.muted": "Stummgeschaltet", + "account.mutual": "Gegenseitig", "account.no_bio": "Keine Beschreibung verfÃŧgbar.", "account.open_original_page": "UrsprÃŧngliche Seite Ãļffnen", "account.posts": "Beiträge", @@ -61,7 +62,7 @@ "account.requested": "Die Genehmigung steht noch aus. Klicke hier, um die Follower-Anfrage zurÃŧckzuziehen", "account.requested_follow": "{name} mÃļchte dir folgen", "account.share": "Profil von @{name} teilen", - "account.show_reblogs": "Geteilte Beiträge von @{name} wieder anzeigen", + "account.show_reblogs": "Geteilte Beiträge von @{name} anzeigen", "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", "account.unblock": "Blockierung von @{name} aufheben", "account.unblock_domain": "Blockierung von {domain} aufheben", @@ -488,7 +489,7 @@ "onboarding.profile.lead": "Du kannst das später in den Einstellungen vervollständigen, wo noch mehr AnpassungsmÃļglichkeiten zur VerfÃŧgung stehen.", "onboarding.profile.note": "Über mich", "onboarding.profile.note_hint": "Du kannst andere @Profile erwähnen oder #Hashtags verwenden â€Ļ", - "onboarding.profile.save_and_continue": "Speichern und fortsetzen", + "onboarding.profile.save_and_continue": "Speichern und fortfahren", "onboarding.profile.title": "Profil einrichten", "onboarding.profile.upload_avatar": "Profilbild hochladen", "onboarding.profile.upload_header": "Titelbild hochladen", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 02ce7120a3840b..53e55fa950ad00 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -17,9 +17,11 @@ "account.badges.group": "ΟÎŧÎŦδι", "account.block": "ΑĪ€ÎŋÎēÎģÎĩΚĪƒÎŧĪŒĪ‚ @{name}", "account.block_domain": "ΑĪ€ÎŋÎēÎģÎĩΚĪƒÎŧĪŒĪ‚ Ī„ÎŋÎŧέι {domain}", + "account.block_short": "ΑĪ€ÎŋÎēÎģÎĩΚĪƒÎŧĪŒĪ‚", "account.blocked": "ΑĪ€ÎŋÎēÎģÎĩΚĪƒÎŧέÎŊÎŋĪ‚/Ρ", "account.browse_more_on_origin_server": "ΔÎĩĪ‚ Ī€ÎĩĪÎšĪƒĪƒĪŒĪ„ÎĩĪÎą ĪƒĪ„Îŋ ÎąĪĪ‡ÎšÎēĪŒ Ī€ĪÎŋĪ†Î¯Îģ", "account.cancel_follow_request": "ΑĪ€ĪŒĪƒĪ…ĪĪƒÎˇ ιΚĪ„ÎŽÎŧÎąĪ„ÎŋĪ‚ Ī€ÎąĪÎąÎēÎŋÎģÎŋĪÎ¸ÎˇĪƒÎˇĪ‚", + "account.copy": "ΑÎŊĪ„ΚÎŗĪÎąĪ†ÎŽ ĪƒĪ…ÎŊδέĪƒÎŧÎŋĪ… Ī€ĪÎŋĪ†Î¯Îģ", "account.direct": "ΙδιĪ‰Ī„ΚÎēÎŽ ÎąÎŊÎąĪ†ÎŋĪÎŦ @{name}", "account.disable_notifications": "ÎŖĪ„ÎąÎŧÎŦĪ„Îą ÎŊÎą ÎŧÎĩ ÎĩΚδÎŋĪ€ÎŋΚÎĩίĪ‚ ĪŒĪ„ÎąÎŊ δΡÎŧÎŋĪƒÎšÎĩĪÎĩΚ Îŋ @{name}", "account.domain_blocked": "Ο Ī„ÎŋÎŧέιĪ‚ ÎąĪ€ÎŋÎēÎģÎĩίĪƒĪ„ΡÎēÎĩ", @@ -30,13 +32,13 @@ "account.featured_tags.last_status_never": "ΚαÎŧÎ¯Îą ÎąÎŊÎŦĪĪ„ΡĪƒÎˇ", "account.featured_tags.title": "Ī€ĪÎŋβÎĩβÎģΡÎŧέÎŊÎĩĪ‚ ÎĩĪ„ΚÎēέĪ„ÎĩĪ‚ Ī„ÎŋĪ…/Ī„ΡĪ‚ {name}", "account.follow": "ΑÎēÎŋÎģÎŋĪÎ¸ÎˇĪƒÎĩ", + "account.follow_back": "ΑÎēÎŋÎģÎŋĪÎ¸ÎˇĪƒÎĩ ÎēιΚ ÎĩĪƒĪ", "account.followers": "ΑÎēĪŒÎģÎŋĪ…θÎŋΚ", "account.followers.empty": "ΚαÎŊÎĩίĪ‚ δÎĩÎŊ ÎąÎēÎŋÎģÎŋĪ…θÎĩί ÎąĪ…Ī„ĪŒÎŊ Ī„ÎŋÎŊ Ī‡ĪÎŽĪƒĪ„Ρ ÎąÎēĪŒÎŧÎą.", "account.followers_counter": "{count, plural, one {{counter} ΑÎēĪŒÎģÎŋĪ…θÎŋĪ‚} other {{counter} ΑÎēĪŒÎģÎŋĪ…θÎŋΚ}}", "account.following": "ΑÎēÎŋÎģÎŋĪ…θÎĩίĪ„Îĩ", "account.following_counter": "{count, plural, one {{counter} ΑÎēÎŋÎģÎŋĪ…θÎĩί} other {{counter} ΑÎēÎŋÎģÎŋĪ…θÎŋĪÎŊ}}", "account.follows.empty": "ΑĪ…Ī„ĪŒĪ‚ Îŋ Ī‡ĪÎŽĪƒĪ„ΡĪ‚ δÎĩÎŊ ÎąÎēÎŋÎģÎŋĪ…θÎĩί ÎēÎąÎŊέÎŊÎąÎŊ ÎąÎēĪŒÎŧÎą.", - "account.follows_you": "ÎŖÎĩ ÎąÎēÎŋÎģÎŋĪ…θÎĩί", "account.go_to_profile": "ΜÎĩĪ„ÎŦβιĪƒÎˇ ĪƒĪ„Îŋ Ī€ĪÎŋĪ†Î¯Îģ", "account.hide_reblogs": "ΑĪ€ĪŒÎēĪĪ…ĪˆÎˇ ÎĩÎŊΚĪƒĪ‡ĪĪƒÎĩĪ‰ÎŊ ÎąĪ€ĪŒ @{name}", "account.in_memoriam": "ΕιĪ‚ ÎŧÎŊÎŽÎŧΡÎŊ.", @@ -48,7 +50,11 @@ "account.mention": "ΑÎŊÎŦĪ†ÎĩĪÎĩ @{name}", "account.moved_to": "Ο/Η {name} έĪ‡ÎĩΚ Ī…Ī€ÎŋδÎĩίΞÎĩΚ ĪŒĪ„Κ Îŋ ÎŊέÎŋĪ‚ ÎģÎŋÎŗÎąĪÎšÎąĪƒÎŧĪŒĪ‚ Ī„ÎŋĪ…/Ī„ΡĪ‚ ÎĩίÎŊιΚ Ī„ĪŽĪÎą:", "account.mute": "ÎŖĪŽĪ€ÎąĪƒÎĩ Ī„ÎŋÎŊ @{name}", + "account.mute_notifications_short": "ÎŖίÎŗÎąĪƒÎˇ ÎĩΚδÎŋĪ€ÎŋΚΎĪƒÎĩĪ‰ÎŊ", + "account.mute_short": "ÎŖίÎŗÎąĪƒÎˇ", "account.muted": "ΑĪ€ÎŋĪƒÎšĪ‰Ī€ÎˇÎŧέÎŊÎŋĪ‚/Ρ", + "account.mutual": "ΑÎŧÎŋÎšÎ˛ÎąÎ¯ÎŋΚ", + "account.no_bio": "ΔÎĩÎŊ Ī…Ī€ÎŦĪĪ‡ÎĩΚ Ī€ÎĩĪÎšÎŗĪÎąĪ†ÎŽ.", "account.open_original_page": "ΑÎŊÎŋΚÎēĪ„ĪŒ", "account.posts": "ΤÎŋĪ…Ī„", "account.posts_with_replies": "ΤÎŋĪ…Ī„ ÎēιΚ ÎąĪ€ÎąÎŊĪ„ÎŽĪƒÎĩΚĪ‚", @@ -64,6 +70,7 @@ "account.unendorse": "Να ÎŧΡÎŊ Ī€ÎąĪÎ­Ī‡ÎĩĪ„ιΚ ĪƒĪ„Îŋ Ī€ĪÎŋĪ†Î¯Îģ", "account.unfollow": "ΆĪĪƒÎˇ ÎąÎēÎŋÎģÎŋĪÎ¸ÎˇĪƒÎˇĪ‚", "account.unmute": "ΔιαÎēÎŋĪ€ÎŽ ĪƒÎ¯ÎŗÎąĪƒÎˇĪ‚ @{name}", + "account.unmute_notifications_short": "ÎŖίÎŗÎąĪƒÎˇ ÎĩΚδÎŋĪ€ÎŋΚΎĪƒÎĩĪ‰ÎŊ", "account.unmute_short": "ΚαĪ„ÎŦĪÎŗΡĪƒÎˇ ĪƒÎ¯ÎŗÎąĪƒÎˇĪ‚", "account_note.placeholder": "ΚÎŦÎŊÎĩ ÎēÎģΚÎē ÎŗΚι ÎŊÎą Ī€ĪÎŋĪƒÎ¸Î­ĪƒÎĩΚĪ‚ ĪƒÎˇÎŧÎĩίĪ‰ĪƒÎˇ", "admin.dashboard.daily_retention": "ΠÎŋĪƒÎŋĪƒĪ„ĪŒ Ī‡ĪÎˇĪƒĪ„ĪŽÎŊ Ī€ÎŋĪ… Ī€ÎąĪÎąÎŧέÎŊÎŋĪ…ÎŊ ÎŧÎĩĪ„ÎŦ Ī„ΡÎŊ ÎĩÎŗÎŗĪÎąĪ†ÎŽ, ÎąÎŊÎŦ ΡÎŧέĪÎą", @@ -253,6 +260,9 @@ "filter_modal.select_filter.subtitle": "ΧĪÎˇĪƒÎšÎŧÎŋĪ€ÎŋΚΎĪƒĪ„Îĩ ÎŧΚι Ī…Ī€ÎŦĪĪ‡ÎŋĪ…ĪƒÎą ÎēÎąĪ„ΡÎŗÎŋĪÎ¯Îą ÎŽ δΡÎŧΚÎŋĪ…ĪÎŗÎŽĪƒĪ„Îĩ ÎŧΚι ÎŊέι", "filter_modal.select_filter.title": "ÎĻΚÎģĪ„ĪÎŦĪÎšĪƒÎŧÎą ÎąĪ…Ī„ÎŽĪ‚ Ī„ΡĪ‚ ÎąÎŊÎŦĪĪ„ΡĪƒÎˇĪ‚", "filter_modal.title.status": "ÎĻΚÎģĪ„ĪÎŦĪÎšĪƒÎŧÎą ÎŧΚιĪ‚ ÎąÎŊÎŦĪĪ„ΡĪƒÎˇĪ‚", + "firehose.all": "ΌÎģÎą", + "firehose.local": "ΑĪ…Ī„ĪŒĪ‚ Îŋ δΚιÎēÎŋÎŧΚĪƒĪ„ÎŽĪ‚", + "firehose.remote": "ΆÎģÎģÎŋΚ δΚιÎēÎŋÎŧΚĪƒĪ„έĪ‚", "follow_request.authorize": "ΕξÎŋĪ…ĪƒÎšÎŋδĪŒĪ„ΡĪƒÎĩ", "follow_request.reject": "ΑĪ€Î­ĪĪÎšĪˆÎĩ", "follow_requests.unlocked_explanation": "ΠιĪĪŒÎģÎŋ Ī€ÎŋĪ… Îŋ ÎģÎŋÎŗÎąĪÎšÎąĪƒÎŧĪŒĪ‚ ĪƒÎŋĪ… δÎĩÎŊ ÎĩίÎŊιΚ ÎēÎģÎĩΚδĪ‰ÎŧέÎŊÎŋĪ‚, Ī„Îŋ Ī€ĪÎŋĪƒĪ‰Ī€ÎšÎēĪŒ Ī„ÎŋĪ… {domain} θÎĩĪŽĪÎˇĪƒÎąÎŊ Ī€Ī‰Ī‚ ίĪƒĪ‰Ī‚ ÎŊÎą θέÎģÎĩΚĪ‚ ÎŊÎą ÎĩÎģέÎŗΞÎĩΚĪ‚ Ī‡ÎĩΚĪÎŋÎēίÎŊΡĪ„Îą ÎąĪ…Ī„ÎŦ Ī„Îą ιΚĪ„ÎŽÎŧÎąĪ„Îą ÎąÎēÎŋÎģÎŋĪÎ¸ÎˇĪƒÎˇĪ‚.", @@ -278,11 +288,15 @@ "hashtag.column_settings.tag_toggle": "ΠĪÎŋĪƒÎ¸ÎŽÎēΡ ÎĩĪ€ÎšĪ€ÎģέÎŋÎŊ Ī„ÎąÎŧĪ€ÎĩÎģĪŽÎŊ ÎŗΚι Ī„ΡÎŊ ÎēÎŋÎģĪŽÎŊÎą", "hashtag.follow": "ΠιĪÎąÎēÎŋÎģÎŋĪÎ¸ÎˇĪƒÎˇ ÎĩĪ„ΚÎēέĪ„ÎąĪ‚", "hashtag.unfollow": "ΔιαÎēÎŋĪ€ÎŽ Ī€ÎąĪÎąÎēÎŋÎģÎŋĪÎ¸ÎˇĪƒÎˇĪ‚ ÎĩĪ„ΚÎēέĪ„ÎąĪ‚", + "home.actions.go_to_suggestions": "ΒĪÎĩίĪ„Îĩ ÎŦĪ„ÎŋÎŧÎą ÎŗΚι ÎŊÎą ÎąÎēÎŋÎģÎŋĪ…θΎĪƒÎĩĪ„Îĩ", "home.column_settings.basic": "ΒαĪƒÎšÎēέĪ‚ ĪĪ…θÎŧίĪƒÎĩΚĪ‚", "home.column_settings.show_reblogs": "ΕÎŧĪ†ÎŦÎŊΚĪƒÎˇ Ī€ĪÎŋĪ‰Î¸ÎŽĪƒÎĩĪ‰ÎŊ", "home.column_settings.show_replies": "ΕÎŧĪ†ÎŦÎŊΚĪƒÎˇ ÎąĪ€ÎąÎŊĪ„ÎŽĪƒÎĩĪ‰ÎŊ", "home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. If that feels too quiet, you may want to:\nΗ Ī„ĪÎŋĪ†ÎŋδÎŋĪƒÎ¯Îą Ī„ΡĪ‚ ÎąĪĪ‡ÎšÎēÎŽĪ‚ ĪƒÎĩÎģÎ¯Î´ÎąĪ‚ ĪƒÎąĪ‚ ÎĩίÎŊιΚ έÎŊÎą ÎŧίÎŗÎŧÎą ÎąĪ€ĪŒ ÎąÎŊÎąĪĪ„ÎŽĪƒÎĩΚĪ‚ ÎŧÎĩ Ī„ΚĪ‚ ÎĩĪ„ΚÎēέĪ„ÎĩĪ‚ ÎēιΚ Ī„Îą ÎŦĪ„ÎŋÎŧÎą Ī€ÎŋĪ… ÎĩĪ€ÎšÎģέΞιĪ„Îĩ ÎŊÎą ÎąÎēÎŋÎģÎŋĪ…θÎĩίĪ„Îĩ, ÎēιΚ Ī„ΚĪ‚ ÎąÎŊÎąĪĪ„ÎŽĪƒÎĩΚĪ‚ Ī€ÎŋĪ… Ī€ĪÎŋĪ‰Î¸ÎŋĪÎŊ. ΕÎŦÎŊ ÎąĪ…Ī„ĪŒ ĪƒÎąĪ‚ Ī†ÎąÎ¯ÎŊÎĩĪ„ιΚ Ī€ÎŋÎģĪ ÎŽĪƒĪ…Ī‡Îŋ, ÎŧĪ€ÎŋĪÎĩί ÎŊÎą θέÎģÎĩĪ„Îĩ:", + "home.explore_prompt.title": "ΑĪ…Ī„ĪŒ ÎĩίÎŊιΚ Ī„Îŋ ĪƒĪ€Î¯Ī„Κ ĪƒÎąĪ‚ ĪƒĪ„Îŋ Mastodon.", "home.hide_announcements": "ΑĪ€ĪŒÎēĪĪ…ĪˆÎˇ ÎąÎŊÎąÎēÎŋΚÎŊĪŽĪƒÎĩĪ‰ÎŊ", + "home.pending_critical_update.link": "ΔÎĩίĪ„Îĩ ÎĩÎŊΡÎŧÎĩĪĪŽĪƒÎĩΚĪ‚", + "home.pending_critical_update.title": "ΚĪÎ¯ĪƒÎšÎŧΡ ÎĩÎŊΡÎŧέĪĪ‰ĪƒÎˇ ÎąĪƒĪ†ÎąÎģÎĩÎ¯ÎąĪ‚ δΚιθέĪƒÎšÎŧΡ!", "home.show_announcements": "ΕÎŧĪ†ÎŦÎŊΚĪƒÎˇ ÎąÎŊÎąÎēÎŋΚÎŊĪŽĪƒÎĩĪ‰ÎŊ", "interaction_modal.description.follow": "ΜÎĩ έÎŊÎąÎŊ ÎģÎŋÎŗÎąĪÎšÎąĪƒÎŧĪŒ Mastodon, ÎŧĪ€ÎŋĪÎĩίĪ‚ ÎŊÎą ÎąÎēÎŋÎģÎŋĪ…θΎĪƒÎĩΚĪ‚ Ī„ÎŋÎŊ/Ī„ΡÎŊ {name} ĪŽĪƒĪ„Îĩ ÎŊÎą ÎģÎąÎŧβÎŦÎŊÎĩΚĪ‚ Ī„ΚĪ‚ ÎąÎŊÎąĪĪ„ÎŽĪƒÎĩΚĪ‚ Ī„ÎŋĪ…/Ī„ΡĪ‚ ĪƒĪ„Ρ δΚÎēÎŽ ĪƒÎŋĪ… ĪÎŋÎŽ.", "interaction_modal.description.reblog": "ΜÎĩ έÎŊÎą ÎģÎŋÎŗÎąĪÎšÎąĪƒÎŧĪŒ Mastodon, ÎŧĪ€ÎŋĪÎĩίĪ‚ ÎŊÎą ÎĩÎŊΚĪƒĪ‡ĪĪƒÎĩΚĪ‚ ÎąĪ…Ī„ÎŽ Ī„ΡÎŊ ÎąÎŊÎŦĪĪ„ΡĪƒÎˇ ÎŗΚι ÎŊÎą Ī„Ρ ÎŧÎŋΚĪÎąĪƒĪ„ÎĩίĪ‚ ÎŧÎĩ Ī„ÎŋĪ…Ī‚ δΚÎēÎŋĪĪ‚ ĪƒÎŋĪ… ÎąÎēÎŋÎģÎŋĪÎ¸ÎŋĪ…Ī‚.", @@ -307,6 +321,7 @@ "keyboard_shortcuts.direct": "ÎŗΚι Ī„Îŋ ÎŦÎŊÎŋΚÎŗÎŧÎą Ī„ΡĪ‚ ĪƒĪ„ÎŽÎģΡĪ‚ ΚδΚĪ‰Ī„ΚÎēĪŽÎŊ ÎĩĪ€ÎšĪƒÎˇÎŧÎŦÎŊĪƒÎĩĪ‰ÎŊ", "keyboard_shortcuts.down": "ÎēίÎŊΡĪƒÎˇ Ī€ĪÎŋĪ‚ Ī„Îą ÎēÎŦĪ„Ī‰ ĪƒĪ„Ρ ÎģίĪƒĪ„Îą", "keyboard_shortcuts.enter": "ΕÎŧĪ†ÎŦÎŊΚĪƒÎˇ ÎąÎŊÎŦĪĪ„ΡĪƒÎˇĪ‚", + "keyboard_shortcuts.favourite": "ΑÎŗÎąĪ€ÎˇÎŧέÎŊΡ δΡÎŧÎŋĪƒÎ¯ÎĩĪ…ĪƒÎˇ", "keyboard_shortcuts.federated": "ΆÎŊÎŋΚÎŗÎŧÎą ĪÎŋÎŽĪ‚ ĪƒĪ…ÎŊÎąÎģÎģÎąÎŗĪŽÎŊ", "keyboard_shortcuts.heading": "ÎŖĪ…ÎŊĪ„ÎŋÎŧÎĩĪĪƒÎĩΚĪ‚ Ī€ÎģΡÎēĪ„ĪÎŋÎģÎŋÎŗίÎŋĪ…", "keyboard_shortcuts.home": "ΆÎŊÎŋΚÎŗÎŧÎą ĪÎŋÎŽĪ‚ ÎąĪĪ‡ÎšÎēÎŽĪ‚ ĪƒÎĩÎģÎ¯Î´ÎąĪ‚", @@ -351,6 +366,7 @@ "lists.search": "ΑÎŊÎąÎļÎŽĪ„ΡĪƒÎĩ ÎŧÎĩĪ„ιΞĪ Ī„Ī‰ÎŊ ÎąÎŊθĪĪŽĪ€Ī‰ÎŊ Ī€ÎŋĪ… ÎąÎēÎŋĪ…ÎģÎŋĪ…θÎĩίĪ‚", "lists.subheading": "Οι ÎģίĪƒĪ„ÎĩĪ‚ ĪƒÎŋĪ…", "load_pending": "{count, plural, one {# ÎŊέÎŋ ĪƒĪ„ÎŋΚĪ‡ÎĩίÎŋ} other {# ÎŊέι ĪƒĪ„ÎŋΚĪ‡ÎĩÎ¯Îą}}", + "loading_indicator.label": "ÎĻĪŒĪĪ„Ī‰ĪƒÎˇâ€Ļ", "media_gallery.toggle_visible": "{number, plural, one {ΑĪ€ĪŒÎēĪĪ…ĪˆÎˇ ÎĩΚÎēĪŒÎŊÎąĪ‚} other {ΑĪ€ĪŒÎēĪĪ…ĪˆÎˇ ÎĩΚÎēĪŒÎŊĪ‰ÎŊ}}", "moved_to_account_banner.text": "Ο ÎģÎŋÎŗÎąĪÎšÎąĪƒÎŧĪŒĪ‚ ĪƒÎŋĪ… {disabledAccount} ÎĩίÎŊιΚ Ī€ĪÎŋĪƒĪ‰ĪÎšÎŊÎŦ ÎąĪ€ÎĩÎŊÎĩĪÎŗÎŋĪ€ÎŋΚΡÎŧέÎŊÎŋĪ‚ ÎĩĪ€ÎĩΚδΎ ÎŧÎĩĪ„ÎąĪ†Î­ĪÎ¸ÎˇÎēÎĩĪ‚ ĪƒĪ„ÎŋÎŊ {movedToAccount}.", "mute_modal.duration": "ΔιÎŦĪÎēÎĩΚι", @@ -373,6 +389,7 @@ "navigation_bar.lists": "ΛίĪƒĪ„ÎĩĪ‚", "navigation_bar.logout": "ΑĪ€ÎŋĪƒĪÎŊδÎĩĪƒÎˇ", "navigation_bar.mutes": "ΑĪ€ÎŋĪƒÎšĪ‰Ī€ÎˇÎŧέÎŊÎŋΚ Ī‡ĪÎŽĪƒĪ„ÎĩĪ‚", + "navigation_bar.opened_in_classic_interface": "ΔηÎŧÎŋĪƒÎšÎĩĪĪƒÎĩΚĪ‚, ÎģÎŋÎŗÎąĪÎšÎąĪƒÎŧÎŋί ÎēιΚ ÎŦÎģÎģÎĩĪ‚ ĪƒĪ…ÎŗÎēÎĩÎēĪÎšÎŧέÎŊÎĩĪ‚ ĪƒÎĩÎģίδÎĩĪ‚ ÎąÎŊÎŋίÎŗÎŋÎŊĪ„ιΚ ÎąĪ€ĪŒ Ī€ĪÎŋÎĩĪ€ÎšÎģÎŋÎŗÎŽ ĪƒĪ„ΡÎŊ ÎēÎģÎąĪƒÎšÎēÎŽ δΚÎĩĪ€ÎąĪ†ÎŽ ΚĪƒĪ„ÎŋĪ.", "navigation_bar.personal": "ΠĪÎŋĪƒĪ‰Ī€ÎšÎēÎŦ", "navigation_bar.pins": "ΚαĪĪ†ÎšĪ„ĪƒĪ‰ÎŧέÎŊÎĩĪ‚ ÎąÎŊÎąĪĪ„ÎŽĪƒÎĩΚĪ‚", "navigation_bar.preferences": "ΠĪÎŋĪ„ΚÎŧÎŽĪƒÎĩΚĪ‚", @@ -396,6 +413,7 @@ "notifications.column_settings.admin.report": "ΝέÎĩĪ‚ ÎąÎŊÎąĪ†ÎŋĪÎ­Ī‚:", "notifications.column_settings.admin.sign_up": "ΝέÎĩĪ‚ ÎĩÎŗÎŗĪÎąĪ†Î­Ī‚:", "notifications.column_settings.alert": "ΕιδÎŋĪ€ÎŋΚΎĪƒÎĩΚĪ‚ ÎĩĪ€ÎšĪ†ÎŦÎŊÎĩΚιĪ‚ ÎĩĪÎŗÎąĪƒÎ¯ÎąĪ‚", + "notifications.column_settings.favourite": "ΑÎŗÎąĪ€ÎˇÎŧέÎŊÎą:", "notifications.column_settings.filter_bar.advanced": "ΕÎŧĪ†ÎŦÎŊΚĪƒÎˇ ĪŒÎģĪ‰ÎŊ Ī„Ī‰ÎŊ ÎēÎąĪ„ΡÎŗÎŋĪÎšĪŽÎŊ", "notifications.column_settings.filter_bar.category": "ΜĪ€ÎŦĪÎą ÎŗĪÎŽÎŗÎŋĪÎŋĪ… Ī†Î¯ÎģĪ„ĪÎŋĪ…", "notifications.column_settings.filter_bar.show_bar": "ΕÎŧĪ†ÎŦÎŊΚĪƒÎˇ ÎŧĪ€ÎŦĪÎąĪ‚ Ī†Î¯ÎģĪ„ĪÎŋĪ…", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 7745311be5a7e5..37e5efa5baddf6 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -21,6 +21,7 @@ "account.blocked": "Blocked", "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow", + "account.copy": "Copy link to profile", "account.direct": "Privately mention @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", @@ -37,7 +38,6 @@ "account.following": "Following", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", "account.go_to_profile": "Go to profile", "account.hide_reblogs": "Hide boosts from @{name}", "account.in_memoriam": "In Memoriam.", @@ -191,6 +191,7 @@ "conversation.mark_as_read": "Mark as read", "conversation.open": "View conversation", "conversation.with": "With {names}", + "copy_icon_button.copied": "Copied to clipboard", "copypaste.copied": "Copied", "copypaste.copy_to_clipboard": "Copy to clipboard", "directory.federated": "From known fediverse", @@ -222,6 +223,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_hides_collections": "This user has chosen to not make this information available", "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No posts here!", "empty_column.account_unavailable": "Profile unavailable", @@ -478,6 +480,8 @@ "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Personalize your home feed", + "onboarding.profile.discoverable": "Make my profile discoverable", + "onboarding.profile.discoverable_hint": "When you opt in to discoverability on Mastodon, your posts may appear in search results and trending, and your profile may be suggested to people with similar interests to you.", "onboarding.profile.display_name": "Display name", "onboarding.profile.display_name_hint": "Your full name or your fun nameâ€Ļ", "onboarding.profile.lead": "You can always complete this later in the settings, where even more customisation options are available.", @@ -530,6 +534,7 @@ "privacy.unlisted.short": "Unlisted", "privacy_policy.last_updated": "Last updated {date}", "privacy_policy.title": "Privacy Policy", + "recommended": "Recommended", "refresh": "Refresh", "regeneration_indicator.label": "Loadingâ€Ļ", "regeneration_indicator.sublabel": "Your home feed is being prepared!", @@ -600,6 +605,7 @@ "search.quick_action.status_search": "Posts matching {x}", "search.search_or_paste": "Search or paste URL", "search_popout.full_text_search_disabled_message": "Unavailable on {domain}.", + "search_popout.full_text_search_logged_out_message": "Only available when logged in.", "search_popout.language_code": "ISO language code", "search_popout.options": "Search options", "search_popout.quick_actions": "Quick actions", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 4cf19f92b6f26a..984b77536120e3 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "No posts", "account.featured_tags.title": "{name}'s featured hashtags", "account.follow": "Follow", + "account.follow_back": "Follow back", "account.followers": "Followers", "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following": "Following", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", "account.go_to_profile": "Go to profile", "account.hide_reblogs": "Hide boosts from @{name}", "account.in_memoriam": "In Memoriam.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Mute notifications", "account.mute_short": "Mute", "account.muted": "Muted", + "account.mutual": "Mutual", "account.no_bio": "No description provided.", "account.open_original_page": "Open original page", "account.posts": "Posts", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 537b8d0af1412f..643329ba993215 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -21,6 +21,7 @@ "account.blocked": "Blokita", "account.browse_more_on_origin_server": "Foliumi pli ĉe la originala profilo", "account.cancel_follow_request": "Nuligi peton por sekvado", + "account.copy": "Kopii ligilon al profilo", "account.direct": "Private mencii @{name}", "account.disable_notifications": "Ne plu sciigi min, kiam @{name} mesaĝas", "account.domain_blocked": "Domajno blokita", @@ -31,13 +32,13 @@ "account.featured_tags.last_status_never": "Neniu afiŝo", "account.featured_tags.title": "Rekomendataj kradvortoj de {name}", "account.follow": "Sekvi", + "account.follow_back": "Sekvu reen", "account.followers": "Sekvantoj", "account.followers.empty": "AnkoraÅ­ neniu sekvas ĉi tiun uzanton.", "account.followers_counter": "{count, plural, one{{counter} Sekvanto} other {{counter} Sekvantoj}}", "account.following": "Sekvatoj", "account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}", "account.follows.empty": "La uzanto ankoraÅ­ ne sekvas iun ajn.", - "account.follows_you": "Sekvas vin", "account.go_to_profile": "Iri al profilo", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", "account.in_memoriam": "Memore.", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Silentigu Sciigojn", "account.mute_short": "Silentigu", "account.muted": "Silentigita", + "account.mutual": "Reciproka", "account.no_bio": "Neniu priskribo estas provizita.", "account.open_original_page": "Malfermi la originalan paĝon", "account.posts": "Afiŝoj", @@ -191,6 +193,7 @@ "conversation.mark_as_read": "Marki legita", "conversation.open": "Vidi konversacion", "conversation.with": "Kun {names}", + "copy_icon_button.copied": "Kopiis al kliptabulo", "copypaste.copied": "Kopiita", "copypaste.copy_to_clipboard": "Kopii al dosierujo", "directory.federated": "El konata fediverso", @@ -202,7 +205,9 @@ "dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.", "dismissable_banner.dismiss": "Eksigi", "dismissable_banner.explore_links": "Tiuj novaÄĩoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.", + "dismissable_banner.explore_statuses": "Ĉi tioj estas afiŝoj de socia reto kiu populariĝas hodiau.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.", + "dismissable_banner.public_timeline": "Ĉi tioj estas plej lastaj publikaj afiŝoj de personoj ĉe socia reto kiu personoj ĉe {domain} sekvas.", "embed.instructions": "Enkorpigu ĉi tiun afiŝon en vian retejon per kopio de la suba kodo.", "embed.preview": "Ĝi aperos tiel:", "emoji_button.activity": "Agadoj", @@ -220,6 +225,7 @@ "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", + "empty_column.account_hides_collections": "Ĉi tiu uzanto elektis ne disponebligi ĉi tiu informon", "empty_column.account_suspended": "Konto suspendita", "empty_column.account_timeline": "Neniu afiŝo ĉi tie!", "empty_column.account_unavailable": "Profilo ne disponebla", @@ -229,6 +235,8 @@ "empty_column.direct": "Vi ankoraÅ­ ne havas privatan mencion. Kiam vi sendos aÅ­ ricevos iun, tiu aperos ĉi tie.", "empty_column.domain_blocks": "AnkoraÅ­ neniu domajno estas blokita.", "empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!", + "empty_column.favourited_statuses": "Vi ankoraÅ­ ne havas stelumitan afiŝon.", + "empty_column.favourites": "AnkoraÅ­ neniu stelumis tiun afiŝon.", "empty_column.follow_requests": "Vi ne ankoraÅ­ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.", "empty_column.followed_tags": "Vi ankoraÅ­ ne sekvas iujn kradvortojn. Kiam vi faras, ili aperos ĉi tie.", "empty_column.hashtag": "AnkoraÅ­ estas nenio per ĉi tiu kradvorto.", @@ -292,19 +300,36 @@ "hashtag.column_settings.tag_mode.any": "Iu ajn", "hashtag.column_settings.tag_mode.none": "Neniu", "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", + "hashtag.counter_by_accounts": "{count, plural,one {{counter} partoprenanto} other {{counter} partoprenantoj}}", + "hashtag.counter_by_uses": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}", + "hashtag.counter_by_uses_today": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}} hodiau", "hashtag.follow": "Sekvi la kradvorton", "hashtag.unfollow": "Ne plu sekvi la kradvorton", + "hashtags.and_other": "â€Ļkaj {count, plural,other {# pli}}", + "home.actions.go_to_explore": "Vidi kio populariĝas", "home.actions.go_to_suggestions": "Trovi homojn por sekvi", "home.column_settings.basic": "Bazaj agordoj", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", + "home.explore_prompt.body": "Via hejmafiŝaro havos miksitajn afiŝojn de kradvortoj kiujn vi elektis sekvi, personoj kiujn vi elektis sekvi, kaj afiŝoj kiujn ili suprenigis.", + "home.explore_prompt.title": "Ĉi tio estas via hejma paĝo en Mastodon.", "home.hide_announcements": "Kaŝi la anoncojn", + "home.pending_critical_update.body": "Ĝisdatigu vian servilon de Mastodon kiel eble plej baldau!", + "home.pending_critical_update.link": "Vidi ĝisdatigojn", + "home.pending_critical_update.title": "Kritika sekurĝisdatigo estas disponebla!", "home.show_announcements": "Montri anoncojn", + "interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.", "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povos sekvi {name} por vidi ties mesaĝojn en via hejmo.", "interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.", "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu mesaĝo.", + "interaction_modal.login.action": "Prenu min hejmen", + "interaction_modal.login.prompt": "Domajno de via hejma servilo, ekz. mastodon.social", + "interaction_modal.no_account_yet": "Ĉu ne estas ĉe Mastodon?", "interaction_modal.on_another_server": "En alia servilo", "interaction_modal.on_this_server": "En ĉi tiu servilo", + "interaction_modal.sign_in": "Vi ne estas ensalutita al ĉi tiu servilo.", + "interaction_modal.sign_in_hint": "Gvideto: Tio estas la retejo kie vi registris. Vi ankau povas tajpi vian plenan uzantonomon!", + "interaction_modal.title.favourite": "Stelumi la afiŝon de {name}", "interaction_modal.title.follow": "Sekvi {name}", "interaction_modal.title.reblog": "Akceli la afiŝon de {name}", "interaction_modal.title.reply": "Respondi al la afiŝo de {name}", @@ -320,6 +345,8 @@ "keyboard_shortcuts.direct": "por malfermi la kolumnon pri privataj mencioj", "keyboard_shortcuts.down": "iri suben en la listo", "keyboard_shortcuts.enter": "malfermi mesaĝon", + "keyboard_shortcuts.favourite": "Stelumi afiŝon", + "keyboard_shortcuts.favourites": "Malfermi la liston de la stelumoj", "keyboard_shortcuts.federated": "Malfermi la frataran templinion", "keyboard_shortcuts.heading": "Klavaraj mallongigoj", "keyboard_shortcuts.home": "Malfermi la hejman templinion", @@ -366,6 +393,7 @@ "lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.subheading": "Viaj listoj", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", + "loading_indicator.label": "Ŝargadoâ€Ļ", "media_gallery.toggle_visible": "{number, plural, one {Kaŝi la bildon} other {Kaŝi la bildojn}}", "moved_to_account_banner.text": "Via konto {disabledAccount} estas malvalidigita ĉar vi movis ĝin al {movedToAccount}.", "mute_modal.duration": "DaÅ­ro", @@ -382,6 +410,7 @@ "navigation_bar.domain_blocks": "Blokitaj domajnoj", "navigation_bar.edit_profile": "Redakti profilon", "navigation_bar.explore": "Esplori", + "navigation_bar.favourites": "Stelumoj", "navigation_bar.filters": "Silentigitaj vortoj", "navigation_bar.follow_requests": "Petoj de sekvado", "navigation_bar.followed_tags": "Sekvataj kradvortoj", @@ -389,6 +418,7 @@ "navigation_bar.lists": "Listoj", "navigation_bar.logout": "AdiaÅ­i", "navigation_bar.mutes": "Silentigitaj uzantoj", + "navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.", "navigation_bar.personal": "Persone", "navigation_bar.pins": "Alpinglitaj mesaĝoj", "navigation_bar.preferences": "Preferoj", @@ -398,6 +428,7 @@ "not_signed_in_indicator.not_signed_in": "Necesas saluti por aliri tiun rimedon.", "notification.admin.report": "{name} raportis {target}", "notification.admin.sign_up": "{name} kreis konton", + "notification.favourite": "{name} stelumis vian afiŝon", "notification.follow": "{name} eksekvis vin", "notification.follow_request": "{name} petis sekvi vin", "notification.mention": "{name} menciis vin", @@ -411,6 +442,7 @@ "notifications.column_settings.admin.report": "Novaj raportoj:", "notifications.column_settings.admin.sign_up": "Novaj registriĝoj:", "notifications.column_settings.alert": "Sciigoj de la retumilo", + "notifications.column_settings.favourite": "Stelumoj:", "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", "notifications.column_settings.filter_bar.category": "Rapida filtra breto", "notifications.column_settings.filter_bar.show_bar": "Montri la breton de filtrilo", @@ -428,6 +460,7 @@ "notifications.column_settings.update": "Redaktoj:", "notifications.filter.all": "Ĉiuj", "notifications.filter.boosts": "Diskonigoj", + "notifications.filter.favourites": "Stelumoj", "notifications.filter.follows": "Sekvoj", "notifications.filter.mentions": "Mencioj", "notifications.filter.polls": "Balotenketaj rezultoj", @@ -441,14 +474,29 @@ "notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn", "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.", "notifications_permission_banner.title": "Neniam preterlasas iun ajn", + "onboarding.action.back": "Prenu min reen", + "onboarding.actions.back": "Prenu min reen", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.compose.template": "Saluton #Mastodon!", "onboarding.follows.empty": "BedaÅ­rinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aÅ­ foliumi la esploran paĝon por trovi kontojn por sekvi, aÅ­ retrovi baldaÅ­.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", + "onboarding.profile.discoverable": "Trovebligi mian profilon", + "onboarding.profile.discoverable_hint": "Kiam vi aliĝi al trovebleco ĉe Mastodon, viaj afiŝoj eble aperos en serĉaj rezultoj kaj populariĝoj, kaj via profilo eble estas sugestota al personoj kun similaj intereseoj al vi.", + "onboarding.profile.display_name": "Publika nomo", + "onboarding.profile.display_name_hint": "Via plena nomo aÅ­ via kromnomoâ€Ļ", + "onboarding.profile.lead": "Vi ĉiam povas plenigi ĉi tion poste en la agordoj, kie eĉ pli da personecigagordoj estas disponeblaj.", + "onboarding.profile.note": "Sinprezento", + "onboarding.profile.note_hint": "Vi povas @mencii aliajn homojn aÅ­ #kradvortojnâ€Ļ", "onboarding.profile.save_and_continue": "Konservi kaj daÅ­rigi", + "onboarding.profile.title": "Profila fikso", + "onboarding.profile.upload_avatar": "Alŝuti profilbildon", + "onboarding.profile.upload_header": "Alŝuti profilkapbildon", + "onboarding.share.lead": "Sciigi personojn pri kiel ili povas trovi vin ĉe Mastodon!", "onboarding.share.message": "Mi estas {username} en #Mastodon! Sekvu min ĉe {url}", + "onboarding.share.next_steps": "Eblaj malantauaj paŝoj:", + "onboarding.share.title": "Disvastigi vian profilon", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", "onboarding.start.title": "Vi atingas ĝin!", @@ -460,6 +508,11 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.tips.2fa": "Ĉu vi scias? Vi povas sekurigi vian konton per efektivigi dufaktora autentigo en via kontoagordoj.", + "onboarding.tips.accounts_from_other_servers": "Ĉu vi scias? Ĉar Mastodon estas sencentra, kelkaj profiloj kiujn vi trovi estas gastigitaj ĉe aliaj serviloj kiuj ne estas via.", + "onboarding.tips.migration": "Ĉu vi scias? Se vi sentas ke {domain} ne estas bona servilelekto por vi en la estonteco, vi povas translokiĝi al alia servilo de Mastodon sen malgajni viajn sekvantojn.", + "onboarding.tips.verification": "Ĉu vi sciis? Vi povas kontroli vian konton metante ligilon al via Mastodon-profilo en via propra retejo kaj aldonante la retejon al via profilo. Neniuj kotizoj aÅ­ dokumentoj necesaj!", + "password_confirmation.exceeds_maxlength": "Pasvorto-konfirmo superas la maksimuman pasvortan longon", "password_confirmation.mismatching": "Pasvorto konfirmo ne kongruas", "picture_in_picture.restore": "Remetu ĝin", "poll.closed": "Finita", @@ -483,6 +536,7 @@ "privacy.unlisted.short": "Nelistigita", "privacy_policy.last_updated": "Laste ĝisdatigita en {date}", "privacy_policy.title": "Politiko de privateco", + "recommended": "Rekomendita", "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargadoâ€Ļ", "regeneration_indicator.sublabel": "Via abonfluo estas preparata!", @@ -500,6 +554,7 @@ "reply_indicator.cancel": "Nuligi", "report.block": "Bloki", "report.block_explanation": "Vi ne vidos iliajn afiŝojn. Ili ne povos vidi viajn afiŝojn, nek sekvi vin. Ili ne scios, ke vi blokas ilin.", + "report.categories.legal": "LaÅ­leĝa", "report.categories.other": "Aliaj", "report.categories.spam": "Trudmesaĝo", "report.categories.violation": "Enhavo malobservas unu aÅ­ plurajn servilajn regulojn", @@ -538,6 +593,7 @@ "report.unfollow": "Malsekvi @{name}", "report.unfollow_explanation": "Vi sekvas ĉi tiun konton. Por ne plu vidi ĝiajn afiŝojn en via hejma templinio, ĉesu sekvi ĝin.", "report_notification.attached_statuses": "{count, plural, one {{count} afiŝo almetita} other {{count} afiŝoj almetitaj}}", + "report_notification.categories.legal": "LaÅ­leĝa", "report_notification.categories.other": "Alia", "report_notification.categories.spam": "Trudmesaĝo", "report_notification.categories.violation": "Malobservo de la regulo", @@ -550,13 +606,19 @@ "search.quick_action.open_url": "Malfermi URL en Mastodono", "search.quick_action.status_search": "Afiŝoj kiuj kongruas kun {x}", "search.search_or_paste": "Serĉu aÅ­ algluu URL-on", + "search_popout.full_text_search_disabled_message": "Ne havebla sur {domain}.", + "search_popout.full_text_search_logged_out_message": "Disponebla nur kiam ensalutinte.", + "search_popout.language_code": "ISO-lingva kodo", + "search_popout.options": "Serĉaj opcioj", "search_popout.quick_actions": "Rapidaj agoj", "search_popout.recent": "Lastaj serĉoj", + "search_popout.specific_date": "specifa dato", "search_popout.user": "uzanto", "search_results.accounts": "Profiloj", "search_results.all": "Ĉiuj", "search_results.hashtags": "Kradvortoj", "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj", + "search_results.see_all": "Vidu ĉiujn", "search_results.statuses": "Afiŝoj", "search_results.title": "Serĉ-rezultoj por {q}", "server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)", @@ -567,6 +629,8 @@ "server_banner.server_stats": "Statistikoj de la servilo:", "sign_in_banner.create_account": "Krei konton", "sign_in_banner.sign_in": "Saluti", + "sign_in_banner.sso_redirect": "Ensalutu aÅ­ Registriĝi", + "sign_in_banner.text": "Ensalutu por sekvi profilojn aÅ­ haŝetikedojn, ŝatatajn, dividi kaj respondi afiŝojn. Vi ankaÅ­ povas interagi de via konto sur alia servilo.", "status.admin_account": "Malfermi fasadon de moderigado por @{name}", "status.admin_domain": "Malfermu moderigan interfacon por {domain}", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", @@ -583,6 +647,7 @@ "status.edited": "Redaktita {date}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.embed": "Enkorpigi", + "status.favourite": "Ŝatata", "status.filter": "Filtri ĉi tiun afiŝon", "status.filtered": "Filtrita", "status.hide": "Kaŝi mesaĝon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 4573f4ab9dc1d7..7c2e4f0d49894d 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Sin mensajes", "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", + "account.follow_back": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Todavía nadie sigue a este usuario.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural, other {Siguiendo a {counter}}}", "account.follows.empty": "Todavía este usuario no sigue a nadie.", - "account.follows_you": "Te sigue", "account.go_to_profile": "Ir al perfil", "account.hide_reblogs": "Ocultar adhesiones de @{name}", "account.in_memoriam": "Cuenta conmemorativa.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silenciar notificaciones", "account.mute_short": "Silenciar", "account.muted": "Silenciado", + "account.mutual": "Seguimiento mutuo", "account.no_bio": "Sin descripciÃŗn provista.", "account.open_original_page": "Abrir pÃĄgina original", "account.posts": "Mensajes", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 0d26afef23fbd7..fab5f6ec96e2bf 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Sin publicaciones", "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", + "account.follow_back": "Seguir tambiÊn", "account.followers": "Seguidores", "account.followers.empty": "Todavía nadie sigue a este usuario.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", "account.follows.empty": "Este usuario todavía no sigue a nadie.", - "account.follows_you": "Te sigue", "account.go_to_profile": "Ir al perfil", "account.hide_reblogs": "Ocultar retoots de @{name}", "account.in_memoriam": "En memoria.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silenciar notificaciones", "account.mute_short": "Silenciar", "account.muted": "Silenciado", + "account.mutual": "Mutuo", "account.no_bio": "Sin biografía.", "account.open_original_page": "Abrir pÃĄgina original", "account.posts": "Publicaciones", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index bbc8bcc7591e79..0d6149f5f51a2c 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Sin publicaciones", "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", + "account.follow_back": "Seguir tambiÊn", "account.followers": "Seguidores", "account.followers.empty": "Todavía nadie sigue a este usuario.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural, other {Siguiendo a {counter}}}", "account.follows.empty": "Este usuario todavía no sigue a nadie.", - "account.follows_you": "Te sigue", "account.go_to_profile": "Ir al perfil", "account.hide_reblogs": "Ocultar impulsos de @{name}", "account.in_memoriam": "Cuenta conmemorativa.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silenciar notificaciones", "account.mute_short": "Silenciar", "account.muted": "Silenciado", + "account.mutual": "Mutuo", "account.no_bio": "Sin biografía.", "account.open_original_page": "Abrir pÃĄgina original", "account.posts": "Publicaciones", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index a67aa6feeddbd3..26657d402e6dc3 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Postitusi pole", "account.featured_tags.title": "{name} esiletÃĩstetud sildid", "account.follow": "Jälgi", + "account.follow_back": "Jälgi vastu", "account.followers": "Jälgijad", "account.followers.empty": "Keegi ei jälgi veel seda kasutajat.", "account.followers_counter": "{count, plural, one {{counter} jälgija} other {{counter} jälgijat}}", "account.following": "Jälgib", "account.following_counter": "{count, plural, one {{counter} jälgitav} other {{counter} jälgitavat}}", "account.follows.empty": "See kasutaja ei jälgi veel kedagi.", - "account.follows_you": "Jälgib sind", "account.go_to_profile": "Mine profiilile", "account.hide_reblogs": "Peida @{name} jagamised", "account.in_memoriam": "In Memoriam.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Vaigista teavitused", "account.mute_short": "Vaigista", "account.muted": "Vaigistatud", + "account.mutual": "Ühine", "account.no_bio": "Kirjeldust pole lisatud.", "account.open_original_page": "Ava algne leht", "account.posts": "Postitused", @@ -606,6 +607,7 @@ "search.quick_action.status_search": "Sobivad postitused {x}", "search.search_or_paste": "Otsi vÃĩi kleebi URL", "search_popout.full_text_search_disabled_message": "Pole saadaval kohas {domain}.", + "search_popout.full_text_search_logged_out_message": "Saadaval vaid kui sisse logitud.", "search_popout.language_code": "Keele ISO-kood", "search_popout.options": "Otsimisvalikud", "search_popout.quick_actions": "Kiirtegevused", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 26ed7add1edd56..c75f697e4c2ac7 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Bidalketarik ez", "account.featured_tags.title": "{name} erabiltzailearen nabarmendutako traolak", "account.follow": "Jarraitu", + "account.follow_back": "Jarraitu bueltan", "account.followers": "Jarraitzaileak", "account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.", "account.followers_counter": "{count, plural, one {Jarraitzaile {counter}} other {{counter} jarraitzaile}}", "account.following": "Jarraitzen", "account.following_counter": "{count, plural, one {{counter} jarraitzen} other {{counter} jarraitzen}}", "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", - "account.follows_you": "Jarraitzen dizu", "account.go_to_profile": "Joan profilera", "account.hide_reblogs": "Ezkutatu @{name} erabiltzailearen bultzadak", "account.in_memoriam": "Oroimenezkoa.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Mututu jakinarazpenak", "account.mute_short": "Mututu", "account.muted": "Mutututa", + "account.mutual": "Elkarrekikoa", "account.no_bio": "Ez da deskribapenik eman.", "account.open_original_page": "Ireki jatorrizko orria", "account.posts": "Bidalketa", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 8e8930bfea5357..9f3201ca786709 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -13,7 +13,7 @@ "about.rules": "Ų‚ŲˆØ§Ų†ÛŒŲ† ÚŠØ§ØąØŗØ§Ø˛", "account.account_note_header": "یادداشØĒ", "account.add_or_remove_from_list": "اŲØ˛ŲˆØ¯Ų† یا Ø¨ØąØ¯Ø§Ø´ØĒŲ† Ø§Ø˛ ØŗیاŲ‡Ų‡â€ŒŲ‡Ø§", - "account.badges.bot": "ØąŲˆØ¨Ø§ØĒ", + "account.badges.bot": "ØŽŲˆØ¯ÚŠØ§Øą", "account.badges.group": "Ú¯ØąŲˆŲ‡", "account.block": "اŲ†Øŗداد ‎@{name}", "account.block_domain": "اŲ†Øŗداد داŲ…Ų†Ų‡Ų” {domain}", @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "بدŲˆŲ† ŲØąØŗØĒŲ‡", "account.featured_tags.title": "Ø¨ØąÚ†Øŗب‌Ų‡Ø§ÛŒ Ø¨ØąÚ¯Ø˛ÛŒØ¯Ų‡Ų” {name}", "account.follow": "ŲžÛŒâ€ŒÚ¯ØąŲØĒŲ†", + "account.follow_back": "دŲ†Ø¨Ø§Ų„ ÚŠØąØ¯Ų† Ų…ØĒŲ‚ابŲ„", "account.followers": "ŲžÛŒâ€ŒÚ¯ÛŒØąŲ†Ø¯Ú¯Ø§Ų†", "account.followers.empty": "Ų‡Ų†ŲˆØ˛ ÚŠØŗی ŲžÛŒâ€ŒÚ¯ÛŒØą ایŲ† ÚŠØ§ØąØ¨Øą Ų†ÛŒØŗØĒ.", "account.followers_counter": "{count, plural, one {{counter} ŲžÛŒâ€ŒÚ¯ÛŒØąŲ†Ø¯Ų‡} other {{counter} ŲžÛŒâ€ŒÚ¯ÛŒØąŲ†Ø¯Ų‡}}", "account.following": "ŲžÛŒ Ų…ÛŒâ€ŒÚ¯ÛŒØąÛŒØ¯", "account.following_counter": "{count, plural, one {{counter} ŲžÛŒâ€ŒÚ¯ØąŲØĒŲ‡} other {{counter} ŲžÛŒâ€ŒÚ¯ØąŲØĒŲ‡}}", "account.follows.empty": "ایŲ† ÚŠØ§ØąØ¨Øą Ų‡Ų†ŲˆØ˛ ŲžÛŒâ€ŒÚ¯ÛŒØą ÚŠØŗی Ų†ÛŒØŗØĒ.", - "account.follows_you": "ŲžÛŒâ€ŒÚ¯ÛŒØąØĒاŲ† اØŗØĒ", "account.go_to_profile": "ØąŲØĒŲ† بŲ‡ Ų†Ų…ایŲ‡", "account.hide_reblogs": "Ų†Ų‡ŲØĒŲ† ØĒŲ‚ŲˆÛŒØĒ‌Ų‡Ø§ÛŒ ‎@{name}", "account.in_memoriam": "بŲ‡ یادبŲˆØ¯.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ØŽŲ…ŲˆØ´ÛŒ ØĸگاŲ‡ÛŒâ€ŒŲ‡Ø§", "account.mute_short": "ØŽŲ…ŲˆØ´ÛŒ", "account.muted": "ØŽŲ…ŲˆØ´", + "account.mutual": "دŲˆØˇØąŲŲ‡", "account.no_bio": "Ø´ØąØ­ÛŒ ŲØąØ§Ų‡Ų… Ų†Ø´Ø¯Ų‡.", "account.open_original_page": "گشŲˆØ¯Ų† ØĩŲØ­Ų‡Ų” اØĩŲ„ÛŒ", "account.posts": "ŲØąØŗØĒŲ‡", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index e99de4d03a5b95..00df0e537a3fcf 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -21,7 +21,7 @@ "account.blocked": "Estetty", "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", "account.cancel_follow_request": "Peruuta seurantapyyntÃļ", - "account.copy": "Kopioi profiililinkki", + "account.copy": "Kopioi linkki profiiliin", "account.direct": "Mainitse @{name} yksityisesti", "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} julkaisee", "account.domain_blocked": "Verkkotunnus estetty", @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Ei julkaisuja", "account.featured_tags.title": "Käyttäjän {name} esillä pidettävät aihetunnisteet", "account.follow": "Seuraa", + "account.follow_back": "Seuraa takaisin", "account.followers": "Seuraajat", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajaa}}", "account.following": "Seuratut", "account.following_counter": "{count, plural, one {{counter} seurattu} other {{counter} seurattua}}", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", - "account.follows_you": "Seuraa sinua", "account.go_to_profile": "Avaa profiili", "account.hide_reblogs": "Piilota käyttäjän @{name} tehostukset", "account.in_memoriam": "Muistoissamme.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Mykistä ilmoitukset", "account.mute_short": "Mykistä", "account.muted": "Mykistetty", + "account.mutual": "Seuraatte toisianne", "account.no_bio": "Kuvausta ei ole annettu.", "account.open_original_page": "Avaa alkuperäinen sivu", "account.posts": "Julkaisut", @@ -192,7 +193,7 @@ "conversation.mark_as_read": "Merkitse luetuksi", "conversation.open": "Näytä keskustelu", "conversation.with": "{names} kanssa", - "copy_icon_button.copied": "Kopioitiin leikepÃļydälle", + "copy_icon_button.copied": "SisältÃļ kopioitiin leikepÃļydälle", "copypaste.copied": "Kopioitu", "copypaste.copy_to_clipboard": "Kopioi leikepÃļydälle", "directory.federated": "Koko tunnettu fediversumi", @@ -482,10 +483,10 @@ "onboarding.follows.lead": "Kokoat oman kotisyÃļtteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syÃļte on. Nämä profiilit voivat olla alkuun hyvä lähtÃļkohta — voit aina lopettaa niiden seuraamisen myÃļhemmin!", "onboarding.follows.title": "Mukauta kotisyÃļtettäsi", "onboarding.profile.discoverable": "Aseta profiilini lÃļydettäväksi", - "onboarding.profile.discoverable_hint": "Kun olet määrittänyt itsesi lÃļydettäväksi Mastodonista, julkaisusi voivat näkyä hakutuloksissa ja suosituissa kohteissa ja profiiliasi voidaan ehdottaa käyttäjille, jotka ovat kiinnostuneet samoista aiheista kuin sinä.", + "onboarding.profile.discoverable_hint": "Kun olet määrittänyt itsesi lÃļydettäväksi Mastodonista, julkaisusi voivat näkyä hakutuloksissa ja suosituissa kohteissa. Lisäksi profiiliasi voidaan ehdottaa käyttäjille, jotka ovat kiinnostuneita kanssasi samoista aiheista.", "onboarding.profile.display_name": "NäyttÃļnimi", "onboarding.profile.display_name_hint": "Koko nimesi tai lempinimesiâ€Ļ", - "onboarding.profile.lead": "Voit viimeistellä tämän milloin tahansa asetuksista, jotka tarjoavat vielä enemmän mukautusvalintoja.", + "onboarding.profile.lead": "Voit viimeistellä tämän milloin tahansa asetuksista. Sieltä lÃļydät myÃļs lisää mukautusvaihtoehtoja.", "onboarding.profile.note": "Elämäkerta", "onboarding.profile.note_hint": "Voit @mainita muita käyttäjiä tai #aihetunnisteitaâ€Ļ", "onboarding.profile.save_and_continue": "Tallenna ja jatka", @@ -606,7 +607,7 @@ "search.quick_action.status_search": "Julkaisut haulla {x}", "search.search_or_paste": "Hae tai liitä URL-osoite", "search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.", - "search_popout.full_text_search_logged_out_message": "Saatavilla vain sisäänkirjautuneena.", + "search_popout.full_text_search_logged_out_message": "Käytettävissä vain sisäänkirjautuneena.", "search_popout.language_code": "ISO-kielikoodi", "search_popout.options": "Hakuvalinnat", "search_popout.quick_actions": "Pikatoiminnot", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 0967ef424bce67..ec27c8f60e2468 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -1 +1,144 @@ -{} +{ + "about.blocks": "Mga pinatimping server", + "about.contact": "Kontak:", + "about.disclaimer": "Ang Mastodon ay software na malaya at bukas-na-pinagmulan, at isang tatak-pangkalakal ng Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Hindi makuha ang dahilan", + "about.domain_blocks.silenced.title": "Limitado", + "about.domain_blocks.suspended.title": "Suspendido", + "about.rules": "Mga alituntunin ng server", + "account.account_note_header": "Tala", + "account.add_or_remove_from_list": "I-dagdag o tanggalin mula sa mga listahan", + "account.badges.bot": "Pakusa", + "account.badges.group": "Pangkat", + "account.block": "Hadlangan si @{name}", + "account.block_domain": "Hadlangan ang domain na {domain}", + "account.block_short": "Hadlangan", + "account.blocked": "Hinadlangan", + "account.browse_more_on_origin_server": "Tingnan pa sa pangunahing profile", + "account.cancel_follow_request": "I-kansela ang pagsunod", + "account.copy": "I-sipi ang kawing sa profile", + "account.direct": "Palihim banggitin si @{name}", + "account.disable_notifications": "I-tigil ang pagpapaalam sa akin tuwing nagpopost si @{name}", + "account.domain_blocked": "Hinadlangan ang domain", + "account.edit_profile": "Baguhin ang profile", + "account.enable_notifications": "Ipaalam sa akin kapag nag-post si @{name}", + "account.endorse": "I-tampok sa profile", + "account.featured_tags.last_status_at": "Huling post noong {date}", + "account.featured_tags.last_status_never": "Walang mga post", + "account.featured_tags.title": "Nakatampok na hashtag ni {name}", + "account.follow": "Sundan", + "account.followers": "Mga tagasunod", + "account.followers.empty": "Wala pang sumusunod sa tagagamit na ito.", + "account.following": "Sinusundan", + "account.follows.empty": "Wala pang sinusundan ang tagagamit na ito.", + "account.go_to_profile": "Pumunta sa profile", + "account.hide_reblogs": "Itago ang mga pagpapalakas mula sa {name}", + "account.in_memoriam": "Sa Alaala Ni.", + "account.joined_short": "Sumali", + "account.languages": "Palitan ang mga nakasumuscribing wika", + "account.link_verified_on": "Sinuri ang pagmamay-ari ng kawing ito sa {date}", + "account.locked_info": "Nakakandado ang pagsasariling kalagayan ng account na ito. Manomano sinusuri ng may-ari kung sino ang maaaring sumunod sa kanya.", + "account.media": "Medya", + "account.mention": "Banggitin si @{name}", + "account.moved_to": "Ipinahihiwatig ni {name} na ang kanilang bagong account ngayon ay:", + "bundle_column_error.error.title": "Naku!", + "bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.", + "bundle_column_error.network.title": "Kamaliang network", + "bundle_column_error.retry": "Subukang muli", + "bundle_column_error.return": "Bumalik sa tahanan", + "bundle_column_error.routing.body": "Hindi mahanap ang hiniling na pahina. Sigurado ka ba na ang URL sa address bar ay tama?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "I-sara", + "bundle_modal_error.message": "May nangyaring mali habang kinakarga ang bahaging ito.", + "bundle_modal_error.retry": "Subukang muli", + "closed_registrations.other_server_instructions": "Dahil desentralisado ang Mastodon, pwede kang gumawa ng account sa iba pang server at makipag-ugnayan pa rin dito.", + "closed_registrations_modal.description": "Hindi pa pwedeng gumawa ng account sa {domain}, pero tandaan na hindi mo kailangan ng account partikular sa {domain} para gamitin ang Mastodon.", + "closed_registrations_modal.find_another_server": "Maghanap ng iba pang server", + "closed_registrations_modal.preamble": "Dahil desentralisado ang Mastodon, kahit saan ka pa gumawa ng account, maaari ka pa ring sumunod at makipag-ugnayan sa kahit-sino rito sa server na ito. Pwede mo pang i-host nang pasarili!", + "closed_registrations_modal.title": "Pagrerehistro sa Mastodon", + "column.about": "Tungkol dito", + "column.blocks": "Nakahadlang na mga tagagamit", + "column.bookmarks": "Mga bookmark", + "column.community": "Lokal na timeline", + "column.direct": "Mga palihim na banggit", + "column.directory": "Tingnan ang mga profile", + "column.domain_blocks": "Nakahadlang na mga domain", + "column.favourites": "Mga paborito", + "column.firehose": "Mga live feed", + "column.follow_requests": "Mga hiling para sundan", + "column.home": "Tahanan", + "column.lists": "Mga listahan", + "column.mutes": "Mga pinatahimik na tagagamit", + "column.notifications": "Mga abiso", + "column.pins": "Mga nakapaskil na post", + "column.public": "Pinagsamang timeline", + "column_back_button.label": "Bumalik", + "column_header.hide_settings": "I-tago ang mga setting", + "column_header.moveLeft_settings": "I-lipat ang hanay pakaliwa", + "column_header.moveRight_settings": "I-lipat ang hanay pakanan", + "column_header.pin": "I-paskil", + "column_header.show_settings": "Ipakita ang mga setting", + "column_header.unpin": "Tanggalin sa pagkapaskil", + "column_subheading.settings": "Mga setting", + "community.column_settings.local_only": "Lokal lamang", + "community.column_settings.media_only": "Medya Lamang", + "community.column_settings.remote_only": "Liblib lamang", + "compose.language.change": "Magpalit ng wika", + "compose.language.search": "Maghanap ng mga wika...", + "compose.published.body": "Nailathala ang post.", + "compose.published.open": "Buksan", + "compose.saved.body": "Nai-save ang post.", + "compose_form.direct_message_warning_learn_more": "Matuto pa", + "compose_form.encryption_warning": "Ang mga post sa Mastodon ay hindi naka-encrypt nang dulo-dulo. Huwag magbahagi ng anumang sensitibong impormasyon sa Mastodon.", + "compose_form.hashtag_warning": "Hindi maililista ang post na ito sa anumang hashtag dahil hindi ito nakapubliko. Mga nakapublikong post lamang ang mahahanap ayon sa hashtag.", + "copy_icon_button.copied": "Sinipi sa clipboard", + "copypaste.copied": "Sinipi", + "copypaste.copy_to_clipboard": "I-sipi sa clipboard", + "directory.federated": "Mula sa kilalang fediverse", + "directory.local": "Mula sa {domain} lamang", + "directory.new_arrivals": "Mga bagong dating", + "directory.recently_active": "Kamakailang aktibo", + "disabled_account_banner.account_settings": "Mga setting ng account", + "disabled_account_banner.text": "Ang iyong account na {disabledAccount} ay hindi pinapagana ngayon.", + "dismissable_banner.community_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong ang mga account hinohost ng {domain}.", + "dismissable_banner.dismiss": "Alisin", + "dismissable_banner.explore_links": "Ito ang mga balitang kwento na pinaka-binabahagi sa social web ngayon. Ang mga mas bagong balitang kwento na pinost ng mas marami pang mga iba't ibang tao ay tinataasan ng antas.", + "dismissable_banner.explore_statuses": "Ito ang mga sumisikat na mga post sa iba't ibang bahagi ng social web ngayon. Ang mga mas bagong post na mas marami ang mga pagpapalakas at paborito ay tinataasan ng antas.", + "dismissable_banner.explore_tags": "Ito ang mga sumisikat na mga hashtag sa iba't ibang bahagi ng social web ngayon. Ang mga hashtag ginagamit ng mas maraming mga iba't ibang tao ay tinataasan ng antas.", + "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.", + "embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.", + "embed.preview": "Ito ang magiging itsura:", + "emoji_button.activity": "Aktibidad", + "emoji_button.clear": "Linisin", + "emoji_button.custom": "Pasadya", + "emoji_button.flags": "Mga watawat", + "emoji_button.food": "Pagkain at Inumin", + "emoji_button.label": "Maglagay ng emoji", + "emoji_button.nature": "Kalikasan", + "emoji_button.not_found": "Walang mahanap na mga tugmang emoji", + "emoji_button.objects": "Mga bagay", + "emoji_button.people": "Mga tao", + "emoji_button.recent": "Madalas na ginagamit", + "emoji_button.search": "Maghanap...", + "emoji_button.search_results": "Resulta ng paghahanap", + "emoji_button.symbols": "Mga tanda", + "emoji_button.travel": "Paglakbay at Mga Lugar", + "empty_column.account_hides_collections": "Pinili ng tagagamit na ito na hindi makuha ang impormasyong ito", + "empty_column.account_suspended": "Sinuspinde ang account", + "empty_column.account_timeline": "Walang mga post dito!", + "empty_column.account_unavailable": "Hindi makuha ang profile", + "empty_column.blocks": "Hindi ka pa naghahadlang ng sinumang tagagamit.", + "empty_column.bookmarked_statuses": "Wala ka pang naka-bookmark na post. Kapag nag-bookmark ka ng isa, makikita yun dito.", + "empty_column.community": "Walang laman ang lokal na timeline. Magsulat ng anuman papubliko para makaandar tayo!", + "empty_column.direct": "Wala ka pang mga palihim na banggit. Kapag nagpadala o tumanggap ka ng isa, makikita yun dito.", + "empty_column.domain_blocks": "Wala pang nakahadlang na domain.", + "empty_column.explore_statuses": "Wala pang sumisikat sa ngayon. Balik na lang sa muli!", + "empty_column.favourited_statuses": "Wala ka pang mga paboritong post. Kapag nag-paborito ka ng isa, makikita yun dito.", + "empty_column.favourites": "Wala pang may paborito ng post na ito. Kung may sinumang nagpaborito, makikita sila rito.", + "empty_column.follow_requests": "Wala ka pang mga hiling para sundan ka. Kapag nakatanggap ka ng isa, makikita yun dito.", + "empty_column.followed_tags": "Wala ka pang sinusunod na hashtag. Kapag may sinundan ka na, makikita sila rito.", + "empty_column.hashtag": "Wala pang laman ang hashtag na ito.", + "empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.", + "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", + "empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito." +} diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 45fafd15dc00e9..94d13e8d910a1e 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Einki uppslag", "account.featured_tags.title": "Tvíkrossar hjÃĄ {name}", "account.follow": "Fylg", + "account.follow_back": "Fylg aftur", "account.followers": "Fylgjarar", "account.followers.empty": "Ongar fylgjarar enn.", "account.followers_counter": "{count, plural, one {{counter} Fylgjari} other {{counter} Fylgjarar}}", "account.following": "Fylgir", "account.following_counter": "{count, plural, one {{counter} fylgir} other {{counter} fylgja}}", "account.follows.empty": "Hesin brÃēkari fylgir ongum enn.", - "account.follows_you": "Fylgir tÃĻr", "account.go_to_profile": "Far til vanga", "account.hide_reblogs": "Fjal lyft frÃĄ @{name}", "account.in_memoriam": "In memoriam.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Sløkk frÃĄboðanir", "account.mute_short": "Doyv", "account.muted": "Sløkt/ur", + "account.mutual": "Sínamillum", "account.no_bio": "LÃŊsing vantar.", "account.open_original_page": "Opna upprunasíðuna", "account.posts": "Uppsløg", @@ -392,6 +393,7 @@ "lists.search": "Leita millum fÃŗlk, sum tÃē fylgir", "lists.subheading": "Tínir listar", "load_pending": "{count, plural, one {# nÃŊtt evni} other {# nÃŊggj evni}}", + "loading_indicator.label": "Innlesurâ€Ļ", "media_gallery.toggle_visible": "{number, plural, one {Fjal mynd} other {Fjal myndir}}", "moved_to_account_banner.text": "Konta tín {disabledAccount} er í løtuni Ãŗvirkin, tí tÃē flutti til {movedToAccount}.", "mute_modal.duration": "Tíðarbil", @@ -482,6 +484,15 @@ "onboarding.follows.title": "VÃĻlumtÃŗkt ÃĄ Mastodon", "onboarding.profile.discoverable": "Ger tað møguligt hjÃĄ øðrum at finna vangan hjÃĄ mÃĻr", "onboarding.profile.discoverable_hint": "TÃĄ tÃē jÃĄttar at onnur skulu kunna finna teg ÃĄ Mastodon, so kann henda, at postar tínir síggjast í leitiÃērslitum og rÃĄkum, og vangin hjÃĄ tÃĻr kann vera skotin upp fyri fÃŗlki við ÃĄhugamÃĄlum sum minna um tíni.", + "onboarding.profile.display_name": "Navn, sum skal vísast", + "onboarding.profile.display_name_hint": "Títt fulla navn ella títt stuttliga navnâ€Ļ", + "onboarding.profile.lead": "TÃē kanst altíð gera hetta liðugt seinni í stillingunum, har enn fleiri tillagingarmøguleikar eru tøkir.", + "onboarding.profile.note": "ÆvilÃŊsing", + "onboarding.profile.note_hint": "TÃē kanst @umrøða onnur fÃŗlk ella #frÃĄmerkiâ€Ļ", + "onboarding.profile.save_and_continue": "Goym og halt fram", + "onboarding.profile.title": "Vangauppsetan", + "onboarding.profile.upload_avatar": "Legg vangamynd upp", + "onboarding.profile.upload_header": "Legg vangahøvd upp", "onboarding.share.lead": "Lat fÃŗlk vita, hvussu tey kunnu finna teg ÃĄ Mastodon!", "onboarding.share.message": "Eg eri {username} ÃĄ #Mastodon! Kom og fylg mÃĻr ÃĄ {url}", "onboarding.share.next_steps": "Møgulig nÃĻstu stig:", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-CA.json similarity index 99% rename from app/javascript/mastodon/locales/fr-QC.json rename to app/javascript/mastodon/locales/fr-CA.json index e2067cc460659e..f2d99412d2cbee 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Aucune publication", "account.featured_tags.title": "Hashtags inclus de {name}", "account.follow": "Suivre", + "account.follow_back": "S'abonner en retour", "account.followers": "abonnÃŠÂˇe¡s", "account.followers.empty": "Personne ne suit ce compte pour l'instant.", "account.followers_counter": "{count, plural, one {{counter} AbonnÃŠÂˇe} other {{counter} AbonnÃŠÂˇe¡s}}", "account.following": "AbonnÃŠÂˇe", "account.following_counter": "{count, plural, one {{counter} Abonnement} other {{counter} Abonnements}}", "account.follows.empty": "Ce compte ne suit personne prÊsentement.", - "account.follows_you": "Vous suit", "account.go_to_profile": "Voir ce profil", "account.hide_reblogs": "Masquer les boosts de @{name}", "account.in_memoriam": "En souvenir de", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Rendre les notifications muettes", "account.mute_short": "Rendre muet", "account.muted": "MasquÃŠÂˇe", + "account.mutual": "Mutuel", "account.no_bio": "Description manquante.", "account.open_original_page": "Ouvrir la page d'origine", "account.posts": "Publications", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 7db4bf7bc4d03c..774702f98cbb86 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Aucun message", "account.featured_tags.title": "Les hashtags en vedette de {name}", "account.follow": "Suivre", + "account.follow_back": "S'abonner en retour", "account.followers": "AbonnÃŠÂˇe¡s", "account.followers.empty": "Personne ne suit cet¡te utilisateur¡rice pour l’instant.", "account.followers_counter": "{count, plural, one {{counter} AbonnÃŠÂˇe} other {{counter} AbonnÃŠÂˇe¡s}}", "account.following": "Abonnements", "account.following_counter": "{count, plural, one {{counter} Abonnement} other {{counter} Abonnements}}", "account.follows.empty": "Cet¡te utilisateur¡rice ne suit personne pour l’instant.", - "account.follows_you": "Vous suit", "account.go_to_profile": "Aller au profil", "account.hide_reblogs": "Masquer les partages de @{name}", "account.in_memoriam": "En mÊmoire de.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "DÊsactiver les alertes", "account.mute_short": "Mettre en sourdine", "account.muted": "MasquÃŠÂˇe", + "account.mutual": "Mutuel", "account.no_bio": "Aucune description fournie.", "account.open_original_page": "Ouvrir la page d'origine", "account.posts": "Messages", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 2ec4a53bfd9982..ea42ef91c0962b 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Gjin berjochten", "account.featured_tags.title": "Utljochte hashtags fan {name}", "account.follow": "Folgje", + "account.follow_back": "Weromfolgje", "account.followers": "Folgers", "account.followers.empty": "Noch net ien folget dizze brÃģker.", "account.followers_counter": "{count, plural, one {{counter} folger} other {{counter} folgers}}", "account.following": "Folgjend", "account.following_counter": "{count, plural, one {{counter} folgjend} other {{counter} folgjend}}", "account.follows.empty": "Dizze brÃģker folget noch net ien.", - "account.follows_you": "Folget jo", "account.go_to_profile": "Gean nei profyl", "account.hide_reblogs": "Boosts fan @{name} ferstopje", "account.in_memoriam": "Yn memoriam.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Meldingen negearje", "account.mute_short": "Negearje", "account.muted": "Negearre", + "account.mutual": "Jimme folgje inoar", "account.no_bio": "Gjin omskriuwing opjÃģn.", "account.open_original_page": "Orizjinele side iepenje", "account.posts": "Berjochten", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index ee6b44c8849fa9..f0f9c55549664a 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -35,7 +35,6 @@ "account.following": "Ag leanÃēint", "account.following_counter": "{count, plural, one {Ag leanÃēint cÃēntas amhÃĄin} other {Ag leanÃēint {counter} cÃēntas}}", "account.follows.empty": "Ní leanann an t-ÃēsÃĄideoir seo duine ar bith fÃŗs.", - "account.follows_you": "Do do leanÃēint", "account.go_to_profile": "TÊigh go dtí prÃŗifíl", "account.hide_reblogs": "Folaigh moltaí Ãŗ @{name}", "account.in_memoriam": "CuimhneachÃĄn.", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 91333c1a0a5773..11d83d6ceb14e8 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -37,7 +37,6 @@ "account.following": "A’ leantainn", "account.following_counter": "{count, plural, one {A’ leantainn {counter}} two {A’ leantainn {counter}} few {A’ leantainn {counter}} other {A’ leantainn {counter}}}", "account.follows.empty": "Chan eil an cleachdaiche seo a’ leantainn neach sam bith fhathast.", - "account.follows_you": "Gad leantainn", "account.go_to_profile": "Tadhail air a’ phrÃ˛ifil", "account.hide_reblogs": "Falaich na brosnachaidhean o @{name}", "account.in_memoriam": "Mar chuimhneachan.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 08d7d49776a25b..e857b6955421b2 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -20,7 +20,7 @@ "account.block_short": "Bloquear", "account.blocked": "Bloqueada", "account.browse_more_on_origin_server": "Busca mÃĄis no perfil orixinal", - "account.cancel_follow_request": "Cancelar a solicitude de seguimento", + "account.cancel_follow_request": "Desbotar a solicitude de seguimento", "account.copy": "Copiar ligazÃŗn ao perfil", "account.direct": "Mencionar de xeito privado a @{name}", "account.disable_notifications": "Deixar de notificarme cando @{name} publica", @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Sen publicaciÃŗns", "account.featured_tags.title": "Cancelos destacados de {name}", "account.follow": "Seguir", + "account.follow_back": "Seguir tamÊn", "account.followers": "Seguidoras", "account.followers.empty": "Aínda ninguÊn segue esta usuaria.", "account.followers_counter": "{count, plural, one {{counter} Seguidora} other {{counter} Seguidoras}}", "account.following": "Seguindo", "account.following_counter": "{count, plural, one {{counter} Seguindo} other {{counter} Seguindo}}", "account.follows.empty": "Esta usuaria aínda non segue a ninguÊn.", - "account.follows_you": "SÊguete", "account.go_to_profile": "Ir ao perfil", "account.hide_reblogs": "Agochar promociÃŗns de @{name}", "account.in_memoriam": "Lembranzas.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silenciar notificaciÃŗns", "account.mute_short": "Acalar", "account.muted": "Acalada", + "account.mutual": "Mutuo", "account.no_bio": "Sen descriciÃŗn.", "account.open_original_page": "Abrir pÃĄxina orixinal", "account.posts": "PublicaciÃŗns", @@ -183,7 +184,7 @@ "confirmations.mute.explanation": "Isto agocharÃĄ as sÃēas publicaciÃŗns ou as que a mencionen, mais poderÃĄ ler as tÃēas publicaciÃŗns e ser seguidora tÃēa.", "confirmations.mute.message": "Tes a certeza de querer acalar a {name}?", "confirmations.redraft.confirm": "Eliminar e reescribir", - "confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicaciÃŗn e reescribila? PerderÃĄs as comparticiÃŗns e favoritas, e as respostas ÃĄ publicaciÃŗn orixinal ficarÃĄn orfas.", + "confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicaciÃŗn e reescribila? PerderÃĄs as promociÃŗns e favorecementos, e as respostas ÃĄ publicaciÃŗn orixinal ficarÃĄn orfas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Ao responder sobrescribirÃĄs a mensaxe que estÃĄs a compor. Tes a certeza de que queres continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", @@ -203,7 +204,7 @@ "disabled_account_banner.text": "Actualmente a tÃēa conta {disabledAccount} estÃĄ desactivada.", "dismissable_banner.community_timeline": "Estas son as publicaciÃŗns mÃĄis recentes das persoas que teÃąen a sÃēa conta en {domain}.", "dismissable_banner.dismiss": "Desbotar", - "dismissable_banner.explore_links": "As persoas deste servidor e da rede descentralizada estÃĄn a falar destas historias agora mesmo.", + "dismissable_banner.explore_links": "Estas son as novas historias mÃĄs compartidas hoxe na web social. Aparecen primeiro as novas compartidas por mÃĄis persoas diferentes.", "dismissable_banner.explore_statuses": "Estas son as publicaciÃŗns da web social que hoxe estÃĄn gaÃąando popularidade. As publicaciÃŗns con mÃĄis promociÃŗns e favorecemento teÃąen puntuaciÃŗn mÃĄis alta.", "dismissable_banner.explore_tags": "Estes cancelos estÃĄn gaÃąando popularidade entre as persoas deste servidor e noutros servidores da rede descentralizada.", "dismissable_banner.public_timeline": "Estas son as publicaciÃŗns pÃēblicas mÃĄis recentes das persoas que as usuarias de {domain} estÃĄn a seguir.", @@ -239,7 +240,7 @@ "empty_column.follow_requests": "Non tes peticiÃŗns de seguimento. Cando recibas unha, amosarase aquí.", "empty_column.followed_tags": "Aínda non seguiches ningÃēn cancelo. Cando o fagas aparecerÃĄn aquí.", "empty_column.hashtag": "Aínda non hai nada con este cancelo.", - "empty_column.home": "A tÃēa cronoloxía inicial estÃĄ baleira! Segue a outras usuarias para enchela. {suggestions}", + "empty_column.home": "A tÃēa cronoloxía inicial estÃĄ baleira! Sigue a outras usuarias para enchela.", "empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.", "empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.", "empty_column.mutes": "Aínda non silenciaches a ningÃēnha usuaria.", @@ -345,7 +346,7 @@ "keyboard_shortcuts.down": "Para mover cara abaixo na listaxe", "keyboard_shortcuts.enter": "Para abrir publicaciÃŗn", "keyboard_shortcuts.favourite": "Marcar como favorita", - "keyboard_shortcuts.favourites": "Para abrir a listaxe das favoritas", + "keyboard_shortcuts.favourites": "Para abrir a lista das favoritas", "keyboard_shortcuts.federated": "Para abrir a cronoloxía federada", "keyboard_shortcuts.heading": "Atallos do teclado", "keyboard_shortcuts.home": "Para abrir a cronoloxía inicial", @@ -382,7 +383,7 @@ "lists.delete": "Eliminar listaxe", "lists.edit": "Editar listaxe", "lists.edit.submit": "Mudar o título", - "lists.exclusive": "Agocha estas publicaciÃŗns no inicio", + "lists.exclusive": "Agocha estas publicaciÃŗns no Inicio", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", "lists.replies_policy.followed": "Toda usuaria seguida", @@ -479,8 +480,8 @@ "onboarding.actions.go_to_home": "Vai ÃĄ cronoloxía de inicio", "onboarding.compose.template": "Ola #Mastodon!", "onboarding.follows.empty": "Desgraciadamente agora mesmo non hai nada que mostrar. Podes intentalo coa busca ou na pÃĄxina descubrir para atopar persoas ÃĄs que seguir, ou intentalo mÃĄis tarde.", - "onboarding.follows.lead": "Podes facer que a tÃēa cronoloxía de inicio sexa como ti a queres. Canta mÃĄis xente sigas mÃĄis interesante serÃĄ. Estes perfís poderían axudarche a comezar —sempre poderÃĄs deixar de seguilos despois!", - "onboarding.follows.title": "Popular en Mastodon", + "onboarding.follows.lead": "A cronoloxía de Inicio Ê o principal xeito de desfrutar Mastodon. Cantas mÃĄis persoas sigas mais interesante e activa serÃĄ. Para comezar, aquí tes algunhas suxestiÃŗns:", + "onboarding.follows.title": "Personaliza a cronoloxía de inicio", "onboarding.profile.discoverable": "Que o meu perfil se poida atopar", "onboarding.profile.discoverable_hint": "Cando elixes que poidan atoparte en Mastodon as tÃēas publicaciÃŗns aparecerÃĄn nos resultados das buscas e nos temas en voga, e o teu perfil podería ser suxerido para seguimento a persoas con intereses semellantes aos teus.", "onboarding.profile.display_name": "Nome pÃēblico", @@ -493,20 +494,20 @@ "onboarding.profile.upload_avatar": "Subir imaxe do perfil", "onboarding.profile.upload_header": "Subir cabeceira para o perfil", "onboarding.share.lead": "Fai que as persoas saiban como atoparte en Mastodon!", - "onboarding.share.message": "Son {username} en #Mastodon! SÊgueme en {url}", + "onboarding.share.message": "Son {username} en #Mastodon! Sígueme en {url}", "onboarding.share.next_steps": "Seguintes pasos:", "onboarding.share.title": "Comparte o teu perfil", - "onboarding.start.lead": "A tÃēa nova conta en Mastodon estÃĄ preparada. Mira de que xeito lle podes sacar proveito:", + "onboarding.start.lead": "Xa formas parte de Mastodon, unha plataforma de relaciÃŗns sociais descentralizada, Ãēnica, onde ti —e non un algoritmo— elixes o que les. AxudÃĄmosche cos primeiros pasos:", "onboarding.start.skip": "Queres omitir todo isto?", "onboarding.start.title": "Pois xa estÃĄ!", - "onboarding.steps.follow_people.body": "ConstrÃēes a tÃēa cronoloxía. Énchea con persoas interesantes.", - "onboarding.steps.follow_people.title": "Segue a {count, plural, one {unha persoa} other {# persoas}}", - "onboarding.steps.publish_status.body": "SaÃēda a todo o mundo.", + "onboarding.steps.follow_people.body": "Mastodon consiste en seguir a persoas interesantes.", + "onboarding.steps.follow_people.title": "Personaliza a tÃēa cronoloxía", + "onboarding.steps.publish_status.body": "ExprÊsate con texto, fotos, vídeos ou enquisas {emoji}", "onboarding.steps.publish_status.title": "Escribe a tÃēa primeira publicaciÃŗn", "onboarding.steps.setup_profile.body": "Ao engadir informaciÃŗn ao teu perfil Ê mÃĄis probable que teÃąas mÃĄis interacciÃŗns.", "onboarding.steps.setup_profile.title": "Personaliza o perfil", "onboarding.steps.share_profile.body": "Dille ÃĄs amizades como poden atoparte en Mastodon!", - "onboarding.steps.share_profile.title": "Comparte o teu perfil", + "onboarding.steps.share_profile.title": "Comparte o teu perfil en Mastodon", "onboarding.tips.2fa": "Sabes que? Podes protexer a tÃēa conta configurando un segundo factor de autenticaciÃŗn nos axustes. Funciona con calquera app TOTP, non precisas un nÃēmero de telÊfono!", "onboarding.tips.accounts_from_other_servers": "Sabes que? Como Mastodon Ê descentralizado, algÃēns perfís que atopes estarÃĄn en servidores diferentes ao teu. Pero podes interactuar igualmente con eles! O seu servidor Ê o que ven despois da @ no seu identificador!", "onboarding.tips.migration": "Sabes que? Se cres que {domain} non Ê o servidor axeitado para ti, podes mover a conta a outro servidor Mastodon sen perder as tÃēas seguidoras. Incluso podes hospedar o teu propio servidor!", @@ -572,7 +573,7 @@ "report.reasons.dislike": "Non me gusta", "report.reasons.dislike_description": "Non Ê algo que queiras ver", "report.reasons.legal": "É ilegal", - "report.reasons.legal_description": "Cres que atenta contra as leis do país do teu servidor", + "report.reasons.legal_description": "Cres que atenta contra as leis do país do teu pais ou servidor", "report.reasons.other": "É outra cousa", "report.reasons.other_description": "O problema non cae dentro de outras categorías", "report.reasons.spam": "É spam", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index dda92c5c9a4f20..67584572733f22 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "אין ח×Ļרו×Ļים", "account.featured_tags.title": "ה×Ēגיו×Ē המו×ĸדפו×Ē של {name}", "account.follow": "ל×ĸקוב", + "account.follow_back": "ל×ĸקוב בחזרה", "account.followers": "×ĸוקבים", "account.followers.empty": "א×Ŗ אחד לא ×ĸוקב אחר המש×Ēמ׊ הזה ×ĸדיין.", "account.followers_counter": "{count, plural,one {×ĸוקב אחד} other {{counter} ×ĸוקבים}}", "account.following": "× ×ĸקבים", "account.following_counter": "{count, plural,one {×ĸוקב אחרי {counter}}other {×ĸוקב אחרי {counter}}}", "account.follows.empty": "מ׊×Ēמ׊ זה ×ĸדיין לא ×ĸוקב אחרי א×Ŗ אחד.", - "account.follows_you": "במ×ĸקב אחריך", "account.go_to_profile": "מ×ĸבר לפרופיל", "account.hide_reblogs": "להס×Ēיר הידהודים מא×Ē @{name}", "account.in_memoriam": "פרופיל זכרון.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "הש×Ēק×Ē ה×Ēראו×Ē", "account.mute_short": "הש×Ēקה", "account.muted": "מוש×Ēק", + "account.mutual": "הדדיים", "account.no_bio": "לא סופק ×Ēיאור.", "account.open_original_page": "לפ×Ēיח×Ē ה×ĸמוד המקורי", "account.posts": "פוסטים", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 387941b5e470d5..412159bef9b7b7 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -37,7 +37,6 @@ "account.following": "ā¤ĢāĨ‰ā¤˛āĨ‹ā¤‡ā¤‚ā¤—", "account.following_counter": "{count, plural, one {{counter} ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤} other {{counter} ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤}}", "account.follows.empty": "ā¤¯ā¤š ā¤¯āĨ‚āĨ›ā¤°āĨ ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨ‹ ā¤ĢāĨ‰ā¤˛āĨ‹ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", - "account.follows_you": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ĢāĨ‰ā¤˛āĨ‹ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", "account.go_to_profile": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤ā¤", "account.hide_reblogs": "@{name} ā¤•āĨ‡ ā¤ŦāĨ‚ā¤¸āĨā¤Ÿ ā¤›āĨā¤Ēā¤žā¤ā¤‚", "account.in_memoriam": "ā¤¯ā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚", @@ -387,6 +386,7 @@ "navigation_bar.security": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} ā¤¨āĨ‡ ā¤…ā¤­āĨ€ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž", "notifications.clear": "ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤šā¤Ÿā¤žā¤", "notifications.column_settings.admin.report": "ā¤¨ā¤ˆ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ:", "notifications.column_settings.favourite": "ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž:", @@ -400,9 +400,12 @@ "notifications.column_settings.show": "ā¤•āĨ‰ā¤˛ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", "notifications.column_settings.sound": "ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤šā¤˛ā¤žā¤ā¤", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_notifications.category": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", + "notifications.column_settings.unread_notifications.highlight": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", "notifications.column_settings.update": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨:", "notifications.filter.all": "ā¤¸ā¤­āĨ€", "notifications.filter.boosts": "ā¤ŦāĨ‚ā¤¸āĨā¤Ÿ", + "notifications.filter.favourites": "ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž", "notifications.filter.follows": "ā¤ĢāĨ‰ā¤˛āĨ‹", "notifications.filter.mentions": "ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–", "notifications.filter.polls": "ā¤šāĨā¤¨ā¤žā¤ĩ ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž", @@ -417,6 +420,7 @@ "onboarding.follows.title": "Popular on Mastodon", "onboarding.profile.discoverable": "ā¤…ā¤Ēā¤¨ā¤ž ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤–āĨ‹ā¤œā¤¨āĨ‡ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤Ŧā¤¨ā¤žā¤ā¤‚", "onboarding.profile.discoverable_hint": "ā¤œā¤Ŧ ā¤†ā¤Ē ā¤ŽāĨ…ā¤¸āĨā¤ŸāĨ‹ā¤ĄāĨ‰ā¤¨ ā¤Ēā¤° ā¤Ąā¤ŋā¤¸āĨā¤•ā¤ĩā¤°āĨ‡ā¤Ŧā¤ŋā¤˛ā¤ŋā¤ŸāĨ€ ā¤šāĨā¤¨ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤¤āĨ‹ ā¤†ā¤Ēā¤•āĨ‡ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤ŸāĨā¤°āĨ‡ā¤‚ā¤Ąā¤ŋā¤‚ā¤— ā¤”ā¤° ā¤¸ā¤°āĨā¤š ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤†ā¤Ēā¤•ā¤ž ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤†ā¤Ēā¤•āĨ‡ ā¤šāĨ€ ā¤œāĨˆā¤¸āĨ‡ ā¤…ā¤•ā¤žā¤‰ā¤‚ā¤ŸāĨā¤¸ ā¤•āĨ‹ ā¤¸āĨā¤ā¤žā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "onboarding.profile.display_name": "ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤¨ā¤žā¤Ž", "onboarding.share.message": "ā¤ŽāĨˆā¤‚ {username} ā¤ŽāĨ…ā¤¸āĨā¤ŸāĨ‹ā¤ĄāĨ‰ā¤¨ ā¤Ēā¤° ā¤šāĨ‚ā¤‚! ā¤ŽāĨā¤āĨ‡ ā¤¯ā¤šā¤žā¤‚ {url} ā¤ĢāĨ‰ā¤˛āĨ‹ ā¤•ā¤°āĨ‡ā¤‚", "onboarding.share.next_steps": "ā¤†ā¤—āĨ‡ ā¤•ā¤ŋ ā¤¸ā¤‚ā¤­ā¤ĩā¤ŋā¤¤ ā¤ĩā¤ŋā¤§ā¤ŋ", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", @@ -446,6 +450,9 @@ "recommended": "ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ŋā¤¤", "refresh": "ā¤°āĨ€ā¤ĢāĨā¤°āĨ‡ā¤ļ ā¤•ā¤°āĨ‡ā¤‚", "regeneration_indicator.label": "ā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ...", + "relative_time.days": "{number}ā¤Ļā¤ŋā¤¨", + "relative_time.full.days": "{number, plural, one {# ā¤Ļā¤ŋā¤¨} other {# ā¤Ļā¤ŋā¤¨}} ā¤Ēā¤šā¤˛āĨ‡", + "relative_time.full.hours": "{number, plural,one {# ā¤˜ā¤‚ā¤Ÿā¤ž} other {# ā¤˜ā¤‚ā¤ŸāĨ‡}} ā¤Ēā¤šā¤˛āĨ‡", "relative_time.full.just_now": "ā¤…ā¤­āĨ€-ā¤…ā¤­āĨ€", "relative_time.full.minutes": "{number, plural, one {# ā¤Žā¤ŋā¤¨ā¤Ÿ} other {# ā¤Žā¤ŋā¤¨ā¤Ÿ}} ā¤Ēā¤šā¤˛āĨ‡", "relative_time.full.seconds": "{number, plural, one {# ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą} other {# ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą}} ā¤Ēā¤šā¤˛āĨ‡", @@ -455,15 +462,23 @@ "relative_time.seconds": "{number} ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą", "relative_time.today": "ā¤†ā¤œ", "reply_indicator.cancel": "ā¤°ā¤ĻāĨā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "report.block": "ā¤ŦāĨā¤˛āĨ‰ā¤•", "report.block_explanation": "ā¤†ā¤Ēā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ€ ā¤ĒāĨ‹ā¤¸āĨā¤ŸāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤–āĨ‡ā¤‚ā¤—āĨ‡āĨ¤ ā¤ĩāĨ‡ ā¤†ā¤Ēā¤•āĨ€ ā¤ĒāĨ‹ā¤¸āĨā¤ŸāĨ‡ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤– ā¤¨ā¤šāĨ€ā¤‚ ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡ ā¤”ā¤° ā¤†ā¤Ēā¤•āĨ‹ ā¤Ģā¤ŧāĨ‰ā¤˛āĨ‹ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤‰ā¤¨āĨā¤šāĨ‡ ā¤Ēā¤¤ā¤ž ā¤˛ā¤—āĨ‡ā¤—ā¤ž ā¤•ā¤ŋ ā¤ĩāĨ‡ blocked ā¤šāĨˆā¤‚āĨ¤", "report.categories.other": "ā¤…ā¤¨āĨā¤¯", "report.categories.spam": "ā¤…ā¤ĩā¤žā¤‚ā¤›ā¤ŋā¤¤", "report.category.title_account": "ā¤°āĨ‚ā¤Ēā¤°āĨ‡ā¤–ā¤ž", "report.close": "ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", "report.comment.title": "ā¤•āĨā¤¯ā¤ž ā¤”ā¤° ā¤•āĨā¤› ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Ēā¤•āĨ‹ ā¤˛ā¤—ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤šā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤?", + "report.next": "ā¤†ā¤—āĨ‡", "report.placeholder": "Type or paste additional comments", "report.reasons.dislike": "ā¤ŽāĨā¤āĨ‡ ā¤¯ā¤š ā¤Ēā¤¸ā¤‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "report.reasons.legal": "ā¤¯ā¤š ā¤…ā¤ĩāĨˆā¤§ ā¤šāĨˆ", + "report.reasons.legal_description": "ā¤†ā¤Ē ā¤Žā¤žā¤¨ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤•ā¤ŋ ā¤¯ā¤š ā¤†ā¤Ēā¤•āĨ‡ ā¤¯ā¤ž ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤•ā¤žā¤¨āĨ‚ā¤¨ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛ā¤‚ā¤˜ā¤¨ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", "report.reasons.other": "ā¤•āĨā¤› ā¤”ā¤° ā¤šāĨˆāĨ¤", + "report.reasons.violation": "ā¤¯ā¤š ā¤¸ā¤°āĨā¤ĩā¤° ā¤¨ā¤ŋā¤¯ā¤ŽāĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛ā¤‚ā¤˜ā¤¨ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "report.rules.title": "ā¤•ā¤ŋā¤¨ ā¤¨ā¤ŋā¤¯ā¤ŽāĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛ā¤‚ā¤˜ā¤¨ ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ?", + "report.statuses.subtitle": "ā¤˛ā¤žā¤—āĨ‚ ā¤šāĨ‹ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤¸ā¤­āĨ€ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "report.statuses.title": "ā¤•āĨā¤¯ā¤ž ā¤ā¤¸āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤šāĨˆā¤‚ ā¤œāĨ‹ ā¤‡ā¤¸ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ž ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨ‹ā¤‚?", "report.submit": "ā¤¸ā¤Ŧā¤Žā¤ŋā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", "report.target": "Report {target}", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", @@ -481,11 +496,24 @@ "search_results.statuses": "Toots", "sign_in_banner.sign_in": "Sign in", "status.admin_status": "Open this status in the moderation interface", + "status.block": "@{name} ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "status.bookmark": "ā¤ŦāĨā¤•ā¤Žā¤žā¤°āĨā¤•", + "status.cannot_reblog": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•āĨ‹ ā¤ŦāĨ‚ā¤¸āĨā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", "status.copy": "Copy link to status", + "status.delete": "ā¤šā¤Ÿā¤žā¤ā¤‚", + "status.detailed_status": "ā¤ĩā¤ŋā¤¸āĨā¤¤āĨƒā¤¤ ā¤ĩā¤žā¤°āĨā¤¤ā¤ž ā¤ĻāĨƒā¤ļāĨā¤¯", "status.direct": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ @{name} ā¤¸āĨ‡", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", + "status.media.open": "ā¤–āĨ‹ā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚", + "status.media.show": "ā¤Ļā¤ŋā¤–ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚", + "status.mention": "@{name} ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°āĨ‡ā¤‚", + "status.more": "ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤", + "status.mute": "@{name} ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "status.mute_conversation": "ā¤‡ā¤¸ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", "status.open": "Expand this status", + "status.pin": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ēā¤° ā¤Ēā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤‚", "status.pinned": "Pinned toot", + "status.read_more": "ā¤”ā¤° ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚", "status.reblog": "ā¤ŦāĨ‚ā¤¸āĨā¤Ÿ", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.replied_to": "{name} ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ā¤‚", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 6da7d6cd8dfd31..c535f1affc6bf4 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -1,8 +1,15 @@ { "about.blocks": "Moderirani posluÅžitelji", "about.contact": "Kontakt:", + "about.disclaimer": "Mastodon je besplatan softver otvorenog koda i zaÅĄtitni znak tvrtke Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Razlog nije dostupan", + "about.domain_blocks.preamble": "Mastodon vam općenito omogućuje pregled sadrÅžaja i interakciju s korisnicima s bilo kojeg drugog posluÅžitelja u fediverse. Ovo su iznimke napravljene na ovom posluÅžitelju.", + "about.domain_blocks.silenced.explanation": "Obično nećete vidjeti profile i sadrÅžaj s ovog posluÅžitelja, osim ako ga izričito ne potraÅžite ili uključite u njega slijedeći ga.", + "about.domain_blocks.silenced.title": "Ograničen", + "about.domain_blocks.suspended.explanation": "Podatci s ovog posluÅžitelja neće se obrađivati, pohranjivati ili razmjenjivati, ÅĄto onemogućuje bilo kakvu interakciju ili komunikaciju s korisnicima s ovog posluÅžitelja.", "about.domain_blocks.suspended.title": "Suspendiran", + "about.not_available": "Te informacije nisu dostupne na ovom posluÅžitelju.", + "about.powered_by": "Decentralizirani druÅĄtveni mediji koje pokreće {mastodon}", "about.rules": "Pravila servera", "account.account_note_header": "BiljeÅĄka", "account.add_or_remove_from_list": "Dodaj ili ukloni s liste", @@ -14,6 +21,8 @@ "account.blocked": "Blokirano", "account.browse_more_on_origin_server": "Pogledajte viÅĄe na izvornom profilu", "account.cancel_follow_request": "Withdraw follow request", + "account.copy": "Kopiraj vezu u profil", + "account.direct": "Privatno spomeni @{name}", "account.disable_notifications": "Nemoj me obavjestiti kada @{name} napravi objavu", "account.domain_blocked": "Domena je blokirana", "account.edit_profile": "Uredi profil", @@ -21,18 +30,20 @@ "account.endorse": "Istakni na profilu", "account.featured_tags.last_status_at": "Zadnji post {date}", "account.featured_tags.last_status_never": "Nema postova", + "account.featured_tags.title": "Istaknuti hashtagovi {name}", "account.follow": "Prati", + "account.follow_back": "Slijedi natrag", "account.followers": "Pratitelji", "account.followers.empty": "Nitko joÅĄ ne prati korisnika/cu.", "account.followers_counter": "{count, plural, one {{counter} pratitelj} other {{counter} pratitelja}}", "account.following": "Pratim", "account.following_counter": "{count, plural, one {{counter} praćeni} few{{counter} praćena} other {{counter} praćenih}}", "account.follows.empty": "Korisnik/ca joÅĄ ne prati nikoga.", - "account.follows_you": "Prati te", "account.go_to_profile": "Idi na profil", "account.hide_reblogs": "Sakrij boostove od @{name}", "account.in_memoriam": "U sjećanje.", "account.joined_short": "PridruÅžen", + "account.languages": "Promjeni pretplaćene jezike", "account.link_verified_on": "VlasniÅĄtvo ove poveznice provjereno je {date}", "account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih moÅže pratiti.", "account.media": "Medijski sadrÅžaj", @@ -41,11 +52,14 @@ "account.mute_notifications_short": "UtiÅĄaj obavijesti", "account.mute_short": "UtiÅĄaj", "account.muted": "UtiÅĄano", + "account.mutual": "Uzajamno", + "account.no_bio": "Nije dan opis.", "account.open_original_page": "Otvori originalnu stranicu", "account.posts": "Objave", "account.posts_with_replies": "Objave i odgovori", "account.report": "Prijavi @{name}", "account.requested": "Čekanje na potvrdu. Kliknite za poniÅĄtavanje zahtjeva za praćenje", + "account.requested_follow": "{name} zatraÅžio/la je praćenje", "account.share": "Podijeli profil @{name}", "account.show_reblogs": "PrikaÅži boostove od @{name}", "account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toota}}", @@ -55,11 +69,18 @@ "account.unendorse": "Ne ističi na profilu", "account.unfollow": "Prestani pratiti", "account.unmute": "PoniÅĄti utiÅĄavanje @{name}", + "account.unmute_notifications_short": "Uključi utiÅĄane obavijesti", "account.unmute_short": "PoniÅĄti utiÅĄavanje", "account_note.placeholder": "Kliknite za dodavanje biljeÅĄke", + "admin.dashboard.daily_retention": "Stopa zadrÅžavanja korisnika po danu nakon prijave", + "admin.dashboard.monthly_retention": "Stopa zadrÅžavanja korisnika po mjesecu nakon prijave", "admin.dashboard.retention.average": "Prosječno", "admin.dashboard.retention.cohort": "Mjesec prijave", "admin.dashboard.retention.cohort_size": "Novi korisnici", + "admin.impact_report.instance_accounts": "Profili računa koji bi ovo izbrisali", + "admin.impact_report.instance_followers": "Sljedbenici koje bi izgubili naÅĄi korisnici", + "admin.impact_report.instance_follows": "Sljedbenici koje bi izgubili njihovi korisnici", + "admin.impact_report.title": "SaÅžetak učinka", "alert.rate_limited.message": "Molimo pokuÅĄajte nakon {retry_time, time, medium}.", "alert.rate_limited.title": "Ograničenje učestalosti", "alert.unexpected.message": "Dogodila se neočekivana greÅĄka.", @@ -69,10 +90,14 @@ "audio.hide": "Sakrij audio", "autosuggest_hashtag.per_week": "{count} tjedno", "boost_modal.combo": "MoÅžete pritisnuti {combo} kako biste preskočili ovo sljedeći put", + "bundle_column_error.copy_stacktrace": "Kopiraj izvjeÅĄÄ‡e o pogreÅĄci", + "bundle_column_error.error.body": "ZaraÅženu stranicu nije moguće prikazati. To bi moglo biti zbog pogreÅĄke u naÅĄem kodu ili problema s kompatibilnoÅĄÄ‡u preglednika.", "bundle_column_error.error.title": "Oh, ne!", + "bundle_column_error.network.body": "DoÅĄlo je do pogreÅĄke prilikom pokuÅĄaja učitavanja ove stranice. Razlog moÅže biti privremeni problem s internetskom vezom ili ovim posluÅžiteljem.", "bundle_column_error.network.title": "GreÅĄka mreÅže", "bundle_column_error.retry": "PokuÅĄajte ponovno", "bundle_column_error.return": "Na glavnu", + "bundle_column_error.routing.body": "TraÅženu stranicu nije moguće pronaći. Jeste li sigurni da je URL u adresnoj traci točan?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Zatvori", "bundle_modal_error.message": "NeÅĄto je poÅĄlo po zlu tijekom učitavanja ove komponente.", @@ -172,6 +197,7 @@ "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Evo kako će izgledati:", "emoji_button.activity": "Aktivnost", + "emoji_button.clear": "ObriÅĄi", "emoji_button.custom": "Prilagođeno", "emoji_button.flags": "Zastave", "emoji_button.food": "Hrana i piće", @@ -212,6 +238,7 @@ "explore.trending_links": "Novosti", "explore.trending_statuses": "Objave", "explore.trending_tags": "Hashtagovi", + "filter_modal.added.context_mismatch_title": "Nepodudaranje konteksta!", "filter_modal.added.review_and_configure_title": "Postavke filtara", "filter_modal.added.title": "Filtar dodan!", "filter_modal.select_filter.prompt_new": "Nova kategorija: {name}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 386b15811a9739..0d50e36feb5b0d 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Nincs bejegyzÊs", "account.featured_tags.title": "{name} kiemelt hashtagjei", "account.follow": "KÃļvetÊs", + "account.follow_back": "ViszontkÃļvetÊs", "account.followers": "KÃļvető", "account.followers.empty": "Ezt a felhasznÃĄlÃŗt mÊg senki sem kÃļveti.", "account.followers_counter": "{count, plural, one {{counter} KÃļvető} other {{counter} KÃļvető}}", "account.following": "KÃļvetve", "account.following_counter": "{count, plural, one {{counter} KÃļvetett} other {{counter} KÃļvetett}}", "account.follows.empty": "Ez a felhasznÃĄlÃŗ mÊg senkit sem kÃļvet.", - "account.follows_you": "KÃļvet tÊged", "account.go_to_profile": "UgrÃĄs a profilhoz", "account.hide_reblogs": "@{name} megtolÃĄsainak elrejtÊse", "account.in_memoriam": "EmlÊkÃŧnkben.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ÉrtesítÊsek nÊmítÃĄsa", "account.mute_short": "NÊmítÃĄs", "account.muted": "NÊmítva", + "account.mutual": "KÃļlcsÃļnÃļs", "account.no_bio": "LeírÃĄs nincs megadva.", "account.open_original_page": "Eredeti oldal megnyitÃĄsa", "account.posts": "BejegyzÊsek", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index f2548c7d3a9619..835105218d5218 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -32,7 +32,6 @@ "account.following": "ՀÕĨÕŋÕĨÖ‚ÕĄÕŽ", "account.following_counter": "{count, plural, one {{counter} ՀÕĨÕŋÕĨÖ‚ÕĄÕŽ} other {{counter} ՀÕĨÕŋÕĨÖ‚ÕĄÕŽ}}", "account.follows.empty": "ÔąÕĩÕŊ օÕŖÕŋÕĄÕŋէրը Õ¤ÕĨÕŧ Õ¸Õš Õ´Õ§Õ¯ÕĢ ÕšÕĢ Õ°ÕĨÕŋÕĨւում։", - "account.follows_you": "ՀÕĨÕŋÕĨւում Õ§ քÕĨÕĻ", "account.go_to_profile": "ÔŗÕļÕĄÕŦ ÕĄÕļÕąÕļÕĄÕ¯ÕĄÕļ Õ°ÕĄÕˇÕĢւ", "account.hide_reblogs": "ÔšÕĄÖ„ÖÕļÕĨÕŦ @{name}֊ÕĢ ÕŋÕĄÖ€ÕĄÕŽÕĄÕŽÕļÕĨրը", "account.joined_short": "ՄÕĢÕĄÖÕĨÕŦ Õ§", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json new file mode 100644 index 00000000000000..a660eb77ff592b --- /dev/null +++ b/app/javascript/mastodon/locales/ia.json @@ -0,0 +1,321 @@ +{ + "about.blocks": "Servitores moderate", + "about.contact": "Contacto:", + "about.disclaimer": "Mastodon es software libere, de codice aperte, e un marca de Mastodon gGmbH.", + "about.rules": "Regulas del servitor", + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Adder o remover ab listas", + "account.badges.group": "Gruppo", + "account.block": "Blocar @{name}", + "account.block_short": "Blocar", + "account.blocked": "Blocate", + "account.browse_more_on_origin_server": "Navigar plus sur le profilo original", + "account.copy": "Copiar ligamine a profilo", + "account.domain_blocked": "Dominio blocate", + "account.edit_profile": "Modificar profilo", + "account.enable_notifications": "Notifica me quando @{name} publica", + "account.endorse": "Evidentiar sur le profilo", + "account.featured_tags.last_status_at": "Ultime message in {date}", + "account.featured_tags.last_status_never": "Necun messages", + "account.featured_tags.title": "Hashtags eminente de {name}", + "account.follow": "Sequer", + "account.follow_back": "Sequer etiam", + "account.followers": "Sequitores", + "account.followers.empty": "Iste usator ancora non ha sequitores.", + "account.followers_counter": "{count, plural, one {{counter} sequitor} other {{counter} sequitores}}", + "account.following": "Sequente", + "account.go_to_profile": "Vader al profilo", + "account.hide_reblogs": "Celar boosts de @{name}", + "account.languages": "Cambiar le linguas subscribite", + "account.link_verified_on": "Le proprietate de iste ligamine esseva verificate le {date}", + "account.locked_info": "Le stato de confidentialitate de iste conto es definite a blocate. Le proprietario revisa manualmente qui pote sequer lo.", + "account.mention": "Mentionar @{name}", + "account.moved_to": "{name} indicava que lor nove conto ora es:", + "account.mute": "Silentiar @{name}", + "account.mute_notifications_short": "Silentiar le notificationes", + "account.mute_short": "Silentiar", + "account.muted": "Silentiate", + "account.no_bio": "Nulle description fornite.", + "account.open_original_page": "Aperir le pagina original", + "account.posts": "Messages", + "account.posts_with_replies": "Messages e responsas", + "account.share": "Compartir profilo de @{name}", + "account.show_reblogs": "Monstrar responsas de @{name}", + "account.unblock": "Disblocar @{name}", + "account.unblock_domain": "Disblocar dominio {domain}", + "account.unblock_short": "Disblocar", + "account.unendorse": "Non evidentiar sur le profilo", + "account.unmute": "Non plus silentiar @{name}", + "account.unmute_notifications_short": "Non plus silentiar le notificationes", + "account.unmute_short": "Non plus silentiar", + "account_note.placeholder": "Clicca pro adder un nota", + "admin.dashboard.retention.cohort_size": "Nove usatores", + "admin.impact_report.instance_followers": "Sequitores que nostre usatores poterea perder", + "admin.impact_report.instance_follows": "Sequitores que lor usatores poterea perder", + "alert.rate_limited.message": "Retenta depost {retry_time, time, medium}.", + "alert.unexpected.message": "Ocurreva un error inexpectate.", + "announcement.announcement": "Annuncio", + "audio.hide": "Celar audio", + "autosuggest_hashtag.per_week": "{count} per septimana", + "bundle_column_error.network.title": "Error de rete", + "bundle_column_error.retry": "Tentar novemente", + "bundle_column_error.return": "Retornar al initio", + "bundle_modal_error.close": "Clauder", + "bundle_modal_error.retry": "Tentar novemente", + "closed_registrations_modal.find_another_server": "Trovar altere servitor", + "column.about": "A proposito de", + "column.blocks": "Usatores blocate", + "column.bookmarks": "Marcapaginas", + "column.community": "Chronologia local", + "column.direct": "Mentiones private", + "column.directory": "Navigar profilos", + "column.domain_blocks": "Dominios blocate", + "column.favourites": "Favoritos", + "column.firehose": "Fluxos in directe", + "column.home": "Initio", + "column.lists": "Listas", + "column.mutes": "Usatores silentiate", + "column.notifications": "Notificationes", + "column.public": "Chronologia federate", + "column_header.hide_settings": "Celar le parametros", + "column_header.moveLeft_settings": "Mover columna al sinistra", + "column_header.moveRight_settings": "Mover columna al dextra", + "column_header.show_settings": "Monstrar le parametros", + "column_subheading.settings": "Parametros", + "compose.language.change": "Cambiar le lingua", + "compose.language.search": "Cercar linguas...", + "compose.published.body": "Message publicate.", + "compose.published.open": "Aperir", + "compose.saved.body": "Message salvate.", + "compose_form.direct_message_warning_learn_more": "Apprender plus", + "compose_form.lock_disclaimer": "Tu conto non es {locked}. Quicunque pote sequer te pro vider tu messages solo pro sequitores.", + "compose_form.lock_disclaimer.lock": "blocate", + "compose_form.poll.add_option": "Adder un option", + "compose_form.poll.remove_option": "Remover iste option", + "compose_form.publish": "Publicar", + "compose_form.publish_form": "Nove message", + "compose_form.publish_loud": "{publish}!", + "compose_form.save_changes": "Salvar le cambiamentos", + "compose_form.spoiler.marked": "Remover advertimento de contento", + "compose_form.spoiler.unmarked": "Adder advertimento de contento", + "compose_form.spoiler_placeholder": "Scribe tu advertimento hic", + "confirmation_modal.cancel": "Cancellar", + "confirmations.block.confirm": "Blocar", + "confirmations.delete.confirm": "Deler", + "confirmations.delete.message": "Es tu secur que tu vole deler iste message?", + "confirmations.delete_list.confirm": "Deler", + "confirmations.delete_list.message": "Es tu secur que tu vole deler permanentemente iste lista?", + "confirmations.domain_block.confirm": "Blocar le dominio complete", + "confirmations.edit.confirm": "Modificar", + "confirmations.logout.confirm": "Clauder le session", + "confirmations.logout.message": "Es tu secur que tu vole clauder le session?", + "confirmations.mute.confirm": "Silentiar", + "confirmations.mute.message": "Es tu secur que tu vole silentiar {name}?", + "confirmations.reply.confirm": "Responder", + "conversation.delete": "Deler conversation", + "conversation.mark_as_read": "Marcar como legite", + "conversation.open": "Vider conversation", + "conversation.with": "Con {names}", + "copy_icon_button.copied": "Copiate al area de transferentia", + "copypaste.copied": "Copiate", + "copypaste.copy_to_clipboard": "Copiar al area de transferentia", + "directory.federated": "Ab le fediverso cognoscite", + "directory.local": "Solmente ab {domain}", + "directory.recently_active": "Recentemente active", + "disabled_account_banner.account_settings": "Parametros de conto", + "disabled_account_banner.text": "Tu conto {disabledAccount} es actualmente disactivate.", + "dismissable_banner.dismiss": "Dimitter", + "emoji_button.activity": "Activitate", + "emoji_button.clear": "Rader", + "emoji_button.custom": "Personalisate", + "emoji_button.recent": "Frequentemente usate", + "emoji_button.search": "Cercar...", + "emoji_button.search_results": "Resultatos de recerca", + "empty_column.account_suspended": "Conto suspendite", + "empty_column.account_timeline": "Nulle messages hic!", + "empty_column.account_unavailable": "Profilo non disponibile", + "empty_column.blocks": "Tu non ha blocate alcun usator ancora.", + "errors.unexpected_crash.report_issue": "Signalar un defecto", + "explore.search_results": "Resultatos de recerca", + "explore.title": "Explorar", + "explore.trending_links": "Novas", + "explore.trending_statuses": "Messages", + "explore.trending_tags": "Hashtags", + "filter_modal.added.review_and_configure_title": "Parametros de filtro", + "filter_modal.added.settings_link": "pagina de parametros", + "filter_modal.added.short_explanation": "Iste message esseva addite al sequente categoria de filtros: {title}.", + "filter_modal.added.title": "Filtro addite!", + "filter_modal.select_filter.prompt_new": "Nove categoria: {name}", + "filter_modal.select_filter.search": "Cercar o crear", + "filter_modal.select_filter.title": "Filtrar iste message", + "filter_modal.title.status": "Filtrar un message", + "firehose.all": "Toto", + "firehose.local": "Iste servitor", + "firehose.remote": "Altere servitores", + "footer.about": "A proposito de", + "footer.directory": "Directorio de profilos", + "footer.get_app": "Obtene le application", + "footer.keyboard_shortcuts": "Accessos directe de claviero", + "footer.privacy_policy": "Politica de confidentialitate", + "footer.source_code": "Vider le codice fonte", + "footer.status": "Stato", + "generic.saved": "Salvate", + "getting_started.heading": "Prime passos", + "hashtag.column_header.tag_mode.all": "e {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_settings.select.no_options_message": "Nulle suggestiones trovate", + "hashtag.column_settings.select.placeholder": "Insere hashtagsâ€Ļ", + "hashtag.follow": "Sequer hashtag", + "home.column_settings.show_reblogs": "Monstrar boosts", + "home.column_settings.show_replies": "Monstrar responsas", + "home.hide_announcements": "Celar annuncios", + "home.pending_critical_update.body": "Actualisa tu servitor de Mastodon le plus tosto possibile!", + "home.pending_critical_update.link": "Vider actualisationes", + "home.show_announcements": "Monstrar annuncios", + "interaction_modal.no_account_yet": "Non sur Mstodon?", + "interaction_modal.on_another_server": "In un servitor differente", + "interaction_modal.on_this_server": "In iste servitor", + "interaction_modal.title.follow": "Sequer {name}", + "interaction_modal.title.reblog": "Facer boost al message de {name}", + "interaction_modal.title.reply": "Responder al message de {name}", + "keyboard_shortcuts.blocked": "Aperir lista de usatores blocate", + "keyboard_shortcuts.boost": "Facer boost al message", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.enter": "Aperir message", + "keyboard_shortcuts.favourites": "Aperir lista de favoritos", + "keyboard_shortcuts.federated": "Aperir le chronologia federate", + "keyboard_shortcuts.heading": "Accessos directe de claviero", + "keyboard_shortcuts.home": "Aperir le chronologia de initio", + "keyboard_shortcuts.local": "Aperir le chronologia local", + "keyboard_shortcuts.muted": "Aperir lista de usatores silentiate", + "keyboard_shortcuts.my_profile": "Aperir tu profilo", + "keyboard_shortcuts.notifications": "Aperir columna de notificationes", + "keyboard_shortcuts.reply": "Responder al message", + "keyboard_shortcuts.spoilers": "Monstrar/celar le campo CW", + "keyboard_shortcuts.toot": "Initiar un nove message", + "lightbox.close": "Clauder", + "lightbox.next": "Sequente", + "lightbox.previous": "Precedente", + "link_preview.author": "Per {name}", + "lists.account.add": "Adder al lista", + "lists.account.remove": "Remover ab le lista", + "lists.delete": "Deler lista", + "lists.edit": "Modificar lista", + "lists.edit.submit": "Cambiar titulo", + "lists.exclusive": "Celar iste messages ab le initio", + "lists.new.create": "Adder lista", + "lists.new.title_placeholder": "Nove titulo del lista", + "lists.replies_policy.title": "Monstrar responsas a:", + "lists.subheading": "Tu listas", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Celar notificationes de iste usator?", + "navigation_bar.about": "A proposito de", + "navigation_bar.advanced_interface": "Aperir in un interfacie web avantiate", + "navigation_bar.blocks": "Usatores blocate", + "navigation_bar.bookmarks": "Marcapaginas", + "navigation_bar.community_timeline": "Chronologia local", + "navigation_bar.direct": "Mentiones private", + "navigation_bar.discover": "Discoperir", + "navigation_bar.domain_blocks": "Dominios blocate", + "navigation_bar.edit_profile": "Modificar profilo", + "navigation_bar.favourites": "Favoritos", + "navigation_bar.filters": "Parolas silentiate", + "navigation_bar.lists": "Listas", + "navigation_bar.logout": "Clauder le session", + "navigation_bar.mutes": "Usatores silentiate", + "navigation_bar.preferences": "Preferentias", + "navigation_bar.public_timeline": "Chronologia federate", + "navigation_bar.search": "Cercar", + "navigation_bar.security": "Securitate", + "notification.update": "{name} modificava un message", + "notifications.clear": "Rader notificationes", + "notifications.column_settings.alert": "Notificationes de scriptorio", + "notifications.column_settings.filter_bar.advanced": "Monstrar tote le categorias", + "notifications.column_settings.follow": "Nove sequitores:", + "notifications.column_settings.mention": "Mentiones:", + "notifications.column_settings.push": "Notificationes push", + "notifications.column_settings.sound": "Reproducer sono", + "notifications.column_settings.status": "Nove messages:", + "notifications.filter.all": "Toto", + "notifications.filter.favourites": "Favoritos", + "notifications.filter.mentions": "Mentiones", + "notifications.grant_permission": "Conceder permission.", + "notifications.group": "{count} notificationes", + "onboarding.compose.template": "Salute #Mastodon!", + "onboarding.profile.save_and_continue": "Salvar e continuar", + "onboarding.share.next_steps": "Sequente passos possibile:", + "onboarding.share.title": "Compartir tu profilo", + "onboarding.steps.follow_people.title": "Personalisa tu fluxo de initio", + "onboarding.steps.publish_status.title": "Face tu prime message", + "onboarding.steps.setup_profile.title": "Personalisa tu profilo", + "onboarding.steps.share_profile.title": "Compartir tu profilo de Mastodon", + "poll.closed": "Claudite", + "poll.reveal": "Vider le resultatos", + "privacy.change": "Cambiar privacitate del message", + "privacy.private.long": "Visibile solmente pro sequitores", + "privacy.public.long": "Visibile pro totos", + "privacy.public.short": "Public", + "privacy_policy.last_updated": "Ultime actualisation {date}", + "privacy_policy.title": "Politica de confidentialitate", + "relative_time.just_now": "ora", + "relative_time.today": "hodie", + "reply_indicator.cancel": "Cancellar", + "report.block": "Blocar", + "report.categories.other": "Alteres", + "report.category.title_account": "profilo", + "report.category.title_status": "message", + "report.close": "Preste", + "report.mute": "Silentiar", + "report.next": "Sequente", + "report.placeholder": "Commentos additional", + "report.reasons.dislike": "Non me place", + "report_notification.categories.other": "Alteres", + "search.quick_action.go_to_account": "Vader al profilo {x}", + "search.quick_action.go_to_hashtag": "Vader al hashtag {x}", + "search.quick_action.open_url": "Aperir URL in Mastodon", + "search_popout.full_text_search_disabled_message": "Non disponibile sur {domain}.", + "search_popout.language_code": "Codice de lingua ISO", + "search_popout.options": "Optiones de recerca", + "search_popout.quick_actions": "Actiones rapide", + "search_popout.recent": "Recercas recente", + "search_popout.user": "usator", + "search_results.accounts": "Profilos", + "search_results.hashtags": "Hashtags", + "search_results.see_all": "Vider toto", + "search_results.statuses": "Messages", + "server_banner.learn_more": "Apprender plus", + "sign_in_banner.create_account": "Crear un conto", + "sign_in_banner.sign_in": "Initiar le session", + "status.block": "Blocar @{name}", + "status.copy": "Copiar ligamine a message", + "status.delete": "Deler", + "status.direct_indicator": "Mention private", + "status.edit": "Modificar", + "status.filter": "Filtrar iste message", + "status.hide": "Celar le message", + "status.history.created": "create per {name} le {date}", + "status.history.edited": "modificate per {name} le {date}", + "status.media.open": "Clicca pro aperir", + "status.media.show": "Clicca pro monstrar", + "status.more": "Plus", + "status.mute_conversation": "Silentiar conversation", + "status.read_more": "Leger plus", + "status.share": "Compartir", + "status.translate": "Traducer", + "status.translated_from_with": "Traducite ab {lang} usante {provider}", + "tabs_bar.home": "Initio", + "tabs_bar.notifications": "Notificationes", + "timeline_hint.resources.statuses": "Messages ancian", + "trends.trending_now": "Ora in tendentias", + "upload_form.undo": "Deler", + "upload_modal.choose_image": "Seliger un imagine", + "upload_modal.detect_text": "Deteger texto ab un pictura", + "video.close": "Clauder le video", + "video.download": "Discargar le file", + "video.fullscreen": "Schermo plen", + "video.hide": "Celar video", + "video.mute": "Silentiar le sono", + "video.pause": "Pausa", + "video.play": "Reproducer", + "video.unmute": "Non plus silentiar le sono" +} diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 8ecf36125d8bd0..5af20a97f7bc8c 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -37,7 +37,6 @@ "account.following": "Mengikuti", "account.following_counter": "{count, plural, other {{counter} Mengikuti}}", "account.follows.empty": "Pengguna ini belum mengikuti siapa pun.", - "account.follows_you": "Mengikuti Anda", "account.go_to_profile": "Buka profil", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", "account.in_memoriam": "Mengenang.", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json new file mode 100644 index 00000000000000..8579fc89c65604 --- /dev/null +++ b/app/javascript/mastodon/locales/ie.json @@ -0,0 +1,746 @@ +{ + "about.blocks": "Moderat servitores", + "about.contact": "Contacter:", + "about.disclaimer": "Mastodon es programmatura líber e con fonte apert, e un marca de fabrica de Mastodon dGmbH.", + "about.domain_blocks.no_reason_available": "Rason ne disponibil", + "about.domain_blocks.preamble": "Mastodon generalmen possibilisa regardar li contenete de, e li interaction con usatores de quelcunc altri servitor in li fediverse. Ci trova se li exceptiones fat de ti-ci particulari servitor.", + "about.domain_blocks.silenced.explanation": "Generalmen, li profiles e contenete de ti-ci servitor ne va aparir, except si on sercha les explicitmen o optionalisa it per sequer.", + "about.domain_blocks.silenced.title": "Limitat", + "about.domain_blocks.suspended.explanation": "Necun data de ti-ci servitor va esser tractat, inmagasinat o exchangeat, quel inpossibilisa li interaction o comunication de usatores de ti-ci servitor.", + "about.domain_blocks.suspended.title": "Suspendet", + "about.not_available": "On ne ha disponibilisat ti-ci information sur ti-ci servitor.", + "about.powered_by": "Decentralisat social medie disponibilisat de {mastodon}", + "about.rules": "Regules del servitor", + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Adjunter o remover de listes", + "account.badges.bot": "Automatisat", + "account.badges.group": "Gruppe", + "account.block": "Bloccar @{name}", + "account.block_domain": "Bloccar dominia {domain}", + "account.block_short": "Bloccar", + "account.blocked": "Bloccat", + "account.browse_more_on_origin_server": "Navigar plu sur li profil original", + "account.cancel_follow_request": "Anullar sequer", + "account.copy": "Copiar ligament al profil", + "account.direct": "Privatmen mentionar @{name}", + "account.disable_notifications": "Cessa notificar me quande @{name} posta", + "account.domain_blocked": "Dominia bloccat", + "account.edit_profile": "Redacter profil", + "account.enable_notifications": "Notificar me quande @{name} posta", + "account.endorse": "Recomandar sur profil", + "account.featured_tags.last_status_at": "Ultim posta ye {date}", + "account.featured_tags.last_status_never": "Null postas", + "account.featured_tags.title": "Recomandat hashtags de {name}", + "account.follow": "Sequer", + "account.follow_back": "Sequer reciprocmen", + "account.followers": "Sequitores", + "account.followers.empty": "Ancor nequi seque ti-ci usator.", + "account.followers_counter": "{count, plural, one {{counter} Sequitor} other {{counter} Sequitor}}", + "account.following": "Sequent", + "account.following_counter": "{count, plural, one {{counter} Sequent} other {{counter} Sequent}}", + "account.follows.empty": "Ti-ci usator ancor ne seque quemcunc.", + "account.go_to_profile": "Ear a profil", + "account.hide_reblogs": "Celar boosts de @{name}", + "account.in_memoriam": "In Memoriam.", + "account.joined_short": "Adheret", + "account.languages": "Changear lingues de subscrition", + "account.link_verified_on": "ProprietÃĄ de ti-ci ligament esset verificat ye {date}", + "account.locked_info": "Li statu de confidentialitÃĄ de ti-ci conto es configurat quam cludet. Li proprietario decide manualmen qui posse sequer.", + "account.media": "Medie", + "account.mention": "Mentionar @{name}", + "account.moved_to": "{name} ha indicat que su nov conto es ja:", + "account.mute": "Silentiar @{name}", + "account.mute_notifications_short": "Silentiar notificationes", + "account.mute_short": "Silentiar", + "account.muted": "Silentiat", + "account.mutual": "Reciproc", + "account.no_bio": "Null descrition providet.", + "account.open_original_page": "Aperter li pÃĄgine original", + "account.posts": "Postas", + "account.posts_with_replies": "Postas e replicas", + "account.report": "Raportar @{name}", + "account.requested": "Atendent aprobation. Cliccar por anullar li petition de sequer", + "account.requested_follow": "{name} ha petit sequer te", + "account.share": "Distribuer li profil de @{name}", + "account.show_reblogs": "Monstrar boosts de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Posta} other {{counter} Postas}}", + "account.unblock": "Desbloccar @{name}", + "account.unblock_domain": "Desbloccar dominia {domain}", + "account.unblock_short": "Desbloccar", + "account.unendorse": "Ne recomandar sur profil", + "account.unfollow": "Dessequer", + "account.unmute": "Dessilentiar @{name}", + "account.unmute_notifications_short": "Dessilentiar notificationes", + "account.unmute_short": "Dessilentiar", + "account_note.placeholder": "Clicca por adjunter un nota", + "admin.dashboard.daily_retention": "Usator-retention per die pos registration", + "admin.dashboard.monthly_retention": "Usator-retention per mensu pos registration", + "admin.dashboard.retention.average": "Medial", + "admin.dashboard.retention.cohort": "Mensu de registration", + "admin.dashboard.retention.cohort_size": "Nov usatores", + "admin.impact_report.instance_accounts": "Conto-profiles to-ci vell deleter", + "admin.impact_report.instance_followers": "Sequitores queles nor usatores vell perdir", + "admin.impact_report.instance_follows": "Sequitores queles lor usatores vell perdir", + "admin.impact_report.title": "Resumate de impact", + "alert.rate_limited.message": "Ples reprovar pos {retry_time, time, medium}.", + "alert.rate_limited.title": "Frequentie limitat", + "alert.unexpected.message": "Un ínexpectat erra ha evenit.", + "alert.unexpected.title": "Ups!", + "announcement.announcement": "Proclamation", + "attachments_list.unprocessed": "(íntractat)", + "audio.hide": "Celar audio", + "autosuggest_hashtag.per_week": "{count} per semane", + "boost_modal.combo": "Li proxim vez tu posse pressar {combo} por passar to-ci", + "bundle_column_error.copy_stacktrace": "Copiar erra-raporte", + "bundle_column_error.error.body": "Li demandat pÃĄgine ne posset esser rendit. FÃŗrsan it es un problema in nor code, o un problema de compatibilitÃĄ con li navigator.", + "bundle_column_error.error.title": "O ve!", + "bundle_column_error.network.body": "Un erra evenit durant li cargation de ti-ci pÃĄgine, possibilmen pro un temporari problema de tui conexion del internet o de ti-ci servitor.", + "bundle_column_error.network.title": "Erra de retage", + "bundle_column_error.retry": "Provar denov", + "bundle_column_error.return": "Retornar al comense", + "bundle_column_error.routing.body": "Li demandat pÃĄgine ne trovat se. Esque tu es cert que li URL in li adresse-barre es corect?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Cluder", + "bundle_modal_error.message": "Alquo errat durant li cargation de ti-ci componente.", + "bundle_modal_error.retry": "Provar denov", + "closed_registrations.other_server_instructions": "Pro que Mastodon es decentralisat, on posse crear un conto che un altri servitor e ancor interacter con ti-ci.", + "closed_registrations_modal.description": "Crear un conto che {domain} ne es possibil actualmen, ma ples memorar que on ne besona un conto specificmen che {domain} por usar Mastodon.", + "closed_registrations_modal.find_another_server": "Serchar altri servitor", + "closed_registrations_modal.preamble": "Mastodon es descentralisat, do on posse ser e interacter con quicunc che ti-ci servitor, sin egarda de u on crea su conto. On mem posse self-albergar it!", + "closed_registrations_modal.title": "Registrar sur Mastodon", + "column.about": "Information", + "column.blocks": "Bloccat usatores", + "column.bookmarks": "Marcatores", + "column.community": "Local tÊmpor-linea", + "column.direct": "Privat mentiones", + "column.directory": "Navigar profiles", + "column.domain_blocks": "Bloccat dominia", + "column.favourites": "Favorites", + "column.firehose": "TÊmpor-lineas", + "column.follow_requests": "Petitiones de sequer", + "column.home": "Comense", + "column.lists": "Listes", + "column.mutes": "Silentiat usatores", + "column.notifications": "Notificationes", + "column.pins": "Pinglat postas", + "column.public": "Federat tÊmpor-linea", + "column_back_button.label": "Retornar", + "column_header.hide_settings": "Celar parametres", + "column_header.moveLeft_settings": "Mover columne al levul", + "column_header.moveRight_settings": "Mover columne al dextri", + "column_header.pin": "Pinglar", + "column_header.show_settings": "Monstrar parametres", + "column_header.unpin": "Despinglar", + "column_subheading.settings": "Parametres", + "community.column_settings.local_only": "Solmen local", + "community.column_settings.media_only": "Solmen medie", + "community.column_settings.remote_only": "Solmen external", + "compose.language.change": "Changear lingue", + "compose.language.search": "Serchar lingues...", + "compose.published.body": "Posta publicat.", + "compose.published.open": "Aperter", + "compose.saved.body": "Posta conservat.", + "compose_form.direct_message_warning_learn_more": "Aprender plu", + "compose_form.encryption_warning": "Postas in Mastodon ne es inciffrat de comense a fine. Ne posta quelcunc information sensitiv per Mastodon.", + "compose_form.hashtag_warning": "Ti-ci posta ne va esser listat sur quelcunc hashtag pro que it ne es public. Solmen public postas posse esser serchat per hashtag.", + "compose_form.lock_disclaimer": "Tui conto ne es {locked}. Quicunc posse sequer te por vider tui postas solmen por sequitores.", + "compose_form.lock_disclaimer.lock": "cludet", + "compose_form.placeholder": "Quo es in tui spiritu?", + "compose_form.poll.add_option": "Adjunter un option", + "compose_form.poll.duration": "Duration del balotation", + "compose_form.poll.option_placeholder": "Option {number}", + "compose_form.poll.remove_option": "Remover ti-ci option", + "compose_form.poll.switch_to_multiple": "Changea li balotation por permisser multiplic selectiones", + "compose_form.poll.switch_to_single": "Changea li balotation por permisser un singul selection", + "compose_form.publish": "Publicar", + "compose_form.publish_form": "Nov posta", + "compose_form.publish_loud": "{publish}!", + "compose_form.save_changes": "Conservar changes", + "compose_form.sensitive.hide": "{count, plural, one {Marcar medie quam sensitiv} other {Marcar medie quam sensitiv}}", + "compose_form.sensitive.marked": "{count, plural, one {Medie es marcat quam sensitiv} other {Medie es marcat quam sensitiv}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Medie ne es marcat quam sensitiv} other {Medie ne es marcat quam sensitiv}}", + "compose_form.spoiler.marked": "Remover avise pri li contenete", + "compose_form.spoiler.unmarked": "Adjunter avise pri li contenete", + "compose_form.spoiler_placeholder": "Scri tui avise ci", + "confirmation_modal.cancel": "Anullar", + "confirmations.block.block_and_report": "Bloccar & Raportar", + "confirmations.block.confirm": "Bloccar", + "confirmations.block.message": "Esque tu vermen vole bloccar {name}?", + "confirmations.cancel_follow_request.confirm": "Retraer petition", + "confirmations.cancel_follow_request.message": "Esque tu vermen vole retraer tui petition sequer {name}?", + "confirmations.delete.confirm": "Deleter", + "confirmations.delete.message": "Esque tu vermen vole deleter ti-ci posta?", + "confirmations.delete_list.confirm": "Deleter", + "confirmations.delete_list.message": "Esque tu vermen vole permanentmen deleter ti-ci liste?", + "confirmations.discard_edit_media.confirm": "Forjettar", + "confirmations.discard_edit_media.message": "Tu have ínconservat changes al descrition de medie o al previse, forjettar les sin egarda?", + "confirmations.domain_block.confirm": "Bloccar li tot dominia", + "confirmations.domain_block.message": "Esque tu es certissim que tu vole bloccar li tot {domain}? In mult casus, bloccar o silentiar quelc specific contos es suficent e preferibil. Tu ne va vider contenete de ti dominia in quelcunc public tÊmpor-linea o in tui notificationes. Tui sequitores de ti dominia va esser removet.", + "confirmations.edit.confirm": "Redacter", + "confirmations.edit.message": "Redacter nu va remplazzar li missage quel tu actualmen composi. Esque tu vermen vole proceder?", + "confirmations.logout.confirm": "Exear", + "confirmations.logout.message": "Esque tu vermen vole exear?", + "confirmations.mute.confirm": "Silentiar", + "confirmations.mute.explanation": "To-ci va celar postas de ilu e postas mentionant ilu, ma it ancor va permisser ilu vider tui postas e sequer te.", + "confirmations.mute.message": "Esque tu vermen vole silentiar {name}?", + "confirmations.redraft.confirm": "Deleter & redacter", + "confirmations.redraft.message": "Esque tu vermen vole deleter ti-ci posta e redacter it? Favorites e boosts va esser perdit, e responses al posta original va esser orfanat.", + "confirmations.reply.confirm": "Responder", + "confirmations.reply.message": "Responder nu va remplazzar li missage quel tu actualmen composi. Esque tu vermen vole proceder?", + "confirmations.unfollow.confirm": "Dessequer", + "confirmations.unfollow.message": "Esque tu vermen vole dessequer {name}?", + "conversation.delete": "Deleter conversation", + "conversation.mark_as_read": "Marcar quam leet", + "conversation.open": "Vider conversation", + "conversation.with": "Con {names}", + "copy_icon_button.copied": "Copiat al Paperiere", + "copypaste.copied": "Copiat", + "copypaste.copy_to_clipboard": "Copiar al Paperiere", + "directory.federated": "Del conosset fediverse", + "directory.local": "De solmen {domain}", + "directory.new_arrivals": "Nov arivantes", + "directory.recently_active": "Recentmen activ", + "disabled_account_banner.account_settings": "Parametres del conto", + "disabled_account_banner.text": "Tui conto {disabledAccount} es actualmen desactivisat.", + "dismissable_banner.community_timeline": "Tis-ci es li postas max recent de gente con contos che {domain}.", + "dismissable_banner.dismiss": "Demisser", + "dismissable_banner.explore_links": "Tis-ci es li novas max distribuet che li social retage hodie. Novas plu nov, postat de plu diferent persones, es monstrat plu alt.", + "dismissable_banner.explore_statuses": "Tis-ci es postas del social retage queles es popular hodie. Nov postas con plu mult boosts e favorites es monstrat plu alt.", + "dismissable_banner.explore_tags": "Tis-ci es hashtags queles es popular che li social retage hodie. Hashtags usat de plu mult persones diferent es monstrat plu alt.", + "dismissable_banner.public_timeline": "Tis-ci es li max recent public postas de persones che li social retage quem gente che {domain} seque.", + "embed.instructions": "Inbedar ti-ci posta per copiar li code in infra.", + "embed.preview": "Vi qualmen it va aspecter:", + "emoji_button.activity": "ActivitÃĄ", + "emoji_button.clear": "Efaciar", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flaggas", + "emoji_button.food": "Manjage & Trincage", + "emoji_button.label": "Inserter emoji", + "emoji_button.nature": "Natura", + "emoji_button.not_found": "Null acordant emoji trovat", + "emoji_button.objects": "Objectes", + "emoji_button.people": "Gente", + "emoji_button.recent": "Frequentmen usat", + "emoji_button.search": "Sercha...", + "emoji_button.search_results": "Resultates de sercha", + "emoji_button.symbols": "Simboles", + "emoji_button.travel": "Viageation & Locos", + "empty_column.account_hides_collections": "Ti-ci usator ha selectet ne publicar ti-ci information", + "empty_column.account_suspended": "Conto suspendet", + "empty_column.account_timeline": "Null postas ci!", + "empty_column.account_unavailable": "Profil índisponibil", + "empty_column.blocks": "Tu ancor ha bloccat null usatores.", + "empty_column.bookmarked_statuses": "Tu ancor have null marcat postas. Quande tu marca un, it va aparir ci.", + "empty_column.community": "Li local tÊmpor-linea es vacui. Scri alquo publicmen por initiar la festa!", + "empty_column.direct": "Tu ancor have null privat mentiones. Quande tu misse o recive un, it va aparir ci.", + "empty_column.domain_blocks": "Ancor hay null bloccat dominias.", + "empty_column.explore_statuses": "Nequo es popular actualmen. Retorna plu tarde!", + "empty_column.favourited_statuses": "Tu ancor have null favorit postas. Quande tu favoritisa un, it va aparir ci.", + "empty_column.favourites": "Ancor nequi ha favoritisat ti-ci posta. Quande alqui fa it, ilu va aparir ci.", + "empty_column.follow_requests": "Tu ancor have null petitiones de sequer. Quande tu recive un, it va aparir ci.", + "empty_column.followed_tags": "Tu ancor ha sequet null hashtags. Quande tu seque un, it va aparir ci.", + "empty_column.hashtag": "Hay nullcos en ti-ci hashtag ancor.", + "empty_column.home": "Tui hemal tÊmpor-linea es vacui! Sequer plu gente por plenar it.", + "empty_column.list": "Ancor ne hay quocunc in ti-ci liste. Quande membres de ti-ci liste publica nov postas, ili va aparir ci.", + "empty_column.lists": "Tu ancor have null listes. Quande tu crea un, it va aparir ci.", + "empty_column.mutes": "Tu ancor ha silentiat null usatores.", + "empty_column.notifications": "Tu have null notificationes. Quande altri persones interacte con te, tu va vider it ci.", + "empty_column.public": "Hay nullcos ci! Scri alquo publicmen, o manualmen seque usatores de altri servitores por plenar to-ci", + "error.unexpected_crash.explanation": "Pro un error in nor code o un problema de compatibilitÃĄ in li navigator, ti-ci pÃĄgine ne posset esser monstrat correctmen.", + "error.unexpected_crash.explanation_addons": "Ti-ci pÃĄgine ne posset esser monstrat correctmen. Li error es probabilmen causat de un extension al navigator o instrumentes por automatic traduction.", + "error.unexpected_crash.next_steps": "Prova recargar li pÃĄgine. Si to ne auxilia, tu fÃŗrsan posse usar Mastodon per un diferent navigator o aplication.", + "error.unexpected_crash.next_steps_addons": "Prova desactivisar les e recargar li pÃĄgine. Si to ne auxilia, tu fÃŗrsan posse usar Mastodon per un diferent navigator o aplication.", + "errors.unexpected_crash.copy_stacktrace": "Copiar cumul-tracie a paperiere", + "errors.unexpected_crash.report_issue": "Raportar un problema", + "explore.search_results": "Resultates de sercha", + "explore.suggested_follows": "Gente", + "explore.title": "Explorar", + "explore.trending_links": "Novas", + "explore.trending_statuses": "Postas", + "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "Ti-ci filtre-categorie ne aplica al contextu in quel tu ha accessat ti-ci posta. Si tu vole que li posta es filtrat anc in ti-ci contextu, tu deve redacter li filtre.", + "filter_modal.added.context_mismatch_title": "Contextu íncompatibil!", + "filter_modal.added.expired_explanation": "Ti-ci filtre-categorie ha expirat, tu deve changear li date de expiration por far it aplicar.", + "filter_modal.added.expired_title": "Expirat filtre!", + "filter_modal.added.review_and_configure": "Por reviser e configurar ti-ci filtre-categorie, ea a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Parametres pri filtres", + "filter_modal.added.settings_link": "pÃĄgine por parametres", + "filter_modal.added.short_explanation": "Ti-ci post ha esset adjuntet al sequente filtre-categorie: {title}.", + "filter_modal.added.title": "Filtre adjuntet!", + "filter_modal.select_filter.context_mismatch": "ne aplica a ti-ci contextu", + "filter_modal.select_filter.expired": "expirat", + "filter_modal.select_filter.prompt_new": "Nov categorie: {name}", + "filter_modal.select_filter.search": "Serchar o crear", + "filter_modal.select_filter.subtitle": "Usar un existent categorie o crear nov", + "filter_modal.select_filter.title": "Filtrar ti-ci posta", + "filter_modal.title.status": "Filtrar un posta", + "firehose.all": "Omno", + "firehose.local": "Ti-ci servitor", + "firehose.remote": "Altri servitores", + "follow_request.authorize": "Autorisar", + "follow_request.reject": "Rejecter", + "follow_requests.unlocked_explanation": "Benque tu conto ne es cludet, li administratores de {domain} pensat que tu fÃŗrsan vell voler tractar seque-petitiones de tis-ci contos manualmen.", + "followed_tags": "Sequet hashtags", + "footer.about": "Information", + "footer.directory": "Profilarium", + "footer.get_app": "Obtener li aplication", + "footer.invite": "Invitar gente", + "footer.keyboard_shortcuts": "Rapid-tastes", + "footer.privacy_policy": "Politica pri privatie", + "footer.source_code": "Vider li fonte-code", + "footer.status": "Statu", + "generic.saved": "Conservat", + "getting_started.heading": "Qualmen comensar", + "hashtag.column_header.tag_mode.all": "e {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "Null suggestiones trovat", + "hashtag.column_settings.select.placeholder": "Inscrir hashtagsâ€Ļ", + "hashtag.column_settings.tag_mode.all": "Omni tis", + "hashtag.column_settings.tag_mode.any": "Quelcunc de tis", + "hashtag.column_settings.tag_mode.none": "Necun de tis", + "hashtag.column_settings.tag_toggle": "Include additional hashtags in ti-ci columne", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} posta} other {{counter} postas}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} posta} other {{counter} postas}} hodie", + "hashtag.follow": "Sequer hashtag", + "hashtag.unfollow": "Dessequer hashtag", + "hashtags.and_other": "â€Ļe {count, plural, other {# in plu}}", + "home.actions.go_to_explore": "Vider lu populari", + "home.actions.go_to_suggestions": "Trovar gente por sequer", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Monstrar boosts", + "home.column_settings.show_replies": "Monstrar responses", + "home.explore_prompt.body": "Tui hemal tÊmpor-linea have un mixtura del hashtags queles tu selectet sequer, li gente quem tu selectet sequer, e li postas queles ili boosta. Si to sembla tro quiet, tu fÃŗrsan vole:", + "home.explore_prompt.title": "To-ci es tui hemal pÃĄgine in Mastodon.", + "home.hide_announcements": "Celar proclamationes", + "home.pending_critical_update.body": "Ples actualisar tui Mastodon-servitor tam rapid quam es possibil!", + "home.pending_critical_update.link": "Vider actualisationes", + "home.pending_critical_update.title": "Urgent actualisation de securitÃĄ disponibil!", + "home.show_announcements": "Monstrar proclamationes", + "interaction_modal.description.favourite": "Con un conto de Mastodon, tu posse favoritisar ti-ci posta por informar li autor pri quant mult tu aprecia it e conservar it por plu tard.", + "interaction_modal.description.follow": "Con un conto de Mastodon, tu posse sequer {name} por reciver su postas in tui hemal tÊmpor-linea.", + "interaction_modal.description.reblog": "Con un conto de Mastodon, tu posse boostar ti-ci posta por distribuer it a tui propri sequitores.", + "interaction_modal.description.reply": "Con un conto de Mastodon, tu posse responder a ti-ci posta.", + "interaction_modal.login.action": "Retorna a hem", + "interaction_modal.login.prompt": "Dominia de tui hemal servitor, p.ex. mastodon.social", + "interaction_modal.no_account_yet": "Ne sur Mastodon?", + "interaction_modal.on_another_server": "Sur un servitor diferent", + "interaction_modal.on_this_server": "Sur ti-ci servitor", + "interaction_modal.sign_in": "Tu ne ha initiat session che ti-ci servitor. U logia tui conto?", + "interaction_modal.sign_in_hint": "Nota: To es li websitu u tu adheret. Si tu ne rememora, sercha li benevenit-email in tui inbuxe. Tu anc posse introducter tui plen usator-nÃŗmine! (p.ex. @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Favoritisar li posta de {name}", + "interaction_modal.title.follow": "Sequer {name}", + "interaction_modal.title.reblog": "Boostar li posta de {name}", + "interaction_modal.title.reply": "Responder al posta de {name}", + "intervals.full.days": "{number, plural, one {# die} other {# dies}}", + "intervals.full.hours": "{number, plural, one {# hor} other {# hores}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "Retroear", + "keyboard_shortcuts.blocked": "Aperter li lista de bloccat usatores", + "keyboard_shortcuts.boost": "Boostar posta", + "keyboard_shortcuts.column": "Infocar columne", + "keyboard_shortcuts.compose": "Infocar li text-area de composition", + "keyboard_shortcuts.description": "Descrition", + "keyboard_shortcuts.direct": "por aperter li columne de privat mentiones", + "keyboard_shortcuts.down": "Mover ad-infra in li liste", + "keyboard_shortcuts.enter": "Aperter posta", + "keyboard_shortcuts.favourite": "Favoritisar posta", + "keyboard_shortcuts.favourites": "Aperter li liste de favorites", + "keyboard_shortcuts.federated": "Aperter li federat tÊmpor-linea", + "keyboard_shortcuts.heading": "Rapid-tastes", + "keyboard_shortcuts.home": "Aperter li hemal tÊmpor-linea", + "keyboard_shortcuts.hotkey": "Rapid clave", + "keyboard_shortcuts.legend": "Monstrar ti-ci legende", + "keyboard_shortcuts.local": "Aperter li local tÊmpor-linea", + "keyboard_shortcuts.mention": "Mentionar li autor", + "keyboard_shortcuts.muted": "Aperter li lista de silentiat usatores", + "keyboard_shortcuts.my_profile": "Aperter tui profil", + "keyboard_shortcuts.notifications": "Aperter li columne de notificationes", + "keyboard_shortcuts.open_media": "Aperter medie", + "keyboard_shortcuts.pinned": "Aperter li liste de pinglat postas", + "keyboard_shortcuts.profile": "Aperter profil del autor", + "keyboard_shortcuts.reply": "Responder al posta", + "keyboard_shortcuts.requests": "Aperter liste de seque-petitiones", + "keyboard_shortcuts.search": "Infocar sercha-barre", + "keyboard_shortcuts.spoilers": "Monstrar/celar CW camp", + "keyboard_shortcuts.start": "Aperter \"Qualmen comensar\" columne", + "keyboard_shortcuts.toggle_hidden": "Monstrar/celar text detra CW", + "keyboard_shortcuts.toggle_sensitivity": "Monstrar/celar medie", + "keyboard_shortcuts.toot": "Crear un nov posta", + "keyboard_shortcuts.unfocus": "Desinfocar text-area de composition/serchar", + "keyboard_shortcuts.up": "Mover ad-supra in li liste", + "lightbox.close": "Cluder", + "lightbox.compress": "Compresser vise-buxe de image", + "lightbox.expand": "Expander vise-buxe de image", + "lightbox.next": "Sequent", + "lightbox.previous": "Precedent", + "limited_account_hint.action": "Monstrar profil totvez", + "limited_account_hint.title": "Ti-ci profil ha esset celat del moderatores de {domain}.", + "link_preview.author": "De {name}", + "lists.account.add": "Adjunter a liste", + "lists.account.remove": "Remover de liste", + "lists.delete": "Deleter liste", + "lists.edit": "Redacter liste", + "lists.edit.submit": "Changear titul", + "lists.exclusive": "Celar ti-ci postas del hemal tÊmpor-linea", + "lists.new.create": "Adjunter liste", + "lists.new.title_placeholder": "Titul del nov liste", + "lists.replies_policy.followed": "Quelcunc sequet usator", + "lists.replies_policy.list": "Membres del liste", + "lists.replies_policy.none": "Nequi", + "lists.replies_policy.title": "Monstrar responses a:", + "lists.search": "Serchar inter li persones quem tu seque", + "lists.subheading": "Tui listes", + "load_pending": "{count, plural, one {# nov element} other {# nov elementes}}", + "loading_indicator.label": "Cargantâ€Ļ", + "media_gallery.toggle_visible": "{number, plural, one {Celar image} other {Celar images}}", + "moved_to_account_banner.text": "Tui conto {disabledAccount} es actualmen desactivisat pro que tu movet te a {movedToAccount}.", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Celar notificationes de ti-ci usator?", + "mute_modal.indefinite": "Índefinit", + "navigation_bar.about": "Information", + "navigation_bar.advanced_interface": "Aperter in li web-interfacie avansat", + "navigation_bar.blocks": "Bloccat usatores", + "navigation_bar.bookmarks": "Marcatores", + "navigation_bar.community_timeline": "Local tÊmpor-linea", + "navigation_bar.compose": "Composir un nov posta", + "navigation_bar.direct": "Privat mentiones", + "navigation_bar.discover": "Decovrir", + "navigation_bar.domain_blocks": "Bloccat dominias", + "navigation_bar.edit_profile": "Redacter profil", + "navigation_bar.explore": "Explorar", + "navigation_bar.favourites": "Favorites", + "navigation_bar.filters": "Silentiat paroles", + "navigation_bar.follow_requests": "Petitiones de sequer", + "navigation_bar.followed_tags": "Sequet hashtags", + "navigation_bar.follows_and_followers": "Sequetes e sequitores", + "navigation_bar.lists": "Listes", + "navigation_bar.logout": "Exear", + "navigation_bar.mutes": "Silentiat usatores", + "navigation_bar.opened_in_classic_interface": "Postas, contos e altri specific pÃĄgines es customalmen apertet in li classic web-interfacie.", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinglat postas", + "navigation_bar.preferences": "Preferenties", + "navigation_bar.public_timeline": "Federat tÊmpor-linea", + "navigation_bar.search": "Sercha", + "navigation_bar.security": "SecuritÃĄ", + "not_signed_in_indicator.not_signed_in": "On deve aperter session por accesser ti-ci ressurse.", + "notification.admin.report": "{name} raportat {target}", + "notification.admin.sign_up": "{name} adheret", + "notification.favourite": "{name} favoritisat tui posta", + "notification.follow": "{name} sequet te", + "notification.follow_request": "{name} ha petit sequer te", + "notification.mention": "{name} mentionat te", + "notification.own_poll": "Tui balotation ha finit", + "notification.poll": "Un balotation in quel tu votat ha finit", + "notification.reblog": "{name} boostat tui posta", + "notification.status": "{name} just postat", + "notification.update": "{name} modificat un posta", + "notifications.clear": "Aclarar notificationes", + "notifications.clear_confirmation": "Vole tu vermen permanentmen aclarar omni tui notificationes?", + "notifications.column_settings.admin.report": "Nov raportas:", + "notifications.column_settings.admin.sign_up": "Nov registrationes:", + "notifications.column_settings.alert": "Notificationes sur li computator", + "notifications.column_settings.favourite": "Favorites:", + "notifications.column_settings.filter_bar.advanced": "Monstrar omni categories", + "notifications.column_settings.filter_bar.category": "Rapid filtre-barre", + "notifications.column_settings.filter_bar.show_bar": "Monstrar filtre-barre", + "notifications.column_settings.follow": "Nov sequitores:", + "notifications.column_settings.follow_request": "Nov petitiones de sequer:", + "notifications.column_settings.mention": "Mentiones:", + "notifications.column_settings.poll": "Resultates del balotation:", + "notifications.column_settings.push": "Notificationes push", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Monstrar in columne", + "notifications.column_settings.sound": "Far son", + "notifications.column_settings.status": "Nov postas:", + "notifications.column_settings.unread_notifications.category": "Ínleet notificationes", + "notifications.column_settings.unread_notifications.highlight": "Marcar ínleet notificationes", + "notifications.column_settings.update": "Redactiones:", + "notifications.filter.all": "Omni", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favorites", + "notifications.filter.follows": "Seques", + "notifications.filter.mentions": "Mentiones", + "notifications.filter.polls": "Resultates del balotation", + "notifications.filter.statuses": "Actualisationes de gente quem tu seque", + "notifications.grant_permission": "Dar permission.", + "notifications.group": "{count} notificationes", + "notifications.mark_as_read": "Marcar omni notificationes quam leet", + "notifications.permission_denied": "Notificationes sur li computator es índisponibil pro que on ha previamen rejectet un petition por navigator-permissiones", + "notifications.permission_denied_alert": "Notificationes sur li computator ne posse esser activisat, pro que navigator-permission ha esset previamen rejectet", + "notifications.permission_required": "Notificationes sur li computator es índisponibil pro que li besonat permission ne ha esset dat.", + "notifications_permission_banner.enable": "Activisar notificationes sur li computator", + "notifications_permission_banner.how_to_control": "Por reciver notificationes quande Mastodon ne es apert, activisa notificationes sur li computator. Tu posse decider precisimen quel species de interactiones genera notificationes per li buton {icon} in-supra quande ili es activisat.", + "notifications_permission_banner.title": "Nequande preterlassa quocunc", + "onboarding.action.back": "Retroear", + "onboarding.actions.back": "Retroear", + "onboarding.actions.go_to_explore": "Ear a vider lu populari", + "onboarding.actions.go_to_home": "Ear al hemal tÊmpor-linea", + "onboarding.compose.template": "Salute #Mastodon!", + "onboarding.follows.empty": "Ínfortunatmen, null resultates posse esser monstrat actualmen. Tu posse provar serchar o usar li \"Explorar\" pÃĄgine por trovar gente por sequer, o prova denov plu tard.", + "onboarding.follows.lead": "Tui hemal tÊmpor-linea es li primari maniere de experir Mastodon. Plu persones quem tu seque, plu activ e interessant it va esser. Por auxiliar te comensar, vi quelc suggestiones:", + "onboarding.follows.title": "Personalisar tui hemal tÊmpor-linea", + "onboarding.profile.discoverable": "Fa mi profil decovribil", + "onboarding.profile.discoverable_hint": "Quande tu opta esser decovribil in Mastodon, tui postas posse aparir in resultates de sercha e tendenties, e tui profil posse esser suggestet a persones con interesses simil a tui.", + "onboarding.profile.display_name": "NÃŗmine a monstrar", + "onboarding.profile.display_name_hint": "Tui complet nÃŗmine o tui amusant nÃŗmineâ€Ļ", + "onboarding.profile.lead": "Tu sempre posse completar ti-ci plu tard in li parametres, u mem plu optiones de customisation es disponibil.", + "onboarding.profile.note": "Biografie", + "onboarding.profile.note_hint": "Tu posse @mentionar altri persones o #hashtagsâ€Ļ", + "onboarding.profile.save_and_continue": "Conservar e avansar", + "onboarding.profile.title": "Popular tu profil", + "onboarding.profile.upload_avatar": "Cargar profil-portrete", + "onboarding.profile.upload_header": "Cargar cap-image", + "onboarding.share.lead": "Di gente qualmen ili posse trovar te che Mastodon!", + "onboarding.share.message": "Yo es {username} che #Mastodon! Veni e seque me a {url}", + "onboarding.share.next_steps": "Possibil sequent passus:", + "onboarding.share.title": "Partir tui profil", + "onboarding.start.lead": "Tu es ja un parte de Mastodon, un unic, decentralisat platform de medie social in quel tu—ne un algoritme—selectiona tui propri experientie. Lass nos departer sur un nov frontiera social:", + "onboarding.start.skip": "Auxilie por comensar ne besonat?", + "onboarding.start.title": "Tu ha successat!", + "onboarding.steps.follow_people.body": "Sequer interessant gente es to quo importa in Mastodon.", + "onboarding.steps.follow_people.title": "Personalisar tui hemal tÊmpor-linea", + "onboarding.steps.publish_status.body": "Saluta li munde con text, images, videos o balotationes {emoji}", + "onboarding.steps.publish_status.title": "Crear tui unesim posta", + "onboarding.steps.setup_profile.body": "Ascresce tui interactiones per haver un profil detalliat.", + "onboarding.steps.setup_profile.title": "Personalisar tui profil", + "onboarding.steps.share_profile.body": "Di tui amics qualmen trovar te che Mastodon", + "onboarding.steps.share_profile.title": "Partir tui profil Mastodon", + "onboarding.tips.2fa": "Savet tu? Tu posse securisar tui conto per activisar 2-factor autentication in tui parametres de conto. Ti functiona con quelcunc aplication TOTP quel tu selecte, null nÃēmere de telefon besonat!", + "onboarding.tips.accounts_from_other_servers": "Savet tu? Pro que Mastodon es decentralisat, quelc profiles queles tu trova va esser logiat che servitores altri quam tui. Totvez tu posse interacter con les sin grates! Lor servitores es in li duesim demí de lor usator-nÃŗmines!", + "onboarding.tips.migration": "Savet tu? Si tu senti que {domain} ne es un bonissim servitor por te futurimen, tu posse mover te a un altri Mastodon-servitor sin perdir tui sequitores. Tu posse mem etablisser tui propri servitor!", + "onboarding.tips.verification": "Savet tu? Tu posse verificar tui conto per metter un ligament a tui Mastodon-profil in tui propri websitu e adjunter li websitu a tui profil. Null payament o documentes besonat!", + "password_confirmation.exceeds_maxlength": "Confirmation de passa-parol transpassa li maxim longore de passa-paroles", + "password_confirmation.mismatching": "Confirmation de passa-parol ne egala", + "picture_in_picture.restore": "Restaurar", + "poll.closed": "Finit", + "poll.refresh": "Recargar", + "poll.reveal": "Vider resultates", + "poll.total_people": "{count, plural, one {# person} other {# persones}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Votar", + "poll.voted": "Tu votat por ti-ci option", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", + "poll_button.add_poll": "Adjunter un balotation", + "poll_button.remove_poll": "Remover balotation", + "privacy.change": "Changear li privatie del posta", + "privacy.direct.long": "Visibil solmen a mentionat usatores", + "privacy.direct.short": "Solmen persones mentionat", + "privacy.private.long": "Visibil solmen por sequitores", + "privacy.private.short": "Solmen sequitores", + "privacy.public.long": "Visibil a omnes", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visibil por omnes, ma excludet de functiones de decovrition", + "privacy.unlisted.short": "Delistat", + "privacy_policy.last_updated": "Ultimmen actualisat ye {date}", + "privacy_policy.title": "Politica pri Privatie", + "recommended": "Recomandat", + "refresh": "Recargar", + "regeneration_indicator.label": "Cargantâ€Ļ", + "regeneration_indicator.sublabel": "On es preparant tui hemal tÊmpor-linea!", + "relative_time.days": "{number}d", + "relative_time.full.days": "Ante {number, plural, one {# die} other {# dies}}", + "relative_time.full.hours": "Ante {number, plural, one {# hor} other {# hores}}", + "relative_time.full.just_now": "just nu", + "relative_time.full.minutes": "Ante {number, plural, one {# minute} other {# minutes}}", + "relative_time.full.seconds": "Ante {number, plural, one {# second} other {# secondes}}", + "relative_time.hours": "{number}h", + "relative_time.just_now": "nu", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "hodie", + "reply_indicator.cancel": "Anullar", + "report.block": "Bloccar", + "report.block_explanation": "Tu ne va vider su postas. Li usator ni va posser vider tui postas, ni sequer te, ni va posser saver pri li statu de esser bloccat.", + "report.categories.legal": "Legal", + "report.categories.other": "Altricos", + "report.categories.spam": "Spam", + "report.categories.violation": "Contenete violant un o pluri regules del servitor", + "report.category.subtitle": "Selecte li max bon option", + "report.category.title": "Di nos quo passa con ti-ci {type}", + "report.category.title_account": "profil", + "report.category.title_status": "posta", + "report.close": "Finit", + "report.comment.title": "Hay alquo plu quel tu pensa que noi deve saver?", + "report.forward": "Misser anc a {target}", + "report.forward_hint": "Ti-ci conto es de un altri servitor. Misser un anonimisat copie del raporte anc a ta?", + "report.mute": "Silentiar", + "report.mute_explanation": "Tu ne va vider su postas. Ilu ancor posse sequer te e vider tui postas e ne va saver que ilu es silentiat.", + "report.next": "Sequent", + "report.placeholder": "Additional comentas", + "report.reasons.dislike": "It ne plese me", + "report.reasons.dislike_description": "It es alquo quel displese te", + "report.reasons.legal": "It es ínlegal", + "report.reasons.legal_description": "Tu crede que it viola un lege del land de te o de tui servitor", + "report.reasons.other": "It es altricos", + "report.reasons.other_description": "Li problema ne apartene in li altri categories", + "report.reasons.spam": "It es spam", + "report.reasons.spam_description": "Maliciosi ligamentes, fals activitÃĄ, o repetitiv responses", + "report.reasons.violation": "It viola li regules del servitor", + "report.reasons.violation_description": "Tu save que it viola specific regules", + "report.rules.subtitle": "Selecte omnes queles aplica", + "report.rules.title": "Quel regules es violat?", + "report.statuses.subtitle": "Selecte omnes queles aplica", + "report.statuses.title": "Hay postas queles posse subtener ti-ci raporte?", + "report.submit": "Misser", + "report.target": "Raportant {target}", + "report.thanks.take_action": "Tis-ci es tui optiones por controlar ti quel tu vide che Mastodon:", + "report.thanks.take_action_actionable": "Durante que noi tracta ti-ci, tu posse far lu sequent contra @{name}:", + "report.thanks.title": "Vole tu ne vider to?", + "report.thanks.title_actionable": "Mersí pro raportar, noi va investigar to.", + "report.unfollow": "Dessequer @{name}", + "report.unfollow_explanation": "Tu seque ti-ci conto. Por ne vider su postas en tui hemal tÊmpor-linea, dessequer it.", + "report_notification.attached_statuses": "{count, plural, one {{count} posta} other {{count} postas}} atachat", + "report_notification.categories.legal": "Legal", + "report_notification.categories.other": "Altricos", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violation de regul", + "report_notification.open": "Aperter raporta", + "search.no_recent_searches": "Null recent serchas", + "search.placeholder": "Serchar", + "search.quick_action.account_search": "Profiles acordant con {x}", + "search.quick_action.go_to_account": "Ear al profil {x}", + "search.quick_action.go_to_hashtag": "Ear al hashtag {x}", + "search.quick_action.open_url": "Aperter URL in Mastodon", + "search.quick_action.status_search": "Postas acordant con {x}", + "search.search_or_paste": "Serchar o glutinar URL", + "search_popout.full_text_search_disabled_message": "Ne disponibil che {domain}.", + "search_popout.full_text_search_logged_out_message": "Solmen disponibil con session initiat.", + "search_popout.language_code": "Code de lingue ISO", + "search_popout.options": "Sercha-parametres", + "search_popout.quick_actions": "Rapid actiones", + "search_popout.recent": "Recent serchas", + "search_popout.specific_date": "specific date", + "search_popout.user": "usator", + "search_results.accounts": "Profiles", + "search_results.all": "Omni", + "search_results.hashtags": "Hashtags", + "search_results.nothing_found": "Trovat se nullcos por ti tÊrmino de sercha", + "search_results.see_all": "Vider omni", + "search_results.statuses": "Postas", + "search_results.title": "Sercha por {q}", + "server_banner.about_active_users": "Gente usant ti-ci servitor durant li ultim 30 dies (Mensual Activ Usatores)", + "server_banner.active_users": "activ usatores", + "server_banner.administered_by": "Administrat de:", + "server_banner.introduction": "{domain} es un part del decentralisat social retage constructet sur {mastodon}.", + "server_banner.learn_more": "Aprender plu", + "server_banner.server_stats": "Statisticas pri li servitor:", + "sign_in_banner.create_account": "Crear un conto", + "sign_in_banner.sign_in": "Intrar", + "sign_in_banner.sso_redirect": "Intrar o registrar se", + "sign_in_banner.text": "Intrar por sequer profiles o hashtags, favoritisar, partir e responder a postas. Tu posse anc interacter per tui conto che un diferent servitor.", + "status.admin_account": "Aperter interfacie de moderation por @{name}", + "status.admin_domain": "Aperter interfacie de moderation por {domain}", + "status.admin_status": "Aperter ti-ci posta in li interfacie de moderation", + "status.block": "Bloccar @{name}", + "status.bookmark": "Marcar", + "status.cancel_reblog_private": "Desboostar", + "status.cannot_reblog": "Ti-ci posta ne posse esser boostat", + "status.copy": "Copiar ligament al posta", + "status.delete": "Deleter", + "status.detailed_status": "Detalliat vise de conversation", + "status.direct": "Privatmen mentionar @{name}", + "status.direct_indicator": "Privat mention", + "status.edit": "Modificar", + "status.edited": "Modificat ye {date}", + "status.edited_x_times": "Modificat {count, plural, one {{count} vez} other {{count} vezes}}", + "status.embed": "Inbedar", + "status.favourite": "Favoritisar", + "status.filter": "Filtrar ti-ci posta", + "status.filtered": "Filtrat", + "status.hide": "Celar posta", + "status.history.created": "creat de {name} ye {date}", + "status.history.edited": "modificat de {name} ye {date}", + "status.load_more": "Cargar plu", + "status.media.open": "Cliccar por aperter", + "status.media.show": "Cliccar por monstrar", + "status.media_hidden": "Medie celat", + "status.mention": "Mentionar @{name}", + "status.more": "Plu", + "status.mute": "Silentiar @{name}", + "status.mute_conversation": "Silentiar conversation", + "status.open": "Expander ti-ci posta", + "status.pin": "Pinglar sur profil", + "status.pinned": "Pinglat posta", + "status.read_more": "Leer plu", + "status.reblog": "Boostar", + "status.reblog_private": "Boostar con li original visibilitÃĄ", + "status.reblogged_by": "{name} boostat", + "status.reblogs.empty": "Ancor nequi ha boostat ti-ci posta. Quande alqui fa it, ilu va aparir ci.", + "status.redraft": "Deleter & redacter", + "status.remove_bookmark": "Remover marcator", + "status.replied_to": "Respondet a {name}", + "status.reply": "Responder", + "status.replyAll": "Responder al fil", + "status.report": "Raportar @{name}", + "status.sensitive_warning": "Sensitiv contenete", + "status.share": "Partir", + "status.show_filter_reason": "Monstrar totvez", + "status.show_less": "Monstrar minu", + "status.show_less_all": "Monstrar minu por omno", + "status.show_more": "Monstrar plu", + "status.show_more_all": "Monstrar plu por omno", + "status.show_original": "Monstrar li original", + "status.title.with_attachments": "{user} postat {attachmentCount, plural, one {un atachament} other {{attachmentCount} atachamentes}}", + "status.translate": "Traducter", + "status.translated_from_with": "Traductet de {lang} per {provider}", + "status.uncached_media_warning": "Previse ne disponibil", + "status.unmute_conversation": "Dessilentiar conversation", + "status.unpin": "Despinglar de profil", + "subscribed_languages.lead": "Solmen postas in selectet lingues va aparir in tui hemal e listal tÊmpor-lineas pos li change. Selecte null por reciver postas in omni lingues.", + "subscribed_languages.save": "Conservar changes", + "subscribed_languages.target": "Changear abonnat lingues por {target}", + "tabs_bar.home": "Hem", + "tabs_bar.notifications": "Notificationes", + "time_remaining.days": "{number, plural, one {# die} other {# dies}} resta", + "time_remaining.hours": "{number, plural, one {# hor} other {# hores}} resta", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} resta", + "time_remaining.moments": "Momentes resta", + "time_remaining.seconds": "{number, plural, one {# second} other {# secondes}} resta", + "timeline_hint.remote_resource_not_displayed": "{resource} de altri servitores ne es monstrat.", + "timeline_hint.resources.followers": "Sequitores", + "timeline_hint.resources.follows": "Sequetes", + "timeline_hint.resources.statuses": "Plu old postas", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} persones}} durant li ultim {days, plural, one {die} other {{days} dies}}", + "trends.trending_now": "Actualmen populari", + "ui.beforeunload": "Tui íncomplet posta va esser perdit si tu lassa Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Trenar & lassar cader por cargar", + "upload_button.label": "Adjunter images, un video o un audio-file", + "upload_error.limit": "Límite de medie-cargationes transpassat.", + "upload_error.poll": "On ne es permisset cargar medie con balotationes.", + "upload_form.audio_description": "Descrir por persones qui es surd o ne audi bon", + "upload_form.description": "Descrir por persones qui es ciec o have mal vision", + "upload_form.description_missing": "Null descrition adjuntet", + "upload_form.edit": "Redacter", + "upload_form.thumbnail": "Changear previsual image", + "upload_form.undo": "Deleter", + "upload_form.video_description": "Descrir por persones qui es surd, ciec, ne audi bon, o have mal vision", + "upload_modal.analyzing_picture": "Analisant imageâ€Ļ", + "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Aplicantâ€Ļ", + "upload_modal.choose_image": "Selecter image", + "upload_modal.description_placeholder": "Li Europan lingues es membres del sam familie. Lor separat existentie es un mite", + "upload_modal.detect_text": "Detecter text del image", + "upload_modal.edit_media": "Redacter medie", + "upload_modal.hint": "Clicca o trena li circul por selecter li focal punctu quel va esser sempre visibil in omni previse-images.", + "upload_modal.preparing_ocr": "Preparant OCRâ€Ļ", + "upload_modal.preview_label": "Previse ({ratio})", + "upload_progress.label": "Cargant...", + "upload_progress.processing": "Tractantâ€Ļ", + "username.taken": "Ti usator-nÃŗmine es ja prendet. Trova altri", + "video.close": "Cluder video", + "video.download": "Descargar file", + "video.exit_fullscreen": "Exear plen-ecran", + "video.expand": "Expander video", + "video.fullscreen": "Plen-ecran", + "video.hide": "Celar video", + "video.mute": "Silentiar li son", + "video.pause": "Pausar", + "video.play": "Reproducter", + "video.unmute": "Dessilentiar li son" +} diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index c24d28eea905fb..f163567f176035 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -6,7 +6,6 @@ "account.follow": "Soro", "account.followers": "Ndáģ‹ na-eso", "account.following": "Na-eso", - "account.follows_you": "Na-eso gáģ‹", "account.mute": "Mee ogbi @{name}", "account.unfollow": "KwáģĨsáģ‹ iso", "account_note.placeholder": "Click to add a note", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 552debdb50bdc9..233b7684573582 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -20,6 +20,7 @@ "account.blocked": "Blokusita", "account.browse_more_on_origin_server": "Videz pluse che la originala profilo", "account.cancel_follow_request": "Desendez sequodemando", + "account.copy": "Kopiez ligilo al profilo", "account.direct": "Private mencionez @{name}", "account.disable_notifications": "Cesez avizar me kande @{name} postas", "account.domain_blocked": "Domain hidden", @@ -36,9 +37,9 @@ "account.following": "Sequata", "account.following_counter": "{count, plural, one {{counter} Sequas} other {{counter} Sequanti}}", "account.follows.empty": "Ca uzanto ne sequa irgu til nun.", - "account.follows_you": "Sequas tu", "account.go_to_profile": "Irez al profilo", - "account.hide_reblogs": "Celez busti de @{name}", + "account.hide_reblogs": "Celez repeti de @{name}", + "account.in_memoriam": "Memorige.", "account.joined_short": "Juntita", "account.languages": "Chanjez abonita lingui", "account.link_verified_on": "Proprieteso di ca ligilo kontrolesis ye {date}", @@ -58,7 +59,7 @@ "account.requested": "Vartante aprobo", "account.requested_follow": "{name} demandis sequar tu", "account.share": "Partigez profilo di @{name}", - "account.show_reblogs": "Montrez busti de @{name}", + "account.show_reblogs": "Montrez repeti de @{name}", "account.statuses_counter": "{count, plural, one {{counter} Posto} other {{counter} Posti}}", "account.unblock": "Desblokusar @{name}", "account.unblock_domain": "Desblokusar {domain}", @@ -86,7 +87,7 @@ "attachments_list.unprocessed": "(neprocedita)", "audio.hide": "Celez audio", "autosuggest_hashtag.per_week": "{count} dum singla semano", - "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", + "boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye", "bundle_column_error.copy_stacktrace": "Kopierorraporto", "bundle_column_error.error.body": "La demandita pagino ne povas strukturigesar. Forsan ol esas eroro en kodexo hike o vidilkoncilieblesproblemo.", "bundle_column_error.error.title": "Ach!", @@ -180,7 +181,7 @@ "confirmations.mute.explanation": "Co celigos posti de oli e posti quo mencionas oli, ma ol ankore permisas oli vidar vua posti e sequar vu.", "confirmations.mute.message": "Ka vu certe volas silencigar {name}?", "confirmations.redraft.confirm": "Efacez e riskisez", - "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e busti esos perdita, e respondi al posto originala esos orfanigita.", + "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e repeti esos perdita, e respondi al posto originala esos orfanigita.", "confirmations.reply.confirm": "Respondez", "confirmations.reply.message": "Respondar nun remplos mesajo quon vu nun igas. Ka vu certe volas durar?", "confirmations.unfollow.confirm": "Desequez", @@ -189,6 +190,7 @@ "conversation.mark_as_read": "Markizez quale lektita", "conversation.open": "Videz konverso", "conversation.with": "Kun {names}", + "copy_icon_button.copied": "Kopiita", "copypaste.copied": "Kopiesis", "copypaste.copy_to_clipboard": "Kopiez", "directory.federated": "De savita fediverso", @@ -200,7 +202,7 @@ "dismissable_banner.community_timeline": "Co esas maxim recenta publika posti de personi quo havas konto quo hostigesas da {domain}.", "dismissable_banner.dismiss": "Ignorez", "dismissable_banner.explore_links": "Ca nova rakonti parolesas da personi che ca e altra servili di necentraligita situo nun.", - "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu busti e favoriziti esas rangizita plu alte.", + "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu repeti e favoriziti esas rangizita plu alte.", "dismissable_banner.explore_tags": "Ca hashtagi bezonas plu famoza inter personi che ca e altra servili di la necentraligita situo nun.", "dismissable_banner.public_timeline": "Yen la posti maxim recenta da personi che la reto sociala quin personi che {domain} sequas.", "embed.instructions": "Embed this status on your website by copying the code below.", @@ -220,6 +222,7 @@ "emoji_button.search_results": "Trovuri", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Vizito & Plasi", + "empty_column.account_hides_collections": "Ca uzanto selektis ne publikigar ca informo", "empty_column.account_suspended": "Konto restriktesis", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profilo esas nedisponebla", @@ -294,14 +297,18 @@ "hashtag.column_settings.tag_mode.any": "Irga co", "hashtag.column_settings.tag_mode.none": "Nula co", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} partoprenanto} other {{counter} partoprenanti}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} posto} other {{counter} posti}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} posto} other {{counter} posti}} hodie", "hashtag.follow": "Sequez hashtago", "hashtag.unfollow": "Desequez hashtago", + "hashtags.and_other": "â€Ļe {count, plural, one {# plusa}other {# plusa}}", "home.actions.go_to_explore": "Videz quo es populara nun", "home.actions.go_to_suggestions": "Trovez personi por sequar", "home.column_settings.basic": "Simpla", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", - "home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili bustis. Se to semblas tro tacanta, vu darfas volar:", + "home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili repetis. Se to semblas tro tacanta, vu darfas volar:", "home.explore_prompt.title": "Co es vua hemo en Mastodon.", "home.hide_announcements": "Celez anunci", "home.pending_critical_update.body": "Voluntez aktualigar vua Mastodon-servilo tam balde kam es posibla!", @@ -310,7 +317,7 @@ "home.show_announcements": "Montrez anunci", "interaction_modal.description.favourite": "Kun konto che Mastodon, vu povas favorizar ca posto por savigar la autoro ke vu prizas ol e sparar ol por pose.", "interaction_modal.description.follow": "Per konto che Mastodon, vu povas sequar {name} por ganar ola posti en vua hemniuzeto.", - "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas bustizar ca posti por partigar kun sua sequanti.", + "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas repetar ca posti por dissemar lo a vua propra sequati.", "interaction_modal.description.reply": "Per konto che Mastodon, vu povas respondar ca posto.", "interaction_modal.login.action": "Irar a hemo", "interaction_modal.login.prompt": "Domeno di vua hemala servilo, ex. mastodon.social", @@ -321,14 +328,14 @@ "interaction_modal.sign_in_hint": "Averto: To es la retsituo ube vu kreis konto. Se vu ne rimemoras, serchez vua bonvenanta e-posto. Vu anke povas enpozar vua kompleta uzantnomo! (ex. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Favorizez ca posto da {name}", "interaction_modal.title.follow": "Sequez {name}", - "interaction_modal.title.reblog": "Bustizez posto di {name}", + "interaction_modal.title.reblog": "Repetez posto di {name}", "interaction_modal.title.reply": "Respondez posto di {name}", "intervals.full.days": "{number, plural, one {# dio} other {# dii}}", "intervals.full.hours": "{number, plural, one {# horo} other {# hori}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.boost": "Repetez posto", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "Deskripto", @@ -383,6 +390,7 @@ "lists.search": "Trovez inter personi quon vu sequas", "lists.subheading": "Vua listi", "load_pending": "{count, plural, one {# nova kozo} other {# nova kozi}}", + "loading_indicator.label": "Karganteâ€Ļ", "media_gallery.toggle_visible": "Chanjar videbleso", "moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.", "mute_modal.duration": "Durado", @@ -448,7 +456,7 @@ "notifications.column_settings.unread_notifications.highlight": "Briligez nelektita avizi", "notifications.column_settings.update": "Modifikati:", "notifications.filter.all": "Omna", - "notifications.filter.boosts": "Busti", + "notifications.filter.boosts": "Repeti", "notifications.filter.favourites": "Favoriziti", "notifications.filter.follows": "Sequati", "notifications.filter.mentions": "Mencioni", @@ -471,6 +479,17 @@ "onboarding.follows.empty": "Regretinde, nula rezultajo povas montresar nune. Vu povas esforcar serchar, o irar al explorala pagino por trovar personi sequinda, o esforcar itere pose.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", + "onboarding.profile.discoverable": "Trovebligez mea profilo", + "onboarding.profile.discoverable_hint": "Se vu selektas deskovrebleso che Mastodon, vua posti povas aparar en sercho-rezultaji e populari, e vua profilo forsan sugestesos a personi kun interesi simila a vua.", + "onboarding.profile.display_name": "Publika nomo", + "onboarding.profile.display_name_hint": "Vua tota nomo o vua gaya nomoâ€Ļ", + "onboarding.profile.lead": "Vu sempre povas kompletigar co plu tarde en la opcioni, ube mem plua personalizanta opcioni es disponebla.", + "onboarding.profile.note": "Biografio", + "onboarding.profile.note_hint": "Vu povas @mencionar altra personi o #hashtagiâ€Ļ", + "onboarding.profile.save_and_continue": "Preservez e avancez", + "onboarding.profile.title": "Kompletigez la profilo", + "onboarding.profile.upload_avatar": "Kargez profiloportreto", + "onboarding.profile.upload_header": "Kargez profilokapimajo", "onboarding.share.lead": "Savigez personi quale ili povas trovar vu che Mastodon!", "onboarding.share.message": "Me esas {username} che #Mastodon! Venez e sequez me ye {url}", "onboarding.share.next_steps": "Kozi quin vu darfas volar facar sequante:", @@ -482,7 +501,7 @@ "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.publish_status.title": "Facar vua unesma posto", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", + "onboarding.steps.setup_profile.body": "Vu interagos plue kun profilo detalizita.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", @@ -510,6 +529,7 @@ "privacy.unlisted.short": "Ne enlistigota", "privacy_policy.last_updated": "Antea novajo ye {date}", "privacy_policy.title": "Privatesguidilo", + "recommended": "Rekomendata", "refresh": "Rifreshez", "regeneration_indicator.label": "Chargasâ€Ļ", "regeneration_indicator.sublabel": "Vua hemniuzeto preparesas!", @@ -580,6 +600,8 @@ "search.quick_action.status_search": "Posti qui asortas {x}", "search.search_or_paste": "Serchar o pozar URL", "search_popout.full_text_search_disabled_message": "Nedisponebla che {domain}.", + "search_popout.full_text_search_logged_out_message": "Nur disponebla enirite.", + "search_popout.language_code": "ISO linguokodexo", "search_popout.options": "Opcioni serchala", "search_popout.quick_actions": "Agi rapida", "search_popout.recent": "Lasta serchi", @@ -607,8 +629,8 @@ "status.admin_status": "Open this status in the moderation interface", "status.block": "Restriktez @{name}", "status.bookmark": "Libromarko", - "status.cancel_reblog_private": "Debustez", - "status.cannot_reblog": "Ca posto ne povas bustesas", + "status.cancel_reblog_private": "Desrepetez", + "status.cannot_reblog": "Ca posto ne povas repetesar", "status.copy": "Copy link to status", "status.delete": "Efacar", "status.detailed_status": "Detala konversvido", @@ -636,10 +658,10 @@ "status.pin": "Pinglagez che profilo", "status.pinned": "Pinned toot", "status.read_more": "Lektez pluse", - "status.reblog": "Repetar", - "status.reblog_private": "Bustez kun originala videbleso", - "status.reblogged_by": "{name} repetita", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblog": "Repetez", + "status.reblog_private": "Repetez kun originala videbleso", + "status.reblogged_by": "{name} repetis", + "status.reblogs.empty": "Nulu ja repetis ca posto. Kande ulu facas lo, lu montresos hike.", "status.redraft": "Efacez e riskisigez", "status.remove_bookmark": "Efacez libromarko", "status.replied_to": "Respondis a {name}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 0df1a5e753902a..fb839503e97e5c 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Engar fÃĻrslur", "account.featured_tags.title": "Myllumerki hjÃĄ {name} með aukið vÃĻgi", "account.follow": "Fylgjast með", + "account.follow_back": "Fylgjast með til baka", "account.followers": "Fylgjendur", "account.followers.empty": "EnnÃžÃĄ fylgist enginn með Þessum notanda.", "account.followers_counter": "{count, plural, one {Fylgjandi: {counter}} other {Fylgjendur: {counter}}}", "account.following": "Fylgist með", "account.following_counter": "{count, plural, one {Fylgist með: {counter}} other {Fylgist með: {counter}}}", "account.follows.empty": "Þessi notandi fylgist ennÃžÃĄ ekki með neinum.", - "account.follows_you": "Fylgir ÞÊr", "account.go_to_profile": "Fara í notandasnið", "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}", "account.in_memoriam": "Minning.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Þagga í tilkynningum", "account.mute_short": "Þagga niður", "account.muted": "Þaggaður", + "account.mutual": "Sameiginlegir", "account.no_bio": "Engri lÃŊsingu Ãētvegað.", "account.open_original_page": "Opna upprunalega síðu", "account.posts": "FÃĻrslur", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index fa659506a17225..4fb4d88cbc8964 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Nessun post", "account.featured_tags.title": "Hashtag in evidenza di {name}", "account.follow": "Segui", + "account.follow_back": "Segui a tua volta", "account.followers": "Follower", "account.followers.empty": "Ancora nessuno segue questo utente.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}", "account.following": "Seguiti", "account.following_counter": "{count, plural, one {{counter} Seguiti} other {{counter} Seguiti}}", "account.follows.empty": "Questo utente non segue ancora nessuno.", - "account.follows_you": "Ti segue", "account.go_to_profile": "Vai al profilo", "account.hide_reblogs": "Nascondi potenziamenti da @{name}", "account.in_memoriam": "In memoria.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silenzia notifiche", "account.mute_short": "Silenzia", "account.muted": "Mutato", + "account.mutual": "Reciproco", "account.no_bio": "Nessuna descrizione fornita.", "account.open_original_page": "Apri la pagina originale", "account.posts": "Post", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index cc46687977d31c..6abd739d7780e6 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -21,7 +21,7 @@ "account.blocked": "ブロック済ãŋ", "account.browse_more_on_origin_server": "ãƒĒãƒĸãƒŧãƒˆã§čĄ¨į¤ē", "account.cancel_follow_request": "フりロãƒŧãƒĒクエ゚トぎ取りæļˆã—", - "account.copy": "プロフã‚ŖãƒŧãƒĢぎãƒĒãƒŗクをã‚ŗピãƒŧしãĻ下さい", + "account.copy": "プロフã‚ŖãƒŧãƒĢへぎãƒĒãƒŗクをã‚ŗピãƒŧ", "account.direct": "@{name}さんãĢ非å…Ŧé–‹ã§ãƒĄãƒŗã‚ˇãƒ§ãƒŗ", "account.disable_notifications": "@{name}さんぎ投į¨ŋ時ぎ通įŸĨを停æ­ĸ", "account.domain_blocked": "ãƒ‰ãƒĄã‚¤ãƒŗブロック中", @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "投į¨ŋがありぞせん", "account.featured_tags.title": "{name}ぎæŗ¨į›Žãƒãƒƒã‚ˇãƒĨã‚ŋグ", "account.follow": "フりロãƒŧ", + "account.follow_back": "フりロãƒŧバック", "account.followers": "フりロワãƒŧ", "account.followers.empty": "ぞだčĒ°ã‚‚フりロãƒŧしãĻいぞせん。", "account.followers_counter": "{counter} フりロワãƒŧ", "account.following": "フりロãƒŧ中", "account.following_counter": "{counter} フりロãƒŧ", "account.follows.empty": "ぞだčĒ°ã‚‚フりロãƒŧしãĻいぞせん。", - "account.follows_you": "フりロãƒŧされãĻいぞす", "account.go_to_profile": "プロフã‚ŖãƒŧãƒĢペãƒŧジへ", "account.hide_reblogs": "@{name}さんからぎブãƒŧã‚šãƒˆã‚’éžčĄ¨į¤ē", "account.in_memoriam": "故äēēã‚’å˛ã‚“ã§ã€‚", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "通įŸĨをã‚ĒフãĢする", "account.mute_short": "ミãƒĨãƒŧト", "account.muted": "ミãƒĨãƒŧト済ãŋ", + "account.mutual": "į›¸äē’フりロãƒŧ中", "account.no_bio": "čĒŦ明が提䞛されãĻいぞせん。", "account.open_original_page": "元ぎペãƒŧジを開く", "account.posts": "投į¨ŋ", @@ -193,7 +194,7 @@ "conversation.mark_as_read": "æ—ĸčĒ­ãĢする", "conversation.open": "äŧščŠąã‚’襨į¤ē", "conversation.with": "{names}", - "copy_icon_button.copied": "クãƒĒップボãƒŧドãĢã‚ŗピãƒŧされた", + "copy_icon_button.copied": "ã‚ŗピãƒŧしぞした", "copypaste.copied": "ã‚ŗピãƒŧしぞした", "copypaste.copy_to_clipboard": "クãƒĒップボãƒŧドãĢã‚ŗピãƒŧ", "directory.federated": "æ—ĸįŸĨぎé€Ŗ合より", @@ -393,7 +394,7 @@ "lists.search": "フりロãƒŧしãĻいるäēēぎ中から検į´ĸ", "lists.subheading": "あãĒたぎãƒĒ゚ト", "load_pending": "{count}äģļぎ新į€", - "loading_indicator.label": "", + "loading_indicator.label": "čĒ­ãŋčžŧãŋ中â€Ļ", "media_gallery.toggle_visible": "{number, plural, one {į”ģ像を閉じる} other {į”ģ像を閉じる}}", "moved_to_account_banner.text": "あãĒたぎã‚ĸã‚Ģã‚Ļãƒŗト『{disabledAccount}』は『{movedToAccount}』ãĢį§ģ動したためįžåœ¨į„ĄåŠšãĢãĒãŖãĻいぞす。", "mute_modal.duration": "ミãƒĨãƒŧトする期間", @@ -483,17 +484,17 @@ "onboarding.follows.empty": "襨į¤ēできるįĩæžœã¯ã‚りぞせん。検į´ĸやエク゚プロãƒŧナãƒŧをäŊŋãŖたり、ãģかぎã‚ĸã‚Ģã‚Ļãƒŗトをフりロãƒŧしたり、垌でもう一åēĻčŠĻしください。", "onboarding.follows.lead": "ホãƒŧムã‚ŋイムナイãƒŗはMastodonぎčģ¸čļŗとãĒる場所です。たくさんぎãƒĻãƒŧã‚ļãƒŧをフりロãƒŧすることで、ホãƒŧムã‚ŋイムナイãƒŗはよりãĢぎやかでおもしろいもぎãĢãĒりぞす。手はじめãĢ、おすすめぎã‚ĸã‚Ģã‚ĻãƒŗトからäŊ•äēēかフりロãƒŧしãĻãŋぞしょう:", "onboarding.follows.title": "ホãƒŧムã‚ŋイムナイãƒŗを埋める", - "onboarding.profile.discoverable": "č‡Ē分ぎプロフã‚ŖãƒŧãƒĢがį™ēčĻ‹ã§ããĒいようãĢする", - "onboarding.profile.discoverable_hint": "マ゚トドãƒŗぎčĻ‹ã¤ã‘やすくする抟čƒŊが個äēēæƒ…å ąã‚’åˆŠį”¨ã™ã‚‹ã“とãĢæ‰ŋčĢžã™ã‚‹ã¨ã€ã‚ãĒたぎ投į¨ŋが検į´ĸįĩæžœã‚„トãƒŦãƒŗドãĢ襨į¤ēされることがありぞす。ぞた、あãĒたぎプロフã‚ŖãƒŧãƒĢがあãĒたとäŧŧãŸčˆˆå‘ŗé–ĸåŋƒã‚’持つäēēãĢææĄˆã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šãžã™ã€‚", + "onboarding.profile.discoverable": "č‡Ē分ぎプロフã‚ŖãƒŧãƒĢがčĻ‹ã¤ã‘られるようãĢする", + "onboarding.profile.discoverable_hint": "Mastodonぎ「čĻ‹ã¤ã‘る」抟čƒŊãĢã‚Ēプトイãƒŗすると、あãĒたぎ投į¨ŋが検į´ĸįĩæžœã‚„トãƒŦãƒŗドãĢ襨į¤ēされることがありぞす。ぞた、あãĒたãĢäŧŧたé–ĸåŋƒã‚’持つäēēãĢプロフã‚ŖãƒŧãƒĢがおすすめされることがありぞす。", "onboarding.profile.display_name": "襨į¤ē名", - "onboarding.profile.display_name_hint": "あãĒたぎフãƒĢネãƒŧム、ぞたはæĨŊしい名前â€Ļ", - "onboarding.profile.lead": "ã“ãŽã“ã¨ã¯åžŒã§ã„ã¤ã§ã‚‚č¨­åŽšã‹ã‚‰åŽŒäē†ã•ã›ã‚‹ã“とがå‡ēæĨãžã™ã—ã€č¨­åŽšã§ã¯æ›´ãĢ多くぎã‚Ģã‚šã‚ŋマイã‚ēが刊į”¨å¯čƒŊãĢãĒãŖãĻいぞす。", + "onboarding.profile.display_name_hint": "フãƒĢネãƒŧム、あるいはéĸį™Ŋい名前ãĒお", + "onboarding.profile.lead": "あとでいつでもäŋŽæ­Ŗã§ããžã™ã—ã€č¨­åŽšį”ģéĸãĢはこれäģĨ外ぎã‚Ģã‚šã‚ŋマイã‚ē項į›Žã‚‚ありぞす。", "onboarding.profile.note": "č‡Ēåˇąį´šäģ‹", - "onboarding.profile.note_hint": "@をäŊŋį”¨ã—ãĻäģ–ぎäēē々ãĢãƒĄãƒŗã‚ˇãƒ§ãƒŗをすることができぞす。ぞた#ã§ãƒãƒƒã‚ˇãƒĨã‚ŋグがäŊŋį”¨ã§ããžã™", - "onboarding.profile.save_and_continue": "äŋå­˜ã—ãĻからįļščĄŒã—ãĻ下さい", + "onboarding.profile.note_hint": "ãģかぎãƒĻãƒŧã‚ļãƒŧã¸ãŽãƒĄãƒŗã‚ˇãƒ§ãƒŗ (@mention) や、 #ãƒãƒƒã‚ˇãƒĨã‚ŋグ がäŊŋį”¨ã§ããžã™", + "onboarding.profile.save_and_continue": "äŋå­˜ã—ãĻįļšã‘ã‚‹", "onboarding.profile.title": "プロフã‚ŖãƒŧãƒĢãŽč¨­åŽš", - "onboarding.profile.upload_avatar": "プロフã‚ŖãƒŧãƒĢį”ģ像をã‚ĸップロãƒŧドしãĻください", - "onboarding.profile.upload_header": "プロフã‚ŖãƒŧãƒĢぎヘッダãƒŧį”ģ像をã‚ĸップロãƒŧドしãĻ下さい", + "onboarding.profile.upload_avatar": "プロフã‚ŖãƒŧãƒĢį”ģ像をã‚ĸップロãƒŧド", + "onboarding.profile.upload_header": "プロフã‚ŖãƒŧãƒĢぎヘッダãƒŧį”ģ像をã‚ĸップロãƒŧド", "onboarding.share.lead": "新しいMastodonぎã‚ĸã‚Ģã‚ĻãƒŗトをãŋんãĒãĢį´šäģ‹ã—ぞしょう。", "onboarding.share.message": "「{username}」で #Mastodon はじめぞしたīŧ {url}", "onboarding.share.next_steps": "æŦĄãŽã‚šãƒ†ãƒƒãƒ—ãĢé€˛ã‚€:", @@ -608,6 +609,7 @@ "search.quick_action.status_search": "{x}ãĢ芲åŊ“する投į¨ŋ", "search.search_or_paste": "検į´ĸぞたはURLをå…Ĩ力", "search_popout.full_text_search_disabled_message": "{domain}では刊į”¨ã§ããžã›ã‚“。", + "search_popout.full_text_search_logged_out_message": "ログイãƒŗ時ぎãŋ刊į”¨ã§ããžã™ã€‚", "search_popout.language_code": "ISO言čĒžã‚ŗãƒŧド", "search_popout.options": "検į´ĸã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ", "search_popout.quick_actions": "クイック操äŊœ", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 875ac3c195a771..9d977e93312076 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -15,7 +15,6 @@ "account.featured_tags.last_status_never": "პოსáƒĸები არ არიქ", "account.follow": "გაყოლა", "account.followers": "მიმდევრები", - "account.follows_you": "მოგყვებათ", "account.hide_reblogs": "დაიმალოს ბáƒŖქáƒĸები @{name}-სგან", "account.media": "მედია", "account.mention": "ასახელეთ @{name}", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index e9d4b57de831e3..08c70a9405a658 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -22,7 +22,6 @@ "account.followers_counter": "{count, plural, one {{count} n umeḍfar} other {{count} n imeḍfaren}}", "account.following_counter": "{count, plural, one {{counter} yettwaḍfaren} other {{counter} yettwaḍfaren}}", "account.follows.empty": "Ar tura, amseqdac-agi ur yeáš­áš­afaṛ yiwen.", - "account.follows_you": "Yeáš­áš­afaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeáš­áš­u @{name}", "account.link_verified_on": "TaÉŖara n useÉŖwen-a tettwasenqed ass n {date}", "account.locked_info": "Amiḍan-agi uslig isekweṛ. D bab-is kan i izemren ad yeĮ§Į§, s ufus-is, win ara t-iḍefṛen.", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 189d792e38630e..97b1991803272c 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -17,6 +17,7 @@ "account.badges.group": "ĐĸĐžĐŋ", "account.block": "@{name} Đ´ĐĩĐŗĐĩĐŊĐ´Ņ– ĐąŌąŌ“Đ°Ņ‚Ņ‚Đ°Ņƒ", "account.block_domain": "{domain} Đ´ĐžĐŧĐĩĐŊŅ–ĐŊ ĐąŌąŌ“Đ°Ņ‚Ņ‚Đ°Ņƒ", + "account.block_short": "БŌąŌ“Đ°Ņ‚Ņ‚Đ°Ņƒ", "account.blocked": "БŌąŌ“Đ°Ņ‚Ņ‚Đ°ĐģŌ“Đ°ĐŊ", "account.browse_more_on_origin_server": "БаŅŅ‚Đ°ĐŋŌ›Ņ‹ ĐŋŅ€ĐžŅ„иĐģŅŒĐ´ĐĩĐŊ ŅˆĐžĐģŅƒ", "account.cancel_follow_request": "Withdraw follow request", @@ -34,7 +35,6 @@ "account.following": "ЖазŅ‹ĐģŅ‹Đŧ", "account.following_counter": "{count, plural, one {{counter} ĐļаСŅ‹ĐģŅ‹Đŧ} other {{counter} ĐļаСŅ‹ĐģŅ‹Đŧ}}", "account.follows.empty": "БŌąĐģ Ō›ĐžĐģĐ´Đ°ĐŊŅƒŅˆŅ‹ Ķ™ĐģŅ– ĐĩŅˆĐēŅ–ĐŧĐŗĐĩ ĐļаСŅ‹ĐģĐŧĐ°Ō“Đ°ĐŊ.", - "account.follows_you": "ĐĄŅ–СĐŗĐĩ ĐļаСŅ‹ĐģŌ“Đ°ĐŊ", "account.go_to_profile": "ПŅ€ĐžŅ„иĐģŅ–ĐŊĐĩ ĶŠŅ‚Ņƒ", "account.hide_reblogs": "@{name} ĐąŅƒŅŅ‚Đ°Ņ€Ņ‹ĐŊ ĐļĐ°ŅŅ‹Ņ€Ņƒ", "account.joined_short": "ŌšĐžŅŅ‹ĐģŌ“Đ°ĐŊ", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 5b76cd67c5a8fb..70ce6611d62b83 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "게ė‹œëŦŧ ė—†ėŒ", "account.featured_tags.title": "{name} 님ė˜ ėļ”ė˛œ 해ė‹œíƒœęˇ¸", "account.follow": "팔로ėš°", + "account.follow_back": "맞팔로ėš°", "account.followers": "팔로ė›Œ", "account.followers.empty": "ė•„ė§ ė•„ëŦ´ë„ ė´ ė‚ŦėšŠėžëĨŧ 팔로ėš°í•˜ęŗ  ėžˆė§€ ė•ŠėŠĩ니다.", "account.followers_counter": "{counter} 팔로ė›Œ", "account.following": "팔로ėž‰", "account.following_counter": "{counter} 팔로ėž‰", "account.follows.empty": "ė´ ė‚ŦėšŠėžëŠ” ė•„ė§ ė•„ëŦ´ë„ 팔로ėš°í•˜ęŗ  ėžˆė§€ ė•ŠėŠĩ니다.", - "account.follows_you": "나ëĨŧ 팔로ėš°í•Šë‹ˆë‹¤", "account.go_to_profile": "프로필로 ė´ë™", "account.hide_reblogs": "@{name}ė˜ ëļ€ėŠ¤íŠ¸ëĨŧ ėˆ¨ę¸°ę¸°", "account.in_memoriam": "ęŗ ė¸ė˜ ęŗ„ė •ėž…니다.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ė•ŒëĻŧ 뮤트", "account.mute_short": "뮤트", "account.muted": "뮤트됨", + "account.mutual": "ėƒí˜¸ 팔로ėš°", "account.no_bio": "ė œęŗĩ된 ė„¤ëĒ…ė´ ė—†ėŠĩ니다.", "account.open_original_page": "ė›ëŗ¸ 페ė´ė§€ ė—´ę¸°", "account.posts": "게ė‹œëŦŧ", @@ -239,7 +240,7 @@ "empty_column.follow_requests": "ė•„ė§ 팔로ėš° ėš”ė˛­ė´ ė—†ėŠĩ니다. ėš”ė˛­ė„ 받ė•˜ė„ 때 ė—Ŧ기ė— 나타납니다.", "empty_column.followed_tags": "ė•„ė§ ė•„ëŦ´ 해ė‹œíƒœęˇ¸ë„ 팔로ėš°í•˜ęŗ  ėžˆė§€ ė•ŠėŠĩ니다. 해ė‹œíƒœęˇ¸ëĨŧ 팔로ėš°í•˜ëŠ´, ė—Ŧ기ė— 표ė‹œëŠë‹ˆë‹¤.", "empty_column.hashtag": "ė´ 해ė‹œíƒœęˇ¸ëŠ” ė•„ė§ ė‚ŦėšŠë˜ė§€ ė•Šė•˜ėŠĩ니다.", - "empty_column.home": "당ė‹ ė˜ 홈 타ėž„ëŧė¸ė€ 비ė–´ėžˆėŠĩ니다! 더 많ė€ ė‚Ŧ람들ė„ 팔로ėš° 하ė—Ŧ ėą„ė›Œëŗ´ė„¸ėš”. {suggestions}", + "empty_column.home": "당ė‹ ė˜ 홈 타ėž„ëŧė¸ė€ 비ė–´ėžˆėŠĩ니다! 더 많ė€ ė‚Ŧ람ė„ 팔로ėš°í•˜ė—Ŧ ėą„ė›Œëŗ´ė„¸ėš”.", "empty_column.list": "ëĻŦėŠ¤íŠ¸ė— ė•„ė§ ė•„ëŦ´ę˛ƒë„ ė—†ėŠĩ니다. ëĻŦėŠ¤íŠ¸ė˜ 누ęĩ°ę°€ę°€ 게ė‹œëŦŧė„ ė˜ŦëĻŦ늴 ė—Ŧ기ė— 나타납니다.", "empty_column.lists": "ė•„ė§ ëĻŦėŠ¤íŠ¸ę°€ ė—†ėŠĩ니다. ëĻŦėŠ¤íŠ¸ëĨŧ 만들면 ė—Ŧ기ė— 나타납니다.", "empty_column.mutes": "ė•„ė§ ė•„ëŦ´ë„ 뮤트하ė§€ ė•Šė•˜ėŠĩ니다.", @@ -658,7 +659,7 @@ "status.media_hidden": "미디ė–´ ėˆ¨ę˛¨ė§", "status.mention": "@{name} 님ė—ę˛Œ 늘ė…˜", "status.more": "ėžė„¸ížˆ", - "status.mute": "@{name} 님ė„ 뮤트하기", + "status.mute": "@{name} 뮤트", "status.mute_conversation": "ė´ 대화ëĨŧ 뮤트", "status.open": "ėƒė„¸ ė •ëŗ´ 표ė‹œ", "status.pin": "ęŗ ė •", @@ -673,7 +674,7 @@ "status.replied_to": "{name} 님ė—ę˛Œ", "status.reply": "ë‹ĩėžĨ", "status.replyAll": "글타래ė— ë‹ĩėžĨ", - "status.report": "{name} 님ė„ ė‹ ęŗ í•˜ę¸°", + "status.report": "@{name} ė‹ ęŗ í•˜ę¸°", "status.sensitive_warning": "ë¯ŧ감한 내ėšŠ", "status.share": "ęŗĩėœ ", "status.show_filter_reason": "꡸ëƒĨ 표ė‹œí•˜ę¸°", @@ -682,7 +683,7 @@ "status.show_more": "íŽŧėš˜ę¸°", "status.show_more_all": "ëĒ¨ë‘ íŽŧėš˜ę¸°", "status.show_original": "ė›ëŗ¸ ëŗ´ę¸°", - "status.title.with_attachments": "{user} 님ė´ {attachmentCount, plural, one {ė˛¨ëļ€} other {{attachmentCount}개 ė˛¨ëļ€}}하ė—Ŧ 게ė‹œ", + "status.title.with_attachments": "{user} 님ė´ {attachmentCount, plural, one {ė˛¨ëļ€íŒŒėŧ} other {{attachmentCount}개ė˜ ė˛¨ëļ€íŒŒėŧ}}ęŗŧ 함ęģ˜ 게ė‹œí•¨", "status.translate": "번ė—­", "status.translated_from_with": "{provider}ė— ė˜í•´ {lang}ė—ė„œ 번ė—­ë¨", "status.uncached_media_warning": "마ëĻŦëŗ´ę¸° 허ėšŠë˜ė§€ ė•ŠėŒ", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index b94054267741c3..7d8603cae178fc 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -36,7 +36,6 @@ "account.following": "DişopÃŽne", "account.following_counter": "{count, plural, one {{counter} DişopÃŽne} other {{counter} DişopÃŽne}}", "account.follows.empty": "Ev bikarhÃĒner hin kesekÃŽ heya niha neşopandiye.", - "account.follows_you": "Te dişopÃŽne", "account.go_to_profile": "Biçe bo profÃŽlÃĒ", "account.hide_reblogs": "BilindkirinÃĒn ji @{name} veşÃĒre", "account.in_memoriam": "Di bÃŽranÃŽnÃĒ de.", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index ca08ca836ebbd0..8f384fe1257ea2 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -20,7 +20,6 @@ "account.followers_counter": "{count, plural, one {{counter} Holyer} other {{counter} Holyer}}", "account.following_counter": "{count, plural, one {Ow holya {counter}} other {Ow holya {counter}}}", "account.follows.empty": "Ny wra'n devnydhyer ma holya nagonan hwath.", - "account.follows_you": "Y'th hol", "account.hide_reblogs": "Kudha kenerthow a @{name}", "account.link_verified_on": "Perghenogeth an kolm ma a veu checkys dhe {date}", "account.locked_info": "Studh privetter an akont ma yw alhwedhys. An perghen a wra dasweles dre leuv piw a yll aga holya.", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index e4bd9365a87c74..3e5747ba8ba5a1 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -1,6 +1,6 @@ { "about.contact": "Ratio:", - "about.domain_blocks.no_reason_available": "ratio abdere est", + "about.domain_blocks.no_reason_available": "Ratio abdere est", "account.account_note_header": "Annotatio", "account.badges.bot": "Robotum", "account.badges.group": "Congregatio", @@ -49,7 +49,7 @@ "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", "embed.instructions": "Embed this status on your website by copying the code below.", - "emoji_button.food": "cibus et potus", + "emoji_button.food": "Cibus et potus", "emoji_button.people": "Homines", "emoji_button.search": "Quaerere...", "empty_column.account_timeline": "Hic nulla contributa!", @@ -57,13 +57,13 @@ "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "explore.trending_statuses": "Contributa", - "generic.saved": "servavit", + "generic.saved": "Servavit", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.back": "Re navigare", + "keyboard_shortcuts.blocked": "Aperire listam usorum obstructorum", + "keyboard_shortcuts.boost": "Inlustrare publicatio", + "keyboard_shortcuts.column": "Columnam dirigere", + "keyboard_shortcuts.compose": "TextArea Compositi Attendere", "keyboard_shortcuts.description": "Descriptio", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json new file mode 100644 index 00000000000000..8fde68742774a2 --- /dev/null +++ b/app/javascript/mastodon/locales/lad.json @@ -0,0 +1,739 @@ +{ + "about.blocks": "Sirvidores moderados", + "about.contact": "Kontakto:", + "about.disclaimer": "Mastodon es un programario libero, kon kodiche avierto i una marka komersiala de Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Razon no desponivle", + "about.domain_blocks.preamble": "Mastodon djeneralmente te permete ver kontenido de i enteraktuar kon utilizadores de kualseker otro sirvidor en el fediverso. Estas son las eksepsiones en este sirvidor en partikolar.", + "about.domain_blocks.silenced.explanation": "\"Djeneralmente no veras profiles i kontenido de este sirvidor, salvo ke eksplisitamente lo bushkes o sigas algun kuento de el.", + "about.domain_blocks.silenced.title": "Limitado", + "about.domain_blocks.suspended.explanation": "Dingunos datos de este sirvidor sera prosesado, magazinado o enterkambiado kon este sirvidor. Enteraksyon o komunikasyon kon sus utilizadores sera imposivle.", + "about.domain_blocks.suspended.title": "Suspendido", + "about.not_available": "Esta enformasyon no esta desponivle en este sirvidor.", + "about.powered_by": "Redes sosyalas desentralizadas kon uzo de {mastodon}", + "about.rules": "Reglas del sirvidor", + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Adjusta a o kita de listas", + "account.badges.bot": "Bot", + "account.badges.group": "Grupo", + "account.block": "Bloka @{name}", + "account.block_domain": "Bloka el domeno {domain}", + "account.block_short": "Bloka", + "account.blocked": "Blokado", + "account.browse_more_on_origin_server": "Ve mas en el profil orijinal", + "account.cancel_follow_request": "Anula solisitud de segir", + "account.copy": "Kopia atadijo de profil", + "account.direct": "Enmenta a @{name} en privado", + "account.disable_notifications": "No me avizes mas sovre publikasyones de @{name}", + "account.domain_blocked": "Domeno blokado", + "account.edit_profile": "Edita profil", + "account.enable_notifications": "Avizame kuando @{name} publike", + "account.endorse": "Avalia en profil", + "account.featured_tags.last_status_at": "Ultima publikasyon de {date}", + "account.featured_tags.last_status_never": "\"No ay publikasyones", + "account.featured_tags.title": "Etiketas avaliadas de {name}", + "account.follow": "Sige", + "account.follow_back": "Sige tamyen", + "account.followers": "Suivantes", + "account.followers.empty": "Por agora dingun no sige a este utilizador.", + "account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}", + "account.following": "Sigiendo", + "account.following_counter": "{count, plural, other {Sigiendo a {counter}}}", + "account.follows.empty": "Este utilizador ainda no sige a ningun.", + "account.go_to_profile": "Va al profil", + "account.hide_reblogs": "Eskonde repartajasyones de @{name}", + "account.in_memoriam": "De bendicha memoria.", + "account.joined_short": "Adjunto", + "account.languages": "Troka linguas suskrividas", + "account.link_verified_on": "La propriedad de este atadijo fue verifikada el {date}", + "account.locked_info": "El estado de privasita de este konto esta konfigurado komo serado. El proprietario reviza manualmente kien le puede segir.", + "account.media": "Multimedia", + "account.mention": "Enmenta a @{name}", + "account.moved_to": "{name} tiene endikado ke su muevo kuento agora es:", + "account.mute": "Silensia a @{name}", + "account.mute_notifications_short": "Silensia avizos de @{name}", + "account.mute_short": "Silensia", + "account.muted": "Silensiado", + "account.mutual": "Mutual", + "account.no_bio": "No ay deskripsion.", + "account.open_original_page": "Avre pajina orijnala", + "account.posts": "Publikasyones", + "account.posts_with_replies": "Kon repuestas", + "account.report": "Raporta @{name}", + "account.requested": "Asperando achetasion. Klika para anular la solisitud de segimiento", + "account.requested_follow": "{name} tiene solisitado segirte", + "account.share": "Partaja el profil de @{name}", + "account.show_reblogs": "Amostra repartajasyones de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", + "account.unblock": "Dezbloka @{name}", + "account.unblock_domain": "Dezbloka domeno {domain}", + "account.unblock_short": "Dezbloka", + "account.unendorse": "No avalia en profil", + "account.unfollow": "Desige", + "account.unmute": "Desilensia a @{name}", + "account.unmute_notifications_short": "Desilensia avizos", + "account.unmute_short": "Desilensia", + "account_note.placeholder": "Klika para adjustar nota", + "admin.dashboard.daily_retention": "Proporsyon de retensyon de utilizadores por diya dempues de enrejistrasyon", + "admin.dashboard.monthly_retention": "Proporsyon de retensyon de utilizadores por mez dempues de enrejistrasyon", + "admin.dashboard.retention.average": "Media", + "admin.dashboard.retention.cohort": "Mez de enrejistrasyon", + "admin.dashboard.retention.cohort_size": "Muevos utilizadores", + "admin.impact_report.instance_accounts": "Profiles de kuentos esto efasaria", + "admin.impact_report.instance_followers": "Suivantes a los kualos nuestros utilizadores perderian", + "admin.impact_report.instance_follows": "Suivantes a los kualos sus utilizadores perderian", + "admin.impact_report.title": "Rezumen de impakto", + "alert.rate_limited.message": "Por favor aprova dempues de {retry_time, time, medium}.", + "alert.rate_limited.title": "Trafiko limitado", + "alert.unexpected.message": "Afito un yerro no asperado.", + "alert.unexpected.title": "Atyo!", + "announcement.announcement": "Pregon", + "attachments_list.unprocessed": "(no prosesado)", + "audio.hide": "Eskonder audio", + "autosuggest_hashtag.per_week": "{count} por semana", + "boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez", + "bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro", + "bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.", + "bundle_column_error.error.title": "Atyo, no!", + "bundle_column_error.network.body": "Uvo un yerro kon la prova de eskargar esta pajina. Esto puede ser por un problem temporal kon tu koneksyon a la internet o a este sirvidor.", + "bundle_column_error.network.title": "Yerro de red", + "bundle_column_error.retry": "Aprova de muevo", + "bundle_column_error.return": "Volta a la linya prinsipala", + "bundle_column_error.routing.body": "No se pudo trokar la pajina solisitada. Estas siguro ke el adreso URL en la vara de adreso es djusto?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Serra", + "bundle_modal_error.message": "Algo negro afito al eskargar este komponente.", + "bundle_modal_error.retry": "Aprova de muevo", + "closed_registrations.other_server_instructions": "Deke Mastodon es desentralizado, puedes kriyar un kuento en otro sirvidor i ainda enteraktuar kon este.", + "closed_registrations_modal.description": "Aktualmente no es posivle kriyar un kuento en {domain}, ama por favor akodrate de ke no ay menester de tener un kuento espesifikamente en {domain} para kulanear Mastodon.", + "closed_registrations_modal.find_another_server": "Bushka otro sirvidor", + "closed_registrations_modal.preamble": "Mastodon es desentralizado, estonses sin emportansya ande kriyas tu kuento, podras segir i enteraktuar kon kualseker persona en este sirvidor. Tamyen puedes balabayarlo tu mezmo!", + "closed_registrations_modal.title": "Enrerjistrate en Mastodon", + "column.about": "Sovre mozotros", + "column.blocks": "Utilizadores blokados", + "column.bookmarks": "Markadores", + "column.community": "Linya de tiempo lokala", + "column.direct": "Enmentaduras privadas", + "column.directory": "Eksplora profiles", + "column.domain_blocks": "Domenos blokados", + "column.favourites": "Te plazen", + "column.firehose": "Linyas en bivo", + "column.follow_requests": "Solisitudes de segimiento", + "column.home": "Linya prinsipala", + "column.lists": "Listas", + "column.mutes": "Utilizadores silensiados", + "column.notifications": "Avizos", + "column.pins": "Publikasyones fiksadas", + "column.public": "Linya de tiempo federada", + "column_back_button.label": "Atras", + "column_header.hide_settings": "Eskonde opsyones", + "column_header.moveLeft_settings": "Move kolumna a la siedra", + "column_header.moveRight_settings": "Move kolumna a la derecha", + "column_header.pin": "Fiksa", + "column_header.show_settings": "Amostra opsyones", + "column_header.unpin": "Defiksar", + "column_subheading.settings": "Opsyones", + "community.column_settings.local_only": "Solo lokalas", + "community.column_settings.media_only": "Solo multimedia", + "community.column_settings.remote_only": "Solo remotas", + "compose.language.change": "Troka lingua", + "compose.language.search": "Bushka linguas...", + "compose.published.body": "Publikasyon publikada.", + "compose.published.open": "Avre", + "compose.saved.body": "Publikasyon guadrada.", + "compose_form.direct_message_warning_learn_more": "Ambezate mas", + "compose_form.encryption_warning": "Publikasyones en Mastodon no son shifradas de lado a lado. No partajes dinguna enformasyon sensivle por Mastodon.", + "compose_form.hashtag_warning": "Esta publikasyon no sera amostrada debasho de dinguna etiketa si no es publika. Solo publikasyones publikas se pueden bushkar por la etiketa.", + "compose_form.lock_disclaimer": "Tu kuento no esta {locked}. Todos pueden segirte para ver tus publikasyones solo para suivantes.", + "compose_form.lock_disclaimer.lock": "serrado", + "compose_form.placeholder": "Ke haber?", + "compose_form.poll.add_option": "Adjusta opsyon", + "compose_form.poll.duration": "Durasion de anketa", + "compose_form.poll.option_placeholder": "Opsyon {number}", + "compose_form.poll.remove_option": "Kita esta opsyon", + "compose_form.poll.switch_to_multiple": "Trokar anketa para permeter a eskojer mas ke una opsyon", + "compose_form.poll.switch_to_single": "Trokar anketa para permeter a eskojer solo una opsyon", + "compose_form.publish": "Publika", + "compose_form.publish_form": "Mueva publikasyon", + "compose_form.publish_loud": "{publish}!", + "compose_form.save_changes": "Guadra trokamientos", + "compose_form.sensitive.hide": "{count, plural, one {Marka material komo sensivle} other {Marka material komo sensivle}}", + "compose_form.sensitive.marked": "{count, plural, one {Material markado komo sensivle} other {Material markado komo sensivle}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Material no markado komo sensivle} other {Material no markado komo sensivle}}", + "compose_form.spoiler.marked": "Kita avertensya de kontenido", + "compose_form.spoiler.unmarked": "Adjusta avertensya de kontenido", + "compose_form.spoiler_placeholder": "Eskrive tu avertensya aki", + "confirmation_modal.cancel": "Anula", + "confirmations.block.block_and_report": "Bloka i raporta", + "confirmations.block.confirm": "Bloka", + "confirmations.block.message": "Estas siguro ke keres blokar a {name}?", + "confirmations.cancel_follow_request.confirm": "Anula solisitud", + "confirmations.cancel_follow_request.message": "Estas siguro ke keres anular tu solisitud de segir a {name}?", + "confirmations.delete.confirm": "Efasa", + "confirmations.delete.message": "Estas siguro ke keres efasar esta publikasyon?", + "confirmations.delete_list.confirm": "Efasa", + "confirmations.delete_list.message": "Estas siguro ke keres permanentemente efasar esta lista?", + "confirmations.discard_edit_media.confirm": "Anula", + "confirmations.discard_edit_media.message": "Tienes trokamientos no guadrados en la deskripsion o vista previa. Keres efasarlos entanto?", + "confirmations.domain_block.confirm": "Bloka domeno entero", + "confirmations.domain_block.message": "Estas totalmente siguro ke keres blokar todo el domeno {domain}? En djeneral unos kuantos blokos o silensiamientos son sufisientes i preferavles. No veras kontenido de akel domeno en dinguna linya de tiempo publika ni ent tus avizos. Tus suivantes de akel domeno seran kitados.", + "confirmations.edit.confirm": "Edita", + "confirmations.edit.message": "Editar agora kitara el mesaj kualo estas eskriviendo aktualmente. Estas siguro ke keres fazerlo?", + "confirmations.logout.confirm": "Sal", + "confirmations.logout.message": "Estas siguro ke keres salir de tu kuento?", + "confirmations.mute.confirm": "Silensia", + "confirmations.mute.explanation": "Esto eskondera las publikasyones de este kuento i publikasyones ke lo enmentan, pero ainda les permetera segirte.", + "confirmations.mute.message": "Estas siguro ke keres silensiar a {name}?", + "confirmations.redraft.confirm": "Efasar i reeskrivir", + "confirmations.redraft.message": "Estas siguro ke keres efasar esta publikasyon i reeskrivirla? Pedreras todos los favoritos i repartajasyones asosiados kon esta publikasyon i repuestas a eya seran guerfanadas.", + "confirmations.reply.confirm": "Arisponde", + "confirmations.reply.message": "Arispondir agora kitara el mesaj kualo estas eskriviendo aktualmente. Estas siguro ke keres fazerlo?", + "confirmations.unfollow.confirm": "Desige", + "confirmations.unfollow.message": "Estas siguro ke keres deshar de segir a {name}?", + "conversation.delete": "Efasa konversasyon", + "conversation.mark_as_read": "Marka komo meldado", + "conversation.open": "Ve konversasyon", + "conversation.with": "Kon {names}", + "copy_icon_button.copied": "Kopiado al portapapeles", + "copypaste.copied": "Kopiado", + "copypaste.copy_to_clipboard": "Kopia al portapapeles", + "directory.federated": "Dizde el fediverso konesido", + "directory.local": "Solo de {domain}", + "directory.new_arrivals": "Arivados resientemente", + "directory.recently_active": "Aktivos resientemente", + "disabled_account_banner.account_settings": "Preferensyas de kuento", + "disabled_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado.", + "dismissable_banner.community_timeline": "Estas son las publikasyones publikas mas resientes de las personas kualos kuentos estan balabayados en {domain}.", + "dismissable_banner.dismiss": "Kita", + "dismissable_banner.explore_links": "Estos haberes estan diskutidos agora por djente en este sirvidor i otros de la red desentralizada.", + "dismissable_banner.explore_statuses": "Estas publikasyones de este sirvidor i otros de la red desentralizada estan agora popularas. Publikasyones mas muevas, kon mas repartajasiones i favoritadas por mas djente aparesen primero.", + "dismissable_banner.explore_tags": "Estas etiketas estan agora popularas en la red sosyala. Etiketas uzadas por mas djente aparesen primero.", + "dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.", + "embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.", + "embed.preview": "Ansi paresera:", + "emoji_button.activity": "Aktivita", + "emoji_button.clear": "Alimpia", + "emoji_button.custom": "Personalizado", + "emoji_button.flags": "Bandieras", + "emoji_button.food": "Kumidas i beverajes", + "emoji_button.label": "Adjustar emoji", + "emoji_button.nature": "Natura", + "emoji_button.not_found": "Emojis no topados", + "emoji_button.objects": "Objektos", + "emoji_button.people": "Djente", + "emoji_button.recent": "Uzados frekuentemente", + "emoji_button.search": "Bushka...", + "emoji_button.search_results": "Rizultados de bushkeda", + "emoji_button.symbols": "Simbolos", + "emoji_button.travel": "Viajes i lugares", + "empty_column.account_hides_collections": "Este utilizador desidio no mostrar esta enformasyon", + "empty_column.account_suspended": "Kuento suspendido", + "empty_column.account_timeline": "No ay publikasyones aki!", + "empty_column.account_unavailable": "Profil no desponivle", + "empty_column.blocks": "Ainda no tienes blokado a dingun utilizador.", + "empty_column.bookmarked_statuses": "Ainda no tienes dinguna publikasyon kon markador. Kuando adjustes un markador a una, se amostrara aki.", + "empty_column.community": "La linya de tiempo lokala esta vaziya. Eskrive algo publikamente para ampesar la fiesta!", + "empty_column.direct": "Ainda no tienes enmentaduras privadas. Kuando embies o risives una, se amostra aki.", + "empty_column.domain_blocks": "Ainda no ay domenos blokados.", + "empty_column.explore_statuses": "No ay dingunos trendes agora. Mira mas tadre!", + "empty_column.favourited_statuses": "Ainda no tienes publikasyones favoritas. Kuando indikes ke una te plaze, se amostrara aki.", + "empty_column.favourites": "Nadie tiene indikado ke le plaze una de tus publikasyones. Kuando algun lo aga, se amostrara aki.", + "empty_column.follow_requests": "No tienes dinguna solisitud de suivante. Kuando risivas una, se amostrara aki.", + "empty_column.followed_tags": "Ainda no tienes segido dinguna etiketa. Kuando lo agas, se amostraran aki.", + "empty_column.hashtag": "Ainda no ay niente en esta etiketa.", + "empty_column.home": "Tu linya de tiempo esta vaziya! Sige a mas personas para inchirla.", + "empty_column.list": "Ainda no ay niente en esta lista. Kuando miembros de esta lista publiken muevas publikasyones, se amostraran aki.", + "empty_column.lists": "Ainda no tienes dinguna lista. Kuando kriyes una, aperesera aki.", + "empty_column.mutes": "Ainda no tienes silensiado a dingun utilizador.", + "empty_column.notifications": "Ainda no tienes dingun avizo. Kuando otras personas enteraktuen kontigo, se amostraran aki.", + "empty_column.public": "No ay niente aki! Eskrive algo publikamente o manualmente sige utilizadores de otros sirvidores para inchirlo", + "error.unexpected_crash.explanation": "Por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador, no se puede amostrar esta pajina djustamente.", + "error.unexpected_crash.explanation_addons": "No se puede amostrar esta pajina djustamente. Este yerro probavlemente fue kauzado por un komplimento del navigador o por un enstrumento de traduksion.", + "error.unexpected_crash.next_steps": "Aprova arefreskar la pajina. Si esto no ayuda, es posivle ke ainda puedas kulaenar Mastodon kon otro navigador u otra aplikasyon nativa.", + "error.unexpected_crash.next_steps_addons": "Aprova inkapasitarlos i arefreskar la pajina. Si esto no ayuda, es posivle ke ainda puedas kulanear Mastodon kon otro navigador u otra aplikasyon nativa.", + "errors.unexpected_crash.copy_stacktrace": "Kopiar stacktrace al portapapeles", + "errors.unexpected_crash.report_issue": "Raportar problema", + "explore.search_results": "Rizultados de bushkeda", + "explore.suggested_follows": "Djente", + "explore.title": "Eksplorar", + "explore.trending_links": "Haberes", + "explore.trending_statuses": "Publikasyones", + "explore.trending_tags": "Etiketas", + "filter_modal.added.context_mismatch_explanation": "Esta kategoria del filtro no se aplika al konteksto en ke tienes aksesido esta publikasyon. Si keres ke la publikasyon sea filtrada en este konteksto tamyen, kale editar el filtro.", + "filter_modal.added.context_mismatch_title": "El konteksto no koensida!", + "filter_modal.added.expired_explanation": "Esta kategoria de filtros tiene kadukado. Kale ke trokar la data de kadukasion para aplikarla.", + "filter_modal.added.expired_title": "Filtro kadukado!", + "filter_modal.added.review_and_configure": "Para revizar i konfigurar esta kategoria de filtros, va a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Konfigurasyon de filtro", + "filter_modal.added.settings_link": "pajina de konfigurasyon", + "filter_modal.added.short_explanation": "Esta publikasyon fue adjustada a la sigiente kategoria de filtros: {title}.", + "filter_modal.added.title": "Filtro adjustado!", + "filter_modal.select_filter.context_mismatch": "no se aplika a este konteksto", + "filter_modal.select_filter.expired": "kadukado", + "filter_modal.select_filter.prompt_new": "Mueva kategoria: {name}", + "filter_modal.select_filter.search": "Bushkar o kriyar", + "filter_modal.select_filter.subtitle": "Kulanear una kategoria egzistente o kriya mueva", + "filter_modal.select_filter.title": "Filtrar esta publikasyon", + "filter_modal.title.status": "Filtrar una publikasyon", + "firehose.all": "Todo", + "firehose.local": "Este sirvidor", + "firehose.remote": "Otros sirvidores", + "follow_request.authorize": "Autoriza", + "follow_request.reject": "Refuza", + "follow_requests.unlocked_explanation": "Aunke tu kuento no esta serrado, la taifa de {domain} kreye ke talvez keres revizar manualmente las solisitudes de segimento de estos kuentos.", + "followed_tags": "Etiketas segidas", + "footer.about": "Sovre mozotros", + "footer.directory": "Katalogo de profiles", + "footer.get_app": "Abasha aplikasyon", + "footer.invite": "Envitar a djente", + "footer.keyboard_shortcuts": "Akortamientos de klavye", + "footer.privacy_policy": "Politika de privasita", + "footer.source_code": "Ve kodiche fuente", + "footer.status": "Estado", + "generic.saved": "Guadrado", + "getting_started.heading": "Primos pasos", + "hashtag.column_header.tag_mode.all": "i {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "Rekomendasyones no topadas", + "hashtag.column_settings.select.placeholder": "Meter etiketasâ€Ļ", + "hashtag.column_settings.tag_mode.all": "Todos estos", + "hashtag.column_settings.tag_mode.any": "Kualsekera de estos", + "hashtag.column_settings.tag_mode.none": "Dinguno de estos", + "hashtag.column_settings.tag_toggle": "Inkluir etiketas adisionalas en esta kolumna", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} partisipante} other {{counter} partisipantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}} oy", + "hashtag.follow": "Segir etiketa", + "hashtag.unfollow": "Desegir etiketa", + "hashtags.and_other": "â€Ļi {count, plural, one {}other {# mas}}", + "home.actions.go_to_explore": "Ve los trendes", + "home.actions.go_to_suggestions": "Topa a djente para segir", + "home.column_settings.basic": "Opsyones bazikas", + "home.column_settings.show_reblogs": "Amostrar repartajasyones", + "home.column_settings.show_replies": "Amostrar repuestas", + "home.explore_prompt.body": "Tu linya prinsipala es una mikstura de publikasyones kon etiketas a las kualas eskojites a segir, la djente a la kuala eskojites a segir i las publikasyones ke eyos repartajan. Si esta demaziado trankila, puedes:", + "home.explore_prompt.title": "Esta es tu baza prinsipala en Mastodon.", + "home.hide_announcements": "Eskonde pregones", + "home.pending_critical_update.body": "Por favor aktualiza tu sirvidor de Mastodon pishin!", + "home.pending_critical_update.link": "Ve aktualizasyones", + "home.pending_critical_update.title": "Aktualizasyon de seguridad kritika esta desponivle!", + "home.show_announcements": "Amostra pregones", + "interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.", + "interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.", + "interaction_modal.description.reblog": "Kon un kuento en Mastodon, puedes repartajar esta publikasyon para amostrarla a tus suivantes.", + "interaction_modal.description.reply": "Kon un kuento en Mastodon, puedes arispondir a esta publikasyon.", + "interaction_modal.login.action": "Va a tu sirvidor", + "interaction_modal.login.prompt": "Domeno del sirvidor de tu kuento, por enshemplo mastodon.social", + "interaction_modal.no_account_yet": "No tyenes kuento de Mastodon?", + "interaction_modal.on_another_server": "En otro sirvidor", + "interaction_modal.on_this_server": "En este sirvidor", + "interaction_modal.sign_in": "No estas konektado kon este sirvidor. Ande tyenes tu kuento?", + "interaction_modal.sign_in_hint": "Konsejo: Akel es el sitio adonde te enrejistrates. Si no lo akodras, bushka el mesaj de posta elektronika de bienvenida en tu kuti de arivo. Tambien puedes eskrivir tu nombre de utilizador kompleto (por enshemplo @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Endika ke te plaze publikasyon de {name}", + "interaction_modal.title.follow": "Sige a {name}", + "interaction_modal.title.reblog": "Repartaja publikasyon de {name}", + "interaction_modal.title.reply": "Arisponde a publikasyon de {name}", + "intervals.full.days": "{number, plural, one {# diya} other {# diyas}}", + "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", + "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", + "keyboard_shortcuts.back": "Volta atras", + "keyboard_shortcuts.blocked": "Avre lista de utilizadores blokados", + "keyboard_shortcuts.boost": "Repartaja publikasyon", + "keyboard_shortcuts.column": "Enfoka en una kolumna", + "keyboard_shortcuts.compose": "Enfoka en el area de eskrivir publikasyon", + "keyboard_shortcuts.description": "Deskripsyon", + "keyboard_shortcuts.direct": "Avre la kolumna de enmentaduras privadas", + "keyboard_shortcuts.down": "Move verso abasho en la lista", + "keyboard_shortcuts.enter": "Avre publikasyon", + "keyboard_shortcuts.favourite": "Endika ke te plaze una publikasyon", + "keyboard_shortcuts.favourites": "Avre lista de favoritos", + "keyboard_shortcuts.federated": "Avre linya federada", + "keyboard_shortcuts.heading": "Akortamientos de klavye", + "keyboard_shortcuts.home": "Avre linya prinsipala", + "keyboard_shortcuts.hotkey": "Klave rapido", + "keyboard_shortcuts.legend": "Amostra esta lejenda", + "keyboard_shortcuts.local": "Avre linya lokala", + "keyboard_shortcuts.mention": "Enmenta al autor", + "keyboard_shortcuts.muted": "Avre lista de utilizadores silensiados", + "keyboard_shortcuts.my_profile": "Avre tu profil", + "keyboard_shortcuts.notifications": "Avre kolumna de avizos", + "keyboard_shortcuts.open_media": "Avre multimedia", + "keyboard_shortcuts.pinned": "Avre lista de publikasyones fiksadas", + "keyboard_shortcuts.profile": "Avre profil del autor", + "keyboard_shortcuts.reply": "Arisponde a publikasyon", + "keyboard_shortcuts.requests": "Avre lista de solisitudes de suivantes", + "keyboard_shortcuts.search": "Enfoka en la vara de bushkeda", + "keyboard_shortcuts.spoilers": "Amostra/eskonde el kampo de avertensya de kontenido (CW)", + "keyboard_shortcuts.start": "Avre la kolumna \"para ampesar\"", + "keyboard_shortcuts.toggle_hidden": "Amostra/eskonde teksto detras de avertensya de kontenido (CW)", + "keyboard_shortcuts.toggle_sensitivity": "Amostra/eskonde multimedia", + "keyboard_shortcuts.toot": "Eskrive mueva publikasyon", + "keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda", + "keyboard_shortcuts.up": "Move verso arriva en la lista", + "lightbox.close": "Serra", + "lightbox.compress": "Kompresa kuadro de imaje", + "lightbox.expand": "Espande kuadro de imaje", + "lightbox.next": "Sigiente", + "lightbox.previous": "Anterior", + "limited_account_hint.action": "Amostra el profil entanto", + "limited_account_hint.title": "Este profil fue eskondido por los moderadores de {domain}.", + "link_preview.author": "Publikasyon de {name}", + "lists.account.add": "Adjusta a lista", + "lists.account.remove": "Kita de lista", + "lists.delete": "Efasa lista", + "lists.edit": "Edita lista", + "lists.edit.submit": "Troka titolo", + "lists.exclusive": "Eskonder estas publikasyones de linya prinsipala", + "lists.new.create": "Adjusta lista", + "lists.new.title_placeholder": "Titolo de mueva lista", + "lists.replies_policy.followed": "Kualseker utilizardo segido", + "lists.replies_policy.list": "Miembros de la lista", + "lists.replies_policy.none": "Dinguno", + "lists.replies_policy.title": "Amostra repuestas a:", + "lists.search": "Bushka entre personas a las kualas siges", + "lists.subheading": "Tus listas", + "load_pending": "{count, plural, one {# muevo elemento} other {# muevos elementos}}", + "loading_indicator.label": "Eskargandoâ€Ļ", + "media_gallery.toggle_visible": "{number, plural, one {Eskonde imaje} other {Eskonde imajes}}", + "moved_to_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado porke transferates a {movedToAccount}.", + "mute_modal.duration": "Durasyon", + "mute_modal.hide_notifications": "Eskonder avizos de este utilizador?", + "mute_modal.indefinite": "Indefinida", + "navigation_bar.about": "Sovre mozotros", + "navigation_bar.advanced_interface": "Avre en la enterfaz avanzada", + "navigation_bar.blocks": "Utilizadores blokados", + "navigation_bar.bookmarks": "Markadores", + "navigation_bar.community_timeline": "Linya de tiempo lokala", + "navigation_bar.compose": "Eskrivir mueva publikasyon", + "navigation_bar.direct": "Enmentaduras privadas", + "navigation_bar.discover": "Diskuvre", + "navigation_bar.domain_blocks": "Domenos blokados", + "navigation_bar.edit_profile": "Edita profil", + "navigation_bar.explore": "Eksplorar", + "navigation_bar.favourites": "Te plazen", + "navigation_bar.filters": "Biervos silensiados", + "navigation_bar.follow_requests": "Solisitudes de segimiento", + "navigation_bar.followed_tags": "Etiketas segidas", + "navigation_bar.follows_and_followers": "Segidos i suivantes", + "navigation_bar.lists": "Listas", + "navigation_bar.logout": "Salir", + "navigation_bar.mutes": "Utilizadores silensiados", + "navigation_bar.opened_in_classic_interface": "Publikasyones, kuentos i otras pajinas espesifikas se avren kon preferensyas predeterminadas en la enterfaz web klasika.", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Publikasyones fiksadas", + "navigation_bar.preferences": "Preferensyas", + "navigation_bar.public_timeline": "Linya de tiempo federada", + "navigation_bar.search": "Bushka", + "navigation_bar.security": "Segurita", + "not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.", + "notification.admin.report": "{name} raporto {target}", + "notification.admin.sign_up": "{name} kriyo un konto", + "notification.favourite": "A {name} le plaze tu publikasyon", + "notification.follow": "{name} te ampeso a segir", + "notification.follow_request": "{name} tiene solisitado segirte", + "notification.mention": "{name} te enmento", + "notification.own_poll": "Tu anketa eskapo", + "notification.poll": "Anketa en ke votates eskapo", + "notification.reblog": "{name} repartajo tu publikasyon", + "notification.status": "{name} publiko algo", + "notification.update": "{name} edito una publikasyon", + "notifications.clear": "Efasar avizos", + "notifications.clear_confirmation": "Estas siguro ke keres permanentemente efasar todos tus avizos?", + "notifications.column_settings.admin.report": "Muveos raportos:", + "notifications.column_settings.admin.sign_up": "Muevas enrejistrasyones:", + "notifications.column_settings.alert": "Avizos de ensimameza", + "notifications.column_settings.favourite": "Te plazen:", + "notifications.column_settings.filter_bar.advanced": "Amostra todas las kategorias", + "notifications.column_settings.filter_bar.category": "Vara de filtrado rapido", + "notifications.column_settings.filter_bar.show_bar": "Amostra vara de filtros", + "notifications.column_settings.follow": "Muevos suivantes:", + "notifications.column_settings.follow_request": "Muevas solisitudes de segimiento:", + "notifications.column_settings.mention": "Enmentaduras:", + "notifications.column_settings.poll": "Rizultados de anketas:", + "notifications.column_settings.push": "Avizos arrepushados", + "notifications.column_settings.reblog": "Repartajasyones:", + "notifications.column_settings.show": "Amostra en kolumna", + "notifications.column_settings.sound": "Reproduzir son", + "notifications.column_settings.status": "Publikasyones muevas:", + "notifications.column_settings.unread_notifications.category": "Avizos no meldados", + "notifications.column_settings.unread_notifications.highlight": "Avaliar avizos no meldados", + "notifications.column_settings.update": "Edisyones:", + "notifications.filter.all": "Todos", + "notifications.filter.boosts": "Repartajasyones", + "notifications.filter.favourites": "Te plazen", + "notifications.filter.follows": "Segidos", + "notifications.filter.mentions": "Enmentaduras", + "notifications.filter.polls": "Rizultados de anketa", + "notifications.filter.statuses": "Aktualizasyones de personas a las kualas siges", + "notifications.grant_permission": "Da permiso.", + "notifications.group": "{count} avizos", + "notifications.mark_as_read": "Marka todos avizos komo meldados", + "notifications.permission_denied": "Avizos de ensimameza no estan desponivles porke ya se tiene refuzado el permiso", + "notifications.permission_denied_alert": "\"No se pueden kapasitar los avizos de ensimameza, porke ya se tiene refuzado el permiso de navigador", + "notifications.permission_required": "Avizos de ensimameza no estan desponivles porke los nesesarios permisos no tienen sido risividos.", + "notifications_permission_banner.enable": "Kapasitar avizos de ensimameza", + "notifications_permission_banner.how_to_control": "Para risivir avizos kuando Mastodon no esta avierto, kapasita avizos de ensimameza. Puedes kontrolar presizamente kualos tipos de enteraksiones djeneren avizos de ensimameza kon el boton {icon} arriva kuando esten kapasitadas.", + "notifications_permission_banner.title": "Nunka te piedres niente", + "onboarding.action.back": "Va atras", + "onboarding.actions.back": "Va atras", + "onboarding.actions.go_to_explore": "Va a los trendes", + "onboarding.actions.go_to_home": "Va a tu linya prinsipala", + "onboarding.compose.template": "Ke haber, #Mastodon?", + "onboarding.follows.empty": "Malorozamente, no se pueden amostrar rezultados en este momento. Puedes aprovar uzar la bushkeda o navigar por la pajina de eksplorasyon para topar personas a las que segir, o aprovarlo de muevo mas tadre.", + "onboarding.follows.title": "Personaliza tu linya prinsipala", + "onboarding.profile.discoverable": "Faz ke mi profil apareska en bushkedas", + "onboarding.profile.display_name": "Nombre amostrado", + "onboarding.profile.display_name_hint": "Tu nombre para amostrar.", + "onboarding.profile.lead": "Siempre puedes kompletar esto mas tadre en las preferensyas, ande tambien ay mas opsyones de personalizasyon.", + "onboarding.profile.note": "Tu deskripsyon", + "onboarding.profile.note_hint": "Puedes @enmentar a otra djente o #etiketasâ€Ļ", + "onboarding.profile.save_and_continue": "Guadra i kontinua", + "onboarding.profile.title": "Konfigurasyon de profil", + "onboarding.profile.upload_avatar": "Karga imaje de profil", + "onboarding.profile.upload_header": "Karga kavesera de profil", + "onboarding.share.lead": "Informe a otros komo toparte en Mastodon!", + "onboarding.share.message": "Soy {username} en #Mastodon! Segidme en {url}", + "onboarding.share.next_steps": "Posivles sigientes pasos:", + "onboarding.share.title": "Partaja tu profil", + "onboarding.start.skip": "No nesesitas ayudo para ampesar?", + "onboarding.start.title": "Lo logrates!", + "onboarding.steps.follow_people.body": "El buto de Mastodon es segir a djente interesante.", + "onboarding.steps.follow_people.title": "Personaliza tu linya prinsipala", + "onboarding.steps.publish_status.body": "Puedes introdusirte al mundo con teksto, fotos, videos o anketas {emoji}", + "onboarding.steps.publish_status.title": "Eskrive tu primera publikasyon", + "onboarding.steps.setup_profile.body": "Kompleta tu profil para aumentar tus enteraksyones.", + "onboarding.steps.setup_profile.title": "Personaliza tu profil", + "onboarding.steps.share_profile.body": "Informe a tus amigos komo toparte en Mastodon", + "onboarding.steps.share_profile.title": "Partaja tu profil de Mastodon", + "password_confirmation.exceeds_maxlength": "La konfirmasyon de kod es demaziado lunga", + "password_confirmation.mismatching": "Los dos kodes son desferentes", + "picture_in_picture.restore": "Restora", + "poll.closed": "Serrado", + "poll.refresh": "Arefreska", + "poll.reveal": "Mira los rezultados", + "poll.total_people": "{count, plural, one {# persona} other {# personas}}", + "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", + "poll.vote": "Vota", + "poll.voted": "Votates por esta repuesta", + "poll.votes": "{votes, plural, one {# voto} other {# votos}}", + "poll_button.add_poll": "Adjusta anketa", + "poll_button.remove_poll": "Kita anketa", + "privacy.change": "Troka privasita de publikasyon", + "privacy.direct.long": "Vizivle solo para utilizadores enmentados", + "privacy.direct.short": "Solo personas enmentadas", + "privacy.private.long": "Vizivle solo para suivantes", + "privacy.private.short": "Solo suivantes", + "privacy.public.long": "Vizivle para todos", + "privacy.public.short": "Publiko", + "privacy.unlisted.long": "Vizivle para todos, ama eskluido de las fonksiones de diskuvrimyento", + "privacy.unlisted.short": "No listado", + "privacy_policy.last_updated": "Ultima aktualizasyon: {date}", + "privacy_policy.title": "Politika de privasita", + "recommended": "Rekomendado", + "refresh": "Arefreska", + "regeneration_indicator.label": "Eskargandoâ€Ļ", + "regeneration_indicator.sublabel": "Tu linya de tiempo prinsipala esta preparando!", + "relative_time.days": "{number} d", + "relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}", + "relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}", + "relative_time.full.just_now": "agora", + "relative_time.full.minutes": "antes {number, plural, one {# minuto} other {# minutos}}", + "relative_time.full.seconds": "antes {number, plural, one {# sigundo} other {# sigundos}}", + "relative_time.hours": "{number} o", + "relative_time.just_now": "agora", + "relative_time.minutes": "{number} m", + "relative_time.seconds": "{number} s", + "relative_time.today": "oy", + "reply_indicator.cancel": "Anula", + "report.block": "Bloka", + "report.block_explanation": "No veras sus publikasyones. No podra ver tus publikasyones ni segirte. Podra saver ke le blokates.", + "report.categories.legal": "Legal", + "report.categories.other": "Otros", + "report.categories.spam": "Spam", + "report.categories.violation": "El kontenido viola una o mas reglas del sirvidor", + "report.category.subtitle": "Eskoje la mijor koensidensya", + "report.category.title": "Deskrive el problem kon {type}", + "report.category.title_account": "profil", + "report.category.title_status": "publikasyon", + "report.close": "Fecho", + "report.comment.title": "Ay algo mas ke deveriamos saver?", + "report.forward": "Reembiar a {target}", + "report.forward_hint": "Este kuento es de otro sirvidor. Embiar una kopia anonimizada del raporto ayi tamyen?", + "report.mute": "Silensia", + "report.mute_explanation": "No veras sus publikasyones. Ainda pueden segirte i no va saver ke le silensiates.", + "report.next": "Sigiente", + "report.placeholder": "Otros komentos", + "report.reasons.dislike": "No me plaze", + "report.reasons.dislike_description": "\"No es algo ke kero ver", + "report.reasons.legal": "Es ilegal", + "report.reasons.legal_description": "Kreyes ke esta violando la ley de tu paiz o el paiz del sirvidor", + "report.reasons.other": "Es otra koza", + "report.reasons.other_description": "El problem no es de las otras kategorias", + "report.reasons.spam": "Es spam", + "report.reasons.spam_description": "Atadijos malisiozos, enteraksyones falsas o repuestas repetitivas", + "report.reasons.violation": "Viola las reglas del sirvidor", + "report.reasons.violation_description": "Saves ke viola reglas espesifikas", + "report.rules.subtitle": "Eskoje todas ke korespondan", + "report.rules.title": "Kualas reglas estan violadas?", + "report.statuses.subtitle": "Eskoje todas ke korespondan", + "report.statuses.title": "Ay alguna publikasyon ke suporta este raporto?", + "report.submit": "Embiar", + "report.target": "Raportando a {target}", + "report.thanks.take_action": "Aki estan tus opsyones para kontrolar lo ke ves en Mastodon:", + "report.thanks.take_action_actionable": "Mientres revizamos esto, puedes tomar aksyones kontra @{name}:", + "report.thanks.title": "No keres ver esto?", + "report.thanks.title_actionable": "Mersi por raportarlo, vamos revizarlo.", + "report.unfollow": "Desegir a @{name}", + "report.unfollow_explanation": "Estas sigiendo este kuento. Para no ver sus publikasyones en tu linya de tiempo, puedes deshar de segirlo.", + "report_notification.attached_statuses": "{count, plural, one {{count} publikasyon} other {{count} publikasyones}} atadas", + "report_notification.categories.legal": "Legal", + "report_notification.categories.other": "Otros", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violasion de reglas", + "report_notification.open": "Avre raporto", + "search.no_recent_searches": "No ay bushkedas resientes", + "search.placeholder": "Bushka", + "search.quick_action.account_search": "Profiles ke koresponden kon {x}", + "search.quick_action.go_to_account": "Va al profil {x}", + "search.quick_action.go_to_hashtag": "Va a la etiketa {x}", + "search.quick_action.open_url": "Avre URL en Mastodon", + "search.quick_action.status_search": "Publikasyones ke koresponden kon {x}", + "search.search_or_paste": "Bushka o apega URL", + "search_popout.full_text_search_disabled_message": "No desponivle en {domain}.", + "search_popout.full_text_search_logged_out_message": "Solo desponivle kuando estas konektado kon tu kuento.", + "search_popout.language_code": "kodiche ISO de lingua", + "search_popout.options": "Opsyones de bushkeda", + "search_popout.quick_actions": "Aksiones rapidas", + "search_popout.recent": "Bushkedas resientes", + "search_popout.specific_date": "dato espesifiko", + "search_popout.user": "utilizador", + "search_results.accounts": "Profiles", + "search_results.all": "Todos", + "search_results.hashtags": "Etiketas", + "search_results.nothing_found": "No se pudo topar niente para estos terminos de bushkeda", + "search_results.see_all": "Ve todo", + "search_results.statuses": "Publikasyones", + "search_results.title": "Bushka por {q}", + "server_banner.about_active_users": "Utilizadores aktivos en este sirvidor durante los ultimos 30 diyas (utilizadores aktivos mensuales)", + "server_banner.active_users": "utilizadores aktivos", + "server_banner.administered_by": "Administrado por:", + "server_banner.introduction": "{domain} es parte de la red sosyala desentralizada liderada por {mastodon}.", + "server_banner.learn_more": "Ambezate mas", + "server_banner.server_stats": "Estatistikas del sirvidor:", + "sign_in_banner.create_account": "Kriya kuento", + "sign_in_banner.sign_in": "Konektate", + "sign_in_banner.sso_redirect": "Konektate o enrejistrate", + "sign_in_banner.text": "Konektate para segir prefiles o etiketas, partajar publikasyones, arispondir a eyas i markar ke te plazen. Puedes tambyen enteraktuar dizde tu kuento en un sirvidor desferente.", + "status.admin_account": "Avre la enterfaz de moderasyon para @{name}", + "status.admin_domain": "Avre la enterfaz de moderasyon para @{domain}", + "status.admin_status": "Avre esto en la enterfaz de moderasyon", + "status.block": "Bloka a @{name}", + "status.bookmark": "Marka", + "status.cancel_reblog_private": "No repartaja", + "status.cannot_reblog": "Esta publikasyon no se puede repartajar", + "status.copy": "Kopia atadijo de publikasyon", + "status.delete": "Efasa", + "status.detailed_status": "Vista de konversasyon detalyada", + "status.direct": "Enmenta a @{name} en privado", + "status.direct_indicator": "Enmentadura privada", + "status.edit": "Edita", + "status.edited": "Editado {date}", + "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} vezes}}", + "status.embed": "Inkrusta", + "status.favourite": "Te plaze", + "status.filter": "Filtra esta publikasyon", + "status.filtered": "Filtrado", + "status.hide": "Eskonde publikasyon", + "status.history.created": "{name} kriyo {date}", + "status.history.edited": "{name} edito {date}", + "status.load_more": "Eskarga mas", + "status.media.open": "Klika para avrir", + "status.media.show": "Klika para amostrar", + "status.media_hidden": "Multimedia eskondidos", + "status.mention": "Enmenta a @{name}", + "status.more": "Mas", + "status.mute": "Silensia a @{name}", + "status.mute_conversation": "Silensia konversasyon", + "status.open": "Espande publikasyon", + "status.pin": "Fiksa en profil", + "status.pinned": "Publikasyon fiksada", + "status.read_more": "Melda mas", + "status.reblog": "Repartaja", + "status.reblog_private": "Repartaja kon vizibilita orijinala", + "status.reblogged_by": "{name} repartajo", + "status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.", + "status.redraft": "Efasa i eskrive de muevo", + "status.remove_bookmark": "Kita markador", + "status.replied_to": "Arispondio a {name}", + "status.reply": "Arisponde", + "status.replyAll": "Arisponde al filo", + "status.report": "Raporta @{name}", + "status.sensitive_warning": "Kontenido sensivle", + "status.share": "Partaja", + "status.show_filter_reason": "Amostra entanto", + "status.show_less": "Amostra manko", + "status.show_less_all": "Amostra manko para todo", + "status.show_more": "Amostra mas", + "status.show_more_all": "Amostra mas para todo", + "status.show_original": "Amostra orijinal", + "status.title.with_attachments": "{user} publiko {attachmentCount, plural, one {un anekso} other {{attachmentCount} aneksos}}", + "status.translate": "Trezlada", + "status.translated_from_with": "Trezladado dizde {lang} kon {provider}", + "status.uncached_media_warning": "Vista previa no desponivle", + "status.unmute_conversation": "Desilensiar konversasyon", + "status.unpin": "Defiksar del profil", + "subscribed_languages.lead": "Solo publikasyones en linguas eskojidas se amostraran en tus linya de tiempo prinsipala i listas dempues del trokamiento. Eskoje dinguna para risivir publikasyones en todas las linguas.", + "subscribed_languages.save": "Guadra trokamientos", + "subscribed_languages.target": "Troka linguas abonadas para {target}", + "tabs_bar.home": "Linya prinsipala", + "tabs_bar.notifications": "Avizos", + "time_remaining.days": "{number, plural, one {# diya restante} other {# diyas restantes}}", + "time_remaining.hours": "{number, plural, one {# ora restante} other {# oras restantes}}", + "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", + "time_remaining.moments": "Momentos restantes", + "time_remaining.seconds": "{number, plural, one {# sigundo restante} other {# sigundos restantes}}", + "timeline_hint.remote_resource_not_displayed": "{resource} de otros sirvidores no se amostran.", + "timeline_hint.resources.followers": "Suivantes", + "timeline_hint.resources.follows": "Segidos", + "timeline_hint.resources.statuses": "Publikasyones mas viejas", + "trends.counter_by_accounts": "{count, plural, one {{counter} kuento} other {{counter} kuentos}} en los ultimos {days, plural, one {diyas} other {{days} diyas}}", + "trends.trending_now": "Trendes", + "ui.beforeunload": "La publikasyon ke estas eskriviendo se pedrera si sales de Mastodon.", + "units.short.billion": "{count} MM", + "units.short.million": "{count} M", + "units.short.thousand": "{count} K", + "upload_area.title": "Arastra i mete para kargar", + "upload_button.label": "Adjusta imajes, un video or una dosya audio", + "upload_error.limit": "Limito de dosyas kargadas eksedido.", + "upload_error.poll": "No se permite kargar dosyas kon anketas.", + "upload_form.audio_description": "Deskrive para personas sodras o kon problemes auditivos", + "upload_form.description": "Deskrive para personas siegas o kon problemes vizuales", + "upload_form.description_missing": "No adjustates deskripsion", + "upload_form.edit": "Edita", + "upload_form.thumbnail": "Troka minyatura", + "upload_form.undo": "Efasa", + "upload_form.video_description": "Deskrive para personas sodras, kon problemes auditivos, siegas o kon problemes vizuales", + "upload_modal.analyzing_picture": "Analizando imajeâ€Ļ", + "upload_modal.apply": "Aplika", + "upload_modal.applying": "Aplikandoâ€Ļ", + "upload_modal.choose_image": "Eskoje imaje", + "upload_modal.description_placeholder": "Lorem ipsum dolor sit amet", + "upload_modal.detect_text": "Detektar teksto de la imaje", + "upload_modal.edit_media": "Edita multimedia", + "upload_modal.hint": "Klika o arrastra el sirkolo en la vista previa para eskojer el punto fokal ke siempre estara en vista en todas las minyaturas.", + "upload_modal.preparing_ocr": "Preparando OCRâ€Ļ", + "upload_modal.preview_label": "Vista previa ({ratio})", + "upload_progress.label": "Kargando...", + "upload_progress.processing": "Prosesandoâ€Ļ", + "username.taken": "Akel nombre de utilizador ya esta en uzo. Aprova otruno", + "video.close": "Serra video", + "video.download": "Abasha dosya", + "video.exit_fullscreen": "Sal de ekran kompleto", + "video.expand": "Espande video", + "video.fullscreen": "Ekran kompleto", + "video.hide": "Eskonde video", + "video.mute": "Silensia son", + "video.pause": "Pauza", + "video.play": "Reproduze", + "video.unmute": "Desilensia son" +} diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 58c80e4117f275..623ff2248f9ae5 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -2,14 +2,14 @@ "about.blocks": "PriÅžiÅĢrimi serveriai", "about.contact": "Kontaktuoti:", "about.disclaimer": "Mastodon – nemokama atvirojo kodo programa ir Mastodon gGmbH prekės Åženklas.", - "about.domain_blocks.no_reason_available": "PrieÅžastis neÅžinoma", + "about.domain_blocks.no_reason_available": "PrieÅžastis nepateikta", "about.domain_blocks.preamble": "Mastodon paprastai leidÅžia perÅžiÅĢrėti turinį ir bendrauti su naudotojais iÅĄ bet kurio kito fediverse esančio serverio. Å ios yra iÅĄimtys, kurios buvo padarytos ÅĄiame konkrečiame serveryje.", "about.domain_blocks.silenced.explanation": "Paprastai nematysi profiliÅŗ ir turinio iÅĄ ÅĄio serverio, nebent jį aiÅĄkiai ieÅĄkosi arba pasirinksi jį sekdamas (-a).", "about.domain_blocks.silenced.title": "Ribota", "about.domain_blocks.suspended.explanation": "Jokie duomenys iÅĄ ÅĄio serverio nebus apdorojami, saugomi ar keičiami, todėl bet kokia sąveika ar bendravimas su ÅĄio serverio naudotojais bus neįmanomas.", "about.domain_blocks.suspended.title": "UÅždrausta", "about.not_available": "Å i informacija nebuvo pateikta ÅĄiame serveryje.", - "about.powered_by": "Decentralizuota socialinė Åžiniasklaida, kurią valdo {mastodon}", + "about.powered_by": "Decentralizuota socialinė medija, kurią valdo {mastodon}", "about.rules": "Serverio taisyklės", "account.account_note_header": "Pastaba", "account.add_or_remove_from_list": "Pridėti arba iÅĄtrinti iÅĄ sąraÅĄÅŗ", @@ -27,24 +27,24 @@ "account.domain_blocked": "UÅžblokuotas domenas", "account.edit_profile": "Redaguoti profilį", "account.enable_notifications": "PraneÅĄti man, kai @{name} paskelbia", - "account.endorse": "Savybė profilyje", + "account.endorse": "Rekomenduoti profilyje", "account.featured_tags.last_status_at": "Paskutinį kartą paskelbta {date}", "account.featured_tags.last_status_never": "Nėra įraÅĄÅŗ", - "account.featured_tags.title": "{name} rekomenduojamos grotaÅžymės", + "account.featured_tags.title": "{name} rekomenduojami saitaÅžodÅžiai", "account.follow": "Sekti", + "account.follow_back": "Sekti atgal", "account.followers": "Sekėjai", "account.followers.empty": "Å io naudotojo dar niekas neseka.", - "account.followers_counter": "{count, plural, one {{counter} sekėjas (-a)} few {{counter} sekėjai} many {{counter} sekėjo} other {{counter} sekėjÅŗ}}", - "account.following": "Seka", - "account.following_counter": "{count, plural, one {{counter} Seka} few {{counter} Seka} many {{counter} Seka} other {{counter} Seka}}", + "account.followers_counter": "{count, plural, one {{counter} sekėjas} few {{counter} sekėjai} many {{counter} sekėjo} other {{counter} sekėjÅŗ}}", + "account.following": "Sekama", + "account.following_counter": "{count, plural, one {{counter} sekimas} few {{counter} sekimai} many {{counter} sekimo} other {{counter} sekimÅŗ}}", "account.follows.empty": "Å is (-i) naudotojas (-a) dar nieko neseka.", - "account.follows_you": "Seka tave", "account.go_to_profile": "Eiti į profilį", "account.hide_reblogs": "Slėpti pakėlimus iÅĄ @{name}", "account.in_memoriam": "Atminimui.", "account.joined_short": "Prisijungė", "account.languages": "Keisti prenumeruojamas kalbas", - "account.link_verified_on": "Å ios nuorodos nuosavybė buvo patikrinta {date}", + "account.link_verified_on": "Å ios nuorodos nuosavybė buvo patikrinta {date}.", "account.locked_info": "Å ios paskyros privatumo bÅĢsena nustatyta kaip uÅžrakinta. Savininkas (-ė) rankiniu bÅĢdu perÅžiÅĢri, kas gali sekti.", "account.media": "Medija", "account.mention": "Paminėti @{name}", @@ -53,12 +53,13 @@ "account.mute_notifications_short": "Nutildyti praneÅĄimus", "account.mute_short": "Nutildyti", "account.muted": "Nutildytas", + "account.mutual": "Abipusis", "account.no_bio": "Nėra pateikto apraÅĄymo.", "account.open_original_page": "Atidaryti originalinį puslapį", "account.posts": "ÄŽraÅĄai", "account.posts_with_replies": "ÄŽraÅĄai ir atsakymai", - "account.report": "PraneÅĄti @{name}", - "account.requested": "Laukiama patvirtinimo. Spausk, kad atÅĄaukti sekimo uÅžklausą", + "account.report": "PraneÅĄti apie @{name}", + "account.requested": "Laukiama patvirtinimo. Spustelėk, jei nori atÅĄaukti sekimo praÅĄymą.", "account.requested_follow": "{name} papraÅĄÄ— tave sekti", "account.share": "Bendrinti @{name} profilį", "account.show_reblogs": "Rodyti pakėlimus iÅĄ @{name}", @@ -68,28 +69,28 @@ "account.unblock_short": "Atblokuoti", "account.unendorse": "Nerodyti profilyje", "account.unfollow": "Nebesekti", - "account.unmute": "Atitildyti @{name}", - "account.unmute_notifications_short": "Atitildyti praneÅĄimus", - "account.unmute_short": "Atitildyti", - "account_note.placeholder": "Spausk norėdamas (-a) pridėti pastabą", - "admin.dashboard.daily_retention": "VartotojÅŗ iÅĄbuvimo rodiklis pagal dieną po registracijos", - "admin.dashboard.monthly_retention": "NaudotojÅŗ iÅĄlaikymo rodiklis pagal mėnesį po registracijos", + "account.unmute": "AtÅĄaukti nutildymą @{name}", + "account.unmute_notifications_short": "AtÅĄaukti nutildymą praneÅĄimams", + "account.unmute_short": "AtÅĄaukti nutildymą", + "account_note.placeholder": "Spustelėk norėdamas (-a) pridėti pastabą", + "admin.dashboard.daily_retention": "NaudotojÅŗ pasilikimo rodiklis pagal dieną po registracijos", + "admin.dashboard.monthly_retention": "NaudotojÅŗ pasilikimo rodiklis pagal mėnesį po registracijos", "admin.dashboard.retention.average": "Vidurkis", - "admin.dashboard.retention.cohort": "Registravimo mėnuo", + "admin.dashboard.retention.cohort": "Registracijos mėnuo", "admin.dashboard.retention.cohort_size": "Nauji naudotojai", "admin.impact_report.instance_accounts": "PaskyrÅŗ profiliai, kuriuos tai iÅĄtrintÅŗ", "admin.impact_report.instance_followers": "Sekėjai, kuriuos prarastÅŗ mÅĢsÅŗ naudotojai", "admin.impact_report.instance_follows": "Sekėjai, kuriuos prarastÅŗ jÅŗ naudotojai", "admin.impact_report.title": "Poveikio apibendrinimas", "alert.rate_limited.message": "Pabandyk vėliau po {retry_time, time, medium}.", - "alert.rate_limited.title": "Spartos ribojimas", + "alert.rate_limited.title": "Sparta ribota", "alert.unexpected.message": "ÄŽvyko netikėta klaida.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Skelbimas", "attachments_list.unprocessed": "(neapdorotas)", "audio.hide": "Slėpti garsą", "autosuggest_hashtag.per_week": "{count} per savaitę", - "boost_modal.combo": "Gali spausti {combo}, kad praleisti kitą kartą", + "boost_modal.combo": "Gali paspausti {combo}, kad praleisti kitą kartą", "bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą", "bundle_column_error.error.body": "UÅžklausos puslapio nepavyko atvaizduoti. Tai gali bÅĢti dėl mÅĢsÅŗ kodo klaidos arba narÅĄyklės suderinamumo problemos.", "bundle_column_error.error.title": "O, ne!", @@ -103,10 +104,10 @@ "bundle_modal_error.message": "Kraunant ÅĄÄ¯ komponentą kaÅžkas nepavyko.", "bundle_modal_error.retry": "Bandyti dar kartą", "closed_registrations.other_server_instructions": "Kadangi Mastodon yra decentralizuotas, gali susikurti paskyrą kitame serveryje ir vis tiek bendrauti su ÅĄiuo serveriu.", - "closed_registrations_modal.description": "Sukurti paskyrą {domain} ÅĄiuo metu neįmanoma, tačiau nepamirÅĄk, kad norint naudotis Mastodon nebÅĢtina turėti paskyrą {domain}.", + "closed_registrations_modal.description": "Sukurti paskyrą {domain} ÅĄiuo metu neįmanoma, tačiau nepamirÅĄk, kad norint naudotis Mastodon nebÅĢtina turėti paskyrą domene {domain}.", "closed_registrations_modal.find_another_server": "Rasti kitą serverį", "closed_registrations_modal.preamble": "Mastodon yra decentralizuotas, todėl nesvarbu, kur susikursi paskyrą, galėsi sekti ir bendrauti su bet kuriuo ÅĄiame serveryje esančiu asmeniu. Jį gali net savarankiÅĄkai talpinti!", - "closed_registrations_modal.title": "UÅžsiregistravimas į Mastodon", + "closed_registrations_modal.title": "UÅžsiregistruoti Mastodon", "column.about": "Apie", "column.blocks": "UÅžblokuoti naudotojai", "column.bookmarks": "ÅŊymės", @@ -115,15 +116,15 @@ "column.directory": "NarÅĄyti profilius", "column.domain_blocks": "UÅžblokuoti domenai", "column.favourites": "Mėgstamiausi", - "column.firehose": "Tiesioginiai padavimai", - "column.follow_requests": "Sekti praÅĄymus", + "column.firehose": "Tiesioginiai srautai", + "column.follow_requests": "Sekimo praÅĄymus", "column.home": "Pagrindinis", "column.lists": "SąraÅĄai", "column.mutes": "Nutildyti naudotojai", "column.notifications": "PraneÅĄimai", "column.pins": "Prisegti įraÅĄai", "column.public": "Federacinė laiko skalė", - "column_back_button.label": "Atgal", + "column_back_button.label": "GrįŞti", "column_header.hide_settings": "Slėpti nustatymus", "column_header.moveLeft_settings": "Judinti stulpelį į kairę", "column_header.moveRight_settings": "Judinti stulpelį į deÅĄinę", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 63ec6275ba539b..c06a1d936826fd 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -37,7 +37,6 @@ "account.following": "Seko", "account.following_counter": "{count, plural, one {{counter} sekojamais} other {{counter} sekojamie}}", "account.follows.empty": "Å is lietotājs pagaidām nevienam neseko.", - "account.follows_you": "Seko tev", "account.go_to_profile": "Doties uz profilu", "account.hide_reblogs": "Slēpt @{name} izceltas ziņas", "account.in_memoriam": "Piemiņai.", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 371218bbfecc9f..bdef3f4a5feeb6 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -25,7 +25,6 @@ "account.followers": "ĐĄĐģĐĩĐ´ĐąĐĩĐŊиŅ†Đ¸", "account.followers.empty": "НиĐēĐžŅ˜ ĐŊĐĩ ĐŗĐž ŅĐģĐĩди ОвОŅ˜ ĐēĐžŅ€Đ¸ŅĐŊиĐē ŅĐĩŅƒŅˆŅ‚Đĩ.", "account.follows.empty": "КоŅ€Đ¸ŅĐŊиĐēĐžŅ‚ ĐŊĐĩ ŅĐģĐĩди ĐŊиĐēĐžŅ˜ ŅĐĩŅƒŅˆŅ‚Đĩ.", - "account.follows_you": "ĐĸĐĩ ŅĐģĐĩди Ņ‚ĐĩĐąĐĩ", "account.hide_reblogs": "ĐĄĐžĐēŅ€Đ¸Ņ˜ ĐąŅƒŅŅ‚ Од @{name}", "account.link_verified_on": "ĐĄĐžĐŋŅŅ‚ĐĩвĐŊĐžŅŅ‚Đ° ĐŊĐ° ОваŅ˜ ĐģиĐŊĐē ĐąĐĩŅˆĐĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊ ĐŊĐ° {date}", "account.locked_info": "ĐĄŅ‚Đ°Ņ‚ŅƒŅĐžŅ‚ ĐŊĐ° ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊĐžŅŅ‚ ĐŊĐ° ОваŅ˜ ĐēĐžŅ€Đ¸ŅĐŊиĐē Đĩ ŅĐĩŅ‚иŅ€Đ°ĐŊ ĐēĐ°ĐēĐž СаĐēĐģŅƒŅ‡ĐĩĐŊ. КоŅ€Đ¸ŅĐŊиĐēĐžŅ‚ ОдĐģŅƒŅ‡ŅƒĐ˛Đ° ĐēĐžŅ˜ ĐŧĐžĐļи Đ´Đ° ĐŗĐž ŅĐģĐĩди ĐŊĐĩĐŗĐž.", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index b00cedc6fcc9d8..11636646b26c0a 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -26,7 +26,6 @@ "account.following": "ā´Ēā´ŋā´¨āĩā´¤āĩā´Ÿā´°āĩā´¨āĩā´¨āĩ", "account.following_counter": "{count, plural, one {{counter} ā´Ēā´ŋā´¨āĩā´¤āĩā´Ÿā´°āĩā´¨āĩā´¨āĩ} other {{counter} ā´Ēā´ŋā´¨āĩā´¤āĩā´Ÿā´°āĩā´¨āĩā´¨āĩ}}", "account.follows.empty": "ā´ˆ ā´‰ā´Ēā´¯āĩ‹ā´•āĩā´¤ā´žā´ĩāĩ ā´†ā´°āĩ‡ā´¯āĩā´‚ ā´‡ā´¤āĩā´ĩā´°āĩ† ā´Ēā´ŋā´¨āĩā´¤āĩā´Ÿā´°āĩā´¨āĩā´¨ā´ŋā´˛āĩā´˛.", - "account.follows_you": "ā´¨ā´ŋā´™āĩā´™ā´ŗāĩ† ā´Ēā´ŋā´¨āĩā´¤āĩā´Ÿā´°āĩā´¨āĩā´¨āĩ", "account.go_to_profile": "ā´Ēāĩā´°āĩŠā´Ģāĩˆā´˛ā´ŋā´˛āĩ‡ā´•āĩā´•āĩ ā´Ēāĩ‹ā´•ā´žā´‚", "account.hide_reblogs": "@{name} ā´Ŧāĩ‚ā´¸āĩā´ąāĩā´ąāĩ ā´šāĩ†ā´¯āĩā´¤ā´ĩ ā´Žā´ąā´¯āĩā´•āĩā´•", "account.joined_short": "ā´œāĩ‹ā´¯ā´ŋāĩģ ā´šāĩ†ā´¯āĩâ€Œā´¤ā´ŋā´°ā´ŋā´•āĩā´•āĩā´¨āĩā´¨āĩ", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 75b75375b71cd9..7f5b7d65248ed5 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -35,7 +35,6 @@ "account.following": "ā¤…ā¤¨āĨā¤¸ā¤°ā¤Ŗ", "account.following_counter": "{count, plural, one {{counter} following} other {{counter} following}}", "account.follows.empty": "ā¤šā¤ž ā¤ĩā¤žā¤Ēā¤°ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤œāĨ‚ā¤¨ā¤Ēā¤°āĨā¤¯ā¤‚ā¤¤ ā¤•āĨ‹ā¤Ŗā¤žā¤šā¤ž ā¤…ā¤¨āĨā¤¯ā¤žā¤¯āĨ€ ā¤¨ā¤žā¤šāĨ€.", - "account.follows_you": "ā¤¤āĨā¤Žā¤šā¤ž ā¤…ā¤¨āĨā¤¯ā¤žā¤¯āĨ€ ā¤†ā¤šāĨ‡", "account.go_to_profile": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤ĩā¤° ā¤œā¤ž", "account.hide_reblogs": "@{name} ā¤Ēā¤žā¤¸āĨ‚ā¤¨ ā¤¸ā¤°āĨā¤ĩ ā¤ŦāĨ‚ā¤¸āĨā¤Ÿ ā¤˛ā¤Ēā¤ĩā¤ž", "account.joined_short": "ā¤¸ā¤žā¤ŽāĨ€ā¤˛ ā¤ā¤žā¤˛āĨ‡", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 724e07ae76adc3..50a48db1ea03d0 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -37,7 +37,6 @@ "account.following": "Mengikuti", "account.following_counter": "{count, plural, one {{counter} Diikuti} other {{counter} Diikuti}}", "account.follows.empty": "Pengguna ini belum mengikuti sesiapa.", - "account.follows_you": "Mengikuti anda", "account.go_to_profile": "Pergi ke profil", "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", "account.in_memoriam": "Dalam Memoriam.", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 917419d172e72b..3ca03b616a9620 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -38,7 +38,6 @@ "account.following": "စေá€Ŧင့á€ēကá€ŧည့á€ēနေသညá€ē", "account.following_counter": "{count, plural, one {စေá€Ŧငá€ē့ကá€ŧညá€ē့ထá€Ŧးသူ {counter}} other {စေá€Ŧငá€ē့ကá€ŧညá€ē့ထá€Ŧးသူမá€ģá€Ŧး {counter}}}", "account.follows.empty": "ဤသူသညá€ē မညá€ēá€žá€°á€ˇá€€á€­á€¯á€™á€ģှ စေá€Ŧင့á€ēကá€ŧည့á€ēခá€ŧငá€ēး မရှိသေးပá€Ģ။", - "account.follows_you": "သင့á€ēကို စေá€Ŧင့á€ēကá€ŧည့á€ēနေသညá€ē", "account.go_to_profile": "ပရိုဖိုငá€ēá€¸á€žá€­á€¯á€ˇ သá€Ŋá€Ŧးရနá€ē", "account.hide_reblogs": "@{name} ၏ မá€ģá€žá€á€ąá€™á€žá€¯á€€á€­á€¯ ဝှကá€ēထá€Ŧးရနá€ē", "account.in_memoriam": "အမှတá€ēတရ", diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json index 0967ef424bce67..229d4f4718d40b 100644 --- a/app/javascript/mastodon/locales/ne.json +++ b/app/javascript/mastodon/locales/ne.json @@ -1 +1,80 @@ -{} +{ + "about.contact": "ā¤¸ā¤ŽāĨā¤Ēā¤°āĨā¤•:", + "about.disclaimer": "Mastodon ā¤¨ā¤ŋ:ā¤ļāĨā¤˛āĨā¤•, ā¤–āĨā¤˛ā¤ž ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤¸ā¤ĢāĨā¤Ÿā¤ĩāĨ‡ā¤¯ā¤°, ā¤° Mastodon gGmbH ā¤•āĨ‹ ā¤ŸāĨā¤°āĨ‡ā¤Ąā¤Žā¤žā¤°āĨā¤• ā¤šāĨ‹āĨ¤", + "about.domain_blocks.no_reason_available": "ā¤•ā¤žā¤°ā¤Ŗ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤›āĨˆā¤¨", + "about.domain_blocks.preamble": "Mastodon ā¤˛āĨ‡ ā¤¤ā¤Ēā¤žā¤‡ā¤ā¤˛ā¤žā¤ˆ ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ā¤¤ā¤¯ā¤ž ā¤ĢāĨ‡ā¤Ąā¤ŋā¤­ā¤°āĨā¤¸ā¤Žā¤ž ā¤•āĨā¤¨āĨˆ ā¤Ēā¤¨ā¤ŋ ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤°āĨā¤­ā¤°ā¤•ā¤ž ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤šāĨ‡ā¤°āĨā¤¨ ā¤° ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤šā¤°āĨ‚ā¤¸ā¤ā¤— ā¤…ā¤¨āĨā¤¤ā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤—ā¤°āĨā¤¨ ā¤Ļā¤ŋā¤¨āĨā¤›āĨ¤ ā¤¯āĨ€ ā¤…ā¤Ēā¤ĩā¤žā¤Ļā¤šā¤°āĨ‚ ā¤šāĨā¤¨āĨ ā¤œāĨā¤¨ ā¤¯ā¤¸ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇ ā¤¸ā¤°āĨā¤­ā¤°ā¤Žā¤ž ā¤Ŧā¤¨ā¤žā¤‡ā¤ā¤•ā¤ž ā¤›ā¤¨āĨāĨ¤", + "about.domain_blocks.silenced.title": "ā¤¸āĨ€ā¤Žā¤ŋā¤¤", + "about.domain_blocks.suspended.explanation": "ā¤¯ā¤¸ ā¤¸ā¤°āĨā¤­ā¤°ā¤Ŧā¤žā¤Ÿ ā¤•āĨā¤¨āĨˆ ā¤Ēā¤¨ā¤ŋ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĒāĨā¤°ā¤ļāĨ‹ā¤§ā¤¨, ā¤­ā¤ŖāĨā¤Ąā¤žā¤°ā¤Ŗ ā¤ĩā¤ž ā¤†ā¤Ļā¤žā¤¨ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤—ā¤°ā¤ŋā¤¨āĨ‡ ā¤›āĨˆā¤¨, ā¤œā¤¸ā¤˛āĨ‡ ā¤¯ā¤¸ ā¤¸ā¤°āĨā¤­ā¤°ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤šā¤°āĨ‚ā¤¸ā¤ā¤— ā¤•āĨā¤¨āĨˆ ā¤Ēā¤¨ā¤ŋ ā¤…ā¤¨āĨā¤¤ā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩā¤ž ā¤¸ā¤žāĨā¤šā¤žā¤°ā¤˛ā¤žā¤ˆ ā¤…ā¤¸ā¤ŽāĨā¤­ā¤ĩ ā¤Ŧā¤¨ā¤žā¤‰ā¤ā¤›āĨ¤", + "about.domain_blocks.suspended.title": "ā¤¨ā¤ŋā¤˛ā¤ŽāĨā¤Ŧā¤ŋā¤¤", + "about.not_available": "ā¤¯āĨ‹ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¯ā¤¸ ā¤¸ā¤°āĨā¤­ā¤°ā¤Žā¤ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤—ā¤°ā¤žā¤‡ā¤ā¤•āĨ‹ ā¤›āĨˆā¤¨āĨ¤", + "about.powered_by": "{mastodon} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤ĩā¤ŋā¤•āĨ‡ā¤¨āĨā¤ĻāĨā¤°āĨ€ā¤•āĨƒā¤¤ ā¤¸ā¤žā¤Žā¤žā¤œā¤ŋā¤• ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤ž", + "about.rules": "ā¤¸ā¤°āĨā¤­ā¤° ā¤¨ā¤ŋā¤¯ā¤Žā¤šā¤°āĨ‚", + "account.add_or_remove_from_list": "ā¤¸āĨ‚ā¤šāĨ€ā¤Ŧā¤žā¤Ÿ ā¤Ĩā¤ĒāĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ ā¤ĩā¤ž ā¤šā¤Ÿā¤žā¤‰ā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.badges.group": "ā¤¸ā¤ŽāĨ‚ā¤š", + "account.block": "@{name} ā¤˛ā¤žā¤ˆ ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.block_domain": "{domain} ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ā¤˛ā¤žā¤ˆ ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.block_short": "ā¤ŦāĨā¤˛ā¤•", + "account.blocked": "ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°ā¤ŋā¤ā¤•āĨ‹", + "account.browse_more_on_origin_server": "ā¤ŽāĨ‚ā¤˛ ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ā¤Žā¤ž ā¤Ĩā¤Ē ā¤ŦāĨā¤°ā¤žā¤‰ā¤œ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.cancel_follow_request": "ā¤Ģā¤˛āĨ‹ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤°ā¤ĻāĨā¤Ļ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸", + "account.copy": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ā¤•āĨ‹ ā¤˛ā¤ŋā¤™āĨā¤• ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛ā¤ŋā¤Ēā¤ŋ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.direct": "@{name} ā¤˛ā¤žā¤ˆ ā¤¨ā¤ŋā¤œāĨ€ ā¤°āĨ‚ā¤Ēā¤Žā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.disable_notifications": "@{name} ā¤˛āĨ‡ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤—ā¤°āĨā¤Ļā¤ž ā¤Žā¤˛ā¤žā¤ˆ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤¨ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.domain_blocked": "ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°ā¤ŋā¤ā¤•āĨ‹ ā¤›", + "account.edit_profile": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤¸ā¤ŽāĨā¤Ēā¤žā¤Ļā¤¨ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.enable_notifications": "@{name} ā¤˛āĨ‡ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤—ā¤°āĨā¤Ļā¤ž ā¤Žā¤˛ā¤žā¤ˆ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.endorse": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ā¤Žā¤ž ā¤Ģā¤ŋā¤šā¤° ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.featured_tags.last_status_never": "ā¤•āĨā¤¨āĨˆ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤›āĨˆā¤¨", + "account.follow": "ā¤Ģā¤˛āĨ‹ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸", + "account.followers.empty": "ā¤¯ā¤¸ ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤ˆ ā¤…ā¤šā¤ŋā¤˛āĨ‡ā¤¸ā¤ŽāĨā¤Ž ā¤•ā¤¸āĨˆā¤˛āĨ‡ ā¤Ģā¤˛āĨ‹ ā¤—ā¤°āĨā¤ĻāĨˆā¤¨āĨ¤", + "account.follows.empty": "ā¤¯āĨ‹ ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤˛āĨ‡ ā¤…ā¤šā¤ŋā¤˛āĨ‡ā¤¸ā¤ŽāĨā¤Ž ā¤•ā¤¸āĨˆā¤˛ā¤žā¤ˆ ā¤Ģā¤˛āĨ‹ ā¤—ā¤°āĨ‡ā¤•āĨ‹ ā¤›āĨˆā¤¨āĨ¤", + "account.go_to_profile": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ā¤Žā¤ž ā¤œā¤žā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.hide_reblogs": "@{name} ā¤•āĨ‹ ā¤ŦāĨ‚ā¤¸āĨā¤Ÿā¤šā¤°āĨ‚ ā¤˛āĨā¤•ā¤žā¤‰ā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.link_verified_on": "ā¤¯ā¤¸ ā¤˛ā¤ŋā¤™āĨā¤•ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤žā¤Žā¤ŋā¤¤āĨā¤ĩ {date} ā¤Žā¤ž ā¤œā¤žā¤ā¤š ā¤—ā¤°ā¤ŋā¤ā¤•āĨ‹ ā¤Ĩā¤ŋā¤¯āĨ‹", + "account.media": "ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤ž", + "account.mention": "@{name} ā¤˛ā¤žā¤ˆ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.no_bio": "ā¤•āĨā¤¨āĨˆ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤—ā¤°ā¤ŋā¤ā¤•āĨ‹ ā¤›āĨˆā¤¨āĨ¤", + "account.posts": "ā¤ĒāĨ‹ā¤¸āĨā¤Ÿā¤šā¤°āĨ‚", + "account.requested": "ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ā¤ŋā¤•āĨ‹ ā¤Ēā¤°āĨā¤–ā¤žā¤‡ā¤Žā¤žāĨ¤ ā¤Ģā¤˛āĨ‹ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤°ā¤ĻāĨā¤Ļ ā¤—ā¤°āĨā¤¨ ā¤•āĨā¤˛ā¤ŋā¤• ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.requested_follow": "{name} ā¤˛āĨ‡ ā¤¤ā¤Ēā¤žā¤ˆā¤‚ā¤˛ā¤žā¤ˆ ā¤Ģā¤˛āĨ‹ ā¤—ā¤°āĨā¤¨ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤—ā¤°āĨā¤¨āĨā¤­ā¤ā¤•āĨ‹ ā¤›", + "account.share": "@{name} ā¤•āĨ‹ ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤¸āĨ‡ā¤¯ā¤° ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.show_reblogs": "@{name} ā¤•āĨ‹ ā¤ŦāĨ‚ā¤¸āĨā¤Ÿā¤šā¤°āĨ‚ ā¤ĻāĨ‡ā¤–ā¤žā¤‰ā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.statuses_counter": "{count, plural, one {{counter} ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ} other {{counter} ā¤ĒāĨ‹ā¤¸āĨā¤Ÿā¤šā¤°āĨ‚}}", + "account.unblock": "@{name} ā¤˛ā¤žā¤ˆ ā¤…ā¤¨ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.unblock_domain": "{domain} ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ā¤˛ā¤žā¤ˆ ā¤…ā¤¨ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.unblock_short": "ā¤…ā¤¨ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.unendorse": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ā¤Žā¤ž ā¤Ģā¤ŋā¤šā¤° ā¤¨ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account.unfollow": "ā¤…ā¤¨ā¤Ģā¤˛āĨ‹ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "account_note.placeholder": "ā¤¨āĨ‹ā¤Ÿ ā¤˛āĨ‡ā¤–āĨā¤¨ ā¤•āĨā¤˛ā¤ŋā¤• ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "admin.dashboard.retention.average": "ā¤”ā¤¸ā¤¤", + "admin.dashboard.retention.cohort_size": "ā¤¨ā¤¯ā¤žā¤ ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤šā¤°āĨ‚", + "alert.rate_limited.message": "ā¤•āĨƒā¤Ēā¤¯ā¤ž {retry_time, time, medium} ā¤Ēā¤›ā¤ŋ ā¤ĒāĨā¤¨: ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨāĨ¤", + "alert.unexpected.message": "ā¤ā¤‰ā¤Ÿā¤ž ā¤…ā¤¨ā¤ĒāĨ‡ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤­ā¤¯āĨ‹āĨ¤", + "bundle_column_error.retry": "ā¤ĒāĨā¤¨: ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "bundle_modal_error.close": "ā¤Ŧā¤¨āĨā¤Ļ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "bundle_modal_error.message": "ā¤¯āĨ‹ ā¤•ā¤ŽāĨā¤ĒāĨ‹ā¤¨āĨ‡ā¤¨āĨā¤Ÿ ā¤˛āĨ‹ā¤Ą ā¤—ā¤°āĨā¤Ļā¤ž ā¤•āĨ‡ā¤šāĨ€ ā¤—ā¤Ąā¤Ŧā¤Ą ā¤­ā¤¯āĨ‹āĨ¤", + "bundle_modal_error.retry": "Try again", + "closed_registrations.other_server_instructions": "Mastodon ā¤ĩā¤ŋā¤•āĨ‡ā¤¨āĨā¤ĻāĨā¤°āĨ€ā¤•āĨƒā¤¤ ā¤­ā¤ā¤•āĨ‹ā¤˛āĨ‡, ā¤¤ā¤Ēā¤žā¤‡ā¤ ā¤…ā¤°āĨā¤•āĨ‹ ā¤¸ā¤°āĨā¤­ā¤°ā¤Žā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤–āĨ‹ā¤˛āĨā¤¨ ā¤¸ā¤•āĨā¤¨āĨā¤šāĨā¤¨āĨā¤› ā¤° ā¤Ēā¤¨ā¤ŋ ā¤¯āĨ‹ ā¤¸ā¤°āĨā¤­ā¤°ā¤¸ā¤ā¤— ā¤…ā¤¨āĨā¤¤ā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤—ā¤°āĨā¤¨ ā¤¸ā¤•āĨā¤¨āĨā¤šāĨā¤¨āĨā¤›āĨ¤", + "closed_registrations_modal.description": "ā¤šā¤žā¤˛ {domain} ā¤Žā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤¸ā¤ŋā¤°āĨā¤œā¤¨ā¤ž ā¤—ā¤°āĨā¤¨ ā¤¸ā¤ŽāĨā¤­ā¤ĩ ā¤›āĨˆā¤¨, ā¤¤ā¤° ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤§āĨā¤¯ā¤žā¤¨ ā¤°ā¤žā¤–āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ ā¤•ā¤ŋ ā¤¤ā¤Ēā¤žā¤ˆā¤‚ā¤˛āĨ‡ Mastodon ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤— ā¤—ā¤°āĨā¤¨ā¤•āĨ‹ ā¤˛ā¤žā¤—ā¤ŋ {domain} ā¤Žā¤ž ā¤¨āĨˆ ā¤–ā¤žā¤¤ā¤ž ā¤–āĨ‹ā¤˛āĨā¤¨ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤›āĨˆā¤¨āĨ¤", + "closed_registrations_modal.find_another_server": "ā¤…ā¤°āĨā¤•āĨ‹ ā¤¸ā¤°āĨā¤­ā¤° ā¤–āĨ‹ā¤œāĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "closed_registrations_modal.title": "Mastodon ā¤Žā¤ž ā¤¸ā¤žā¤‡ā¤¨ ā¤…ā¤Ē ā¤—ā¤°āĨā¤ĻāĨˆ", + "column.blocks": "ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°ā¤ŋā¤ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤šā¤°āĨ", + "column.directory": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "column.domain_blocks": "ā¤ŦāĨā¤˛ā¤• ā¤—ā¤°ā¤ŋā¤ā¤•āĨ‹ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "column.follow_requests": "ā¤Ģā¤˛āĨ‹ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ā¤šā¤°āĨ‚", + "column.lists": "ā¤¸āĨ‚ā¤šāĨ€ā¤šā¤°āĨ‚", + "column.notifications": "ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤šā¤°āĨ‚", + "column_header.hide_settings": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤™āĨā¤šā¤°āĨ‚ ā¤˛āĨā¤•ā¤žā¤‰ā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "column_subheading.settings": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤™ā¤šā¤°āĨ‚", + "compose.language.change": "ā¤­ā¤žā¤ˇā¤ž ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "compose.language.search": "ā¤­ā¤žā¤ˇā¤žā¤šā¤°āĨ‚ ā¤–āĨ‹ā¤œāĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ...", + "compose_form.direct_message_warning_learn_more": "ā¤Ĩā¤Ē ā¤œā¤žā¤¨āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "compose_form.poll.add_option": "ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤Ĩā¤ĒāĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "compose_form.poll.remove_option": "ā¤¯āĨ‹ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤šā¤Ÿā¤žā¤‰ā¤¨āĨā¤šāĨ‹ā¤¸āĨ", + "compose_form.publish_form": "ā¤¨ā¤¯ā¤žā¤ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ", + "compose_form.save_changes": "ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ā¤šā¤°āĨ‚ ā¤¸āĨ‡ā¤­ ā¤—ā¤°āĨā¤¨āĨā¤šāĨ‹ā¤¸", + "compose_form.sensitive.hide": "{count, plural, one {ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤žā¤•āĨ‹ ā¤°āĨ‚ā¤Ēā¤Žā¤ž ā¤šā¤ŋā¤¨āĨā¤š ā¤˛ā¤—ā¤žā¤‰ā¤¨āĨā¤šāĨ‹ā¤¸āĨ} other {ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤žā¤šā¤°āĨ‚ā¤•āĨ‹ ā¤°āĨ‚ā¤Ēā¤Žā¤ž ā¤šā¤ŋā¤¨āĨā¤š ā¤˛ā¤—ā¤žā¤‰ā¤¨āĨā¤šāĨ‹ā¤¸āĨ}}", + "compose_form.sensitive.marked": "{count, plural, one {ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤žā¤˛ā¤žā¤ˆ ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤°āĨ‚ā¤Ēā¤Žā¤ž ā¤šā¤ŋā¤¨āĨā¤š ā¤˛ā¤—ā¤žā¤‡ā¤ā¤•āĨ‹ ā¤›} other {ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤žā¤šā¤°āĨ‚ā¤˛ā¤žā¤ˆ ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤°āĨ‚ā¤Ēā¤Žā¤ž ā¤šā¤ŋā¤¨āĨā¤š ā¤˛ā¤—ā¤žā¤‡ā¤ā¤•āĨ‹ ā¤›}}", + "compose_form.sensitive.unmarked": "{count, plural, one {ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤žā¤˛ā¤žā¤ˆ ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤°āĨ‚ā¤Ēā¤Žā¤ž ā¤šā¤ŋā¤¨āĨā¤š ā¤˛ā¤—ā¤žā¤‡ā¤ā¤•āĨ‹ ā¤›āĨˆā¤¨} other {ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤žā¤šā¤°āĨ‚ā¤˛ā¤žā¤ˆ ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤°āĨ‚ā¤Ēā¤Žā¤ž ā¤šā¤ŋā¤¨āĨā¤š ā¤˛ā¤—ā¤žā¤‡ā¤ā¤•āĨ‹ ā¤›āĨˆā¤¨}}", + "compose_form.spoiler_placeholder": "ā¤¯ā¤šā¤žā¤ ā¤†ā¤ĢāĨā¤¨āĨ‹ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤˛āĨ‡ā¤–āĨā¤¨āĨā¤šāĨ‹ā¤¸āĨ" +} diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 295b420fd45a25..86617d4a54b90c 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Geen berichten", "account.featured_tags.title": "Uitgelichte hashtags van {name}", "account.follow": "Volgen", + "account.follow_back": "Terugvolgen", "account.followers": "Volgers", "account.followers.empty": "Deze gebruiker heeft nog geen volgers of heeft deze verborgen.", "account.followers_counter": "{count, plural, one {{counter} volger} other {{counter} volgers}}", "account.following": "Volgend", "account.following_counter": "{count, plural, one {{counter} volgend} other {{counter} volgend}}", "account.follows.empty": "Deze gebruiker volgt nog niemand of heeft deze verborgen.", - "account.follows_you": "Volgt jou", "account.go_to_profile": "Ga naar profiel", "account.hide_reblogs": "Boosts van @{name} verbergen", "account.in_memoriam": "In memoriam.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Meldingen negeren", "account.mute_short": "Negeren", "account.muted": "Genegeerd", + "account.mutual": "Jullie volgen elkaar", "account.no_bio": "Geen beschrijving opgegeven.", "account.open_original_page": "Originele pagina openen", "account.posts": "Berichten", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 4750b1adc3305b..ec2ff8214457b7 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Ingen innlegg", "account.featured_tags.title": "{name} sine framheva emneknaggar", "account.follow": "Fylg", + "account.follow_back": "Følg tilbake", "account.followers": "Fylgjarar", "account.followers.empty": "Ingen fylgjer denne brukaren enno.", "account.followers_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjarar}}", "account.following": "Fylgjer", "account.following_counter": "{count, plural, one {Fylgjer {counter}} other {Fylgjer {counter}}}", "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.", - "account.follows_you": "Fylgjer deg", "account.go_to_profile": "GÃĨ til profil", "account.hide_reblogs": "Skjul framhevingar frÃĨ @{name}", "account.in_memoriam": "Til minne om.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Demp varslingar", "account.mute_short": "Demp", "account.muted": "MÃĨlbunden", + "account.mutual": "Felles", "account.no_bio": "Inga skildring er gjeven.", "account.open_original_page": "Opne originalsida", "account.posts": "Tut", @@ -481,6 +482,7 @@ "onboarding.follows.empty": "Me kan ikkje visa deg nokon resultat no. Du kan prøva ÃĨ søkja eller bla gjennom utforsk-sida for ÃĨ finna folk ÃĨ fylgja, eller du kan prøva att seinare.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", + "onboarding.profile.discoverable": "Gjør min profil synlig", "onboarding.profile.display_name": "Synleg namn", "onboarding.profile.display_name_hint": "Det fulle namnet eller kallenamnet dittâ€Ļ", "onboarding.profile.lead": "Du kan alltid fullføra dette seinare i innstillingane, og der er det endÃĨ fleire tilpassingsalternativ.", @@ -533,6 +535,7 @@ "privacy.unlisted.short": "Uoppført", "privacy_policy.last_updated": "Sist oppdatert {date}", "privacy_policy.title": "Personvernsreglar", + "recommended": "Anbefalt", "refresh": "Oppdater", "regeneration_indicator.label": "Lastarâ€Ļ", "regeneration_indicator.sublabel": "Heimetidslina di vert førebudd!", @@ -603,6 +606,7 @@ "search.quick_action.status_search": "Innlegg som samsvarer med {x}", "search.search_or_paste": "Søk eller lim inn URL", "search_popout.full_text_search_disabled_message": "Ikkje tilgjengeleg pÃĨ {domain}.", + "search_popout.full_text_search_logged_out_message": "Bare tilgjengelig nÃĨr man er logget inn.", "search_popout.language_code": "ISO-sprÃĨkkode", "search_popout.options": "Søkjealternativ", "search_popout.quick_actions": "Hurtighandlinger", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 1739d4aa31fe55..50da3bb2be109b 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Ingen Innlegg", "account.featured_tags.title": "{name} sine fremhevede emneknagger", "account.follow": "Følg", + "account.follow_back": "Følg tilbake", "account.followers": "Følgere", "account.followers.empty": "Ingen følger denne brukeren ennÃĨ.", "account.followers_counter": "{count, plural, one {{counter} følger} other {{counter} følgere}}", "account.following": "Følger", "account.following_counter": "{count, plural, one {{counter} som følges} other {{counter} som følges}}", "account.follows.empty": "Denne brukeren følger ikke noen enda.", - "account.follows_you": "Følger deg", "account.go_to_profile": "GÃĨ til profil", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", "account.in_memoriam": "Til minne om.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Demp varsler", "account.mute_short": "Demp", "account.muted": "Dempet", + "account.mutual": "Gjensidig", "account.no_bio": "Ingen beskrivelse oppgitt.", "account.open_original_page": "GÃĨ til originalsiden", "account.posts": "Innlegg", @@ -67,7 +68,7 @@ "account.unblock_domain": "Opphev blokkering av {domain}", "account.unblock_short": "Opphev blokkering", "account.unendorse": "Ikke vis frem pÃĨ profilen", - "account.unfollow": "Avfølg", + "account.unfollow": "Slutt ÃĨ følge", "account.unmute": "Opphev demping av @{name}", "account.unmute_notifications_short": "Opphev demping av varsler", "account.unmute_short": "Opphev demping", @@ -481,6 +482,7 @@ "onboarding.follows.empty": "Dessverre kan ingen resultater vises akkurat nÃĨ. Du kan prøve ÃĨ bruke søk eller bla gjennom utforske-siden for ÃĨ finne folk ÃĨ følge, eller prøve igjen senere.", "onboarding.follows.lead": "Hjem-skjermen din er den viktigste mÃĨten ÃĨ oppleve Mastodon pÃĨ. Jo flere du følger, jo mer aktiv og interessant blir det. For ÃĨ komme i gang, er her noen forslag:", "onboarding.follows.title": "PopulÃĻrt pÃĨ Mastodon", + "onboarding.profile.discoverable": "Gjør min profil synlig", "onboarding.profile.display_name": "Visningsnavn", "onboarding.profile.display_name_hint": "Ditt fulle navn eller ditt morsomme navnâ€Ļ", "onboarding.profile.lead": "Du kan alltid fullføre dette senere i innstillingene, der enda flere tilpasningsalternativer er tilgjengelige.", @@ -533,6 +535,7 @@ "privacy.unlisted.short": "Uoppført", "privacy_policy.last_updated": "Sist oppdatert {date}", "privacy_policy.title": "Personvernregler", + "recommended": "Anbefalt", "refresh": "Oppfrisk", "regeneration_indicator.label": "Lasterâ€Ļ", "regeneration_indicator.sublabel": "Dine tidslinje blir gjort klar!", @@ -603,6 +606,7 @@ "search.quick_action.status_search": "Innlegg som samsvarer med {x}", "search.search_or_paste": "Søk eller lim inn URL", "search_popout.full_text_search_disabled_message": "Ikke tilgjengelig pÃĨ {domain}.", + "search_popout.full_text_search_logged_out_message": "Bare tilgjengelig nÃĨr man er logget inn.", "search_popout.language_code": "ISO sprÃĨkkode", "search_popout.options": "Alternativer for søk", "search_popout.quick_actions": "Hurtighandlinger", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 3812057fb040e9..833bfe6acef261 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -34,7 +34,6 @@ "account.following": "Abonat", "account.following_counter": "{count, plural, one {{counter} Abonaments} other {{counter} Abonaments}}", "account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.", - "account.follows_you": "Vos sèc", "account.go_to_profile": "Anar al perfil", "account.hide_reblogs": "Rescondre los partatges de @{name}", "account.in_memoriam": "En MemÃ˛ria.", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 7faf279719dee5..132b695cda8478 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -1,25 +1,38 @@ { "about.contact": "ā¨¸āŠ°ā¨Ēā¨°ā¨•:", + "about.domain_blocks.silenced.title": "ā¨¸āŠ€ā¨Žā¨ŋā¨¤", "about.domain_blocks.suspended.title": "ā¨ŽāŠā¨…āŠąā¨¤ā¨˛ ā¨•āŠ€ā¨¤āŠ€", + "about.rules": "ā¨¸ā¨°ā¨ĩā¨° ā¨¨ā¨ŋā¨¯ā¨Ž", "account.account_note_header": "ā¨¨āŠ‹ā¨Ÿ", - "account.badges.bot": "Bot", + "account.add_or_remove_from_list": "ā¨¸āŠ‚ā¨šāŠ€ ā¨ĩā¨ŋāŠąā¨š ā¨œāŠ‹āŠœāŠ‹ ā¨œā¨žā¨‚ ā¨šā¨Ÿā¨žā¨“", + "account.badges.bot": "ā¨†ā¨ŸāŠ‹ā¨ŽāŠ‡ā¨Ÿ ā¨•āŠ€ā¨¤ā¨ž", "account.badges.group": "ā¨—ā¨°āŠāŠąā¨Ē", + "account.block": "@{name} ā¨‰āŠąā¨¤āŠ‡ ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨“", + "account.block_domain": "{domain} ā¨ĄāŠ‹ā¨ŽāŠ‡ā¨¨ ā¨‰āŠąā¨¤āŠ‡ ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨“", + "account.block_short": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€", "account.blocked": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ā¨¸ā¨ŧāŠā¨Ļā¨ž", - "account.cancel_follow_request": "Withdraw follow request", - "account.follow": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨• ā¨Ŧā¨ŖāŠ‹", - "account.followers": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨•", - "account.following": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨• ā¨šā¨žā¨‚", + "account.cancel_follow_request": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°ā¨¨ ā¨¨āŠ‚āŠ° ā¨°āŠąā¨Ļ ā¨•ā¨°āŠ‹", + "account.edit_profile": "ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨¨āŠ‚āŠ° ā¨¸āŠ‹ā¨§āŠ‹", + "account.follow": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹", + "account.followers": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ā¨…ā¨°", + "account.followers.empty": "ā¨‡ā¨¸ ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨° ā¨¨āŠ‚āŠ° ā¨šā¨žā¨˛āŠ‡ ā¨•āŠ‹ā¨ˆ ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨¨ā¨šāŠ€ā¨‚ ā¨•ā¨°ā¨Ļā¨ž ā¨šāŠˆāĨ¤", + "account.following": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•āŠ€ā¨¤ā¨ž", + "account.follows.empty": "ā¨‡ā¨š ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨° ā¨šā¨žā¨˛āŠ‡ ā¨•ā¨ŋā¨¸āŠ‡ ā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨¨ā¨šāŠ€ā¨‚ ā¨•ā¨°ā¨Ļā¨ž ā¨šāŠˆāĨ¤", "account.media": "ā¨ŽāŠ€ā¨ĄāŠ€ā¨†", "account.muted": "ā¨ŽāŠŒā¨¨ ā¨•āŠ€ā¨¤āŠ€ā¨†ā¨‚", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", - "account.requested": "Awaiting approval", + "account.posts": "ā¨ĒāŠ‹ā¨¸ā¨Ÿā¨žā¨‚", + "account.posts_with_replies": "ā¨ĒāŠ‹ā¨¸ā¨¤ā¨žā¨‚ ā¨…ā¨¤āŠ‡ ā¨œā¨ĩā¨žā¨Ŧ", + "account.requested": "ā¨Žā¨¨āŠ›āŠ‚ā¨°āŠ€ ā¨•āŠ€ā¨¤āŠ€ ā¨œā¨ž ā¨°ā¨šāŠ€ ā¨šāŠˆāĨ¤ ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨ŦāŠ‡ā¨¨ā¨¤āŠ€ā¨†ā¨‚ ā¨¨āŠ‚āŠ° ā¨°āŠąā¨Ļ ā¨•ā¨°ā¨¨ ā¨˛ā¨ˆ ā¨•ā¨˛ā¨ŋāŠąā¨• ā¨•ā¨°āŠ‹", + "account.requested_follow": "{name} ā¨¨āŠ‡ ā¨¤āŠā¨šā¨žā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°ā¨¨ ā¨ĻāŠ€ ā¨ŦāŠ‡ā¨¨ā¨¤āŠ€ ā¨•āŠ€ā¨¤āŠ€ ā¨šāŠˆ", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "@{name} ā¨¤āŠ‹ā¨‚ ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨šā¨Ÿā¨žā¨“", + "account.unblock_domain": "{domain} ā¨ĄāŠ‹ā¨ŽāŠ‡ā¨¨ ā¨¤āŠ‹ā¨‚ ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨šā¨Ÿā¨žā¨“", "account.unblock_short": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨šā¨Ÿā¨žā¨“", - "account.unfollow": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨•āŠ€ ā¨°āŠąā¨Ļ ā¨•ā¨°āŠ‹", + "account.unfollow": "ā¨…ā¨Ŗ-ā¨Ģā¨ŧā¨žā¨˛āŠ‹", "account.unmute_short": "ā¨ŽāŠŒā¨¨-ā¨°ā¨šā¨ŋā¨¤ ā¨•ā¨°āŠ‹", "account_note.placeholder": "Click to add a note", "admin.dashboard.retention.average": "ā¨”ā¨¸ā¨¤", + "admin.dashboard.retention.cohort_size": "ā¨¨ā¨ĩāŠ‡ā¨‚ ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨°", "alert.unexpected.title": "ā¨“ā¨šāŠ‹!", "announcement.announcement": "ā¨šāŠ‹ā¨•ā¨ž", "bundle_column_error.network.title": "ā¨¨āŠˆāŠąā¨Ÿā¨ĩā¨°ā¨• ā¨ĻāŠ€ ā¨¸ā¨ŽāŠąā¨¸ā¨ŋā¨†", @@ -27,35 +40,50 @@ "bundle_modal_error.close": "ā¨ŦāŠ°ā¨Ļ ā¨•ā¨°āŠ‹", "bundle_modal_error.retry": "ā¨ŽāŠāŠœ-ā¨•āŠ‹ā¨¸ā¨ŧā¨ŋā¨¸ā¨ŧ ā¨•ā¨°āŠ‹", "column.about": "ā¨¸ā¨žā¨ĄāŠ‡ ā¨Ŧā¨žā¨°āŠ‡", + "column.blocks": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨ ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨°", "column.bookmarks": "ā¨ŦāŠāŠąā¨•ā¨Žā¨žā¨°ā¨•", - "column.home": "ā¨ŽāŠāŠąā¨– ā¨ĒāŠ°ā¨¨ā¨ž", + "column.community": "ā¨˛āŠ‹ā¨•ā¨˛ ā¨¸ā¨Žā¨žā¨‚-ā¨˛ā¨žā¨ˆā¨¨", + "column.direct": "ā¨¨ā¨ŋāŠąā¨œāŠ€ āŠ›ā¨ŋā¨•ā¨°", + "column.favourites": "ā¨Žā¨¨ā¨Ēā¨¸āŠ°ā¨Ļ", + "column.follow_requests": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨ĻāŠ€ā¨†ā¨‚ ā¨ŦāŠ‡ā¨¨ā¨¤āŠ€ā¨†ā¨‚", + "column.home": "ā¨ŽāŠāŠąā¨– ā¨¸āŠžā¨ž", "column.lists": "ā¨¸āŠ‚ā¨šāŠ€ā¨†ā¨‚", "column.notifications": "ā¨¸āŠ‚ā¨šā¨¨ā¨žā¨ĩā¨žā¨‚", - "column.pins": "Pinned toot", + "column.pins": "ā¨ŸāŠ°ā¨—āŠ€ā¨†ā¨‚ ā¨ĒāŠ‹ā¨¸ā¨Ÿā¨žā¨‚", "column_back_button.label": "ā¨Ēā¨ŋāŠąā¨›āŠ‡", + "column_header.pin": "ā¨ŸāŠ°ā¨—āŠ‹", + "column_header.show_settings": "ā¨¸āŠˆā¨Ÿā¨ŋāŠ°ā¨—ā¨žā¨‚ ā¨Ļā¨ŋā¨–ā¨žā¨“", + "column_header.unpin": "ā¨˛ā¨žā¨šāŠ‹", "column_subheading.settings": "ā¨¸āŠˆā¨Ÿā¨ŋāŠ°ā¨—ā¨žā¨‚", - "community.column_settings.media_only": "Media only", + "community.column_settings.local_only": "ā¨¸ā¨ŋā¨°ā¨Ģ ā¨˛āŠ‹ā¨•ā¨˛ ā¨šāŠ€", + "community.column_settings.media_only": "ā¨¸ā¨ŋā¨°ā¨Ģ ā¨ŽāŠ€ā¨ĄāŠ€ā¨† ā¨šāŠ€", + "community.column_settings.remote_only": "ā¨¸ā¨ŋā¨°ā¨Ģā¨ŧ ā¨°ā¨ŋā¨ŽāŠ‹ā¨Ÿ ā¨šāŠ€", + "compose.language.change": "ā¨­ā¨žā¨ļā¨ž ā¨Ŧā¨Ļā¨˛āŠ‹", + "compose.language.search": "ā¨­ā¨žā¨¸ā¨ŧā¨žā¨ĩā¨žā¨‚ ā¨ĻāŠ€ ā¨–āŠ‹ā¨œ...", + "compose.published.open": "ā¨–āŠ‹ā¨˛āŠā¨šāŠ‹", + "compose.saved.body": "ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨¸āŠ°ā¨­ā¨žā¨˛āŠ€ ā¨—ā¨ˆāĨ¤", "compose_form.direct_message_warning_learn_more": "ā¨šāŠ‹ā¨° ā¨œā¨žā¨ŖāŠ‹", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", + "compose_form.lock_disclaimer.lock": "ā¨˛ā¨žā¨• ā¨šāŠˆ", "compose_form.placeholder": "What is on your mind?", "compose_form.publish": "ā¨ĒāŠā¨°ā¨•ā¨žā¨¸ā¨ŧā¨¨ ā¨•ā¨°āŠ‹", "compose_form.publish_form": "Publish", "compose_form.save_changes": "ā¨¤ā¨Ŧā¨ĻāŠ€ā¨˛āŠ€ā¨†ā¨‚ ā¨¸ā¨žā¨‚ā¨­āŠ‹", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler.marked": "ā¨¸ā¨ŽāŠąā¨—ā¨°āŠ€ ā¨šāŠ‡ā¨¤ā¨žā¨ĩā¨¨āŠ€ ā¨¨āŠ‚āŠ° ā¨šā¨Ÿā¨žā¨“", + "compose_form.spoiler.unmarked": "ā¨¸ā¨ŽāŠąā¨—ā¨°āŠ€ ā¨Ŧā¨žā¨°āŠ‡ ā¨šāŠ‡ā¨¤ā¨žā¨ĩā¨¨āŠ€ ā¨œāŠ‹āŠœāŠ‹", "confirmation_modal.cancel": "ā¨°āŠąā¨Ļ ā¨•ā¨°āŠ‹", - "confirmations.block.confirm": "ā¨Ŧā¨˛ā¨žā¨•", - "confirmations.delete.confirm": "ā¨Žā¨ŋā¨Ÿā¨žā¨“", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "ā¨Žā¨ŋā¨Ÿā¨žā¨“", + "confirmations.block.confirm": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€", + "confirmations.delete.confirm": "ā¨šā¨Ÿā¨žā¨“", + "confirmations.delete.message": "ā¨•āŠ€ ā¨¤āŠā¨¸āŠ€ā¨‚ ā¨‡ā¨š ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨¨āŠ‚āŠ° ā¨šā¨Ÿā¨žā¨‰ā¨Ŗā¨ž ā¨šā¨žā¨šāŠāŠ°ā¨ĻāŠ‡ ā¨šāŠ‹?", + "confirmations.delete_list.confirm": "ā¨šā¨Ÿā¨žā¨“", "confirmations.discard_edit_media.confirm": "ā¨°āŠąā¨Ļ ā¨•ā¨°āŠ‹", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "ā¨ĒāŠ‚ā¨°āŠ€ ā¨ĄāŠ‹ā¨ŽāŠ‡ā¨¨ ā¨‰āŠąā¨¤āŠ‡ ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨“", "confirmations.edit.confirm": "ā¨¸āŠ‹ā¨§", "confirmations.logout.confirm": "ā¨Ŧā¨žā¨šā¨° ā¨šāŠ‹ā¨ĩāŠ‹", "confirmations.mute.confirm": "ā¨ŽāŠŒā¨¨ ā¨•ā¨°āŠ‹", "confirmations.reply.confirm": "ā¨œā¨ĩā¨žā¨Ŧ ā¨ĻāŠ‡ā¨ĩāŠ‹", - "confirmations.unfollow.confirm": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨•āŠ€ ā¨°āŠąā¨Ļ ā¨•ā¨°āŠ‹", + "confirmations.unfollow.confirm": "ā¨…ā¨Ŗ-ā¨Ģā¨ŧā¨žā¨˛āŠ‹", "copypaste.copied": "ā¨•ā¨žā¨ĒāŠ€ ā¨•āŠ€ā¨¤ā¨ž", "copypaste.copy_to_clipboard": "ā¨•ā¨˛ā¨ŋāŠąā¨Ēā¨ŦāŠ‹ā¨°ā¨Ą 'ā¨¤āŠ‡ ā¨•ā¨žā¨ĒāŠ€ ā¨•ā¨°āŠ‹", "disabled_account_banner.account_settings": "ā¨–ā¨žā¨¤āŠ‡ ā¨ĻāŠ€ā¨†ā¨‚ ā¨¸āŠˆā¨Ÿā¨ŋāŠ°ā¨—ā¨žā¨‚", @@ -63,165 +91,252 @@ "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", "embed.instructions": "Embed this status on your website by copying the code below.", - "emoji_button.activity": "ā¨—ā¨¤āŠ€ā¨ĩā¨ŋā¨§āŠ€ā¨†ā¨‚", - "emoji_button.clear": "ā¨¸ā¨žā¨Ģā¨ŧ ā¨•ā¨°āŠ‹", + "emoji_button.activity": "ā¨—ā¨¤āŠ€ā¨ĩā¨ŋā¨§āŠ€", + "emoji_button.clear": "ā¨Žā¨ŋā¨Ÿā¨žā¨“", "emoji_button.custom": "ā¨•ā¨¸ā¨Ÿā¨Ž", "emoji_button.flags": "ā¨āŠ°ā¨ĄāŠ€ā¨†ā¨‚", "emoji_button.food": "ā¨–ā¨žā¨Ŗā¨ž-ā¨ĒāŠ€ā¨Ŗā¨ž", "emoji_button.nature": "ā¨•āŠā¨Ļā¨°ā¨¤", "emoji_button.objects": "ā¨‡ā¨•ā¨žā¨ˆ", "emoji_button.people": "ā¨˛āŠ‹ā¨•", - "empty_column.account_timeline": "No toots here!", + "emoji_button.search": "ā¨–āŠ‹ā¨œ ā¨•ā¨°āŠ‹...", + "emoji_button.search_results": "ā¨–āŠ‹ā¨œ ā¨¨ā¨¤āŠ€ā¨œāŠ‡", + "emoji_button.symbols": "ā¨šā¨ŋāŠ°ā¨¨āŠā¨š", + "emoji_button.travel": "ā¨¸āŠˆā¨° ā¨¸ā¨Ēā¨žā¨Ÿā¨ž ā¨¤āŠ‡ ā¨Ĩā¨žā¨ĩā¨žā¨‚", + "empty_column.account_timeline": "ā¨‡āŠąā¨ĨāŠ‡ ā¨•āŠ‹ā¨ˆ ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨¨ā¨šāŠ€ā¨‚ ā¨šāŠˆ!", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home": "ā¨¤āŠā¨šā¨žā¨ĄāŠ€ ā¨Ÿā¨žā¨ˆā¨Ž-ā¨˛ā¨žā¨ˆā¨¨ ā¨–ā¨žā¨˛āŠ€ ā¨šāŠˆ! ā¨‡ā¨¸ ā¨¨āŠ‚āŠ° ā¨­ā¨°ā¨¨ ā¨˛ā¨ˆ ā¨šāŠ‹ā¨° ā¨˛āŠ‹ā¨•ā¨žā¨‚ ā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°āŠ‹āĨ¤", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "errors.unexpected_crash.report_issue": "ā¨ŽāŠāŠąā¨ĻāŠ‡ ā¨ĻāŠ€ ā¨°ā¨ŋā¨ĒāŠ‹ā¨°ā¨Ÿ ā¨•ā¨°āŠ‹", "explore.suggested_follows": "ā¨˛āŠ‹ā¨•", "explore.title": "ā¨ĒāŠœā¨šāŠ‹ā¨˛ ā¨•ā¨°āŠ‹", "explore.trending_links": "ā¨–ā¨ŧā¨Ŧā¨°ā¨žā¨‚", - "explore.trending_statuses": "ā¨¸āŠ°ā¨Ēā¨žā¨Ļā¨¨ā¨žā¨ĩā¨žā¨‚", - "follow_request.reject": "ā¨…ā¨¸ā¨ĩāŠ€ā¨•ā¨žā¨° ā¨•ā¨°āŠ‹", + "explore.trending_statuses": "ā¨ĒāŠ‹ā¨¸ā¨Ÿā¨žā¨‚", + "explore.trending_tags": "ā¨šāŠˆā¨ļā¨ŸāŠˆā¨—", + "filter_modal.added.settings_link": "ā¨¸āŠˆā¨Ÿā¨ŋāŠ°ā¨—ā¨žā¨‚ ā¨¸āŠžā¨ž", + "firehose.all": "ā¨¸ā¨­", + "firehose.local": "ā¨‡ā¨š ā¨¸ā¨°ā¨ĩā¨°", + "firehose.remote": "ā¨šāŠ‹ā¨° ā¨¸ā¨°ā¨ĩā¨°", + "follow_request.reject": "ā¨°āŠąā¨Ļ ā¨•ā¨°āŠ‹", "footer.about": "ā¨¸ā¨žā¨ĄāŠ‡ ā¨Ŧā¨žā¨°āŠ‡", + "footer.get_app": "ā¨ā¨Ē ā¨˛ā¨ĩāŠ‹", + "footer.invite": "ā¨˛āŠ‹ā¨•ā¨žā¨‚ ā¨¨āŠ‚āŠ° ā¨¸āŠąā¨Ļā¨ž ā¨­āŠ‡ā¨œāŠ‹", "footer.keyboard_shortcuts": "ā¨•āŠ€ā¨ŦāŠ‹ā¨°ā¨Ą ā¨ļā¨žā¨°ā¨Ÿā¨•āŠąā¨Ÿ", + "footer.privacy_policy": "ā¨Ēā¨°ā¨ĻāŠ‡ā¨Ļā¨žā¨°āŠ€ ā¨¨āŠ€ā¨¤āŠ€", + "footer.source_code": "ā¨¸ā¨°āŠ‹ā¨¤ ā¨•āŠ‹ā¨Ą ā¨ĩāŠ‡ā¨–āŠ‹", "footer.status": "ā¨šā¨žā¨˛ā¨¤", "generic.saved": "ā¨¸ā¨žā¨‚ā¨­āŠ€ ā¨—ā¨ˆ", + "getting_started.heading": "ā¨ļāŠā¨°āŠ‚ ā¨•ā¨°āŠ€ā¨", + "hashtag.column_header.tag_mode.all": "ā¨…ā¨¤āŠ‡ {additional}", + "hashtag.column_header.tag_mode.any": "ā¨œā¨žā¨‚ {additional}", + "hashtag.column_header.tag_mode.none": "{additional} ā¨Ŧā¨ŋā¨¨ā¨žā¨‚", + "hashtag.column_settings.tag_mode.any": "ā¨‡ā¨šā¨¨ā¨žā¨‚ ā¨ĩā¨ŋāŠąā¨šāŠ‹ā¨‚ ā¨•āŠ‹ā¨ˆ", + "hashtag.column_settings.tag_mode.none": "ā¨‡ā¨šā¨¨ā¨žā¨‚ ā¨ĩā¨ŋāŠąā¨šāŠ‹ā¨‚ ā¨•āŠ‹ā¨ˆ ā¨¨ā¨šāŠ€ā¨‚", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "ā¨šāŠˆā¨ļā¨ŸāŠˆā¨— ā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°āŠ‹", + "hashtag.unfollow": "ā¨šāŠˆā¨ļā¨ŸāŠˆā¨— ā¨¨āŠ‚āŠ° ā¨…ā¨Ŗ-ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°āŠ‹", "home.column_settings.basic": "ā¨†ā¨Ž", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", + "interaction_modal.title.follow": "{name} ā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°āŠ‹", + "keyboard_shortcuts.back": "ā¨Ēā¨ŋāŠąā¨›āŠ‡ ā¨œā¨žā¨“", + "keyboard_shortcuts.blocked": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨ ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨°ā¨žā¨‚ ā¨ĻāŠ€ ā¨¸āŠ‚ā¨šāŠ€ ā¨–āŠ‹ā¨˛āŠā¨šāŠ‹", + "keyboard_shortcuts.boost": "ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨¨āŠ‚āŠ° ā¨ŦāŠ‚ā¨¸ā¨Ÿ ā¨•ā¨°āŠ‹", + "keyboard_shortcuts.column": "ā¨ĢāŠ‹ā¨•ā¨¸ ā¨•ā¨žā¨˛ā¨Ž", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "ā¨ĩā¨°ā¨Ŗā¨¨", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.heading": "ā¨•āŠ€ā¨ŦāŠ‹ā¨°ā¨Ą ā¨ļā¨žā¨°ā¨Ÿā¨•āŠąā¨Ÿ", "keyboard_shortcuts.home": "to open home timeline", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.notifications": "ā¨¨āŠ‹ā¨ŸāŠ€ā¨Ģā¨ŋā¨•āŠ‡ā¨ļā¨¨ ā¨•ā¨žā¨˛ā¨Ž ā¨–āŠ‹ā¨˛āŠā¨šāŠ‹", "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.profile": "ā¨˛āŠ‡ā¨–ā¨• ā¨Ļā¨ž ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨–āŠ‹ā¨˛āŠā¨šāŠ‹", + "keyboard_shortcuts.reply": "ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨¨āŠ‚āŠ° ā¨œā¨ĩā¨žā¨Ŧ ā¨Ļā¨ŋā¨“", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.toggle_sensitivity": "ā¨ŽāŠ€ā¨ĄāŠ€ā¨† ā¨Ļā¨ŋā¨–ā¨žā¨‰ā¨Ŗ/ā¨˛āŠā¨•ā¨žā¨‰ā¨Ŗ ā¨˛ā¨ˆ", + "keyboard_shortcuts.toot": "ā¨¨ā¨ĩāŠ€ā¨‚ ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨ļāŠā¨°āŠ‚ ā¨•ā¨°āŠ‹", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "ā¨ŦāŠ°ā¨Ļ ā¨•ā¨°āŠ‹", "lightbox.next": "ā¨…ā¨—ā¨˛āŠ€", "lightbox.previous": "ā¨Ēā¨ŋā¨›ā¨˛āŠ€", - "lists.delete": "ā¨¸āŠ‚ā¨šāŠ€ ā¨Žā¨ŋā¨Ÿā¨žā¨“", + "link_preview.author": "{name} ā¨ĩā¨˛āŠ‹ā¨‚", + "lists.account.add": "ā¨¸āŠ‚ā¨šāŠ€ ā¨ĩā¨ŋāŠąā¨š ā¨œāŠ‹āŠœāŠ‹", + "lists.account.remove": "ā¨¸āŠ‚ā¨šāŠ€ ā¨ĩā¨ŋā¨šāŠ‹ā¨‚ ā¨šā¨Ÿā¨žā¨“", + "lists.delete": "ā¨¸āŠ‚ā¨šāŠ€ ā¨šā¨Ÿā¨žā¨“", + "lists.replies_policy.followed": "ā¨•āŠ‹ā¨ˆ ā¨ĩāŠ€ ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•āŠ€ā¨¤ā¨ž ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨°", + "lists.replies_policy.none": "ā¨•āŠ‹ā¨ˆ ā¨¨ā¨šāŠ€ā¨‚", + "loading_indicator.label": "ā¨˛āŠ‹ā¨Ą ā¨šāŠ‹ ā¨°ā¨ŋā¨šā¨ž ā¨šāŠˆâ€Ļ", "mute_modal.duration": "ā¨Žā¨ŋā¨†ā¨Ļ", - "navigation_bar.about": "ā¨¸ā¨žā¨ĄāŠ‡ ā¨Ŧā¨žā¨°āŠ‡", + "navigation_bar.about": "ā¨‡ā¨¸ ā¨Ŧā¨žā¨°āŠ‡", + "navigation_bar.advanced_interface": "ā¨¤ā¨•ā¨¨āŠ€ā¨•āŠ€ ā¨ĩāŠˆāŠąā¨Ŧ ā¨‡āŠ°ā¨Ÿā¨°ā¨ĢāŠ‡ā¨¸ ā¨ĩā¨ŋāŠąā¨š ā¨–āŠ‹ā¨˛āŠā¨šāŠ‹", + "navigation_bar.blocks": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨ ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨°", "navigation_bar.bookmarks": "ā¨ŦāŠāŠąā¨•ā¨Žā¨žā¨°ā¨•", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.community_timeline": "ā¨˛āŠ‹ā¨•ā¨˛ ā¨¸ā¨Žā¨žā¨‚-ā¨˛ā¨žā¨ˆā¨¨", + "navigation_bar.compose": "ā¨¨ā¨ĩāŠ€ā¨‚ ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨˛ā¨ŋā¨–āŠ‹", + "navigation_bar.direct": "ā¨¨ā¨ŋāŠąā¨œāŠ€ āŠ›ā¨ŋā¨•ā¨°", "navigation_bar.discover": "ā¨–āŠ‹ā¨œ", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨ ā¨ĄāŠ‹ā¨ŽāŠ‡ā¨¨", + "navigation_bar.edit_profile": "ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨¨āŠ‚āŠ° ā¨¸āŠ‹ā¨§āŠ‹", "navigation_bar.explore": "ā¨ĒāŠœā¨šāŠ‹ā¨˛ ā¨•ā¨°āŠ‹", + "navigation_bar.favourites": "ā¨Žā¨¨ā¨Ēā¨¸āŠ°ā¨Ļ", + "navigation_bar.follow_requests": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨ĻāŠ€ā¨†ā¨‚ ā¨ŦāŠ‡ā¨¨ā¨¤āŠ€ā¨†ā¨‚", + "navigation_bar.followed_tags": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•āŠ€ā¨¤āŠ‡ ā¨šāŠˆā¨ļā¨ŸāŠˆā¨—", + "navigation_bar.follows_and_followers": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨…ā¨¤āŠ‡ ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°ā¨¨ ā¨ĩā¨žā¨˛āŠ‡", "navigation_bar.lists": "ā¨¸āŠ‚ā¨šāŠ€ā¨†ā¨‚", - "navigation_bar.logout": "ā¨˛ā¨žāŠąā¨— ā¨†ā¨Šā¨Ÿ, ā¨Ŧā¨žā¨šā¨° ā¨†ā¨‰ā¨Ŗā¨ž", + "navigation_bar.logout": "ā¨˛ā¨žā¨— ā¨†ā¨‰ā¨Ÿ", "navigation_bar.personal": "ā¨¨ā¨ŋāŠąā¨œāŠ€", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "ā¨¤ā¨°ā¨œāŠ€ā¨šā¨žā¨‚", + "navigation_bar.pins": "ā¨ŸāŠ°ā¨—āŠ€ā¨†ā¨‚ ā¨ĒāŠ‹ā¨¸ā¨Ÿā¨žā¨‚", + "navigation_bar.preferences": "ā¨Ēā¨¸āŠ°ā¨Ļā¨žā¨‚", "navigation_bar.search": "ā¨–āŠ‹ā¨œāŠ‹", "navigation_bar.security": "ā¨¸āŠā¨°āŠąā¨–ā¨ŋā¨†", - "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", + "not_signed_in_indicator.not_signed_in": "ā¨‡ā¨š ā¨¸ā¨°āŠ‹ā¨¤ ā¨ĩā¨°ā¨¤ā¨Ŗ ā¨˛ā¨ˆ ā¨¤āŠā¨šā¨žā¨¨āŠ‚āŠ° ā¨˛ā¨žā¨—ā¨‡ā¨¨ ā¨•ā¨°ā¨¨ ā¨ĻāŠ€ ā¨˛āŠ‹āŠœ ā¨šāŠˆāĨ¤", + "notification.follow": "{name} ā¨¨āŠ‡ ā¨¤āŠā¨šā¨žā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•āŠ€ā¨¤ā¨ž", + "notification.follow_request": "{name} ā¨¨āŠ‡ ā¨¤āŠā¨šā¨žā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°ā¨¨ ā¨ĻāŠ€ ā¨ŦāŠ‡ā¨¨ā¨¤āŠ€ ā¨•āŠ€ā¨¤āŠ€ ā¨šāŠˆ", "notification.reblog": "{name} boosted your status", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.follow": "ā¨¨ā¨ĩāŠ‡ā¨‚ ā¨Ģā¨ŧā¨žā¨˛āŠ‹ā¨…ā¨°:", + "notifications.column_settings.follow_request": "ā¨¨ā¨ĩāŠ€ā¨†ā¨‚ ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨ŦāŠ‡ā¨¨ā¨¤āŠ€ā¨†ā¨‚:", + "notifications.column_settings.status": "ā¨¨ā¨ĩāŠ€ā¨†ā¨‚ ā¨ĒāŠ‹ā¨¸ā¨Ÿā¨žā¨‚:", + "notifications.column_settings.update": "ā¨¸āŠ‹ā¨§:", "notifications.filter.all": "ā¨¸ā¨­", - "notifications.filter.follows": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨• ā¨Ŧā¨Ŗā¨¨ 'ā¨¤āŠ‡", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", + "notifications.filter.boosts": "ā¨ŦāŠ‚ā¨¸ā¨Ÿ", + "notifications.filter.favourites": "ā¨Žā¨¨ā¨Ēā¨¸āŠ°ā¨Ļ", + "notifications.filter.follows": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹", + "notifications.filter.mentions": "āŠ›ā¨ŋā¨•ā¨°", + "onboarding.actions.go_to_explore": "ā¨ŽāŠˆā¨¨āŠ‚āŠ° ā¨°āŠā¨ā¨žā¨¨ ā¨ĩāŠ‡ā¨–ā¨žā¨“", + "onboarding.actions.go_to_home": "ā¨ŽāŠ‡ā¨°āŠ€ ā¨ŽāŠāŠąā¨– ā¨ĢāŠ€ā¨Ą ā¨‰āŠąā¨¤āŠ‡ ā¨˛āŠˆ ā¨œā¨žā¨“", + "onboarding.follows.lead": "", + "onboarding.follows.title": "ā¨†ā¨Ēā¨ŖāŠ€ ā¨šāŠ‹ā¨Ž ā¨ĢāŠ€ā¨Ą ā¨¨āŠ‚āŠ° ā¨¨ā¨ŋāŠąā¨œāŠ€ ā¨Ŧā¨Ŗā¨žā¨“", + "onboarding.profile.note": "ā¨œā¨žā¨Ŗā¨•ā¨žā¨°āŠ€", + "onboarding.profile.save_and_continue": "ā¨¸āŠ°ā¨­ā¨žā¨˛āŠ‹ ā¨…ā¨¤āŠ‡ ā¨œā¨žā¨°āŠ€ ā¨°āŠąā¨–āŠ‹", + "onboarding.profile.title": "ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨¸āŠˆā¨Ÿā¨…āŠąā¨Ē", + "onboarding.profile.upload_avatar": "ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨¤ā¨¸ā¨ĩāŠ€ā¨° ā¨…āŠąā¨Ēā¨˛āŠ‹ā¨Ą ā¨•ā¨°āŠ‹", + "onboarding.share.title": "ā¨†ā¨Ēā¨Ŗā¨ž ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨¸ā¨žā¨‚ā¨ā¨ž ā¨•ā¨°āŠ‹", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", + "onboarding.start.skip": "ā¨ļāŠā¨°āŠ‚ ā¨•ā¨°ā¨¨ ā¨˛ā¨ˆ ā¨Žā¨Ļā¨Ļ ā¨¨ā¨šāŠ€ā¨‚ ā¨šā¨žā¨šāŠ€ā¨ĻāŠ€ ā¨šāŠˆ?", + "onboarding.start.title": "ā¨¤āŠā¨¸āŠ€ā¨‚ ā¨ĒāŠ‚ā¨°ā¨ž ā¨•ā¨°ā¨¨ ā¨˛ā¨ŋā¨†!", + "onboarding.steps.follow_people.body": "ā¨Ļā¨ŋā¨˛ā¨šā¨¸ā¨Ē ā¨˛āŠ‹ā¨•ā¨žā¨‚ ā¨¨āŠ‚āŠ° ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°āŠ‹, ā¨‡ā¨š ā¨¤ā¨žā¨‚ ā¨Žā¨¸ā¨Ÿā¨žā¨ĄāŠ‹ā¨¨ ā¨šāŠˆāĨ¤", + "onboarding.steps.follow_people.title": "ā¨†ā¨Ēā¨ŖāŠ€ ā¨šāŠ‹ā¨Ž ā¨ĢāŠ€ā¨Ą ā¨¨āŠ‚āŠ° ā¨¨ā¨ŋāŠąā¨œāŠ€ ā¨Ŧā¨Ŗā¨žā¨“", "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.title": "ā¨†ā¨Ēā¨ŖāŠ€ ā¨Ēā¨šā¨ŋā¨˛āŠ€ ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨•ā¨°āŠ‹", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", - "poll.closed": "ā¨ŦāŠ°ā¨Ļ ā¨šāŠ‹ā¨‡ā¨†", + "onboarding.steps.setup_profile.title": "ā¨†ā¨Ēā¨ŖāŠ‡ ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨¨āŠ‚āŠ° ā¨†ā¨Ēā¨Ŗā¨ž ā¨Ŧā¨Ŗā¨žā¨“", + "onboarding.steps.share_profile.body": "ā¨†ā¨Ēā¨ŖāŠ‡ ā¨Žā¨ŋāŠąā¨¤ā¨°ā¨žā¨‚ ā¨¨āŠ‚āŠ° ā¨ĻāŠąā¨¸āŠ‹ ā¨¤āŠā¨šā¨žā¨¨āŠ‚āŠ° ā¨Žā¨¸ā¨Ÿā¨žā¨ĄāŠ‹ā¨¨ ā¨•ā¨ŋā¨ĩāŠ‡ā¨‚ ā¨˛āŠąā¨—ā¨ŋā¨†", + "onboarding.steps.share_profile.title": "ā¨†ā¨Ēā¨ŖāŠ‡ ā¨Žā¨¸ā¨Ÿā¨žā¨ĄāŠ‹ā¨¨ ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨¨āŠ‚āŠ° ā¨¸ā¨žā¨‚ā¨ā¨ž ā¨•ā¨°āŠ‹", + "poll.closed": "ā¨ŦāŠ°ā¨Ļ ā¨šāŠˆ", "poll.refresh": "ā¨¤ā¨žā¨œā¨ŧā¨ž ā¨•ā¨°āŠ‹", "poll.vote": "ā¨ĩāŠ‹ā¨Ÿ ā¨Ēā¨žā¨“", - "privacy.change": "Adjust status privacy", - "privacy.direct.short": "Direct", - "privacy.private.short": "Followers-only", + "privacy.change": "ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨ĻāŠ€ ā¨Ēā¨°ā¨ĻāŠ‡ā¨Ļā¨žā¨°āŠ€ ā¨¨āŠ‚āŠ° ā¨Ŧā¨Ļā¨˛āŠ‹", + "privacy.direct.short": "ā¨¸ā¨ŋāŠąā¨§ā¨ž ā¨˛āŠ‹ā¨•ā¨žā¨‚ ā¨Ļā¨ž āŠ›ā¨ŋā¨•ā¨° ā¨•ā¨°āŠ‹", + "privacy.private.short": "ā¨¸ā¨ŋā¨°ā¨Ģā¨ŧ ā¨Ģā¨ŧā¨žā¨˛āŠ‹ā¨…ā¨°", "privacy.public.short": "ā¨œā¨¨ā¨¤ā¨•", "privacy_policy.title": "ā¨Ēā¨°ā¨ĻāŠ‡ā¨Ļā¨žā¨°āŠ€ ā¨¨āŠ€ā¨¤āŠ€", "refresh": "ā¨¤ā¨žā¨œā¨ŧā¨ž ā¨•ā¨°āŠ‹", "regeneration_indicator.label": "ā¨˛āŠ‹ā¨Ą ā¨šāŠ‹ ā¨°ā¨ŋā¨šā¨ž ā¨šāŠˆ...", "relative_time.full.just_now": "ā¨šāŠā¨ŖāŠ‡ ā¨šāŠ€", + "relative_time.just_now": "ā¨šāŠā¨ŖāŠ‡", + "relative_time.minutes": "{number}ā¨Žā¨ŋāŠ°", + "relative_time.seconds": "{number}ā¨¸", "relative_time.today": "ā¨…āŠąā¨œ", "reply_indicator.cancel": "ā¨°āŠąā¨Ļ ā¨•ā¨°āŠ‹", "report.block": "ā¨Ŧā¨˛ā¨žā¨•", + "report.categories.legal": "ā¨•ā¨¨āŠ‚āŠ°ā¨¨āŠ€", "report.categories.other": "ā¨Ŧā¨žā¨•āŠ€", - "report.categories.spam": "ā¨¸ā¨Ēā¨žā¨Ž", - "report.category.title_status": "ā¨¸āŠ°ā¨Ēā¨žā¨Ļā¨¨ā¨ž", + "report.categories.spam": "ā¨¸ā¨ĒāŠˆā¨Ž", + "report.category.title_account": "ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛", + "report.category.title_status": "ā¨ĒāŠ‹ā¨¸ā¨Ÿ", "report.close": "ā¨ŽāŠā¨•āŠ°ā¨Žā¨˛", "report.mute": "ā¨ŽāŠŒā¨¨ ā¨•ā¨°āŠ‹", "report.next": "ā¨…ā¨—ā¨˛āŠ€", - "report.placeholder": "Type or paste additional comments", - "report.submit": "Submit report", - "report.target": "Report {target}", + "report.placeholder": "ā¨ĩā¨§āŠ€ā¨• ā¨Ÿā¨ŋāŠąā¨Ēā¨ŖāŠ€ā¨†ā¨‚", + "report.reasons.dislike": "ā¨ŽāŠˆā¨¨āŠ‚āŠ° ā¨‡ā¨š ā¨Ēā¨¸āŠ°ā¨Ļ ā¨¨ā¨šāŠ€ā¨‚ ā¨šāŠˆ", + "report.reasons.spam": "ā¨‡ā¨š ā¨¸ā¨ĒāŠˆā¨Ž ā¨šāŠˆ", + "report.submit": "ā¨­āŠ‡ā¨œāŠ‹", + "report.target": "{target} ā¨°ā¨ŋā¨ĒāŠ‹ā¨°ā¨Ÿ", + "report.unfollow": "@{name} ā¨¨āŠ‚āŠ° ā¨…ā¨Ŗ-ā¨Ģā¨ŧā¨žā¨˛āŠ‹ ā¨•ā¨°āŠ‹", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "ā¨Ŧā¨žā¨•āŠ€", - "report_notification.categories.spam": "ā¨¸ā¨Ēā¨žā¨Ž", + "report_notification.categories.spam": "ā¨¸ā¨ĒāŠˆā¨Ž", + "report_notification.categories.violation": "ā¨¨ā¨ŋā¨¯ā¨Ž ā¨ĻāŠ€ ā¨‰ā¨˛āŠ°ā¨˜ā¨Ŗā¨ž", "search.placeholder": "ā¨–āŠ‹ā¨œāŠ‹", + "search_popout.quick_actions": "ā¨ĢāŠŒā¨°āŠ€ ā¨•ā¨žā¨°ā¨ĩā¨žā¨ˆā¨†ā¨‚", + "search_popout.specific_date": "ā¨–ā¨žā¨¸ ā¨¤ā¨žā¨°āŠ€ā¨–", + "search_popout.user": "ā¨ĩā¨°ā¨¤āŠ‹ā¨‚ā¨•ā¨žā¨°", + "search_results.accounts": "ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛", "search_results.all": "ā¨¸ā¨­", - "search_results.statuses": "Toots", + "search_results.hashtags": "ā¨šāŠˆā¨ļā¨ŸāŠˆā¨—", + "search_results.statuses": "ā¨ĒāŠ‹ā¨¸ā¨Ÿā¨žā¨‚", "server_banner.learn_more": "ā¨šāŠ‹ā¨° ā¨œā¨žā¨ŖāŠ‹", "sign_in_banner.create_account": "ā¨–ā¨žā¨¤ā¨ž ā¨Ŧā¨Ŗā¨žā¨“", - "sign_in_banner.sign_in": "Sign in", - "status.admin_status": "Open this status in the moderation interface", - "status.copy": "Copy link to status", - "status.delete": "ā¨Žā¨ŋā¨Ÿā¨žā¨“", + "sign_in_banner.sign_in": "ā¨˛ā¨žā¨—ā¨‡ā¨¨", + "status.admin_status": "", + "status.block": "@{name} ā¨‰āŠąā¨¤āŠ‡ ā¨Ēā¨žā¨ŦāŠ°ā¨ĻāŠ€ ā¨˛ā¨žā¨“", + "status.bookmark": "ā¨ŦāŠāŠąā¨•ā¨Žā¨žā¨°ā¨•", + "status.copy": "ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨˛ā¨ˆ ā¨˛ā¨ŋāŠ°ā¨• ā¨•ā¨žā¨ĒāŠ€ ā¨•ā¨°āŠ‹", + "status.delete": "ā¨šā¨Ÿā¨žā¨“", "status.edit": "ā¨¸āŠ‹ā¨§", + "status.edited": "{date} ā¨¨āŠ‚āŠ° ā¨¸āŠ‹ā¨§ā¨ŋā¨†", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", "status.embed": "ā¨ŽāŠœāŠā¨šāŠ‹", + "status.favourite": "ā¨Ēā¨¸āŠ°ā¨Ļ", + "status.history.created": "{name} ā¨¨āŠ‡ {date} ā¨¨āŠ‚āŠ° ā¨Ŧā¨Ŗā¨žā¨‡ā¨†", + "status.history.edited": "{name} ā¨¨āŠ‡ {date} ā¨¨āŠ‚āŠ° ā¨¸āŠ‹ā¨§ā¨ŋā¨†", "status.load_more": "ā¨šāŠ‹ā¨° ā¨Ļā¨ŋā¨–ā¨žā¨“", + "status.media.open": "ā¨–āŠ‹ā¨˛āŠā¨šā¨Ŗ ā¨˛ā¨ˆ ā¨•ā¨˛ā¨ŋāŠąā¨• ā¨•ā¨°āŠ‹", + "status.media.show": "ā¨ĩāŠ‡ā¨–ā¨žā¨‰ā¨Ŗ ā¨˛ā¨ˆ ā¨•ā¨˛ā¨ŋāŠąā¨• ā¨•ā¨°āŠ‹", + "status.mention": "@{name} ā¨Ļā¨ž āŠ›ā¨ŋā¨•ā¨°", "status.more": "ā¨šāŠ‹ā¨°", - "status.open": "Expand this status", - "status.pinned": "Pinned toot", + "status.open": "ā¨‡ā¨š ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨¨āŠ‚āŠ° ā¨ĢāŠˆā¨˛ā¨žā¨“", + "status.pin": "ā¨Ēā¨°āŠ‹ā¨Ģā¨žā¨ˆā¨˛ ā¨‰āŠąā¨¤āŠ‡ ā¨ŸāŠ°ā¨—āŠ‹", + "status.pinned": "ā¨ŸāŠ°ā¨—āŠ€ ā¨šāŠ‹ā¨ˆ ā¨ĒāŠ‹ā¨¸ā¨Ÿ", "status.read_more": "ā¨šāŠ‹ā¨° ā¨ĒāŠœāŠā¨šāŠ‹", "status.reblog": "ā¨ĩā¨§ā¨žā¨“", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.replied_to": "{name} ā¨¨āŠ‚āŠ° ā¨œā¨ĩā¨žā¨Ŧ ā¨Ļā¨ŋāŠąā¨¤ā¨ž", "status.reply": "ā¨œā¨ĩā¨žā¨Ŧ ā¨ĻāŠ‡ā¨ĩāŠ‹", + "status.replyAll": "ā¨Žā¨žā¨Žā¨˛āŠ‡ ā¨¨āŠ‚āŠ° ā¨œā¨ĩā¨žā¨Ŧ ā¨Ļā¨ŋā¨“", + "status.report": "@{name} ā¨ĻāŠ€ ā¨°ā¨ŋā¨ĒāŠ‹ā¨°ā¨Ÿ ā¨•ā¨°āŠ‹", + "status.sensitive_warning": "ā¨¸āŠ°ā¨ĩāŠ‡ā¨Ļā¨¨ā¨¸ā¨ŧāŠ€ā¨˛ ā¨¸ā¨ŽāŠąā¨—ā¨°āŠ€", "status.share": "ā¨¸ā¨žā¨‚ā¨ā¨ž ā¨•ā¨°āŠ‹", + "status.show_filter_reason": "ā¨•ā¨ŋā¨ĩāŠ‡ā¨‚ ā¨ĩāŠ€ ā¨ĩāŠ‡ā¨–ā¨žā¨“", "status.show_less": "ā¨˜āŠąā¨Ÿ ā¨Ļā¨ŋā¨–ā¨žā¨“", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", - "subscribed_languages.save": "ā¨¤ā¨Ŧā¨ĻāŠ€ā¨˛āŠ€ā¨†ā¨‚ ā¨¸ā¨žā¨‚ā¨­āŠ‹", - "tabs_bar.home": "ā¨ŽāŠāŠąā¨– ā¨ĒāŠ°ā¨¨ā¨ž", + "status.show_more": "ā¨šāŠ‹ā¨° ā¨Ļā¨ŋā¨–ā¨žā¨“", + "status.title.with_attachments": "{user} ā¨¨āŠ‡ {attachmentCount, plural,one {ā¨…ā¨ŸāŠˆā¨šā¨ŽāŠˆā¨‚ā¨Ÿ} other {{attachmentCount}ā¨…ā¨ŸāŠˆā¨šā¨ŽāŠˆā¨‚ā¨Ÿā¨žā¨‚}} ā¨ĒāŠ‹ā¨¸ā¨Ÿ ā¨•āŠ€ā¨¤āŠ€ā¨†ā¨‚", + "status.translate": "ā¨‰ā¨˛āŠąā¨Ĩā¨ž ā¨•ā¨°āŠ‹", + "subscribed_languages.save": "ā¨¤ā¨Ŧā¨ĻāŠ€ā¨˛āŠ€ā¨†ā¨‚ ā¨¸āŠ°ā¨­ā¨žā¨˛āŠ‹", + "tabs_bar.home": "ā¨˜ā¨°", "tabs_bar.notifications": "ā¨¸āŠ‚ā¨šā¨¨ā¨žā¨ĩā¨žā¨‚", - "timeline_hint.resources.followers": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨•", - "timeline_hint.resources.follows": "ā¨ĒāŠā¨°ā¨¸ā¨ŧāŠ°ā¨¸ā¨• ā¨Ŧā¨Ŗā¨¨ 'ā¨¤āŠ‡", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.followers": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹ā¨…ā¨°", + "timeline_hint.resources.follows": "ā¨Ģā¨ŧā¨žā¨˛āŠ‹", + "timeline_hint.resources.statuses": "ā¨ĒāŠ‚ā¨°ā¨žā¨ŖāŠ€ā¨†ā¨‚ ā¨ĒāŠ‹ā¨¸ā¨Ÿā¨žā¨‚", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", + "units.short.billion": "{count}ā¨ŋā¨Ŧ", + "units.short.million": "{count}ā¨Žā¨ŋ", + "units.short.thousand": "{count}ā¨šāŠ›ā¨žā¨°", + "upload_form.audio_description": "ā¨ŦāŠ‹ā¨˛ā¨ŧāŠ‡ ā¨œā¨žā¨‚ ā¨¸āŠā¨Ŗā¨¨ ā¨ĩā¨ŋāŠąā¨š ā¨ŽāŠā¨ļā¨•ā¨ŋā¨˛ ā¨ĩā¨žā¨˛āŠ‡ ā¨˛āŠ‹ā¨•ā¨žā¨‚ ā¨˛ā¨ˆ ā¨ĩāŠ‡ā¨°ā¨ĩāŠ‡", + "upload_form.description": "ā¨…āŠ°ā¨¨āŠā¨šāŠ‡ ā¨œā¨žā¨‚ ā¨ĻāŠ‡ā¨–ā¨Ŗ ā¨˛ā¨ˆ ā¨ŽāŠā¨ļā¨•ā¨˛ ā¨ĩā¨žā¨˛āŠ‡ ā¨˛āŠ‹ā¨•ā¨žā¨‚ ā¨˛ā¨ˆ ā¨ĩāŠ‡ā¨°ā¨ĩāŠ‡", "upload_form.edit": "ā¨¸āŠ‹ā¨§", - "upload_form.undo": "ā¨Žā¨ŋā¨Ÿā¨žā¨“", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.undo": "ā¨šā¨Ÿā¨žā¨“", + "upload_form.video_description": "ā¨ŦāŠ‹ā¨˛ā¨ŧāŠ‡, ā¨¸āŠā¨Ŗā¨¨ ā¨ĩā¨ŋāŠąā¨š ā¨ŽāŠā¨ļā¨•ā¨ŋā¨˛, ā¨…āŠ°ā¨¨āŠā¨šāŠ‡ ā¨œā¨žā¨‚ ā¨˜āŠąā¨Ÿ ā¨¨ā¨ŋā¨—āŠā¨šā¨ž ā¨ĩā¨žā¨˛āŠ‡ ā¨˛āŠ‹ā¨•ā¨žā¨‚ ā¨˛ā¨ˆ ā¨ĩāŠ‡ā¨°ā¨ĩā¨ž", "upload_modal.apply": "ā¨˛ā¨žā¨—āŠ‚ ā¨•ā¨°āŠ‹", + "upload_modal.applying": "ā¨˛ā¨žā¨—āŠ‚ ā¨•āŠ€ā¨¤ā¨ž ā¨œā¨ž ā¨°ā¨ŋā¨šā¨ž ā¨šāŠˆâ€Ļ", "upload_modal.choose_image": "ā¨¤ā¨¸ā¨ĩāŠ€ā¨° ā¨šāŠā¨ŖāŠ‹", "upload_modal.edit_media": "ā¨ŽāŠ€ā¨ĄāŠ€ā¨† ā¨¸āŠ‹ā¨§āŠ‹", - "upload_progress.label": "Uploadingâ€Ļ", - "upload_progress.processing": "ā¨•ā¨žā¨°ā¨œ ā¨…ā¨§āŠ€ā¨¨ ā¨šāŠˆâ€Ļ", + "upload_progress.label": "ā¨…āŠąā¨Ēā¨˛āŠ‹ā¨Ą ā¨•āŠ€ā¨¤ā¨ž ā¨œā¨ž ā¨°ā¨ŋā¨šā¨ž ā¨šāŠˆ...", + "upload_progress.processing": "ā¨•ā¨žā¨°ā¨ĩā¨žā¨ˆ ā¨šāŠąā¨˛ ā¨°ā¨šāŠ€ ā¨šāŠˆâ€Ļ", "video.exit_fullscreen": "ā¨ĒāŠ‚ā¨°āŠ€ ā¨¸ā¨•ā¨°āŠ€ā¨¨ ā¨ĩā¨ŋāŠąā¨šāŠ‹ā¨‚ ā¨Ŧā¨žā¨šā¨° ā¨¨ā¨ŋā¨•ā¨˛āŠ‹", "video.fullscreen": "ā¨ĒāŠ‚ā¨°āŠ€ ā¨¸ā¨•ā¨°āŠ€ā¨¨", - "video.pause": "ā¨°ā¨šā¨žā¨‰", + "video.pause": "ā¨ ā¨šā¨ŋā¨°āŠ‹", "video.play": "ā¨šā¨˛ā¨žā¨“" } diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index dc77f8f4e02e56..35dbc6661d857d 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -32,17 +32,17 @@ "account.featured_tags.last_status_never": "Brak postÃŗw", "account.featured_tags.title": "Polecane hasztagi {name}", "account.follow": "Obserwuj", + "account.follow_back": "Obserwuj wzajemnie", "account.followers": "Obserwujący", "account.followers.empty": "Nikt jeszcze nie obserwuje tego uÅŧytkownika.", "account.followers_counter": "{count, plural, one {{counter} obserwujący} few {{counter} obserwujących} many {{counter} obserwujących} other {{counter} obserwujących}}", "account.following": "Obserwowani", "account.following_counter": "{count, plural, one {{counter} obserwowany} few {{counter} obserwowanych} many {{counter} obserwowanych} other {{counter} obserwowanych}}", "account.follows.empty": "Ten uÅŧytkownik nie obserwuje jeszcze nikogo.", - "account.follows_you": "Obserwuje Cię", "account.go_to_profile": "PrzejdÅē do profilu", "account.hide_reblogs": "Ukryj podbicia od @{name}", "account.in_memoriam": "Ku pamięci.", - "account.joined_short": "Dołączony", + "account.joined_short": "Dołączył(a)", "account.languages": "Zmień subskrybowane języki", "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}", "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto moÅŧe go obserwować.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Wycisz powiadomienia", "account.mute_short": "Wycisz", "account.muted": "Wyciszony", + "account.mutual": "Przyjaciele", "account.no_bio": "Brak opisu.", "account.open_original_page": "OtwÃŗrz stronę oryginalną", "account.posts": "Wpisy", @@ -491,7 +492,7 @@ "onboarding.profile.save_and_continue": "Zapisz i kontynuuj", "onboarding.profile.title": "Ustawienia profilu", "onboarding.profile.upload_avatar": "Dodaj zdjęcie profilowe", - "onboarding.profile.upload_header": "Dodaj zdjęcie nagłÃŗwkowe", + "onboarding.profile.upload_header": "Dodaj banner profilu", "onboarding.share.lead": "Daj znać ludziom, jak mogą cię znaleÅēć na Mastodonie!", "onboarding.share.message": "Jestem {username} na #Mastodon! ŚledÅē mnie tutaj {url}", "onboarding.share.next_steps": "MoÅŧliwe dalsze kroki:", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index e7975dd76e40f9..b8e18e1229a4b9 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Sem publicaçÃĩes", "account.featured_tags.title": "Hashtags em destaque de {name}", "account.follow": "Seguir", + "account.follow_back": "Seguir de volta", "account.followers": "Seguidores", "account.followers.empty": "Nada aqui.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", "account.following": "Seguindo", "account.following_counter": "{count, plural, one {segue {counter}} other {segue {counter}}}", "account.follows.empty": "Nada aqui.", - "account.follows_you": "te segue", "account.go_to_profile": "Ir ao perfil", "account.hide_reblogs": "Ocultar boosts de @{name}", "account.in_memoriam": "Em memÃŗria.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silenciar notificaçÃĩes", "account.mute_short": "Silenciar", "account.muted": "Silenciado", + "account.mutual": "MÃētuo", "account.no_bio": "Nenhuma descriçÃŖo fornecida.", "account.open_original_page": "Abrir a pÃĄgina original", "account.posts": "Toots", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index d5055b0dc53b03..a6d0ffee9a5334 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Sem publicaçÃĩes", "account.featured_tags.title": "#Etiquetas destacadas por {name}", "account.follow": "Seguir", + "account.follow_back": "Seguir de volta", "account.followers": "Seguidores", "account.followers.empty": "Ainda ninguÊm segue este utilizador.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", "account.following": "A seguir", "account.following_counter": "{count, plural, other {A seguir {counter}}}", "account.follows.empty": "Este utilizador ainda nÃŖo segue ninguÊm.", - "account.follows_you": "Segue-te", "account.go_to_profile": "Ir para o perfil", "account.hide_reblogs": "Esconder partilhas de @{name}", "account.in_memoriam": "Em MemÃŗria.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Silenciar notificaçÃĩes", "account.mute_short": "Silenciar", "account.muted": "Silenciada", + "account.mutual": "MÃētuo", "account.no_bio": "Nenhuma descriçÃŖo fornecida.", "account.open_original_page": "Abrir a pÃĄgina original", "account.posts": "PublicaçÃĩes", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 5355f9935aee41..88dbfa4b8ec6ed 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -36,7 +36,6 @@ "account.following": "Urmăriți", "account.following_counter": "{count, plural, one {Un abonament} few {{counter} abonamente} other {{counter} de abonamente}}", "account.follows.empty": "Momentan acest utilizator nu are niciun abonament.", - "account.follows_you": "Este abonat la tine", "account.go_to_profile": "Mergi la profil", "account.hide_reblogs": "Ascunde distribuirile de la @{name}", "account.joined_short": "Înscris", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index f0c48236b916fd..a8ff90cc003b1b 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "НĐĩŅ‚ ĐŋĐžŅŅ‚Ов", "account.featured_tags.title": "ИСйŅ€Đ°ĐŊĐŊŅ‹Đĩ Ņ…ŅŅˆŅ‚ĐĩĐŗи {name}", "account.follow": "ПодĐŋиŅĐ°Ņ‚ŅŒŅŅ", + "account.follow_back": "ПодĐŋиŅĐ°Ņ‚ŅŒŅŅ в ĐžŅ‚вĐĩŅ‚", "account.followers": "ПодĐŋиŅŅ‡Đ¸Đēи", "account.followers.empty": "На ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ĐŋĐžĐēĐ° ĐŊиĐēŅ‚Đž ĐŊĐĩ ĐŋОдĐŋиŅĐ°ĐŊ.", "account.followers_counter": "{count, plural, one {{counter} ĐŋОдĐŋиŅŅ‡Đ¸Đē} many {{counter} ĐŋОдĐŋиŅŅ‡Đ¸ĐēОв} other {{counter} ĐŋОдĐŋиŅŅ‡Đ¸ĐēĐ°}}", "account.following": "ПодĐŋиŅĐēи", "account.following_counter": "{count, plural, one {{counter} ĐŋОдĐŋиŅĐēĐ°} many {{counter} ĐŋОдĐŋиŅĐžĐē} other {{counter} ĐŋОдĐŋиŅĐēи}}", "account.follows.empty": "Đ­Ņ‚ĐžŅ‚ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ ĐŋĐžĐēĐ° ĐŊи ĐŊĐ° ĐēĐžĐŗĐž ĐŊĐĩ ĐŋОдĐŋиŅĐ°ĐģŅŅ.", - "account.follows_you": "ПодĐŋиŅĐ°ĐŊ(Đ°) ĐŊĐ° ваŅ", "account.go_to_profile": "ПĐĩŅ€ĐĩĐšŅ‚и Đē ĐŋŅ€ĐžŅ„иĐģŅŽ", "account.hide_reblogs": "ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ ĐŋŅ€ĐžĐ´Đ˛Đ¸ĐļĐĩĐŊиŅ ĐžŅ‚ @{name}", "account.in_memoriam": "В ПаĐŧŅŅ‚и.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ", "account.mute_short": "НĐĩĐŧОК", "account.muted": "ИĐŗĐŊĐžŅ€Đ¸Ņ€ŅƒĐĩŅ‚ŅŅ", + "account.mutual": "ВзаиĐŧĐŊĐž", "account.no_bio": "ОĐŋиŅĐ°ĐŊиĐĩ ĐŊĐĩ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авĐģĐĩĐŊĐž.", "account.open_original_page": "ОŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ иŅŅ…ОдĐŊŅƒŅŽ ŅŅ‚Ņ€Đ°ĐŊиŅ†Ņƒ", "account.posts": "ПоŅŅ‚Ņ‹", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 59379343b9cd59..051ec5d6f80f16 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -36,7 +36,6 @@ "account.following": "ā¤…ā¤¨āĨā¤¸ā¤°ā¤¤ā¤ŋ", "account.following_counter": "{count, plural, one {{counter} ā¤…ā¤¨āĨā¤¸āĨƒā¤¤ā¤ƒ} two {{counter} ā¤…ā¤¨āĨā¤¸āĨƒā¤¤āĨŒ} other {{counter} ā¤…ā¤¨āĨā¤¸āĨƒā¤¤ā¤žā¤ƒ}}", "account.follows.empty": "ā¤¨ ā¤•āĨ‹ā¤Ŋā¤ĒāĨā¤¯ā¤¨āĨā¤¸āĨƒā¤¤āĨ‹ ā¤ĩā¤°āĨā¤¤ā¤¤āĨ‡", - "account.follows_you": "ā¤¤āĨā¤ĩā¤žā¤Žā¤¨āĨā¤¸ā¤°ā¤¤ā¤ŋ", "account.go_to_profile": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤¯ā¤ŋā¤˛ā¤‚ ā¤—ā¤šāĨā¤›", "account.hide_reblogs": "@{name} ā¤Žā¤ŋā¤¤āĨā¤°ā¤¸āĨā¤¯ ā¤ĒāĨā¤°ā¤•ā¤žā¤ļā¤¨ā¤žā¤¨ā¤ŋ ā¤›ā¤ŋā¤ĻāĨā¤¯ā¤¨āĨā¤¤ā¤žā¤ŽāĨ", "account.in_memoriam": "ā¤¸āĨā¤ŽāĨƒā¤¤āĨā¤¯ā¤žā¤ŽāĨ", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 7f29525e734e9a..89e951f77d37b0 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -30,7 +30,6 @@ "account.following": "Sighende", "account.following_counter": "{count, plural, one {Sighende a {counter}} other {Sighende a {counter}}}", "account.follows.empty": "Custa persone non sighit ancora a nemos.", - "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", "account.in_memoriam": "In memoriam.", "account.joined_short": "At aderidu", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 28dac9c2a28059..0378cd2926e938 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -35,7 +35,6 @@ "account.following": "Follaein", "account.following_counter": "{count, plural, one {{counter} Follaein} other {{counter} Follaein}}", "account.follows.empty": "This uiser disnae follae oniebody yit.", - "account.follows_you": "Follaes ye", "account.go_to_profile": "Gang tae profile", "account.hide_reblogs": "Dinnae shaw heezes fae @{name}", "account.joined_short": "Jynt", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 835f699b82c42f..c2d2a41cc50808 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -26,7 +26,6 @@ "account.following": "āļ…āļąāˇ”āļœāļ¸āļą", "account.following_counter": "{count, plural, one {āļ…āļąāˇ”āļœāļ¸āļą {counter}} other {āļ…āļąāˇ”āļœāļ¸āļą {counter}}}", "account.follows.empty": "āļ­āˇ€āļ¸āļ­āˇŠ āļšāˇ’āˇƒāˇ’āˇ€āˇ™āļšāˇŠ āļ…āļąāˇ”āļœāļ¸āļąāļē āļąāˇœāļšāļģāļēāˇ’.", - "account.follows_you": "āļ”āļļāˇ€ āļ…āļąāˇ”āļœāļ¸āļąāļē āļšāļģāļēāˇ’", "account.go_to_profile": "āļ´āˇāļ­āˇ’āļšāļŠāļ§ āļēāļąāˇŠāļą", "account.joined_short": "āļ‘āļšāˇŠ āˇ€āˇ– āļ¯āˇ’āļąāļē", "account.link_verified_on": "āļ¸āˇ™āļ¸ āˇƒāļļāˇāļŗāˇ’āļēāˇš āļ…āļēāˇ’āļ­āˇ’āļē {date} āļ¯āˇ“ āļ´āļģāˇ“āļšāˇŠâ€āˇ‚āˇ āļšāˇ™āļģāˇ’āļĢāˇ’", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index c4ce6f8cfdbabe..3e41a2035a0046 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -21,7 +21,7 @@ "account.blocked": "BlokovanÃŊ/ÃĄ", "account.browse_more_on_origin_server": "PrehÄžadÃĄvaj viac na pôvodnom profile", "account.cancel_follow_request": "ZruÅĄ ÅžiadosÅĨ o sledovanie", - "account.copy": "Skopíruj odkaz pre profil", + "account.copy": "Skopíruj odkaz na profil", "account.direct": "Spomeň @{name} sÃēkromne", "account.disable_notifications": "Prestaň mi oznamovaÅĨ, keď mÃĄ @{name} príspevky", "account.domain_blocked": "DomÊna skrytÃĄ", @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "ÅŊiadne príspevky", "account.featured_tags.title": "OdporÃēčanÊ hashtagy pouŞívateÄža {name}", "account.follow": "Sleduj", + "account.follow_back": "Nasleduj späÅĨ", "account.followers": "Sledovatelia", "account.followers.empty": "Tohto pouŞívateÄža eÅĄte nikto nenasleduje.", "account.followers_counter": "{count, plural, one {{counter} SledujÃēci} few {{counter} SledujÃēci} many {{counter} SledujÃēcich} other {{counter} SledujÃēcich}}", "account.following": "Sledujem", "account.following_counter": "{count, plural, one {{counter} SledovanÃŊch} other {{counter} SledujÃēcich}}", "account.follows.empty": "Tento pouŞívateÄž eÅĄte nikoho nesleduje.", - "account.follows_you": "Sleduje ÅĨa", "account.go_to_profile": "Prejdi na profil", "account.hide_reblogs": "Skry zdieÄžania od @{name}", "account.in_memoriam": "In Memoriam.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "StÃ­ÅĄ oznÃĄmenia", "account.mute_short": "StÃ­ÅĄ", "account.muted": "StÃ­ÅĄenÃŊ", + "account.mutual": "SpoločnÊ", "account.no_bio": "Nie je uvedenÃŊ Åžiadny popis.", "account.open_original_page": "Otvor pôvodnÃē strÃĄnku", "account.posts": "Príspevky", @@ -224,6 +225,7 @@ "emoji_button.search_results": "VÃŊsledky hÄžadania", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", + "empty_column.account_hides_collections": "Tento uŞívateÄž si zvolil nesprístupniÅĨ tÃēto informÃĄciu", "empty_column.account_suspended": "Účet bol pozastavenÃŊ", "empty_column.account_timeline": "Nie sÃē tu Åžiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupnÃŊ", @@ -487,6 +489,7 @@ "onboarding.profile.note": "O tebe", "onboarding.profile.note_hint": "MôŞeÅĄ @spomenÃēÅĨ inÃŊch Äžudí, alebo #haÅĄtagyâ€Ļ", "onboarding.profile.save_and_continue": "UloÅž a pokračuj", + "onboarding.profile.title": "Nastavenie profilu", "onboarding.profile.upload_avatar": "Nahraj profilovÃŊ obrÃĄzok", "onboarding.profile.upload_header": "Nahraj profilovÊ zÃĄhlavie", "onboarding.share.lead": "Daj Äžudom vedieÅĨ, ako ÅĨa môŞu na Mastodone nÃĄjsÅĨ!", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 4ef2681f9a8368..b3998b91104263 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Ni objav", "account.featured_tags.title": "Izpostavljeni ključniki {name}", "account.follow": "Sledi", + "account.follow_back": "Sledi nazaj", "account.followers": "Sledilci", "account.followers.empty": "Nihče ne sledi temu uporabniku.", "account.followers_counter": "{count, plural, one {ima {counter} sledilca} two {ima {counter} sledilca} few {ima {counter} sledilce} other {ima {counter} sledilcev}}", "account.following": "Sledim", "account.following_counter": "{count, plural, one {sledi {count} osebi} two {sledi {count} osebama} few {sledi {count} osebam} other {sledi {count} osebam}}", "account.follows.empty": "Ta uporabnik ÅĄe ne sledi nikomur.", - "account.follows_you": "Vam sledi", "account.go_to_profile": "Pojdi na profil", "account.hide_reblogs": "Skrij izpostavitve od @{name}", "account.in_memoriam": "V spomin.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "UtiÅĄaj obvestila", "account.mute_short": "UtiÅĄaj", "account.muted": "UtiÅĄan", + "account.mutual": "Vzajemno", "account.no_bio": "Ni opisa.", "account.open_original_page": "Odpri izvirno stran", "account.posts": "Objave", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 710224e1cbb43f..f45266c845819b 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Pa postime", "account.featured_tags.title": "HashtagÃĢ tÃĢ zgjedhur tÃĢ {name}", "account.follow": "Ndiqeni", + "account.follow_back": "Ndiqe gjithashtu", "account.followers": "NdjekÃĢs", "account.followers.empty": "KÃĢtÃĢ pÃĢrdorues ende s’e ndjek kush.", "account.followers_counter": "{count, plural, one {{counter} NdjekÃĢs} other {{counter} NdjekÃĢs}}", "account.following": "Ndjekje", "account.following_counter": "{count, plural, one {{counter} i Ndjekur} other {{counter} tÃĢ Ndjekur}}", "account.follows.empty": "Ky pÃĢrdorues ende s’ndjek kÃĢnd.", - "account.follows_you": "Ju ndjek", "account.go_to_profile": "Kalo te profili", "account.hide_reblogs": "Fshih pÃĢrforcime nga @{name}", "account.in_memoriam": "In Memoriam.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Mos shfaq njoftime", "account.mute_short": "Mos i shfaq", "account.muted": "Heshtuar", + "account.mutual": "Reciproke", "account.no_bio": "S’u dha pÃĢrshkrim.", "account.open_original_page": "Hap faqen origjinale", "account.posts": "Mesazhe", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 35bb8f99297125..77c262e9571293 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Nema objava", "account.featured_tags.title": "Istaknute heÅĄ oznake korisnika {name}", "account.follow": "Prati", + "account.follow_back": "Uzvrati praćenje", "account.followers": "Pratioci", "account.followers.empty": "JoÅĄ uvek niko ne prati ovog korisnika.", "account.followers_counter": "{count, plural, one {{counter} pratilac} few {{counter} pratioca} other {{counter} pratilaca}}", "account.following": "Prati", "account.following_counter": "{count, plural, one {{counter} prati} few {{counter} prati} other {{counter} prati}}", "account.follows.empty": "Ovaj korisnik joÅĄ uvek nikog ne prati.", - "account.follows_you": "Prati vas", "account.go_to_profile": "Idi na profil", "account.hide_reblogs": "Sakrij podrÅžavanja @{name}", "account.in_memoriam": "U znak sećanja na.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Isključi obaveÅĄtenja", "account.mute_short": "Isključi", "account.muted": "Ignorisan", + "account.mutual": "Zajednički", "account.no_bio": "Nema opisa.", "account.open_original_page": "Otvori originalnu stranicu", "account.posts": "Objave", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 552c04d13f658c..85e7567bf42166 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "НĐĩĐŧĐ° ОйŅ˜Đ°Đ˛Đ°", "account.featured_tags.title": "ИŅŅ‚Đ°ĐēĐŊŅƒŅ‚Đĩ Ņ…ĐĩŅˆ ОСĐŊĐ°ĐēĐĩ ĐēĐžŅ€Đ¸ŅĐŊиĐēĐ° {name}", "account.follow": "ПŅ€Đ°Ņ‚и", + "account.follow_back": "ĐŖСвŅ€Đ°Ņ‚и ĐŋŅ€Đ°Ņ›ĐĩŅšĐĩ", "account.followers": "ПŅ€Đ°Ņ‚иОŅ†Đ¸", "account.followers.empty": "ЈОŅˆ ŅƒĐ˛ĐĩĐē ĐŊиĐēĐž ĐŊĐĩ ĐŋŅ€Đ°Ņ‚и ОвОĐŗ ĐēĐžŅ€Đ¸ŅĐŊиĐēĐ°.", "account.followers_counter": "{count, plural, one {{counter} ĐŋŅ€Đ°Ņ‚иĐģĐ°Ņ†} few {{counter} ĐŋŅ€Đ°Ņ‚иОŅ†Đ°} other {{counter} ĐŋŅ€Đ°Ņ‚иĐģĐ°Ņ†Đ°}}", "account.following": "ПŅ€Đ°Ņ‚и", "account.following_counter": "{count, plural, one {{counter} ĐŋŅ€Đ°Ņ‚и} few {{counter} ĐŋŅ€Đ°Ņ‚и} other {{counter} ĐŋŅ€Đ°Ņ‚и}}", "account.follows.empty": "ОваŅ˜ ĐēĐžŅ€Đ¸ŅĐŊиĐē Ņ˜ĐžŅˆ ŅƒĐ˛ĐĩĐē ĐŊиĐēĐžĐŗ ĐŊĐĩ ĐŋŅ€Đ°Ņ‚и.", - "account.follows_you": "ПŅ€Đ°Ņ‚и ваŅ", "account.go_to_profile": "Иди ĐŊĐ° ĐŋŅ€ĐžŅ„иĐģ", "account.hide_reblogs": "ĐĄĐ°ĐēŅ€Đ¸Ņ˜ ĐŋОдŅ€ĐļаваŅšĐ° Од @{name}", "account.in_memoriam": "ĐŖ СĐŊĐ°Đē ŅĐĩŅ›Đ°ŅšĐ° ĐŊĐ°.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ИŅĐēŅ™ŅƒŅ‡Đ¸ ОйавĐĩŅˆŅ‚ĐĩŅšĐ°", "account.mute_short": "ИŅĐēŅ™ŅƒŅ‡Đ¸", "account.muted": "ИĐŗĐŊĐžŅ€Đ¸ŅĐ°ĐŊ", + "account.mutual": "ЗаŅ˜ĐĩĐ´ĐŊиŅ‡Đēи", "account.no_bio": "НĐĩĐŧĐ° ĐžĐŋиŅĐ°.", "account.open_original_page": "ОŅ‚вОŅ€Đ¸ ĐžŅ€Đ¸ĐŗиĐŊĐ°ĐģĐŊŅƒ ŅŅ‚Ņ€Đ°ĐŊиŅ†Ņƒ", "account.posts": "ОбŅ˜Đ°Đ˛Đĩ", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 8a07da72d8eaa5..d3ca776bd9e5cb 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "Inga inlägg", "account.featured_tags.title": "{name}s utvalda hashtaggar", "account.follow": "FÃļlj", + "account.follow_back": "FÃļlj tillbaka", "account.followers": "FÃļljare", "account.followers.empty": "Ingen fÃļljer denna användare än.", "account.followers_counter": "{count, plural, one {{counter} fÃļljare} other {{counter} fÃļljare}}", "account.following": "FÃļljer", "account.following_counter": "{count, plural, one {{counter} fÃļljd} other {{counter} fÃļljda}}", "account.follows.empty": "Denna användare fÃļljer inte nÃĨgon än.", - "account.follows_you": "FÃļljer dig", "account.go_to_profile": "GÃĨ till profilen", "account.hide_reblogs": "DÃļlj boostar frÃĨn @{name}", "account.in_memoriam": "Till minne av.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Stäng av aviseringsljud", "account.mute_short": "Tysta", "account.muted": "Tystad", + "account.mutual": "Ömsesidig", "account.no_bio": "Ingen beskrivning angiven.", "account.open_original_page": "Öppna den ursprungliga sidan", "account.posts": "Inlägg", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index ce9042e62b91c2..5290e13ff4cdfa 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -10,6 +10,7 @@ "account.badges.group": "āŽ•ā¯āŽ´ā¯", "account.block": "@{name} -āŽāŽ¤ā¯ āŽ¤āŽŸā¯", "account.block_domain": "{domain} āŽ¯āŽŋāŽ˛ā¯ āŽ‡āŽ°ā¯āŽ¨ā¯āŽ¤ā¯ āŽĩāŽ°ā¯āŽŽā¯ āŽŽāŽ˛ā¯āŽ˛āŽžāŽĩāŽąā¯āŽąā¯ˆāŽ¯ā¯āŽŽā¯ āŽŽāŽąā¯ˆ", + "account.block_short": "āŽ¤āŽŸā¯", "account.blocked": "āŽŽā¯āŽŸāŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸāŽ¤ā¯", "account.browse_more_on_origin_server": "āŽŽā¯‡āŽ˛ā¯āŽŽā¯ āŽ‰āŽ˛āŽžāŽĩ āŽšā¯āŽ¯āŽĩāŽŋāŽĩāŽ°āŽ¤ā¯āŽ¤āŽŋāŽąā¯āŽ•ā¯āŽšā¯ āŽšā¯†āŽ˛ā¯āŽ•", "account.cancel_follow_request": "Withdraw follow request", @@ -18,21 +19,26 @@ "account.edit_profile": "āŽšā¯āŽ¯āŽĩāŽŋāŽĩāŽ°āŽ¤ā¯āŽ¤ā¯ˆ āŽŽāŽžāŽąā¯āŽąā¯", "account.enable_notifications": "@{name} āŽĒāŽ¤āŽŋāŽĩāŽŋāŽŸā¯āŽŸāŽ˛ā¯ āŽŽāŽŠāŽ•ā¯āŽ•ā¯āŽ¤ā¯ āŽ¤ā¯†āŽ°āŽŋāŽ¯āŽĒā¯āŽĒāŽŸā¯āŽ¤ā¯āŽ¤āŽĩā¯āŽŽā¯", "account.endorse": "āŽšā¯āŽ¯āŽĩāŽŋāŽĩāŽ°āŽ¤ā¯āŽ¤āŽŋāŽ˛ā¯ āŽĩā¯†āŽŗāŽŋāŽĒā¯āŽĒāŽŸā¯āŽ¤ā¯āŽ¤ā¯", + "account.featured_tags.last_status_never": "āŽ‡āŽŸā¯āŽ•ā¯ˆāŽ•āŽŗā¯ āŽ‡āŽ˛ā¯āŽ˛ā¯ˆ", "account.follow": "āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°ā¯", + "account.follow_back": "āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°ā¯", "account.followers": "āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°ā¯āŽĒāŽĩāŽ°ā¯āŽ•āŽŗā¯", "account.followers.empty": "āŽ‡āŽ¤ā¯āŽĩāŽ°ā¯ˆ āŽ¯āŽžāŽ°ā¯āŽŽā¯ āŽ‡āŽ¨ā¯āŽ¤ āŽĒāŽ¯āŽŠāŽ°ā¯ˆāŽĒā¯ āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°āŽĩāŽŋāŽ˛ā¯āŽ˛ā¯ˆ.", "account.followers_counter": "{count, plural, one {{counter} āŽĩāŽžāŽšāŽ•āŽ°ā¯} other {{counter} āŽĩāŽžāŽšāŽ•āŽ°ā¯āŽ•āŽŗā¯}}", "account.following": "āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°ā¯āŽŽā¯", "account.following_counter": "{count, plural,one {{counter} āŽšāŽ¨ā¯āŽ¤āŽž} other {{counter} āŽšāŽ¨ā¯āŽ¤āŽžāŽ•ā¯āŽ•āŽŗā¯}}", "account.follows.empty": "āŽ‡āŽ¨ā¯āŽ¤ āŽĒāŽ¯āŽŠāŽ°ā¯ āŽ‡āŽ¤ā¯āŽĩāŽ°ā¯ˆ āŽ¯āŽžāŽ°ā¯ˆāŽ¯ā¯āŽŽā¯ āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°āŽĩāŽŋāŽ˛ā¯āŽ˛ā¯ˆ.", - "account.follows_you": "āŽ‰āŽ™ā¯āŽ•āŽŗā¯ˆāŽĒā¯ āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°ā¯āŽ•āŽŋāŽąāŽžāŽ°ā¯", + "account.go_to_profile": "āŽšā¯āŽ¯āŽĩāŽŋāŽĩāŽ°āŽ¤ā¯āŽ¤āŽŋāŽąā¯āŽ•ā¯āŽšā¯ āŽšā¯†āŽ˛ā¯āŽ˛āŽĩā¯āŽŽā¯", "account.hide_reblogs": "āŽ‡āŽ°ā¯āŽ¨ā¯āŽ¤ā¯ āŽŠāŽ•ā¯āŽ•āŽŋāŽ¯āŽžāŽ• āŽŽāŽąā¯ˆ @{name}", "account.link_verified_on": "āŽ‡āŽ¨ā¯āŽ¤ āŽ‡āŽŖā¯ˆāŽĒā¯āŽĒā¯ˆ āŽ‰āŽ°āŽŋāŽŽā¯ˆāŽ¯āŽžāŽŗāŽ°ā¯ āŽšāŽ°āŽŋāŽĒāŽžāŽ°ā¯āŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸāŽ¤ā¯ {date}", "account.locked_info": "āŽ‡āŽ¨ā¯āŽ¤āŽ•ā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯ āŽ¤āŽŠāŽŋāŽ¯ā¯āŽ°āŽŋāŽŽā¯ˆ āŽ¨āŽŋāŽ˛ā¯ˆ āŽĒā¯‚āŽŸā¯āŽŸāŽĒā¯āŽĒāŽŸā¯āŽŸā¯āŽŗā¯āŽŗāŽ¤ā¯. āŽ…āŽĩāŽ°ā¯āŽ•āŽŗā¯ˆāŽĒā¯ āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ°ā¯āŽĒāŽĩāŽ°ā¯ āŽ¯āŽžāŽ°ā¯ āŽŽāŽŠā¯āŽĒāŽ¤ā¯ˆ āŽ‰āŽ°āŽŋāŽŽā¯ˆāŽ¯āŽžāŽŗāŽ°ā¯ āŽ•ā¯ˆāŽŽā¯āŽąā¯ˆāŽ¯āŽžāŽ• āŽŽāŽ¤āŽŋāŽĒā¯āŽĒāŽžāŽ¯ā¯āŽĩā¯ āŽšā¯†āŽ¯ā¯āŽ•āŽŋāŽąāŽžāŽ°ā¯.", "account.media": "āŽŠāŽŸāŽ•āŽ™ā¯āŽ•āŽŗā¯", "account.mention": "āŽ•ā¯āŽąāŽŋāŽĒā¯āŽĒāŽŋāŽŸā¯ @{name}", "account.mute": "āŽŠāŽŽā¯ˆāŽ¯āŽžāŽŠ @{name}", + "account.mute_notifications_short": "āŽ…āŽąāŽŋāŽĩāŽŋāŽĒā¯āŽĒā¯āŽ•āŽŗā¯ˆ āŽ’āŽ˛āŽŋāŽ¯āŽŸāŽ•ā¯āŽ•ā¯", + "account.mute_short": "āŽ…āŽŽā¯ˆāŽ¤āŽŋāŽ¯āŽžāŽ•ā¯āŽ•ā¯", "account.muted": "āŽŽā¯āŽŸāŽ•ā¯āŽ•āŽŋāŽ¯āŽ¤ā¯", + "account.no_bio": "āŽĩāŽŋāŽŗāŽ•ā¯āŽ•āŽŽā¯ āŽŽāŽ¤ā¯āŽĩā¯āŽŽā¯ āŽĩāŽ´āŽ™ā¯āŽ•āŽĒā¯āŽĒāŽŸāŽĩāŽŋāŽ˛ā¯āŽ˛ā¯ˆ.", "account.posts": "āŽŸā¯‚āŽŸā¯āŽŸā¯āŽ•āŽŗā¯", "account.posts_with_replies": "Toots āŽŽāŽąā¯āŽąā¯āŽŽā¯ āŽĒāŽ¤āŽŋāŽ˛ā¯āŽ•āŽŗā¯", "account.report": "@{name} -āŽāŽĒā¯ āŽĒā¯āŽ•āŽžāŽ°āŽŗāŽŋ", @@ -62,15 +68,29 @@ "audio.hide": "āŽ†āŽŸāŽŋāŽ¯ā¯‹āŽĩā¯ˆ āŽŽāŽąā¯ˆ", "autosuggest_hashtag.per_week": "āŽ’āŽĩā¯āŽĩā¯ŠāŽ°ā¯ āŽĩāŽžāŽ°āŽŽā¯ {count}", "boost_modal.combo": "āŽ¨ā¯€āŽ™ā¯āŽ•āŽŗā¯ āŽ‡āŽ¤ā¯ˆ āŽ…āŽŸā¯āŽ¤ā¯āŽ¤āŽŽā¯āŽąā¯ˆ āŽ¤āŽĩāŽŋāŽ°ā¯āŽ•ā¯āŽ• {combo} āŽĩā¯ˆ āŽ…āŽ´ā¯āŽ¤ā¯āŽ¤āŽĩā¯āŽŽā¯", + "bundle_column_error.error.title": "āŽ…āŽŸāŽŸā¯‡!", + "bundle_column_error.network.body": "āŽ‡āŽ¨ā¯āŽ¤āŽĒā¯ āŽĒāŽ•ā¯āŽ•āŽ¤ā¯āŽ¤ā¯ˆāŽ¤ā¯ āŽ¤āŽŋāŽąāŽ•ā¯āŽ•ā¯āŽŽā¯āŽĒā¯ŠāŽ´ā¯āŽ¤ā¯ āŽ’āŽ°ā¯ āŽĒāŽŋāŽ´ā¯ˆ āŽāŽąā¯āŽĒāŽŸā¯āŽŸā¯āŽĩāŽŋāŽŸā¯āŽŸāŽ¤ā¯. āŽ‡āŽ¤ā¯ āŽ‰āŽ™ā¯āŽ•āŽŗā¯ āŽ‡āŽŖā¯ˆāŽ¯ āŽ¤ā¯ŠāŽŸāŽ°ā¯āŽĒāŽŋāŽ˛ā¯ āŽ…āŽ˛ā¯āŽ˛āŽ¤ā¯ āŽ‡āŽĒā¯āŽĒāŽ¤ā¯āŽ¤āŽŋāŽŠā¯ āŽĩāŽ´āŽ™ā¯āŽ•ā¯āŽ•āŽŋāŽ¯āŽŋāŽ˛ā¯ āŽāŽąā¯āŽĒāŽŸā¯āŽŸā¯āŽŗā¯āŽŗ āŽ’āŽ°ā¯ āŽ¤āŽąā¯āŽ•āŽžāŽ˛āŽŋāŽ• āŽĒāŽŋāŽ°āŽšā¯āŽšāŽŖā¯ˆāŽ¯āŽžāŽ• āŽ‡āŽ°ā¯āŽ•ā¯āŽ•āŽ˛āŽžāŽŽā¯.", + "bundle_column_error.network.title": "āŽĒāŽŋāŽŖā¯ˆāŽ¯āŽĒā¯ āŽĒāŽŋāŽ´ā¯ˆ", "bundle_column_error.retry": "āŽŽā¯€āŽŖā¯āŽŸā¯āŽŽā¯ āŽŽā¯āŽ¯āŽąā¯āŽšāŽŋāŽ•ā¯āŽ•āŽĩā¯āŽŽā¯", + "bundle_column_error.return": "āŽŽā¯āŽ•āŽĒā¯āŽĒāŽŋāŽąā¯āŽ•ā¯ āŽšā¯†āŽ˛ā¯āŽ˛āŽĩā¯āŽŽā¯", + "bundle_column_error.routing.body": "āŽ•ā¯‡āŽŸā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸ āŽĒāŽ•ā¯āŽ•āŽ¤ā¯āŽ¤ā¯ˆāŽ•ā¯ āŽ•āŽžāŽŖāŽĩāŽŋāŽ˛ā¯āŽ˛ā¯ˆ. āŽ¨ā¯€āŽ™ā¯āŽ•āŽŗā¯ āŽ‰āŽŗā¯āŽŗāŽŋāŽŸā¯āŽŸ āŽŽā¯āŽ•āŽĩāŽ°āŽŋ āŽšāŽ°āŽŋāŽ¯āŽŠāŽ¤āŽž?", + "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "āŽŽā¯‚āŽŸā¯āŽ•", "bundle_modal_error.message": "āŽ‡āŽ•ā¯āŽ•ā¯‚āŽąā¯āŽąā¯ˆ āŽāŽąā¯āŽąāŽŽā¯ āŽšā¯†āŽ¯ā¯āŽ¯ā¯āŽŽā¯āŽĒā¯ŠāŽ´ā¯āŽ¤ā¯ āŽāŽ¤ā¯‹ āŽ¤āŽĩāŽąā¯ āŽāŽąā¯āŽĒāŽŸā¯āŽŸā¯āŽŗā¯āŽŗāŽ¤ā¯.", "bundle_modal_error.retry": "āŽŽā¯€āŽŖā¯āŽŸā¯āŽŽā¯ āŽŽā¯āŽ¯āŽąā¯āŽšāŽŋ āŽšā¯†āŽ¯ā¯", + "closed_registrations.other_server_instructions": "āŽŽā¯‡āŽšā¯āŽŸāŽŸāŽžāŽŠā¯ āŽ‡āŽ°ā¯ āŽĒāŽ°āŽĩāŽ˛āŽžāŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸ āŽŽā¯†āŽŠā¯āŽĒā¯ŠāŽ°ā¯āŽŗā¯ āŽŽāŽŠā¯āŽĒāŽ¤āŽžāŽ˛ā¯, āŽ¨ā¯€āŽ™ā¯āŽ•āŽŗā¯ āŽĩā¯‡āŽ°ā¯ āŽ’āŽ°ā¯ āŽĩāŽ´āŽ™ā¯āŽ•āŽŋāŽ¯āŽŋāŽ˛ā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯ˆ āŽ‰āŽ°ā¯āŽĩāŽžāŽ•ā¯āŽ•āŽŋāŽ¯āŽŋāŽ°ā¯āŽ¨ā¯āŽ¤āŽžāŽ˛ā¯āŽŽā¯ āŽ‡āŽ¨ā¯āŽ¤ āŽĩāŽ´āŽ™ā¯āŽ•āŽŋāŽ¯āŽŋāŽ˛ā¯ āŽĒāŽ¯āŽŠā¯āŽĒāŽŸā¯āŽ¤ā¯āŽ¤āŽ˛āŽžāŽŽā¯.", + "closed_registrations_modal.description": "{domain} āŽ‡āŽ˛ā¯ āŽ‡āŽĒā¯āŽĒā¯ŠāŽ´ā¯āŽ¤ā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯āŽ•āŽŗā¯ āŽ‰āŽ°ā¯āŽĩāŽžāŽ•ā¯āŽ• āŽŽā¯āŽŸāŽŋāŽ¯āŽžāŽ¤ā¯. āŽ¨ā¯€āŽ™ā¯āŽ•āŽŗā¯ āŽŽā¯‡āŽšā¯āŽŸāŽŸāŽžāŽŠā¯ āŽĒāŽ¯āŽŠā¯āŽĒāŽŸā¯āŽ¤ā¯āŽ¤, āŽ•ā¯āŽąāŽŋāŽĒā¯āŽĒāŽžāŽ• {domain} āŽŽā¯āŽ•āŽĩāŽ°āŽŋāŽ¯āŽŋāŽ˛ā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯ˆāŽ¤ā¯ āŽ¤ā¯āŽĩāŽ™ā¯āŽ• āŽĩā¯‡āŽŖā¯āŽŸā¯āŽŽā¯ āŽŽāŽŠā¯āŽą āŽ…āŽĩāŽšāŽŋāŽ¯āŽŽāŽŋāŽ˛ā¯āŽ˛ā¯ˆ āŽŽāŽŠā¯āŽĒāŽ¤ā¯ˆ āŽŽāŽŠāŽ¤āŽŋāŽ˛ā¯ āŽĩā¯ˆāŽ¤ā¯āŽ¤ā¯āŽ•ā¯ āŽ•ā¯ŠāŽŗā¯āŽŗāŽĩā¯āŽŽā¯.", + "closed_registrations_modal.find_another_server": "āŽĩā¯‡āŽąā¯ŠāŽ°ā¯ āŽĩāŽ´āŽ™ā¯āŽ•āŽŋāŽ¯ā¯ˆāŽ•ā¯ āŽ•āŽŖā¯āŽŸā¯āŽĒāŽŋāŽŸāŽŋ", + "closed_registrations_modal.preamble": "āŽŽā¯‡āŽšā¯āŽŸāŽŸāŽžāŽŠā¯ āŽ’āŽ°ā¯ āŽĒāŽ°āŽĩāŽ˛āŽžāŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸ āŽŽā¯†āŽŠā¯āŽĒā¯ŠāŽ°ā¯āŽŗā¯. āŽ†āŽ¤āŽŠāŽžāŽ˛ā¯ āŽ¨ā¯€āŽ™ā¯āŽ•āŽŗā¯ āŽŽāŽ™ā¯āŽ•ā¯āŽ•ā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯ˆ āŽ‰āŽ°ā¯āŽĩāŽžāŽ•ā¯āŽ•āŽŋāŽŠāŽžāŽ˛ā¯āŽŽā¯ āŽ‡āŽ¨ā¯āŽ¤ āŽĩāŽ´āŽ™ā¯āŽ•āŽŋāŽ¯āŽŋāŽ˛ā¯ āŽ‰āŽŗā¯āŽŗ āŽ¯āŽžāŽ°ā¯āŽŸāŽŠā¯ āŽĩā¯‡āŽŖā¯āŽŸā¯āŽŽā¯ āŽŽāŽŠā¯āŽąāŽžāŽ˛ā¯āŽŽā¯ āŽ‰āŽ°āŽĩāŽžāŽŸāŽ˛āŽžāŽŽā¯. āŽ¨ā¯€āŽ™ā¯āŽ•āŽŗā¯‡ āŽ•ā¯‚āŽŸ āŽ’āŽ°ā¯ āŽĩāŽ´āŽ™ā¯āŽ•āŽŋāŽ¯ā¯ˆ āŽ¨āŽŋāŽąā¯āŽĩāŽ˛āŽžāŽŽā¯!", + "closed_registrations_modal.title": "āŽŽā¯‡āŽšā¯āŽŸāŽŸāŽžāŽŠā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯ āŽ¤ā¯āŽĩāŽ™ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽ•āŽŋāŽąāŽ¤ā¯", + "column.about": "āŽĒāŽąā¯āŽąāŽŋ", "column.blocks": "āŽ¤āŽŸā¯āŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸ āŽĒāŽ¯āŽŠāŽ°ā¯āŽ•āŽŗā¯", "column.bookmarks": "āŽ…āŽŸā¯ˆāŽ¯āŽžāŽŗāŽ•ā¯āŽ•ā¯āŽąāŽŋāŽ•āŽŗā¯", "column.community": "āŽšā¯āŽ¯ āŽ¨āŽŋāŽ•āŽ´ā¯āŽĩā¯ āŽ•āŽžāŽ˛āŽĩāŽ°āŽŋāŽšā¯ˆ", + "column.direct": "āŽ¤āŽŠāŽŋāŽĒā¯āŽĒāŽŸā¯āŽŸ āŽ•ā¯āŽąāŽŋāŽĒā¯āŽĒā¯āŽ•āŽŗā¯", "column.directory": "āŽšā¯āŽ¯āŽĩāŽŋāŽĩāŽ°āŽ™ā¯āŽ•āŽŗā¯ˆ āŽ‰āŽ˛āŽžāŽĩā¯", "column.domain_blocks": "āŽŽāŽąā¯ˆāŽ¨ā¯āŽ¤āŽŋāŽ°ā¯āŽ•ā¯āŽ•ā¯āŽŽā¯ āŽ¤āŽŋāŽ°āŽŗāŽ™ā¯āŽ•āŽŗā¯", + "column.favourites": "āŽĒāŽŋāŽŸāŽŋāŽ¤ā¯āŽ¤āŽĩā¯ˆ", "column.follow_requests": "āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ° āŽ…āŽŠā¯āŽŽāŽ¤āŽŋāŽ•āŽŗā¯", "column.home": "āŽŽā¯āŽ•āŽĒā¯āŽĒā¯", "column.lists": "āŽĒāŽŸā¯āŽŸāŽŋāŽ¯āŽ˛ā¯āŽ•āŽŗā¯", @@ -91,6 +111,9 @@ "community.column_settings.remote_only": "āŽ¤ā¯ŠāŽ˛ā¯ˆāŽĩāŽŋāŽ˛āŽŋāŽ°ā¯āŽ¨ā¯āŽ¤ā¯ āŽŽāŽŸā¯āŽŸā¯āŽŽā¯‡", "compose.language.change": "āŽŽā¯ŠāŽ´āŽŋāŽ¯ā¯ˆ āŽŽāŽžāŽąā¯āŽąā¯", "compose.language.search": "āŽ¤ā¯‡āŽŸāŽ˛ā¯ āŽŽā¯ŠāŽ´āŽŋāŽ•āŽŗā¯...", + "compose.published.body": "āŽĒāŽ¤āŽŋāŽĩāŽŋāŽŸāŽĒā¯āŽĒāŽŸā¯āŽŸāŽ¤ā¯.", + "compose.published.open": "āŽ¤āŽŋāŽą", + "compose.saved.body": "āŽĒāŽ¤āŽŋāŽĩā¯ āŽšā¯‡āŽŽāŽŋāŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸāŽ¤ā¯.", "compose_form.direct_message_warning_learn_more": "āŽŽā¯‡āŽ˛ā¯āŽŽā¯ āŽ…āŽąāŽŋāŽ¯", "compose_form.encryption_warning": "MastodonāŽ˛ā¯ āŽ‰āŽŗā¯āŽŗ āŽĒāŽ¤āŽŋāŽĩā¯āŽ•āŽŗā¯ āŽŽā¯āŽąā¯ˆāŽ¯āŽžāŽ• āŽŽāŽŠā¯āŽ•ā¯āŽ°āŽŋāŽĒā¯āŽŸā¯(encrypt) āŽšā¯†āŽ¯ā¯āŽ¯āŽĒāŽŸāŽĩāŽŋāŽ˛ā¯āŽ˛ā¯ˆ. āŽ…āŽ¤āŽŠāŽžāŽ˛ā¯ āŽŽā¯āŽ•ā¯āŽ•āŽŋāŽ¯ āŽ¤āŽ•āŽĩāŽ˛ā¯āŽ•āŽŗā¯ˆ āŽ‡āŽ™ā¯āŽ•ā¯‡ āŽĒāŽ•āŽŋāŽ° āŽĩā¯‡āŽŖā¯āŽŸāŽžāŽŽā¯.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", @@ -181,6 +204,10 @@ "error.unexpected_crash.next_steps": "āŽĒāŽ•ā¯āŽ•āŽ¤ā¯āŽ¤ā¯ˆāŽĒā¯ āŽĒā¯āŽ¤ā¯āŽĒā¯āŽĒāŽŋāŽ¤ā¯āŽ¤ā¯āŽĒā¯ āŽĒāŽžāŽ°ā¯āŽ•ā¯āŽ•āŽĩā¯āŽŽā¯. āŽ…āŽĒā¯āŽĒāŽŸāŽŋāŽ¯ā¯āŽŽā¯ āŽĩā¯‡āŽ˛ā¯ˆ āŽšā¯†āŽ¯ā¯āŽ¯āŽĩāŽŋāŽ˛ā¯āŽ˛ā¯ˆ āŽŽāŽŠāŽŋāŽ˛ā¯, āŽŽāŽžāŽ¸ā¯āŽŸāŽŸāŽžāŽŠā¯ˆ āŽĩā¯‡āŽąā¯ āŽ’āŽ°ā¯ āŽ‰āŽ˛āŽžāŽĩāŽŋāŽ¯āŽŋāŽŠā¯ āŽŽā¯‚āŽ˛āŽŽā¯‹, āŽ…āŽ˛ā¯āŽ˛āŽ¤ā¯ āŽĒā¯ŠāŽ°ā¯āŽ¤ā¯āŽ¤āŽŽāŽžāŽŠ āŽšā¯†āŽ¯āŽ˛āŽŋāŽ¯āŽŋāŽŠā¯ āŽŽā¯‚āŽ˛āŽŽā¯‹ āŽĒāŽ¯āŽŠā¯āŽĒāŽŸā¯āŽ¤ā¯āŽ¤āŽŋāŽĒā¯ āŽĒāŽžāŽ°ā¯āŽ•ā¯āŽ•āŽĩā¯āŽŽā¯.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace-āŽ clipboard-āŽ˛ā¯ āŽ¨āŽ•āŽ˛ā¯†āŽŸā¯", "errors.unexpected_crash.report_issue": "āŽĒā¯āŽ•āŽžāŽ°āŽŗāŽŋ", + "explore.title": "āŽ‰āŽ˛āŽžāŽĩā¯", + "explore.trending_links": "āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗā¯", + "explore.trending_statuses": "āŽĒāŽ¤āŽŋāŽĩā¯āŽ•āŽŗā¯", + "explore.trending_tags": "āŽšā¯‡āŽˇā¯āŽŸā¯‡āŽ•ā¯āŽ•ā¯āŽ•āŽŗā¯", "follow_request.authorize": "āŽ…āŽŠā¯āŽŽāŽ¤āŽŋāŽ¯āŽŗāŽŋ", "follow_request.reject": "āŽ¨āŽŋāŽ°āŽžāŽ•āŽ°āŽŋ", "follow_requests.unlocked_explanation": "āŽ‰āŽ™ā¯āŽ•āŽŗā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯ āŽĒā¯‚āŽŸā¯āŽŸāŽĒā¯āŽĒāŽŸāŽĩāŽŋāŽ˛ā¯āŽ˛ā¯ˆ āŽŽāŽŠā¯āŽąāŽžāŽ˛ā¯āŽŽā¯, āŽ‡āŽ¨ā¯āŽ¤āŽ•ā¯ āŽ•āŽŖāŽ•ā¯āŽ•ā¯āŽ•āŽŗāŽŋāŽ˛āŽŋāŽ°ā¯āŽ¨ā¯āŽ¤ā¯ āŽ‰āŽ™ā¯āŽ•āŽŗā¯ˆāŽĒā¯ āŽĒāŽŋāŽŠā¯āŽ¤ā¯ŠāŽŸāŽ° āŽĩāŽŋāŽ°ā¯āŽŽā¯āŽĒā¯āŽŽā¯ āŽ•ā¯‹āŽ°āŽŋāŽ•ā¯āŽ•ā¯ˆāŽ•āŽŗā¯ˆ āŽ¨ā¯€āŽ™ā¯āŽ•āŽŗā¯ āŽĒāŽ°ā¯€āŽšā¯€āŽ˛āŽŋāŽĒā¯āŽĒāŽ¤ā¯ āŽ¨āŽ˛āŽŽā¯ āŽŽāŽŠā¯āŽąā¯ {domain} āŽŠāŽ´āŽŋāŽ¯āŽ°ā¯ āŽŽāŽŖā¯āŽŖā¯āŽ•āŽŋāŽąāŽžāŽ°ā¯.", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index f21c0ef57ad675..3c231871fa71aa 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -12,7 +12,6 @@ "account.followers": "ā°…ā°¨āąā°šā°°āąā°˛āą", "account.followers.empty": "ā°ˆ ā°ĩā°ŋā°¨ā°ŋā°¯āą‹ā°—ā°Ļā°žā°°āąā°Ąā°ŋā°¨ā°ŋ ā°‡ā°‚ā°•ā°ž ā°Žā°ĩā°°āą‚ ā°…ā°¨āąā°¸ā°°ā°ŋā°‚ā°šā°Ąā°‚ā°˛āą‡ā°Ļāą.", "account.follows.empty": "ā°ˆ ā°ĩā°ŋā°¨ā°ŋā°¯āą‹ā°—ā°Ļā°žā°°ā°ŋ ā°‡ā°‚ā°•ā°ž ā°Žā°ĩā°°ā°ŋā°¨āą€ ā°…ā°¨āąā°¸ā°°ā°ŋā°‚ā°šā°Ąā°‚ā°˛āą‡ā°Ļāą.", - "account.follows_you": "ā°Žā°ŋā°Žāąā°Žā°˛āąā°¨ā°ŋ ā°…ā°¨āąā°¸ā°°ā°ŋā°¸āąā°¤āąā°¨āąā°¨ā°žā°°āą", "account.hide_reblogs": "@{name} ā°¨āąā°‚ā°šā°ŋ ā°Ŧāą‚ā°¸āąā°Ÿāą ā°˛ā°¨āą ā°Ļā°žā°šā°ŋā°Ēāą†ā°Ÿāąā°Ÿāą", "account.link_verified_on": "ā°ˆ ā°˛ā°‚ā°•āą† ā°¯āąŠā°•āąā°• ā°¯ā°žā°œā°Žā°žā°¨āąā°¯ā°‚ {date}ā°¨ ā°Ēā°°āą€ā°•āąā°ˇā°ŋā°‚ā°šā°Ŧā°Ąā°ŋā°‚ā°Ļā°ŋ", "account.locked_info": "ā°ˆ ā°–ā°žā°¤ā°ž ā°¯āąŠā°•āąā°• ā°—āą‹ā°Ēāąā°¯ā°¤ ā°¸āąā°Ĩā°ŋā°¤ā°ŋ ā°˛ā°žā°•āą ā°šāą‡ā°¯ā°Ŧā°Ąā°ŋ ā°ĩāąā°‚ā°Ļā°ŋ. ā°ˆ ā°–ā°žā°¤ā°žā°¨āą ā°Žā°ĩā°°āą ā°…ā°¨āąā°¸ā°°ā°ŋā°‚ā°šā°ĩā°šāąā°šāą‹ ā°¯ā°œā°Žā°žā°¨āą‡ ā°¨ā°ŋā°°āąā°Ŗā°¯ā°‚ ā°¤āą€ā°¸āąā°•āąā°‚ā°Ÿā°žā°°āą.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 0be9bf6d7a0d98..65f27ef0618650 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "āš„ā¸Ąāšˆā¸Ąā¸ĩāš‚ā¸žā¸Ēā¸•āšŒ", "account.featured_tags.title": "āšā¸Žā¸Šāšā¸—āš‡ā¸ā¸—ā¸ĩāšˆā¸™āšˆā¸˛ā¸Ēā¸™āšƒā¸ˆā¸‚ā¸­ā¸‡ {name}", "account.follow": "ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą", + "account.follow_back": "ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ąā¸ā¸Ĩā¸ąā¸š", "account.followers": "ā¸œā¸šāš‰ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą", "account.followers.empty": "ā¸ĸā¸ąā¸‡āš„ā¸Ąāšˆā¸Ąā¸ĩāšƒā¸„ā¸Ŗā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ąā¸œā¸šāš‰āšƒā¸Šāš‰ā¸™ā¸ĩāš‰", "account.followers_counter": "{count, plural, other {{counter} ā¸œā¸šāš‰ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą}}", "account.following": "ā¸ā¸ŗā¸Ĩā¸ąā¸‡ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą", "account.following_counter": "{count, plural, other {{counter} ā¸ā¸ŗā¸Ĩā¸ąā¸‡ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą}}", "account.follows.empty": "ā¸œā¸šāš‰āšƒā¸Šāš‰ā¸™ā¸ĩāš‰ā¸ĸā¸ąā¸‡āš„ā¸Ąāšˆāš„ā¸”āš‰ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ąāšƒā¸„ā¸Ŗ", - "account.follows_you": "ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ąā¸„ā¸¸ā¸“", "account.go_to_profile": "āš„ā¸›ā¸ĸā¸ąā¸‡āš‚ā¸›ā¸Ŗāš„ā¸Ÿā¸ĨāšŒ", "account.hide_reblogs": "ā¸‹āšˆā¸­ā¸™ā¸ā¸˛ā¸Ŗā¸”ā¸ąā¸™ā¸ˆā¸˛ā¸ @{name}", "account.in_memoriam": "āš€ā¸žā¸ˇāšˆā¸­ā¸Ŗā¸°ā¸Ĩā¸ļā¸ā¸–ā¸ļā¸‡", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ā¸‹āšˆā¸­ā¸™ā¸ā¸˛ā¸Ŗāšā¸ˆāš‰ā¸‡āš€ā¸•ā¸ˇā¸­ā¸™", "account.mute_short": "ā¸‹āšˆā¸­ā¸™", "account.muted": "ā¸‹āšˆā¸­ā¸™ā¸­ā¸ĸā¸šāšˆ", + "account.mutual": "ā¸„ā¸™ā¸—ā¸ĩāšˆā¸Ąā¸ĩā¸Ŗāšˆā¸§ā¸Ąā¸ā¸ąā¸™", "account.no_bio": "āš„ā¸Ąāšˆāš„ā¸”āš‰āšƒā¸Ģāš‰ā¸„ā¸ŗā¸­ā¸˜ā¸´ā¸šā¸˛ā¸ĸ", "account.open_original_page": "āš€ā¸›ā¸´ā¸”ā¸Ģā¸™āš‰ā¸˛ā¸”ā¸ąāš‰ā¸‡āš€ā¸”ā¸´ā¸Ą", "account.posts": "āš‚ā¸žā¸Ēā¸•āšŒ", @@ -203,7 +204,7 @@ "disabled_account_banner.text": "ā¸Ąā¸ĩā¸ā¸˛ā¸Ŗā¸›ā¸´ā¸”āšƒā¸Šāš‰ā¸‡ā¸˛ā¸™ā¸šā¸ąā¸ā¸Šā¸ĩā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“ {disabledAccount} āšƒā¸™ā¸›ā¸ąā¸ˆā¸ˆā¸¸ā¸šā¸ąā¸™", "dismissable_banner.community_timeline": "ā¸™ā¸ĩāšˆā¸„ā¸ˇā¸­āš‚ā¸žā¸Ēā¸•āšŒā¸Ēā¸˛ā¸˜ā¸˛ā¸Ŗā¸“ā¸°ā¸Ĩāšˆā¸˛ā¸Ēā¸¸ā¸”ā¸ˆā¸˛ā¸ā¸œā¸šāš‰ā¸„ā¸™ā¸—ā¸ĩāšˆā¸šā¸ąā¸ā¸Šā¸ĩāš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗāš‚ā¸Žā¸Ēā¸•āšŒāš‚ā¸”ā¸ĸ {domain}", "dismissable_banner.dismiss": "ā¸›ā¸´ā¸”", - "dismissable_banner.explore_links": "ā¸™ā¸ĩāšˆā¸„ā¸ˇā¸­āš€ā¸Ŗā¸ˇāšˆā¸­ā¸‡ā¸‚āšˆā¸˛ā¸§ā¸—ā¸ĩāšˆāš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗāšā¸šāšˆā¸‡ā¸›ā¸ąā¸™ā¸Ąā¸˛ā¸ā¸—ā¸ĩāšˆā¸Ēā¸¸ā¸”āšƒā¸™āš€ā¸§āš‡ā¸šā¸Ēā¸ąā¸‡ā¸„ā¸Ąā¸§ā¸ąā¸™ā¸™ā¸ĩāš‰ āš€ā¸Ŗā¸ˇāšˆā¸­ā¸‡ā¸‚āšˆā¸˛ā¸§ā¸—ā¸ĩāšˆāšƒā¸Ģā¸Ąāšˆā¸ā¸§āšˆā¸˛ā¸—ā¸ĩāšˆāš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗāš‚ā¸žā¸Ēā¸•āšŒāš‚ā¸”ā¸ĸā¸œā¸šāš‰ā¸„ā¸™ā¸•āšˆā¸˛ā¸‡ āš† ā¸Ąā¸˛ā¸ā¸ā¸§āšˆā¸˛ā¸ˆā¸°āš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗā¸ˆā¸ąā¸”ā¸­ā¸ąā¸™ā¸”ā¸ąā¸šā¸—ā¸ĩāšˆā¸Ēā¸šā¸‡ā¸ā¸§āšˆā¸˛", + "dismissable_banner.explore_links": "ā¸™ā¸ĩāšˆāš€ā¸›āš‡ā¸™āš€ā¸Ŗā¸ˇāšˆā¸­ā¸‡ā¸‚āšˆā¸˛ā¸§ā¸—ā¸ĩāšˆāš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗāšā¸Šā¸ŖāšŒā¸Ąā¸˛ā¸ā¸—ā¸ĩāšˆā¸Ēā¸¸ā¸”āšƒā¸™āš€ā¸§āš‡ā¸šā¸Ēā¸ąā¸‡ā¸„ā¸Ąā¸§ā¸ąā¸™ā¸™ā¸ĩāš‰ āš€ā¸Ŗā¸ˇāšˆā¸­ā¸‡ā¸‚āšˆā¸˛ā¸§ā¸—ā¸ĩāšˆāšƒā¸Ģā¸Ąāšˆā¸ā¸§āšˆā¸˛ā¸—ā¸ĩāšˆā¸Ąā¸ĩā¸„ā¸™āš‚ā¸žā¸Ēā¸•āšŒā¸Ąā¸˛ā¸ā¸ā¸§āšˆā¸˛ā¸ˆā¸°āš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗā¸ˆā¸ąā¸”ā¸­ā¸ąā¸™ā¸”ā¸ąā¸šā¸—ā¸ĩāšˆā¸Ēā¸šā¸‡ā¸ā¸§āšˆā¸˛", "dismissable_banner.explore_statuses": "ā¸™ā¸ĩāšˆā¸„ā¸ˇā¸­āš‚ā¸žā¸Ēā¸•āšŒā¸ˆā¸˛ā¸ā¸—ā¸ąāšˆā¸§ā¸—ā¸ąāš‰ā¸‡āš€ā¸§āš‡ā¸šā¸Ēā¸ąā¸‡ā¸„ā¸Ąā¸—ā¸ĩāšˆā¸ā¸ŗā¸Ĩā¸ąā¸‡āš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸„ā¸§ā¸˛ā¸Ąā¸Ēā¸™āšƒā¸ˆā¸§ā¸ąā¸™ā¸™ā¸ĩāš‰ āš‚ā¸žā¸Ēā¸•āšŒā¸—ā¸ĩāšˆāšƒā¸Ģā¸Ąāšˆā¸ā¸§āšˆā¸˛ā¸—ā¸ĩāšˆā¸Ąā¸ĩā¸ā¸˛ā¸Ŗā¸”ā¸ąā¸™āšā¸Ĩā¸°ā¸Ŗā¸˛ā¸ĸā¸ā¸˛ā¸Ŗāš‚ā¸›ā¸Ŗā¸”ā¸Ąā¸˛ā¸ā¸ā¸§āšˆā¸˛ā¸ˆā¸°āš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗā¸ˆā¸ąā¸”ā¸­ā¸ąā¸™ā¸”ā¸ąā¸šā¸—ā¸ĩāšˆā¸Ēā¸šā¸‡ā¸ā¸§āšˆā¸˛", "dismissable_banner.explore_tags": "ā¸™ā¸ĩāšˆā¸„ā¸ˇā¸­āšā¸Žā¸Šāšā¸—āš‡ā¸ā¸—ā¸ĩāšˆā¸ā¸ŗā¸Ĩā¸ąā¸‡āš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸„ā¸§ā¸˛ā¸Ąā¸Ēā¸™āšƒā¸ˆāšƒā¸™āš€ā¸§āš‡ā¸šā¸Ēā¸ąā¸‡ā¸„ā¸Ąā¸§ā¸ąā¸™ā¸™ā¸ĩāš‰ āšā¸Žā¸Šāšā¸—āš‡ā¸ā¸—ā¸ĩāšˆā¸Ąā¸ĩā¸ā¸˛ā¸Ŗāšƒā¸Šāš‰āš‚ā¸”ā¸ĸā¸œā¸šāš‰ā¸„ā¸™ā¸•āšˆā¸˛ā¸‡ āš† ā¸Ąā¸˛ā¸ā¸ā¸§āšˆā¸˛ā¸ˆā¸°āš„ā¸”āš‰ā¸Ŗā¸ąā¸šā¸ā¸˛ā¸Ŗā¸ˆā¸ąā¸”ā¸­ā¸ąā¸™ā¸”ā¸ąā¸šā¸—ā¸ĩāšˆā¸Ēā¸šā¸‡ā¸ā¸§āšˆā¸˛", "dismissable_banner.public_timeline": "ā¸™ā¸ĩāšˆā¸„ā¸ˇā¸­āš‚ā¸žā¸Ēā¸•āšŒā¸Ēā¸˛ā¸˜ā¸˛ā¸Ŗā¸“ā¸°ā¸Ĩāšˆā¸˛ā¸Ēā¸¸ā¸”ā¸ˆā¸˛ā¸ā¸œā¸šāš‰ā¸„ā¸™āšƒā¸™āš€ā¸§āš‡ā¸šā¸Ēā¸ąā¸‡ā¸„ā¸Ąā¸—ā¸ĩāšˆā¸œā¸šāš‰ā¸„ā¸™āšƒā¸™ {domain} ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą", @@ -313,7 +314,7 @@ "home.explore_prompt.body": "ā¸Ÿā¸ĩā¸”ā¸Ģā¸™āš‰ā¸˛āšā¸Ŗā¸ā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“ā¸ˆā¸°ā¸Ąā¸ĩā¸ā¸˛ā¸Ŗā¸œā¸Ēā¸Ąā¸œā¸Ēā¸˛ā¸™ā¸‚ā¸­ā¸‡āš‚ā¸žā¸Ēā¸•āšŒā¸ˆā¸˛ā¸āšā¸Žā¸Šāšā¸—āš‡ā¸ā¸—ā¸ĩāšˆā¸„ā¸¸ā¸“āš„ā¸”āš‰āš€ā¸Ĩā¸ˇā¸­ā¸ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą, ā¸œā¸šāš‰ā¸„ā¸™ā¸—ā¸ĩāšˆā¸„ā¸¸ā¸“āš„ā¸”āš‰āš€ā¸Ĩā¸ˇā¸­ā¸ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ą āšā¸Ĩā¸°āš‚ā¸žā¸Ēā¸•āšŒā¸—ā¸ĩāšˆāš€ā¸‚ā¸˛ā¸”ā¸ąā¸™ ā¸Ģā¸˛ā¸ā¸™ā¸ąāšˆā¸™ā¸Ŗā¸šāš‰ā¸Ēā¸ļā¸āš€ā¸‡ā¸ĩā¸ĸā¸šāš€ā¸ā¸´ā¸™āš„ā¸› ā¸„ā¸¸ā¸“ā¸­ā¸˛ā¸ˆā¸•āš‰ā¸­ā¸‡ā¸ā¸˛ā¸Ŗ:", "home.explore_prompt.title": "ā¸™ā¸ĩāšˆā¸„ā¸ˇā¸­ā¸ā¸˛ā¸™ā¸Ģā¸™āš‰ā¸˛āšā¸Ŗā¸ā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“ā¸ ā¸˛ā¸ĸāšƒā¸™ Mastodon", "home.hide_announcements": "ā¸‹āšˆā¸­ā¸™ā¸›ā¸Ŗā¸°ā¸ā¸˛ā¸¨", - "home.pending_critical_update.body": "āš‚ā¸›ā¸Ŗā¸”ā¸­ā¸ąā¸›āš€ā¸”ā¸•āš€ā¸‹ā¸´ā¸ŖāšŒā¸Ÿāš€ā¸§ā¸­ā¸ŖāšŒ Mastodon ā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“āš‚ā¸”ā¸ĸāš€ā¸Ŗāš‡ā¸§ā¸—ā¸ĩāšˆā¸Ēā¸¸ā¸”āš€ā¸—āšˆā¸˛ā¸—ā¸ĩāšˆā¸ˆā¸°ā¸—ā¸ŗāš„ā¸”āš‰!", + "home.pending_critical_update.body": "āš‚ā¸›ā¸Ŗā¸”ā¸­ā¸ąā¸›āš€ā¸”ā¸•āš€ā¸‹ā¸´ā¸ŖāšŒā¸Ÿāš€ā¸§ā¸­ā¸ŖāšŒ Mastodon ā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“āš‚ā¸”ā¸ĸāš€ā¸Ŗāš‡ā¸§ā¸—ā¸ĩāšˆā¸Ēā¸¸ā¸”āš€ā¸—āšˆā¸˛ā¸—ā¸ĩāšˆā¸ˆā¸°āš€ā¸›āš‡ā¸™āš„ā¸›āš„ā¸”āš‰!", "home.pending_critical_update.link": "ā¸”ā¸šā¸ā¸˛ā¸Ŗā¸­ā¸ąā¸›āš€ā¸”ā¸•", "home.pending_critical_update.title": "ā¸Ąā¸ĩā¸ā¸˛ā¸Ŗā¸­ā¸ąā¸›āš€ā¸”ā¸•ā¸„ā¸§ā¸˛ā¸Ąā¸›ā¸Ĩā¸­ā¸”ā¸ ā¸ąā¸ĸā¸Ēā¸ŗā¸„ā¸ąā¸ā¸žā¸Ŗāš‰ā¸­ā¸Ąāšƒā¸Šāš‰ā¸‡ā¸˛ā¸™!", "home.show_announcements": "āšā¸Ēā¸”ā¸‡ā¸›ā¸Ŗā¸°ā¸ā¸˛ā¸¨", @@ -496,7 +497,7 @@ "onboarding.share.message": "ā¸‰ā¸ąā¸™ā¸„ā¸ˇā¸­ {username} āšƒā¸™ #Mastodon! ā¸Ąā¸˛ā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ąā¸‰ā¸ąā¸™ā¸—ā¸ĩāšˆ {url}", "onboarding.share.next_steps": "ā¸‚ā¸ąāš‰ā¸™ā¸•ā¸­ā¸™ā¸–ā¸ąā¸”āš„ā¸›ā¸—ā¸ĩāšˆāš€ā¸›āš‡ā¸™āš„ā¸›āš„ā¸”āš‰:", "onboarding.share.title": "āšā¸Šā¸ŖāšŒāš‚ā¸›ā¸Ŗāš„ā¸Ÿā¸ĨāšŒā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“", - "onboarding.start.lead": "ā¸•ā¸­ā¸™ā¸™ā¸ĩāš‰ā¸„ā¸¸ā¸“āš€ā¸›āš‡ā¸™ā¸Ēāšˆā¸§ā¸™ā¸Ģā¸™ā¸ļāšˆā¸‡ā¸‚ā¸­ā¸‡ Mastodon āšā¸žā¸Ĩā¸•ā¸Ÿā¸­ā¸ŖāšŒā¸Ąā¸Ēā¸ˇāšˆā¸­ā¸Ēā¸ąā¸‡ā¸„ā¸Ąā¸—ā¸ĩāšˆā¸Ąā¸ĩāš€ā¸­ā¸ā¸Ĩā¸ąā¸ā¸Šā¸“āšŒāš€ā¸‰ā¸žā¸˛ā¸°ā¸•ā¸ąā¸§ ā¸ā¸Ŗā¸°ā¸ˆā¸˛ā¸ĸā¸¨ā¸šā¸™ā¸ĸāšŒ ā¸—ā¸ĩāšˆā¸‹ā¸ļāšˆā¸‡ā¸„ā¸¸ā¸“—āš„ā¸Ąāšˆāšƒā¸Šāšˆā¸­ā¸ąā¸Ĩā¸ā¸­ā¸Ŗā¸´ā¸—ā¸ļā¸Ąâ€”āš€ā¸Ŗā¸ĩā¸ĸā¸šāš€ā¸Ŗā¸ĩā¸ĸā¸‡ā¸›ā¸Ŗā¸°ā¸Ēā¸šā¸ā¸˛ā¸Ŗā¸“āšŒā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“āš€ā¸­ā¸‡ ā¸Ąā¸˛ā¸Šāšˆā¸§ā¸ĸāšƒā¸Ģāš‰ā¸„ā¸¸ā¸“āš€ā¸Ŗā¸´āšˆā¸Ąā¸•āš‰ā¸™āšƒā¸Šāš‰ā¸‡ā¸˛ā¸™ā¸žā¸Ŗā¸Ąāšā¸”ā¸™ā¸—ā¸˛ā¸‡ā¸Ēā¸ąā¸‡ā¸„ā¸Ąāšƒā¸Ģā¸Ąāšˆā¸™ā¸ĩāš‰ā¸ā¸ąā¸™āš€ā¸Ĩā¸ĸ:", + "onboarding.start.lead": "ā¸•ā¸­ā¸™ā¸™ā¸ĩāš‰ā¸„ā¸¸ā¸“āš€ā¸›āš‡ā¸™ā¸Ēāšˆā¸§ā¸™ā¸Ģā¸™ā¸ļāšˆā¸‡ā¸‚ā¸­ā¸‡ Mastodon āšā¸žā¸Ĩā¸•ā¸Ÿā¸­ā¸ŖāšŒā¸Ąā¸Ēā¸ˇāšˆā¸­ā¸Ēā¸ąā¸‡ā¸„ā¸Ąāšā¸šā¸šā¸ā¸Ŗā¸°ā¸ˆā¸˛ā¸ĸā¸¨ā¸šā¸™ā¸ĸāšŒā¸—ā¸ĩāšˆā¸Ąā¸ĩāš€ā¸­ā¸ā¸Ĩā¸ąā¸ā¸Šā¸“āšŒāš€ā¸‰ā¸žā¸˛ā¸°ā¸•ā¸ąā¸§ ā¸—ā¸ĩāšˆā¸‹ā¸ļāšˆā¸‡ā¸„ā¸¸ā¸“ āš„ā¸Ąāšˆāšƒā¸Šāšˆā¸­ā¸ąā¸Ĩā¸ā¸­ā¸Ŗā¸´ā¸—ā¸ļā¸Ą āš€ā¸Ŗā¸ĩā¸ĸā¸šāš€ā¸Ŗā¸ĩā¸ĸā¸‡ā¸›ā¸Ŗā¸°ā¸Ēā¸šā¸ā¸˛ā¸Ŗā¸“āšŒā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“āš€ā¸­ā¸‡ ā¸Ąā¸˛ā¸Šāšˆā¸§ā¸ĸāšƒā¸Ģāš‰ā¸„ā¸¸ā¸“āš€ā¸Ŗā¸´āšˆā¸Ąā¸•āš‰ā¸™āšƒā¸Šāš‰ā¸‡ā¸˛ā¸™ā¸žā¸Ŗā¸Ąāšā¸”ā¸™ā¸—ā¸˛ā¸‡ā¸Ēā¸ąā¸‡ā¸„ā¸Ąāšƒā¸Ģā¸Ąāšˆā¸™ā¸ĩāš‰ā¸ā¸ąā¸™āš€ā¸Ĩā¸ĸ:", "onboarding.start.skip": "āš„ā¸Ąāšˆā¸•āš‰ā¸­ā¸‡ā¸ā¸˛ā¸Ŗā¸„ā¸§ā¸˛ā¸Ąā¸Šāšˆā¸§ā¸ĸāš€ā¸Ģā¸Ĩā¸ˇā¸­āšƒā¸™ā¸ā¸˛ā¸Ŗāš€ā¸Ŗā¸´āšˆā¸Ąā¸•āš‰ā¸™āšƒā¸Šāš‰ā¸‡ā¸˛ā¸™?", "onboarding.start.title": "ā¸„ā¸¸ā¸“ā¸—ā¸ŗā¸Ēā¸ŗāš€ā¸Ŗāš‡ā¸ˆāšā¸Ĩāš‰ā¸§!", "onboarding.steps.follow_people.body": "ā¸ā¸˛ā¸Ŗā¸•ā¸´ā¸”ā¸•ā¸˛ā¸Ąā¸œā¸šāš‰ā¸„ā¸™ā¸—ā¸ĩāšˆā¸™āšˆā¸˛ā¸Ēā¸™āšƒā¸ˆā¸„ā¸ˇā¸­ā¸Ēā¸´āšˆā¸‡ā¸—ā¸ĩāšˆ Mastodon āšƒā¸Ģāš‰ā¸„ā¸§ā¸˛ā¸Ąā¸Ēā¸ŗā¸„ā¸ąā¸", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 8eb09bb7cbd2ef..e85db817b9fb95 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -32,20 +32,20 @@ "account.featured_tags.last_status_never": "GÃļnderi yok", "account.featured_tags.title": "{name} kişisinin Ãļne Ã§Äąkan etiketleri", "account.follow": "Takip et", + "account.follow_back": "Geri takip et", "account.followers": "Takipçi", "account.followers.empty": "HenÃŧz kimse bu kullanÄącÄąyÄą takip etmiyor.", "account.followers_counter": "{count, plural, one {{counter} Takipçi} other {{counter} Takipçi}}", "account.following": "Takip Ediliyor", "account.following_counter": "{count, plural, one {{counter} Takip Edilen} other {{counter} Takip Edilen}}", "account.follows.empty": "Bu kullanÄącÄą henÃŧz kimseyi takip etmiyor.", - "account.follows_you": "Seni takip ediyor", "account.go_to_profile": "Profile git", "account.hide_reblogs": "@{name} kişisinin boostlarÄąnÄą gizle", "account.in_memoriam": "HatÄąrasÄąna.", "account.joined_short": "KatÄąldÄą", "account.languages": "Abone olunan dilleri değiştir", "account.link_verified_on": "Bu bağlantÄąnÄąn sahipliği {date} tarihinde denetlendi", - "account.locked_info": "Bu hesabÄąn gizlilik durumu gizli olarak ayarlanmÄąÅŸ. Sahibi, onu kimin takip edebileceğini manuel olarak onaylÄąyor.", + "account.locked_info": "Bu hesabÄąn gizlilik durumu gizli olarak ayarlanmÄąÅŸ. Sahibi, onu kimin takip edebileceğini elle onaylÄąyor.", "account.media": "Medya", "account.mention": "@{name} kişisinden bahset", "account.moved_to": "{name} yeni hesabÄąnÄąn artÄąk şu olduğunu belirtti:", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "Bildirimleri sessize al", "account.mute_short": "Sessize al", "account.muted": "Susturuldu", + "account.mutual": "KarÅŸÄąlÄąklÄą", "account.no_bio": "Herhangi bir aÃ§Äąklama belirtilmedi.", "account.open_original_page": "AsÄąl sayfayÄą aç", "account.posts": "GÃļnderiler", @@ -345,7 +346,7 @@ "keyboard_shortcuts.down": "Listede aşağıya inmek için", "keyboard_shortcuts.enter": "gÃļnderiyi aç", "keyboard_shortcuts.favourite": "GÃļnderiyi favorilerine ekle", - "keyboard_shortcuts.favourites": "Favoriler listeni aç", + "keyboard_shortcuts.favourites": "GÃļzde listeni aç", "keyboard_shortcuts.federated": "Federe akÄąÅŸÄą aç", "keyboard_shortcuts.heading": "Klavye kÄąsayollarÄą", "keyboard_shortcuts.home": "Ana akÄąÅŸÄą aç", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 6727f3e59abdf4..47fe60bd252781 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -35,7 +35,6 @@ "account.following": "Đ¯ĐˇŅ‹ĐģŅƒĐģĐ°Ņ€", "account.following_counter": "{count, plural, one {{counter} ŅĐˇŅ‹ĐģŅƒ} other {{counter} ŅĐˇŅ‹ĐģŅƒ}}", "account.follows.empty": "БĐĩŅ€ĐēĐĩĐŧĐŗĶ™ Đ´Ķ™ ŅĐˇŅ‹ĐģĐŧĐ°ĐŗĐ°ĐŊ Ķ™ĐģĐĩ.", - "account.follows_you": "ĐĄĐĩСĐŗĶ™ ŅĐˇŅ‹ĐģĐŗĐ°ĐŊ", "account.go_to_profile": "ПŅ€ĐžŅ„иĐģŅŒĐŗĶ™ ĐēŌ¯Ņ‡Ō¯", "account.hide_reblogs": "ĐĄĐēŅ€Ņ‹Đ˛Đ°Ņ‚ŅŒ ĐēĶŠŅ‡ĐĩĐŊ ĐŊŅ‡Đĩ @{name}", "account.in_memoriam": "ИŅŅ‚Ķ™ĐģĐĩĐŗĐĩĐŊĶ™.", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 4d2452e12d8cad..6bb5ba0ebf95da 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -1,4 +1,6 @@ { + "about.blocks": "ØĻŲˆØĒØĒÛ‡ØąØ§ÚžØ§Ų„ Ų…Û‡Ų„Ø§Ø˛Ų‰Ų…ېØĒŲ‰Øą", + "about.contact": "ØĻاŲ„اŲ‚Ų‰Ų„اشŲ‚Û‡Ú†Ų‰:", "account.badges.bot": "Bot", "account.cancel_follow_request": "Withdraw follow request", "account.posts": "Toots", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 58a14c0ed22e73..5ec0da599b28a9 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "НĐĩĐŧĐ°Ņ” Đ´ĐžĐŋиŅŅ–в", "account.featured_tags.title": "{name} видŅ–ĐģŅŅ” Ņ…ĐĩŅˆŅ‚ĐĩŌ‘и", "account.follow": "ПŅ–Đ´ĐŋиŅĐ°Ņ‚иŅŅ", + "account.follow_back": "ПŅ–Đ´ĐŋиŅĐ°Ņ‚иŅŅ вСаŅ”ĐŧĐŊĐž", "account.followers": "ПŅ–Đ´ĐŋиŅĐŊиĐēи", "account.followers.empty": "НŅ–Ņ…Ņ‚Đž Ņ‰Đĩ ĐŊĐĩ ĐŋŅ–Đ´ĐŋиŅĐ°ĐŊиК ĐŊĐ° Ņ†ŅŒĐžĐŗĐž ĐēĐžŅ€Đ¸ŅŅ‚ŅƒĐ˛Đ°Ņ‡Đ°.", "account.followers_counter": "{count, plural, one {{counter} ĐŋŅ–Đ´ĐŋиŅĐŊиĐē} few {{counter} ĐŋŅ–Đ´ĐŋиŅĐŊиĐēи} many {{counter} ĐŋŅ–Đ´ĐŋиŅĐŊиĐēŅ–в} other {{counter} ĐŋŅ–Đ´ĐŋиŅĐŊиĐēи}}", "account.following": "Ви ŅŅ‚ĐĩĐļиŅ‚Đĩ", "account.following_counter": "{count, plural, one {{counter} ĐŋŅ–Đ´ĐŋиŅĐēĐ°} few {{counter} ĐŋŅ–Đ´ĐŋиŅĐēи} many {{counter} ĐŋŅ–Đ´ĐŋиŅĐžĐē} other {{counter} ĐŋŅ–Đ´ĐŋиŅĐēи}}", "account.follows.empty": "ĐĻĐĩĐš ĐēĐžŅ€Đ¸ŅŅ‚ŅƒĐ˛Đ°Ņ‡ Ņ‰Đĩ ĐŊŅ– ĐŊĐ° ĐēĐžĐŗĐž ĐŊĐĩ ĐŋŅ–Đ´ĐŋиŅĐ°Đ˛ŅŅ.", - "account.follows_you": "ПŅ–Đ´ĐŋиŅŅƒŅ”Ņ‚ŅŒŅŅ ĐŊĐ° ваŅ", "account.go_to_profile": "ПĐĩŅ€ĐĩĐšŅ‚и Đ´Đž ĐŋŅ€ĐžŅ„Ņ–ĐģŅŽ", "account.hide_reblogs": "ĐĄŅ…ОваŅ‚и ĐŋĐžŅˆĐ¸Ņ€ĐĩĐŊĐŊŅ вŅ–Đ´ @{name}", "account.in_memoriam": "ПаĐŧ'ŅŅ‚ĐŊиĐē.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "НĐĩ ŅĐŋОвŅ–Ņ‰Đ°Ņ‚и", "account.mute_short": "ІĐŗĐŊĐžŅ€ŅƒĐ˛Đ°Ņ‚и", "account.muted": "ПŅ€Đ¸Ņ…ОвŅƒŅ”Ņ‚ŅŒŅŅ", + "account.mutual": "ВзаŅ”ĐŧĐŊĐž", "account.no_bio": "НĐĩĐŧĐ°Ņ” ĐžĐŋиŅŅƒ.", "account.open_original_page": "ВŅ–Đ´ĐēŅ€Đ¸Ņ‚и ĐžŅ€Đ¸ĐŗŅ–ĐŊĐ°ĐģŅŒĐŊŅƒ ŅŅ‚ĐžŅ€Ņ–ĐŊĐēŅƒ", "account.posts": "ДоĐŋиŅĐ¸", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 8fc3aff030e1e4..563b2dedf8e32b 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -32,7 +32,6 @@ "account.following": "ŲØ§Ų„Ųˆ ÚŠØą ØąÛÛ’ ہیÚē", "account.following_counter": "{count, plural, one {{counter} ŲžÛŒØąŲˆÛŒ ÚŠØą ØąÛÛ’ ہیÚē} other {{counter} ŲžÛŒØąŲˆÛŒ ÚŠØą ØąÛÛ’ ہیÚē}}", "account.follows.empty": "\"یہ ØĩØ§ØąŲ ہŲ†ŲˆØ˛ ÚŠØŗی ÚŠÛŒ ŲžÛŒØąŲˆÛŒ Ų†ÛÛŒÚē ÚŠØąØĒا ہے\".", - "account.follows_you": "ØĸŲž ڊا ŲžÛŒØąŲˆÚŠØ§Øą ہے", "account.go_to_profile": "ŲžØąŲˆŲØ§ØĻŲ„ ŲžØą ØŦاØĻیÚē", "account.hide_reblogs": "@{name} Øŗے ŲØąŲˆØē چھŲžØ§ØĻیÚē", "account.in_memoriam": "ÛŒØ§Ø¯Ú¯Ø§Øą Ų…ÛŒÚē۔", diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json index 026cc115c1c905..8eeee42a5e68c2 100644 --- a/app/javascript/mastodon/locales/uz.json +++ b/app/javascript/mastodon/locales/uz.json @@ -35,7 +35,6 @@ "account.following": "Kuzatish", "account.following_counter": "{count, plural, one {{counter} ga Muxlis} other {{counter} larga muxlis}}", "account.follows.empty": "Bu foydalanuvchi hali hech kimni kuzatmagan.", - "account.follows_you": "Sizga obuna", "account.go_to_profile": "Profilga o'tish", "account.hide_reblogs": "@{name} dan boostlarni yashirish", "account.joined_short": "Qo'shilgan", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9ac90b407e12ba..c623caa3fb6424 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "ChÆ°a cÃŗ tÃēt", "account.featured_tags.title": "Hashtag cáģ§a {name}", "account.follow": "Theo dÃĩi", + "account.follow_back": "Theo dÃĩi láēĄi", "account.followers": "NgÆ°áģi theo dÃĩi", "account.followers.empty": "ChÆ°a cÃŗ ngÆ°áģi theo dÃĩi nào.", "account.followers_counter": "{count, plural, one {{counter} NgÆ°áģi theo dÃĩi} other {{counter} NgÆ°áģi theo dÃĩi}}", "account.following": "Đang theo dÃĩi", "account.following_counter": "{count, plural, one {{counter} Theo dÃĩi} other {{counter} Theo dÃĩi}}", "account.follows.empty": "NgÆ°áģi này chÆ°a theo dÃĩi ai.", - "account.follows_you": "Đang theo dÃĩi báēĄn", "account.go_to_profile": "Xem háģ“ sÆĄ", "account.hide_reblogs": "áē¨n tÃēt @{name} đăng láēĄi", "account.in_memoriam": "TÆ°áģŸng Niáģ‡m.", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "áē¨n thông bÃĄo", "account.mute_short": "áē¨n", "account.muted": "ĐÃŖ áēŠn", + "account.mutual": "Đang theo dÃĩi nhau", "account.no_bio": "ChÆ°a cÃŗ miÃĒu táēŖ.", "account.open_original_page": "MáģŸ trang gáģ‘c", "account.posts": "TÃēt", @@ -239,7 +240,7 @@ "empty_column.follow_requests": "BáēĄn chÆ°a cÃŗ yÃĒu cáē§u theo dÃĩi nào.", "empty_column.followed_tags": "BáēĄn chÆ°a theo dÃĩi hashtag nào. Khi báēĄn theo dÃĩi, chÃēng sáēŊ hiáģ‡n lÃĒn áģŸ đÃĸy.", "empty_column.hashtag": "ChÆ°a cÃŗ tÃēt nào dÚng hashtag này.", - "empty_column.home": "Trang chính cáģ§a báēĄn đang tráģ‘ng! HÃŖy theo dÃĩi nhiáģu ngÆ°áģi hÆĄn đáģƒ láēĨp đáē§y.", + "empty_column.home": "Trang cháģ§ cáģ§a báēĄn đang tráģ‘ng! HÃŖy theo dÃĩi nhiáģu ngÆ°áģi hÆĄn đáģƒ láēĨp đáē§y.", "empty_column.list": "ChÆ°a cÃŗ tÃēt. Khi nháģ¯ng ngÆ°áģi trong danh sÃĄch này đăng tÃēt máģ›i, chÃēng sáēŊ xuáēĨt hiáģ‡n áģŸ đÃĸy.", "empty_column.lists": "BáēĄn chÆ°a táēĄo danh sÃĄch nào.", "empty_column.mutes": "BáēĄn chÆ°a áēŠn báēĨt káģŗ ai.", @@ -335,38 +336,38 @@ "intervals.full.days": "{number, plural, other {# ngày}}", "intervals.full.hours": "{number, plural, other {# giáģ}}", "intervals.full.minutes": "{number, plural, other {# phÃēt}}", - "keyboard_shortcuts.back": "tráģŸ láēĄi", + "keyboard_shortcuts.back": "quay láēĄi", "keyboard_shortcuts.blocked": "máģŸ danh sÃĄch ngÆ°áģi đÃŖ cháēˇn", "keyboard_shortcuts.boost": "đăng láēĄi", - "keyboard_shortcuts.column": "máģŸ cÃĄc máģĨc", + "keyboard_shortcuts.column": "máģŸ cÃĄc cáģ™t", "keyboard_shortcuts.compose": "máģŸ khung soáēĄn tÃēt", "keyboard_shortcuts.description": "Mô táēŖ", - "keyboard_shortcuts.direct": "máģŸ máģĨc nháē¯n riÃĒng", + "keyboard_shortcuts.direct": "máģŸ nháē¯n riÃĒng", "keyboard_shortcuts.down": "di chuyáģƒn xuáģ‘ng dÆ°áģ›i danh sÃĄch", - "keyboard_shortcuts.enter": "viáēŋt tÃēt máģ›i", + "keyboard_shortcuts.enter": "máģŸ tÃēt", "keyboard_shortcuts.favourite": "thích tÃēt", "keyboard_shortcuts.favourites": "máģŸ lÆ°áģŖt thích", "keyboard_shortcuts.federated": "máģŸ máēĄng liÃĒn háģŖp", "keyboard_shortcuts.heading": "Danh sÃĄch phím táē¯t", - "keyboard_shortcuts.home": "máģŸ trang chính", + "keyboard_shortcuts.home": "máģŸ trang cháģ§", "keyboard_shortcuts.hotkey": "Phím táē¯t", "keyboard_shortcuts.legend": "hiáģ‡n báēŖng hÆ°áģ›ng dáēĢn này", "keyboard_shortcuts.local": "máģŸ mÃĄy cháģ§ cáģ§a báēĄn", "keyboard_shortcuts.mention": "nháē¯c đáēŋn ai đÃŗ", "keyboard_shortcuts.muted": "máģŸ danh sÃĄch ngÆ°áģi đÃŖ áēŠn", "keyboard_shortcuts.my_profile": "máģŸ háģ“ sÆĄ cáģ§a báēĄn", - "keyboard_shortcuts.notifications": "máģŸ máģĨc thông bÃĄo", + "keyboard_shortcuts.notifications": "máģŸ thông bÃĄo", "keyboard_shortcuts.open_media": "máģŸ áēŖnh hoáēˇc video", - "keyboard_shortcuts.pinned": "máģŸ danh sÃĄch tÃēt ghim", - "keyboard_shortcuts.profile": "máģŸ háģ“ sÆĄ cáģ§a ngÆ°áģi viáēŋt tÃēt", + "keyboard_shortcuts.pinned": "Open pinned posts list", + "keyboard_shortcuts.profile": "máģŸ trang cáģ§a ngÆ°áģi đăng tÃēt", "keyboard_shortcuts.reply": "tráēŖ láģi", "keyboard_shortcuts.requests": "máģŸ danh sÃĄch yÃĒu cáē§u theo dÃĩi", "keyboard_shortcuts.search": "máģŸ tÃŦm kiáēŋm", "keyboard_shortcuts.spoilers": "hiáģ‡n/áēŠn náģ™i dung nháēĄy cáēŖm", - "keyboard_shortcuts.start": "máģŸ máģĨc \"Dành cho ngÆ°áģi máģ›i\"", - "keyboard_shortcuts.toggle_hidden": "áēŠn/hiáģ‡n văn báēŖn bÃĒn dÆ°áģ›i spoil", + "keyboard_shortcuts.start": "máģŸ \"Dành cho ngÆ°áģi máģ›i\"", + "keyboard_shortcuts.toggle_hidden": "áēŠn/hiáģ‡n náģ™i dung áēŠn", "keyboard_shortcuts.toggle_sensitivity": "áēŠn/hiáģ‡n áēŖnh hoáēˇc video", - "keyboard_shortcuts.toot": "viáēŋt tÃēt máģ›i", + "keyboard_shortcuts.toot": "soáēĄn tÃēt máģ›i", "keyboard_shortcuts.unfocus": "đưa con tráģ ra kháģi ô soáēĄn tháēŖo hoáēˇc ô tÃŦm kiáēŋm", "keyboard_shortcuts.up": "di chuyáģƒn lÃĒn trÃĒn danh sÃĄch", "lightbox.close": "ĐÃŗng", @@ -403,7 +404,7 @@ "navigation_bar.blocks": "NgÆ°áģi đÃŖ cháēˇn", "navigation_bar.bookmarks": "ĐÃŖ lÆ°u", "navigation_bar.community_timeline": "Cáģ™ng đáģ“ng", - "navigation_bar.compose": "Viáēŋt tÃēt máģ›i", + "navigation_bar.compose": "SoáēĄn tÃēt máģ›i", "navigation_bar.direct": "Nháē¯n riÃĒng", "navigation_bar.discover": "KhÃĄm phÃĄ", "navigation_bar.domain_blocks": "MÃĄy cháģ§ đÃŖ áēŠn", @@ -435,7 +436,7 @@ "notification.poll": "Cuáģ™c bÃŦnh cháģn đÃŖ káēŋt thÃēc", "notification.reblog": "{name} đăng láēĄi tÃēt cáģ§a báēĄn", "notification.status": "{name} đăng tÃēt máģ›i", - "notification.update": "{name} đÃŖ viáēŋt láēĄi máģ™t tÃēt", + "notification.update": "{name} đÃŖ sáģ­a tÃēt", "notifications.clear": "XÃŗa háēŋt thông bÃĄo", "notifications.clear_confirmation": "BáēĄn tháē­t sáģą muáģ‘n xÃŗa vÄŠnh viáģ…n táēĨt cáēŖ thông bÃĄo cáģ§a mÃŦnh?", "notifications.column_settings.admin.report": "BÃĄo cÃĄo máģ›i:", @@ -476,7 +477,7 @@ "onboarding.action.back": "Quay láēĄi", "onboarding.actions.back": "Quay láēĄi", "onboarding.actions.go_to_explore": "Xem nháģ¯ng gÃŦ đang tháģ‹nh hành", - "onboarding.actions.go_to_home": "Đáēŋn trang chính", + "onboarding.actions.go_to_home": "Đáēŋn trang cháģ§", "onboarding.compose.template": "Xin chào #Mastodon!", "onboarding.follows.empty": "Không cÃŗ káēŋt quáēŖ cÃŗ tháģƒ đưáģŖc hiáģƒn tháģ‹ lÃēc này. BáēĄn cÃŗ tháģƒ tháģ­ sáģ­ dáģĨng tính năng tÃŦm kiáēŋm hoáēˇc duyáģ‡t qua trang khÃĄm phÃĄ đáģƒ tÃŦm nháģ¯ng ngÆ°áģi theo dÃĩi hoáēˇc tháģ­ láēĄi sau.", "onboarding.follows.lead": "BáēĄn quáēŖn lÃŊ báēŖng tin cáģ§a riÃĒng báēĄn. BáēĄn càng theo dÃĩi nhiáģu ngÆ°áģi, nÃŗ sáēŊ càng sôi đáģ™ng và thÃē váģ‹. Đáģƒ báē¯t đáē§u, đÃĸy là vài gáģŖi ÃŊ:", @@ -500,7 +501,7 @@ "onboarding.start.skip": "Muáģ‘n báģ qua luôn?", "onboarding.start.title": "Xong ráģ“i báēĄn!", "onboarding.steps.follow_people.body": "Theo dÃĩi nháģ¯ng ngÆ°áģi thÃē váģ‹ trÃĒn Mastodon.", - "onboarding.steps.follow_people.title": "CÃĄ nhÃĸn hÃŗa trang chính", + "onboarding.steps.follow_people.title": "CÃĄ nhÃĸn hÃŗa trang cháģ§", "onboarding.steps.publish_status.body": "Chào cáģ™ng đáģ“ng báēąng láģi nÃŗi, áēŖnh hoáēˇc video {emoji}", "onboarding.steps.publish_status.title": "Đăng tÃēt đáē§u tiÃĒn", "onboarding.steps.setup_profile.body": "TáēĄo sáģą tÆ°ÆĄng tÃĄc báēąng máģ™t háģ“ sÆĄ hoàn cháģ‰nh.", @@ -538,7 +539,7 @@ "recommended": "Đáģ xuáēĨt", "refresh": "Làm máģ›i", "regeneration_indicator.label": "Đang táēŖiâ€Ļ", - "regeneration_indicator.sublabel": "Trang chính cáģ§a báēĄn đang đưáģŖc cáē­p nháē­t!", + "regeneration_indicator.sublabel": "Trang cháģ§ cáģ§a báēĄn đang đưáģŖc cáē­p nháē­t!", "relative_time.days": "{number} ngày", "relative_time.full.days": "{number, plural, other {# ngày}}", "relative_time.full.hours": "{number, plural, other {# giáģ}}", @@ -590,7 +591,7 @@ "report.thanks.title": "Không muáģ‘n xem tháģŠ này?", "report.thanks.title_actionable": "CáēŖm ÆĄn đÃŖ bÃĄo cÃĄo, chÃēng tôi sáēŊ xem xÊt káģš.", "report.unfollow": "Báģ theo dÃĩi @{name}", - "report.unfollow_explanation": "BáēĄn đang theo dÃĩi ngÆ°áģi này. Đáģƒ không tháēĨy tÃēt cáģ§a háģ trÃĒn trang chính náģ¯a, hÃŖy báģ theo dÃĩi.", + "report.unfollow_explanation": "BáēĄn đang theo dÃĩi ngÆ°áģi này. Đáģƒ không tháēĨy tÃēt cáģ§a háģ trÃĒn trang cháģ§ náģ¯a, hÃŖy báģ theo dÃĩi.", "report_notification.attached_statuses": "{count, plural, other {{count} tÃēt}} đính kèm", "report_notification.categories.legal": "PhÃĄp lÃŊ", "report_notification.categories.other": "KhÃĄc", @@ -691,7 +692,7 @@ "subscribed_languages.lead": "Cháģ‰ cÃĄc tÃēt đăng báēąng cÃĄc ngôn ngáģ¯ đÃŖ cháģn máģ›i đưáģŖc xuáēĨt hiáģ‡n trÃĒn báēŖng tin cáģ§a báēĄn. Không cháģn gÃŦ cáēŖ đáģƒ đáģc tÃēt đăng báēąng máģi ngôn ngáģ¯.", "subscribed_languages.save": "LÆ°u thay đáģ•i", "subscribed_languages.target": "Đáģ•i ngôn ngáģ¯ mong muáģ‘n cho {target}", - "tabs_bar.home": "Trang chính", + "tabs_bar.home": "Trang cháģ§", "tabs_bar.notifications": "Thông bÃĄo", "time_remaining.days": "{number, plural, other {# ngày}}", "time_remaining.hours": "{number, plural, other {# giáģ}}", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 5896a25b022aed..008a9636db42b4 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -12,7 +12,6 @@ "account.edit_profile": "âĩ™âĩâ´ŧâĩ âĩ‰â´ŧâĩ”âĩ™", "account.follow": "â´šâ´ŧâĩ•", "account.followers": "âĩ‰âĩŽâ´šâ´ŧâ´°âĩ•âĩ", - "account.follows_you": "â´šâ´ŧâĩ•âĩ â´Ŋâĩ¯âĩ", "account.media": "â´°âĩ™âĩâĩ–âĩŽâĩ‰âĩ™", "account.mute": "âĩĨâĩĨâĩ‰âĩĨâĩ @{name}", "account.muted": "âĩ‰âĩœâĩœâĩ“âĩĨâĩ‰âĩĨâĩ", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 1678fd729376b9..720e4331b3afa2 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "暂无嘟文", "account.featured_tags.title": "{name} įš„į˛žé€‰æ ‡į­ž", "account.follow": "å…ŗæŗ¨", + "account.follow_back": "回å…ŗ", "account.followers": "å…ŗæŗ¨č€…", "account.followers.empty": "į›Žå‰æ— äēēå…ŗæŗ¨æ­¤į”¨æˆˇã€‚", "account.followers_counter": "čĸĢ {counter} äēēå…ŗæŗ¨", "account.following": "æ­Ŗ在å…ŗæŗ¨", "account.following_counter": "æ­Ŗ在å…ŗæŗ¨ {counter} äēē", "account.follows.empty": "æ­¤į”¨æˆˇį›Žå‰æœĒå…ŗæŗ¨äģģäŊ•äēē。", - "account.follows_you": "å…ŗæŗ¨äē†äŊ ", "account.go_to_profile": "前垀ä¸Ēäēēčĩ„æ–™éĄĩ", "account.hide_reblogs": "隐藏æĨč‡Ē @{name} įš„čŊŦ嘟", "account.in_memoriam": "č°¨æ­¤æ‚ŧåŋĩ。", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "å…ŗ闭通įŸĨ", "account.mute_short": "隐藏", "account.muted": "åˇ˛éšč—", + "account.mutual": "äē’į˛‰åĨŊ友", "account.no_bio": "æœĒ提䞛描čŋ°ã€‚", "account.open_original_page": "打åŧ€åŽŸå§‹éĄĩéĸ", "account.posts": "嘟文", @@ -445,7 +446,7 @@ "notifications.column_settings.filter_bar.advanced": "昞į¤ē所有įąģåˆĢ", "notifications.column_settings.filter_bar.category": "åŋĢ速čŋ‡æģ¤æ ", "notifications.column_settings.filter_bar.show_bar": "昞į¤ēčŋ‡æģ¤æ ", - "notifications.column_settings.follow": "新å…ŗæŗ¨č€…īŧš", + "notifications.column_settings.follow": "新į˛‰ä¸īŧš", "notifications.column_settings.follow_request": "新å…ŗæŗ¨č¯ˇæą‚īŧš", "notifications.column_settings.mention": "提及īŧš", "notifications.column_settings.poll": "投įĨ¨įģ“æžœīŧš", @@ -699,7 +700,7 @@ "time_remaining.moments": "åŗ将įģ“束", "time_remaining.seconds": "削äŊ™ {number, plural, one {# į§’} other {# į§’}}", "timeline_hint.remote_resource_not_displayed": "不äŧšæ˜žį¤ēæĨč‡Ēå…ļåŽƒæœåŠĄå™¨įš„{resource}", - "timeline_hint.resources.followers": "å…ŗæŗ¨č€…", + "timeline_hint.resources.followers": "į˛‰ä¸", "timeline_hint.resources.follows": "å…ŗæŗ¨", "timeline_hint.resources.statuses": "æ›´æ—Šįš„嘟文", "trends.counter_by_accounts": "čŋ‡åŽģ {days, plural, other {{days} 夊}}有{count, plural, other { {counter} äēē}}莨čŽē", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 263c707993e127..cd0845b6e2e309 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "æšĢį„Ąæ–‡įĢ ", "account.featured_tags.title": "{name} įš„į˛žé¸æ¨™įą¤", "account.follow": "關æŗ¨", + "account.follow_back": "čŋŊčš¤å°æ–š", "account.followers": "čŋŊ蹤者", "account.followers.empty": "尚æœĒ有äēēčŋŊ蹤這äŊäŊŋį”¨č€…。", "account.followers_counter": "有 {count, plural,one {{counter} 個} other {{counter} 個}}čŋŊ蹤者", "account.following": "æ­Ŗ在čŋŊ蚤", "account.following_counter": "æ­Ŗ在čŋŊ蚤 {count, plural,one {{counter}}other {{counter} äēē}}", "account.follows.empty": "這äŊäŊŋį”¨č€…å°šæœĒčŋŊ蚤äģģäŊ•äēē。", - "account.follows_you": "čŋŊ蚤äŊ ", "account.go_to_profile": "前垀個äēēæĒ”æĄˆ", "account.hide_reblogs": "隱藏 @{name} įš„čŊ‰æŽ¨", "account.in_memoriam": "čŦšæ­¤æ‚ŧåŋĩ。", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "靜éŸŗ通įŸĨ", "account.mute_short": "靜éŸŗ", "account.muted": "靜éŸŗ", + "account.mutual": "äē’į›¸čŋŊ蚤", "account.no_bio": "æœĒ提䞛描čŋ°ã€‚", "account.open_original_page": "打開原始頁éĸ", "account.posts": "帖文", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index e6dd008bf27bcf..99839369535ac8 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -32,13 +32,13 @@ "account.featured_tags.last_status_never": "æ˛’æœ‰å˜Ÿæ–‡", "account.featured_tags.title": "{name} įš„推č–Ļä¸ģéĄŒæ¨™įą¤", "account.follow": "跟隨", + "account.follow_back": "čˇŸéš¨å›žåŽģ", "account.followers": "跟隨者", "account.followers.empty": "尚æœĒ有äēē跟隨這äŊäŊŋį”¨č€…。", - "account.followers_counter": "čĸĢ {count, plural,one {{counter} äēē}other {{counter} äēē}}跟隨", + "account.followers_counter": "čĸĢ {count, plural, other {{counter} äēē}}跟隨", "account.following": "跟隨中", - "account.following_counter": "æ­Ŗåœ¨čˇŸéš¨ {count, plural, one {{counter} äēē} other {{counter} äēē}}", + "account.following_counter": "æ­Ŗåœ¨čˇŸéš¨ {count,plural,other {{counter} äēē}}", "account.follows.empty": "這äŊäŊŋį”¨č€…å°šæœĒ跟隨äģģäŊ•äēē。", - "account.follows_you": "跟隨äē†æ‚¨", "account.go_to_profile": "前垀個äēēæĒ”æĄˆ", "account.hide_reblogs": "隱藏來č‡Ē @{name} įš„čŊ‰å˜Ÿ", "account.in_memoriam": "čŦšæ­¤æ‚ŧåŋĩ。", @@ -53,6 +53,7 @@ "account.mute_notifications_short": "靜éŸŗ推播通įŸĨ", "account.mute_short": "靜éŸŗ", "account.muted": "åˇ˛éœéŸŗ", + "account.mutual": "äē’į›¸čˇŸéš¨", "account.no_bio": "į„Ąå€‹äēēæĒ”æĄˆæčŋ°", "account.open_original_page": "æĒĸčĻ–原始頁éĸ", "account.posts": "嘟文", @@ -72,8 +73,8 @@ "account.unmute_notifications_short": "取æļˆéœéŸŗ推播通įŸĨ", "account.unmute_short": "č§Ŗ除靜éŸŗ", "account_note.placeholder": "按此新åĸžå‚™č¨ģ", - "admin.dashboard.daily_retention": "č¨ģ冊垌äŊŋį”¨č€…å­˜į•™įŽ‡(æ—Ĩ)", - "admin.dashboard.monthly_retention": "č¨ģ冊垌äŊŋį”¨č€…å­˜į•™įŽ‡(月)", + "admin.dashboard.daily_retention": "č¨ģ冊垌äŊŋį”¨č€…å­˜į•™įŽ‡īŧˆæ—Ĩīŧ‰", + "admin.dashboard.monthly_retention": "č¨ģ冊垌äŊŋį”¨č€…å­˜į•™įŽ‡īŧˆæœˆīŧ‰", "admin.dashboard.retention.average": "åšŗ均", "admin.dashboard.retention.cohort": "č¨ģ冊月äģŊ", "admin.dashboard.retention.cohort_size": "新äŊŋį”¨č€…", @@ -103,9 +104,9 @@ "bundle_modal_error.message": "čŧ‰å…Ĩ此元äģļ時į™ŧį”ŸéŒ¯čĒ¤ã€‚", "bundle_modal_error.retry": "重čŠĻ", "closed_registrations.other_server_instructions": "因į‚ē Mastodon 是åŽģ中åŋƒåŒ–įš„īŧŒæ‰€äģĨ您䚟čƒŊæ–ŧå…ļäģ–äŧē服器上åģēįĢ‹å¸ŗ號īŧŒä¸Ļäģį„ļčˆ‡é€™å€‹äŧē服器äē’動。", - "closed_registrations_modal.description": "į›Žå‰į„Ąæŗ•æ–ŧ {domain} åģēįĢ‹æ–°å¸ŗ號īŧŒäŊ†äšŸčĢ‹åˆĨåŋ˜äē†īŧŒæ‚¨ä¸Ļ不一厚需čĻæœ‰ {domain} äŧē服器įš„å¸ŗ號īŧŒäšŸčƒŊäŊŋį”¨ Mastodon 。", + "closed_registrations_modal.description": "į›Žå‰į„Ąæŗ•æ–ŧ {domain} åģēįĢ‹æ–°å¸ŗ號īŧŒäŊ†äšŸčĢ‹åˆĨåŋ˜äē†īŧŒæ‚¨ä¸Ļ不一厚需čĻæœ‰ {domain} äŧē服器įš„å¸ŗ號īŧŒäšŸčƒŊäŊŋį”¨ Mastodon。", "closed_registrations_modal.find_another_server": "尋扞åĻ一個äŧē服器", - "closed_registrations_modal.preamble": "Mastodon 是åŽģ中åŋƒåŒ–įš„īŧŒæ‰€äģĨį„ĄčĢ–您æ–ŧå“Ē個äŧē服器新åĸžå¸ŗ號īŧŒéƒŊ可äģĨčˆ‡æ­¤äŧē服器上įš„äģģäŊ•äēēčˇŸéš¨åŠäē’動。您į”šč‡ŗčƒŊč‡Ē行æžļ一個č‡Ēåˇąįš„äŧē服器īŧ", + "closed_registrations_modal.preamble": "Mastodon 是åŽģ中åŋƒåŒ–įš„īŧŒæ‰€äģĨį„ĄčĢ–您æ–ŧå“Ē個äŧē服器新åĸžå¸ŗ號īŧŒéƒŊ可äģĨčˆ‡æ­¤äŧē服器上įš„äģģäŊ•äēēčˇŸéš¨åŠäē’動。您į”šč‡ŗčƒŊč‡Ē行æžļč¨­ä¸€å€‹č‡Ēåˇąįš„äŧē服器īŧ", "closed_registrations_modal.title": "č¨ģ冊 Mastodon", "column.about": "關æ–ŧ", "column.blocks": "åˇ˛å°éŽ–įš„äŊŋį”¨č€…", @@ -155,7 +156,7 @@ "compose_form.publish_form": "嘟å‡ēåŽģ", "compose_form.publish_loud": "{publish}īŧ", "compose_form.save_changes": "å„˛å­˜čŽŠæ›´", - "compose_form.sensitive.hide": "æ¨™č¨˜åĒ’éĢ”į‚ē敏感內厚", + "compose_form.sensitive.hide": "{count, plural, other {將åĒ’éĢ”æ¨™č¨˜į‚ē敏感內厚}}", "compose_form.sensitive.marked": "æ­¤åĒ’éĢ”čĸĢæ¨™č¨˜į‚ē敏感內厚", "compose_form.sensitive.unmarked": "æ­¤åĒ’éĢ”æœĒčĸĢæ¨™č¨˜į‚ē敏感內厚", "compose_form.spoiler.marked": "į§ģ除內厚č­Ļ告", @@ -452,7 +453,7 @@ "notifications.column_settings.push": "推播通įŸĨ", "notifications.column_settings.reblog": "čŊ‰å˜Ÿīŧš", "notifications.column_settings.show": "æ–ŧæŦ„äŊä¸­éĄ¯į¤ē", - "notifications.column_settings.sound": "æ’­æ”žč˛éŸŗ", + "notifications.column_settings.sound": "播攞éŸŗ效", "notifications.column_settings.status": "新嘟文īŧš", "notifications.column_settings.unread_notifications.category": "æœĒ讀通įŸĨ", "notifications.column_settings.unread_notifications.highlight": "įĒéĄ¯æœĒ讀通įŸĨ", @@ -540,7 +541,7 @@ "regeneration_indicator.label": "čŧ‰å…Ĩ中â€Ļ", "regeneration_indicator.sublabel": "您įš„éĻ–頁時間čģ¸æ­Ŗ在æē–備中īŧ", "relative_time.days": "{number} 夊", - "relative_time.full.days": "{number, plural, one {# 夊} other {# 夊}}前", + "relative_time.full.days": "{number, plural, other {# 夊}}前", "relative_time.full.hours": "{number, plural, one {# 小時} other {# 小時}}前", "relative_time.full.just_now": "剛剛", "relative_time.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}前", @@ -620,7 +621,7 @@ "search_results.see_all": "æĒĸčĻ–全部", "search_results.statuses": "嘟文", "search_results.title": "搜尋īŧš{q}", - "server_banner.about_active_users": "最čŋ‘三十æ—Ĩ內äŊŋį”¨æ­¤äŧē服器įš„äēē (月æ´ģčēäŊŋį”¨č€…)", + "server_banner.about_active_users": "最čŋ‘三十æ—Ĩ內äŊŋį”¨æ­¤äŧē服器įš„äēēīŧˆæœˆæ´ģčēäŊŋį”¨č€…īŧ‰", "server_banner.active_users": "æ´ģčēäŊŋį”¨č€…", "server_banner.administered_by": "įŽĄį†č€…īŧš", "server_banner.introduction": "{domain} 是į”ą {mastodon} 提䞛䚋åŽģ中åŋƒåŒ–į¤žįž¤įļ˛čˇ¯ä¸€éƒ¨åˆ†ã€‚", diff --git a/app/javascript/mastodon/reducers/accounts.ts b/app/javascript/mastodon/reducers/accounts.ts index f7270eb60a574a..5a9cc7220c7624 100644 --- a/app/javascript/mastodon/reducers/accounts.ts +++ b/app/javascript/mastodon/reducers/accounts.ts @@ -1,7 +1,6 @@ +import type { Reducer } from '@reduxjs/toolkit'; import { Map as ImmutableMap } from 'immutable'; -import type { Reducer } from 'redux'; - import { followAccountSuccess, unfollowAccountSuccess, @@ -60,25 +59,19 @@ export const accountsReducer: Reducer = ( return normalizeAccounts(state, action.payload.accounts); else if (followAccountSuccess.match(action)) { return state - .update( - action.payload.relationship.id, - (account) => account?.update('followers_count', (n) => n + 1), + .update(action.payload.relationship.id, (account) => + account?.update('followers_count', (n) => n + 1), ) - .update( - getCurrentUser(), - (account) => account?.update('following_count', (n) => n + 1), + .update(getCurrentUser(), (account) => + account?.update('following_count', (n) => n + 1), ); } else if (unfollowAccountSuccess.match(action)) return state - .update( - action.payload.relationship.id, - (account) => - account?.update('followers_count', (n) => Math.max(0, n - 1)), + .update(action.payload.relationship.id, (account) => + account?.update('followers_count', (n) => Math.max(0, n - 1)), ) - .update( - getCurrentUser(), - (account) => - account?.update('following_count', (n) => Math.max(0, n - 1)), + .update(getCurrentUser(), (account) => + account?.update('following_count', (n) => Math.max(0, n - 1)), ); else return state; }; diff --git a/app/javascript/mastodon/reducers/accounts_map.js b/app/javascript/mastodon/reducers/accounts_map.js index d5ecad7dbfaddf..9053dcc9c0528b 100644 --- a/app/javascript/mastodon/reducers/accounts_map.js +++ b/app/javascript/mastodon/reducers/accounts_map.js @@ -2,8 +2,13 @@ import { Map as ImmutableMap } from 'immutable'; import { ACCOUNT_LOOKUP_FAIL } from '../actions/accounts'; import { importAccounts } from '../actions/accounts_typed'; +import { domain } from '../initial_state'; -export const normalizeForLookup = str => str.toLowerCase(); +export const normalizeForLookup = str => { + str = str.toLowerCase(); + const trailingIndex = str.indexOf(`@${domain.toLowerCase()}`); + return (trailingIndex > 0) ? str.slice(0, trailingIndex) : str; +}; const initialState = ImmutableMap(); diff --git a/app/javascript/mastodon/reducers/media_attachments.js b/app/javascript/mastodon/reducers/media_attachments.js index f145e1dcaac6aa..cbb4933bc7efa8 100644 --- a/app/javascript/mastodon/reducers/media_attachments.js +++ b/app/javascript/mastodon/reducers/media_attachments.js @@ -2,13 +2,6 @@ import { Map as ImmutableMap } from 'immutable'; import { STORE_HYDRATE } from '../actions/store'; -export let currentMedia = null; - -export function setCurrentMedia(value) { - currentMedia = value; -} - - const initialState = ImmutableMap({ accept_content_types: [], }); diff --git a/app/javascript/mastodon/reducers/modal.ts b/app/javascript/mastodon/reducers/modal.ts index 73a2afb916c509..368f26542c0159 100644 --- a/app/javascript/mastodon/reducers/modal.ts +++ b/app/javascript/mastodon/reducers/modal.ts @@ -1,6 +1,5 @@ -import { Record as ImmutableRecord, Stack } from 'immutable'; - import type { Reducer } from '@reduxjs/toolkit'; +import { Record as ImmutableRecord, Stack } from 'immutable'; import { COMPOSE_UPLOAD_CHANGE_SUCCESS } from '../actions/compose'; import type { ModalType } from '../actions/modal'; diff --git a/app/javascript/mastodon/reducers/relationships.ts b/app/javascript/mastodon/reducers/relationships.ts index 2ba61839c7bffa..dcca11b2032d86 100644 --- a/app/javascript/mastodon/reducers/relationships.ts +++ b/app/javascript/mastodon/reducers/relationships.ts @@ -1,7 +1,6 @@ -import { Map as ImmutableMap } from 'immutable'; - import { isFulfilled } from '@reduxjs/toolkit'; -import type { Reducer } from 'redux'; +import type { Reducer } from '@reduxjs/toolkit'; +import { Map as ImmutableMap } from 'immutable'; import type { ApiRelationshipJSON } from 'mastodon/api_types/relationships'; import type { Account } from 'mastodon/models/account'; diff --git a/app/javascript/mastodon/selectors/accounts.ts b/app/javascript/mastodon/selectors/accounts.ts index 66193136c45012..cee3a87bca022a 100644 --- a/app/javascript/mastodon/selectors/accounts.ts +++ b/app/javascript/mastodon/selectors/accounts.ts @@ -1,5 +1,5 @@ +import { createSelector } from '@reduxjs/toolkit'; import { Record as ImmutableRecord } from 'immutable'; -import { createSelector } from 'reselect'; import { accountDefaultValues } from 'mastodon/models/account'; import type { Account, AccountShape } from 'mastodon/models/account'; diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 8a07ba774d8e3c..b1c60403e9ff60 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -1,5 +1,5 @@ +import { createSelector } from '@reduxjs/toolkit'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable'; -import { createSelector } from 'reselect'; import { toServerSideType } from 'mastodon/utils/filters'; diff --git a/app/javascript/mastodon/store/middlewares/errors.ts b/app/javascript/mastodon/store/middlewares/errors.ts index 9f28f5ff53f92b..e11aa7817822a6 100644 --- a/app/javascript/mastodon/store/middlewares/errors.ts +++ b/app/javascript/mastodon/store/middlewares/errors.ts @@ -1,20 +1,34 @@ -import type { AnyAction, Middleware } from 'redux'; +import { isAction } from '@reduxjs/toolkit'; +import type { Action, Middleware } from '@reduxjs/toolkit'; import type { RootState } from '..'; import { showAlertForError } from '../../actions/alerts'; const defaultFailSuffix = 'FAIL'; +const isFailedAction = new RegExp(`${defaultFailSuffix}$`, 'g'); -export const errorsMiddleware: Middleware = +interface ActionWithMaybeAlertParams extends Action { + skipAlert?: boolean; + skipNotFound?: boolean; + error?: unknown; +} + +function isActionWithmaybeAlertParams( + action: unknown, +): action is ActionWithMaybeAlertParams { + return isAction(action); +} + +export const errorsMiddleware: Middleware, RootState> = ({ dispatch }) => (next) => - (action: AnyAction & { skipAlert?: boolean; skipNotFound?: boolean }) => { - if (action.type && !action.skipAlert) { - const isFail = new RegExp(`${defaultFailSuffix}$`, 'g'); - - if (typeof action.type === 'string' && action.type.match(isFail)) { - dispatch(showAlertForError(action.error, action.skipNotFound)); - } + (action) => { + if ( + isActionWithmaybeAlertParams(action) && + !action.skipAlert && + action.type.match(isFailedAction) + ) { + dispatch(showAlertForError(action.error, action.skipNotFound)); } return next(action); diff --git a/app/javascript/mastodon/store/middlewares/loading_bar.ts b/app/javascript/mastodon/store/middlewares/loading_bar.ts index 5fe8000731a879..d259be899b1a5f 100644 --- a/app/javascript/mastodon/store/middlewares/loading_bar.ts +++ b/app/javascript/mastodon/store/middlewares/loading_bar.ts @@ -1,5 +1,13 @@ +import { + isAsyncThunkAction, + isPending as isThunkActionPending, + isFulfilled as isThunkActionFulfilled, + isRejected as isThunkActionRejected, + isAction, +} from '@reduxjs/toolkit'; +import type { Middleware, UnknownAction } from '@reduxjs/toolkit'; + import { showLoading, hideLoading } from 'react-redux-loading-bar'; -import type { AnyAction, Middleware } from 'redux'; import type { RootState } from '..'; @@ -13,33 +21,65 @@ const defaultTypeSuffixes: Config['promiseTypeSuffixes'] = [ 'REJECTED', ]; +interface ActionWithSkipLoading extends UnknownAction { + skipLoading: boolean; +} + +function isActionWithSkipLoading( + action: unknown, +): action is ActionWithSkipLoading { + return ( + isAction(action) && + 'skipLoading' in action && + typeof action.skipLoading === 'boolean' + ); +} + export const loadingBarMiddleware = ( config: Config = {}, -): Middleware => { +): Middleware<{ skipLoading?: boolean }, RootState> => { const promiseTypeSuffixes = config.promiseTypeSuffixes ?? defaultTypeSuffixes; return ({ dispatch }) => (next) => - (action: AnyAction) => { - if (action.type && !action.skipLoading) { + (action) => { + let isPending = false; + let isFulfilled = false; + let isRejected = false; + + if ( + isAsyncThunkAction(action) + // TODO: once we get the first use-case for it, add a check for skipLoading + ) { + if (isThunkActionPending(action)) isPending = true; + else if (isThunkActionFulfilled(action)) isFulfilled = true; + else if (isThunkActionRejected(action)) isRejected = true; + } else if ( + isActionWithSkipLoading(action) && + !action.skipLoading && + typeof action.type === 'string' + ) { const [PENDING, FULFILLED, REJECTED] = promiseTypeSuffixes; - const isPending = new RegExp(`${PENDING}$`, 'g'); - const isFulfilled = new RegExp(`${FULFILLED}$`, 'g'); - const isRejected = new RegExp(`${REJECTED}$`, 'g'); - - if (typeof action.type === 'string') { - if (action.type.match(isPending)) { - dispatch(showLoading()); - } else if ( - action.type.match(isFulfilled) ?? - action.type.match(isRejected) - ) { - dispatch(hideLoading()); - } + const isPendingRegexp = new RegExp(`${PENDING}$`, 'g'); + const isFulfilledRegexp = new RegExp(`${FULFILLED}$`, 'g'); + const isRejectedRegexp = new RegExp(`${REJECTED}$`, 'g'); + + if (action.type.match(isPendingRegexp)) { + isPending = true; + } else if (action.type.match(isFulfilledRegexp)) { + isFulfilled = true; + } else if (action.type.match(isRejectedRegexp)) { + isRejected = true; } } + if (isPending) { + dispatch(showLoading()); + } else if (isFulfilled || isRejected) { + dispatch(hideLoading()); + } + return next(action); }; }; diff --git a/app/javascript/mastodon/store/middlewares/sounds.ts b/app/javascript/mastodon/store/middlewares/sounds.ts index 09ade7d7532d0d..51839f427aee8d 100644 --- a/app/javascript/mastodon/store/middlewares/sounds.ts +++ b/app/javascript/mastodon/store/middlewares/sounds.ts @@ -1,4 +1,5 @@ -import type { Middleware, AnyAction } from 'redux'; +import { isAction } from '@reduxjs/toolkit'; +import type { Middleware, UnknownAction } from '@reduxjs/toolkit'; import ready from 'mastodon/ready'; import { assetHost } from 'mastodon/utils/config'; @@ -10,6 +11,21 @@ interface AudioSource { type: string; } +interface ActionWithMetaSound extends UnknownAction { + meta: { sound: string }; +} + +function isActionWithMetaSound(action: unknown): action is ActionWithMetaSound { + return ( + isAction(action) && + 'meta' in action && + typeof action.meta === 'object' && + !!action.meta && + 'sound' in action.meta && + typeof action.meta.sound === 'string' + ); +} + const createAudio = (sources: AudioSource[]) => { const audio = new Audio(); sources.forEach(({ type, src }) => { @@ -34,7 +50,10 @@ const play = (audio: HTMLAudioElement) => { void audio.play(); }; -export const soundsMiddleware = (): Middleware => { +export const soundsMiddleware = (): Middleware< + Record, + RootState +> => { const soundCache: Record = {}; void ready(() => { @@ -50,15 +69,15 @@ export const soundsMiddleware = (): Middleware => { ]); }); - return () => - (next) => - (action: AnyAction & { meta?: { sound?: string } }) => { - const sound = action.meta?.sound; + return () => (next) => (action) => { + if (isActionWithMetaSound(action)) { + const sound = action.meta.sound; if (sound && Object.hasOwn(soundCache, sound)) { play(soundCache[sound]); } + } - return next(action); - }; + return next(action); + }; }; diff --git a/app/javascript/mastodon/store/typed_functions.ts b/app/javascript/mastodon/store/typed_functions.ts index f1e71385a88ff5..4859b82651ec75 100644 --- a/app/javascript/mastodon/store/typed_functions.ts +++ b/app/javascript/mastodon/store/typed_functions.ts @@ -1,12 +1,11 @@ -import type { TypedUseSelectorHook } from 'react-redux'; -import { useDispatch, useSelector } from 'react-redux'; - import { createAsyncThunk } from '@reduxjs/toolkit'; +// eslint-disable-next-line @typescript-eslint/no-restricted-imports +import { useDispatch, useSelector } from 'react-redux'; import type { AppDispatch, RootState } from './store'; -export const useAppDispatch: () => AppDispatch = useDispatch; -export const useAppSelector: TypedUseSelectorHook = useSelector; +export const useAppDispatch = useDispatch.withTypes(); +export const useAppSelector = useSelector.withTypes(); export const createAppAsyncThunk = createAsyncThunk.withTypes<{ state: RootState; diff --git a/app/javascript/material-icons/400-24px/account_circle-fill.svg b/app/javascript/material-icons/400-24px/account_circle-fill.svg new file mode 100644 index 00000000000000..1bf9d57a31a82e --- /dev/null +++ b/app/javascript/material-icons/400-24px/account_circle-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/account_circle.svg b/app/javascript/material-icons/400-24px/account_circle.svg new file mode 100644 index 00000000000000..ce59194be0b8ef --- /dev/null +++ b/app/javascript/material-icons/400-24px/account_circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/add-fill.svg b/app/javascript/material-icons/400-24px/add-fill.svg new file mode 100644 index 00000000000000..f8bc9309ceb699 --- /dev/null +++ b/app/javascript/material-icons/400-24px/add-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/add.svg b/app/javascript/material-icons/400-24px/add.svg new file mode 100644 index 00000000000000..f8bc9309ceb699 --- /dev/null +++ b/app/javascript/material-icons/400-24px/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/add_photo_alternate-fill.svg b/app/javascript/material-icons/400-24px/add_photo_alternate-fill.svg new file mode 100644 index 00000000000000..deb3f8e0d970d9 --- /dev/null +++ b/app/javascript/material-icons/400-24px/add_photo_alternate-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/add_photo_alternate.svg b/app/javascript/material-icons/400-24px/add_photo_alternate.svg new file mode 100644 index 00000000000000..0ae8ad841cfe37 --- /dev/null +++ b/app/javascript/material-icons/400-24px/add_photo_alternate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/alternate_email-fill.svg b/app/javascript/material-icons/400-24px/alternate_email-fill.svg new file mode 100644 index 00000000000000..7648cf9755e9a2 --- /dev/null +++ b/app/javascript/material-icons/400-24px/alternate_email-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/alternate_email.svg b/app/javascript/material-icons/400-24px/alternate_email.svg new file mode 100644 index 00000000000000..7648cf9755e9a2 --- /dev/null +++ b/app/javascript/material-icons/400-24px/alternate_email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/arrow_back-fill.svg b/app/javascript/material-icons/400-24px/arrow_back-fill.svg new file mode 100644 index 00000000000000..cba0c8b2a8d739 --- /dev/null +++ b/app/javascript/material-icons/400-24px/arrow_back-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/arrow_back.svg b/app/javascript/material-icons/400-24px/arrow_back.svg new file mode 100644 index 00000000000000..cba0c8b2a8d739 --- /dev/null +++ b/app/javascript/material-icons/400-24px/arrow_back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/arrow_drop_down-fill.svg b/app/javascript/material-icons/400-24px/arrow_drop_down-fill.svg new file mode 100644 index 00000000000000..48c72546df140d --- /dev/null +++ b/app/javascript/material-icons/400-24px/arrow_drop_down-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/arrow_drop_down.svg b/app/javascript/material-icons/400-24px/arrow_drop_down.svg new file mode 100644 index 00000000000000..48c72546df140d --- /dev/null +++ b/app/javascript/material-icons/400-24px/arrow_drop_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/arrow_right_alt-fill.svg b/app/javascript/material-icons/400-24px/arrow_right_alt-fill.svg new file mode 100644 index 00000000000000..4bf73bb6daf9f6 --- /dev/null +++ b/app/javascript/material-icons/400-24px/arrow_right_alt-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/arrow_right_alt.svg b/app/javascript/material-icons/400-24px/arrow_right_alt.svg new file mode 100644 index 00000000000000..4bf73bb6daf9f6 --- /dev/null +++ b/app/javascript/material-icons/400-24px/arrow_right_alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/block-fill.svg b/app/javascript/material-icons/400-24px/block-fill.svg new file mode 100644 index 00000000000000..20e9889ae8006c --- /dev/null +++ b/app/javascript/material-icons/400-24px/block-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/block.svg b/app/javascript/material-icons/400-24px/block.svg new file mode 100644 index 00000000000000..20e9889ae8006c --- /dev/null +++ b/app/javascript/material-icons/400-24px/block.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/bookmark-fill.svg b/app/javascript/material-icons/400-24px/bookmark-fill.svg new file mode 100644 index 00000000000000..3a7b4d2e8b3b49 --- /dev/null +++ b/app/javascript/material-icons/400-24px/bookmark-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/bookmark.svg b/app/javascript/material-icons/400-24px/bookmark.svg new file mode 100644 index 00000000000000..a8226a6d87badb --- /dev/null +++ b/app/javascript/material-icons/400-24px/bookmark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/bookmarks-fill.svg b/app/javascript/material-icons/400-24px/bookmarks-fill.svg new file mode 100644 index 00000000000000..f5231f925a273b --- /dev/null +++ b/app/javascript/material-icons/400-24px/bookmarks-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/bookmarks.svg b/app/javascript/material-icons/400-24px/bookmarks.svg new file mode 100644 index 00000000000000..67dffd6857fcbc --- /dev/null +++ b/app/javascript/material-icons/400-24px/bookmarks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/campaign-fill.svg b/app/javascript/material-icons/400-24px/campaign-fill.svg new file mode 100644 index 00000000000000..3df7275bf69c65 --- /dev/null +++ b/app/javascript/material-icons/400-24px/campaign-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/campaign.svg b/app/javascript/material-icons/400-24px/campaign.svg new file mode 100644 index 00000000000000..a6d893fed46832 --- /dev/null +++ b/app/javascript/material-icons/400-24px/campaign.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cancel-fill.svg b/app/javascript/material-icons/400-24px/cancel-fill.svg new file mode 100644 index 00000000000000..f7d476f253735a --- /dev/null +++ b/app/javascript/material-icons/400-24px/cancel-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cancel.svg b/app/javascript/material-icons/400-24px/cancel.svg new file mode 100644 index 00000000000000..8504fbfdad0155 --- /dev/null +++ b/app/javascript/material-icons/400-24px/cancel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cancel_presentation-fill.svg b/app/javascript/material-icons/400-24px/cancel_presentation-fill.svg new file mode 100644 index 00000000000000..8e8e6a1ee62169 --- /dev/null +++ b/app/javascript/material-icons/400-24px/cancel_presentation-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cancel_presentation.svg b/app/javascript/material-icons/400-24px/cancel_presentation.svg new file mode 100644 index 00000000000000..c0da419cd065c4 --- /dev/null +++ b/app/javascript/material-icons/400-24px/cancel_presentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/check-fill.svg b/app/javascript/material-icons/400-24px/check-fill.svg new file mode 100644 index 00000000000000..1655d12bf37e32 --- /dev/null +++ b/app/javascript/material-icons/400-24px/check-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/check.svg b/app/javascript/material-icons/400-24px/check.svg new file mode 100644 index 00000000000000..1655d12bf37e32 --- /dev/null +++ b/app/javascript/material-icons/400-24px/check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/check_box_outline_blank-fill.svg b/app/javascript/material-icons/400-24px/check_box_outline_blank-fill.svg new file mode 100644 index 00000000000000..3f7df315a50d51 --- /dev/null +++ b/app/javascript/material-icons/400-24px/check_box_outline_blank-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/check_box_outline_blank.svg b/app/javascript/material-icons/400-24px/check_box_outline_blank.svg new file mode 100644 index 00000000000000..3f7df315a50d51 --- /dev/null +++ b/app/javascript/material-icons/400-24px/check_box_outline_blank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chevron_left-fill.svg b/app/javascript/material-icons/400-24px/chevron_left-fill.svg new file mode 100644 index 00000000000000..53783746ae6c81 --- /dev/null +++ b/app/javascript/material-icons/400-24px/chevron_left-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chevron_left.svg b/app/javascript/material-icons/400-24px/chevron_left.svg new file mode 100644 index 00000000000000..53783746ae6c81 --- /dev/null +++ b/app/javascript/material-icons/400-24px/chevron_left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chevron_right-fill.svg b/app/javascript/material-icons/400-24px/chevron_right-fill.svg new file mode 100644 index 00000000000000..41004673651a63 --- /dev/null +++ b/app/javascript/material-icons/400-24px/chevron_right-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chevron_right.svg b/app/javascript/material-icons/400-24px/chevron_right.svg new file mode 100644 index 00000000000000..41004673651a63 --- /dev/null +++ b/app/javascript/material-icons/400-24px/chevron_right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/close-fill.svg b/app/javascript/material-icons/400-24px/close-fill.svg new file mode 100644 index 00000000000000..5a60c58e77bd20 --- /dev/null +++ b/app/javascript/material-icons/400-24px/close-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/close.svg b/app/javascript/material-icons/400-24px/close.svg new file mode 100644 index 00000000000000..5a60c58e77bd20 --- /dev/null +++ b/app/javascript/material-icons/400-24px/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/content_copy-fill.svg b/app/javascript/material-icons/400-24px/content_copy-fill.svg new file mode 100644 index 00000000000000..dabf0945034edb --- /dev/null +++ b/app/javascript/material-icons/400-24px/content_copy-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/content_copy.svg b/app/javascript/material-icons/400-24px/content_copy.svg new file mode 100644 index 00000000000000..d875c84491f4b2 --- /dev/null +++ b/app/javascript/material-icons/400-24px/content_copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/delete-fill.svg b/app/javascript/material-icons/400-24px/delete-fill.svg new file mode 100644 index 00000000000000..59d1abb8bcdaed --- /dev/null +++ b/app/javascript/material-icons/400-24px/delete-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/delete.svg b/app/javascript/material-icons/400-24px/delete.svg new file mode 100644 index 00000000000000..560d174b9b0f06 --- /dev/null +++ b/app/javascript/material-icons/400-24px/delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/delete_forever-fill.svg b/app/javascript/material-icons/400-24px/delete_forever-fill.svg new file mode 100644 index 00000000000000..40fe4497f51b99 --- /dev/null +++ b/app/javascript/material-icons/400-24px/delete_forever-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/delete_forever.svg b/app/javascript/material-icons/400-24px/delete_forever.svg new file mode 100644 index 00000000000000..763f517d1d8deb --- /dev/null +++ b/app/javascript/material-icons/400-24px/delete_forever.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/description-fill.svg b/app/javascript/material-icons/400-24px/description-fill.svg new file mode 100644 index 00000000000000..07998b29d6125e --- /dev/null +++ b/app/javascript/material-icons/400-24px/description-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/description.svg b/app/javascript/material-icons/400-24px/description.svg new file mode 100644 index 00000000000000..309a4f5b382c60 --- /dev/null +++ b/app/javascript/material-icons/400-24px/description.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/done-fill.svg b/app/javascript/material-icons/400-24px/done-fill.svg new file mode 100644 index 00000000000000..1655d12bf37e32 --- /dev/null +++ b/app/javascript/material-icons/400-24px/done-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/done.svg b/app/javascript/material-icons/400-24px/done.svg new file mode 100644 index 00000000000000..1655d12bf37e32 --- /dev/null +++ b/app/javascript/material-icons/400-24px/done.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/done_all-fill.svg b/app/javascript/material-icons/400-24px/done_all-fill.svg new file mode 100644 index 00000000000000..8f05228c40abd5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/done_all-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/done_all.svg b/app/javascript/material-icons/400-24px/done_all.svg new file mode 100644 index 00000000000000..8f05228c40abd5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/done_all.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/download-fill.svg b/app/javascript/material-icons/400-24px/download-fill.svg new file mode 100644 index 00000000000000..6a171ea82267d0 --- /dev/null +++ b/app/javascript/material-icons/400-24px/download-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/download.svg b/app/javascript/material-icons/400-24px/download.svg new file mode 100644 index 00000000000000..6a171ea82267d0 --- /dev/null +++ b/app/javascript/material-icons/400-24px/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/edit-fill.svg b/app/javascript/material-icons/400-24px/edit-fill.svg new file mode 100644 index 00000000000000..278e79978e758a --- /dev/null +++ b/app/javascript/material-icons/400-24px/edit-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/edit.svg b/app/javascript/material-icons/400-24px/edit.svg new file mode 100644 index 00000000000000..cb81b1130264a2 --- /dev/null +++ b/app/javascript/material-icons/400-24px/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/edit_note-fill.svg b/app/javascript/material-icons/400-24px/edit_note-fill.svg new file mode 100644 index 00000000000000..b18db1df8ead63 --- /dev/null +++ b/app/javascript/material-icons/400-24px/edit_note-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/edit_note.svg b/app/javascript/material-icons/400-24px/edit_note.svg new file mode 100644 index 00000000000000..cf7e98405adae9 --- /dev/null +++ b/app/javascript/material-icons/400-24px/edit_note.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/expand_more-fill.svg b/app/javascript/material-icons/400-24px/expand_more-fill.svg new file mode 100644 index 00000000000000..0c8f273596051f --- /dev/null +++ b/app/javascript/material-icons/400-24px/expand_more-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/expand_more.svg b/app/javascript/material-icons/400-24px/expand_more.svg new file mode 100644 index 00000000000000..0c8f273596051f --- /dev/null +++ b/app/javascript/material-icons/400-24px/expand_more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/find_in_page-fill.svg b/app/javascript/material-icons/400-24px/find_in_page-fill.svg new file mode 100644 index 00000000000000..146f838a278417 --- /dev/null +++ b/app/javascript/material-icons/400-24px/find_in_page-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/find_in_page.svg b/app/javascript/material-icons/400-24px/find_in_page.svg new file mode 100644 index 00000000000000..f21c2786cab932 --- /dev/null +++ b/app/javascript/material-icons/400-24px/find_in_page.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/flag-fill.svg b/app/javascript/material-icons/400-24px/flag-fill.svg new file mode 100644 index 00000000000000..e44a94d90bc47b --- /dev/null +++ b/app/javascript/material-icons/400-24px/flag-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/flag.svg b/app/javascript/material-icons/400-24px/flag.svg new file mode 100644 index 00000000000000..cb4c810e08a5e5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/fullscreen-fill.svg b/app/javascript/material-icons/400-24px/fullscreen-fill.svg new file mode 100644 index 00000000000000..940c878a7d3b10 --- /dev/null +++ b/app/javascript/material-icons/400-24px/fullscreen-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/fullscreen.svg b/app/javascript/material-icons/400-24px/fullscreen.svg new file mode 100644 index 00000000000000..940c878a7d3b10 --- /dev/null +++ b/app/javascript/material-icons/400-24px/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/fullscreen_exit-fill.svg b/app/javascript/material-icons/400-24px/fullscreen_exit-fill.svg new file mode 100644 index 00000000000000..d9d45a6c6ac930 --- /dev/null +++ b/app/javascript/material-icons/400-24px/fullscreen_exit-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/fullscreen_exit.svg b/app/javascript/material-icons/400-24px/fullscreen_exit.svg new file mode 100644 index 00000000000000..d9d45a6c6ac930 --- /dev/null +++ b/app/javascript/material-icons/400-24px/fullscreen_exit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/group-fill.svg b/app/javascript/material-icons/400-24px/group-fill.svg new file mode 100644 index 00000000000000..c0d6cef5c555ad --- /dev/null +++ b/app/javascript/material-icons/400-24px/group-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/group.svg b/app/javascript/material-icons/400-24px/group.svg new file mode 100644 index 00000000000000..dbc2c937e4c4f0 --- /dev/null +++ b/app/javascript/material-icons/400-24px/group.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/home-fill.svg b/app/javascript/material-icons/400-24px/home-fill.svg new file mode 100644 index 00000000000000..e25441638048b7 --- /dev/null +++ b/app/javascript/material-icons/400-24px/home-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/home.svg b/app/javascript/material-icons/400-24px/home.svg new file mode 100644 index 00000000000000..d700ddea7baf8a --- /dev/null +++ b/app/javascript/material-icons/400-24px/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/info-fill.svg b/app/javascript/material-icons/400-24px/info-fill.svg new file mode 100644 index 00000000000000..0232e17ad0a438 --- /dev/null +++ b/app/javascript/material-icons/400-24px/info-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/info.svg b/app/javascript/material-icons/400-24px/info.svg new file mode 100644 index 00000000000000..05606f4e59e3de --- /dev/null +++ b/app/javascript/material-icons/400-24px/info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/insert_chart-fill.svg b/app/javascript/material-icons/400-24px/insert_chart-fill.svg new file mode 100644 index 00000000000000..12d137ca893540 --- /dev/null +++ b/app/javascript/material-icons/400-24px/insert_chart-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/insert_chart.svg b/app/javascript/material-icons/400-24px/insert_chart.svg new file mode 100644 index 00000000000000..4f2a10be597a20 --- /dev/null +++ b/app/javascript/material-icons/400-24px/insert_chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/link-fill.svg b/app/javascript/material-icons/400-24px/link-fill.svg new file mode 100644 index 00000000000000..319a0681c4f139 --- /dev/null +++ b/app/javascript/material-icons/400-24px/link-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/link.svg b/app/javascript/material-icons/400-24px/link.svg new file mode 100644 index 00000000000000..319a0681c4f139 --- /dev/null +++ b/app/javascript/material-icons/400-24px/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list_alt-fill.svg b/app/javascript/material-icons/400-24px/list_alt-fill.svg new file mode 100644 index 00000000000000..6aa8b508236b31 --- /dev/null +++ b/app/javascript/material-icons/400-24px/list_alt-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list_alt.svg b/app/javascript/material-icons/400-24px/list_alt.svg new file mode 100644 index 00000000000000..cca8ab195554a9 --- /dev/null +++ b/app/javascript/material-icons/400-24px/list_alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/lock-fill.svg b/app/javascript/material-icons/400-24px/lock-fill.svg new file mode 100644 index 00000000000000..0815d784181ce1 --- /dev/null +++ b/app/javascript/material-icons/400-24px/lock-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/lock.svg b/app/javascript/material-icons/400-24px/lock.svg new file mode 100644 index 00000000000000..20b9e3984ec95a --- /dev/null +++ b/app/javascript/material-icons/400-24px/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/lock_open-fill.svg b/app/javascript/material-icons/400-24px/lock_open-fill.svg new file mode 100644 index 00000000000000..60309dce5e731c --- /dev/null +++ b/app/javascript/material-icons/400-24px/lock_open-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/lock_open.svg b/app/javascript/material-icons/400-24px/lock_open.svg new file mode 100644 index 00000000000000..824c70b7c45aea --- /dev/null +++ b/app/javascript/material-icons/400-24px/lock_open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/logout-fill.svg b/app/javascript/material-icons/400-24px/logout-fill.svg new file mode 100644 index 00000000000000..4881453501600f --- /dev/null +++ b/app/javascript/material-icons/400-24px/logout-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/logout.svg b/app/javascript/material-icons/400-24px/logout.svg new file mode 100644 index 00000000000000..4881453501600f --- /dev/null +++ b/app/javascript/material-icons/400-24px/logout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/menu-fill.svg b/app/javascript/material-icons/400-24px/menu-fill.svg new file mode 100644 index 00000000000000..2f427e91c893dc --- /dev/null +++ b/app/javascript/material-icons/400-24px/menu-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/menu.svg b/app/javascript/material-icons/400-24px/menu.svg new file mode 100644 index 00000000000000..2f427e91c893dc --- /dev/null +++ b/app/javascript/material-icons/400-24px/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/more_horiz-fill.svg b/app/javascript/material-icons/400-24px/more_horiz-fill.svg new file mode 100644 index 00000000000000..e777154892a1df --- /dev/null +++ b/app/javascript/material-icons/400-24px/more_horiz-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/more_horiz.svg b/app/javascript/material-icons/400-24px/more_horiz.svg new file mode 100644 index 00000000000000..e777154892a1df --- /dev/null +++ b/app/javascript/material-icons/400-24px/more_horiz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/music_note-fill.svg b/app/javascript/material-icons/400-24px/music_note-fill.svg new file mode 100644 index 00000000000000..b10ad1921ad5b3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/music_note-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/music_note.svg b/app/javascript/material-icons/400-24px/music_note.svg new file mode 100644 index 00000000000000..b10ad1921ad5b3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/music_note.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/notifications-fill.svg b/app/javascript/material-icons/400-24px/notifications-fill.svg new file mode 100644 index 00000000000000..0730efefca145f --- /dev/null +++ b/app/javascript/material-icons/400-24px/notifications-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/notifications.svg b/app/javascript/material-icons/400-24px/notifications.svg new file mode 100644 index 00000000000000..dbfe0e04091612 --- /dev/null +++ b/app/javascript/material-icons/400-24px/notifications.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/notifications_active-fill.svg b/app/javascript/material-icons/400-24px/notifications_active-fill.svg new file mode 100644 index 00000000000000..856a0ed8a5e4f2 --- /dev/null +++ b/app/javascript/material-icons/400-24px/notifications_active-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/notifications_active.svg b/app/javascript/material-icons/400-24px/notifications_active.svg new file mode 100644 index 00000000000000..1389a10e0aca1e --- /dev/null +++ b/app/javascript/material-icons/400-24px/notifications_active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/open_in_new-fill.svg b/app/javascript/material-icons/400-24px/open_in_new-fill.svg new file mode 100644 index 00000000000000..42895ffd1376f5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/open_in_new-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/open_in_new.svg b/app/javascript/material-icons/400-24px/open_in_new.svg new file mode 100644 index 00000000000000..42895ffd1376f5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/open_in_new.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/pause-fill.svg b/app/javascript/material-icons/400-24px/pause-fill.svg new file mode 100644 index 00000000000000..fc9a8074de0186 --- /dev/null +++ b/app/javascript/material-icons/400-24px/pause-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/pause.svg b/app/javascript/material-icons/400-24px/pause.svg new file mode 100644 index 00000000000000..95bc792fc3368f --- /dev/null +++ b/app/javascript/material-icons/400-24px/pause.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person-fill.svg b/app/javascript/material-icons/400-24px/person-fill.svg new file mode 100644 index 00000000000000..73ef1efc1040ac --- /dev/null +++ b/app/javascript/material-icons/400-24px/person-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person.svg b/app/javascript/material-icons/400-24px/person.svg new file mode 100644 index 00000000000000..a3f6b246c83140 --- /dev/null +++ b/app/javascript/material-icons/400-24px/person.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_add-fill.svg b/app/javascript/material-icons/400-24px/person_add-fill.svg new file mode 100644 index 00000000000000..3fa7f65288b965 --- /dev/null +++ b/app/javascript/material-icons/400-24px/person_add-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_add.svg b/app/javascript/material-icons/400-24px/person_add.svg new file mode 100644 index 00000000000000..39b592bf04edea --- /dev/null +++ b/app/javascript/material-icons/400-24px/person_add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/play_arrow-fill.svg b/app/javascript/material-icons/400-24px/play_arrow-fill.svg new file mode 100644 index 00000000000000..6465b9022234a0 --- /dev/null +++ b/app/javascript/material-icons/400-24px/play_arrow-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/play_arrow.svg b/app/javascript/material-icons/400-24px/play_arrow.svg new file mode 100644 index 00000000000000..52f0fcc9c4c9f3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/play_arrow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/public-fill.svg b/app/javascript/material-icons/400-24px/public-fill.svg new file mode 100644 index 00000000000000..1e9e79de4db6c1 --- /dev/null +++ b/app/javascript/material-icons/400-24px/public-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/public.svg b/app/javascript/material-icons/400-24px/public.svg new file mode 100644 index 00000000000000..1e9e79de4db6c1 --- /dev/null +++ b/app/javascript/material-icons/400-24px/public.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/push_pin-fill.svg b/app/javascript/material-icons/400-24px/push_pin-fill.svg new file mode 100644 index 00000000000000..6095ba77eeb447 --- /dev/null +++ b/app/javascript/material-icons/400-24px/push_pin-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/push_pin.svg b/app/javascript/material-icons/400-24px/push_pin.svg new file mode 100644 index 00000000000000..e1abd900a7d930 --- /dev/null +++ b/app/javascript/material-icons/400-24px/push_pin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/question_mark-fill.svg b/app/javascript/material-icons/400-24px/question_mark-fill.svg new file mode 100644 index 00000000000000..9b02086c4d8756 --- /dev/null +++ b/app/javascript/material-icons/400-24px/question_mark-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/question_mark.svg b/app/javascript/material-icons/400-24px/question_mark.svg new file mode 100644 index 00000000000000..9b02086c4d8756 --- /dev/null +++ b/app/javascript/material-icons/400-24px/question_mark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/rectangle-fill.svg b/app/javascript/material-icons/400-24px/rectangle-fill.svg new file mode 100644 index 00000000000000..64b038f2685076 --- /dev/null +++ b/app/javascript/material-icons/400-24px/rectangle-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/rectangle.svg b/app/javascript/material-icons/400-24px/rectangle.svg new file mode 100644 index 00000000000000..ada92f2cf55c13 --- /dev/null +++ b/app/javascript/material-icons/400-24px/rectangle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/refresh-fill.svg b/app/javascript/material-icons/400-24px/refresh-fill.svg new file mode 100644 index 00000000000000..a7a6bc801bd08b --- /dev/null +++ b/app/javascript/material-icons/400-24px/refresh-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/refresh.svg b/app/javascript/material-icons/400-24px/refresh.svg new file mode 100644 index 00000000000000..a7a6bc801bd08b --- /dev/null +++ b/app/javascript/material-icons/400-24px/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/repeat-fill.svg b/app/javascript/material-icons/400-24px/repeat-fill.svg new file mode 100644 index 00000000000000..c1b09d80262e9e --- /dev/null +++ b/app/javascript/material-icons/400-24px/repeat-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/repeat.svg b/app/javascript/material-icons/400-24px/repeat.svg new file mode 100644 index 00000000000000..c1b09d80262e9e --- /dev/null +++ b/app/javascript/material-icons/400-24px/repeat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/reply-fill.svg b/app/javascript/material-icons/400-24px/reply-fill.svg new file mode 100644 index 00000000000000..eb661f2823a560 --- /dev/null +++ b/app/javascript/material-icons/400-24px/reply-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/reply.svg b/app/javascript/material-icons/400-24px/reply.svg new file mode 100644 index 00000000000000..eb661f2823a560 --- /dev/null +++ b/app/javascript/material-icons/400-24px/reply.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/reply_all-fill.svg b/app/javascript/material-icons/400-24px/reply_all-fill.svg new file mode 100644 index 00000000000000..74c9573eaf7cbd --- /dev/null +++ b/app/javascript/material-icons/400-24px/reply_all-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/reply_all.svg b/app/javascript/material-icons/400-24px/reply_all.svg new file mode 100644 index 00000000000000..74c9573eaf7cbd --- /dev/null +++ b/app/javascript/material-icons/400-24px/reply_all.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/search-fill.svg b/app/javascript/material-icons/400-24px/search-fill.svg new file mode 100644 index 00000000000000..ef0d0521eb034c --- /dev/null +++ b/app/javascript/material-icons/400-24px/search-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/search.svg b/app/javascript/material-icons/400-24px/search.svg new file mode 100644 index 00000000000000..ef0d0521eb034c --- /dev/null +++ b/app/javascript/material-icons/400-24px/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/settings-fill.svg b/app/javascript/material-icons/400-24px/settings-fill.svg new file mode 100644 index 00000000000000..f1334795028828 --- /dev/null +++ b/app/javascript/material-icons/400-24px/settings-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/settings.svg b/app/javascript/material-icons/400-24px/settings.svg new file mode 100644 index 00000000000000..817c782f0591e4 --- /dev/null +++ b/app/javascript/material-icons/400-24px/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/share-fill.svg b/app/javascript/material-icons/400-24px/share-fill.svg new file mode 100644 index 00000000000000..5a6b0d0a8dd7d9 --- /dev/null +++ b/app/javascript/material-icons/400-24px/share-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/share.svg b/app/javascript/material-icons/400-24px/share.svg new file mode 100644 index 00000000000000..6876cd42dad667 --- /dev/null +++ b/app/javascript/material-icons/400-24px/share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/smart_toy-fill.svg b/app/javascript/material-icons/400-24px/smart_toy-fill.svg new file mode 100644 index 00000000000000..df417f5ff7c4c3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/smart_toy-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/smart_toy.svg b/app/javascript/material-icons/400-24px/smart_toy.svg new file mode 100644 index 00000000000000..b84efc73b18ae4 --- /dev/null +++ b/app/javascript/material-icons/400-24px/smart_toy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/star-fill.svg b/app/javascript/material-icons/400-24px/star-fill.svg new file mode 100644 index 00000000000000..cb2231e63436ba --- /dev/null +++ b/app/javascript/material-icons/400-24px/star-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/star.svg b/app/javascript/material-icons/400-24px/star.svg new file mode 100644 index 00000000000000..1736e085d0683a --- /dev/null +++ b/app/javascript/material-icons/400-24px/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/tag-fill.svg b/app/javascript/material-icons/400-24px/tag-fill.svg new file mode 100644 index 00000000000000..ce76d537b32070 --- /dev/null +++ b/app/javascript/material-icons/400-24px/tag-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/tag.svg b/app/javascript/material-icons/400-24px/tag.svg new file mode 100644 index 00000000000000..ce76d537b32070 --- /dev/null +++ b/app/javascript/material-icons/400-24px/tag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/tune-fill.svg b/app/javascript/material-icons/400-24px/tune-fill.svg new file mode 100644 index 00000000000000..887f8bd498ad68 --- /dev/null +++ b/app/javascript/material-icons/400-24px/tune-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/tune.svg b/app/javascript/material-icons/400-24px/tune.svg new file mode 100644 index 00000000000000..887f8bd498ad68 --- /dev/null +++ b/app/javascript/material-icons/400-24px/tune.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/upload_file-fill.svg b/app/javascript/material-icons/400-24px/upload_file-fill.svg new file mode 100644 index 00000000000000..639d77af369316 --- /dev/null +++ b/app/javascript/material-icons/400-24px/upload_file-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/upload_file.svg b/app/javascript/material-icons/400-24px/upload_file.svg new file mode 100644 index 00000000000000..40ce5b65e5c9d7 --- /dev/null +++ b/app/javascript/material-icons/400-24px/upload_file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/visibility-fill.svg b/app/javascript/material-icons/400-24px/visibility-fill.svg new file mode 100644 index 00000000000000..44b5f4c6061bd3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/visibility-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/visibility.svg b/app/javascript/material-icons/400-24px/visibility.svg new file mode 100644 index 00000000000000..8fe45d09af6004 --- /dev/null +++ b/app/javascript/material-icons/400-24px/visibility.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/visibility_off-fill.svg b/app/javascript/material-icons/400-24px/visibility_off-fill.svg new file mode 100644 index 00000000000000..e21fbd88dfe594 --- /dev/null +++ b/app/javascript/material-icons/400-24px/visibility_off-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/visibility_off.svg b/app/javascript/material-icons/400-24px/visibility_off.svg new file mode 100644 index 00000000000000..d98cf8d942c86a --- /dev/null +++ b/app/javascript/material-icons/400-24px/visibility_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/volume_off-fill.svg b/app/javascript/material-icons/400-24px/volume_off-fill.svg new file mode 100644 index 00000000000000..b3d12d4d98c880 --- /dev/null +++ b/app/javascript/material-icons/400-24px/volume_off-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/volume_off.svg b/app/javascript/material-icons/400-24px/volume_off.svg new file mode 100644 index 00000000000000..a0acf63747aff3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/volume_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/volume_up-fill.svg b/app/javascript/material-icons/400-24px/volume_up-fill.svg new file mode 100644 index 00000000000000..dd5771215e0421 --- /dev/null +++ b/app/javascript/material-icons/400-24px/volume_up-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/volume_up.svg b/app/javascript/material-icons/400-24px/volume_up.svg new file mode 100644 index 00000000000000..fd9006a6d27d3b --- /dev/null +++ b/app/javascript/material-icons/400-24px/volume_up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/LICENSE b/app/javascript/material-icons/LICENSE new file mode 100644 index 00000000000000..d645695673349e --- /dev/null +++ b/app/javascript/material-icons/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/app/javascript/material-icons/README.md b/app/javascript/material-icons/README.md new file mode 100644 index 00000000000000..1479cb225524d0 --- /dev/null +++ b/app/javascript/material-icons/README.md @@ -0,0 +1 @@ +Files in this directory are Material Symbols icons fetched using the `icons:download` task. diff --git a/app/javascript/packs/inert.js b/app/javascript/packs/inert.js new file mode 100644 index 00000000000000..7c04a97fafd8a6 --- /dev/null +++ b/app/javascript/packs/inert.js @@ -0,0 +1,4 @@ +/* Placeholder file to have `inert.scss` compiled by Webpack + This is used by the `wicg-inert` polyfill */ + +import '../styles/inert.scss'; diff --git a/app/javascript/styles/fonts/inter.scss b/app/javascript/styles/fonts/inter.scss new file mode 100644 index 00000000000000..bb4899b701efd3 --- /dev/null +++ b/app/javascript/styles/fonts/inter.scss @@ -0,0 +1,8 @@ +@font-face { + font-family: Inter; + src: url('../fonts/inter/inter-variable-font-slnt-wght.woff2') + format('woff2-variations'); + font-weight: 100 900; + font-style: normal; + mso-generic-font-family: swiss; /* stylelint-disable-line property-no-unknown -- Proprietary property for Outlook on Windows. */ +} diff --git a/public/inert.css b/app/javascript/styles/inert.scss similarity index 78% rename from public/inert.css rename to app/javascript/styles/inert.scss index 54e10616d2e22f..a60045d7be80b2 100644 --- a/public/inert.css +++ b/app/javascript/styles/inert.scss @@ -1,3 +1,5 @@ +/* This is needed for the wicg-inert polyfill */ + [inert] { pointer-events: none; cursor: default; diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index 92d00cae8b14e1..a2cbb494b4a05b 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -1,574 +1,620 @@ -@import 'mastodon/variables'; -@import 'fonts/roboto'; +@import 'fonts/inter'; -table, -td, -div { - box-sizing: border-box; -} - -html, body { - width: 100% !important; - min-width: 100%; + accent-color: #6364ff; + word-break: break-word; margin: 0; + background-color: #f3f2f5; padding: 0; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: none; + text-size-adjust: none; } -.email-body { - td, - div, - a, - span { - line-height: inherit; - } -} - -a { - &, - &:visited, - span { - text-decoration: none; - color: $ui-highlight-color; - } - - #outlook & { - padding: 0; - } +p, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + background-color: transparent; + padding: 0; + border: none; + font-family: Inter, 'Lucida Grande', sans-serif; } img { - outline: none; - border: 0; - text-decoration: none; - -ms-interpolation-mode: bicubic; - clear: both; - line-height: 100%; + max-width: 100%; + height: auto; + border: none; + text-indent: 0; + vertical-align: middle; + color: inherit; + font-family: inherit; } table { - border-spacing: 0; - mso-table-lspace: 0; - mso-table-rspace: 0; + border: none; } -td { - vertical-align: top; +table + p { + margin-top: 16px; } -.auto-dir { - p { - unicode-bidi: plaintext; - } - - a { - unicode-bidi: isolate; - } +.email { + min-width: 280px; + font-family: Inter, 'Lucida Grande', sans-serif; + word-break: break-word; + color: #17063b; + background-color: #f3f2f5; } -.email-table, -.content-section, -.column, -.column-cell { +.email-container { + max-width: 740px; + margin: 0 auto; width: 100%; - min-width: 100%; } -.email-body { - font-size: 0 !important; - line-height: 100%; - text-align: center; - padding-left: 16px; - padding-right: 16px; -} - -.email-start { - padding-top: 32px; +// Outer email card +.email-card-table { + border-collapse: collapse; + width: 100%; } -.email-end { - padding-bottom: 32px; +.email-card-td { + overflow: hidden; + box-shadow: 0 4px 16px 0 rgba(23, 6, 59, 4%); + background-color: #fff; } -.email-body, -html, -body { - background-color: lighten($ui-base-color, 4%); -} - -.email-container, -.email-row, -.col-0, -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6 { - font-size: 0; - display: inline-block; +// Inner email card +.email-inner-card-table { + border-collapse: separate; width: 100%; - min-width: 100%; - min-width: 0 !important; - vertical-align: top; + border-radius: 12px; } -.content-cell { - width: 100%; - min-width: 100%; - min-width: 0 !important; +.email-inner-card-td-without-padding, +.email-inner-card-td { + border-radius: 12px; + overflow: hidden; + box-shadow: 0 4px 16px 0 rgba(23, 6, 59, 8%); + background-color: #fff; + border: 1px solid #dfdee3; } -.column-cell { - padding-top: 16px; - padding-bottom: 16px; - vertical-align: top; - - &.button-cell { - padding-top: 0; - } +.email-inner-card-td { + padding: 24px; } -.email-container { - max-width: 632px; - margin: 0 auto; - text-align: center; +// Account +.email-account-banner-table { + background-color: #f3f2f5; + border-top-left-radius: 12px; + border-top-right-radius: 12px; } -.email-row { - display: block; - max-width: 600px !important; - margin: 0 auto; - text-align: center; - clear: both; +.email-account-banner-td { + border-top-left-radius: 12px; + border-top-right-radius: 12px; + height: 140px; + vertical-align: bottom; + background-position: center !important; + background-size: cover !important; } -.col-0 { - max-width: 50px; +.email-account-banner-inner-td { + padding: 24px 24px 0; + mso-padding-alt: 24px; } -.col-1 { - max-width: 100px; +.email-account-banner-overlap-div { + max-height: 42px; } -.col-2 { - max-width: 200px; -} +.email-account-banner-icon-table { + width: auto; + margin: 0; + overflow: hidden; + border-radius: 8px; + border-collapse: separate; + background-color: #fff; + border: 2px solid #fff; -.col-3 { - max-width: 300px; + img { + display: block; + max-width: 100%; + border: none; + border-radius: 6px; + } } -.col-4 { - max-width: 400px; +.email-account-body-td { + padding: 56px 24px 24px; + mso-padding-alt: 24px; } -.col-5 { - max-width: 500px; +.email-account-name { + font-size: 16px; + font-weight: 600; + line-height: 24px; + color: #17063b; } -.col-6 { - max-width: 600px; +.email-account-handle { + font-size: 14px; + line-height: 20px; + color: #746a89; } -.column-cell, -.column-cell td, -p { - font-family: Helvetica, Arial, sans-serif; +.email-account-stats-table { + td { + padding-right: 16px; + font-size: 14px; + line-height: 20px; + color: #746a89; + } - @media only screen { - font-family: $font-sans-serif, sans-serif !important; + b { + font-weight: 600; + color: #17063b; + } + + span { + white-space: nowrap; } } -.email-body .column-cell, -.column-cell, -p { - font-size: 15px; - line-height: 23px; - color: $ui-primary-color; - mso-line-height-rule: exactly; - text-rendering: optimizelegibility; +// Utility classes +.email-w-full { + width: 100%; } -p { - display: block; - margin-top: 0; - margin-bottom: 16px; +.email-prose { + p { + color: #17063b; + font-size: 14px; + line-height: 20px; - &.small { - font-size: 13px; - } + &:not(:last-child) { + margin-bottom: 16px; + } + + a:not([class]) { + color: #6364ff; + text-decoration: none; - &.lead { - font-size: 19px; - line-height: 27px; + &:hover { + color: #563acc !important; + } + } } } -h1, -h2, -h3, -h4, -h5, -h6 { - color: $ui-secondary-color; - margin-left: 0; - margin-right: 0; - margin-top: 20px; - margin-bottom: 8px; - padding: 0; - font-weight: 500; +.email-padding-24 { + padding: 24px; } -h1 { - font-size: 26px; - line-height: 36px; +.email-padding-top-24 { + padding-top: 24px; } -h2 { - font-size: 23px; - line-height: 30px; +.email-padding-top-16 { + padding-top: 16px; } -h3 { - font-size: 19px; - line-height: 25px; +.email-padding-top-0 { + padding-top: 0; } -h5 { - font-size: 16px; - line-height: 21px; - font-weight: 700; - color: lighten($ui-base-color, 34%); +.email-border-top { + border-top: 1px solid #dfdee3; } -.input-cell { - h5 { - margin-top: 4px; - } +.email-border-bottom { + border-bottom: 1px solid #dfdee3; } -.input { - td { - background: darken($ui-base-color, 8%); - border-radius: 4px; - padding: 16px; - line-height: 20px; - mso-line-height-rule: exactly; - text-align: center; - font-weight: 500; - font-size: 17px; - } +// Header +.email-header-td { + padding: 16px 32px; + background-color: #1b001f; + background-image: url('../images/mailer-new/common/header-bg-start.png'); + background-position: left top; + background-repeat: repeat; } -.content-cell, -.blank-cell { - width: 100%; - font-size: 0; - text-align: center; - vertical-align: top; - padding-left: 16px; - padding-right: 16px; +.email-header-logo-table { + width: auto; + margin: 0; } -.content-cell { - background-color: darken($ui-base-color, 4%); +.email-header-logo-td { + padding: 16px 0; + font-size: 0; - &.darker { - background-color: darken($ui-base-color, 8%); + img { + color: #fff; + font-size: 16px; + font-weight: bold; + max-height: 40px; } } -.hero { - background-color: $ui-base-color; - padding-top: 20px; -} - -.hero-with-button { - padding-bottom: 16px; - - h1 { - margin-bottom: 4px; - } +.email-header-logo-a { + display: inline-block; - p.lead { - margin-bottom: 32px; + img { + display: inline-block; + color: #fff; } } -.header { - border-radius: 5px 5px 0 0; - background-color: darken($ui-base-color, 8%); +.email-header-logo-div { + max-height: 0; +} - .column-cell { - text-align: center; - padding-top: 20px; - padding-bottom: 8px; - } +.email-header-logo-p { + word-break: break-all; + padding-left: 40px; + padding-top: 26px; + font-size: 11px; + line-height: 13px; + color: #8d808f; + text-align: left; } -.content-start { - padding-top: 32px; +.email-header-logo-span { + display: block; + text-align: right; } -.content-end { - border-radius: 0 0 5px 5px; - padding-top: 16px; +.email-header-heading-td { + padding: 16px 0; } -.footer { - .column-cell, - p { - color: lighten($ui-base-color, 34%); +.email-header-heading-img-td { + width: 56px; + text-align: left; + vertical-align: top; + + img { + width: 56px; + height: 56px; + border-radius: 12px; } +} - p { - margin-bottom: 0; - font-size: 13px; +.email-header-heading-txt-td { + vertical-align: middle; + padding-left: 16px; + padding-right: 16px; - &.small { - margin-bottom: 0; - } + h1 { + margin-bottom: 5px; + color: #fff; + font-size: 24px; + line-height: 28px; + font-weight: 600; } - a { - color: lighten($ui-base-color, 34%); - text-decoration: underline; + p { + color: #a399a5; + font-size: 18px; + line-height: 21.6px; + font-weight: 500; } - img { - opacity: 0.3; + &:only-child { + padding-left: 0; + padding-right: 0; } } -.logo { - position: relative; - left: -4px; +// To make the design work with images off +// we create an empty div that overlaps with +// the rest of the content with a dark background. +.email-header-after-div { + max-height: 0; +} + +.email-header-after-inside-div { + height: 30px; + background-color: #1b001f; } -.button { - display: table; - margin-left: auto; - margin-right: auto; +// Body content +.email-body-td { + background-image: url('../images/mailer-new/common/header-bg-end.png'); + background-position: left top; + background-repeat: no-repeat; +} - td { +.email-body-padding-td { + padding: 0 32px 32px; + mso-padding-alt: 32px; +} + +.email-body-padding-td { + & > p { + font-size: 14px; line-height: 20px; - mso-line-height-rule: exactly; - border-radius: 4px; - text-align: center; - font-weight: 500; - font-size: 17px; - padding: 0 !important; - - a, - a span { - color: $primary-text-color; - display: block !important; - text-align: center !important; - vertical-align: top !important; - line-height: inherit !important; - } + color: #17063b; a { - padding: 10px 22px !important; - line-height: 26px !important; - font-weight: 500 !important; + color: #6364ff; + text-decoration: none; + + &:hover { + color: #563acc !important; + } } } +} - &.button-small { - td { - border-radius: 4px; - font-size: 14px; - padding: 8px 16px; +// Footer +.email-footer-td { + padding: 28px 32px 32px; + text-align: center; +} - a { - padding: 5px 16px !important; - line-height: 26px !important; - } - } +.email-footer-logo-a { + display: inline-block; +} + +.email-footer-p { + color: #9b94ab; + text-align: center; + font-size: 12px; + line-height: 20px; + + a { + color: #9b94ab; + text-decoration: underline; + } + + &:first-child { + margin-bottom: 12px; } } -.button-default { - background-color: darken($ui-base-color, 8%); +// Button +.email-btn-table { + margin: 0; + max-width: 100%; + border-collapse: separate; + border-radius: 8px; + background-color: #6364ff; } -.button-primary { - background-color: darken($ui-highlight-color, 3%); +.email-btn-td { + height: 40px; + text-align: center; + mso-padding-alt: 0 35px; } -.text-center { +.email-btn-a { + display: block; + border-radius: 8px; + padding-left: 35px; + padding-right: 35px; + padding-top: 10px; + padding-bottom: 10px; text-align: center; + font-family: Inter, 'Lucida Grande', sans-serif; + font-size: 14px; + font-weight: 600; + line-height: 20px; + color: #fff; + text-decoration: none; + transition: background-color 0.3s ease-in-out; } -.text-right { - text-align: right; +// Status +.email-status-header-img { + vertical-align: top; + width: 48px; + + img { + width: 48px; + height: 48px; + border-radius: 8px; + overflow: hidden; + } } -.padded { +.email-status-header-text { padding-left: 16px; padding-right: 16px; + vertical-align: middle; } -.padded-bottom { - padding-bottom: 32px; +.email-status-header-name { + font-size: 16px; + font-weight: 600; + line-height: 24px; + color: #17063b; } -.margin-bottom { - margin-bottom: 20px; +.email-status-header-handle { + font-size: 14px; + line-height: 20px; + color: #746a89; } -.hero-icon { - width: 64px; +.email-status-content { + padding-top: 24px; +} - td { - text-align: center; - vertical-align: middle; - line-height: 100%; - mso-line-height-rule: exactly; - padding: 16px; - border-radius: 80px; - background: $success-green; - } +.email-status-spoiler { + color: #746a89; + font-style: italic; + margin-bottom: 8px; +} - &.warning-icon td { - background: $gold-star; +.email-status-prose { + p { + font-size: 14px; + line-height: 20px; + color: #17063b; } - &.alert-icon td { - background: $error-red; + a { + color: #6364ff; + text-decoration: none; + + &:hover { + color: #563acc !important; + } } +} + +.email-status-media { + margin-top: 16px; + font-size: 14px; + line-height: 20px; + color: #17063b; img { - max-width: 32px; - width: 32px; - height: 32px; - display: block; - line-height: 100%; + border-radius: 8px; } -} -.hr { - width: 100%; + a { + color: #6364ff; + text-decoration: none; - td { - font-size: 0; - line-height: 1px; - mso-line-height-rule: exactly; - min-height: 1px; - overflow: hidden; - height: 2px; - background-color: transparent !important; - border-top: 1px solid lighten($ui-base-color, 8%); + &:hover { + color: #563acc !important; + } } } -.status { - padding-bottom: 32px; +.email-status-footer { + margin-top: 16px; + font-size: 12px; + line-height: 16px; + color: #746a89; - &--highlighted { - border: 1px solid lighten($ui-base-color, 8%); - border-radius: 4px; - padding-bottom: 16px; - margin-bottom: 16px; + a { + color: #746a89; } - .status-header { - td { - font-size: 14px; - padding-bottom: 15px; - } + a:hover { + color: #746a89 !important; + text-decoration: underline !important; + } +} - bdi { - color: $white; - font-size: 16px; - display: block; - font-weight: 500; - } +// Purple frame for emphasis +.email-frame-table { + background-color: #efefff; + border-radius: 8px; +} - td:first-child { - padding-right: 10px; - } +.email-frame-td { + padding: 16px; +} - img { - width: 48px; - height: 48px; - border-radius: 4px; - } - } +.email-frame-wrapper-td { + padding-bottom: 16px; +} - p { - font-size: 19px; - margin-bottom: 20px; +.email-frame-td > p { + text-align: center; + font-size: 16px; + line-height: 24px; +} - &.status-footer { - color: lighten($ui-base-color, 26%); - font-size: 14px; - margin-bottom: 0; +// Checklist item +.email-checklist-wrapper-td { + padding: 4px 0; +} - a { - color: lighten($ui-base-color, 26%); - } - } - } +.email-checklist-table { + border-radius: 12px; + border-width: 1px; + border-style: solid; + border-color: #efefff; + background-color: #fff; } -.border-top { - border-top: 1px solid lighten($ui-base-color, 8%); +.email-checklist-td { + padding: 16px; } -ul { - padding-left: 15px; - margin-top: 0; - margin-bottom: 0; - padding-top: 16px; +.email-checklist-icons-td { + width: 84px; + vertical-align: top; +} - li { - margin-bottom: 16px; - color: lighten($ui-base-color, 26%); +.email-checklist-icons-checkbox-td { + width: 20px; + vertical-align: middle; - span { - color: $ui-primary-color; - } + img { + max-width: 100%; + width: 20px; } } -ul.rules-list { - padding-top: 0; +.email-checklist-icons-step-td { + width: 64px; + text-align: center; + vertical-align: middle; + + img { + max-width: 100%; + width: 40px; + } } -@media only screen and (device-width >= 768px) and (device-width <= 1024px) and (orientation: landscape) { - body { - min-height: 1024px !important; +.email-checklist-text-td { + h3 { + margin: 0 0 4px; + color: #17063b; + font-size: 14px; + font-weight: 600; + line-height: 16.8px; + } + + p { + margin: 0 0 2px; + color: #746a89; + font-size: 14px; + line-height: 16.8px; + } + + .email-btn-table { + width: 100px; + } + + .email-btn-td { + mso-padding-alt: 10px; + } + + .email-btn-a { + padding-left: 10px; + padding-right: 10px; } } -@media (width <= 697px) { - .email-container, - .col-1, - .col-2, - .col-3, - .col-4, - .col-5, - .col-6 { - width: 100% !important; - max-width: none !important; +// Responsive +/* stylelint-disable-next-line media-feature-range-notation -- Basic media queries have better support across email clients. */ +@media only screen and (min-width: 740px) { + .email-desktop-p-8 { + padding: 32px !important; } - .email-start { - padding-top: 16px !important; + .email-desktop-rounded-16px { + border-radius: 16px !important; } - .email-end { - padding-bottom: 16px !important; + .email-header-td { + border-radius: 16px 16px 0 0 !important; } - .padded { - padding-left: 0 !important; - padding-right: 0 !important; + .email-desktop-flex { + display: flex; } } diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 3777fccbfb83ca..3a27c974ad8978 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -300,10 +300,15 @@ html { } &__item { + color: $darker-text-color; + + &--dangerous { + color: $error-value-color; + } + a, button { background: $white; - color: $darker-text-color; } } } @@ -315,9 +320,9 @@ html { .privacy-dropdown__option.active .privacy-dropdown__option__content strong, .privacy-dropdown__option:hover .privacy-dropdown__option__content, .privacy-dropdown__option:hover .privacy-dropdown__option__content strong, -.dropdown-menu__item a:active, -.dropdown-menu__item a:focus, -.dropdown-menu__item a:hover, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:active, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:focus, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:hover, .actions-modal ul li:not(:empty) a.active, .actions-modal ul li:not(:empty) a.active button, .actions-modal ul li:not(:empty) a:active, diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 2106b529d6c639..93cea5f76c70d4 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -187,8 +187,8 @@ .icon { flex: 0 0 auto; - width: 20px; - height: 20px; + width: 24px; + height: 24px; aspect-ratio: 1; path { @@ -200,7 +200,7 @@ display: inline-flex; color: $action-button-color; border: 0; - padding: 2px; + padding: 0; border-radius: 4px; background: transparent; cursor: pointer; @@ -1398,8 +1398,7 @@ body > [data-popper-placement] { .icon { width: 15px; height: 15px; - position: relative; - top: 0.145em; + vertical-align: middle; } } @@ -2322,7 +2321,7 @@ $ui-header-height: 55px; .drawer__tab { display: flex; flex: 1 1 auto; - padding: 15px 5px 13px; + padding: 13px 3px 11px; color: $darker-text-color; text-decoration: none; text-align: center; @@ -3205,7 +3204,7 @@ $ui-header-height: 55px; align-items: center; gap: 5px; font-size: 16px; - padding: 15px; + padding: 13px; text-decoration: none; overflow: hidden; white-space: nowrap; @@ -3804,7 +3803,7 @@ a.status-card { gap: 5px; margin: 0; border: 0; - padding: 15px; + padding: 13px; padding-inline-end: 0; color: inherit; background: transparent; @@ -4398,11 +4397,6 @@ a.status-card { align-items: center; justify-content: center; - @supports (display: grid) { - // hack to fix Chrome <57 - contain: strict; - } - & > span { max-width: 500px; } @@ -5549,6 +5543,10 @@ a.status-card { padding-inline-end: 10px; } + .icon { + vertical-align: middle; + } + .button { flex: 0 0 auto; } @@ -6099,6 +6097,7 @@ a.status-card { gap: 2px; } +.media-gallery__alt__label, .media-gallery__gifv__label { display: flex; align-items: center; @@ -6175,6 +6174,7 @@ a.status-card { .icon { color: $dark-text-color; + vertical-align: middle; } } } @@ -7420,6 +7420,13 @@ noscript { span { user-select: all; } + + .icon-lock { + height: 16px; + width: 16px; + position: relative; + top: 3px; + } } } } diff --git a/app/javascript/types/image.d.ts b/app/javascript/types/image.d.ts index 07d19295556b47..8a08eca9f6eaa0 100644 --- a/app/javascript/types/image.d.ts +++ b/app/javascript/types/image.d.ts @@ -20,16 +20,20 @@ declare module '*.png' { } declare module '*.svg' { + const path: string; + export default path; +} + +declare module '*.svg?react' { import type React from 'react'; interface SVGPropsWithTitle extends React.SVGProps { title?: string; } - export const ReactComponent: React.FC; + const ReactComponent: React.FC; - const path: string; - export default path; + export default ReactComponent; } declare module '*.webp' { diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index fedfa39deec9ea..5a2d33c1fa76f6 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -110,6 +110,8 @@ def find_existing_status def process_status_params @status_parser = ActivityPub::Parser::StatusParser.new(@json, followers_collection: @account.followers_url) + attachment_ids = process_attachments.take(4).map(&:id) + @params = { uri: @status_parser.uri, url: @status_parser.url || @status_parser.uri, @@ -125,7 +127,8 @@ def process_status_params visibility: @status_parser.visibility, thread: replied_to_status, conversation: conversation_from_uri(@object['conversation']), - media_attachment_ids: process_attachments.take(4).map(&:id), + media_attachment_ids: attachment_ids, + ordered_media_attachment_ids: attachment_ids, poll: process_poll, } end @@ -280,6 +283,7 @@ def process_attachments RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing media attachment: #{e}" + RedownloadMediaWorker.perform_async(media_attachment.id) end end diff --git a/app/lib/admin/system_check/media_privacy_check.rb b/app/lib/admin/system_check/media_privacy_check.rb index 1df05b120ea80a..2ddc8e8b07e4c3 100644 --- a/app/lib/admin/system_check/media_privacy_check.rb +++ b/app/lib/admin/system_check/media_privacy_check.rb @@ -78,7 +78,7 @@ def media_attachment @media_attachment ||= begin attachment = Account.representative.media_attachments.first if attachment.present? - attachment.touch # rubocop:disable Rails/SkipsModelValidations + attachment.touch attachment else create_test_attachment! diff --git a/app/lib/annual_report.rb b/app/lib/annual_report.rb new file mode 100644 index 00000000000000..cf4297f2a450ea --- /dev/null +++ b/app/lib/annual_report.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +class AnnualReport + include DatabaseHelper + + SOURCES = [ + AnnualReport::Archetype, + AnnualReport::TypeDistribution, + AnnualReport::TopStatuses, + AnnualReport::MostUsedApps, + AnnualReport::CommonlyInteractedWithAccounts, + AnnualReport::TimeSeries, + AnnualReport::TopHashtags, + AnnualReport::MostRebloggedAccounts, + AnnualReport::Percentiles, + ].freeze + + SCHEMA = 1 + + def initialize(account, year) + @account = account + @year = year + end + + def generate + return if GeneratedAnnualReport.exists?(account: @account, year: @year) + + GeneratedAnnualReport.create( + account: @account, + year: @year, + schema_version: SCHEMA, + data: data + ) + end + + private + + def data + with_read_replica do + SOURCES.each_with_object({}) { |klass, hsh| hsh.merge!(klass.new(@account, @year).generate) } + end + end +end diff --git a/app/lib/annual_report/archetype.rb b/app/lib/annual_report/archetype.rb new file mode 100644 index 00000000000000..ea9ef366df7e09 --- /dev/null +++ b/app/lib/annual_report/archetype.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +class AnnualReport::Archetype < AnnualReport::Source + # Average number of posts (including replies and reblogs) made by + # each active user in a single year (2023) + AVERAGE_PER_YEAR = 113 + + def generate + { + archetype: archetype, + } + end + + private + + def archetype + if (standalone_count + replies_count + reblogs_count) < AVERAGE_PER_YEAR + :lurker + elsif reblogs_count > (standalone_count * 2) + :booster + elsif polls_count > (standalone_count * 0.1) # standalone_count includes posts with polls + :pollster + elsif replies_count > (standalone_count * 2) + :replier + else + :oracle + end + end + + def polls_count + @polls_count ||= base_scope.where.not(poll_id: nil).count + end + + def reblogs_count + @reblogs_count ||= base_scope.where.not(reblog_of_id: nil).count + end + + def replies_count + @replies_count ||= base_scope.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count + end + + def standalone_count + @standalone_count ||= base_scope.without_replies.without_reblogs.count + end + + def base_scope + @account.statuses.where(id: year_as_snowflake_range) + end +end diff --git a/app/lib/annual_report/commonly_interacted_with_accounts.rb b/app/lib/annual_report/commonly_interacted_with_accounts.rb new file mode 100644 index 00000000000000..af5e854c222f78 --- /dev/null +++ b/app/lib/annual_report/commonly_interacted_with_accounts.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source + SET_SIZE = 40 + + def generate + { + commonly_interacted_with_accounts: commonly_interacted_with_accounts.map do |(account_id, count)| + { + account_id: account_id, + count: count, + } + end, + } + end + + private + + def commonly_interacted_with_accounts + @account.statuses.reorder(nil).where(id: year_as_snowflake_range).where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('in_reply_to_account_id, count(*) AS total')) + end +end diff --git a/app/lib/annual_report/most_reblogged_accounts.rb b/app/lib/annual_report/most_reblogged_accounts.rb new file mode 100644 index 00000000000000..e3e8a7c90b1246 --- /dev/null +++ b/app/lib/annual_report/most_reblogged_accounts.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class AnnualReport::MostRebloggedAccounts < AnnualReport::Source + SET_SIZE = 10 + + def generate + { + most_reblogged_accounts: most_reblogged_accounts.map do |(account_id, count)| + { + account_id: account_id, + count: count, + } + end, + } + end + + private + + def most_reblogged_accounts + @account.statuses.reorder(nil).where(id: year_as_snowflake_range).where.not(reblog_of_id: nil).joins(reblog: :account).group('accounts.id').having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('accounts.id, count(*) as total')) + end +end diff --git a/app/lib/annual_report/most_used_apps.rb b/app/lib/annual_report/most_used_apps.rb new file mode 100644 index 00000000000000..85ff1ff86e10c2 --- /dev/null +++ b/app/lib/annual_report/most_used_apps.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class AnnualReport::MostUsedApps < AnnualReport::Source + SET_SIZE = 10 + + def generate + { + most_used_apps: most_used_apps.map do |(name, count)| + { + name: name, + count: count, + } + end, + } + end + + private + + def most_used_apps + @account.statuses.reorder(nil).where(id: year_as_snowflake_range).joins(:application).group('oauth_applications.name').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('oauth_applications.name, count(*) as total')) + end +end diff --git a/app/lib/annual_report/percentiles.rb b/app/lib/annual_report/percentiles.rb new file mode 100644 index 00000000000000..9fe4698ee5df52 --- /dev/null +++ b/app/lib/annual_report/percentiles.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +class AnnualReport::Percentiles < AnnualReport::Source + def generate + { + percentiles: { + followers: (total_with_fewer_followers / (total_with_any_followers + 1.0)) * 100, + statuses: (total_with_fewer_statuses / (total_with_any_statuses + 1.0)) * 100, + }, + } + end + + private + + def followers_gained + @followers_gained ||= @account.passive_relationships.where("date_part('year', follows.created_at) = ?", @year).count + end + + def statuses_created + @statuses_created ||= @account.statuses.where(id: year_as_snowflake_range).count + end + + def total_with_fewer_followers + @total_with_fewer_followers ||= Follow.find_by_sql([<<~SQL.squish, { year: @year, comparison: followers_gained }]).first.total + WITH tmp0 AS ( + SELECT follows.target_account_id + FROM follows + INNER JOIN accounts ON accounts.id = follows.target_account_id + WHERE date_part('year', follows.created_at) = :year + AND accounts.domain IS NULL + GROUP BY follows.target_account_id + HAVING COUNT(*) < :comparison + ) + SELECT count(*) AS total + FROM tmp0 + SQL + end + + def total_with_fewer_statuses + @total_with_fewer_statuses ||= Status.find_by_sql([<<~SQL.squish, { comparison: statuses_created, min_id: year_as_snowflake_range.first, max_id: year_as_snowflake_range.last }]).first.total + WITH tmp0 AS ( + SELECT statuses.account_id + FROM statuses + INNER JOIN accounts ON accounts.id = statuses.account_id + WHERE statuses.id BETWEEN :min_id AND :max_id + AND accounts.domain IS NULL + GROUP BY statuses.account_id + HAVING count(*) < :comparison + ) + SELECT count(*) AS total + FROM tmp0 + SQL + end + + def total_with_any_followers + @total_with_any_followers ||= Follow.where("date_part('year', follows.created_at) = ?", @year).joins(:target_account).merge(Account.local).count('distinct follows.target_account_id') + end + + def total_with_any_statuses + @total_with_any_statuses ||= Status.where(id: year_as_snowflake_range).joins(:account).merge(Account.local).count('distinct statuses.account_id') + end +end diff --git a/app/lib/annual_report/source.rb b/app/lib/annual_report/source.rb new file mode 100644 index 00000000000000..1ccb622676faf4 --- /dev/null +++ b/app/lib/annual_report/source.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AnnualReport::Source + attr_reader :account, :year + + def initialize(account, year) + @account = account + @year = year + end + + protected + + def year_as_snowflake_range + (Mastodon::Snowflake.id_at(DateTime.new(year, 1, 1))..Mastodon::Snowflake.id_at(DateTime.new(year, 12, 31))) + end +end diff --git a/app/lib/annual_report/time_series.rb b/app/lib/annual_report/time_series.rb new file mode 100644 index 00000000000000..a144bac0d1587a --- /dev/null +++ b/app/lib/annual_report/time_series.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class AnnualReport::TimeSeries < AnnualReport::Source + def generate + { + time_series: (1..12).map do |month| + { + month: month, + statuses: statuses_per_month[month] || 0, + following: following_per_month[month] || 0, + followers: followers_per_month[month] || 0, + } + end, + } + end + + private + + def statuses_per_month + @statuses_per_month ||= @account.statuses.reorder(nil).where(id: year_as_snowflake_range).group(:period).pluck(Arel.sql("date_part('month', created_at)::int AS period, count(*)")).to_h + end + + def following_per_month + @following_per_month ||= @account.active_relationships.where("date_part('year', created_at) = ?", @year).group(:period).pluck(Arel.sql("date_part('month', created_at)::int AS period, count(*)")).to_h + end + + def followers_per_month + @followers_per_month ||= @account.passive_relationships.where("date_part('year', created_at) = ?", @year).group(:period).pluck(Arel.sql("date_part('month', created_at)::int AS period, count(*)")).to_h + end +end diff --git a/app/lib/annual_report/top_hashtags.rb b/app/lib/annual_report/top_hashtags.rb new file mode 100644 index 00000000000000..488dacb1b45b2c --- /dev/null +++ b/app/lib/annual_report/top_hashtags.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class AnnualReport::TopHashtags < AnnualReport::Source + SET_SIZE = 40 + + def generate + { + top_hashtags: top_hashtags.map do |(name, count)| + { + name: name, + count: count, + } + end, + } + end + + private + + def top_hashtags + Tag.joins(:statuses).where(statuses: { id: @account.statuses.where(id: year_as_snowflake_range).reorder(nil).select(:id) }).group(:id).having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('COALESCE(tags.display_name, tags.name), count(*) AS total')) + end +end diff --git a/app/lib/annual_report/top_statuses.rb b/app/lib/annual_report/top_statuses.rb new file mode 100644 index 00000000000000..112e5591ce2170 --- /dev/null +++ b/app/lib/annual_report/top_statuses.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class AnnualReport::TopStatuses < AnnualReport::Source + def generate + top_reblogs = base_scope.order(reblogs_count: :desc).first&.id + top_favourites = base_scope.where.not(id: top_reblogs).order(favourites_count: :desc).first&.id + top_replies = base_scope.where.not(id: [top_reblogs, top_favourites]).order(replies_count: :desc).first&.id + + { + top_statuses: { + by_reblogs: top_reblogs, + by_favourites: top_favourites, + by_replies: top_replies, + }, + } + end + + def base_scope + @account.statuses.with_public_visibility.joins(:status_stat).where(id: year_as_snowflake_range).reorder(nil) + end +end diff --git a/app/lib/annual_report/type_distribution.rb b/app/lib/annual_report/type_distribution.rb new file mode 100644 index 00000000000000..fc12a6f1f4b665 --- /dev/null +++ b/app/lib/annual_report/type_distribution.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class AnnualReport::TypeDistribution < AnnualReport::Source + def generate + { + type_distribution: { + total: base_scope.count, + reblogs: base_scope.where.not(reblog_of_id: nil).count, + replies: base_scope.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count, + standalone: base_scope.without_replies.without_reblogs.count, + }, + } + end + + private + + def base_scope + @account.statuses.where(id: year_as_snowflake_range) + end +end diff --git a/app/lib/attachment_batch.rb b/app/lib/attachment_batch.rb index b28f5c3d7fc14d..32ccb0b13c1fb1 100644 --- a/app/lib/attachment_batch.rb +++ b/app/lib/attachment_batch.rb @@ -37,7 +37,7 @@ def delete def clear remove_files - batch.update_all(nullified_attributes) # rubocop:disable Rails/SkipsModelValidations + batch.update_all(nullified_attributes) end private diff --git a/app/lib/content_security_policy.rb b/app/lib/content_security_policy.rb index 966e41f03b3f34..210f37cea0d3b4 100644 --- a/app/lib/content_security_policy.rb +++ b/app/lib/content_security_policy.rb @@ -10,7 +10,7 @@ def assets_host end def media_hosts - [assets_host, cdn_host_value].compact + [assets_host, cdn_host_value, paperclip_root_url].compact end private @@ -23,6 +23,15 @@ def cdn_host_value s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host end + def paperclip_root_url + root_url = ENV.fetch('PAPERCLIP_ROOT_URL', nil) + return if root_url.blank? + + (Addressable::URI.parse(assets_host) + root_url).tap do |uri| + uri.path += '/' unless uri.path.blank? || uri.path.end_with?('/') + end.to_s + end + def url_from_base_host host_to_url(base_host) end diff --git a/app/lib/emoji_formatter.rb b/app/lib/emoji_formatter.rb index 15b98dc57e605d..2a3683c499f621 100644 --- a/app/lib/emoji_formatter.rb +++ b/app/lib/emoji_formatter.rb @@ -66,16 +66,6 @@ def emoji_map @emoji_map ||= custom_emojis.each_with_object({}) { |e, h| h[e.shortcode] = [full_asset_url(e.image.url), full_asset_url(e.image.url(:static))] } end - def count_tag_nesting(tag) - if tag[1] == '/' - -1 - elsif tag[-2] == '/' - 0 - else - 1 - end - end - def tag_for_emoji(shortcode, emoji) return content_tag(:span, ":#{shortcode}:", translate: 'no') if raw_shortcode? diff --git a/app/lib/inline_renderer.rb b/app/lib/inline_renderer.rb index eda3da2c29b2db..0aebb13fce4476 100644 --- a/app/lib/inline_renderer.rb +++ b/app/lib/inline_renderer.rb @@ -37,13 +37,13 @@ def self.render(object, current_account, template) private def preload_associations_for_status - ActiveRecord::Associations::Preloader.new(records: @object, associations: { + ActiveRecord::Associations::Preloader.new(records: [@object], associations: { active_mentions: :account, reblog: { active_mentions: :account, }, - }) + }).call end def current_user diff --git a/app/lib/ostatus/tag_manager.rb b/app/lib/ostatus/tag_manager.rb index 7d813162272882..21b3d3aa58453f 100644 --- a/app/lib/ostatus/tag_manager.rb +++ b/app/lib/ostatus/tag_manager.rb @@ -52,7 +52,7 @@ def unique_tag_to_local_id(tag, expected_type) ActivityPub::TagManager.instance.uri_to_local_id(tag) else matches = Regexp.new("objectId=([\\d]+):objectType=#{expected_type}").match(tag) - return matches[1] unless matches.nil? + matches[1] unless matches.nil? end end diff --git a/app/lib/potential_friendship_tracker.rb b/app/lib/potential_friendship_tracker.rb deleted file mode 100644 index f5bc20346599c4..00000000000000 --- a/app/lib/potential_friendship_tracker.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -class PotentialFriendshipTracker - EXPIRE_AFTER = 90.days.seconds - MAX_ITEMS = 80 - - WEIGHTS = { - reply: 1, - favourite: 10, - reblog: 20, - }.freeze - - class << self - include Redisable - - def record(account_id, target_account_id, action) - return if account_id == target_account_id - - key = "interactions:#{account_id}" - weight = WEIGHTS[action] - - redis.zincrby(key, weight, target_account_id) - redis.zremrangebyrank(key, 0, -MAX_ITEMS) - redis.expire(key, EXPIRE_AFTER) - end - - def remove(account_id, target_account_id) - redis.zrem("interactions:#{account_id}", target_account_id) - end - end -end diff --git a/app/lib/request.rb b/app/lib/request.rb index 5f128af734c1e9..8d4120868d4feb 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -77,6 +77,7 @@ def initialize(verb, url, **options) @url = Addressable::URI.parse(url).normalize @http_client = options.delete(:http_client) @allow_local = options.delete(:allow_local) + @full_path = options.delete(:with_query_string) @options = options.merge(socket_class: use_proxy? || @allow_local ? ProxySocket : Socket) @options = @options.merge(timeout_class: PerOperationWithDeadline, timeout_options: TIMEOUT) @options = @options.merge(proxy_url) if use_proxy? @@ -146,7 +147,7 @@ def http_client private def set_common_headers! - @headers[REQUEST_TARGET] = "#{@verb} #{@url.path}" + @headers[REQUEST_TARGET] = request_target @headers['User-Agent'] = Mastodon::Version.user_agent @headers['Host'] = @url.host @headers['Date'] = Time.now.utc.httpdate @@ -157,6 +158,14 @@ def set_digest! @headers['Digest'] = "SHA-256=#{Digest::SHA256.base64digest(@options[:body])}" end + def request_target + if @url.query.nil? || !@full_path + "#{@verb} #{@url.path}" + else + "#{@verb} #{@url.path}?#{@url.query}" + end + end + def signature algorithm = 'rsa-sha256' signature = Base64.strict_encode64(@keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) diff --git a/app/lib/settings/scoped_settings.rb b/app/lib/settings/scoped_settings.rb deleted file mode 100644 index 3ad57cc1ea9c05..00000000000000 --- a/app/lib/settings/scoped_settings.rb +++ /dev/null @@ -1,79 +0,0 @@ -# frozen_string_literal: true - -module Settings - class ScopedSettings - DEFAULTING_TO_UNSCOPED = %w( - theme - noindex - ).freeze - - def initialize(object) - @object = object - end - - def method_missing(method, *args) - method_name = method.to_s - # set a value for a variable - if method_name[-1] == '=' - var_name = method_name.sub('=', '') - value = args.first - self[var_name] = value - else - # retrieve a value - self[method_name] - end - end - - def respond_to_missing?(*) - true - end - - def all_as_records - vars = thing_scoped - records = vars.index_by(&:var) - - Setting.default_settings.each do |key, default_value| - next if records.key?(key) || default_value.is_a?(Hash) - - records[key] = Setting.new(var: key, value: default_value) - end - - records - end - - def []=(key, value) - key = key.to_s - record = thing_scoped.find_or_initialize_by(var: key) - record.update!(value: value) - - Rails.cache.write(Setting.cache_key(key, @object), value) - end - - def [](key) - Rails.cache.fetch(Setting.cache_key(key, @object)) do - db_val = thing_scoped.find_by(var: key.to_s) - if db_val - default_value = ScopedSettings.default_settings[key] - return default_value.with_indifferent_access.merge!(db_val.value) if default_value.is_a?(Hash) - - db_val.value - else - ScopedSettings.default_settings[key] - end - end - end - - class << self - def default_settings - defaulting = DEFAULTING_TO_UNSCOPED.index_with { |k| Setting[k] } - Setting.default_settings.merge!(defaulting) - end - end - - protected - - def thing_scoped - Setting.unscoped.where(thing_type: @object.class.base_class.to_s, thing_id: @object.id) - end - end -end diff --git a/app/lib/status_cache_hydrator.rb b/app/lib/status_cache_hydrator.rb index 45b50cb3793f35..34f6199ec0efe9 100644 --- a/app/lib/status_cache_hydrator.rb +++ b/app/lib/status_cache_hydrator.rb @@ -26,11 +26,11 @@ def hydrate(account_id) def hydrate_non_reblog_payload(empty_payload, account_id) empty_payload.tap do |payload| - payload[:favourited] = Favourite.where(account_id: account_id, status_id: @status.id).exists? - payload[:reblogged] = Status.where(account_id: account_id, reblog_of_id: @status.id).exists? - payload[:muted] = ConversationMute.where(account_id: account_id, conversation_id: @status.conversation_id).exists? - payload[:bookmarked] = Bookmark.where(account_id: account_id, status_id: @status.id).exists? - payload[:pinned] = StatusPin.where(account_id: account_id, status_id: @status.id).exists? if @status.account_id == account_id + payload[:favourited] = Favourite.exists?(account_id: account_id, status_id: @status.id) + payload[:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: @status.id) + payload[:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: @status.conversation_id) + payload[:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: @status.id) + payload[:pinned] = StatusPin.exists?(account_id: account_id, status_id: @status.id) if @status.account_id == account_id payload[:filtered] = mapped_applied_custom_filter(account_id, @status) if payload[:poll] @@ -51,11 +51,11 @@ def hydrate_reblog_payload(empty_payload, account_id) # used to create the status, we need to hydrate it here too payload[:reblog][:application] = payload_reblog_application if payload[:reblog][:application].nil? && @status.reblog.account_id == account_id - payload[:reblog][:favourited] = Favourite.where(account_id: account_id, status_id: @status.reblog_of_id).exists? - payload[:reblog][:reblogged] = Status.where(account_id: account_id, reblog_of_id: @status.reblog_of_id).exists? - payload[:reblog][:muted] = ConversationMute.where(account_id: account_id, conversation_id: @status.reblog.conversation_id).exists? - payload[:reblog][:bookmarked] = Bookmark.where(account_id: account_id, status_id: @status.reblog_of_id).exists? - payload[:reblog][:pinned] = StatusPin.where(account_id: account_id, status_id: @status.reblog_of_id).exists? if @status.reblog.account_id == account_id + payload[:reblog][:favourited] = Favourite.exists?(account_id: account_id, status_id: @status.reblog_of_id) + payload[:reblog][:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: @status.reblog_of_id) + payload[:reblog][:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: @status.reblog.conversation_id) + payload[:reblog][:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: @status.reblog_of_id) + payload[:reblog][:pinned] = StatusPin.exists?(account_id: account_id, status_id: @status.reblog_of_id) if @status.reblog.account_id == account_id payload[:reblog][:filtered] = payload[:filtered] if payload[:reblog][:poll] diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 36fb0e80fb88c4..17e42e3ec38fe5 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -16,28 +16,28 @@ def inboxes private def reached_account_inboxes + Account.where(id: reached_account_ids).inboxes + end + + def reached_account_ids # When the status is a reblog, there are no interactions with it # directly, we assume all interactions are with the original one if @status.reblog? - [] + [reblog_of_account_id] else - Account.where(id: reached_account_ids).inboxes - end - end - - def reached_account_ids - [ - replied_to_account_id, - reblog_of_account_id, - mentioned_account_ids, - reblogs_account_ids, - favourites_account_ids, - replies_account_ids, - ].tap do |arr| - arr.flatten! - arr.compact! - arr.uniq! + [ + replied_to_account_id, + reblog_of_account_id, + mentioned_account_ids, + reblogs_account_ids, + favourites_account_ids, + replies_account_ids, + ].tap do |arr| + arr.flatten! + arr.compact! + arr.uniq! + end end end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 35f0b5fee18a9a..3312183d47db66 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -12,7 +12,7 @@ class ApplicationMailer < ActionMailer::Base protected def locale_for_account(account, &block) - I18n.with_locale(account.user_locale || I18n.default_locale, &block) + I18n.with_locale(account.user_locale || I18n.locale || I18n.default_locale, &block) end def set_autoreply_headers! diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 5eecfed10400bc..4eb38ec340620f 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -12,6 +12,8 @@ class NotificationMailer < ApplicationMailer default to: -> { email_address_with_name(@user.email, @me.username) } + layout 'mailer' + def mention return unless @user.functional? && @status.present? diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 2af2a3a41d2cb3..3b1a085cb88ef6 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -191,6 +191,18 @@ def suspicious_sign_in(user, remote_ip, user_agent, timestamp) end end + def failed_2fa(user, remote_ip, user_agent, timestamp) + @resource = user + @remote_ip = remote_ip + @user_agent = user_agent + @detection = Browser.new(user_agent) + @timestamp = timestamp.to_time.utc + + I18n.with_locale(locale) do + mail subject: default_i18n_subject + end + end + private def default_devise_subject @@ -202,6 +214,6 @@ def set_instance end def locale - @resource.locale.presence || I18n.default_locale + @resource.locale.presence || I18n.locale || I18n.default_locale end end diff --git a/app/models/account.rb b/app/models/account.rb index eda1f0ba0c2f07..ee9bb3d7d4d4ac 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -109,6 +109,8 @@ class Account < ApplicationRecord validates :shared_inbox_url, absence: true, if: :local?, on: :create validates :followers_url, absence: true, if: :local?, on: :create + normalizes :username, with: ->(username) { username.squish } + scope :remote, -> { where.not(domain: nil) } scope :local, -> { where(domain: nil) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } @@ -122,15 +124,15 @@ class Account < ApplicationRecord scope :bots, -> { where(actor_type: %w(Application Service)) } scope :groups, -> { where(actor_type: 'Group') } scope :alphabetic, -> { order(domain: :asc, username: :asc) } + scope :matches_uri_prefix, ->(value) { where(arel_table[:uri].matches("#{sanitize_sql_like(value)}/%", false, true)).or(where(uri: value)) } scope :matches_username, ->(value) { where('lower((username)::text) LIKE lower(?)', "#{value}%") } scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) } - scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } scope :without_unapproved, -> { left_outer_joins(:user).merge(User.approved.confirmed).or(remote) } + scope :auditable, -> { where(id: Admin::ActionLog.select(:account_id).distinct) } scope :searchable, -> { without_unapproved.without_suspended.where(moved_to_account_id: nil) } scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) } - scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) } scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.order('last_status_at DESC NULLS LAST')).references(:account_stat) } - scope :by_recent_sign_in, -> { order(Arel.sql('users.current_sign_in_at DESC NULLS LAST')) } + scope :by_recent_activity, -> { left_joins(:user, :account_stat).order(coalesced_activity_timestamps.desc).order(id: :desc) } scope :popular, -> { order('account_stats.followers_count desc') } scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } scope :not_excluded_by_account, ->(account) { where.not(id: account.excluded_from_timeline_account_ids) } @@ -443,6 +445,14 @@ def inboxes DeliveryFailureTracker.without_unavailable(urls) end + def coalesced_activity_timestamps + Arel.sql( + <<~SQL.squish + COALESCE(users.current_sign_in_at, account_stats.last_status_at, to_timestamp(0)) + SQL + ) + end + def from_text(text) return [] if text.blank? @@ -458,8 +468,8 @@ def from_text(text) end def inverse_alias(key, original_key) - define_method("#{key}=") do |value| - public_send("#{original_key}=", !ActiveModel::Type::Boolean.new.cast(value)) + define_method(:"#{key}=") do |value| + public_send(:"#{original_key}=", !ActiveModel::Type::Boolean.new.cast(value)) end define_method(key) do @@ -476,7 +486,6 @@ def emojis end before_validation :prepare_contents, if: :local? - before_validation :prepare_username, on: :create before_create :generate_keys before_destroy :clean_feed_manager @@ -494,10 +503,6 @@ def prepare_contents note&.strip! end - def prepare_username - username&.squish! - end - def generate_keys return unless local? && private_key.blank? && public_key.blank? diff --git a/app/models/account_domain_block.rb b/app/models/account_domain_block.rb index af1e6a68dc45f4..753935d6af6a86 100644 --- a/app/models/account_domain_block.rb +++ b/app/models/account_domain_block.rb @@ -18,16 +18,17 @@ class AccountDomainBlock < ApplicationRecord belongs_to :account validates :domain, presence: true, uniqueness: { scope: :account_id }, domain: true - after_commit :remove_blocking_cache - after_commit :remove_relationship_cache + after_commit :invalidate_domain_blocking_cache + after_commit :invalidate_follow_recommendations_cache private - def remove_blocking_cache + def invalidate_domain_blocking_cache Rails.cache.delete("exclude_domains_for:#{account_id}") + Rails.cache.delete(['exclude_domains', account_id, domain]) end - def remove_relationship_cache - Rails.cache.delete_matched("relationship:#{account_id}:*") + def invalidate_follow_recommendations_cache + Rails.cache.delete("follow_recommendations/#{account_id}") end end diff --git a/app/models/account_filter.rb b/app/models/account_filter.rb index 55d34e85c31ed3..42b1c49538b0a5 100644 --- a/app/models/account_filter.rb +++ b/app/models/account_filter.rb @@ -104,15 +104,7 @@ def status_scope(value) def order_scope(value) case value.to_s when 'active' - accounts_with_users - .left_joins(:account_stat) - .order( - Arel.sql( - <<~SQL.squish - COALESCE(users.current_sign_in_at, account_stats.last_status_at, to_timestamp(0)) DESC, accounts.id DESC - SQL - ) - ) + Account.by_recent_activity when 'recent' Account.recent else diff --git a/app/models/account_suggestions.rb b/app/models/account_suggestions.rb index d1774e62fae3bd..25c8b04d50f9f3 100644 --- a/app/models/account_suggestions.rb +++ b/app/models/account_suggestions.rb @@ -1,28 +1,48 @@ # frozen_string_literal: true class AccountSuggestions + include DatabaseHelper + SOURCES = [ AccountSuggestions::SettingSource, - AccountSuggestions::PastInteractionsSource, + AccountSuggestions::FriendsOfFriendsSource, + AccountSuggestions::SimilarProfilesSource, AccountSuggestions::GlobalSource, ].freeze - def self.get(account, limit) - SOURCES.each_with_object([]) do |source_class, suggestions| - source_suggestions = source_class.new.get( - account, - skip_account_ids: suggestions.map(&:account_id), - limit: limit - suggestions.size - ) + BATCH_SIZE = 40 - suggestions.concat(source_suggestions) - end + def initialize(account) + @account = account end - def self.remove(account, target_account_id) - SOURCES.each do |source_class| - source = source_class.new - source.remove(account, target_account_id) + def get(limit, offset = 0) + with_read_replica do + account_ids_with_sources = Rails.cache.fetch("follow_recommendations/#{@account.id}", expires_in: 15.minutes) do + SOURCES.flat_map { |klass| klass.new.get(@account, limit: BATCH_SIZE) }.each_with_object({}) do |(account_id, source), h| + (h[account_id] ||= []).concat(Array(source).map(&:to_sym)) + end.to_a.shuffle + end + + # The sources deliver accounts that haven't yet been followed, are not blocked, + # and so on. Since we reset the cache on follows, blocks, and so on, we don't need + # a complicated query on this end. + + account_ids = account_ids_with_sources[offset, limit] + accounts_map = Account.where(id: account_ids.map(&:first)).includes(:account_stat, :user).index_by(&:id) + + account_ids.filter_map do |(account_id, source)| + next unless accounts_map.key?(account_id) + + AccountSuggestions::Suggestion.new( + account: accounts_map[account_id], + source: source + ) + end end end + + def remove(target_account_id) + FollowRecommendationMute.create(account_id: @account.id, target_account_id: target_account_id) + end end diff --git a/app/models/account_suggestions/friends_of_friends_source.rb b/app/models/account_suggestions/friends_of_friends_source.rb new file mode 100644 index 00000000000000..28d0ab99b3b1f9 --- /dev/null +++ b/app/models/account_suggestions/friends_of_friends_source.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class AccountSuggestions::FriendsOfFriendsSource < AccountSuggestions::Source + def get(account, limit: 10) + Account.find_by_sql([<<~SQL.squish, { id: account.id, limit: limit }]).map { |row| [row.id, key] } + WITH first_degree AS ( + SELECT target_account_id + FROM follows + JOIN accounts AS target_accounts ON follows.target_account_id = target_accounts.id + WHERE account_id = :id + AND NOT target_accounts.hide_collections + ) + SELECT accounts.id, COUNT(*) AS frequency + FROM accounts + JOIN follows ON follows.target_account_id = accounts.id + JOIN account_stats ON account_stats.account_id = accounts.id + LEFT OUTER JOIN follow_recommendation_mutes ON follow_recommendation_mutes.target_account_id = accounts.id AND follow_recommendation_mutes.account_id = :id + WHERE follows.account_id IN (SELECT * FROM first_degree) + AND NOT EXISTS (SELECT 1 FROM follows f WHERE f.target_account_id = follows.target_account_id AND f.account_id = :id) + AND follows.target_account_id <> :id + AND accounts.discoverable + AND accounts.suspended_at IS NULL + AND accounts.silenced_at IS NULL + AND accounts.moved_to_account_id IS NULL + AND follow_recommendation_mutes.target_account_id IS NULL + GROUP BY accounts.id, account_stats.id + ORDER BY frequency DESC, account_stats.followers_count ASC + LIMIT :limit + SQL + end + + private + + def key + :friends_of_friends + end +end diff --git a/app/models/account_suggestions/global_source.rb b/app/models/account_suggestions/global_source.rb index 651041d67510e8..d68f285e4f4e89 100644 --- a/app/models/account_suggestions/global_source.rb +++ b/app/models/account_suggestions/global_source.rb @@ -1,39 +1,13 @@ # frozen_string_literal: true class AccountSuggestions::GlobalSource < AccountSuggestions::Source - include Redisable - - def key - :global - end - - def get(account, skip_account_ids: [], limit: 40) - account_ids = account_ids_for_locale(I18n.locale.to_s.split(/[_-]/).first) - [account.id] - skip_account_ids - - as_ordered_suggestions( - scope(account).where(id: account_ids), - account_ids - ).take(limit) - end - - def remove(_account, _target_account_id) - nil + def get(account, limit: 10) + FollowRecommendation.localized(content_locale).joins(:account).merge(base_account_scope(account)).order(rank: :desc).limit(limit).pluck(:account_id, :reason) end private - def scope(account) - Account.searchable - .followable_by(account) - .not_excluded_by_account(account) - .not_domain_blocked_by_account(account) - end - - def account_ids_for_locale(locale) - redis.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i) - end - - def to_ordered_list_key(account) - account.id + def content_locale + I18n.locale.to_s.split(/[_-]/).first end end diff --git a/app/models/account_suggestions/past_interactions_source.rb b/app/models/account_suggestions/past_interactions_source.rb deleted file mode 100644 index d169394f11a30f..00000000000000 --- a/app/models/account_suggestions/past_interactions_source.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -class AccountSuggestions::PastInteractionsSource < AccountSuggestions::Source - include Redisable - - def key - :past_interactions - end - - def get(account, skip_account_ids: [], limit: 40) - account_ids = account_ids_for_account(account.id, limit + skip_account_ids.size) - skip_account_ids - - as_ordered_suggestions( - scope.where(id: account_ids), - account_ids - ).take(limit) - end - - def remove(account, target_account_id) - redis.zrem("interactions:#{account.id}", target_account_id) - end - - private - - def scope - Account.searchable - end - - def account_ids_for_account(account_id, limit) - redis.zrevrange("interactions:#{account_id}", 0, limit).map(&:to_i) - end - - def to_ordered_list_key(account) - account.id - end -end diff --git a/app/models/account_suggestions/setting_source.rb b/app/models/account_suggestions/setting_source.rb index 6185732b4bcbb8..4b7275bf7ada96 100644 --- a/app/models/account_suggestions/setting_source.rb +++ b/app/models/account_suggestions/setting_source.rb @@ -1,32 +1,18 @@ # frozen_string_literal: true class AccountSuggestions::SettingSource < AccountSuggestions::Source - def key - :staff - end - - def get(account, skip_account_ids: [], limit: 40) - return [] unless setting_enabled? - - as_ordered_suggestions( - scope(account).where(setting_to_where_condition).where.not(id: skip_account_ids), - usernames_and_domains - ).take(limit) - end - - def remove(_account, _target_account_id) - nil + def get(account, limit: 10) + if setting_enabled? + base_account_scope(account).where(setting_to_where_condition).limit(limit).pluck(:id).zip([key].cycle) + else + [] + end end private - def scope(account) - Account.searchable - .followable_by(account) - .not_excluded_by_account(account) - .not_domain_blocked_by_account(account) - .where(locked: false) - .where.not(id: account.id) + def key + :featured end def usernames_and_domains @@ -61,8 +47,4 @@ def setting_to_usernames_and_domains def setting Setting.bootstrap_timeline_accounts end - - def to_ordered_list_key(account) - [account.username.downcase, account.domain&.downcase] - end end diff --git a/app/models/account_suggestions/similar_profiles_source.rb b/app/models/account_suggestions/similar_profiles_source.rb new file mode 100644 index 00000000000000..733c5f0bbcd649 --- /dev/null +++ b/app/models/account_suggestions/similar_profiles_source.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true + +class AccountSuggestions::SimilarProfilesSource < AccountSuggestions::Source + class QueryBuilder < AccountSearchService::QueryBuilder + def must_clauses + [ + { + more_like_this: { + fields: %w(text text.stemmed), + like: @query.map { |id| { _index: 'accounts', _id: id } }, + }, + }, + + { + term: { + properties: 'discoverable', + }, + }, + ] + end + + def must_not_clauses + [ + { + terms: { + id: following_ids, + }, + }, + + { + term: { + properties: 'bot', + }, + }, + ] + end + + def should_clauses + { + term: { + properties: { + value: 'verified', + boost: 2, + }, + }, + } + end + end + + def get(account, limit: 10) + recently_followed_account_ids = account.active_relationships.recent.limit(5).pluck(:target_account_id) + + if Chewy.enabled? && !recently_followed_account_ids.empty? + QueryBuilder.new(recently_followed_account_ids, account).build.limit(limit).hits.pluck('_id').map(&:to_i).zip([key].cycle) + else + [] + end + rescue Faraday::ConnectionFailed + [] + end + + private + + def key + :similar_to_recently_followed + end +end diff --git a/app/models/account_suggestions/source.rb b/app/models/account_suggestions/source.rb index 504d26a8bd6640..d83f5e3773cf6c 100644 --- a/app/models/account_suggestions/source.rb +++ b/app/models/account_suggestions/source.rb @@ -1,34 +1,38 @@ # frozen_string_literal: true class AccountSuggestions::Source - def key - raise NotImplementedError - end - def get(_account, **kwargs) raise NotImplementedError end - def remove(_account, target_account_id) - raise NotImplementedError - end - protected - def as_ordered_suggestions(scope, ordered_list) - return [] if ordered_list.empty? + def base_account_scope(account) + Account + .searchable + .where.not(follows_sql, id: account.id) + .where.not(follow_requests_sql, id: account.id) + .not_excluded_by_account(account) + .not_domain_blocked_by_account(account) + .where.not(id: account.id) + .where.not(follow_recommendation_mutes_sql, id: account.id) + end - map = scope.index_by { |account| to_ordered_list_key(account) } + def follows_sql + <<~SQL.squish + EXISTS (SELECT 1 FROM follows WHERE follows.target_account_id = accounts.id AND follows.account_id = :id) + SQL + end - ordered_list.filter_map { |ordered_list_key| map[ordered_list_key] }.map do |account| - AccountSuggestions::Suggestion.new( - account: account, - source: key - ) - end + def follow_requests_sql + <<~SQL.squish + EXISTS (SELECT 1 FROM follow_requests WHERE follow_requests.target_account_id = accounts.id AND follow_requests.account_id = :id) + SQL end - def to_ordered_list_key(_account) - raise NotImplementedError + def follow_recommendation_mutes_sql + <<~SQL.squish + EXISTS (SELECT 1 FROM follow_recommendation_mutes WHERE follow_recommendation_mutes.target_account_id = accounts.id AND follow_recommendation_mutes.account_id = :id) + SQL end end diff --git a/app/models/account_summary.rb b/app/models/account_summary.rb index 0d8835b83c6671..2a21d09a8bac6e 100644 --- a/app/models/account_summary.rb +++ b/app/models/account_summary.rb @@ -12,9 +12,11 @@ class AccountSummary < ApplicationRecord self.primary_key = :account_id + has_many :follow_recommendation_suppressions, primary_key: :account_id, foreign_key: :account_id, inverse_of: false + scope :safe, -> { where(sensitive: false) } scope :localized, ->(locale) { where(language: locale) } - scope :filtered, -> { joins(arel_table.join(FollowRecommendationSuppression.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:account_id].eq(FollowRecommendationSuppression.arel_table[:account_id])).join_sources).where(FollowRecommendationSuppression.arel_table[:id].eq(nil)) } + scope :filtered, -> { where.missing(:follow_recommendation_suppressions) } def self.refresh Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false) diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index d413cb386d4ed9..f581af74e8bf8c 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -72,7 +72,7 @@ def initialize(params) end def results - scope = latest_action_logs.includes(:target) + scope = latest_action_logs.includes(:target, :account) params.each do |key, value| next if key.to_s == 'page' diff --git a/app/models/announcement.rb b/app/models/announcement.rb index c5d6dd62e19a72..e630570020ea57 100644 --- a/app/models/announcement.rb +++ b/app/models/announcement.rb @@ -20,19 +20,28 @@ class Announcement < ApplicationRecord scope :unpublished, -> { where(published: false) } scope :published, -> { where(published: true) } - scope :without_muted, ->(account) { joins("LEFT OUTER JOIN announcement_mutes ON announcement_mutes.announcement_id = announcements.id AND announcement_mutes.account_id = #{account.id}").where(announcement_mutes: { id: nil }) } - scope :chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.published_at, announcements.created_at) ASC')) } - scope :reverse_chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.published_at, announcements.created_at) DESC')) } + scope :chronological, -> { order(coalesced_chronology_timestamps.asc) } + scope :reverse_chronological, -> { order(coalesced_chronology_timestamps.desc) } has_many :announcement_mutes, dependent: :destroy has_many :announcement_reactions, dependent: :destroy validates :text, presence: true - validates :starts_at, presence: true, if: -> { ends_at.present? } - validates :ends_at, presence: true, if: -> { starts_at.present? } + validates :starts_at, presence: true, if: :ends_at? + validates :ends_at, presence: true, if: :starts_at? before_validation :set_published, on: :create + class << self + def coalesced_chronology_timestamps + Arel.sql( + <<~SQL.squish + COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.published_at, announcements.created_at) + SQL + ) + end + end + def to_log_human_identifier text end @@ -45,10 +54,6 @@ def unpublish! update!(published: false, scheduled_at: nil) end - def time_range? - starts_at.present? && ends_at.present? - end - def mentions @mentions ||= Account.from_text(text) end @@ -70,22 +75,41 @@ def emojis end def reactions(account = nil) - records = begin - scope = announcement_reactions.group(:announcement_id, :name, :custom_emoji_id).order(Arel.sql('MIN(created_at) ASC')) - - if account.nil? - scope.select('name, custom_emoji_id, count(*) as count, false as me') - else - scope.select("name, custom_emoji_id, count(*) as count, exists(select 1 from announcement_reactions r where r.account_id = #{account.id} and r.announcement_id = announcement_reactions.announcement_id and r.name = announcement_reactions.name) as me") + grouped_ordered_announcement_reactions.select( + [:name, :custom_emoji_id, 'COUNT(*) as count'].tap do |values| + values << value_for_reaction_me_column(account) end + ).to_a.tap do |records| + ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji).call end - - ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji) - records end private + def grouped_ordered_announcement_reactions + announcement_reactions + .group(:announcement_id, :name, :custom_emoji_id) + .order( + Arel.sql('MIN(created_at)').asc + ) + end + + def value_for_reaction_me_column(account) + if account.nil? + 'FALSE AS me' + else + <<~SQL.squish + EXISTS( + SELECT 1 + FROM announcement_reactions inner_reactions + WHERE inner_reactions.account_id = #{account.id} + AND inner_reactions.announcement_id = announcement_reactions.announcement_id + AND inner_reactions.name = announcement_reactions.name + ) AS me + SQL + end + end + def set_published return unless scheduled_at.blank? || scheduled_at.past? diff --git a/app/models/appeal.rb b/app/models/appeal.rb index f1290ad01a556a..395056b76f5347 100644 --- a/app/models/appeal.rb +++ b/app/models/appeal.rb @@ -20,8 +20,11 @@ class Appeal < ApplicationRecord belongs_to :account belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id', inverse_of: :appeal - belongs_to :approved_by_account, class_name: 'Account', optional: true - belongs_to :rejected_by_account, class_name: 'Account', optional: true + + with_options class_name: 'Account', optional: true do + belongs_to :approved_by_account + belongs_to :rejected_by_account + end validates :text, presence: true, length: { maximum: 2_000 } validates :account_warning_id, uniqueness: true diff --git a/app/models/block.rb b/app/models/block.rb index 11156ebab3114f..5476542a5ab8eb 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -26,15 +26,20 @@ def local? end before_validation :set_uri, only: :create - after_commit :remove_blocking_cache + after_commit :invalidate_blocking_cache + after_commit :invalidate_follow_recommendations_cache private - def remove_blocking_cache + def invalidate_blocking_cache Rails.cache.delete("exclude_account_ids_for:#{account_id}") Rails.cache.delete("exclude_account_ids_for:#{target_account_id}") end + def invalidate_follow_recommendations_cache + Rails.cache.delete("follow_recommendations/#{account_id}") + end + def set_uri self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil? end diff --git a/app/models/bulk_import.rb b/app/models/bulk_import.rb index 810e471849245a..406fb2aba26c7a 100644 --- a/app/models/bulk_import.rb +++ b/app/models/bulk_import.rb @@ -44,8 +44,8 @@ class BulkImport < ApplicationRecord def self.progress!(bulk_import_id, imported: false) # Use `increment_counter` so that the incrementation is done atomically in the database - BulkImport.increment_counter(:processed_items, bulk_import_id) # rubocop:disable Rails/SkipsModelValidations - BulkImport.increment_counter(:imported_items, bulk_import_id) if imported # rubocop:disable Rails/SkipsModelValidations + BulkImport.increment_counter(:processed_items, bulk_import_id) + BulkImport.increment_counter(:imported_items, bulk_import_id) if imported # Since the incrementation has been done atomically, concurrent access to `bulk_import` is now bening bulk_import = BulkImport.find(bulk_import_id) diff --git a/app/models/concerns/account/associations.rb b/app/models/concerns/account/associations.rb index 31902ae21a8456..2bb6fed5ad0047 100644 --- a/app/models/concerns/account/associations.rb +++ b/app/models/concerns/account/associations.rb @@ -64,6 +64,7 @@ module Account::Associations has_one :deletion_request, class_name: 'AccountDeletionRequest', inverse_of: :account, dependent: :destroy # Follow recommendations + has_one :follow_recommendation, inverse_of: :account, dependent: nil has_one :follow_recommendation_suppression, inverse_of: :account, dependent: :destroy # Account statuses cleanup policy diff --git a/app/models/concerns/account/interactions.rb b/app/models/concerns/account/interactions.rb index 0ea26e628d8656..5b05c31e03f3c5 100644 --- a/app/models/concerns/account/interactions.rb +++ b/app/models/concerns/account/interactions.rb @@ -60,12 +60,6 @@ def account_note_map(target_account_ids, account_id) end end - def domain_blocking_map(target_account_ids, account_id) - accounts_map = Account.where(id: target_account_ids).select('id, domain').each_with_object({}) { |a, h| h[a.id] = a.domain } - blocked_domains = domain_blocking_map_by_domain(accounts_map.values.compact, account_id) - accounts_map.reduce({}) { |h, (id, domain)| h.merge(id => blocked_domains[domain]) } - end - def domain_blocking_map_by_domain(target_domains, account_id) follow_mapping(AccountDomainBlock.where(account_id: account_id, domain: target_domains), :domain) end @@ -122,8 +116,6 @@ def follow!(other_account, reblogs: nil, notify: nil, languages: nil, uri: nil, rel.save! if rel.changed? - remove_potential_friendship(other_account) - rel end @@ -137,13 +129,10 @@ def request_follow!(other_account, reblogs: nil, notify: nil, languages: nil, ur rel.save! if rel.changed? - remove_potential_friendship(other_account) - rel end def block!(other_account, uri: nil) - remove_potential_friendship(other_account) block_relationships.create_with(uri: uri) .find_or_create_by!(target_account: other_account) end @@ -154,8 +143,6 @@ def mute!(other_account, notifications: nil, duration: 0) mute.expires_in = duration.zero? ? nil : duration mute.save! - remove_potential_friendship(other_account) - # When toggling a mute between hiding and allowing notifications, the mute will already exist, so the find_or_create_by! call will return the existing Mute without updating the hide_notifications attribute. Therefore, we check that hide_notifications? is what we want and set it if it isn't. mute.update!(hide_notifications: notifications) if mute.hide_notifications? != notifications @@ -196,7 +183,7 @@ def unblock_domain!(other_domain) end def following?(other_account) - active_relationships.where(target_account: other_account).exists? + active_relationships.exists?(target_account: other_account) end def following_anyone? @@ -212,51 +199,51 @@ def followed_by?(other_account) end def blocking?(other_account) - block_relationships.where(target_account: other_account).exists? + block_relationships.exists?(target_account: other_account) end def domain_blocking?(other_domain) - domain_blocks.where(domain: other_domain).exists? + domain_blocks.exists?(domain: other_domain) end def muting?(other_account) - mute_relationships.where(target_account: other_account).exists? + mute_relationships.exists?(target_account: other_account) end def muting_conversation?(conversation) - conversation_mutes.where(conversation: conversation).exists? + conversation_mutes.exists?(conversation: conversation) end def muting_notifications?(other_account) - mute_relationships.where(target_account: other_account, hide_notifications: true).exists? + mute_relationships.exists?(target_account: other_account, hide_notifications: true) end def muting_reblogs?(other_account) - active_relationships.where(target_account: other_account, show_reblogs: false).exists? + active_relationships.exists?(target_account: other_account, show_reblogs: false) end def requested?(other_account) - follow_requests.where(target_account: other_account).exists? + follow_requests.exists?(target_account: other_account) end def favourited?(status) - status.proper.favourites.where(account: self).exists? + status.proper.favourites.exists?(account: self) end def bookmarked?(status) - status.proper.bookmarks.where(account: self).exists? + status.proper.bookmarks.exists?(account: self) end def reblogged?(status) - status.proper.reblogs.where(account: self).exists? + status.proper.reblogs.exists?(account: self) end def pinned?(status) - status_pins.where(status: status).exists? + status_pins.exists?(status: status) end def endorsed?(account) - account_pins.where(target_account: account).exists? + account_pins.exists?(target_account: account) end def status_matches_filters(status) @@ -313,10 +300,4 @@ def relations_map(account_ids, domains = nil, **options) domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, id), }) end - - private - - def remove_potential_friendship(other_account) - PotentialFriendshipTracker.remove(id, other_account.id) - end end diff --git a/app/models/concerns/account/search.rb b/app/models/concerns/account/search.rb index b02b9bd4611783..077e5d57b18d72 100644 --- a/app/models/concerns/account/search.rb +++ b/app/models/concerns/account/search.rb @@ -116,6 +116,7 @@ def searchable_properties [].tap do |properties| properties << 'bot' if bot? properties << 'verified' if fields.any?(&:verified?) + properties << 'discoverable' if discoverable? end end @@ -124,7 +125,7 @@ def search_for(terms, limit: DEFAULT_LIMIT, offset: 0) tsquery = generate_query_for_search(terms) find_by_sql([BASIC_SEARCH_SQL, { limit: limit, offset: offset, tsquery: tsquery }]).tap do |records| - ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat) + ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call end end @@ -133,7 +134,7 @@ def advanced_search_for(terms, account, limit: DEFAULT_LIMIT, following: false, sql_template = following ? ADVANCED_SEARCH_WITH_FOLLOWING : ADVANCED_SEARCH_WITHOUT_FOLLOWING find_by_sql([sql_template, { id: account.id, limit: limit, offset: offset, tsquery: tsquery }]).tap do |records| - ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat) + ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call end end diff --git a/app/models/concerns/attachmentable.rb b/app/models/concerns/attachmentable.rb index 4cdbdeb4738a49..3b7db1fcef3b7c 100644 --- a/app/models/concerns/attachmentable.rb +++ b/app/models/concerns/attachmentable.rb @@ -11,11 +11,12 @@ module Attachmentable # For some file extensions, there exist different content # type variants, and browsers often send the wrong one, # for example, sending an audio .ogg file as video/ogg, - # likewise, MimeMagic also misreports them as such. For + # likewise, kt-paperclip also misreports them as such. For # those files, it is necessary to use the output of the # `file` utility instead INCORRECT_CONTENT_TYPES = %w( audio/vorbis + audio/opus video/ogg video/webm ).freeze diff --git a/app/models/concerns/relationship_cacheable.rb b/app/models/concerns/relationship_cacheable.rb index 0d9359f7e7b71a..c32a8d62c6fef7 100644 --- a/app/models/concerns/relationship_cacheable.rb +++ b/app/models/concerns/relationship_cacheable.rb @@ -10,7 +10,7 @@ module RelationshipCacheable private def remove_relationship_cache - Rails.cache.delete("relationship:#{account_id}:#{target_account_id}") - Rails.cache.delete("relationship:#{target_account_id}:#{account_id}") + Rails.cache.delete(['relationship', account_id, target_account_id]) + Rails.cache.delete(['relationship', target_account_id, account_id]) end end diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb index bd8b6f4eb9a538..8382c9159968d8 100644 --- a/app/models/concerns/remotable.rb +++ b/app/models/concerns/remotable.rb @@ -7,7 +7,7 @@ module Remotable def remotable_attachment(attachment_name, limit, suppress_errors: true, download_on_assign: true, attribute_name: nil) attribute_name ||= :"#{attachment_name}_remote_url" - define_method("download_#{attachment_name}!") do |url = nil| + define_method(:"download_#{attachment_name}!") do |url = nil| url ||= self[attribute_name] return if url.blank? @@ -24,29 +24,29 @@ def remotable_attachment(attachment_name, limit, suppress_errors: true, download Request.new(:get, url).perform do |response| raise Mastodon::UnexpectedResponseError, response unless (200...300).cover?(response.code) - public_send("#{attachment_name}=", ResponseWithLimit.new(response, limit)) + public_send(:"#{attachment_name}=", ResponseWithLimit.new(response, limit)) end rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError => e Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" } - public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present? + public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present? raise e unless suppress_errors rescue Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Paperclip::Error, Mastodon::DimensionsValidationError, Mastodon::StreamValidationError => e Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" } - public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present? + public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present? end nil end - define_method("#{attribute_name}=") do |url| - return if self[attribute_name] == url && public_send("#{attachment_name}_file_name").present? + define_method(:"#{attribute_name}=") do |url| + return if self[attribute_name] == url && public_send(:"#{attachment_name}_file_name").present? self[attribute_name] = url if has_attribute?(attribute_name) - public_send("download_#{attachment_name}!", url) if download_on_assign + public_send(:"download_#{attachment_name}!", url) if download_on_assign end - alias_method("reset_#{attachment_name}!", "download_#{attachment_name}!") + alias_method(:"reset_#{attachment_name}!", :"download_#{attachment_name}!") end end end diff --git a/app/models/concerns/user/omniauthable.rb b/app/models/concerns/user/omniauthable.rb index 6d1d1b8cc3fbdc..113bfda23043eb 100644 --- a/app/models/concerns/user/omniauthable.rb +++ b/app/models/concerns/user/omniauthable.rb @@ -61,7 +61,7 @@ def create_for_oauth(auth) user.account.avatar_remote_url = nil end - user.confirm! if email_is_verified + user.mark_email_as_confirmed! if email_is_verified user.save! user end diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 97b1c63bf3732c..1c9b443959aabb 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -41,7 +41,7 @@ class CustomEmoji < ApplicationRecord has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' } }, validate_media_type: false - before_validation :downcase_domain + normalizes :domain, with: ->(domain) { domain.downcase } validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT } validates :shortcode, uniqueness: { scope: :domain }, format: { with: SHORTCODE_ONLY_RE }, length: { minimum: 2 } @@ -86,7 +86,7 @@ def from_text(text, domain = nil) end def search(shortcode) - where('"custom_emojis"."shortcode" ILIKE ?', "%#{shortcode}%") + where(arel_table[:shortcode].matches("%#{sanitize_sql_like(shortcode)}%")) end end @@ -95,8 +95,4 @@ def search(shortcode) def remove_entity_cache Rails.cache.delete(EntityCache.instance.to_key(:emoji, shortcode, domain)) end - - def downcase_domain - self.domain = domain.downcase unless domain.nil? - end end diff --git a/app/models/custom_emoji_filter.rb b/app/models/custom_emoji_filter.rb index ed7a8dda15c263..870cc71974eb35 100644 --- a/app/models/custom_emoji_filter.rb +++ b/app/models/custom_emoji_filter.rb @@ -31,7 +31,7 @@ def results def scope_for(key, value) case key.to_s when 'local' - CustomEmoji.local.left_joins(:category).reorder(Arel.sql('custom_emoji_categories.name ASC NULLS FIRST, custom_emojis.shortcode ASC')) + CustomEmoji.local.left_joins(:category).reorder(CustomEmojiCategory.arel_table[:name].asc.nulls_first).order(shortcode: :asc) when 'remote' CustomEmoji.remote when 'by_domain' diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 0f4fd78cbff68b..371267fc2810ba 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -91,7 +91,7 @@ def self.cached_filters_for(account_id) filters_hash.values.map { |cache| [cache.delete(:filter), cache] } end.to_a - active_filters.select { |custom_filter, _| !custom_filter.expired? } + active_filters.reject { |custom_filter, _| custom_filter.expired? } end def self.apply_cached_filters(cached_filters, status) @@ -128,6 +128,10 @@ def clean_up_contexts end def context_must_be_valid - errors.add(:context, I18n.t('filters.errors.invalid_context')) if context.empty? || context.any? { |c| !VALID_CONTEXTS.include?(c) } + errors.add(:context, I18n.t('filters.errors.invalid_context')) if invalid_context_value? + end + + def invalid_context_value? + context.blank? || context.difference(VALID_CONTEXTS).any? end end diff --git a/app/models/domain_allow.rb b/app/models/domain_allow.rb index ce9597b4d1561a..47ada7ac2326a7 100644 --- a/app/models/domain_allow.rb +++ b/app/models/domain_allow.rb @@ -17,8 +17,6 @@ class DomainAllow < ApplicationRecord validates :domain, presence: true, uniqueness: true, domain: true - scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } - def to_log_human_identifier domain end diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index ff23f8fcc46449..a05db099a8d1d8 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -28,10 +28,9 @@ class DomainBlock < ApplicationRecord has_many :accounts, foreign_key: :domain, primary_key: :domain, inverse_of: false, dependent: nil delegate :count, to: :accounts, prefix: true - scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } scope :with_user_facing_limitations, -> { where(severity: [:silence, :suspend]) } scope :with_limitations, -> { where(severity: [:silence, :suspend]).or(where(reject_media: true)) } - scope :by_severity, -> { order(Arel.sql('(CASE severity WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 0 END), domain')) } + scope :by_severity, -> { in_order_of(:severity, %w(noop silence suspend)).order(:domain) } def to_log_human_identifier domain @@ -85,11 +84,6 @@ def stricter_than?(other_block) (reject_media || !other_block.reject_media) && (reject_reports || !other_block.reject_reports) end - def affected_accounts_count - scope = suspend? ? accounts.where(suspended_at: created_at) : accounts.where(silenced_at: created_at) - scope.count - end - def public_domain return domain unless obfuscate? diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index 60e90208dbe1ea..40be59420aeb44 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -4,11 +4,12 @@ # # Table name: email_domain_blocks # -# id :bigint(8) not null, primary key -# domain :string default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# parent_id :bigint(8) +# id :bigint(8) not null, primary key +# domain :string default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# parent_id :bigint(8) +# allow_with_approval :boolean default(FALSE), not null # class EmailDomainBlock < ApplicationRecord @@ -20,8 +21,10 @@ class EmailDomainBlock < ApplicationRecord include DomainNormalizable include Paginable - belongs_to :parent, class_name: 'EmailDomainBlock', optional: true - has_many :children, class_name: 'EmailDomainBlock', foreign_key: :parent_id, inverse_of: :parent, dependent: :destroy + with_options class_name: 'EmailDomainBlock' do + belongs_to :parent, optional: true + has_many :children, foreign_key: :parent_id, inverse_of: :parent, dependent: :destroy + end validates :domain, presence: true, uniqueness: true, domain: true @@ -42,8 +45,8 @@ def initialize(domain_or_domains, attempt_ip: nil) @attempt_ip = attempt_ip end - def match? - blocking? || invalid_uri? + def match?(...) + blocking?(...) || invalid_uri? end private @@ -52,8 +55,8 @@ def invalid_uri? @uris.any?(&:nil?) end - def blocking? - blocks = EmailDomainBlock.where(domain: domains_with_variants).order(Arel.sql('char_length(domain) desc')) + def blocking?(allow_with_approval: false) + blocks = EmailDomainBlock.where(domain: domains_with_variants, allow_with_approval: allow_with_approval).order(Arel.sql('char_length(domain) desc')) blocks.each { |block| block.history.add(@attempt_ip) } if @attempt_ip.present? blocks.any? end @@ -86,4 +89,8 @@ def extract_uris(domain_or_domains) def self.block?(domain_or_domains, attempt_ip: nil) Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match? end + + def self.requires_approval?(domain_or_domains, attempt_ip: nil) + Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match?(allow_with_approval: true) + end end diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb index 7c36aa8b0bc174..ea8aa4787c4335 100644 --- a/app/models/featured_tag.rb +++ b/app/models/featured_tag.rb @@ -45,7 +45,7 @@ def increment(timestamp) end def decrement(deleted_status_id) - update(statuses_count: [0, statuses_count - 1].max, last_status_at: account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag).where.not(id: deleted_status_id).select(:created_at).first&.created_at) + update(statuses_count: [0, statuses_count - 1].max, last_status_at: visible_tagged_account_statuses.where.not(id: deleted_status_id).select(:created_at).first&.created_at) end private @@ -55,8 +55,8 @@ def set_tag end def reset_data - self.statuses_count = account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag).count - self.last_status_at = account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag).select(:created_at).first&.created_at + self.statuses_count = visible_tagged_account_statuses.count + self.last_status_at = visible_tagged_account_statuses.select(:created_at).first&.created_at end def validate_featured_tags_limit @@ -66,6 +66,14 @@ def validate_featured_tags_limit end def validate_tag_uniqueness - errors.add(:name, :taken) if FeaturedTag.by_name(name).where(account_id: account_id).exists? + errors.add(:name, :taken) if tag_already_featured_for_account? + end + + def tag_already_featured_for_account? + FeaturedTag.by_name(name).exists?(account_id: account_id) + end + + def visible_tagged_account_statuses + account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag) end end diff --git a/app/models/follow.rb b/app/models/follow.rb index 108f5c5d515bf0..4d1598dcad66c7 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -44,10 +44,10 @@ def revoke_request! before_validation :set_uri, only: :create after_create :increment_cache_counters - after_create :invalidate_hash_cache after_destroy :remove_endorsements after_destroy :decrement_cache_counters - after_destroy :invalidate_hash_cache + after_commit :invalidate_follow_recommendations_cache + after_commit :invalidate_hash_cache private @@ -74,4 +74,8 @@ def invalidate_hash_cache Rails.cache.delete("followers_hash:#{target_account_id}:#{account.synchronization_uri_prefix}") end + + def invalidate_follow_recommendations_cache + Rails.cache.delete("follow_recommendations/#{account_id}") + end end diff --git a/app/models/follow_recommendation_filter.rb b/app/models/follow_recommendation_filter.rb index 2fab975698871c..62a02eba5ae5c5 100644 --- a/app/models/follow_recommendation_filter.rb +++ b/app/models/follow_recommendation_filter.rb @@ -17,12 +17,9 @@ def initialize(params) def results if params['status'] == 'suppressed' - Account.joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc).to_a + Account.includes(:account_stat).joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc) else - account_ids = redis.zrevrange("follow_recommendations:#{@language}", 0, -1).map(&:to_i) - accounts = Account.where(id: account_ids).index_by(&:id) - - account_ids.filter_map { |id| accounts[id] } + Account.includes(:account_stat).joins(:follow_recommendation).merge(FollowRecommendation.localized(@language).order(rank: :desc)) end end end diff --git a/app/models/follow_recommendation_mute.rb b/app/models/follow_recommendation_mute.rb new file mode 100644 index 00000000000000..d166d0a620622f --- /dev/null +++ b/app/models/follow_recommendation_mute.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: follow_recommendation_mutes +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# target_account_id :bigint(8) not null +# created_at :datetime not null +# updated_at :datetime not null +# +class FollowRecommendationMute < ApplicationRecord + belongs_to :account + belongs_to :target_account, class_name: 'Account' + + validates :target_account, uniqueness: { scope: :account_id } + + after_commit :invalidate_follow_recommendations_cache + + private + + def invalidate_follow_recommendations_cache + Rails.cache.delete("follow_recommendations/#{account_id}") + end +end diff --git a/app/models/follow_recommendation_suppression.rb b/app/models/follow_recommendation_suppression.rb index e261a2fe359dba..59e94dc6b3a464 100644 --- a/app/models/follow_recommendation_suppression.rb +++ b/app/models/follow_recommendation_suppression.rb @@ -11,19 +11,5 @@ # class FollowRecommendationSuppression < ApplicationRecord - include Redisable - belongs_to :account - - after_commit :remove_follow_recommendations, on: :create - - private - - def remove_follow_recommendations - redis.pipelined do |pipeline| - I18n.available_locales.each do |locale| - pipeline.zrem("follow_recommendations:#{locale}", account_id) - end - end - end end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index a5c23e09d4769f..c13cc718d8f0ce 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -33,7 +33,7 @@ class FollowRequest < ApplicationRecord def authorize! follow = account.follow!(target_account, reblogs: show_reblogs, notify: notify, languages: languages, uri: uri, bypass_limit: true) - ListAccount.where(follow_request: self).update_all(follow_request_id: nil, follow_id: follow.id) # rubocop:disable Rails/SkipsModelValidations + ListAccount.where(follow_request: self).update_all(follow_request_id: nil, follow_id: follow.id) MergeWorker.perform_async(target_account.id, account.id) if account.local? destroy! end @@ -45,10 +45,15 @@ def local? end before_validation :set_uri, only: :create + after_commit :invalidate_follow_recommendations_cache private def set_uri self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil? end + + def invalidate_follow_recommendations_cache + Rails.cache.delete("follow_recommendations/#{account_id}") + end end diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 7be026d85ff9cb..cb37a522174d43 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -84,7 +84,7 @@ class Form::AdminSettings KEYS.each do |key| define_method(key) do - return instance_variable_get("@#{key}") if instance_variable_defined?("@#{key}") + return instance_variable_get(:"@#{key}") if instance_variable_defined?(:"@#{key}") stored_value = if UPLOAD_KEYS.include?(key) SiteUpload.where(var: key).first_or_initialize(var: key) @@ -94,12 +94,12 @@ class Form::AdminSettings Setting.public_send(key) end - instance_variable_set("@#{key}", stored_value) + instance_variable_set(:"@#{key}", stored_value) end end UPLOAD_KEYS.each do |key| - define_method("#{key}=") do |file| + define_method(:"#{key}=") do |file| value = public_send(key) value.file = file rescue Mastodon::DimensionsValidationError => e @@ -114,13 +114,13 @@ def save return false unless errors.empty? && valid? KEYS.each do |key| - next unless instance_variable_defined?("@#{key}") + next unless instance_variable_defined?(:"@#{key}") if UPLOAD_KEYS.include?(key) public_send(key).save else setting = Setting.where(var: key).first_or_initialize(var: key) - setting.update(value: typecast_value(key, instance_variable_get("@#{key}"))) + setting.update(value: typecast_value(key, instance_variable_get(:"@#{key}"))) end end end @@ -139,9 +139,9 @@ def typecast_value(key, value) def validate_site_uploads UPLOAD_KEYS.each do |key| - next unless instance_variable_defined?("@#{key}") + next unless instance_variable_defined?(:"@#{key}") - upload = instance_variable_get("@#{key}") + upload = instance_variable_get(:"@#{key}") next if upload.valid? upload.errors.each do |error| diff --git a/app/models/form/import.rb b/app/models/form/import.rb index 29a2975c7be187..fc83d9c58c1fdb 100644 --- a/app/models/form/import.rb +++ b/app/models/form/import.rb @@ -43,14 +43,19 @@ class EmptyFileError < StandardError; end validate :validate_data def guessed_type - return :muting if csv_headers_match?('Hide notifications') - return :following if csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages') - return :following if file_name_matches?('follows') || file_name_matches?('following_accounts') - return :blocking if file_name_matches?('blocks') || file_name_matches?('blocked_accounts') - return :muting if file_name_matches?('mutes') || file_name_matches?('muted_accounts') - return :domain_blocking if file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains') - return :bookmarks if file_name_matches?('bookmarks') - return :lists if file_name_matches?('lists') + if csv_headers_match?('Hide notifications') || file_name_matches?('mutes') || file_name_matches?('muted_accounts') + :muting + elsif csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages') || file_name_matches?('follows') || file_name_matches?('following_accounts') + :following + elsif file_name_matches?('blocks') || file_name_matches?('blocked_accounts') + :blocking + elsif file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains') + :domain_blocking + elsif file_name_matches?('bookmarks') + :bookmarks + elsif file_name_matches?('lists') + :lists + end end # Whether the uploaded CSV file seems to correspond to a different import type than the one selected @@ -64,7 +69,7 @@ def save ApplicationRecord.transaction do now = Time.now.utc @bulk_import = current_account.bulk_imports.create(type: type, overwrite: overwrite || false, state: :unconfirmed, original_filename: data.original_filename, likely_mismatched: likely_mismatched?) - nb_items = BulkImportRow.insert_all(parsed_rows.map { |row| { bulk_import_id: bulk_import.id, data: row, created_at: now, updated_at: now } }).length # rubocop:disable Rails/SkipsModelValidations + nb_items = BulkImportRow.insert_all(parsed_rows.map { |row| { bulk_import_id: bulk_import.id, data: row, created_at: now, updated_at: now } }).length @bulk_import.update(total_items: nb_items) end end diff --git a/app/models/generated_annual_report.rb b/app/models/generated_annual_report.rb new file mode 100644 index 00000000000000..43c97d7108b141 --- /dev/null +++ b/app/models/generated_annual_report.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: generated_annual_reports +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# year :integer not null +# data :jsonb not null +# schema_version :integer not null +# viewed_at :datetime +# created_at :datetime not null +# updated_at :datetime not null +# + +class GeneratedAnnualReport < ApplicationRecord + belongs_to :account + + scope :pending, -> { where(viewed_at: nil) } + + def viewed? + viewed_at.present? + end + + def view! + update!(viewed_at: Time.now.utc) + end + + def account_ids + data['most_reblogged_accounts'].pluck('account_id') + data['commonly_interacted_with_accounts'].pluck('account_id') + end + + def status_ids + data['top_statuses'].values + end +end diff --git a/app/models/instance.rb b/app/models/instance.rb index 17ee0cbb1e0381..8f8d87c62a6a90 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -23,6 +23,7 @@ class Instance < ApplicationRecord scope :searchable, -> { where.not(domain: DomainBlock.select(:domain)) } scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } + scope :domain_starts_with, ->(value) { where(arel_table[:domain].matches("#{sanitize_sql_like(value)}%", false, true)) } scope :by_domain_and_subdomains, ->(domain) { where("reverse('.' || domain) LIKE reverse(?)", "%.#{domain}") } def self.refresh diff --git a/app/models/mute.rb b/app/models/mute.rb index 8fc5422624a3e5..1d18b30eea9385 100644 --- a/app/models/mute.rb +++ b/app/models/mute.rb @@ -23,11 +23,16 @@ class Mute < ApplicationRecord validates :account_id, uniqueness: { scope: :target_account_id } - after_commit :remove_blocking_cache + after_commit :invalidate_blocking_cache + after_commit :invalidate_follow_recommendations_cache private - def remove_blocking_cache + def invalidate_blocking_cache Rails.cache.delete("exclude_account_ids_for:#{account_id}") end + + def invalidate_follow_recommendations_cache + Rails.cache.delete("follow_recommendations/#{account_id}") + end end diff --git a/app/models/notification.rb b/app/models/notification.rb index 60f834a633358b..54212d675f1f9b 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -111,7 +111,7 @@ def preload_cache_collection_target_statuses(notifications, &_block) # Instead of using the usual `includes`, manually preload each type. # If polymorphic associations are loaded with the usual `includes`, other types of associations will be loaded more. - ActiveRecord::Associations::Preloader.new(records: grouped_notifications, associations: associations) + ActiveRecord::Associations::Preloader.new(records: grouped_notifications, associations: associations).call end unique_target_statuses = notifications.filter_map(&:target_status).uniq diff --git a/app/models/poll.rb b/app/models/poll.rb index 72f04f00a72fac..cc4184f80a4c0f 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -27,8 +27,11 @@ class Poll < ApplicationRecord belongs_to :status has_many :votes, class_name: 'PollVote', inverse_of: :poll, dependent: :delete_all - has_many :voters, -> { group('accounts.id') }, through: :votes, class_name: 'Account', source: :account - has_many :local_voters, -> { group('accounts.id').merge(Account.local) }, through: :votes, class_name: 'Account', source: :account + + with_options class_name: 'Account', source: :account, through: :votes do + has_many :voters, -> { group('accounts.id') } + has_many :local_voters, -> { group('accounts.id').merge(Account.local) } + end has_many :notifications, as: :activity, dependent: :destroy @@ -54,7 +57,7 @@ def possibly_stale? end def voted?(account) - account.id == account_id || votes.where(account: account).exists? + account.id == account_id || votes.exists?(account: account) end def own_votes(account) diff --git a/app/models/preview_cards_status.rb b/app/models/preview_cards_status.rb index 214eec22e5c590..5ff635205548b3 100644 --- a/app/models/preview_cards_status.rb +++ b/app/models/preview_cards_status.rb @@ -4,8 +4,8 @@ # # Table name: preview_cards_statuses # -# preview_card_id :bigint(8) not null -# status_id :bigint(8) not null +# preview_card_id :bigint(8) not null, primary key +# status_id :bigint(8) not null, primary key # url :string # class PreviewCardsStatus < ApplicationRecord diff --git a/app/models/privacy_policy.rb b/app/models/privacy_policy.rb index 36cbf1882289d8..c0d6e1b76d9202 100644 --- a/app/models/privacy_policy.rb +++ b/app/models/privacy_policy.rb @@ -1,66 +1,7 @@ # frozen_string_literal: true class PrivacyPolicy < ActiveModelSerializers::Model - DEFAULT_PRIVACY_POLICY = <<~TXT - This privacy policy describes how %{domain} ("%{domain}", "we", "us") collects, protects and uses the personally identifiable information you may provide through the %{domain} website or its API. The policy also describes the choices available to you regarding our use of your personal information and how you can access and update this information. This policy does not apply to the practices of companies that %{domain} does not own or control, or to individuals that %{domain} does not employ or manage. - - # What information do we collect? - - - **Basic account information**: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly. - - **Posts, following and other public information**: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public. - - **Direct and followers-only posts**: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. **Please keep in mind that the operators of the server and any receiving server may view such messages**, and that recipients may screenshot, copy or otherwise re-share them. **Do not share any sensitive information over Mastodon.** - - **IPs and other metadata**: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server. - - # What do we use your information for? - - Any of the information we collect from you may be used in the following ways: - - - To provide the core functionality of Mastodon. You can only interact with other people's content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline. - - To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations. - - The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions. - - # How do we protect your information? - - We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account. - - # What is our data retention policy? - - We will make a good faith effort to: - - - Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days. - - Retain the IP addresses associated with registered users no more than 12 months. - - You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image. - - You may irreversibly delete your account at any time. - - # Do we use cookies? - - Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account. - - We use cookies to understand and save your preferences for future visits. - - # Do we disclose any information to outside parties? - - We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety. - - Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this. - - When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password. - - # Site usage by children - - If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site. - - If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site. - - Law requirements can be different if this server is in another jurisdiction. - - ___ - - This document is CC-BY-SA. Originally adapted from the [Discourse privacy policy](https://github.com/discourse/discourse). - TXT - + DEFAULT_PRIVACY_POLICY = Rails.root.join('config', 'templates', 'privacy-policy.md').read DEFAULT_UPDATED_AT = DateTime.new(2022, 10, 7).freeze attributes :updated_at, :text diff --git a/app/models/report.rb b/app/models/report.rb index c565362cc64adf..38da26d7b75408 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -29,16 +29,19 @@ class Report < ApplicationRecord rate_limit by: :account, family: :reports belongs_to :account - belongs_to :target_account, class_name: 'Account' - belongs_to :action_taken_by_account, class_name: 'Account', optional: true - belongs_to :assigned_account, class_name: 'Account', optional: true + + with_options class_name: 'Account' do + belongs_to :target_account + belongs_to :action_taken_by_account, optional: true + belongs_to :assigned_account, optional: true + end has_many :notes, class_name: 'ReportNote', inverse_of: :report, dependent: :destroy has_many :notifications, as: :activity, dependent: :destroy scope :unresolved, -> { where(action_taken_at: nil) } scope :resolved, -> { where.not(action_taken_at: nil) } - scope :with_accounts, -> { includes([:account, :target_account, :action_taken_by_account, :assigned_account].index_with({ user: [:invite_request, :invite] })) } + scope :with_accounts, -> { includes([:account, :target_account, :action_taken_by_account, :assigned_account].index_with([:account_stat, { user: [:invite_request, :invite, :ips] }])) } # A report is considered local if the reporter is local delegate :local?, to: :account diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index 7f5f0d9a9a15c3..c67180d3baf54e 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -41,7 +41,7 @@ def platform class << self def active?(id) - id && where(session_id: id).exists? + id && exists?(session_id: id) end def activate(**options) diff --git a/app/models/setting.rb b/app/models/setting.rb index 3bdc6ffb40cca3..6af7a98c6df64b 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -13,49 +13,114 @@ # thing_id :bigint(8) # -class Setting < RailsSettings::Base - source Rails.root.join('config', 'settings.yml') +# This file is derived from a fork of the `rails-settings-cached` gem available at +# https://github.com/mastodon/rails-settings-cached/tree/v0.6.6-aliases-true, with +# the original available at: +# https://github.com/huacnlee/rails-settings-cached/tree/0.x - def to_param - var - end +# It is licensed as follows: - class << self - def [](key) - return super(key) unless rails_initialized? +# Copyright (c) 2006 Alex Wayne +# Some additional features added 2009 by Georg Ledermann + +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: + +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. - Rails.cache.fetch(cache_key(key, nil)) do - db_val = object(key) +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOa AND +# NONINFRINGEMENT. IN NO EVENT SaALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - if db_val - default_value = default_settings[key] +class Setting < ApplicationRecord + after_commit :rewrite_cache, on: %i(create update) + after_commit :expire_cache, on: %i(destroy) - return default_value.with_indifferent_access.merge!(db_val.value) if default_value.is_a?(Hash) + # Settings are server-wide settings only, but they were previously + # used for users too. This can be dropped later with a database + # migration dropping any scoped setting. + default_scope { where(thing_type: nil, thing_id: nil) } - db_val.value - else - default_settings[key] - end + class << self + # get or set a variable with the variable as the called method + # rubocop:disable Style/MissingRespondToMissing + def method_missing(method, *args) + # set a value for a variable + if method.end_with?('=') + var_name = method.to_s.chomp('=') + value = args.first + self[var_name] = value + else + # retrieve a value + self[method.to_s] end end + # rubocop:enable Style/MissingRespondToMissing - def all_as_records - vars = thing_scoped - records = vars.index_by(&:var) + def cache_prefix_by_startup + @cache_prefix_by_startup ||= Digest::MD5.hexdigest(default_settings.to_s) + end - default_settings.each do |key, default_value| - next if records.key?(key) || default_value.is_a?(Hash) + def cache_key(var_name) + "rails_settings_cached/#{cache_prefix_by_startup}/#{var_name}" + end - records[key] = Setting.new(var: key, value: default_value) + def [](key) + Rails.cache.fetch(cache_key(key)) do + db_val = find_by(var: key) + db_val ? db_val.value : default_settings[key] end + end - records + # set a setting value by [] notation + def []=(var_name, value) + record = find_or_initialize_by(var: var_name.to_s) + record.value = value + record.save! end def default_settings - return {} unless RailsSettings::Default.enabled? + return @default_settings if defined?(@default_settings) - RailsSettings::Default.instance + content = Rails.root.join('config', 'settings.yml').read + hash = content.empty? ? {} : YAML.safe_load(ERB.new(content).result, aliases: true).to_hash + @default_settings = (hash[Rails.env] || {}).freeze end end + + # get the value field, YAML decoded + def value + YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess, Symbol]) if self[:value].present? + end + + # set the value field, YAML encoded + def value=(new_value) + self[:value] = new_value.to_yaml + end + + def rewrite_cache + Rails.cache.write(cache_key, value) + end + + def expire_cache + Rails.cache.delete(cache_key) + end + + def cache_key + self.class.cache_key(var) + end + + def to_param + var + end end diff --git a/app/models/status.rb b/app/models/status.rb index eb4c9e4f3a28cf..4a05def1726299 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -59,8 +59,10 @@ class Status < ApplicationRecord belongs_to :conversation, optional: true belongs_to :preloadable_poll, class_name: 'Poll', foreign_key: 'poll_id', optional: true, inverse_of: false - belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true - belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true + with_options class_name: 'Status', optional: true do + belongs_to :thread, foreign_key: 'in_reply_to_id', inverse_of: :replies + belongs_to :reblog, foreign_key: 'reblog_of_id', inverse_of: :reblogs + end has_many :favourites, inverse_of: :status, dependent: :destroy has_many :bookmarks, inverse_of: :status, dependent: :destroy @@ -109,8 +111,6 @@ class Status < ApplicationRecord scope :with_public_visibility, -> { where(visibility: :public) } scope :with_public_or_unlisted_visibility, -> { where(visibility: :public).or(where(visibility: :unlisted).without_replies) } scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) } - scope :excluding_silenced_accounts, -> { left_outer_joins(:account).where(accounts: { silenced_at: nil }) } - scope :including_silenced_accounts, -> { left_outer_joins(:account).where.not(accounts: { silenced_at: nil }) } scope :not_excluded_by_account, ->(account) { where.not(account_id: account.excluded_from_timeline_account_ids) } scope :not_domain_blocked_by_account, ->(account) { account.excluded_from_timeline_domains.blank? ? left_outer_joins(:account) : left_outer_joins(:account).where('accounts.domain IS NULL OR accounts.domain NOT IN (?)', account.excluded_from_timeline_domains) } scope :tagged_with_all, lambda { |tag_ids| @@ -264,7 +264,7 @@ def non_sensitive_with_media? end def reported? - @reported ||= Report.where(target_account: account).unresolved.where('? = ANY(status_ids)', id).exists? + @reported ||= Report.where(target_account: account).unresolved.exists?(['? = ANY(status_ids)', id]) end def emojis @@ -278,7 +278,9 @@ def emojis def ordered_media_attachments if ordered_media_attachment_ids.nil? - media_attachments + # NOTE: sort Ruby-side to avoid hitting the database when the status is + # not persisted to database yet + media_attachments.sort_by(&:id) else map = media_attachments.index_by(&:id) ordered_media_attachment_ids.filter_map { |media_attachment_id| map[media_attachment_id] } diff --git a/app/models/tag.rb b/app/models/tag.rb index 46e55d74f9ddac..f2168ae90470e7 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -39,6 +39,8 @@ class Tag < ApplicationRecord HASHTAG_NAME_RE = /\A(#{HASHTAG_NAME_PAT})\z/i HASHTAG_INVALID_CHARS_RE = /[^[:alnum:]\u0E47-\u0E4E#{HASHTAG_SEPARATORS}]/ + RECENT_STATUS_LIMIT = 1000 + validates :name, presence: true, format: { with: HASHTAG_NAME_RE } validates :display_name, format: { with: HASHTAG_NAME_RE } validate :validate_name_change, if: -> { !new_record? && name_changed? } @@ -53,7 +55,7 @@ class Tag < ApplicationRecord scope :not_trendable, -> { where(trendable: false) } scope :recently_used, lambda { |account| joins(:statuses) - .where(statuses: { id: account.statuses.select(:id).limit(1000) }) + .where(statuses: { id: account.statuses.select(:id).limit(RECENT_STATUS_LIMIT) }) .group(:id).order(Arel.sql('count(*) desc')) } scope :matches_name, ->(term) { where(arel_table[:name].lower.matches(arel_table.lower("#{sanitize_sql_like(Tag.normalize(term))}%"), nil, true)) } # Search with case-sensitive to use B-tree index diff --git a/app/models/user.rb b/app/models/user.rb index a1574c02ad86c9..70c24336f35cfa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -117,16 +117,16 @@ class User < ApplicationRecord scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where(accounts: { suspended_at: nil }) } scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) } scope :matches_ip, ->(value) { left_joins(:ips).where('user_ips.ip <<= ?', value).group('users.id') } - scope :emailable, -> { confirmed.enabled.joins(:account).merge(Account.searchable) } - before_validation :sanitize_languages before_validation :sanitize_role - before_validation :sanitize_time_zone - before_validation :sanitize_locale before_create :set_approved after_commit :send_pending_devise_notifications after_create_commit :trigger_webhooks + normalizes :locale, with: ->(locale) { I18n.available_locales.exclude?(locale.to_sym) ? nil : locale } + normalizes :time_zone, with: ->(time_zone) { ActiveSupport::TimeZone[time_zone].nil? ? nil : time_zone } + normalizes :chosen_languages, with: ->(chosen_languages) { chosen_languages.compact_blank.presence } + # This avoids a deprecation warning from Rails 5.1 # It seems possible that a future release of devise-two-factor will # handle this itself, and this can be removed from our User class. @@ -149,6 +149,10 @@ def self.those_who_can(*any_of_privileges) end end + def self.skip_mx_check? + Rails.env.local? + end + def role if role_id.nil? UserRole.everyone @@ -186,37 +190,16 @@ def to_log_route_param end def confirm - new_user = !confirmed? - self.approved = true if open_registrations? && !sign_up_from_ip_requires_approval? - - super - - if new_user - # Avoid extremely unlikely race condition when approving and confirming - # the user at the same time - reload unless approved? - - if approved? - prepare_new_user! - else - notify_staff_about_pending_account! - end + wrap_email_confirmation do + super end end - def confirm! - new_user = !confirmed? - self.approved = true if open_registrations? - - skip_confirmation! - save! - - if new_user - # Avoid extremely unlikely race condition when approving and confirming - # the user at the same time - reload unless approved? - - prepare_new_user! if approved? + # Mark current email as confirmed, bypassing Devise + def mark_email_as_confirmed! + wrap_email_confirmation do + skip_confirmation! + save! end end @@ -418,7 +401,7 @@ def render_and_send_devise_message(notification, *args, **kwargs) def set_approved self.approved = begin - if sign_up_from_ip_requires_approval? + if sign_up_from_ip_requires_approval? || sign_up_email_requires_approval? false else open_registrations? || valid_invitation? || external? @@ -426,8 +409,53 @@ def set_approved end end + def grant_approval_on_confirmation? + # Re-check approval on confirmation if the server has switched to open registrations + open_registrations? && !sign_up_from_ip_requires_approval? && !sign_up_email_requires_approval? + end + + def wrap_email_confirmation + new_user = !confirmed? + self.approved = true if grant_approval_on_confirmation? + + yield + + if new_user + # Avoid extremely unlikely race condition when approving and confirming + # the user at the same time + reload unless approved? + + if approved? + prepare_new_user! + else + notify_staff_about_pending_account! + end + end + end + def sign_up_from_ip_requires_approval? - !sign_up_ip.nil? && IpBlock.where(severity: :sign_up_requires_approval).where('ip >>= ?', sign_up_ip.to_s).exists? + sign_up_ip.present? && IpBlock.sign_up_requires_approval.exists?(['ip >>= ?', sign_up_ip.to_s]) + end + + def sign_up_email_requires_approval? + return false if email.blank? + + _, domain = email.split('@', 2) + return false if domain.blank? + + records = [] + + # Doing this conditionally is not very satisfying, but this is consistent + # with the MX records validations we do and keeps the specs tractable. + unless self.class.skip_mx_check? + Resolv::DNS.open do |dns| + dns.timeouts = 5 + + records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }.compact_blank + end + end + + EmailDomainBlock.requires_approval?(records + [domain], attempt_ip: sign_up_ip) end def open_registrations? @@ -442,25 +470,10 @@ def bypass_invite_request_check? @bypass_invite_request_check end - def sanitize_languages - return if chosen_languages.nil? - - chosen_languages.compact_blank! - self.chosen_languages = nil if chosen_languages.empty? - end - def sanitize_role self.role = nil if role.present? && role.everyone? end - def sanitize_time_zone - self.time_zone = nil if time_zone.present? && ActiveSupport::TimeZone[time_zone].nil? - end - - def sanitize_locale - self.locale = nil if locale.present? && I18n.available_locales.exclude?(locale.to_sym) - end - def prepare_new_user! BootstrapTimelineWorker.perform_async(account_id) ActivityTracker.increment('activity:accounts:local') @@ -493,7 +506,7 @@ def needs_feed_update? end def validate_email_dns? - email_changed? && !external? && !Rails.env.local? + email_changed? && !external? && !self.class.skip_mx_check? end def validate_role_elevation diff --git a/app/presenters/account_relationships_presenter.rb b/app/presenters/account_relationships_presenter.rb index 5d2b5435dd23c9..8482ef54da4368 100644 --- a/app/presenters/account_relationships_presenter.rb +++ b/app/presenters/account_relationships_presenter.rb @@ -5,8 +5,9 @@ class AccountRelationshipsPresenter :muting, :requested, :requested_by, :domain_blocking, :endorsed, :account_note - def initialize(account_ids, current_account_id, **options) - @account_ids = account_ids.map { |a| a.is_a?(Account) ? a.id : a.to_i } + def initialize(accounts, current_account_id, **options) + @accounts = accounts.to_a + @account_ids = @accounts.pluck(:id) @current_account_id = current_account_id @following = cached[:following].merge(Account.following_map(@uncached_account_ids, @current_account_id)) @@ -16,10 +17,11 @@ def initialize(account_ids, current_account_id, **options) @muting = cached[:muting].merge(Account.muting_map(@uncached_account_ids, @current_account_id)) @requested = cached[:requested].merge(Account.requested_map(@uncached_account_ids, @current_account_id)) @requested_by = cached[:requested_by].merge(Account.requested_by_map(@uncached_account_ids, @current_account_id)) - @domain_blocking = cached[:domain_blocking].merge(Account.domain_blocking_map(@uncached_account_ids, @current_account_id)) @endorsed = cached[:endorsed].merge(Account.endorsed_map(@uncached_account_ids, @current_account_id)) @account_note = cached[:account_note].merge(Account.account_note_map(@uncached_account_ids, @current_account_id)) + @domain_blocking = domain_blocking_map + cache_uncached! @following.merge!(options[:following_map] || {}) @@ -36,6 +38,31 @@ def initialize(account_ids, current_account_id, **options) private + def domain_blocking_map + target_domains = @accounts.pluck(:domain).compact.uniq + blocks_by_domain = {} + + # Fetch from cache + cache_keys = target_domains.map { |domain| domain_cache_key(domain) } + Rails.cache.read_multi(*cache_keys).each do |key, blocking| + blocks_by_domain[key.last] = blocking + end + + uncached_domains = target_domains - blocks_by_domain.keys + + # Read uncached values from database + AccountDomainBlock.where(account_id: @current_account_id, domain: uncached_domains).pluck(:domain).each do |domain| + blocks_by_domain[domain] = true + end + + # Write database reads to cache + to_cache = uncached_domains.to_h { |domain| [domain_cache_key(domain), blocks_by_domain[domain]] } + Rails.cache.write_multi(to_cache, expires_in: 1.day) + + # Return formatted value + @accounts.each_with_object({}) { |account, h| h[account.id] = blocks_by_domain[account.domain] } + end + def cached return @cached if defined?(@cached) @@ -47,28 +74,23 @@ def cached muting: {}, requested: {}, requested_by: {}, - domain_blocking: {}, endorsed: {}, account_note: {}, } - @uncached_account_ids = [] + @uncached_account_ids = @account_ids.uniq - @account_ids.each do |account_id| - maps_for_account = Rails.cache.read("relationship:#{@current_account_id}:#{account_id}") - - if maps_for_account.is_a?(Hash) - @cached.deep_merge!(maps_for_account) - else - @uncached_account_ids << account_id - end + cache_ids = @account_ids.map { |account_id| relationship_cache_key(account_id) } + Rails.cache.read_multi(*cache_ids).each do |key, maps_for_account| + @cached.deep_merge!(maps_for_account) + @uncached_account_ids.delete(key.last) end @cached end def cache_uncached! - @uncached_account_ids.each do |account_id| + to_cache = @uncached_account_ids.to_h do |account_id| maps_for_account = { following: { account_id => following[account_id] }, followed_by: { account_id => followed_by[account_id] }, @@ -77,12 +99,21 @@ def cache_uncached! muting: { account_id => muting[account_id] }, requested: { account_id => requested[account_id] }, requested_by: { account_id => requested_by[account_id] }, - domain_blocking: { account_id => domain_blocking[account_id] }, endorsed: { account_id => endorsed[account_id] }, account_note: { account_id => account_note[account_id] }, } - Rails.cache.write("relationship:#{@current_account_id}:#{account_id}", maps_for_account, expires_in: 1.day) + [relationship_cache_key(account_id), maps_for_account] end + + Rails.cache.write_multi(to_cache, expires_in: 1.day) + end + + def domain_cache_key(domain) + ['exclude_domains', @current_account_id, domain] + end + + def relationship_cache_key(account_id) + ['relationship', @current_account_id, account_id] end end diff --git a/app/presenters/annual_reports_presenter.rb b/app/presenters/annual_reports_presenter.rb new file mode 100644 index 00000000000000..001e1d37b06edf --- /dev/null +++ b/app/presenters/annual_reports_presenter.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class AnnualReportsPresenter + alias read_attribute_for_serialization send + + attr_reader :annual_reports + + def initialize(annual_reports) + @annual_reports = annual_reports + end + + def accounts + @accounts ||= Account.where(id: @annual_reports.flat_map(&:account_ids)).includes(:account_stat, :moved_to_account, user: :role) + end + + def statuses + @statuses ||= Status.where(id: @annual_reports.flat_map(&:status_ids)).with_includes + end + + def self.model_name + @model_name ||= ActiveModel::Name.new(self) + end +end diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index a8af45990f5a9a..9f7921461d7afd 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -13,29 +13,7 @@ class InitialStateSerializer < ActiveModel::Serializer has_one :role, serializer: REST::RoleSerializer def meta - store = { - streaming_api_base_url: Rails.configuration.x.streaming_api_base_url, - access_token: object.token, - locale: I18n.locale, - domain: Addressable::IDNA.to_unicode(instance_presenter.domain), - title: instance_presenter.title, - admin: object.admin&.id&.to_s, - search_enabled: Chewy.enabled?, - repository: Mastodon::Version.repository, - source_url: instance_presenter.source_url, - version: instance_presenter.version, - limited_federation_mode: Rails.configuration.x.limited_federation_mode, - mascot: instance_presenter.mascot&.file&.url, - profile_directory: Setting.profile_directory, - trends_enabled: Setting.trends, - registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, - timeline_preview: Setting.timeline_preview, - activity_api_enabled: Setting.activity_api_enabled, - single_user_mode: Rails.configuration.x.single_user_mode, - trends_as_landing_page: Setting.trends_as_landing_page, - status_page_url: Setting.status_page_url, - sso_redirect: sso_redirect, - } + store = default_meta_store if object.current_account store[:me] = object.current_account.id.to_s @@ -86,8 +64,8 @@ def accounts ActiveRecord::Associations::Preloader.new( records: [object.current_account, object.admin, object.owner, object.disabled_account, object.moved_to_account].compact, - associations: [:account_stat, :user, { moved_to_account: [:account_stat, :user] }] - ) + associations: [:account_stat, { user: :role, moved_to_account: [:account_stat, { user: :role }] }] + ).call store[object.current_account.id.to_s] = serialized_account(object.current_account) if object.current_account store[object.admin.id.to_s] = serialized_account(object.admin) if object.admin @@ -108,6 +86,32 @@ def languages private + def default_meta_store + { + access_token: object.token, + activity_api_enabled: Setting.activity_api_enabled, + admin: object.admin&.id&.to_s, + domain: Addressable::IDNA.to_unicode(instance_presenter.domain), + limited_federation_mode: Rails.configuration.x.limited_federation_mode, + locale: I18n.locale, + mascot: instance_presenter.mascot&.file&.url, + profile_directory: Setting.profile_directory, + registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, + repository: Mastodon::Version.repository, + search_enabled: Chewy.enabled?, + single_user_mode: Rails.configuration.x.single_user_mode, + source_url: instance_presenter.source_url, + sso_redirect: sso_redirect, + status_page_url: Setting.status_page_url, + streaming_api_base_url: Rails.configuration.x.streaming_api_base_url, + timeline_preview: Setting.timeline_preview, + title: instance_presenter.title, + trends_as_landing_page: Setting.trends_as_landing_page, + trends_enabled: Setting.trends, + version: instance_presenter.version, + } + end + def object_account_user object.current_account.user end diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index 501bb788e7cdbe..1c1f7d0ad534a3 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -39,7 +39,7 @@ def short_name def icons ICON_SIZES.map do |size| { - src: full_pack_url("media/icons/android-chrome-#{size}x#{size}.png"), + src: frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"), sizes: "#{size}x#{size}", type: 'image/png', purpose: 'any maskable', diff --git a/app/serializers/rest/admin/email_domain_block_serializer.rb b/app/serializers/rest/admin/email_domain_block_serializer.rb index a026ff680e74c1..afe7722cb58ba7 100644 --- a/app/serializers/rest/admin/email_domain_block_serializer.rb +++ b/app/serializers/rest/admin/email_domain_block_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class REST::Admin::EmailDomainBlockSerializer < ActiveModel::Serializer - attributes :id, :domain, :created_at, :history + attributes :id, :domain, :created_at, :history, :allow_with_approval def id object.id.to_s diff --git a/app/serializers/rest/annual_report_serializer.rb b/app/serializers/rest/annual_report_serializer.rb new file mode 100644 index 00000000000000..1fb5ddb5c123c3 --- /dev/null +++ b/app/serializers/rest/annual_report_serializer.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class REST::AnnualReportSerializer < ActiveModel::Serializer + attributes :year, :data, :schema_version +end diff --git a/app/serializers/rest/annual_reports_serializer.rb b/app/serializers/rest/annual_reports_serializer.rb new file mode 100644 index 00000000000000..ea9572be1b469c --- /dev/null +++ b/app/serializers/rest/annual_reports_serializer.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class REST::AnnualReportsSerializer < ActiveModel::Serializer + has_many :annual_reports, serializer: REST::AnnualReportSerializer + has_many :accounts, serializer: REST::AccountSerializer + has_many :statuses, serializer: REST::StatusSerializer +end diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index d7ed381e16b36c..fa926cd287227d 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -28,7 +28,7 @@ def thumbnail } else { - url: full_pack_url('media/images/preview.png'), + url: frontend_asset_url('images/preview.png'), } end end diff --git a/app/serializers/rest/tag_serializer.rb b/app/serializers/rest/tag_serializer.rb index 7801e77d1fe6de..017b572718ed3f 100644 --- a/app/serializers/rest/tag_serializer.rb +++ b/app/serializers/rest/tag_serializer.rb @@ -19,7 +19,7 @@ def following if instance_options && instance_options[:relationships] instance_options[:relationships].following_map[object.id] || false else - TagFollow.where(tag_id: object.id, account_id: current_user.account_id).exists? + TagFollow.exists?(tag_id: object.id, account_id: current_user.account_id) end end diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 99d1b2bd62b75f..fdf939cfc34998 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -33,7 +33,7 @@ def contact_account end def thumbnail - instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url(:'@1x')) : full_pack_url('media/images/preview.png') + instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url(:'@1x')) : frontend_asset_url('images/preview.png') end def stats diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index b437ff47593ee4..571a0fa57d6852 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -23,6 +23,7 @@ def build query: { bool: { must: must_clauses, + must_not: must_not_clauses, }, }, @@ -49,6 +50,10 @@ def must_clauses end end + def must_not_clauses + [] + end + def should_clauses if @account && !@options[:following] [boost_following_query] @@ -218,7 +223,7 @@ def from_elasticsearch records = query_builder.build.limit(limit_for_non_exact_results).offset(offset).objects.compact - ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat) + ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call records rescue Faraday::ConnectionFailed, Parslet::ParseFailed diff --git a/app/services/activitypub/fetch_featured_collection_service.rb b/app/services/activitypub/fetch_featured_collection_service.rb index d2bae08a0e4fdc..89c3a1b6c03261 100644 --- a/app/services/activitypub/fetch_featured_collection_service.rb +++ b/app/services/activitypub/fetch_featured_collection_service.rb @@ -23,9 +23,9 @@ def collection_items(collection) case collection['type'] when 'Collection', 'CollectionPage' - collection['items'] + as_array(collection['items']) when 'OrderedCollection', 'OrderedCollectionPage' - collection['orderedItems'] + as_array(collection['orderedItems']) end end diff --git a/app/services/activitypub/fetch_remote_status_service.rb b/app/services/activitypub/fetch_remote_status_service.rb index a491b32b26d9fe..e3a9b60b5679f2 100644 --- a/app/services/activitypub/fetch_remote_status_service.rb +++ b/app/services/activitypub/fetch_remote_status_service.rb @@ -44,7 +44,7 @@ def call(uri, id: true, prefetched_body: nil, on_behalf_of: nil, expected_actor_ # If we fetched a status that already exists, then we need to treat the # activity as an update rather than create - activity_json['type'] = 'Update' if equals_or_includes_any?(activity_json['type'], %w(Create)) && Status.where(uri: object_uri, account_id: actor.id).exists? + activity_json['type'] = 'Update' if equals_or_includes_any?(activity_json['type'], %w(Create)) && Status.exists?(uri: object_uri, account_id: actor.id) with_redis do |redis| discoveries = redis.incr("status_discovery_per_request:#{@request_id}") diff --git a/app/services/activitypub/fetch_replies_service.rb b/app/services/activitypub/fetch_replies_service.rb index b5c7759ec5ed1b..e2ecdef1659990 100644 --- a/app/services/activitypub/fetch_replies_service.rb +++ b/app/services/activitypub/fetch_replies_service.rb @@ -26,9 +26,9 @@ def collection_items(collection_or_uri) case collection['type'] when 'Collection', 'CollectionPage' - collection['items'] + as_array(collection['items']) when 'OrderedCollection', 'OrderedCollectionPage' - collection['orderedItems'] + as_array(collection['orderedItems']) end end @@ -37,7 +37,20 @@ def fetch_collection(collection_or_uri) return unless @allow_synchronous_requests return if non_matching_uri_hosts?(@account.uri, collection_or_uri) - fetch_resource_without_id_validation(collection_or_uri, nil, true) + # NOTE: For backward compatibility reasons, Mastodon signs outgoing + # queries incorrectly by default. + # + # While this is relevant for all URLs with query strings, this is + # the only code path where this happens in practice. + # + # Therefore, retry with correct signatures if this fails. + begin + fetch_resource_without_id_validation(collection_or_uri, nil, true) + rescue Mastodon::UnexpectedResponseError => e + raise unless e.response && e.response.code == 401 && Addressable::URI.parse(collection_or_uri).query.present? + + fetch_resource_without_id_validation(collection_or_uri, nil, true, request_options: { with_query_string: true }) + end end def filtered_replies diff --git a/app/services/activitypub/synchronize_followers_service.rb b/app/services/activitypub/synchronize_followers_service.rb index 7ccc917309448b..f51d671a004bb8 100644 --- a/app/services/activitypub/synchronize_followers_service.rb +++ b/app/services/activitypub/synchronize_followers_service.rb @@ -59,9 +59,9 @@ def collection_items(collection_or_uri) case collection['type'] when 'Collection', 'CollectionPage' - collection['items'] + as_array(collection['items']) when 'OrderedCollection', 'OrderedCollectionPage' - collection['orderedItems'] + as_array(collection['orderedItems']) end end diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index c54cc1d350d339..de4ee16e910278 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -11,7 +11,7 @@ def call(statuses, **options) ActiveRecord::Associations::Preloader.new( records: statuses, associations: options[:skip_side_effects] ? :reblogs : [:account, :tags, reblogs: :account] - ) + ).call statuses_and_reblogs = statuses.flat_map { |status| [status] + status.reblogs } @@ -23,7 +23,7 @@ def call(statuses, **options) ActiveRecord::Associations::Preloader.new( records: statuses_with_account_conversations, associations: [mentions: :account] - ) + ).call statuses_with_account_conversations.each(&:unlink_from_conversations!) diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 94966a92a57c0c..56f815e4607c76 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -78,6 +78,15 @@ def notify_mentioned_accounts! LocalNotificationWorker.push_bulk(mentions) do |mention| [mention.account_id, mention.id, 'Mention', 'mention'] end + + next unless update? + + # This may result in duplicate update payloads, but this ensures clients + # are aware of edits to posts only appearing in mention notifications + # (e.g. private mentions or mentions by people they do not follow) + PushUpdateWorker.push_bulk(mentions.filter { |mention| subscribed_to_streaming_api?(mention.account_id) }) do |mention| + [mention.account_id, @status.id, "timeline:#{mention.account_id}:notifications", { 'update' => true }] + end end end @@ -175,4 +184,8 @@ def update? def broadcastable? @status.public_visibility? && !@status.reblog? && !@account.silenced? end + + def subscribed_to_streaming_api?(account_id) + redis.exists?("subscribed:timeline:#{account_id}") || redis.exists?("subscribed:timeline:#{account_id}:notifications") + end end diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb index 6fdc92a173173d..ded50187f77485 100644 --- a/app/services/favourite_service.rb +++ b/app/services/favourite_service.rb @@ -20,7 +20,7 @@ def call(account, status) Trends.statuses.register(status) create_notification(favourite) - bump_potential_friendship(account, status) + increment_statistics favourite end @@ -37,11 +37,8 @@ def create_notification(favourite) end end - def bump_potential_friendship(account, status) + def increment_statistics ActivityTracker.increment('activity:interactions') - return if account.following?(status.account_id) - - PotentialFriendshipTracker.record(account.id, status.account_id, :favourite) end def build_json(favourite) diff --git a/app/services/fetch_oembed_service.rb b/app/services/fetch_oembed_service.rb index 1ae592238efc15..dc84b16b684a7d 100644 --- a/app/services/fetch_oembed_service.rb +++ b/app/services/fetch_oembed_service.rb @@ -100,7 +100,7 @@ def parse_for_format(body) end def validate(oembed) - oembed if oembed[:version].to_s == '1.0' && oembed[:type].present? + oembed if oembed.present? && oembed[:version].to_s == '1.0' && oembed[:type].present? end def html diff --git a/app/services/keys/query_service.rb b/app/services/keys/query_service.rb index 14c9d9205bf744..33e13293f3155f 100644 --- a/app/services/keys/query_service.rb +++ b/app/services/keys/query_service.rb @@ -69,7 +69,7 @@ def query_remote_devices! return if json['items'].blank? - @devices = json['items'].map do |device| + @devices = as_array(json['items']).map do |device| Device.new(device_id: device['id'], name: device['name'], identity_key: device.dig('identityKey', 'publicKeyBase64'), fingerprint_key: device.dig('fingerprintKey', 'publicKeyBase64'), claim_url: device['claim']) end rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error => e diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index ea27f374e703b0..8aa43ab2452ed4 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -178,9 +178,6 @@ def bump_potential_friendship! return if !@status.reply? || @account.id == @status.in_reply_to_account_id ActivityTracker.increment('activity:interactions') - return if @account.following?(@status.in_reply_to_account_id) - - PotentialFriendshipTracker.record(@account.id, @status.in_reply_to_account_id, :reply) end def status_attributes diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb index 6ec09447445bf1..cca79eced6a912 100644 --- a/app/services/reblog_service.rb +++ b/app/services/reblog_service.rb @@ -33,7 +33,7 @@ def call(account, reblogged_status, options = {}) ActivityPub::DistributionWorker.perform_async(reblog.id) create_notification(reblog) - bump_potential_friendship(account, reblog) + increment_statistics reblog end @@ -43,19 +43,11 @@ def call(account, reblogged_status, options = {}) def create_notification(reblog) reblogged_status = reblog.reblog - if reblogged_status.account.local? - LocalNotificationWorker.perform_async(reblogged_status.account_id, reblog.id, reblog.class.name, 'reblog') - elsif reblogged_status.account.activitypub? && !reblogged_status.account.following?(reblog.account) - ActivityPub::DeliveryWorker.perform_async(build_json(reblog), reblog.account_id, reblogged_status.account.inbox_url) - end + LocalNotificationWorker.perform_async(reblogged_status.account_id, reblog.id, reblog.class.name, 'reblog') if reblogged_status.account.local? end - def bump_potential_friendship(account, reblog) + def increment_statistics ActivityTracker.increment('activity:interactions') - - return if account.following?(reblog.reblog.account_id) - - PotentialFriendshipTracker.record(account.id, reblog.reblog.account_id, :reblog) end def build_json(reblog) diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb index 1bbcfce3ea179e..78a846e03ea30f 100644 --- a/app/services/update_account_service.rb +++ b/app/services/update_account_service.rb @@ -21,7 +21,7 @@ def call(account, params, raise_error: false) def authorize_all_follow_requests(account) follow_requests = FollowRequest.where(target_account: account) - follow_requests = follow_requests.preload(:account).select { |req| !req.account.silenced? } + follow_requests = follow_requests.preload(:account).reject { |req| req.account.silenced? } AuthorizeFollowWorker.push_bulk(follow_requests, limit: 1_000) do |req| [req.account_id, req.target_account_id] end diff --git a/app/services/vote_service.rb b/app/services/vote_service.rb index 3e92a1690a63de..878350388b8bae 100644 --- a/app/services/vote_service.rb +++ b/app/services/vote_service.rb @@ -19,7 +19,7 @@ def call(account, poll, choices) already_voted = true with_redis_lock("vote:#{@poll.id}:#{@account.id}") do - already_voted = @poll.votes.where(account: @account).exists? + already_voted = @poll.votes.exists?(account: @account) ApplicationRecord.transaction do @choices.each do |choice| diff --git a/app/validators/email_mx_validator.rb b/app/validators/email_mx_validator.rb index a30a0c820d084a..794377894354c8 100644 --- a/app/validators/email_mx_validator.rb +++ b/app/validators/email_mx_validator.rb @@ -47,6 +47,7 @@ def resolve_mx(domain) dns.timeouts = 5 records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s } + next if records == [''] # This domain explicitly rejects emails ([domain] + records).uniq.each do |hostname| ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s }) diff --git a/app/validators/reaction_validator.rb b/app/validators/reaction_validator.rb index 4ed3376e8ba1c8..89d83de5a2ccd6 100644 --- a/app/validators/reaction_validator.rb +++ b/app/validators/reaction_validator.rb @@ -19,7 +19,7 @@ def unicode_emoji?(name) end def new_reaction?(reaction) - !reaction.announcement.announcement_reactions.where(name: reaction.name).exists? + !reaction.announcement.announcement_reactions.exists?(name: reaction.name) end def limit_reached?(reaction) diff --git a/app/validators/vote_validator.rb b/app/validators/vote_validator.rb index fa2bd223dc71e6..e725b4c0b87cc8 100644 --- a/app/validators/vote_validator.rb +++ b/app/validators/vote_validator.rb @@ -35,7 +35,7 @@ def already_voted_for_same_choice_on_multiple_poll?(vote) if vote.persisted? account_votes_on_same_poll(vote).where(choice: vote.choice).where.not(poll_votes: { id: vote }).exists? else - account_votes_on_same_poll(vote).where(choice: vote.choice).exists? + account_votes_on_same_poll(vote).exists?(choice: vote.choice) end end diff --git a/app/views/admin/account_warnings/_account_warning.html.haml b/app/views/admin/account_warnings/_account_warning.html.haml index 85bac789f73441..5702e4f6d27652 100644 --- a/app/views/admin/account_warnings/_account_warning.html.haml +++ b/app/views/admin/account_warnings/_account_warning.html.haml @@ -5,7 +5,10 @@ = fa_icon 'warning' .log-entry__content .log-entry__title - = t(account_warning.action, scope: 'admin.strikes.actions', name: content_tag(:span, account_warning.account ? account_warning.account.username : I18n.t('admin.action_logs.deleted_account'), class: 'username'), target: content_tag(:span, account_warning.target_account.pretty_acct, class: 'target')).html_safe + = t(account_warning.action, + scope: 'admin.strikes.actions', + name: content_tag(:span, account_warning.account ? account_warning.account.username : I18n.t('admin.action_logs.deleted_account'), class: 'username'), + target: content_tag(:span, account_warning.target_account.pretty_acct, class: 'target')).html_safe .log-entry__timestamp %time.formatted{ datetime: account_warning.created_at.iso8601 } = l(account_warning.created_at) diff --git a/app/views/admin/accounts/_buttons.html.haml b/app/views/admin/accounts/_buttons.html.haml index 6eb141abc9ad7b..2aaca8962c10e0 100644 --- a/app/views/admin/accounts/_buttons.html.haml +++ b/app/views/admin/accounts/_buttons.html.haml @@ -6,8 +6,8 @@ %p.muted-hint= deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible') = link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsuspend, account) = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) && account.suspension_origin_remote? - - if deletion_request.present? - = link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, account) + - if deletion_request.present? && can?(:destroy, account) + = link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } - else .action-buttons %div @@ -15,8 +15,8 @@ = link_to t('admin.accounts.warn'), new_admin_account_action_path(account.id, type: 'none'), class: 'button' if can?(:warn, account) - if account.user_disabled? = link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user) - - else - = link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' if can?(:disable, account.user) + - elsif can?(:disable, account.user) + = link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' - if account.sensitized? = link_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsensitive, account) - elsif !account.local? || account.user_approved? @@ -29,13 +29,13 @@ - if account.user_pending? = link_to t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, account.user) = link_to t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user) - - unless account.user_confirmed? - = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' if can?(:confirm, account.user) - - if !account.local? || account.user_approved? - = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' if can?(:suspend, account) + - if !account.user_confirmed? && can?(:confirm, account.user) + = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' + - if (!account.local? || account.user_approved?) && can?(:suspend, account) + = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' %div - if account.local? - - if !account.memorial? && account.user_approved? - = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, account) - - else - = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) + - if !account.memorial? && account.user_approved? && can?(:memorialize, account) + = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' + - elsif can?(:redownload, account) + = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' diff --git a/app/views/admin/accounts/_local_account.html.haml b/app/views/admin/accounts/_local_account.html.haml index 4b361fc8d10c96..82197cda43d9d5 100644 --- a/app/views/admin/accounts/_local_account.html.haml +++ b/app/views/admin/accounts/_local_account.html.haml @@ -47,8 +47,8 @@ - else = t 'admin.accounts.security_measures.only_password' %td - - if account.user&.two_factor_enabled? - = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete if can?(:disable_2fa, account.user) + - if account.user&.two_factor_enabled? && can?(:disable_2fa, account.user) + = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete - if can?(:reset_password, account.user) %tr %td diff --git a/app/views/admin/action_logs/_action_log.html.haml b/app/views/admin/action_logs/_action_log.html.haml index a2fce2d1145990..dcc333180923ca 100644 --- a/app/views/admin/action_logs/_action_log.html.haml +++ b/app/views/admin/action_logs/_action_log.html.haml @@ -4,6 +4,8 @@ = image_tag action_log.account.avatar.url(:original), alt: '', width: 40, height: 40, class: 'avatar' .log-entry__content .log-entry__title - = t("admin.action_logs.actions.#{action_log.action}_#{action_log.target_type.underscore}_html", name: content_tag(:span, action_log.account.username, class: 'username'), target: content_tag(:span, log_target(action_log), class: 'target')) + = t "admin.action_logs.actions.#{action_log.action}_#{action_log.target_type.underscore}_html", + name: content_tag(:span, action_log.account.username, class: 'username'), + target: content_tag(:span, log_target(action_log), class: 'target') .log-entry__timestamp %time.formatted{ datetime: action_log.created_at.iso8601 } diff --git a/app/views/admin/email_domain_blocks/_email_domain_block.html.haml b/app/views/admin/email_domain_blocks/_email_domain_block.html.haml index 7cb973c4b4e047..f6a6e826670ff4 100644 --- a/app/views/admin/email_domain_blocks/_email_domain_block.html.haml +++ b/app/views/admin/email_domain_blocks/_email_domain_block.html.haml @@ -12,3 +12,7 @@ ¡ = t('admin.email_domain_blocks.attempts_over_week', count: email_domain_block.history.reduce(0) { |sum, day| sum + day.accounts }) + + - if email_domain_block.allow_with_approval? + ¡ + = t('admin.email_domain_blocks.allow_registrations_with_approval') diff --git a/app/views/admin/email_domain_blocks/new.html.haml b/app/views/admin/email_domain_blocks/new.html.haml index fa1d950ad2b333..3d31487733ee34 100644 --- a/app/views/admin/email_domain_blocks/new.html.haml +++ b/app/views/admin/email_domain_blocks/new.html.haml @@ -7,6 +7,9 @@ .fields-group = f.input :domain, wrapper: :with_block_label, label: t('admin.email_domain_blocks.domain'), input_html: { readonly: defined?(@resolved_records) } + .fields-group + = f.input :allow_with_approval, wrapper: :with_label, hint: false, label: I18n.t('admin.email_domain_blocks.allow_registrations_with_approval') + - if defined?(@resolved_records) %p.hint= t('admin.email_domain_blocks.resolved_dns_records_hint_html') diff --git a/app/views/admin/follow_recommendations/show.html.haml b/app/views/admin/follow_recommendations/show.html.haml index dc65a72135bf5b..9c2063d3c577ee 100644 --- a/app/views/admin/follow_recommendations/show.html.haml +++ b/app/views/admin/follow_recommendations/show.html.haml @@ -38,3 +38,5 @@ = nothing_here 'nothing-here--under-tabs' - else = render partial: 'account', collection: @accounts, locals: { f: f } + += paginate @accounts diff --git a/app/views/admin/reports/_media_attachments.html.haml b/app/views/admin/reports/_media_attachments.html.haml index 8ecd7444d2aa06..3c52d691781efe 100644 --- a/app/views/admin/reports/_media_attachments.html.haml +++ b/app/views/admin/reports/_media_attachments.html.haml @@ -2,6 +2,16 @@ = render_video_component(status, visible: false) - elsif status.ordered_media_attachments.first.audio? - audio = status.ordered_media_attachments.first - = react_component :audio, src: audio.file.url(:original), height: 110, alt: audio.description, lang: status.language, duration: audio.file.meta.dig(:original, :duration) + = react_component :audio, + alt: audio.description, + duration: audio.file.meta.dig(:original, :duration), + height: 110, + lang: status.language, + src: audio.file.url(:original) - else - = react_component :media_gallery, height: 343, sensitive: status.sensitive?, visible: false, lang: status.language, media: status.ordered_media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } + = react_component :media_gallery, + height: 343, + lang: status.language, + media: status.ordered_media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json }, + sensitive: status.sensitive?, + visible: false diff --git a/app/views/application/mailer/_account.html.haml b/app/views/application/mailer/_account.html.haml new file mode 100644 index 00000000000000..27493f770dc006 --- /dev/null +++ b/app/views/application/mailer/_account.html.haml @@ -0,0 +1,30 @@ +%table.email-w-full.email-account-banner-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-account-banner-td{ height: 140, background: full_asset_url(account.header.url) } + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-account-banner-inner-td + .email-account-banner-overlap-div + %table.email-account-banner-icon-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td + %img{ src: full_asset_url(account.avatar.url), width: 80, height: 80, alt: '' } +%table.email-w-full.email-account-body-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-account-body-td + %p.email-account-name= display_name(account) + %p.email-account-handle= acct(account) + %table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-padding-top-16 + %table.email-w-full.email-account-stats-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td + %b= account_formatted_stat(account.statuses_count) + %span= t('accounts.posts', count: account.statuses_count) + %td + %b= account_formatted_stat(account.following_count) + %span= t('accounts.following') + %td + %b= account_formatted_stat(account.followers_count) + %span= t('accounts.followers', count: account.followers_count) diff --git a/app/views/application/mailer/_button.html.haml b/app/views/application/mailer/_button.html.haml new file mode 100644 index 00000000000000..61430732eb3ed3 --- /dev/null +++ b/app/views/application/mailer/_button.html.haml @@ -0,0 +1,4 @@ +%table.email-btn-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-btn-td + = link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover' diff --git a/app/views/application/mailer/_checklist.html.haml b/app/views/application/mailer/_checklist.html.haml new file mode 100644 index 00000000000000..83072bd36b04e2 --- /dev/null +++ b/app/views/application/mailer/_checklist.html.haml @@ -0,0 +1,29 @@ +%table.email-w-full.email-checklist-wrapper-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-wrapper-td + %table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-icons-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-icons-checkbox-td + - if defined?(checked) && checked + = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-on.png'), alt: '', width: 20, height: 20 + - else + = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20 + %td.email-checklist-icons-step-td + - if defined?(step_image_url) + = image_tag step_image_url, alt: '', width: 40, height: 40 + %td.email-checklist-text-td + .email-desktop-flex + %div + - if defined?(title) + %h3= title + - if defined?(text) + %p= text + %div + - if defined?(button_text) && defined?(button_url) && defined?(checked) && !checked + = render 'application/mailer/button', text: button_text, url: button_url diff --git a/app/views/application/mailer/_frame.html.haml b/app/views/application/mailer/_frame.html.haml new file mode 100644 index 00000000000000..74403e7678f68b --- /dev/null +++ b/app/views/application/mailer/_frame.html.haml @@ -0,0 +1,4 @@ +%table.email-w-full.email-frame-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-frame-td + %p= text diff --git a/app/views/application/mailer/_heading.html.haml b/app/views/application/mailer/_heading.html.haml new file mode 100644 index 00000000000000..9fc5dc7471b5e4 --- /dev/null +++ b/app/views/application/mailer/_heading.html.haml @@ -0,0 +1,13 @@ +%table.email-w-full.email-header-heading-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-heading-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + - if defined?(heading_image_url) + %td.email-header-heading-img-td + = image_tag heading_image_url, alt: '', width: 56, height: 56 + %td.email-header-heading-txt-td + - if defined?(heading_title) + %h1= heading_title + - if defined?(heading_subtitle) + %p= heading_subtitle diff --git a/app/views/auth/challenges/new.html.haml b/app/views/auth/challenges/new.html.haml index 4f21e4af6e7eb5..50dcebb00cf420 100644 --- a/app/views/auth/challenges/new.html.haml +++ b/app/views/auth/challenges/new.html.haml @@ -5,7 +5,11 @@ = f.input :return_to, as: :hidden .field-group - = f.input :current_password, wrapper: :with_block_label, input_html: { autocomplete: 'current-password', autofocus: true }, label: t('challenge.prompt'), required: true + = f.input :current_password, + input_html: { autocomplete: 'current-password', autofocus: true }, + label: t('challenge.prompt'), + required: true, + wrapper: :with_block_label .actions = f.button :button, t('challenge.confirm'), type: :submit diff --git a/app/views/auth/confirmations/new.html.haml b/app/views/auth/confirmations/new.html.haml index 0cb82a1f86a293..eaa9d9add090c0 100644 --- a/app/views/auth/confirmations/new.html.haml +++ b/app/views/auth/confirmations/new.html.haml @@ -21,7 +21,13 @@ = render 'shared/error_messages', object: resource .fields-group - = f.input :email, autofocus: true, wrapper: :with_label, label: t('simple_form.labels.defaults.email'), input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, readonly: current_user.present?, hint: current_user.present? && t('auth.confirmations.wrong_email_hint') + = f.input :email, + autofocus: true, + hint: current_user.present? && t('auth.confirmations.wrong_email_hint'), + input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, + label: t('simple_form.labels.defaults.email'), + readonly: current_user.present?, + wrapper: :with_label .actions = f.button :button, t('auth.resend_confirmation'), type: :submit diff --git a/app/views/auth/passwords/edit.html.haml b/app/views/auth/passwords/edit.html.haml index b95a9b676bf6e2..a75dc2d9fb3693 100644 --- a/app/views/auth/passwords/edit.html.haml +++ b/app/views/auth/passwords/edit.html.haml @@ -8,9 +8,18 @@ = f.input :reset_password_token, as: :hidden .fields-group - = f.input :password, wrapper: :with_label, autofocus: true, label: t('simple_form.labels.defaults.new_password'), input_html: { 'aria-label': t('simple_form.labels.defaults.new_password'), autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last }, required: true + = f.input :password, + autofocus: true, + input_html: { 'aria-label': t('simple_form.labels.defaults.new_password'), autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last }, + label: t('simple_form.labels.defaults.new_password'), + required: true, + wrapper: :with_label .fields-group - = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_new_password'), input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_new_password'), autocomplete: 'new-password' }, required: true + = f.input :password_confirmation, + input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_new_password'), autocomplete: 'new-password' }, + label: t('simple_form.labels.defaults.confirm_new_password'), + required: true, + wrapper: :with_label .actions = f.button :button, t('auth.set_new_password'), type: :submit diff --git a/app/views/auth/passwords/new.html.haml b/app/views/auth/passwords/new.html.haml index 10ad108eafa94c..8d5adaf3b987e1 100644 --- a/app/views/auth/passwords/new.html.haml +++ b/app/views/auth/passwords/new.html.haml @@ -5,7 +5,12 @@ = render 'shared/error_messages', object: resource .fields-group - = f.input :email, autofocus: true, wrapper: :with_label, label: t('simple_form.labels.defaults.email'), input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, hint: false + = f.input :email, + autofocus: true, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, + label: t('simple_form.labels.defaults.email'), + wrapper: :with_label .actions = f.button :button, t('auth.reset_password'), type: :submit diff --git a/app/views/auth/registrations/_account_warning.html.haml b/app/views/auth/registrations/_account_warning.html.haml index 40e7e12968bc63..19e5746ff63c08 100644 --- a/app/views/auth/registrations/_account_warning.html.haml +++ b/app/views/auth/registrations/_account_warning.html.haml @@ -5,7 +5,9 @@ = fa_icon 'warning' .log-entry__content .log-entry__title - = t('disputes.strikes.title', action: t(account_warning.action, scope: 'disputes.strikes.title_actions'), date: l(account_warning.created_at.to_date)) + = t 'disputes.strikes.title', + action: t(account_warning.action, scope: 'disputes.strikes.title_actions'), + date: l(account_warning.created_at.to_date) .log-entry__timestamp %time.formatted{ datetime: account_warning.created_at.iso8601 }= l(account_warning.created_at) diff --git a/app/views/auth/registrations/_session.html.haml b/app/views/auth/registrations/_session.html.haml index 28499a7c91c35c..2fa7db70c7bbf3 100644 --- a/app/views/auth/registrations/_session.html.haml +++ b/app/views/auth/registrations/_session.html.haml @@ -3,7 +3,9 @@ %span{ title: session.user_agent }< = fa_icon "#{session_device_icon(session)} fw", 'aria-label': session_device_icon(session)   - = t 'sessions.description', browser: t("sessions.browsers.#{session.browser}", default: session.browser.to_s), platform: t("sessions.platforms.#{session.platform}", default: session.platform.to_s) + = t 'sessions.description', + browser: t("sessions.browsers.#{session.browser}", default: session.browser.to_s), + platform: t("sessions.platforms.#{session.platform}", default: session.platform.to_s) %td %samp= session.ip %td diff --git a/app/views/auth/registrations/edit.html.haml b/app/views/auth/registrations/edit.html.haml index f5ef4e97e4017e..48350f478e8aa8 100644 --- a/app/views/auth/registrations/edit.html.haml +++ b/app/views/auth/registrations/edit.html.haml @@ -15,15 +15,33 @@ - if (!use_seamless_external_login? || resource.encrypted_password.present?) && !omniauth_only? .fields-row .fields-row__column.fields-group.fields-row__column-6 - = f.input :email, wrapper: :with_label, input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, required: true, disabled: current_account.suspended? + = f.input :email, + disabled: current_account.suspended?, + input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, + required: true, + wrapper: :with_label .fields-row__column.fields-group.fields-row__column-6 - = f.input :current_password, wrapper: :with_label, input_html: { 'aria-label': t('simple_form.labels.defaults.current_password'), autocomplete: 'current-password' }, required: true, disabled: current_account.suspended?, hint: false + = f.input :current_password, + disabled: current_account.suspended?, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.current_password'), autocomplete: 'current-password' }, + required: true, + wrapper: :with_label .fields-row .fields-row__column.fields-group.fields-row__column-6 - = f.input :password, wrapper: :with_label, label: t('simple_form.labels.defaults.new_password'), input_html: { 'aria-label': t('simple_form.labels.defaults.new_password'), autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last }, hint: t('simple_form.hints.defaults.password'), disabled: current_account.suspended? + = f.input :password, + disabled: current_account.suspended?, + hint: t('simple_form.hints.defaults.password'), + input_html: { 'aria-label': t('simple_form.labels.defaults.new_password'), autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last }, + label: t('simple_form.labels.defaults.new_password'), + wrapper: :with_label .fields-row__column.fields-group.fields-row__column-6 - = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_new_password'), input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_new_password'), autocomplete: 'new-password' }, disabled: current_account.suspended? + = f.input :password_confirmation, + disabled: current_account.suspended?, + input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_new_password'), autocomplete: 'new-password' }, + label: t('simple_form.labels.defaults.confirm_new_password'), + wrapper: :with_label .actions = f.button :button, t('generic.save_changes'), type: :submit, class: 'button', disabled: current_account.suspended? diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index 4cac7b51bd0a58..1e5aac2976a77e 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -19,25 +19,61 @@ .fields-group = f.simple_fields_for :account do |ff| - = ff.input :username, wrapper: :with_label, label: false, required: true, input_html: { 'aria-label': t('simple_form.labels.defaults.username'), autocomplete: 'off', placeholder: t('simple_form.labels.defaults.username'), pattern: '[a-zA-Z0-9_]+', maxlength: 30 }, append: "@#{site_hostname}" - = f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label': t('simple_form.labels.defaults.email'), autocomplete: 'username' }, hint: false - = f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label': t('simple_form.labels.defaults.password'), autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last }, hint: false - = f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_password'), autocomplete: 'new-password' }, hint: false - = f.input :confirm_password, as: :string, placeholder: t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), required: false, input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), autocomplete: 'off' }, hint: false - = f.input :website, as: :url, wrapper: :with_label, label: t('simple_form.labels.defaults.honeypot', label: 'Website'), required: false, input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: 'Website'), autocomplete: 'off' } + = ff.input :username, + append: "@#{site_hostname}", + input_html: { 'aria-label': t('simple_form.labels.defaults.username'), autocomplete: 'off', placeholder: t('simple_form.labels.defaults.username'), pattern: '[a-zA-Z0-9_]+', maxlength: 30 }, + label: false, + required: true, + wrapper: :with_label + = f.input :email, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.email'), autocomplete: 'username' }, + placeholder: t('simple_form.labels.defaults.email'), + required: true + = f.input :password, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.password'), autocomplete: 'new-password', minlength: User.password_length.first, maxlength: User.password_length.last }, + placeholder: t('simple_form.labels.defaults.password'), + required: true + = f.input :password_confirmation, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.confirm_password'), autocomplete: 'new-password' }, + placeholder: t('simple_form.labels.defaults.confirm_password'), + required: true + = f.input :confirm_password, + as: :string, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), autocomplete: 'off' }, + placeholder: t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), + required: false + = f.input :website, + as: :url, + input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: 'Website'), autocomplete: 'off' }, + label: t('simple_form.labels.defaults.honeypot', label: 'Website'), + required: false, + wrapper: :with_label - if approved_registrations? && @invite.blank? %p.lead= t('auth.sign_up.manual_review', domain: site_hostname) .fields-group = f.simple_fields_for :invite_request, resource.invite_request || resource.build_invite_request do |invite_request_fields| - = invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: Setting.require_invite_text, label: false, hint: false + = invite_request_fields.input :text, + as: :text, + hint: false, + label: false, + required: Setting.require_invite_text, + wrapper: :with_block_label = hidden_field_tag :accept, params[:accept] = f.input :invite_code, as: :hidden .fields-group - = f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.privacy_policy_agreement_html', rules_path: about_more_path, privacy_policy_path: privacy_policy_path), required: true + = f.input :agreement, + as: :boolean, + label: t('auth.privacy_policy_agreement_html', rules_path: about_more_path, privacy_policy_path: privacy_policy_path), + required: true, + wrapper: :with_label .actions = f.button :button, @invite.present? ? t('auth.register') : sign_up_message, type: :submit diff --git a/app/views/auth/sessions/new.html.haml b/app/views/auth/sessions/new.html.haml index 7914e0157fab5b..89903581a2b429 100644 --- a/app/views/auth/sessions/new.html.haml +++ b/app/views/auth/sessions/new.html.haml @@ -10,11 +10,25 @@ %p.lead= t('auth.sign_in.preamble_html', domain: site_hostname) .fields-group - if use_seamless_external_login? - = f.input :email, autofocus: true, wrapper: :with_label, label: t('simple_form.labels.defaults.username_or_email'), input_html: { 'aria-label': t('simple_form.labels.defaults.username_or_email') }, hint: false + = f.input :email, + autofocus: true, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.username_or_email') }, + label: t('simple_form.labels.defaults.username_or_email'), + wrapper: :with_label - else - = f.input :email, autofocus: true, wrapper: :with_label, label: t('simple_form.labels.defaults.email'), input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, hint: false + = f.input :email, + autofocus: true, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.email') }, + label: t('simple_form.labels.defaults.email'), + wrapper: :with_label .fields-group - = f.input :password, wrapper: :with_label, label: t('simple_form.labels.defaults.password'), input_html: { 'aria-label': t('simple_form.labels.defaults.password'), autocomplete: 'current-password' }, hint: false + = f.input :password, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.password'), autocomplete: 'current-password' }, + label: t('simple_form.labels.defaults.password'), + wrapper: :with_label .actions = f.button :button, t('auth.login'), type: :submit diff --git a/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml b/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml index 8cc2c8561032ff..30e97a68c11d51 100644 --- a/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml +++ b/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml @@ -5,7 +5,12 @@ %p.hint.authentication-hint= t('simple_form.hints.sessions.otp') .fields-group - = f.input :otp_attempt, type: :number, wrapper: :with_label, label: t('simple_form.labels.defaults.otp_attempt'), input_html: { 'aria-label': t('simple_form.labels.defaults.otp_attempt'), autocomplete: 'one-time-code' }, autofocus: true + = f.input :otp_attempt, + autofocus: true, + input_html: { 'aria-label': t('simple_form.labels.defaults.otp_attempt'), autocomplete: 'one-time-code' }, + label: t('simple_form.labels.defaults.otp_attempt'), + type: :number, + wrapper: :with_label .actions = f.button :button, t('auth.login'), type: :submit diff --git a/app/views/auth/setup/show.html.haml b/app/views/auth/setup/show.html.haml index 97c826d704eb5d..713f77470d3e92 100644 --- a/app/views/auth/setup/show.html.haml +++ b/app/views/auth/setup/show.html.haml @@ -16,7 +16,10 @@ %p.lead= t('auth.setup.email_below_hint_html') .fields-group - = f.input :email, required: true, hint: false, input_html: { 'aria-label': t('simple_form.labels.defaults.email'), autocomplete: 'off' } + = f.input :email, + hint: false, + input_html: { 'aria-label': t('simple_form.labels.defaults.email'), autocomplete: 'off' }, + required: true .actions = f.button :button, t('auth.resend_confirmation'), type: :submit, class: 'button timer-button', disabled: true diff --git a/app/views/custom_css/show.css.erb b/app/views/custom_css/show.css.erb index 9cd38fb37140a1..78da809ed6d924 100644 --- a/app/views/custom_css/show.css.erb +++ b/app/views/custom_css/show.css.erb @@ -1,8 +1,8 @@ -<%- if Setting.custom_css.present? %> -<%= raw Setting.custom_css %> +<%- if custom_css_styles.present? %> +<%= raw custom_css_styles %> <%- end %> -<%- UserRole.where(highlighted: true).select { |role| role.color.present? }.each do |role| %> +<%- @user_roles.each do |role| %> .user-role-<%= role.id %> { --user-role-accent: <%= role.color %>; } diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index 62695b155e0a83..5f721388217ec9 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -21,7 +21,7 @@ .report-header .report-header__card - = render 'card', strike: @strike + = render 'disputes/strikes/card', strike: @strike .report-header__details .report-header__details__item diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 1244fd5eb3656e..c7210736703a41 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -14,12 +14,12 @@ %link{ rel: 'icon', href: '/favicon.ico', type: 'image/x-icon' }/ - %w(16 32 48).each do |size| - %link{ rel: 'icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/ + %link{ rel: 'icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/ - %w(57 60 72 76 114 120 144 152 167 180 1024).each do |size| - %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/apple-touch-icon-#{size}x#{size}.png") }/ + %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/ - %link{ rel: 'mask-icon', href: asset_pack_path('media/images/logo-symbol-icon.svg'), color: '#6364FF' }/ + %link{ rel: 'mask-icon', href: frontend_asset_path('images/logo-symbol-icon.svg'), color: '#6364FF' }/ %link{ rel: 'manifest', href: manifest_path(format: :json) }/ %meta{ name: 'theme-color', content: '#191b22' }/ %meta{ name: 'apple-mobile-web-app-capable', content: 'yes' }/ @@ -28,12 +28,14 @@ = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' = stylesheet_pack_tag current_theme, media: 'all', crossorigin: 'anonymous' + -# Needed for the wicg-inert polyfill. It needs to be on it's own