<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml-stylesheet href="https://maik.io/pretty-feed-v3.xsl" type="text/xsl"?>

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Open Source on maik.io</title>
    <link>https://maik.io/tags/open-source/</link>
    <description>Recent content in Open Source on maik.io</description>
    <generator>maik.io</generator>
    <language>de-de</language>
    <lastBuildDate>Wed, 15 Apr 2026 21:31:43 +0200</lastBuildDate>
    <atom:link href="https://maik.io/tags/open-source/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mühsam nachbauen</title>
      <link>https://maik.io/notes/2026-04-15-muehsam-nachbauen/</link>
      <pubDate>Wed, 15 Apr 2026 21:31:43 +0200</pubDate>
      <guid>https://maik.io/notes/2026-04-15-muehsam-nachbauen/</guid>
      <description>&lt;p&gt;Mike Linksvayer schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/europas-digitale-zukunft-entsteht-nicht-in-silos&#34; title=&#34;Digitale Souveränität: Europas digitale Zukunft entsteht nicht in Silos - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Digitale Souveränität: Europas digitale Zukunft entsteht nicht in Silos&lt;/a&gt;« für tagesspiegel.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wenn wir lediglich die Marktführer von gestern mühsam nachbauen, wird uns das morgen keine nennenswerte Souveränität bringen. Europa kann bei der Innovation von morgen absolut führend sein. Aber es erfordert andere strategische Prioritäten. Eine offene, globale Zusammenarbeit ermöglicht es europäischen Talenten und Investoren, sich auf aufstrebende Bereiche zu konzentrieren, in denen das Feld noch völlig offen ist. Wir sollten das nächste Jahrzehnt nicht damit verbringen, eine grundlegende Infrastruktur zu duplizieren, die längst existiert und die durch einen völligen Neuaufbau unter keinem wirtschaftlichen Modell billiger wird. Jeder Euro und jede Entwicklerstunde, die in diese Duplizierung fließen, fehlen beim Aufbau der nächsten echten Innovationsstufe.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Mike Linksvayer schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/europas-digitale-zukunft-entsteht-nicht-in-silos" title="Digitale Souveränität: Europas digitale Zukunft entsteht nicht in Silos - Tagesspiegel Background" target="_blank" >Digitale Souveränität: Europas digitale Zukunft entsteht nicht in Silos</a>« für tagesspiegel.de</p>
<blockquote>
<p>Wenn wir lediglich die Marktführer von gestern mühsam nachbauen, wird uns das morgen keine nennenswerte Souveränität bringen. Europa kann bei der Innovation von morgen absolut führend sein. Aber es erfordert andere strategische Prioritäten. Eine offene, globale Zusammenarbeit ermöglicht es europäischen Talenten und Investoren, sich auf aufstrebende Bereiche zu konzentrieren, in denen das Feld noch völlig offen ist. Wir sollten das nächste Jahrzehnt nicht damit verbringen, eine grundlegende Infrastruktur zu duplizieren, die längst existiert und die durch einen völligen Neuaufbau unter keinem wirtschaftlichen Modell billiger wird. Jeder Euro und jede Entwicklerstunde, die in diese Duplizierung fließen, fehlen beim Aufbau der nächsten echten Innovationsstufe.</p>
</blockquote>
<p>Der gesamte Artikel enthält viele zutreffende Punkte.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Europaweit</title>
      <link>https://maik.io/notes/2026-04-15-europaweit/</link>
      <pubDate>Wed, 15 Apr 2026 20:12:49 +0200</pubDate>
      <guid>https://maik.io/notes/2026-04-15-europaweit/</guid>
      <description>&lt;p&gt;In der Pressemeldung »&lt;a href=&#34;https://bmds.bund.de/aktuelles/pressemitteilungen/detail/bund-stellt-zendis-strategisch-neu-auf&#34; title=&#34;Bund stellt ZenDiS strategisch neu auf&#34; target=&#34;_blank&#34; &gt;Bund stellt ZenDiS strategisch neu auf&lt;/a&gt;« des BMDS schreibt man:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In dem Strategieprozess sollen konkrete Handlungsempfehlungen erarbeitet werden, die eine nachhaltige Skalierung des ZenDiS ermöglichen. Durch die weitere Etablierung des souveränen Arbeitsplatzes openDesk und die Stärkung der Plattform openCode soll das ZenDiS einen wesentlichen Beitrag zur digitalen Souveränität der öffentlichen Verwaltung leisten. Ziel ist es, das Open Source-Ökosystem nicht nur in Deutschland, sondern auch europaweit stärker zu aktivieren.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>In der Pressemeldung »<a href="https://bmds.bund.de/aktuelles/pressemitteilungen/detail/bund-stellt-zendis-strategisch-neu-auf" title="Bund stellt ZenDiS strategisch neu auf" target="_blank" >Bund stellt ZenDiS strategisch neu auf</a>« des BMDS schreibt man:</p>
<blockquote>
<p>In dem Strategieprozess sollen konkrete Handlungsempfehlungen erarbeitet werden, die eine nachhaltige Skalierung des ZenDiS ermöglichen. Durch die weitere Etablierung des souveränen Arbeitsplatzes openDesk und die Stärkung der Plattform openCode soll das ZenDiS einen wesentlichen Beitrag zur digitalen Souveränität der öffentlichen Verwaltung leisten. Ziel ist es, das Open Source-Ökosystem nicht nur in Deutschland, sondern auch europaweit stärker zu aktivieren.</p>
</blockquote>
<p>Das dürfte der letzte Versuch sein, Dienste des ZenDiS breit zu vermarkten. Ab 2027 soll das ZenDiS finanziell eigenständig arbeiten, ich bleiben aber weiterhin skeptisch.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Digitale Souveränität messbar machen</title>
      <link>https://maik.io/notes/2026-03-26-kriterien-fur-digitale-souveranitaet/</link>
      <pubDate>Thu, 26 Mar 2026 07:31:40 +0200</pubDate>
      <guid>https://maik.io/notes/2026-03-26-kriterien-fur-digitale-souveranitaet/</guid>
      <description>&lt;p&gt;Das ZenDiS hat ein Diskussionspapier »&lt;a href=&#34;https://www.zendis.de/media/pages/newsroom/publikationen/konsultationsprozesskriterien/97c259289f-1774439296/zendis_diskussionspapier-kriterien-bewertung-digitaler-souveraenitaet.pdf&#34; target=&#34;_blank&#34; &gt;Kriterien für Digitale Souveränität&lt;/a&gt;« veröffentlicht, das Kriterien zur Bewertung digitaler Souveränität für die öffentliche Verwaltung festlegen soll. Vorgesehen sind ein Kriterienkatalog, ein Souveränitätscheck und eine risikobasierte Methodik. Die Konsultationsphase läuft bis Mai 2026.&lt;/p&gt;
&lt;p&gt;Zwei Details im Papier fallen auf. Als Plattform für den Konsultationsprozess empfiehlt das Papier openCode. Betrieben wird openCode vom ZenDiS selbst. Außerdem soll es für KI eine gesonderte Regelung geben. Warum, erklärt das Papier nicht.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Das ZenDiS hat ein Diskussionspapier »<a href="https://www.zendis.de/media/pages/newsroom/publikationen/konsultationsprozesskriterien/97c259289f-1774439296/zendis_diskussionspapier-kriterien-bewertung-digitaler-souveraenitaet.pdf" target="_blank" >Kriterien für Digitale Souveränität</a>« veröffentlicht, das Kriterien zur Bewertung digitaler Souveränität für die öffentliche Verwaltung festlegen soll. Vorgesehen sind ein Kriterienkatalog, ein Souveränitätscheck und eine risikobasierte Methodik. Die Konsultationsphase läuft bis Mai 2026.</p>
<p>Zwei Details im Papier fallen auf. Als Plattform für den Konsultationsprozess empfiehlt das Papier openCode. Betrieben wird openCode vom ZenDiS selbst. Außerdem soll es für KI eine gesonderte Regelung geben. Warum, erklärt das Papier nicht.</p>
<p>Beides muss kein Problem sein. Erklärungsbedarf besteht trotzdem, denn solche Diskussionspapiere beeinflussen Beschaffungsentscheidungen in Behörden.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Keine vollwertige Alternative</title>
      <link>https://maik.io/notes/2026-03-20-keine-vollwertige-alternative/</link>
      <pubDate>Fri, 20 Mar 2026 07:14:46 +0200</pubDate>
      <guid>https://maik.io/notes/2026-03-20-keine-vollwertige-alternative/</guid>
      <description>&lt;p&gt;Der folgende Absatz zu Delos und openDesk ist bemerkenswert.&lt;/p&gt;
