add MetaFeederStremio (meta-feeder-stremio 1.0.0)

This commit is contained in:
Worph
2026-10-11 12:54:54 +00:00
parent bfdf2cb849
commit d0b9e48a66
6 changed files with 416 additions and 1 deletions
+205
View File
@@ -0,0 +1,205 @@
name: metafeederstremio
# =============================================================================
# MetaFeeder · Stremio — Stremio addons (AIOStreams, Torrentio, …) as a torrent
# source for MetaMesh.
#
# Same model as MetaFeeder · Prowlarr: this app is only the GLUE. The source is a
# separate app — **AIOStreams** (Yundera store, container `aiostreams:3000`) is
# the recommended one: a single addon URL that aggregates Torrentio, Comet,
# MediaFusion, … Any addon speaking the Stremio protocol works, including
# Torrentio's public link.
#
# Answers id-anchored queries only, the three shapes MetaWatch sends:
# film `tmdbid:603 contentKind:movie`
# season `tmdbid:1399 season:1` (one addon call per episode)
# episode `tmdbid:1399 season:1 episode:2`
# (`imdbid:` works in place of `tmdbid:`). Each P2P stream is one per-file
# BitTorrent record — infoHash + fileIdx, i.e. the exact episode inside a season
# pack — that MetaTransport · Torrent plays with no .torrent file.
#
# ⚠ P2P ONLY. Configure AIOStreams WITHOUT a debrid service. Debrid links are
# personal, expiring and carry your token: this feeder drops them, and the
# gateway must never relay one user's debrid account to the mesh. Debrid will be
# a client-side MetaShare option instead.
#
# Self-contained: calls the addons and TMDB directly, holds no bytes, runs no
# enrichment sidecars, does NOT talk to meta-core — the MetaGateway core stores
# and announces the records it returns.
#
# It needs, over the shared `pcs` network:
# - the **MetaGateway** app — which must list this feeder's URL
# (`http://metafeederstremio-feeder:8080`) in its feeders config. Discovery
# is startup-only, so restart the gateway afterwards.
# - an addon (AIOStreams app, or a public addon URL).
#
# Everything is scoped under the `metafeederstremio-*` prefix +
# /DATA/AppData/metafeederstremio/ data root, so it installs alongside the other
# Meta* apps with zero collisions.
# =============================================================================
services:
# ---------------------------------------------------------------------------
# metafeederstremio-feeder — the feeder (meta-feeder-stremio) hosting the
# `stremio` upstream. The gateway core reaches it directly on `pcs` for
# discovery/query; the human configures it from the MetaGateway dashboard
# (configure panel).
# ---------------------------------------------------------------------------
metafeederstremio-feeder:
image: ghcr.io/worph/meta-feeder-stremio:1.0.0
cpu_shares: 30
container_name: metafeederstremio-feeder
# Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM instead of
# swap. One HTTP client + in-memory TMDB/record caches.
mem_limit: 256m
memswap_limit: 256m
hostname: metafeederstremio-feeder
restart: unless-stopped
# Its only write is its own state dir below, which Maison creates as
# $PUID:$PGID (x-compose-app.folders). So no root is needed.
user: $PUID:$PGID
expose:
- 8080
environment:
# INFRA-ONLY env (the "config: no env if in webui" rule). The addon URLs and
# the TMDB token are read from the persisted config.json written by this
# feeder's config page (opened from the MetaGateway dashboard). The
# STREMIO_ADDON_URLS / TMDB_TOKEN env vars exist only as first-boot seeds;
# don't set them here.
RUST_LOG: "info"
TZ: "$TZ"
volumes:
# Persist feeder config (config.json saved via the config UI).
- ${DATA_ROOT:-/DATA}/AppData/metafeederstremio/state:/data/meta-feeder:rw
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8080/health"]
interval: 5s
timeout: 3s
retries: 10
start_period: 5s
networks:
- pcs
networks:
pcs:
name: ${APP_NET:-pcs}
external: true
x-casaos:
architectures:
- amd64
- arm64
author: Worph Team
category: Media
developer: Aptero Team
description:
en_us: |
**Stremio addons as a MetaMesh source — AIOStreams, Torrentio and friends.**
MetaFeeder · Stremio asks your Stremio addons for the torrents of a film or
an episode, and turns each one into a MetaMesh release that **MetaWatch**
can play. The addons have already done the hard matching work: every
result points at the **exact file** — the right episode inside a season
pack or a complete-series torrent — so nothing is guessed from release
names.
**Use it with AIOStreams** (one link that aggregates Torrentio, Comet,
MediaFusion, …) or paste any addon's install link — Torrentio's public link
works too.
**Torrent (P2P) streams only.** Set up AIOStreams **without** a debrid
service: debrid links are personal and expire, so this feeder ignores
them rather than share your account with the mesh.
**Fast and self-contained:** an addon answers in about a second, results
stream in as they arrive, nothing is stored here and no enrichment
sidecars run. ~256 MB RAM.
**Requires:** **MetaGateway** — its meta-core stores the results and
announces them to the swarm; the gateway must list this feeder in its
config. A free **TMDB** token gives releases their poster and summary.
**Pairs with:** **AIOStreams**, **MetaWatch**, **MetaTransport · Torrent**.
fr_fr: |
**Les addons Stremio comme source MetaMesh — AIOStreams, Torrentio et autres.**
MetaFeeder · Stremio demande à vos addons Stremio les torrents d'un film ou
d'un épisode, et transforme chacun en une release MetaMesh que
**MetaWatch** peut lire. Les addons ont déjà fait le travail de
correspondance : chaque résultat désigne le **fichier exact** — le bon
épisode dans un pack de saison ou une intégrale — rien n'est deviné à
partir des noms de release.
**À utiliser avec AIOStreams** (un seul lien qui agrège Torrentio, Comet,
MediaFusion, …) ou collez le lien d'installation de n'importe quel addon —
le lien public de Torrentio fonctionne aussi.
**Flux torrent (P2P) uniquement.** Configurez AIOStreams **sans** service
de debrid : les liens debrid sont personnels et expirent, ce feeder les
ignore plutôt que de partager votre compte avec le mesh.
**Rapide et autonome :** un addon répond en une seconde environ, les
résultats arrivent au fil de l'eau, rien n'est stocké ici, aucun plugin
d'enrichissement. ~256 Mo de RAM.
**Nécessite :** l'app **MetaGateway** (son meta-core stocke et annonce les
résultats ; la passerelle doit lister ce feeder dans sa configuration). Un
jeton **TMDB** gratuit donne aux releases leur affiche et leur résumé.
tagline:
en_us: Stremio addons (AIOStreams, Torrentio) as a torrent source — exact file per episode
fr_fr: Addons Stremio (AIOStreams, Torrentio) comme source torrent — le fichier exact par épisode
title:
en_us: MetaFeeder · Stremio
icon: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederStremio/icon.png
thumbnail: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederStremio/thumbnail.png
store_app_id: metafeederstremio
is_uncontrolled: false
tips:
before_install:
en_us: |
**Install order:** **MetaGateway** first, then **AIOStreams** (Yundera
store) if you use it.
**After installing this app:**
1. In **AIOStreams**, build a configuration **without any debrid
service** (torrent/P2P addons only, e.g. Torrentio), save it and copy
its install link (`…/manifest.json`). From inside the PCS you can use
the internal form `http://aiostreams:3000/stremio/…/manifest.json`.
2. Open this feeder's config panel (the **MetaGateway** dashboard → this
feeder → *configure*), paste the link into **Stremio addon URLs** (one
per line), add your **TMDB token** (v4 read token from
themoviedb.org → Settings → API) and save. The feeder restarts itself.
3. In **MetaGateway**, add this feeder to its feeders config — name
`stremio-feeder`, URL `http://metafeederstremio-feeder:8080` — from
the gateway dashboard's *Add a feeder* box. The gateway restarts
itself and picks up the `stremio` upstream.
**Without an addon URL** the feeder stays up but reports degraded and
answers nothing. **Without a TMDB token** it answers only `imdbid:`
searches and releases have no poster — MetaWatch sends `tmdbid:`.
**Only film and episode lookups reach it** (a title, season or episode
page). The free-text search box never does: addons cannot search by text.
**No web UI of its own:** configure it from the **MetaGateway** dashboard
→ this feeder → *configure* (the gateway proxies this feeder's config
page, behind the gateway's login).
# Maison (Yundera dashboard) configuration. Read in preference to x-casaos.
# schema_version 2 is required for `folders`: an older Maison refuses the app
# outright rather than starting it without its directories.
x-compose-app:
schema_version: 2
# Created and chowned by Maison before any image is pulled, before any hook
# runs and before the containers start — on the first boot and every one after.
# The feeder runs as $PUID:$PGID, so this ownership is what lets it write.
folders:
- path: /DATA/AppData/metafeederstremio/state
user: $PUID
group: $PGID
Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

+1 -1
View File
@@ -22,7 +22,7 @@ https://github.com/Worph/MetaAppStore/archive/refs/heads/main.zip
| Library | `MetaSort`, `MetaFuse`, `MetaStremio` |
| Network | `MetaShare` (content transport), `MetaGateway`, `MetaGatewayShared` |
| Clients | `MetaWatch`, `MetaWatchShared`, `MetaRead`, `MetaReadShared` |
| Feeders | `MetaFeederAniList`, `MetaFeederArxiv`, `MetaFeederEuropePMC`, `MetaFeederGiphy`, `MetaFeederGutenberg`, `MetaFeederInternetArchive`, `MetaFeederJamendo`, `MetaFeederMusicBrainz`, `MetaFeederOpenSubtitles`, `MetaFeederProwlarr`, `MetaFeederSciHub`, `MetaFeederSuwayomi`, `MetaFeederTMDB`, `MetaFeederTribler`, `MetaFeederUsenet`, `MetaFeederWikiCommons`, `MetaFeederYouTube` |
| Feeders | `MetaFeederAniList`, `MetaFeederArxiv`, `MetaFeederEuropePMC`, `MetaFeederGiphy`, `MetaFeederGutenberg`, `MetaFeederInternetArchive`, `MetaFeederJamendo`, `MetaFeederMusicBrainz`, `MetaFeederOpenSubtitles`, `MetaFeederProwlarr`, `MetaFeederSciHub`, `MetaFeederStremio`, `MetaFeederSuwayomi`, `MetaFeederTMDB`, `MetaFeederTribler`, `MetaFeederUsenet`, `MetaFeederWikiCommons`, `MetaFeederYouTube` |
| Plugins | `MetaPluginAnimeDetector`, `MetaPluginFFmpeg`, `MetaPluginFileInfo`, `MetaPluginFilenameParser`, `MetaPluginFullHash`, `MetaPluginJellyfinNFO`, `MetaPluginLanguage`, `MetaPluginOpenSubtitles`, `MetaPluginStillExtractor`, `MetaPluginSubtitle`, `MetaPluginSubtitleExtractor`, `MetaPluginTMDB` — headless enrichment workers, one per `metamesh-plugin-*` image |
`MetaCore` is the dependency of every other app — install it first.
+1
View File
@@ -127,6 +127,7 @@ APPS = {
"MetaFeederJamendo": ("JAMENDO", "note", ORANGE),
"MetaFeederMusicBrainz": ("MUSICBRAINZ", "disc", ORANGE),
"MetaFeederYouTube": ("YOUTUBE", "video", ORANGE),
"MetaFeederStremio": ("STREMIO", "play", ORANGE),
# MetaPlugin family — headless enrichment workers, blue ring.
"MetaPluginFileInfo": ("FILE INFO", "fileinfo", BLUE),
"MetaPluginFFmpeg": ("FFMPEG", "film", BLUE),
@@ -0,0 +1,209 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
<defs>
<linearGradient id="e0" gradientUnits="userSpaceOnUse" x1="783.1" y1="578.2" x2="783.4" y2="666.2"><stop offset="0" stop-color="#556dcf"/><stop offset="1" stop-color="#6364d1"/></linearGradient>
<linearGradient id="e1" gradientUnits="userSpaceOnUse" x1="783.4" y1="666.2" x2="636.7" y2="789.7"><stop offset="0" stop-color="#6364d1"/><stop offset="1" stop-color="#6c5dd2"/></linearGradient>
<linearGradient id="e2" gradientUnits="userSpaceOnUse" x1="835.6" y1="448.9" x2="783.1" y2="578.2"><stop offset="0" stop-color="#4479ce"/><stop offset="1" stop-color="#556dcf"/></linearGradient>
<linearGradient id="e3" gradientUnits="userSpaceOnUse" x1="783.1" y1="578.2" x2="836.5" y2="548.1"><stop offset="0" stop-color="#556dcf"/><stop offset="1" stop-color="#546ecf"/></linearGradient>
<linearGradient id="e4" gradientUnits="userSpaceOnUse" x1="734.9" y1="293.1" x2="835.6" y2="448.9"><stop offset="0" stop-color="#3695c6"/><stop offset="1" stop-color="#4479ce"/></linearGradient>
<linearGradient id="e5" gradientUnits="userSpaceOnUse" x1="520.6" y1="190.1" x2="426.4" y2="168.1"><stop offset="0" stop-color="#2eb2bd"/><stop offset="1" stop-color="#2bbbba"/></linearGradient>
<linearGradient id="e6" gradientUnits="userSpaceOnUse" x1="636.7" y1="789.7" x2="545.6" y2="836.8"><stop offset="0" stop-color="#6c5dd2"/><stop offset="1" stop-color="#6e5cd2"/></linearGradient>
<linearGradient id="e7" gradientUnits="userSpaceOnUse" x1="520.6" y1="190.1" x2="589.5" y2="173.7"><stop offset="0" stop-color="#2eb2bd"/><stop offset="1" stop-color="#2fb0be"/></linearGradient>
<linearGradient id="e8" gradientUnits="userSpaceOnUse" x1="589.5" y1="173.7" x2="734.9" y2="293.1"><stop offset="0" stop-color="#2fb0be"/><stop offset="1" stop-color="#3695c6"/></linearGradient>
<linearGradient id="e9" gradientUnits="userSpaceOnUse" x1="267.3" y1="260.5" x2="182.7" y2="382.3"><stop offset="0" stop-color="#2cb7bc"/><stop offset="1" stop-color="#30abbf"/></linearGradient>
<linearGradient id="e10" gradientUnits="userSpaceOnUse" x1="836.5" y1="548.1" x2="783.4" y2="666.2"><stop offset="0" stop-color="#546ecf"/><stop offset="1" stop-color="#6364d1"/></linearGradient>
<linearGradient id="e11" gradientUnits="userSpaceOnUse" x1="636.7" y1="789.7" x2="708.2" y2="763.4"><stop offset="0" stop-color="#6c5dd2"/><stop offset="1" stop-color="#6d5dd2"/></linearGradient>
<linearGradient id="e12" gradientUnits="userSpaceOnUse" x1="426.4" y1="168.1" x2="267.3" y2="260.5"><stop offset="0" stop-color="#2bbbba"/><stop offset="1" stop-color="#2cb7bc"/></linearGradient>
<linearGradient id="e13" gradientUnits="userSpaceOnUse" x1="182.7" y1="382.3" x2="166.7" y2="566.8"><stop offset="0" stop-color="#30abbf"/><stop offset="1" stop-color="#3890c7"/></linearGradient>
<linearGradient id="e14" gradientUnits="userSpaceOnUse" x1="783.4" y1="666.2" x2="708.2" y2="763.4"><stop offset="0" stop-color="#6364d1"/><stop offset="1" stop-color="#6d5dd2"/></linearGradient>
<linearGradient id="e15" gradientUnits="userSpaceOnUse" x1="835.6" y1="448.9" x2="836.5" y2="548.1"><stop offset="0" stop-color="#4479ce"/><stop offset="1" stop-color="#546ecf"/></linearGradient>
<linearGradient id="e16" gradientUnits="userSpaceOnUse" x1="734.9" y1="293.1" x2="760.3" y2="319.9"><stop offset="0" stop-color="#3695c6"/><stop offset="1" stop-color="#388fc8"/></linearGradient>
<linearGradient id="e17" gradientUnits="userSpaceOnUse" x1="358.4" y1="809.1" x2="545.6" y2="836.8"><stop offset="0" stop-color="#5d68d0"/><stop offset="1" stop-color="#6e5cd2"/></linearGradient>
<linearGradient id="e18" gradientUnits="userSpaceOnUse" x1="166.7" y1="566.8" x2="225.8" y2="701.1"><stop offset="0" stop-color="#3890c7"/><stop offset="1" stop-color="#437ace"/></linearGradient>
<linearGradient id="e19" gradientUnits="userSpaceOnUse" x1="734.9" y1="293.1" x2="674.0" y2="239.3"><stop offset="0" stop-color="#3695c6"/><stop offset="1" stop-color="#33a1c2"/></linearGradient>
<linearGradient id="e20" gradientUnits="userSpaceOnUse" x1="225.8" y1="701.1" x2="358.4" y2="809.1"><stop offset="0" stop-color="#437ace"/><stop offset="1" stop-color="#5d68d0"/></linearGradient>
<linearGradient id="e21" gradientUnits="userSpaceOnUse" x1="426.4" y1="168.1" x2="589.5" y2="173.7"><stop offset="0" stop-color="#2bbbba"/><stop offset="1" stop-color="#2fb0be"/></linearGradient>
<linearGradient id="e22" gradientUnits="userSpaceOnUse" x1="708.2" y1="763.4" x2="545.6" y2="836.8"><stop offset="0" stop-color="#6d5dd2"/><stop offset="1" stop-color="#6e5cd2"/></linearGradient>
<linearGradient id="e23" gradientUnits="userSpaceOnUse" x1="836.5" y1="548.1" x2="708.2" y2="763.4"><stop offset="0" stop-color="#546ecf"/><stop offset="1" stop-color="#6d5dd2"/></linearGradient>
<linearGradient id="e24" gradientUnits="userSpaceOnUse" x1="267.3" y1="260.5" x2="283.5" y2="265.3"><stop offset="0" stop-color="#2cb7bc"/><stop offset="1" stop-color="#2db6bc"/></linearGradient>
<linearGradient id="e25" gradientUnits="userSpaceOnUse" x1="283.5" y1="265.3" x2="182.7" y2="382.3"><stop offset="0" stop-color="#2db6bc"/><stop offset="1" stop-color="#30abbf"/></linearGradient>
<linearGradient id="e26" gradientUnits="userSpaceOnUse" x1="760.3" y1="319.9" x2="835.6" y2="448.9"><stop offset="0" stop-color="#388fc8"/><stop offset="1" stop-color="#4479ce"/></linearGradient>
<linearGradient id="e27" gradientUnits="userSpaceOnUse" x1="182.7" y1="382.3" x2="210.0" y2="412.0"><stop offset="0" stop-color="#30abbf"/><stop offset="1" stop-color="#32a5c1"/></linearGradient>
<linearGradient id="e28" gradientUnits="userSpaceOnUse" x1="426.4" y1="168.1" x2="283.5" y2="265.3"><stop offset="0" stop-color="#2bbbba"/><stop offset="1" stop-color="#2db6bc"/></linearGradient>
<linearGradient id="e29" gradientUnits="userSpaceOnUse" x1="835.6" y1="448.9" x2="794.7" y2="427.3"><stop offset="0" stop-color="#4479ce"/><stop offset="1" stop-color="#3e7dcd"/></linearGradient>
<linearGradient id="e30" gradientUnits="userSpaceOnUse" x1="545.6" y1="836.8" x2="592.7" y2="793.7"><stop offset="0" stop-color="#6e5cd2"/><stop offset="1" stop-color="#6a5fd2"/></linearGradient>
<linearGradient id="e31" gradientUnits="userSpaceOnUse" x1="426.4" y1="168.1" x2="521.2" y2="187.1"><stop offset="0" stop-color="#2bbbba"/><stop offset="1" stop-color="#2eb2bd"/></linearGradient>
<linearGradient id="e32" gradientUnits="userSpaceOnUse" x1="794.7" y1="427.3" x2="836.5" y2="548.1"><stop offset="0" stop-color="#3e7dcd"/><stop offset="1" stop-color="#546ecf"/></linearGradient>
<linearGradient id="e33" gradientUnits="userSpaceOnUse" x1="210.0" y1="412.0" x2="166.7" y2="566.8"><stop offset="0" stop-color="#32a5c1"/><stop offset="1" stop-color="#3890c7"/></linearGradient>
<linearGradient id="e34" gradientUnits="userSpaceOnUse" x1="589.5" y1="173.7" x2="521.2" y2="187.1"><stop offset="0" stop-color="#2fb0be"/><stop offset="1" stop-color="#2eb2bd"/></linearGradient>
<linearGradient id="e35" gradientUnits="userSpaceOnUse" x1="589.5" y1="173.7" x2="674.0" y2="239.3"><stop offset="0" stop-color="#2fb0be"/><stop offset="1" stop-color="#33a1c2"/></linearGradient>
<linearGradient id="e36" gradientUnits="userSpaceOnUse" x1="291.2" y1="705.5" x2="358.4" y2="809.1"><stop offset="0" stop-color="#4877ce"/><stop offset="1" stop-color="#5d68d0"/></linearGradient>
<linearGradient id="e37" gradientUnits="userSpaceOnUse" x1="225.8" y1="701.1" x2="291.2" y2="705.5"><stop offset="0" stop-color="#437ace"/><stop offset="1" stop-color="#4877ce"/></linearGradient>
<linearGradient id="e38" gradientUnits="userSpaceOnUse" x1="836.5" y1="548.1" x2="749.1" y2="617.9"><stop offset="0" stop-color="#546ecf"/><stop offset="1" stop-color="#596bd0"/></linearGradient>
<linearGradient id="e39" gradientUnits="userSpaceOnUse" x1="708.2" y1="763.4" x2="592.7" y2="793.7"><stop offset="0" stop-color="#6d5dd2"/><stop offset="1" stop-color="#6a5fd2"/></linearGradient>
<linearGradient id="e40" gradientUnits="userSpaceOnUse" x1="433.3" y1="760.0" x2="545.6" y2="836.8"><stop offset="0" stop-color="#5a6ad0"/><stop offset="1" stop-color="#6e5cd2"/></linearGradient>
<linearGradient id="e41" gradientUnits="userSpaceOnUse" x1="166.7" y1="566.8" x2="244.4" y2="570.5"><stop offset="0" stop-color="#3890c7"/><stop offset="1" stop-color="#398bc9"/></linearGradient>
<linearGradient id="e42" gradientUnits="userSpaceOnUse" x1="358.4" y1="809.1" x2="433.3" y2="760.0"><stop offset="0" stop-color="#5d68d0"/><stop offset="1" stop-color="#5a6ad0"/></linearGradient>
<linearGradient id="e43" gradientUnits="userSpaceOnUse" x1="244.4" y1="570.5" x2="225.8" y2="701.1"><stop offset="0" stop-color="#398bc9"/><stop offset="1" stop-color="#437ace"/></linearGradient>
<linearGradient id="e44" gradientUnits="userSpaceOnUse" x1="521.2" y1="187.1" x2="283.5" y2="265.3"><stop offset="0" stop-color="#2eb2bd"/><stop offset="1" stop-color="#2db6bc"/></linearGradient>
<linearGradient id="e45" gradientUnits="userSpaceOnUse" x1="749.1" y1="617.9" x2="708.2" y2="763.4"><stop offset="0" stop-color="#596bd0"/><stop offset="1" stop-color="#6d5dd2"/></linearGradient>
<linearGradient id="e46" gradientUnits="userSpaceOnUse" x1="674.0" y1="239.3" x2="760.3" y2="319.9"><stop offset="0" stop-color="#33a1c2"/><stop offset="1" stop-color="#388fc8"/></linearGradient>
<linearGradient id="e47" gradientUnits="userSpaceOnUse" x1="521.2" y1="187.1" x2="674.0" y2="239.3"><stop offset="0" stop-color="#2eb2bd"/><stop offset="1" stop-color="#33a1c2"/></linearGradient>
<linearGradient id="e48" gradientUnits="userSpaceOnUse" x1="283.5" y1="265.3" x2="210.0" y2="412.0"><stop offset="0" stop-color="#2db6bc"/><stop offset="1" stop-color="#32a5c1"/></linearGradient>
<linearGradient id="e49" gradientUnits="userSpaceOnUse" x1="760.3" y1="319.9" x2="794.7" y2="427.3"><stop offset="0" stop-color="#388fc8"/><stop offset="1" stop-color="#3e7dcd"/></linearGradient>
<linearGradient id="e50" gradientUnits="userSpaceOnUse" x1="749.1" y1="617.9" x2="592.7" y2="793.7"><stop offset="0" stop-color="#596bd0"/><stop offset="1" stop-color="#6a5fd2"/></linearGradient>
<linearGradient id="e51" gradientUnits="userSpaceOnUse" x1="794.7" y1="427.3" x2="749.1" y2="617.9"><stop offset="0" stop-color="#3e7dcd"/><stop offset="1" stop-color="#596bd0"/></linearGradient>
<linearGradient id="e52" gradientUnits="userSpaceOnUse" x1="433.3" y1="760.0" x2="592.7" y2="793.7"><stop offset="0" stop-color="#5a6ad0"/><stop offset="1" stop-color="#6a5fd2"/></linearGradient>
<linearGradient id="e53" gradientUnits="userSpaceOnUse" x1="210.0" y1="412.0" x2="244.4" y2="570.5"><stop offset="0" stop-color="#32a5c1"/><stop offset="1" stop-color="#398bc9"/></linearGradient>
<linearGradient id="e54" gradientUnits="userSpaceOnUse" x1="283.5" y1="265.3" x2="422.2" y2="284.1"><stop offset="0" stop-color="#2db6bc"/><stop offset="1" stop-color="#30aac0"/></linearGradient>
<linearGradient id="e55" gradientUnits="userSpaceOnUse" x1="291.2" y1="705.5" x2="433.3" y2="760.0"><stop offset="0" stop-color="#4877ce"/><stop offset="1" stop-color="#5a6ad0"/></linearGradient>
<linearGradient id="e56" gradientUnits="userSpaceOnUse" x1="521.2" y1="187.1" x2="422.2" y2="284.1"><stop offset="0" stop-color="#2eb2bd"/><stop offset="1" stop-color="#30aac0"/></linearGradient>
<linearGradient id="e57" gradientUnits="userSpaceOnUse" x1="760.3" y1="319.9" x2="632.4" y2="323.9"><stop offset="0" stop-color="#388fc8"/><stop offset="1" stop-color="#3697c5"/></linearGradient>
<linearGradient id="e58" gradientUnits="userSpaceOnUse" x1="244.4" y1="570.5" x2="291.2" y2="705.5"><stop offset="0" stop-color="#398bc9"/><stop offset="1" stop-color="#4877ce"/></linearGradient>
<linearGradient id="e59" gradientUnits="userSpaceOnUse" x1="283.5" y1="265.3" x2="318.3" y2="407.9"><stop offset="0" stop-color="#2db6bc"/><stop offset="1" stop-color="#349ec3"/></linearGradient>
<linearGradient id="e60" gradientUnits="userSpaceOnUse" x1="521.2" y1="187.1" x2="632.4" y2="323.9"><stop offset="0" stop-color="#2eb2bd"/><stop offset="1" stop-color="#3697c5"/></linearGradient>
<linearGradient id="e61" gradientUnits="userSpaceOnUse" x1="674.0" y1="239.3" x2="632.4" y2="323.9"><stop offset="0" stop-color="#33a1c2"/><stop offset="1" stop-color="#3697c5"/></linearGradient>
<linearGradient id="e62" gradientUnits="userSpaceOnUse" x1="794.7" y1="427.3" x2="724.0" y2="539.5"><stop offset="0" stop-color="#3e7dcd"/><stop offset="1" stop-color="#4b74ce"/></linearGradient>
<linearGradient id="e63" gradientUnits="userSpaceOnUse" x1="632.4" y1="323.9" x2="794.7" y2="427.3"><stop offset="0" stop-color="#3697c5"/><stop offset="1" stop-color="#3e7dcd"/></linearGradient>
<linearGradient id="e64" gradientUnits="userSpaceOnUse" x1="210.0" y1="412.0" x2="318.3" y2="407.9"><stop offset="0" stop-color="#32a5c1"/><stop offset="1" stop-color="#349ec3"/></linearGradient>
<linearGradient id="e65" gradientUnits="userSpaceOnUse" x1="534.6" y1="674.0" x2="592.7" y2="793.7"><stop offset="0" stop-color="#536fcf"/><stop offset="1" stop-color="#6a5fd2"/></linearGradient>
<linearGradient id="e66" gradientUnits="userSpaceOnUse" x1="724.0" y1="539.5" x2="749.1" y2="617.9"><stop offset="0" stop-color="#4b74ce"/><stop offset="1" stop-color="#596bd0"/></linearGradient>
<linearGradient id="e67" gradientUnits="userSpaceOnUse" x1="362.7" y1="624.2" x2="291.2" y2="705.5"><stop offset="0" stop-color="#407ccd"/><stop offset="1" stop-color="#4877ce"/></linearGradient>
<linearGradient id="e68" gradientUnits="userSpaceOnUse" x1="318.3" y1="407.9" x2="244.4" y2="570.5"><stop offset="0" stop-color="#349ec3"/><stop offset="1" stop-color="#398bc9"/></linearGradient>
<linearGradient id="e69" gradientUnits="userSpaceOnUse" x1="749.1" y1="617.9" x2="534.6" y2="674.0"><stop offset="0" stop-color="#596bd0"/><stop offset="1" stop-color="#536fcf"/></linearGradient>
<linearGradient id="e70" gradientUnits="userSpaceOnUse" x1="362.7" y1="624.2" x2="433.3" y2="760.0"><stop offset="0" stop-color="#407ccd"/><stop offset="1" stop-color="#5a6ad0"/></linearGradient>
<linearGradient id="e71" gradientUnits="userSpaceOnUse" x1="244.4" y1="570.5" x2="362.7" y2="624.2"><stop offset="0" stop-color="#398bc9"/><stop offset="1" stop-color="#407ccd"/></linearGradient>
<linearGradient id="e72" gradientUnits="userSpaceOnUse" x1="534.6" y1="674.0" x2="433.3" y2="760.0"><stop offset="0" stop-color="#536fcf"/><stop offset="1" stop-color="#5a6ad0"/></linearGradient>
<linearGradient id="e73" gradientUnits="userSpaceOnUse" x1="422.2" y1="284.1" x2="632.4" y2="323.9"><stop offset="0" stop-color="#30aac0"/><stop offset="1" stop-color="#3697c5"/></linearGradient>
<linearGradient id="e74" gradientUnits="userSpaceOnUse" x1="632.4" y1="323.9" x2="724.0" y2="539.5"><stop offset="0" stop-color="#3697c5"/><stop offset="1" stop-color="#4b74ce"/></linearGradient>
<linearGradient id="e75" gradientUnits="userSpaceOnUse" x1="422.2" y1="284.1" x2="318.3" y2="407.9"><stop offset="0" stop-color="#30aac0"/><stop offset="1" stop-color="#349ec3"/></linearGradient>
<linearGradient id="e76" gradientUnits="userSpaceOnUse" x1="724.0" y1="539.5" x2="534.6" y2="674.0"><stop offset="0" stop-color="#4b74ce"/><stop offset="1" stop-color="#536fcf"/></linearGradient>
<linearGradient id="e77" gradientUnits="userSpaceOnUse" x1="318.3" y1="407.9" x2="362.7" y2="624.2"><stop offset="0" stop-color="#349ec3"/><stop offset="1" stop-color="#407ccd"/></linearGradient>
<linearGradient id="e78" gradientUnits="userSpaceOnUse" x1="362.7" y1="624.2" x2="534.6" y2="674.0"><stop offset="0" stop-color="#407ccd"/><stop offset="1" stop-color="#536fcf"/></linearGradient>
<linearGradient id="e79" gradientUnits="userSpaceOnUse" x1="422.2" y1="284.1" x2="537.1" y2="463.0"><stop offset="0" stop-color="#30aac0"/><stop offset="1" stop-color="#3a88ca"/></linearGradient>
<linearGradient id="e80" gradientUnits="userSpaceOnUse" x1="537.1" y1="463.0" x2="724.0" y2="539.5"><stop offset="0" stop-color="#3a88ca"/><stop offset="1" stop-color="#4b74ce"/></linearGradient>
<linearGradient id="e81" gradientUnits="userSpaceOnUse" x1="632.4" y1="323.9" x2="537.1" y2="463.0"><stop offset="0" stop-color="#3697c5"/><stop offset="1" stop-color="#3a88ca"/></linearGradient>
<linearGradient id="e82" gradientUnits="userSpaceOnUse" x1="318.3" y1="407.9" x2="537.1" y2="463.0"><stop offset="0" stop-color="#349ec3"/><stop offset="1" stop-color="#3a88ca"/></linearGradient>
<linearGradient id="e83" gradientUnits="userSpaceOnUse" x1="537.1" y1="463.0" x2="362.7" y2="624.2"><stop offset="0" stop-color="#3a88ca"/><stop offset="1" stop-color="#407ccd"/></linearGradient>
<linearGradient id="e84" gradientUnits="userSpaceOnUse" x1="537.1" y1="463.0" x2="534.6" y2="674.0"><stop offset="0" stop-color="#3a88ca"/><stop offset="1" stop-color="#536fcf"/></linearGradient>
</defs>
<rect width="1024" height="1024" fill="#fefefe"/>
<line x1="783.1" y1="578.2" x2="783.4" y2="666.2" stroke="url(#e0)" stroke-width="8.3" stroke-linecap="round"/>
<line x1="783.4" y1="666.2" x2="636.7" y2="789.7" stroke="url(#e1)" stroke-width="8.4" stroke-linecap="round"/>
<line x1="835.6" y1="448.9" x2="783.1" y2="578.2" stroke="url(#e2)" stroke-width="8.4" stroke-linecap="round"/>
<line x1="783.1" y1="578.2" x2="836.5" y2="548.1" stroke="url(#e3)" stroke-width="8.4" stroke-linecap="round"/>
<line x1="734.9" y1="293.1" x2="835.6" y2="448.9" stroke="url(#e4)" stroke-width="8.5" stroke-linecap="round"/>
<line x1="520.6" y1="190.1" x2="426.4" y2="168.1" stroke="url(#e5)" stroke-width="8.5" stroke-linecap="round"/>
<line x1="636.7" y1="789.7" x2="545.6" y2="836.8" stroke="url(#e6)" stroke-width="8.5" stroke-linecap="round"/>
<line x1="520.6" y1="190.1" x2="589.5" y2="173.7" stroke="url(#e7)" stroke-width="8.6" stroke-linecap="round"/>
<line x1="589.5" y1="173.7" x2="734.9" y2="293.1" stroke="url(#e8)" stroke-width="8.6" stroke-linecap="round"/>
<line x1="267.3" y1="260.5" x2="182.7" y2="382.3" stroke="url(#e9)" stroke-width="8.6" stroke-linecap="round"/>
<line x1="836.5" y1="548.1" x2="783.4" y2="666.2" stroke="url(#e10)" stroke-width="8.6" stroke-linecap="round"/>
<line x1="636.7" y1="789.7" x2="708.2" y2="763.4" stroke="url(#e11)" stroke-width="8.6" stroke-linecap="round"/>
<line x1="426.4" y1="168.1" x2="267.3" y2="260.5" stroke="url(#e12)" stroke-width="8.6" stroke-linecap="round"/>
<line x1="182.7" y1="382.3" x2="166.7" y2="566.8" stroke="url(#e13)" stroke-width="8.7" stroke-linecap="round"/>
<line x1="783.4" y1="666.2" x2="708.2" y2="763.4" stroke="url(#e14)" stroke-width="8.7" stroke-linecap="round"/>
<line x1="835.6" y1="448.9" x2="836.5" y2="548.1" stroke="url(#e15)" stroke-width="8.7" stroke-linecap="round"/>
<line x1="734.9" y1="293.1" x2="760.3" y2="319.9" stroke="url(#e16)" stroke-width="8.7" stroke-linecap="round"/>
<line x1="358.4" y1="809.1" x2="545.6" y2="836.8" stroke="url(#e17)" stroke-width="8.7" stroke-linecap="round"/>
<line x1="166.7" y1="566.8" x2="225.8" y2="701.1" stroke="url(#e18)" stroke-width="8.7" stroke-linecap="round"/>
<line x1="734.9" y1="293.1" x2="674.0" y2="239.3" stroke="url(#e19)" stroke-width="8.7" stroke-linecap="round"/>
<line x1="225.8" y1="701.1" x2="358.4" y2="809.1" stroke="url(#e20)" stroke-width="8.8" stroke-linecap="round"/>
<line x1="426.4" y1="168.1" x2="589.5" y2="173.7" stroke="url(#e21)" stroke-width="8.8" stroke-linecap="round"/>
<line x1="708.2" y1="763.4" x2="545.6" y2="836.8" stroke="url(#e22)" stroke-width="8.8" stroke-linecap="round"/>
<line x1="836.5" y1="548.1" x2="708.2" y2="763.4" stroke="url(#e23)" stroke-width="8.8" stroke-linecap="round"/>
<line x1="267.3" y1="260.5" x2="283.5" y2="265.3" stroke="url(#e24)" stroke-width="8.8" stroke-linecap="round"/>
<line x1="283.5" y1="265.3" x2="182.7" y2="382.3" stroke="url(#e25)" stroke-width="8.9" stroke-linecap="round"/>
<line x1="760.3" y1="319.9" x2="835.6" y2="448.9" stroke="url(#e26)" stroke-width="8.9" stroke-linecap="round"/>
<line x1="182.7" y1="382.3" x2="210.0" y2="412.0" stroke="url(#e27)" stroke-width="9.0" stroke-linecap="round"/>
<line x1="426.4" y1="168.1" x2="283.5" y2="265.3" stroke="url(#e28)" stroke-width="9.0" stroke-linecap="round"/>
<line x1="835.6" y1="448.9" x2="794.7" y2="427.3" stroke="url(#e29)" stroke-width="9.0" stroke-linecap="round"/>
<line x1="545.6" y1="836.8" x2="592.7" y2="793.7" stroke="url(#e30)" stroke-width="9.0" stroke-linecap="round"/>
<line x1="426.4" y1="168.1" x2="521.2" y2="187.1" stroke="url(#e31)" stroke-width="9.0" stroke-linecap="round"/>
<line x1="794.7" y1="427.3" x2="836.5" y2="548.1" stroke="url(#e32)" stroke-width="9.0" stroke-linecap="round"/>
<line x1="210.0" y1="412.0" x2="166.7" y2="566.8" stroke="url(#e33)" stroke-width="9.0" stroke-linecap="round"/>
<line x1="589.5" y1="173.7" x2="521.2" y2="187.1" stroke="url(#e34)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="589.5" y1="173.7" x2="674.0" y2="239.3" stroke="url(#e35)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="291.2" y1="705.5" x2="358.4" y2="809.1" stroke="url(#e36)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="225.8" y1="701.1" x2="291.2" y2="705.5" stroke="url(#e37)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="836.5" y1="548.1" x2="749.1" y2="617.9" stroke="url(#e38)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="708.2" y1="763.4" x2="592.7" y2="793.7" stroke="url(#e39)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="433.3" y1="760.0" x2="545.6" y2="836.8" stroke="url(#e40)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="166.7" y1="566.8" x2="244.4" y2="570.5" stroke="url(#e41)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="358.4" y1="809.1" x2="433.3" y2="760.0" stroke="url(#e42)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="244.4" y1="570.5" x2="225.8" y2="701.1" stroke="url(#e43)" stroke-width="9.1" stroke-linecap="round"/>
<line x1="521.2" y1="187.1" x2="283.5" y2="265.3" stroke="url(#e44)" stroke-width="9.2" stroke-linecap="round"/>
<line x1="749.1" y1="617.9" x2="708.2" y2="763.4" stroke="url(#e45)" stroke-width="9.2" stroke-linecap="round"/>
<line x1="674.0" y1="239.3" x2="760.3" y2="319.9" stroke="url(#e46)" stroke-width="9.2" stroke-linecap="round"/>
<line x1="521.2" y1="187.1" x2="674.0" y2="239.3" stroke="url(#e47)" stroke-width="9.2" stroke-linecap="round"/>
<line x1="283.5" y1="265.3" x2="210.0" y2="412.0" stroke="url(#e48)" stroke-width="9.2" stroke-linecap="round"/>
<line x1="760.3" y1="319.9" x2="794.7" y2="427.3" stroke="url(#e49)" stroke-width="9.3" stroke-linecap="round"/>
<line x1="749.1" y1="617.9" x2="592.7" y2="793.7" stroke="url(#e50)" stroke-width="9.4" stroke-linecap="round"/>
<line x1="794.7" y1="427.3" x2="749.1" y2="617.9" stroke="url(#e51)" stroke-width="9.4" stroke-linecap="round"/>
<line x1="433.3" y1="760.0" x2="592.7" y2="793.7" stroke="url(#e52)" stroke-width="9.4" stroke-linecap="round"/>
<line x1="210.0" y1="412.0" x2="244.4" y2="570.5" stroke="url(#e53)" stroke-width="9.4" stroke-linecap="round"/>
<line x1="283.5" y1="265.3" x2="422.2" y2="284.1" stroke="url(#e54)" stroke-width="9.4" stroke-linecap="round"/>
<line x1="291.2" y1="705.5" x2="433.3" y2="760.0" stroke="url(#e55)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="521.2" y1="187.1" x2="422.2" y2="284.1" stroke="url(#e56)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="760.3" y1="319.9" x2="632.4" y2="323.9" stroke="url(#e57)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="244.4" y1="570.5" x2="291.2" y2="705.5" stroke="url(#e58)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="283.5" y1="265.3" x2="318.3" y2="407.9" stroke="url(#e59)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="521.2" y1="187.1" x2="632.4" y2="323.9" stroke="url(#e60)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="674.0" y1="239.3" x2="632.4" y2="323.9" stroke="url(#e61)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="794.7" y1="427.3" x2="724.0" y2="539.5" stroke="url(#e62)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="632.4" y1="323.9" x2="794.7" y2="427.3" stroke="url(#e63)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="210.0" y1="412.0" x2="318.3" y2="407.9" stroke="url(#e64)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="534.6" y1="674.0" x2="592.7" y2="793.7" stroke="url(#e65)" stroke-width="9.5" stroke-linecap="round"/>
<line x1="724.0" y1="539.5" x2="749.1" y2="617.9" stroke="url(#e66)" stroke-width="9.6" stroke-linecap="round"/>
<line x1="362.7" y1="624.2" x2="291.2" y2="705.5" stroke="url(#e67)" stroke-width="9.6" stroke-linecap="round"/>
<line x1="318.3" y1="407.9" x2="244.4" y2="570.5" stroke="url(#e68)" stroke-width="9.6" stroke-linecap="round"/>
<line x1="749.1" y1="617.9" x2="534.6" y2="674.0" stroke="url(#e69)" stroke-width="9.6" stroke-linecap="round"/>
<line x1="362.7" y1="624.2" x2="433.3" y2="760.0" stroke="url(#e70)" stroke-width="9.7" stroke-linecap="round"/>
<line x1="244.4" y1="570.5" x2="362.7" y2="624.2" stroke="url(#e71)" stroke-width="9.7" stroke-linecap="round"/>
<line x1="534.6" y1="674.0" x2="433.3" y2="760.0" stroke="url(#e72)" stroke-width="9.7" stroke-linecap="round"/>
<line x1="422.2" y1="284.1" x2="632.4" y2="323.9" stroke="url(#e73)" stroke-width="9.7" stroke-linecap="round"/>
<line x1="632.4" y1="323.9" x2="724.0" y2="539.5" stroke="url(#e74)" stroke-width="9.7" stroke-linecap="round"/>
<line x1="422.2" y1="284.1" x2="318.3" y2="407.9" stroke="url(#e75)" stroke-width="9.7" stroke-linecap="round"/>
<line x1="724.0" y1="539.5" x2="534.6" y2="674.0" stroke="url(#e76)" stroke-width="9.7" stroke-linecap="round"/>
<line x1="318.3" y1="407.9" x2="362.7" y2="624.2" stroke="url(#e77)" stroke-width="9.8" stroke-linecap="round"/>
<line x1="362.7" y1="624.2" x2="534.6" y2="674.0" stroke="url(#e78)" stroke-width="9.8" stroke-linecap="round"/>
<line x1="422.2" y1="284.1" x2="537.1" y2="463.0" stroke="url(#e79)" stroke-width="9.8" stroke-linecap="round"/>
<line x1="537.1" y1="463.0" x2="724.0" y2="539.5" stroke="url(#e80)" stroke-width="9.8" stroke-linecap="round"/>
<line x1="632.4" y1="323.9" x2="537.1" y2="463.0" stroke="url(#e81)" stroke-width="9.8" stroke-linecap="round"/>
<line x1="318.3" y1="407.9" x2="537.1" y2="463.0" stroke="url(#e82)" stroke-width="9.9" stroke-linecap="round"/>
<line x1="537.1" y1="463.0" x2="362.7" y2="624.2" stroke="url(#e83)" stroke-width="9.9" stroke-linecap="round"/>
<line x1="537.1" y1="463.0" x2="534.6" y2="674.0" stroke="url(#e84)" stroke-width="9.9" stroke-linecap="round"/>
<circle cx="783.1" cy="578.2" r="18.4" fill="#556dcf"/>
<circle cx="520.6" cy="190.1" r="19.1" fill="#2eb2bd"/>
<circle cx="734.9" cy="293.1" r="12.0" fill="#3695c6"/>
<circle cx="636.7" cy="789.7" r="12.3" fill="#6c5dd2"/>
<circle cx="783.4" cy="666.2" r="12.7" fill="#6364d1"/>
<circle cx="267.3" cy="260.5" r="20.9" fill="#2cb7bc"/>
<circle cx="182.7" cy="382.3" r="21.6" fill="#30abbf"/>
<circle cx="835.6" cy="448.9" r="28.8" fill="#4479ce"/>
<circle cx="545.6" cy="836.8" r="13.9" fill="#6e5cd2"/>
<circle cx="166.7" cy="566.8" r="13.9" fill="#3890c7"/>
<circle cx="836.5" cy="548.1" r="29.3" fill="#546ecf"/>
<circle cx="358.4" cy="809.1" r="29.4" fill="#5d68d0"/>
<circle cx="225.8" cy="701.1" r="14.0" fill="#437ace"/>
<circle cx="426.4" cy="168.1" r="22.5" fill="#2bbbba"/>
<circle cx="589.5" cy="173.7" r="14.5" fill="#2fb0be"/>
<circle cx="708.2" cy="763.4" r="31.0" fill="#6d5dd2"/>
<circle cx="283.5" cy="265.3" r="15.7" fill="#2db6bc"/>
<circle cx="760.3" cy="319.9" r="15.8" fill="#388fc8"/>
<circle cx="521.2" cy="187.1" r="15.9" fill="#2eb2bd"/>
<circle cx="674.0" cy="239.3" r="33.5" fill="#33a1c2"/>
<circle cx="592.7" cy="793.7" r="25.8" fill="#6a5fd2"/>
<circle cx="794.7" cy="427.3" r="16.3" fill="#3e7dcd"/>
<circle cx="210.0" cy="412.0" r="16.3" fill="#32a5c1"/>
<circle cx="291.2" cy="705.5" r="34.7" fill="#4877ce"/>
<circle cx="749.1" cy="617.9" r="27.1" fill="#596bd0"/>
<circle cx="433.3" cy="760.0" r="35.8" fill="#5a6ad0"/>
<circle cx="244.4" cy="570.5" r="27.4" fill="#398bc9"/>
<circle cx="422.2" cy="284.1" r="28.3" fill="#30aac0"/>
<circle cx="724.0" cy="539.5" r="17.7" fill="#4b74ce"/>
<circle cx="632.4" cy="323.9" r="28.5" fill="#3697c5"/>
<circle cx="318.3" cy="407.9" r="28.8" fill="#349ec3"/>
<circle cx="362.7" cy="624.2" r="18.2" fill="#407ccd"/>
<circle cx="534.6" cy="674.0" r="18.3" fill="#536fcf"/>
<circle cx="537.1" cy="463.0" r="39.8" fill="#3a88ca"/>
<circle cx="770" cy="770" r="226" fill="#e8821e"/><circle cx="770" cy="770" r="208" fill="#2c3038"/><g transform="translate(690,642)"><polygon fill="#ffffff" points="46,6 46,122 140,64"/></g><text x="770" y="882" text-anchor="middle" font-family="DejaVu Sans, Helvetica, Arial, sans-serif" font-weight="bold" font-size="66.9" fill="#ffffff">STREMIO</text></svg>

After

Width:  |  Height:  |  Size: 28 KiB