&lt;p&gt;Viola Heeger schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/so-sieht-der-erste-entwurf-der-digitalstrategie-aus&#34; title=&#34;Bundestag: So sieht der erste Entwurf der Digitalstrategie aus - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Bundestag: So sieht der erste Entwurf der Digitalstrategie aus&lt;/a&gt;« für tagesspiegel.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Als Open-Source-Alternative setzt der Bundestag auf Open Desk, eine modulare Arbeitsumgebung des Zentrums für Digitale Souveränität (Zendis), die Anwendungen wie Textverarbeitung, E-Mail und Videokonferenz bündelt. Im Entwurf wird Open Desk als „kurzfristig aktivierbare Fallback-Option“ beschrieben. Also ein Notfallsystem, das im Krisenfall einspringen kann, aber noch keine vollwertige Alternative zur Microsoft-Umgebung darstellt. Im Dokument heißt es, dass Verträge bevorzugt werden, die „auch kurzfristig einen Anbieterwechsel ermöglichen“. Die Abhängigkeit von Microsoft soll beherrschbar bleiben, auch wenn sie vorerst fortbesteht.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Der folgende Absatz zu Delos und openDesk ist bemerkenswert.</p>
<p>Viola Heeger schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/so-sieht-der-erste-entwurf-der-digitalstrategie-aus" title="Bundestag: So sieht der erste Entwurf der Digitalstrategie aus - Tagesspiegel Background" target="_blank" >Bundestag: So sieht der erste Entwurf der Digitalstrategie aus</a>« für tagesspiegel.de</p>
<blockquote>
<p>Als Open-Source-Alternative setzt der Bundestag auf Open Desk, eine modulare Arbeitsumgebung des Zentrums für Digitale Souveränität (Zendis), die Anwendungen wie Textverarbeitung, E-Mail und Videokonferenz bündelt. Im Entwurf wird Open Desk als „kurzfristig aktivierbare Fallback-Option“ beschrieben. Also ein Notfallsystem, das im Krisenfall einspringen kann, aber noch keine vollwertige Alternative zur Microsoft-Umgebung darstellt. Im Dokument heißt es, dass Verträge bevorzugt werden, die „auch kurzfristig einen Anbieterwechsel ermöglichen“. Die Abhängigkeit von Microsoft soll beherrschbar bleiben, auch wenn sie vorerst fortbesteht.</p>
</blockquote>
<p>Sollten diese Aussagen vom Entwurf in die endgültige Fassung übernommen werden, dürfte das das offizielle Ende von openDesk bedeuten. Die Entwicklung war zuletzt ohnehin nahezu zum Stillstand gekommen.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>RIP MkDocs</title>
      <link>https://maik.io/notes/2026-03-17-rip-mkdocs/</link>
      <pubDate>Tue, 17 Mar 2026 21:54:42 +0200</pubDate>
      <guid>https://maik.io/notes/2026-03-17-rip-mkdocs/</guid>
      <description>&lt;p&gt;Mit der Ankündigung »&lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/blog/2026/02/18/mkdocs-2.0/&#34; title=&#34;What MkDocs 2.0 means for your documentation projects - Material for MkDocs&#34; target=&#34;_blank&#34; &gt;What MkDocs 2.0 means for your documentation projects&lt;/a&gt;« steht das bisherige MkDocs-Ökosystem vor einem tiefgreifenden Umbruch. Die neue Version ist ein kompletter Neuanfang. Sie ist weder mit MkDocs 1.x noch mit zentralen Erweiterungen wie Material for MkDocs kompatibel. Das Plugin-System entfällt vollständig. Hinzu kommen ein neues Theming- und Konfigurationsmodell ohne vorgesehenen Migrationspfad sowie ein deutlich eingeschränktes Beitragsmodell.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Mit der Ankündigung »<a href="https://squidfunk.github.io/mkdocs-material/blog/2026/02/18/mkdocs-2.0/" title="What MkDocs 2.0 means for your documentation projects - Material for MkDocs" target="_blank" >What MkDocs 2.0 means for your documentation projects</a>« steht das bisherige MkDocs-Ökosystem vor einem tiefgreifenden Umbruch. Die neue Version ist ein kompletter Neuanfang. Sie ist weder mit MkDocs 1.x noch mit zentralen Erweiterungen wie Material for MkDocs kompatibel. Das Plugin-System entfällt vollständig. Hinzu kommen ein neues Theming- und Konfigurationsmodell ohne vorgesehenen Migrationspfad sowie ein deutlich eingeschränktes Beitragsmodell.</p>
<p>Gleichzeitig gilt MkDocs 1.x als faktisch nicht mehr gewartet. Für viele Teams entsteht dadurch ein Problem. Ihre Dokumentations-Workflows basieren auf Plugins, Themes und gewachsenen Integrationen. Für diese Bausteine gibt es nun keine verlässliche Perspektive.</p>
<p>Statt einer schrittweisen Weiterentwicklung entsteht ein harter Bruch. Bestehende Projekte geraten unter Druck, bisherige Investitionen verlieren an Wert. Auch das Vertrauen in die langfristige Stabilität des Werkzeugs steht infrage.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>image-compressor</title>
      <link>https://maik.io/notes/2026-03-15-image-compressor/</link>
      <pubDate>Sun, 15 Mar 2026 11:07:27 +0200</pubDate>
      <guid>https://maik.io/notes/2026-03-15-image-compressor/</guid>
      <description>&lt;p&gt;Auf GitHub bin ich auf »&lt;a href=&#34;https://img-compress.pages.dev&#34; target=&#34;_blank&#34; &gt;image-compressor&lt;/a&gt;« (&lt;a href=&#34;https://github.com/Sethispr/image-compressor&#34; title=&#34;Sethispr/image-compressor at opensourceprojects.dev&#34; target=&#34;_blank&#34; &gt;source code&lt;/a&gt;) gestoßen. Der Dienst verarbeitet Bilder direkt im Browser und verkleinert sie lokal. Das stärkt die Privatsphäre und spart Serverressourcen.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Auf GitHub bin ich auf »<a href="https://img-compress.pages.dev" target="_blank" >image-compressor</a>« (<a href="https://github.com/Sethispr/image-compressor" title="Sethispr/image-compressor at opensourceprojects.dev" target="_blank" >source code</a>) gestoßen. Der Dienst verarbeitet Bilder direkt im Browser und verkleinert sie lokal. Das stärkt die Privatsphäre und spart Serverressourcen.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Wir pilotieren gerade</title>
      <link>https://maik.io/notes/2026-03-05-wir-pilotieren-gerade/</link>
      <pubDate>Thu, 05 Mar 2026 07:01:19 +0200</pubDate>
      <guid>https://maik.io/notes/2026-03-05-wir-pilotieren-gerade/</guid>
      <description>&lt;p&gt;Elena Metz schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/das-a-und-o-ist-die-mitnahme-der-kommunen&#34; title=&#34;Thüringens CIO Milen Starke: „Das A und O ist die Mitnahme der Kommunen“ - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Thüringens CIO Milen Starke: „Das A und O ist die Mitnahme der Kommunen“&lt;/a&gt;« für tagesspiegel.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nutzen sie Open Desk des Zendis?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wir pilotieren gerade Open Desk in der Justizverwaltung mit ungefähr 900 Mitarbeitenden. Wir hoffen, dass wir dann innerhalb der nächsten Monate eine Entscheidung treffen können, ob Open Desk für uns tatsächlich das ist, was wir in der Landesverwaltung nutzen wollen.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Elena Metz schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/das-a-und-o-ist-die-mitnahme-der-kommunen" title="Thüringens CIO Milen Starke: „Das A und O ist die Mitnahme der Kommunen“ - Tagesspiegel Background" target="_blank" >Thüringens CIO Milen Starke: „Das A und O ist die Mitnahme der Kommunen“</a>« für tagesspiegel.de</p>
<blockquote>
<p><strong>Nutzen sie Open Desk des Zendis?</strong></p>
<p>Wir pilotieren gerade Open Desk in der Justizverwaltung mit ungefähr 900 Mitarbeitenden. Wir hoffen, dass wir dann innerhalb der nächsten Monate eine Entscheidung treffen können, ob Open Desk für uns tatsächlich das ist, was wir in der Landesverwaltung nutzen wollen.</p>
</blockquote>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Rückläufig</title>
      <link>https://maik.io/notes/2026-02-26-ruecklaeufig/</link>
      <pubDate>Thu, 26 Feb 2026 19:30:43 +0100</pubDate>
      <guid>https://maik.io/notes/2026-02-26-ruecklaeufig/</guid>
      <description>&lt;p&gt;Michael Plura schreibt in »&lt;a href=&#34;https://www.heise.de/news/Frischer-Wind-mit-X-GhostBSD-wechselt-von-X-org-auf-XLibre-11191755.html?seite=all&#34; title=&#34;Frischer Wind mit X: GhostBSD wechselt von X.org auf XLibre&#34; target=&#34;_blank&#34; &gt;Frischer Wind mit X: GhostBSD wechselt von X.org auf XLibre&lt;/a&gt;« für heise.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Die Entscheidung, von X.Org zu XLibre zu wechseln, sei also technisch begründet, da die Weiterentwicklung von X.Org dank IBM/Red Hat nicht nur eingefroren, sondern wegen massenhaft gelöschtem Code sogar rückläufig sei. Deswegen richtete der X.Org-Entwickler Enrico Weigelt im Juni 2025 seinen Fork namens XLibre ein, bei dem ausnahmslos alle, die X voranbringen wollen, willkommen sind.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Michael Plura schreibt in »<a href="https://www.heise.de/news/Frischer-Wind-mit-X-GhostBSD-wechselt-von-X-org-auf-XLibre-11191755.html?seite=all" title="Frischer Wind mit X: GhostBSD wechselt von X.org auf XLibre" target="_blank" >Frischer Wind mit X: GhostBSD wechselt von X.org auf XLibre</a>« für heise.de</p>
<blockquote>
<p>Die Entscheidung, von X.Org zu XLibre zu wechseln, sei also technisch begründet, da die Weiterentwicklung von X.Org dank IBM/Red Hat nicht nur eingefroren, sondern wegen massenhaft gelöschtem Code sogar rückläufig sei. Deswegen richtete der X.Org-Entwickler Enrico Weigelt im Juni 2025 seinen Fork namens XLibre ein, bei dem ausnahmslos alle, die X voranbringen wollen, willkommen sind.</p>
</blockquote>
<blockquote>
<p>IBM und Red Hat hinterlassen zunehmend den Eindruck, mit ihrer Produktpolitik monopolistische Standards in dem Feld zementieren zu wollen.</p>
</blockquote>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Sicherheitsvorfall in XZ-Utils</title>
      <link>https://maik.io/notes/2026-02-26-sicherheitsvorfall-in-xz-utils/</link>
      <pubDate>Thu, 26 Feb 2026 19:09:18 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-26-sicherheitsvorfall-in-xz-utils/</guid>
      <description>&lt;p&gt;Das Video »&lt;a href=&#34;https://www.youtube.com/watch?v=aoag03mSuXQ&#34; title=&#34;Das Internet stand nur Wochen vor einer Katastrophe und niemand wusste davon - YouTube&#34; target=&#34;_blank&#34; &gt;Das Internet stand nur Wochen vor einer Katastrophe und niemand wusste davon&lt;/a&gt;« von &lt;a href=&#34;https://www.youtube.com/@veritasium&#34; target=&#34;_blank&#34; &gt;Veritasium&lt;/a&gt; auf YouTube liefert eine fundierte und zugleich verständliche Einordnung des &lt;a href=&#34;https://de.wikipedia.org/wiki/XZ_Utils_Backdoor&#34; target=&#34;_blank&#34; &gt;Sicherheitsvorfalls rund um XZ-Utils&lt;/a&gt;. Es zeigt, wie komplex der Angriff aufgebaut war, und erklärt zugleich die Grundlagen von Verschlüsselung und Datenkomprimierung. Die Inhalte werden klar und niedrigschwellig vermittelt.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Das Video »<a href="https://www.youtube.com/watch?v=aoag03mSuXQ" title="Das Internet stand nur Wochen vor einer Katastrophe und niemand wusste davon - YouTube" target="_blank" >Das Internet stand nur Wochen vor einer Katastrophe und niemand wusste davon</a>« von <a href="https://www.youtube.com/@veritasium" target="_blank" >Veritasium</a> auf YouTube liefert eine fundierte und zugleich verständliche Einordnung des <a href="https://de.wikipedia.org/wiki/XZ_Utils_Backdoor" target="_blank" >Sicherheitsvorfalls rund um XZ-Utils</a>. Es zeigt, wie komplex der Angriff aufgebaut war, und erklärt zugleich die Grundlagen von Verschlüsselung und Datenkomprimierung. Die Inhalte werden klar und niedrigschwellig vermittelt.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>MapToPoster</title>
      <link>https://maik.io/notes/2026-02-17-maptoposter/</link>
      <pubDate>Tue, 17 Feb 2026 18:36:28 +0100</pubDate>
      <guid>https://maik.io/notes/2026-02-17-maptoposter/</guid>
      <description>&lt;p&gt;Das Webtool »&lt;a href=&#34;https://poster.54gradsoftware.de/&#34; title=&#34;MapToPoster&#34; target=&#34;_blank&#34; &gt;MapToPoster&lt;/a&gt;« ermöglicht es, im Browser Poster oder Postkarten basierend auf OpenStreetMap-Daten zu generieren. Alexander Reichel von 54gradsoftware hat das Tool am Wochenende entwickelt.&lt;/p&gt;
&lt;p&gt;Je nach Serverauslastung kann die Erstellung etwas dauern. Das Team plant, den Server für die nächsten Monate zu betreiben.&lt;/p&gt;
&lt;p&gt;Das Tool basiert auf dem GitHub-Projekt maptoposter von originalankur. Es bietet mehr Einstellmöglichkeiten und eine Weboberfläche.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Das Webtool »<a href="https://poster.54gradsoftware.de/" title="MapToPoster" target="_blank" >MapToPoster</a>« ermöglicht es, im Browser Poster oder Postkarten basierend auf OpenStreetMap-Daten zu generieren. Alexander Reichel von 54gradsoftware hat das Tool am Wochenende entwickelt.</p>
<p>Je nach Serverauslastung kann die Erstellung etwas dauern. Das Team plant, den Server für die nächsten Monate zu betreiben.</p>
<p>Das Tool basiert auf dem GitHub-Projekt maptoposter von originalankur. Es bietet mehr Einstellmöglichkeiten und eine Weboberfläche.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>openDesk und die Realität digitaler Souveränität</title>
      <link>https://maik.io/notes/2026-02-16-opendesk-und-die-realitaet-digitaler-souveraenitaet/</link>
      <pubDate>Mon, 16 Feb 2026 22:01:53 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-16-opendesk-und-die-realitaet-digitaler-souveraenitaet/</guid>
      <description>&lt;p&gt;Seit dem politischen Kurswechsel im Weißen Haus werden die Forderungen nach digitaler Souveränität lauter. Unabhängig davon, wer dort regiert, ist es sinnvoll, dass sich ein Land technisch unabhängig machen kann.&lt;/p&gt;
&lt;p&gt;In der Debatte fällt häufig der Name »&lt;a href=&#34;https://www.opendesk.eu/de&#34; title=&#34;Die Office-Suite für die Öffentliche Verwaltung | openDesk&#34; target=&#34;_blank&#34; &gt;openDesk&lt;/a&gt;«. Die Suite gilt vielen als Allzweckwaffe gegen Microsoft. Wer die Google Suite kennt, kann sich openDesk ähnlich vorstellen, allerdings mit weniger Funktionen. Das ist kein Mangel, sondern Folge des Konzepts. openDesk wurde für die Anforderungen deutscher Verwaltungen entwickelt, nicht für die private Nutzung.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Seit dem politischen Kurswechsel im Weißen Haus werden die Forderungen nach digitaler Souveränität lauter. Unabhängig davon, wer dort regiert, ist es sinnvoll, dass sich ein Land technisch unabhängig machen kann.</p>
<p>In der Debatte fällt häufig der Name »<a href="https://www.opendesk.eu/de" title="Die Office-Suite für die Öffentliche Verwaltung | openDesk" target="_blank" >openDesk</a>«. Die Suite gilt vielen als Allzweckwaffe gegen Microsoft. Wer die Google Suite kennt, kann sich openDesk ähnlich vorstellen, allerdings mit weniger Funktionen. Das ist kein Mangel, sondern Folge des Konzepts. openDesk wurde für die Anforderungen deutscher Verwaltungen entwickelt, nicht für die private Nutzung.</p>
<p>openDesk geht auf die <a href="https://www.youtube.com/watch?v=bpoGLz76-hY" target="_blank" >dPhoenixSuite</a> von Dataport zurück. Diese Suite war nicht vollständig Open Source. Von einer vierstelligen Zahl an Softwareartefakten standen drei nicht unter einer Open-Source-Lizenz. Es handelte sich um Komponenten derselben Hersteller, die heute auch in openDesk vertreten sind. Dafür gab es deutliche <a href="https://www.linux-magazin.de/ausgaben/2023/07/dataport-phoenix/" target="_blank" >Kritik</a>. Trotz <a href="https://www.ndr.de/nachrichten/schleswig-holstein/it-dienstleister-dataport-macht-90-millionen-euro-verlust,dataport-100.html" target="_blank" >hoher Kosten</a> brachte Dataport die dPhoenixSuite auf <a href="https://www.kommune21.de/k21-meldungen/dphoenixsuite-3-0-veroeffentlicht/" target="_blank" >drei</a> Hauptversionen. Zugunsten des openDesk wurde die Entwicklung <a href="https://www.dataport.de/nachricht/abschluss-des-programms-phoenix-dataport-uebergibt-digitalen-arbeitsplatz-an-zendis/" target="_blank" >eingestellt</a>.</p>
<p>Seit <a href="https://download.fsfe.org/policy/Dataport_BMI_answers.pdf" target="_blank" >Anfang 2024</a> liegt die Weiterentwicklung von openDesk beim Zentrum für Digitale Souveränität der Öffentlichen Verwaltung, kurz Zendis. Bislang wurde <a href="https://opencode.de/de/software/open-desk-1317" target="_blank" >Version 1.12.0</a> veröffentlicht. Für <a href="https://web.archive.org/web/20250519175555/https://www.opendesk.eu/de/roadmap" target="_blank" >Oktober 2025</a> waren weitergehende Pläne angekündigt, darunter Version 2.1, eine mobile Anwendung und Funktionen mit künstlicher Intelligenz.</p>
<p>Mit <a href="https://www.zendis.de/newsroom/presse/zendis-erteilt-zuschlag-fuer-rahmenvertrag-fuer-opendesk-enterprise-edition-und-saas-angebot" target="_blank" >StackIT und B1 Systems</a> stehen erfahrene Partner an der Seite des Projekts. Es fehlt nicht an fachlicher Kompetenz. Entscheidend sind politischer Wille und eine verlässliche Finanzierung. Diese Finanzierung kann man dem ZenDiS nur weiterhin wünschen.</p>
<p>Wenn das Digitalministerium eine souveräne Lösung nicht ausreichend finanziert, liegt der Gedanke nahe, dass eine Verwaltungsgemeinschaft die Weiterentwicklung übernimmt. Für ein Open-Source-Projekt wäre das naheliegend. In der Praxis tun sich Verwaltungen damit schwer. Sie sind es gewohnt, Leistungen zu beschaffen. Eigene Entwicklungen entstehen oft isoliert statt in Kooperation. Open Source wird eingekauft, eine substanzielle Beteiligung bleibt selten.</p>
<p>Das mag negativ klingen, ist jedoch so nicht gemeint. Es reicht nicht, nach openDesk zu rufen und damit digitale Souveränität zu erwarten. Das Problem ist komplex. Verantwortung tragen politische Mandatsträger auf allen Ebenen, vom Bürgermeister bis zum Bundeskanzler. Souveränität lässt sich nicht einkaufen. Sie entsteht durch eigenes Handeln.</p>
<p>Über Ländergrenzen hinweg betrachtet gilt <a href="https://github.com/suitenumerique" target="_blank" >La Suite numérique</a> als französische Version von openDesk. Der Funktionsumfang ist kleiner, dafür wird die Plattform sehr aktiv weiterentwickelt.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Ebenfalls kostenfrei</title>
      <link>https://maik.io/notes/2026-02-16-ebenfalls-kostenfrei/</link>
      <pubDate>Mon, 16 Feb 2026 07:25:58 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-16-ebenfalls-kostenfrei/</guid>
      <description>&lt;p&gt;tagesspiegel.de schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/gi-kritisiert-microsoft-bevorzugung-an-hochschulen&#34; title=&#34;Brief an Digitalminister: GI kritisiert Microsoft-Bevorzugung an Hochschulen - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Brief an Digitalminister: GI kritisiert Microsoft-Bevorzugung an Hochschulen&lt;/a&gt;«&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In der Diskussion um digitale Souveränität und Abhängigkeit von US-Herstellern rücken nun auch die Hochschulen in den Blick. Während Microsoft 365 für Studierende kostenlos angeboten werde, werde für die deutsche Open-Source-Alternative Open Desk 45 Euro netto pro Nutzer und Jahr berechnet, kritisieren drei Sprecher der Gesellschaft für Informatik (GI) in einem Offenen Brief an Bundesdigitalminister Karsten Wildberger (CDU).&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>tagesspiegel.de schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/gi-kritisiert-microsoft-bevorzugung-an-hochschulen" title="Brief an Digitalminister: GI kritisiert Microsoft-Bevorzugung an Hochschulen - Tagesspiegel Background" target="_blank" >Brief an Digitalminister: GI kritisiert Microsoft-Bevorzugung an Hochschulen</a>«</p>
<blockquote>
<p>In der Diskussion um digitale Souveränität und Abhängigkeit von US-Herstellern rücken nun auch die Hochschulen in den Blick. Während Microsoft 365 für Studierende kostenlos angeboten werde, werde für die deutsche Open-Source-Alternative Open Desk 45 Euro netto pro Nutzer und Jahr berechnet, kritisieren drei Sprecher der Gesellschaft für Informatik (GI) in einem Offenen Brief an Bundesdigitalminister Karsten Wildberger (CDU).</p>
<p>„Die digitale Ausbildung einer ganzen Generation wird heute in einem von US-Technologien geprägten Ökosystem geprägt, das für Deutschlands digitale Souveränität zu einer strategischen Sackgasse wird“, heißt es in dem auf Donnerstag datierten Schreiben, das Tagesspiegel Background vorliegt. Wildberger müsse sich dafür einsetzen, Open Desk ebenfalls kostenfrei für alle Studierenden verfügbar zu machen.</p>
</blockquote>
<p>Ich lache mich schlapp. Wenn Wildberger das ernsthaft gewollt hätte, hätte er das ZenDiS nicht derart <a href="https://osb-alliance.de/pressemitteilungen/100-tage-bundesregierung-wo-bleibt-die-strategische-ausrichtung-auf-open-source-software" target="_blank" >ausgetrocknet</a>. Selbst wenn Wildberger sich darauf einließe, ist fraglich, ob die Hochschulen das flächendeckend einsetzen würden. Was hält sie derzeit davon ab, auf LibreOffice umzusteigen? Was hindert sie daran, ein OX aufzusetzen? Nichts. Es fehlt allein am Willen.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Wird dafür Vorwände finden</title>
      <link>https://maik.io/notes/2026-02-12-wird-dafuer-vorwaende-finden/</link>
      <pubDate>Thu, 12 Feb 2026 18:20:36 +0100</pubDate>
      <guid>https://maik.io/notes/2026-02-12-wird-dafuer-vorwaende-finden/</guid>
      <description>&lt;p&gt;Daniel Weber schreibt in »&lt;a href=&#34;https://u-labs.de/portal/oss-strategie-sh-fehler/&#34; title=&#34;Open Source statt Microsoft: Hier irrt sich Schleswig-Holstein! | U-Labs&#34; target=&#34;_blank&#34; &gt;Open Source statt Microsoft: Hier irrt sich Schleswig-Holstein!&lt;/a&gt;« für u-labs.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wer will, der kann mit FOSS arbeiten. Wer hingegen in Wahrheit Konzernen Millionen in den Rachen werfen möchte, wird dafür Vorwände finden.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ein lesenswerter Artikel, der anhand aktueller Fälle und der Open-Source-Strategie von Schleswig-Holstein zeigt, wo die Lage komplexer ist, als es zunächst wirkt. Der Ton ist stellenweise sehr zugespitzt. Inhaltlich sind die aufgeführten Punkte jedoch zutreffend.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Daniel Weber schreibt in »<a href="https://u-labs.de/portal/oss-strategie-sh-fehler/" title="Open Source statt Microsoft: Hier irrt sich Schleswig-Holstein! | U-Labs" target="_blank" >Open Source statt Microsoft: Hier irrt sich Schleswig-Holstein!</a>« für u-labs.de</p>
<blockquote>
<p>Wer will, der kann mit FOSS arbeiten. Wer hingegen in Wahrheit Konzernen Millionen in den Rachen werfen möchte, wird dafür Vorwände finden.</p>
</blockquote>
<p>Ein lesenswerter Artikel, der anhand aktueller Fälle und der Open-Source-Strategie von Schleswig-Holstein zeigt, wo die Lage komplexer ist, als es zunächst wirkt. Der Ton ist stellenweise sehr zugespitzt. Inhaltlich sind die aufgeführten Punkte jedoch zutreffend.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Digitale Souveränität jenseits der Mythen</title>
      <link>https://maik.io/notes/2026-02-10-digitale-souveraenitaet-jenseits-der-mythen/</link>
      <pubDate>Tue, 10 Feb 2026 20:00:00 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-10-digitale-souveraenitaet-jenseits-der-mythen/</guid>
      <description>In diesem Beitrag räume ich mit einigen Mythen auf, die mir seit Monaten immer wieder begegnen und die aus meiner Sicht grundlegend falsch sind.</description>
      <content:encoded>
      <![CDATA[


<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="ui-monospace, SFMono-Regular, 'SF Mono',Menlo, Monaco, Consolas, monospace;"
      
        viewBox="0 0 1104 793"
      >
      <g transform='translate(8,16)'>
<circle cx='272' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='336' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='352' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='368' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='384' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='16' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='416' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='432' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='448' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='464' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='480' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='496' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='512' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='736' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='528' cy='752' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='544' cy='736' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='560' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='576' cy='736' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='592' cy='736' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='608' cy='736' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='624' cy='736' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='640' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='480' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='656' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='664' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='464' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='496' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='512' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='528' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='672' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='680' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='544' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='688' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='448' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='672' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='704' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='712' cy='720' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='432' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='560' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='656' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='688' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='720' cy='704' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='576' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='736' cy='640' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='416' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='592' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='752' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='608' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='768' cy='624' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='784' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='800' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='800' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='800' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='800' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='800' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='816' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='816' cy='368' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='816' cy='384' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='816' cy='400' r='6' stroke='currentColor' fill='currentColor'></circle>
</g>

      

      <style>
        svg circle[fill="#fff"] {
          fill: none;
          stroke: var(--primary);
        }
        svg circle[fill="currentColor"] {
          fill: var(--primary);
          stroke: var(--primary);
        }
      </style>
    </svg>
  
</div>
<p>Ich befasse mich seit mehreren Jahren intensiv mit digitaler Souveränität. Das begann lange bevor der Begriff zum Modewort wurde und dabei an Kontur verlor.</p>
<h2 id="mythos-1-digitale-souveränität-nur-mit-open-source">Mythos 1: Digitale Souveränität nur mit Open Source?</h2>
<p>Open Source wird häufig mit digitaler Souveränität gleichgesetzt. Diese Gleichsetzung greift zu kurz. Open Source kann den Vendor Lock-in verringern, ihn aber nicht vollständig vermeiden.
Der öffentliche Diskurs richtet sich oft auf große und vergleichsweise leicht umsetzbare Migrationen. Dazu zählen Groupware wie E-Mail, Kalender und Kontakte, Kommunikationsplattformen oder Office-Lösungen. Solche Wechsel lassen sich politisch gut vermitteln, auch weil es inzwischen ausreichend nutzbare Alternativen gibt. Die zentrale Herausforderung liegt dabei weniger in der Technik als in den finanziellen Rahmenbedingungen.</p>
<p>Deutlich komplizierter ist die Lage bei hochspezialisierten Fachanwendungen. In diesen Bereichen gibt es häufig nur wenige oder gar keine Alternativen. Ein Grund ist, dass Open-Source-Software oft aus privaten Initiativen hervorgeht. Sobald spezielle Hardware erforderlich ist oder das Problem nur einen sehr kleinen Nutzerkreis betrifft, setzen sich meist proprietäre Lösungen durch.</p>
<p>Das führt dazu, dass kleine und spezialisierte Anwendungen nur von wenigen Anbietern entwickelt und betrieben werden. Hinzu kommt spezifisches Domänenwissen über Technik, Prozesse oder auch veraltete Programmiersprachen und Systeme. Unter diesen Bedingungen spielt es praktisch keine Rolle, ob der Quellcode offen oder geschlossen ist. Realistisch können nur wenige Anbieter solche Produkte betreiben und weiterentwickeln.</p>
<p>Häufig wird an dieser Stelle darauf verwiesen, dass Open Source grundsätzlich den Eigenbetrieb von Software ermögliche. Formal ist das richtig. In der Praxis bleibt es jedoch meist theoretisch. Das notwendige Spezialwissen ist selten und entsprechend teuer. Der Markt ist klein, wodurch faktisch erneut ein Vendor Lock-in entsteht, unabhängig vom Lizenzmodell.</p>
<p>Open Source kann Abhängigkeiten reduzieren. Einen vollständigen Schutz vor Vendor Lock-in bietet es jedoch nicht.</p>
<h2 id="mythos-2-souveränität-mit-proprietärer-software-ist-unmöglich-erreichbar">Mythos 2: Souveränität mit proprietärer Software ist unmöglich erreichbar</h2>
<p>Häufig heißt es, digitale Souveränität lasse sich mit proprietärer Software grundsätzlich nicht erreichen, weil stets eine Abhängigkeit vom Hersteller bestehe. Dass solche Abhängigkeiten auch bei Open-Source-Software auftreten können, ist bereits beschrieben worden.
Hilfreich ist es, den sperrigen Begriff der digitalen Souveränität durch „Selbstbestimmtheit“ zu ersetzen. Dann wird deutlicher, worum es geht und dass dieses Ziel unter bestimmten Voraussetzungen auch mit nicht freier Software erreichbar sein kann.</p>
<p>Digitale Souveränität bedeutet nicht zwangsläufig freie Software. Im Kern geht es um die Vermeidung von Lock-in-Effekten, um Möglichkeiten zur Mitgestaltung und um Transparenz.</p>
<p>Denkbar ist etwa ein Produkt, das auf offenen Standards basiert, sodass Daten jederzeit importiert und exportiert werden können. Offene Schnittstellen erlauben die freie Nutzung der eigenen Daten. Der Hersteller ist bereit, gegen ein angemessenes Entgelt individuelle Anforderungen umzusetzen, und gewährt Einblick in den Quellcode, ohne ihn unter eine freie Lizenz zu stellen. Juristisch wie kaufmännisch ist ein solches Modell möglich.</p>
<p>Warum ist es dennoch selten? Unternehmen müssen nicht nur kurzfristig wirtschaftlich arbeiten, sondern auch langfristige Planungssicherheit gewährleisten. Insbesondere börsennotierte Firmen sind verpflichtet, verlässliche Perspektiven für Investoren zu bieten. Daraus entstehen Geschäftsmodelle, die auf wiederkehrende Einnahmen ausgerichtet sind.</p>
<p>Unabhängig von Unternehmensphilosophie oder guten Absichten sind Hersteller darauf angewiesen, Kunden zu binden. Nur so lassen sich Weiterentwicklung, Personal und Betrieb finanzieren. Die beschriebenen offenen Modelle stellen für viele Anbieter daher ein erhebliches wirtschaftliches Risiko dar.</p>
<p>Realistisch bleiben meist nur Geschäftsmodelle, wie sie teilweise im Open-Source-Umfeld zu finden sind, etwa über Dienstleistungen, Support oder individuelle Anpassungen.</p>
<p>Zusammengefasst gilt: In der Theorie können auch proprietäre Produkte digitale Souveränität fördern. In der Praxis scheitert dies am Geschäftsmodell.</p>
<h2 id="mythos-3-ist-open-source-automatisch-und-immer-sicherer">Mythos 3: Ist Open Source automatisch und immer sicherer?</h2>
<p>Ein weiterer Mythos besagt, Open Source sei grundsätzlich sicherer als proprietäre Software. Auch diese Annahme greift zu kurz.
Zwar ist offen einsehbarer Code grundsätzlich überprüfbar. Daraus ergibt sich jedoch nicht automatisch ein höheres Sicherheitsniveau. Sicherheit entsteht erst dann, wenn der Code tatsächlich geprüft wird. Ein Blick auf Plattformen wie GitHub zeigt, dass es Millionen von Projekten gibt, die nie auditiert wurden.</p>
<p>Die Vorstellung, für jede Open-Source-Lösung stünden ausreichend qualifizierte Prüfer bereit, ist unrealistisch. Regelmäßige Sicherheitsprüfungen müssen organisiert oder eingekauft werden. Beides ist aufwendig und teuer.</p>
<p>Bei proprietärer Software übernimmt der Hersteller diese Verantwortung gegen Bezahlung, auch bei Spezial- oder Nischenprodukten. Das setzt Vertrauen voraus, das nur eingeschränkt überprüfbar ist. Externe Audits unterscheiden sich darin jedoch kaum.</p>
<p>Ausschlaggebend ist daher nicht die Lizenzform. Entscheidend ist, ob eine Software genug Verbreitung, Aufmerksamkeit und Ressourcen erhält, um dauerhaft geprüft und gepflegt zu werden.</p>
<h2 id="mythos-4-digitale-souveränität-lässt-sich-durch-beschaffung-herstellen">Mythos 4: Digitale Souveränität lässt sich durch Beschaffung herstellen</h2>
<p>Wie bereits beschrieben wird digitale Souveränität oft mit Selbstbestimmtheit im Digitalen gleichgesetzt. Schon daraus ergibt sich, dass reine Beschaffung nicht ausreicht.</p>
<p>Souverän handeln kann nur, wer über Wissen verfügt. Ohne Klarheit über eingesetzte Dienste, Lock-in-Effekte, Architektur und Sicherheitsfragen ist selbstbestimmtes Handeln nicht möglich. Entscheidungen werden dann von äußeren Zwängen bestimmt.</p>
<p>In diesem Zusammenhang stellen sich grundlegende Fragen:</p>
<ul>
<li>Wie funktioniert die eingesetzte Technik?</li>
<li>Welche Daten liegen wo?</li>
<li>Ist die Lieferkette langfristig abgesichert?</li>
<li>Welche Abhängigkeiten bestehen?</li>
<li>Wie aufwendig ist ein Technologiewechsel?</li>
<li>Kann der Anbieter kurzfristig gewechselt werden, ohne die Organisation wirtschaftlich zu gefährden?</li>
<li>Ist das notwendige Know-how vorhanden?</li>
<li>Wie angreifbar ist die eingesetzte Software?</li>
</ul>
<p>Nur Organisationen, die diese Fragen für sich beantworten können, sind in der Lage, eigenständig Entscheidungen zu treffen. Das kann auch bedeuten, sich bewusst für proprietäre Systeme zu entscheiden, mit einem klaren Verständnis der Folgen. Ebenso kann es bedeuten, sich gezielt dagegen zu entscheiden.</p>
<h2 id="mythos-5-vollständige-souveränität-scheitert-auf-chip-ebene">Mythos 5: Vollständige Souveränität scheitert auf Chip-Ebene</h2>
<p>Häufig wird behauptet, vollständige Souveränität sei unmöglich, weil die Chipproduktion nicht im eigenen Land stattfindet. Das ist nicht falsch, greift aber zu kurz. Die Herstellung von Computerchips ist global organisiert und so groß, dass einzelne Akteure kaum vollständig ausgeschlossen oder dauerhaft vom Markt gedrängt werden können. Das zeigte sich in den vergangenen Monaten, als die USA versuchten, China von der Lieferung von KI-Chips abzuschneiden. Über Zwischenhändler gelangten die benötigten Komponenten dennoch ans Ziel. Und wo das nicht geschieht, entsteht in der Regel ein Markt, der die Lücke füllt.
Deutlich schwieriger ist es, souveräne Alternativen dort aufzubauen, wo der Markt keine Lösungen hervorbringt. Das betrifft Bereiche mit geringem Bedarf. Der Fachkräftemangel verschärft diese Situation zusätzlich.</p>
<p>Vollständige digitale Souveränität ist ohnehin nicht erreichbar. Die Computerindustrie befindet sich in ständigem technologischen und wirtschaftlichen Wandel. Dadurch verändert sich auch die Ausgangslage fortlaufend. Ähnlich wie in der IT-Sicherheit geht es weniger um einen festen Endzustand als um kontinuierliche Arbeit, um einen selbst definierten Stand zu halten.</p>
<h2 id="aktuelle-lage-und-ein-ausblick">Aktuelle Lage und ein Ausblick</h2>
<p>In Deutschland und Europa ist ein Teil der digitalen Souveränität verloren gegangen. Kompetenzen wurden nicht mehr aufgebaut oder gepflegt. Stattdessen kauften öffentliche und private Akteure Dienstleistungen und Produkte großer Tech-Anbieter ein, mit dem Hinweis auf angebliche wirtschaftliche Vorteile. Diese Annahme hat sich als falsch erwiesen. Die Abhängigkeit ist teuer geworden, zugleich ging Know-how verloren oder konnte mit der technischen Entwicklung nicht Schritt halten. Der Rückstand ist real und aufholbar. Alles, was es dafür braucht, ist politischer und privatwirtschaftlicher Wille.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>481,4 Millionen Euro</title>
      <link>https://maik.io/notes/2026-02-09-481-4-millionen-euro/</link>
      <pubDate>Mon, 09 Feb 2026 18:11:18 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-09-481-4-millionen-euro/</guid>
      <description>&lt;p&gt;Svenja Bergt schreibt in »&lt;a href=&#34;https://taz.de/Digitale-Abhaengigkeit-von-den-USA/!6152601/&#34; title=&#34;Digitale Abhängigkeit von den USA: Bund zahlt mehr für Microsoft-Lizenzen | taz.de&#34; target=&#34;_blank&#34; &gt;Digitale Abhängigkeit von den USA: Bund zahlt mehr für Microsoft-Lizenzen&lt;/a&gt;« für taz.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Trotz der Pläne, Deutschland digital unabhängiger von den USA zu machen, sind die Ausgaben des Bundes für Lizenzen des US-Softwarekonzerns Microsoft im vergangenen Jahr erneut gestiegen. 481,4 Millionen Euro zahlten die Bundesverwaltung sowie Zuwendungsempfänger des Bundes 2025 an Microsoft, so die Antwort auf eine schriftliche Anfrage der Grünen-Bundestagsabgeordneten Rebecca Lenhard, über die zuerst die Süddeutsche Zeitung Dossier berichtete.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Svenja Bergt schreibt in »<a href="https://taz.de/Digitale-Abhaengigkeit-von-den-USA/!6152601/" title="Digitale Abhängigkeit von den USA: Bund zahlt mehr für Microsoft-Lizenzen | taz.de" target="_blank" >Digitale Abhängigkeit von den USA: Bund zahlt mehr für Microsoft-Lizenzen</a>« für taz.de</p>
<blockquote>
<p>Trotz der Pläne, Deutschland digital unabhängiger von den USA zu machen, sind die Ausgaben des Bundes für Lizenzen des US-Softwarekonzerns Microsoft im vergangenen Jahr erneut gestiegen. 481,4 Millionen Euro zahlten die Bundesverwaltung sowie Zuwendungsempfänger des Bundes 2025 an Microsoft, so die Antwort auf eine schriftliche Anfrage der Grünen-Bundestagsabgeordneten Rebecca Lenhard, über die zuerst die Süddeutsche Zeitung Dossier berichtete.</p>
</blockquote>
<p>Die Ausgaben für Microsoft-Lizenzen sind auch 2025 erneut gestiegen, wie in jedem Jahr. Die Behauptung, das sei notwendig und es gebe keine Alternativen, hält einer nüchternen Betrachtung nicht stand. Entscheidend fehlt es am politischen Willen.</p>
<p>Zwar lassen sich Ziele in Koalitionsvereinbarungen und Strategiepapiere schreiben. Werden sie jedoch nicht umgesetzt, bleiben sie folgenlos. Dann sind es am Ende nur Texte auf Papier oder digitale Ablage, wenn sie als PDF enden.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Proprietäre Systeme würden immer eine strukturelle Abhängigkeit erzeugen</title>
      <link>https://maik.io/notes/2026-02-09-proprietaere-systeme-wuerden-immer-eine-strukturelle-abhaengigkeit-erzeugen/</link>
      <pubDate>Mon, 09 Feb 2026 12:01:15 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-09-proprietaere-systeme-wuerden-immer-eine-strukturelle-abhaengigkeit-erzeugen/</guid>
      <description>&lt;p&gt;tagesspiegel.de schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/minister-schroedter-kritisiert-geplante-neudefinition-der-bundesregierung&#34; title=&#34;Digitale Souveränität: Minister Schrödter kritisiert geplante Neudefinition der Bundesregierung - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Digitale Souveränität: Minister Schrödter kritisiert geplante Neudefinition der Bundesregierung&lt;/a&gt;«&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wirkliche Souveränität ist daher nach Ansicht Schrödters nur mit Open Source erreichbar. „Digitale Souveränität ist schlicht keine Governancefrage, sondern eine der technischen Eigentums- und Kontrollarchitektur“, schreibt Schrödter. „Die Fähigkeiten und Möglichkeiten, die die Sicherung digitaler Souveränität erfordert, lassen sich nicht vertraglich herstellen und auch nicht regulatorisch erzwingen, solange der Quellcode und die Verfügungsgewalt über die zentrale technologische Basis außerhalb staatlicher Kontrolle liegen.“ Proprietäre Systeme würden immer eine strukturelle Abhängigkeit erzeugen, Open Source kehre dieses Verhältnis um.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>tagesspiegel.de schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/minister-schroedter-kritisiert-geplante-neudefinition-der-bundesregierung" title="Digitale Souveränität: Minister Schrödter kritisiert geplante Neudefinition der Bundesregierung - Tagesspiegel Background" target="_blank" >Digitale Souveränität: Minister Schrödter kritisiert geplante Neudefinition der Bundesregierung</a>«</p>
<blockquote>
<p>Wirkliche Souveränität ist daher nach Ansicht Schrödters nur mit Open Source erreichbar. „Digitale Souveränität ist schlicht keine Governancefrage, sondern eine der technischen Eigentums- und Kontrollarchitektur“, schreibt Schrödter. „Die Fähigkeiten und Möglichkeiten, die die Sicherung digitaler Souveränität erfordert, lassen sich nicht vertraglich herstellen und auch nicht regulatorisch erzwingen, solange der Quellcode und die Verfügungsgewalt über die zentrale technologische Basis außerhalb staatlicher Kontrolle liegen.“ Proprietäre Systeme würden immer eine strukturelle Abhängigkeit erzeugen, Open Source kehre dieses Verhältnis um.</p>
</blockquote>
<p>Ich halte es für sinnvoll, Dirk Schrödter in Debatten über digitale Souveränität und Open Source in der Verwaltung stärker einzubeziehen. Schleswig-Holstein ist bislang das einzige Bundesland, das diesen Weg konsequent verfolgt. Andere Länder beobachten die Entwicklung seit Jahren oder entscheiden sich bewusst gegen einen solchen Kurs.</p>
<p>Gleichzeitig ist die Gleichsetzung von Open Source und digitaler Souveränität nicht zutreffend und die Aussagen &ldquo;Proprietäre Systeme würden immer eine strukturelle Abhängigkeit erzeugen&rdquo; ist nicht korrekt. Beides ist nicht identisch und schließt sich auch nicht gegenseitig ein. Diese Unterscheidung lässt sich nicht in einem kurzen Statement zu einer Pressemeldung erläutern. Dafür braucht es einen eigenen Text. To be continued.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Fällt der gesamtwirtschaftliche Nutzen</title>
      <link>https://maik.io/notes/2026-02-08-faellt-der-gesamtwirtschaftliche-nutzen/</link>
      <pubDate>Sun, 08 Feb 2026 16:56:37 +0100</pubDate>
      <guid>https://maik.io/notes/2026-02-08-faellt-der-gesamtwirtschaftliche-nutzen/</guid>
      <description>&lt;p&gt;In der Studie »&lt;a href=&#34;https://arxiv.org/pdf/2601.15494&#34; title=&#34;Vibe Coding Kills Open Source&#34; target=&#34;_blank&#34; &gt;Vibe Coding Kills Open Source&lt;/a&gt;« untersuchen Miklós Koren, Gábor Békés, Julian Hinz und Aaron Lohmann die möglichen Auswirkungen von KI-gestütztem Programmieren auf Open-Source-Software. KI senkt die Kosten, bestehende Bibliotheken zu nutzen und neue Anwendungen darauf aufzubauen. Gleichzeitig nimmt aber die direkte Beteiligung ab. Weniger Entwickler lesen Dokumentationen, melden Fehler oder beteiligen sich an öffentlichen Diskussionen.
Diese Formen der Beteiligung stellen heute eine wesentliche Quelle für Sichtbarkeit, Nachfrage und Einkommen von Maintainerinnen und Maintainern dar. In ihrem ökonomischen Modell zeigen die Autoren, dass bei wachsendem Vibe Coding unter den heutigen Finanzierungsmechanismen weniger neue Open-Source-Projekte entstehen und bestehende seltener weiterentwickelt werden. Die verfügbare Open-Source-Software nimmt ab, ihre durchschnittliche Qualität sinkt. Obwohl die Produktivität gestiegen ist, ist der gesamtwirtschaftliche Nutzen dadurch geringer. Die Studie kommt zu dem Schluss, dass Open Source in seiner heutigen Form nur dann bestehen kann, wenn sich die Vergütung und Anreizstrukturen für Maintainer grundlegend ändern.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>In der Studie »<a href="https://arxiv.org/pdf/2601.15494" title="Vibe Coding Kills Open Source" target="_blank" >Vibe Coding Kills Open Source</a>« untersuchen Miklós Koren, Gábor Békés, Julian Hinz und Aaron Lohmann die möglichen Auswirkungen von KI-gestütztem Programmieren auf Open-Source-Software. KI senkt die Kosten, bestehende Bibliotheken zu nutzen und neue Anwendungen darauf aufzubauen. Gleichzeitig nimmt aber die direkte Beteiligung ab. Weniger Entwickler lesen Dokumentationen, melden Fehler oder beteiligen sich an öffentlichen Diskussionen.
Diese Formen der Beteiligung stellen heute eine wesentliche Quelle für Sichtbarkeit, Nachfrage und Einkommen von Maintainerinnen und Maintainern dar. In ihrem ökonomischen Modell zeigen die Autoren, dass bei wachsendem Vibe Coding unter den heutigen Finanzierungsmechanismen weniger neue Open-Source-Projekte entstehen und bestehende seltener weiterentwickelt werden. Die verfügbare Open-Source-Software nimmt ab, ihre durchschnittliche Qualität sinkt. Obwohl die Produktivität gestiegen ist, ist der gesamtwirtschaftliche Nutzen dadurch geringer. Die Studie kommt zu dem Schluss, dass Open Source in seiner heutigen Form nur dann bestehen kann, wenn sich die Vergütung und Anreizstrukturen für Maintainer grundlegend ändern.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Aktuell testen wir</title>
      <link>https://maik.io/notes/2026-02-06-aktuell-testen-wir/</link>
      <pubDate>Fri, 06 Feb 2026 18:24:33 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-06-aktuell-testen-wir/</guid>
      <description>&lt;p&gt;Elena Metz schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/wir-tun-gut-daran-alternative-loesungen-zu-testen-und-einzusetzen&#34; title=&#34;Staatssekretärin Daniela Dylakiewicz: „Wir tun gut daran, alternative Lösungen zu testen und einzusetzen“ - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Staatssekretärin Daniela Dylakiewicz: „Wir tun gut daran, alternative Lösungen zu testen und einzusetzen“&lt;/a&gt;« für tagesspiegel.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Um Sicherheit im weiteren Sinne geht es auch, wenn man sich die Abhängigkeiten von bestimmter Software aus dem Ausland anschaut. Spätestens seit dem Europäischen Gipfel im November ist digitale Souveränität ein zentrales Thema. Als wichtiger Baustein wird hier immer wieder Open-Source-Software genannt. Welche Rolle spielt das in Sachsen?&lt;/strong&gt;&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Elena Metz schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/wir-tun-gut-daran-alternative-loesungen-zu-testen-und-einzusetzen" title="Staatssekretärin Daniela Dylakiewicz: „Wir tun gut daran, alternative Lösungen zu testen und einzusetzen“ - Tagesspiegel Background" target="_blank" >Staatssekretärin Daniela Dylakiewicz: „Wir tun gut daran, alternative Lösungen zu testen und einzusetzen“</a>« für tagesspiegel.de</p>
<blockquote>
<p><strong>Um Sicherheit im weiteren Sinne geht es auch, wenn man sich die Abhängigkeiten von bestimmter Software aus dem Ausland anschaut. Spätestens seit dem Europäischen Gipfel im November ist digitale Souveränität ein zentrales Thema. Als wichtiger Baustein wird hier immer wieder Open-Source-Software genannt. Welche Rolle spielt das in Sachsen?</strong></p>
<p>Sachsen hat seit 2023 eine Open-Source-Strategie. Wir setzen Schritt für Schritt auf Open Source. Aktuell testen wir den Einsatz der Open-Source-Lösungen Open Desk des Zendis und Libre Office. Damit könnte zukünftig Microsoft Office an unseren Verwaltungsarbeitsplätzen ersetzt werden. Sachsen hat als Vorsitzland der Ministerpräsidentenkonferenz im vergangenen Jahr für das bundesweite Arbeiten Open Desk eingeführt. Rheinland-Pfalz hat diese Lösung als aktuelles Vorsitzland der MPK übernommen. Wir tun gut daran, alternative Lösungen zu testen und einzusetzen und damit unabhängiger zu werden.</p>
</blockquote>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Score für digitale Souveränität</title>
      <link>https://maik.io/notes/2026-02-02-score-fuer-digitale-souveraenitaet/</link>
      <pubDate>Mon, 02 Feb 2026 07:41:22 +0200</pubDate>
      <guid>https://maik.io/notes/2026-02-02-score-fuer-digitale-souveraenitaet/</guid>
      <description>&lt;p&gt;Viola Heeger schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/muenchen-macht-abhaengigkeiten-messbar&#34; title=&#34;Digitale Souveränität: München macht Abhängigkeiten messbar - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Digitale Souveränität: München macht Abhängigkeiten messbar&lt;/a&gt;« für tagesspiegel.de&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Die bayerische Landeshauptstadt hat Kriterien ausgearbeitet, mit denen sich digitale Souveränität konkret bewerten lässt. Grundlage ist ein Beschluss des IT-Ausschusses von vergangener Woche, der Tagesspiegel Background exklusiv vorliegt. Darin wird ein Souveränitätscheck eingeführt, für den IT@M, der zentrale IT-Dienstleister der Stadt, gemeinsam mit der Technischen Universität München eine Methodik entwickelt hat: der „Score für digitale Souveränität“ (SDS)&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Viola Heeger schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/muenchen-macht-abhaengigkeiten-messbar" title="Digitale Souveränität: München macht Abhängigkeiten messbar - Tagesspiegel Background" target="_blank" >Digitale Souveränität: München macht Abhängigkeiten messbar</a>« für tagesspiegel.de</p>
<blockquote>
<p>Die bayerische Landeshauptstadt hat Kriterien ausgearbeitet, mit denen sich digitale Souveränität konkret bewerten lässt. Grundlage ist ein Beschluss des IT-Ausschusses von vergangener Woche, der Tagesspiegel Background exklusiv vorliegt. Darin wird ein Souveränitätscheck eingeführt, für den IT@M, der zentrale IT-Dienstleister der Stadt, gemeinsam mit der Technischen Universität München eine Methodik entwickelt hat: der „Score für digitale Souveränität“ (SDS)</p>
</blockquote>
<p>Dass sich Kommunen, Städte und Länder mit digitaler Souveränität befassen, ist sinnvoll. Problematisch wird es, wenn einzelne Städte eigene Maßstäbe festlegen. Das gilt auch dann, wenn sie sich an <a href="https://www.it-planungsrat.de/fileadmin/beschluesse/2021/Beschluss2021-09_Strategie_zur_Staerkung_der_digitalen_Souveraenitaet.pdf" target="_blank" >Vorgaben des IT-Planungsrats</a> orientieren. Neben diesen existieren weitere Kriterien, etwa vom <a href="https://www.bsi.bund.de/DE/Service-Navi/Presse/Pressemitteilungen/Presse2026/260115_BSI_AWS_European_Cloud.html" target="_blank" >BSI</a>, der <a href="https://www.bundesdruckerei.de/de/innovation-hub/digitale-souveraenitaet-was-ist-das#" target="_blank" >Bundesdruckerei</a> und vom <a href="https://bmds.bund.de/themen/digitale-souveraenitaet/digitale-souveraenitaet-in-der-oeffentlichen-verwaltung" target="_blank" >BMDS</a>. Welche Maßstäbe gelten sollen, lässt sich so beliebig entscheiden oder neu definieren. Der Begriff der digitalen Souveränität wird dadurch weiter verwässert.</p>
<p>Der verlinkte Artikel ist kostenpflichtig. Die relevanten Informationen finden sich jedoch auch in der <a href="https://muenchen.digital/projekte/digitale-souver%C3%A4nit%C3%A4t.html" target="_blank" >Souveränitätserklärung der Stadt München</a> sowie im Sitzungsprotokoll »<a href="https://risi.muenchen.de/risi/sitzungsvorlage/detail/9417965" target="_blank" >Digitale Souveränität als strategisches Leitprinzip – Sichere Software für München</a>« vom 22. Januar 2026.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>800 Linux-PCs</title>
      <link>https://maik.io/notes/2026-01-29-800-linux-pcs/</link>
      <pubDate>Thu, 29 Jan 2026 21:29:06 +0200</pubDate>
      <guid>https://maik.io/notes/2026-01-29-800-linux-pcs/</guid>
      <description>&lt;p&gt;tagesspiegel.de schreibt in »&lt;a href=&#34;https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/etwa-800-linux-pcs-fuer-die-schleswig-holsteiner-verwaltung-bis-jahresende&#34; title=&#34;Deutschlands Open-Source-Vorreiter: Etwa 800 Linux-PCs für die Schleswig-Holsteiner Verwaltung bis Jahresende - Tagesspiegel Background&#34; target=&#34;_blank&#34; &gt;Deutschlands Open-Source-Vorreiter: Etwa 800 Linux-PCs für die Schleswig-Holsteiner Verwaltung bis Jahresende&lt;/a&gt;«&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Die flächendeckende Umstellung der Landesverwaltung ist demnach noch in der Detailplanung. Sie wird voraussichtlich über zwei Jahre dauern. „Aktuell geplant ist die Umstellung von etwa 250 Arbeitsplätzen im Sommer 2026“, berichtet der Minister, „weitere 500 Arbeitsplätze sollen bis zum Ende des Jahres 2026 folgen. Bis Ende 2027 sollen nach derzeitiger Planung und vorausgesetzt, dass das erste Flächenrollout erfolgreich verlaufen ist, 2500 Linux-Geräte in der Fläche sein.“ Ab 2028 muss die Landesverwaltung also Wege finden, die restlichen etwa 35.700 Geräte umzustellen oder durch Linux-PCs zu ersetzen.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>tagesspiegel.de schreibt in »<a href="https://background.tagesspiegel.de/digitalisierung-und-ki/briefing/etwa-800-linux-pcs-fuer-die-schleswig-holsteiner-verwaltung-bis-jahresende" title="Deutschlands Open-Source-Vorreiter: Etwa 800 Linux-PCs für die Schleswig-Holsteiner Verwaltung bis Jahresende - Tagesspiegel Background" target="_blank" >Deutschlands Open-Source-Vorreiter: Etwa 800 Linux-PCs für die Schleswig-Holsteiner Verwaltung bis Jahresende</a>«</p>
<blockquote>
<p>Die flächendeckende Umstellung der Landesverwaltung ist demnach noch in der Detailplanung. Sie wird voraussichtlich über zwei Jahre dauern. „Aktuell geplant ist die Umstellung von etwa 250 Arbeitsplätzen im Sommer 2026“, berichtet der Minister, „weitere 500 Arbeitsplätze sollen bis zum Ende des Jahres 2026 folgen. Bis Ende 2027 sollen nach derzeitiger Planung und vorausgesetzt, dass das erste Flächenrollout erfolgreich verlaufen ist, 2500 Linux-Geräte in der Fläche sein.“ Ab 2028 muss die Landesverwaltung also Wege finden, die restlichen etwa 35.700 Geräte umzustellen oder durch Linux-PCs zu ersetzen.</p>
</blockquote>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>      
  </channel>
</rss>