<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Saeed Esmaili</title>
    <link>https://saeedesmaili.com/</link>
    <description>Recent content on Saeed Esmaili</description>
    <image>
      <title>Saeed Esmaili</title>
      <url>https://saeedesmaili.com/saeed-esmaili.png</url>
      <link>https://saeedesmaili.com/saeed-esmaili.png</link>
    </image>
    <generator>Hugo -- 0.146.0</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 25 May 2026 10:14:28 +0100</lastBuildDate>
    <atom:link href="https://saeedesmaili.com/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Save an audio file into your Spotify account via CLI</title>
      <link>https://saeedesmaili.com/posts/save-an-audio-file-into-your-spotify-account-via-cli/</link>
      <pubDate>Mon, 25 May 2026 10:14:28 +0100</pubDate>
      <guid>https://saeedesmaili.com/posts/save-an-audio-file-into-your-spotify-account-via-cli/</guid>
      <description>&lt;p&gt;I have added several long conversational youtube videos into a playlist, hoping I&amp;rsquo;ll come back to the them some day, but in reality I never do that. Recently I found out that Spotify has released a new &lt;a href=&#34;https://github.com/spotify/save-to-spotify/&#34; target=&#34;_blank&#34; &gt;save-to-spotify&lt;/a&gt;
 CLI tool that lets you upload any audio file into your Spotify account as a private podcast episode. This is perfect for me, as I can download those youtube videos as audio files, upload them to Spotify, and listen to them while I&amp;rsquo;m driving.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I have added several long conversational youtube videos into a playlist, hoping I&rsquo;ll come back to the them some day, but in reality I never do that. Recently I found out that Spotify has released a new <a href="https://github.com/spotify/save-to-spotify/" target="_blank" >save-to-spotify</a>
 CLI tool that lets you upload any audio file into your Spotify account as a private podcast episode. This is perfect for me, as I can download those youtube videos as audio files, upload them to Spotify, and listen to them while I&rsquo;m driving.</p>
<p>Here&rsquo;s how you can do that:</p>
<h2 id="download-the-audio-from-youtube">Download the Audio from Youtube</h2>
<p>Install <code>yt-dlp</code> and <code>ffmpeg</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>brew install yt-dlp ffmpeg
</span></span></code></pre></div><p>Download and extract the audio:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>yt-dlp --extract-audio --audio-format mp3 --audio-quality <span style="color:#ae81ff">0</span> -o <span style="color:#e6db74">&#34;%(title)s.%(ext)s&#34;</span> <span style="color:#e6db74">&#34;https://www.youtube.com/watch?v=YOUR_VIDEO_ID&#34;</span>
</span></span></code></pre></div><h2 id="save-to-spotify">Save to Spotify</h2>
<p>Install <code>save-to-spotify</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -fsSL https://saveto.spotify.com/install.sh | bash -s -- --no-skills
</span></span></code></pre></div><p>Then authenticate with your Spotify account:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>save-to-spotify auth login
</span></span></code></pre></div><p>Now you can:</p>
<ul>
<li>Add a new episode and create a new show:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>save-to-spotify upload file.mp3 --title <span style="color:#e6db74">&#34;TITLE&#34;</span> --new-show <span style="color:#e6db74">&#34;SHOW&#34;</span><span style="color:#e6db74">`</span>
</span></span></code></pre></div><ul>
<li>Add a new episode to an existing show:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>save-to-spotify upload file.mp3 --title <span style="color:#e6db74">&#34;TITLE&#34;</span> --show-id spotify:show:abcd1234
</span></span></code></pre></div><p>If <code>--show-id</code> is not specified, it will use the most recently created show.</p>
<p>Then visit your Spotify account and find the show and episode in your library (it takes a few minutes to show up there).</p>
<h2 id="one-command">One Command</h2>
<p>To combine <code>yt-dlp</code> and <code>save-to-spotify</code> in one command, the following bash script gets the audio, description, and thumbnail from Youtube and saves them to Spotify:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/env bash
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>set -euo pipefail
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>usage<span style="color:#f92672">()</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>  echo <span style="color:#e6db74">&#34;Usage: </span>$0<span style="color:#e6db74"> &lt;video-id&gt; [--new-show NAME | --show-id ID]&#34;</span>
</span></span><span style="display:flex;"><span>  exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">[[</span> $# -lt <span style="color:#ae81ff">1</span> <span style="color:#f92672">]]</span> <span style="color:#f92672">&amp;&amp;</span> usage
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>URL<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.youtube.com/watch?v=</span>$1<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>shift
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>SHOW_ARGS<span style="color:#f92672">=()</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> <span style="color:#f92672">[[</span> $# -gt <span style="color:#ae81ff">0</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">case</span> <span style="color:#e6db74">&#34;</span>$1<span style="color:#e6db74">&#34;</span> in
</span></span><span style="display:flex;"><span>    --new-show<span style="color:#f92672">)</span> SHOW_ARGS<span style="color:#f92672">+=(</span>--new-show <span style="color:#e6db74">&#34;</span>$2<span style="color:#e6db74">&#34;</span><span style="color:#f92672">)</span>; shift <span style="color:#ae81ff">2</span> ;;
</span></span><span style="display:flex;"><span>    --show-id<span style="color:#f92672">)</span>  SHOW_ARGS<span style="color:#f92672">+=(</span>--show-id <span style="color:#e6db74">&#34;</span>$2<span style="color:#e6db74">&#34;</span><span style="color:#f92672">)</span>; shift <span style="color:#ae81ff">2</span> ;;
</span></span><span style="display:flex;"><span>    *<span style="color:#f92672">)</span> usage ;;
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">esac</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>TMPDIR<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>mktemp -d<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>trap <span style="color:#e6db74">&#39;rm -rf &#34;$TMPDIR&#34;&#39;</span> EXIT
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;Downloading audio, thumbnail, and metadata...&#34;</span>
</span></span><span style="display:flex;"><span>yt-dlp <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>  --extract-audio --audio-format mp3 --audio-quality <span style="color:#ae81ff">0</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>  --write-thumbnail --convert-thumbnails jpg <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>  --write-info-json <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>  -o <span style="color:#e6db74">&#34;</span>$TMPDIR<span style="color:#e6db74">/%(id)s.%(ext)s&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>  <span style="color:#e6db74">&#34;</span>$URL<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>AUDIO<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>ls <span style="color:#e6db74">&#34;</span>$TMPDIR<span style="color:#e6db74">&#34;</span>/*.mp3<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>INFO<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>ls <span style="color:#e6db74">&#34;</span>$TMPDIR<span style="color:#e6db74">&#34;</span>/*.info.json<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>THUMB<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>ls <span style="color:#e6db74">&#34;</span>$TMPDIR<span style="color:#e6db74">&#34;</span>/*.jpg 2&gt;/dev/null <span style="color:#f92672">||</span> true<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>TITLE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>python3 -c <span style="color:#e6db74">&#34;import json,sys; print(json.load(open(sys.argv[1]))[&#39;title&#39;])&#34;</span> <span style="color:#e6db74">&#34;</span>$INFO<span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>DESC<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>python3 -c <span style="color:#e6db74">&#34;import json,sys; print(json.load(open(sys.argv[1])).get(&#39;description&#39;,&#39;&#39;)[:4000])&#34;</span> <span style="color:#e6db74">&#34;</span>$INFO<span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>UPLOAD_ARGS<span style="color:#f92672">=(</span>--title <span style="color:#e6db74">&#34;</span>$TITLE<span style="color:#e6db74">&#34;</span><span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">[[</span> -n <span style="color:#e6db74">&#34;</span>$DESC<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span> <span style="color:#f92672">&amp;&amp;</span> UPLOAD_ARGS<span style="color:#f92672">+=(</span>--summary <span style="color:#e6db74">&#34;</span>$DESC<span style="color:#e6db74">&#34;</span><span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> -n <span style="color:#e6db74">&#34;</span>$THUMB<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>  THUMB_SIZE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>stat -f%z <span style="color:#e6db74">&#34;</span>$THUMB<span style="color:#e6db74">&#34;</span> 2&gt;/dev/null <span style="color:#f92672">||</span> stat -c%s <span style="color:#e6db74">&#34;</span>$THUMB<span style="color:#e6db74">&#34;</span> 2&gt;/dev/null<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> <span style="color:#e6db74">&#34;</span>$THUMB_SIZE<span style="color:#e6db74">&#34;</span> -le <span style="color:#ae81ff">1048576</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    UPLOAD_ARGS<span style="color:#f92672">+=(</span>--image <span style="color:#e6db74">&#34;</span>$THUMB<span style="color:#e6db74">&#34;</span><span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;Thumbnail exceeds 1 MB, skipping.&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;Uploading to Spotify...&#34;</span>
</span></span><span style="display:flex;"><span>save-to-spotify upload <span style="color:#e6db74">&#34;</span>$AUDIO<span style="color:#e6db74">&#34;</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>UPLOAD_ARGS[@]<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#e6db74">${</span>SHOW_ARGS[@]+<span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>SHOW_ARGS[@]<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;Done! &#39;</span>$TITLE<span style="color:#e6db74">&#39; saved to Spotify.&#34;</span>
</span></span></code></pre></div><p>Save it as <code>yt2spotify.sh</code> and make it executable:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>chmod +x yt2spotify.sh
</span></span></code></pre></div><p>Then run:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>yt2spotify.sh VIDEO_ID
</span></span><span style="display:flex;"><span>yt2spotify.sh VIDEO_ID --new-show <span style="color:#e6db74">&#34;YouTube Listens&#34;</span>
</span></span><span style="display:flex;"><span>yt2spotify.sh VIDEO_ID --show-id spotify:show:abc123
</span></span></code></pre></div><hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Treat your morning ritual like an opening chess move</title>
      <link>https://saeedesmaili.com/notes/treat-your-morning-ritual-like-an-opening-chess-move/</link>
      <pubDate>Mon, 16 Mar 2026 22:14:28 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/treat-your-morning-ritual-like-an-opening-chess-move/</guid>
      <description>&lt;p&gt;I quite liked this metaphoric view of the morning ritual from Herbert Lui:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A good morning ritual needs to be flexible enough to adapt to these shifts. In order to do this, treat it like an opening chess move.
On your ideal mornings, you’re going first. You get to decide which move to take. An opening move may be to make your usual breakfast, and doing something creative before you handle your professional or personal commitments.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I quite liked this metaphoric view of the morning ritual from Herbert Lui:</p>
<blockquote>
<p>A good morning ritual needs to be flexible enough to adapt to these shifts. In order to do this, treat it like an opening chess move.
On your ideal mornings, you’re going first. You get to decide which move to take. An opening move may be to make your usual breakfast, and doing something creative before you handle your professional or personal commitments.</p></blockquote>
<p>I just want to quote the full post here, but it&rsquo;s just four short paragraphs, so go <a href="https://herbertlui.net/treat-your-morning-ritual-like-an-opening-chess-move/" target="_blank" >read it</a>
 on his blog.</p>
<p><a href="https://herbertlui.net/treat-your-morning-ritual-like-an-opening-chess-move/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Taming Claude Code: Taking Back Control</title>
      <link>https://saeedesmaili.com/posts/taming-claude-code-taking-back-control/</link>
      <pubDate>Wed, 18 Feb 2026 12:00:00 +0100</pubDate>
      <guid>https://saeedesmaili.com/posts/taming-claude-code-taking-back-control/</guid>
      <description>&lt;p&gt;I started using &lt;a href=&#34;https://code.claude.com/docs/en/overview&#34; target=&#34;_blank&#34; &gt;Claude Code&lt;/a&gt;
 in July last year. I was a Cursor user looking for something better, and I was skeptical at first. Claude Code is a terminal-based tool, and I was used to IDEs. With Cursor, reviewing AI-generated changes was straightforward, you see the diff, you accept or reject. How would that work in a terminal?&lt;/p&gt;
&lt;p&gt;It took me a while to adapt. The breakthrough was realizing I could run Claude Code inside VS Code&amp;rsquo;s integrated terminal and use the Git extension to review changes. This became central to my workflow: I don&amp;rsquo;t let AI tools do whatever they want. I stay in the loop. Even when I&amp;rsquo;m vibe-coding a throwaway script, I want to quickly review what the AI is doing.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I started using <a href="https://code.claude.com/docs/en/overview" target="_blank" >Claude Code</a>
 in July last year. I was a Cursor user looking for something better, and I was skeptical at first. Claude Code is a terminal-based tool, and I was used to IDEs. With Cursor, reviewing AI-generated changes was straightforward, you see the diff, you accept or reject. How would that work in a terminal?</p>
<p>It took me a while to adapt. The breakthrough was realizing I could run Claude Code inside VS Code&rsquo;s integrated terminal and use the Git extension to review changes. This became central to my workflow: I don&rsquo;t let AI tools do whatever they want. I stay in the loop. Even when I&rsquo;m vibe-coding a throwaway script, I want to quickly review what the AI is doing.</p>
<p>Once I figured out the workflow, I was pretty happy with Claude Code. It explored codebases more efficiently than Cursor, and I could see the model&rsquo;s thinking traces, the reasoning behind each decision. This was huge for me. I could see <em>how</em> the model interpreted my request, catch wrong assumptions early, and course-correct before wasting time on the wrong path.</p>
<p>Then Claude Code 2.0 happened.</p>
<h2 id="the-breaking-point">The Breaking Point</h2>
<p>Anthropic updated Claude Code to be more accessible to everyone, not just power users. The VS Code extension got prettier, the UI got cleaner, and the thinking traces got hidden.</p>
<p>This was the moment I realized I couldn&rsquo;t continue using Claude Code as-is. The thinking traces weren&rsquo;t just a nice-to-have for me, they were essential. Without them, I had no way of knowing if the model had misunderstood my request until it finished working. Sometimes you ask something ambiguous, and instead of asking for clarification, the model assumes. Those assumptions are obvious in the thinking traces. Without them, you&rsquo;re flying blind.</p>
<p><img alt="Claude Code thinking traces showing self-correction" loading="lazy" src="/images/2026/20260218-claude-code-thinking-traces.png"></p>
<p>In this example, you can see the model debugging a SQL error, catching its own mistakes (&ldquo;Actually wait&rdquo;, &ldquo;Wait, let me count&hellip;&rdquo;), and reconsidering assumptions in real-time. This is exactly what you lose when thinking traces are hidden.</p>
<p>So I did what any stubborn power user would do: I disabled auto-updates and pinned my version to the latest 1.x release.</p>
<h2 id="why-i-customize-claude-code">Why I Customize Claude Code</h2>
<p>Here&rsquo;s my problem with the defaults: Claude Code has access to too many tools. In theory, more tools means more capabilities. In practice, it means more complexity for the model to navigate, more tokens consumed on tool selection, and worse results.</p>
<p>Take <strong>plan mode</strong>. Claude Code has multiple tools for entering plan mode, exiting plan mode, asking questions in plan mode. All of this consumes tokens and adds cognitive load for the model. But plan mode is just&hellip; a markdown file where the model writes without editing your actual code. You can achieve the same thing by telling the model: &ldquo;Don&rsquo;t edit anything. Plan first, ask me questions, save your plan in a markdown file.&rdquo; You don&rsquo;t need dedicated tools for this.</p>
<p>Or <strong>sub-agents</strong>. The main model can spawn another agent to explore the codebase and summarize findings. Sounds useful, but I found it performs worse for my use cases. The sub-agent summarizes what it found, and the main model works with that summary instead of the actual code. It&rsquo;s like playing telephone, context gets lost. I&rsquo;d rather have the main model read the code itself, even if it uses more tokens and hits the context limit faster. At least it&rsquo;s working with the real thing.</p>
<h2 id="my-setup">My Setup</h2>
<p>I&rsquo;ve ended up with a Claude Code config that&rsquo;s leaner, faster, and more predictable. Here&rsquo;s what I changed.</p>
<h3 id="restoring-thinking-traces">Restoring Thinking Traces</h3>
<p>The API still returns thinking traces, Claude Code just hides them in the UI since version 2.0. I found <a href="https://github.com/aleks-apostle/claude-code-patches" target="_blank" >claude-code-patches</a>
, a community project that patches thinking traces back to being fully expanded by default.</p>
<p>First, install a compatible Claude Code version:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>npm install -g @anthropic-ai/claude-code@2.0.62
</span></span></code></pre></div><p>Then apply the patch:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git clone git@github.com:aleks-apostle/claude-code-patches.git
</span></span><span style="display:flex;"><span>cd claude-code-patches
</span></span><span style="display:flex;"><span>node patch-thinking.js
</span></span></code></pre></div><p>Restart Claude Code, and thinking blocks now display inline.</p>
<p><strong>Why version 2.0.62?</strong> That&rsquo;s the latest version the patch maintainer has officially supported. Other contributors have submitted PRs for newer versions, and the patch is just one JS file, so it&rsquo;s trivial to adapt. But 2.0.62 has everything I need, and I&rsquo;d rather wait for the maintainer to officially update than risk a broken patch.</p>
<p>Recent versions have actually gotten worse for power users. <a href="https://symmetrybreak.ing/blog/claude-code-is-being-dumbed-down/" target="_blank" >Version 2.1.20 started hiding even more information</a>
, showing vague summaries like &ldquo;Read 3 files&rdquo; instead of the actual file paths. When I read about this, I was glad I&rsquo;d pinned my version. If a future Claude Code version introduces a feature I really want, I&rsquo;ll upgrade and use a community patch. Until then, I&rsquo;m staying put.</p>
<h3 id="settings">Settings</h3>
<p>In <code>~/.claude/settings.json</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;includeCoAuthoredBy&#34;</span>: <span style="color:#66d9ef">false</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;env&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;DISABLE_AUTOUPDATER&#34;</span>: <span style="color:#e6db74">&#34;1&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY&#34;</span>: <span style="color:#e6db74">&#34;1&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC&#34;</span>: <span style="color:#e6db74">&#34;1&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS&#34;</span>: <span style="color:#e6db74">&#34;50000&#34;</span>
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>What each setting does:</p>
<ul>
<li><code>includeCoAuthoredBy: false</code> - Disables the &ldquo;Co-authored-by: Claude&rdquo; line in git commits. I don&rsquo;t ask Claude to commit often, and when I do, I prefer clean commit messages.</li>
<li><code>DISABLE_AUTOUPDATER</code> - Prevents automatic updates. I update manually after reviewing changelogs.</li>
<li><code>CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY</code> - Disables the &ldquo;rate your session&rdquo; popups. They appear frequently and break the flow.</li>
<li><code>CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC</code> - Keeps things fast and minimal.</li>
<li><code>CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS: 50000</code> - The default is 25,000 tokens. When Claude reads files larger than that, it gets truncated and errors out. I keep documentation files in my project directories (Cloudflare Workers docs, API references, etc.) that exceed 25k tokens, and I want Claude to read them fully.</li>
</ul>
<h3 id="disabling-token-heavy-tools">Disabling Token-Heavy Tools</h3>
<p>I use a shell alias that runs Claude Code with max thinking tokens and disables tools I don&rsquo;t want:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># In ~/.zshrc</span>
</span></span><span style="display:flex;"><span>alias claude<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;MAX_THINKING_TOKENS=31999 claude --disallowedTools \
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">  &#34;Task,AgentOutputTool,ExitPlanMode,NotebookEdit,AskUserQuestion,SlashCommand,EnterPlanMode&#34;&#39;</span>
</span></span></code></pre></div><p>This disables:</p>
<ul>
<li><strong>Task / AgentOutputTool</strong> - Sub-agents that explore and summarize. I prefer the main model to read code directly.</li>
<li><strong>EnterPlanMode / ExitPlanMode</strong> - Plan mode tools. I just ask the model to plan in a markdown file instead.</li>
<li><strong>NotebookEdit</strong> - Jupyter notebook editing conflicts with VS Code&rsquo;s live rendering. It doesn&rsquo;t work well and wastes tokens. I don&rsquo;t use Claude for notebooks much anyway.</li>
<li><strong>AskUserQuestion</strong> - Part of plan mode. Claude can just ask questions in regular text, and I respond in text. No special tool needed.</li>
<li><strong>SlashCommand</strong> - I&rsquo;ve never used it.</li>
</ul>
<p>The last three are more opinionated. If you use Jupyter notebooks heavily or like slash commands, keep those tools enabled.</p>
<p><strong>Why use an alias instead of settings?</strong> When you specify <code>--disallowedTools</code>, these tools are completely removed from the model&rsquo;s context. The model doesn&rsquo;t even know they exist. This makes the context leaner and, I believe, improves the model&rsquo;s focus.</p>
<h3 id="disabling-auto-compaction">Disabling Auto-Compaction</h3>
<p>You can toggle this via <code>/config</code> in Claude Code, or directly in <code>~/.claude.json</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;autoCompactEnabled&#34;</span>: <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>This one is important. By default, Claude Code reserves 22.5% of the model&rsquo;s context (45k tokens out of 200k) for auto-compaction. When you approach this threshold, it summarizes the conversation and starts a new context. The summary is lossy, 99% of the time the model in the new session doesn&rsquo;t have enough context about what you&rsquo;ve tried, what worked, what didn&rsquo;t.</p>
<p>After disabling auto-compaction, I rarely hit the context limit anyway. I keep my sessions short by default: start a session, work on a feature or bug, clear and start fresh. This leads to higher quality results.</p>
<p>For those times when I&rsquo;m debugging something nasty and the context grows long, I&rsquo;d rather continue the current session until it hits the actual limit. Here&rsquo;s something nice about Claude Code: when you&rsquo;re at 0% context remaining, it doesn&rsquo;t immediately error out. It starts removing tool call results from the oldest messages (that test run from 30 messages ago, for example). You can often continue for 10-20 more messages before hitting the real API limit.</p>
<p>When I do hit the limit, I use <code>/export</code> to save user messages, assistant messages, and tool call titles to a text file. Then I start a fresh session and reference the transcript. This preserves more context than auto-compaction&rsquo;s summary. I sometimes paste the export to another model (Gemini, for example) to get a second opinion on a tricky problem.</p>
<h3 id="why-i-dont-use-mcps">Why I Don&rsquo;t Use MCPs</h3>
<p><a href="https://modelcontextprotocol.io/docs/getting-started/intro" target="_blank" >MCP</a>
 servers let you connect Claude Code to external services: Google Drive, Jira, Notion, databases, etc. I don&rsquo;t use any of them, except the VS Code MCP that Claude Code adds automatically when running in VS Code&rsquo;s terminal (it provides useful things like IDE diagnostics).</p>
<p>My reasoning is the same as with the built-in tools: each MCP adds tools to the context. Some people add tens or even hundreds of tools via MCPs. The model then has to evaluate all of them for every request. More tools means more token overhead and, I believe, worse decision-making.</p>
<p><img alt="Claude Code context with multiple MCPs enabled" loading="lazy" src="/images/2026/20260218-claude-code-before-with-mcp.png"></p>
<p>For services I actually need, I use CLI tools instead:</p>
<ul>
<li><strong>GitHub</strong> - I mention in my <code>CLAUDE.md</code> that the <code>gh</code> CLI is available and authenticated. Claude knows how to use it.</li>
<li><strong>BigQuery</strong> - Same approach. I have <code>bq</code> CLI authenticated and add minimal instructions to <code>CLAUDE.md</code>.</li>
</ul>
<p>For rarely-used integrations like Google Docs or Jira, I ask myself: what percentage of my Claude Code messages actually need Google Drive access? Maybe 1 in 100? 1 in 1000? For those rare cases, I just:</p>
<ul>
<li>Export the Google Doc as markdown, add it to the project directory, reference it manually</li>
<li>Or ask Claude to write to a markdown file, then copy-paste into Google Docs</li>
</ul>
<p>This takes 30 seconds and doesn&rsquo;t pollute every session with tools I rarely use.</p>
<p><strong>The exception: Skills.</strong> Skills are similar to MCPs but more minimal. The model only sees a one-sentence description of each skill until it&rsquo;s actually needed. When triggered, it dynamically loads the full instructions.</p>
<p>For example, I have an <a href="https://obsidian.md/" target="_blank" >Obsidian</a>
 skill. The description says &ldquo;use when the user mentions Obsidian or daily notes.&rdquo; The full instructions (vault location, how to find daily notes, formatting preferences) only load when relevant. When I&rsquo;m working on code and not mentioning Obsidian, my context stays clean.</p>
<p>For use cases like this, Skills are more efficient than MCPs. I&rsquo;ll continue using them selectively.</p>
<h2 id="the-result">The Result</h2>
<p>My Claude Code setup is leaner: fewer tools in context, no auto-compaction overhead, full visibility into thinking traces. I spend less time wondering what the model is doing and more time actually working. When something goes wrong, I can see exactly where the model&rsquo;s assumptions diverged from mine.</p>
<p>Here&rsquo;s the difference. Running <code>/context</code> in a fresh session:</p>
<p><strong>Before (default settings):</strong>
<img alt="Claude Code context usage with default settings" loading="lazy" src="/images/2026/20260218-claude-code-before.png"></p>
<p><strong>After (my setup):</strong>
<img alt="Claude Code context usage with my settings" loading="lazy" src="/images/2026/20260218-claude-code-after.png"></p>
<p>Is it perfect? No. I&rsquo;m pinned to an older version and relying on a community patch. But the tradeoff is worth it for the control I get back.</p>
<p>Your mileage may vary. If you&rsquo;re happy with the defaults, that&rsquo;s fine. But if you&rsquo;re a power user who wants more control, and who wants to understand what the AI is doing rather than just trusting it, these customizations might help.</p>
<p>The goal isn&rsquo;t to use AI tools less. It&rsquo;s to use them with your eyes open.</p>
<hr>
<p><strong>Update — April 2026</strong></p>
<p>My pinned v2.0.62 eventually stopped working. Every message returned &ldquo;interrupted&rdquo; immediately, without me actually interrupting anything. Turned out Anthropic started sending an <code>effortLevel</code> parameter in API responses that older Claude Code versions don&rsquo;t know how to handle — they just crash. <a href="https://github.com/anthropics/claude-code/issues/52178" target="_blank" >This GitHub issue</a>
 confirmed it.</p>
<p>The main patches repo hasn&rsquo;t been updated, but a contributor named <a href="https://github.com/anthrotype" target="_blank" >anthrotype</a>
 has been keeping the patches current independently. I upgraded to v2.1.112 (latest Claude Code at time of writing is 2.1.118) and applied two patches from their open PRs:</p>
<ol>
<li><strong>Thinking traces</strong> — <a href="https://github.com/aleks-apostle/claude-code-patches/pull/9" target="_blank" >PR #9</a>
. Same as before, restores thinking blocks inline.</li>
<li><strong>Tool visibility</strong> — <a href="https://github.com/aleks-apostle/claude-code-patches/pull/12" target="_blank" >PR #12</a>
. Fixes a newer Anthropic regression that collapses tool call details into vague summaries like &ldquo;Read 3 files&rdquo; instead of showing the actual file paths.</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>npm install -g @anthropic-ai/claude-code@2.1.112
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>git clone git@github.com:anthrotype/claude-code-patches.git
</span></span><span style="display:flex;"><span>cd claude-code-patches
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>git checkout update-v2.0.73
</span></span><span style="display:flex;"><span>node patch-thinking.js
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>git checkout update-tool-visibility-patch
</span></span><span style="display:flex;"><span>node patch-tool-visibility.js
</span></span></code></pre></div><p>and add the followings to <code>cat ~/.claude/settings.json</code> (alongside the existing settings):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;env&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;MAX_THINKING_TOKENS&#34;</span>: <span style="color:#e6db74">&#34;31999&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING&#34;</span>: <span style="color:#e6db74">&#34;1&#34;</span>
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;showThinkingSummaries&#34;</span>: <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;alwaysThinkingEnabled&#34;</span>: <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>Restart Claude Code and both patches are active.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Playing Tennis in the Netherlands: A Guide for Newcomers</title>
      <link>https://saeedesmaili.com/posts/playing-tennis-in-the-netherlands-a-guide-for-newcomers/</link>
      <pubDate>Thu, 08 May 2025 10:57:07 +0200</pubDate>
      <guid>https://saeedesmaili.com/posts/playing-tennis-in-the-netherlands-a-guide-for-newcomers/</guid>
      <description>&lt;p&gt;Welcome to the Netherlands! If you&amp;rsquo;re a newcomer like me and love tennis, or even if you&amp;rsquo;re looking to pick up a racket for the first time, you&amp;rsquo;re in luck. Tennis is popular here, and there are plenty of ways to play. However, figuring out the local tennis scene can be a bit of a puzzle when you&amp;rsquo;re new.&lt;/p&gt;
&lt;p&gt;When I moved here in 2022, one of the very first things I bought was a new tennis racket – even before I found a permanent apartment! I was eager to play, but I quickly realized I had a lot to learn about how tennis works in the Netherlands. I spent time hitting against a wall, researching clubs, and slowly finding my way. This blog post is my way of sharing what I&amp;rsquo;ve learned to help you get on the court faster and with less guesswork.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Welcome to the Netherlands! If you&rsquo;re a newcomer like me and love tennis, or even if you&rsquo;re looking to pick up a racket for the first time, you&rsquo;re in luck. Tennis is popular here, and there are plenty of ways to play. However, figuring out the local tennis scene can be a bit of a puzzle when you&rsquo;re new.</p>
<p>When I moved here in 2022, one of the very first things I bought was a new tennis racket – even before I found a permanent apartment! I was eager to play, but I quickly realized I had a lot to learn about how tennis works in the Netherlands. I spent time hitting against a wall, researching clubs, and slowly finding my way. This blog post is my way of sharing what I&rsquo;ve learned to help you get on the court faster and with less guesswork.</p>
<h2 id="dutch-tennis-clubs">Dutch Tennis Clubs</h2>
<p>This was a big one for me. Back in my home country, we didn&rsquo;t really have &ldquo;tennis clubs&rdquo; in the same way. You&rsquo;d just rent a court by the hour. In the Netherlands, tennis clubs are a huge part of the scene.</p>
<p><strong>What&rsquo;s a Tennis Club?</strong> Think of it as a community. You pay a yearly membership fee, and that usually gives you:</p>
<ul>
<li><strong>Court Access:</strong> Play on the club&rsquo;s courts for free whenever they&rsquo;re available. Peak hours can be busy, though.</li>
<li><strong>Club Events:</strong> Most clubs have fun social events like &ldquo;toss&rdquo; evenings (more on that later!), ladder competitions, and small club tournaments.</li>
<li><strong>Coaching:</strong> Clubs usually have coaches, and lessons can be cheaper if you&rsquo;re a member because you&rsquo;re not paying extra to rent the court.</li>
<li><strong>A Tennis Community:</strong> You become part of a group of people who love tennis.</li>
</ul>
<p>While there are some places where you can just book a court by the hour, joining a club is often the best and most cost-effective way to play regularly.</p>
<p>It&rsquo;s good to know that <strong>club memberships are typically for the full calendar year.</strong> So, when you register, you become a member until the end of that year, and it usually gets automatically renewed for the next year if you don&rsquo;t cancel it in time. This means you generally can&rsquo;t be a member for just the summer months, for example.</p>
<h3 id="finding-and-joining-a-club">Finding and Joining a Club</h3>
<p>Search online or on Google Maps for clubs in your area. The good news is there are clubs <em>everywhere</em> – big cities, small towns, even villages! In Amsterdam, you can usually find a club within a 30-40 minute commute.</p>
<p>Most clubs have websites (often in Dutch). Look for info on:</p>
<ul>
<li><strong>Membership:</strong> Are they accepting new members? Popular city-center clubs might have waiting lists.</li>
<li><strong>Fees:</strong> How much does it cost per year?</li>
<li><strong>How to Join:</strong> Usually, you fill out an online form and transfer the membership fee to their bank account (IBAN).</li>
</ul>
<ul>
<li><strong>Types of Membership:</strong>
<ul>
<li><strong>Full/Adult Membership:</strong> The standard option with all benefits.</li>
<li><strong>Junior/Senior Memberships:</strong> Often cheaper for younger or older players.</li>
<li><strong>Off-Peak Membership:</strong> Some clubs offer cheaper rates if you only play during less busy times, like weekdays before 5 PM.</li>
</ul>
</li>
</ul>
<h3 id="bardienst-bar-duty">Bardienst (Bar Duty)</h3>
<p>Many Dutch tennis clubs have a bar or café run by the members themselves. This means you&rsquo;ll likely be scheduled for &ldquo;bardienst&rdquo; (bar duty) a few times a year (usually 2-3 times, for 3-4 hours each shift).</p>
<ul>
<li><strong>Is it mandatory?</strong> Usually, yes, to get full club benefits.</li>
<li><strong>What&rsquo;s it like?</strong> It can actually be a fun way to meet other members and serve drinks or snacks.</li>
<li><strong>Can I skip it?</strong> Most clubs let you pay a fee (around €30 per duty) if you can&rsquo;t or don&rsquo;t want to do it.</li>
</ul>
<h3 id="types-of-courts">Types of Courts</h3>
<p>You&rsquo;ll mostly find <strong>clay courts</strong> (often called &ldquo;gravel&rdquo; in Dutch) or <strong>smash courts</strong> (a type of artificial clay). Some clubs also have <strong>artificial grass</strong>, and less commonly, <strong>hard courts</strong> or indoor <strong>carpet courts</strong>.</p>
<h2 id="finding-hitting-partners">Finding Hitting Partners</h2>
<p>Okay, you&rsquo;ve joined a club (or are thinking about it), but who will you play with?</p>
<ul>
<li><strong>Online:</strong> Websites like the <a href="https://www.globaltennisnetwork.com/tennis/city/363-amsterdam-netherlands" target="_blank" >Global Tennis Network</a>
 have pages for Dutch cities where people post looking for partners. I found a couple of my regular hitting buddies this way.</li>
<li><strong>Your Network:</strong> Ask around, colleagues at work, fellow students, or friends might play or know someone who does. Use your company&rsquo;s Slack or a student WhatsApp group.</li>
<li><strong>At the Club:</strong> Visit clubs, watch people play, and if you see someone around your level, don&rsquo;t be shy to ask if they&rsquo;re open to a game.</li>
<li><strong>Club Activities:</strong> &ldquo;Toss&rdquo; evenings and ladder competitions (see below) are fantastic for meeting new players.</li>
<li><strong>Be Open:</strong> I&rsquo;ve even had people stop me on the street when they saw my racket sticking out of my bag and ask to play. We became doubles partners and played tournaments together.</li>
</ul>
<h2 id="finding-a-coach">Finding a Coach</h2>
<p>Want to improve and sharpen your skills?</p>
<ul>
<li><strong>Club Coaches:</strong> If you&rsquo;re a member of a club, definitely ask them first about lessons or if they know coaches who teach there. This is often cheaper because you won&rsquo;t need to pay extra for court rental – just the coach&rsquo;s fee.</li>
<li><strong>Ask Around:</strong> Chat with your tennis friends or hitting partners. They might have had good experiences with a coach and can give you a recommendation.</li>
<li><strong>Online Search:</strong> Some coaches have their own websites with contact details. You can even reach out to people in the tennis community (like me, if you need a suggestion!).</li>
</ul>
<ul>
<li><strong>Private or Group:</strong> You can usually choose between one-on-one lessons or cheaper group sessions.</li>
<li><strong>Cost:</strong> Expect to pay around €50-€60 per hour for the coach&rsquo;s time, plus court fees if applicable.</li>
</ul>
<h2 id="club-activities--official-competitions">Club Activities &amp; Official Competitions</h2>
<p>This is where the Dutch tennis scene really shines.</p>
<h3 id="club-level-events">Club-Level Events</h3>
<ul>
<li><strong>&ldquo;Toss&rdquo; Events:</strong> These are super popular. Usually, one evening a week, members just show up, have a coffee or beer, and get randomly paired up (&ldquo;tossed&rdquo;) for fun singles or doubles matches. It&rsquo;s very social and a great way to meet people.</li>
<li><strong>Ladder Competitions:</strong> A bit more serious than toss, but still unofficial (so it doesn&rsquo;t affect your official rating). You join a ladder in your club, challenge people around your rank, and try to climb up. You usually schedule matches with your opponent when it suits you both. You can often choose how many matches you want to play (e.g., one every two weeks, or more if you&rsquo;re keen!).</li>
</ul>
<h3 id="official-knltb-events-tournaments--competition">Official KNLTB Events (Tournaments &amp; Competition)</h3>
<p>The KNLTB is the Royal Dutch Lawn Tennis Association. Playing in their official events can affect your national tennis rating.</p>
<h4 id="tournaments">Tournaments</h4>
<ul>
<li><strong>How to Join:</strong> You&rsquo;ll need to be a club member or buy a <a href="https://toernooipas.knltb.nl/" target="_blank" >KNLTB tournament pass</a>
 (€25 per year).</li>
<li><strong>Finding Them:</strong> Check the <a href="https://mijnknltb.toernooi.nl/tournaments" target="_blank" >KNLTB tournaments website</a>
. You can filter by location, level, singles/doubles, etc.</li>
<li><strong>When:</strong> Mostly April to August, peaking in May and June, but there are tournaments year-round.</li>
<li><strong>Format:</strong> Often week-long (e.g., Saturday to the following Sunday) knockout events. Sometimes there are one-day tournaments. If there aren&rsquo;t many players in your category, it might be a round-robin (everyone plays each other).</li>
</ul>
<h4 id="competitie-league-competition">Competitie (League Competition)</h4>
<ul>
<li><strong>Team-Based:</strong> You need to be part of a club and join or form a team (men&rsquo;s, women&rsquo;s, or mixed).</li>
<li><strong>How it Works:</strong> Your team plays against other teams, usually on a set day each week for a season. There are different formats (e.g., a certain number of singles and doubles matches per team encounter). There&rsquo;s typically a <strong>spring competition</strong> (around March-May) and a <strong>fall competition</strong> (around September-October). Since it&rsquo;s team-based, you can try to find a team looking for players, and many teams also need substitutes now and then.</li>
<li><strong>Your Rating:</strong> Only the matches <em>you</em> personally play will affect your KNLTB rating, not your team&rsquo;s overall win or loss for the day.</li>
</ul>
<h3 id="your-knltb-rating">Your KNLTB Rating</h3>
<p>When you join the <a href="https://mijnknltb.toernooi.nl/" target="_blank" >KNLTB</a>
 (either through a club or a tournament pass), you&rsquo;ll be asked to self-rate yourself.</p>
<ul>
<li><strong>The Scale:</strong> It&rsquo;s from 1 (pro level) to 10 (complete beginner). This is the <em>opposite</em> of the US system, so a lower number is better.</li>
<li><strong>Starting Point:</strong> If you&rsquo;ve played matches and are comfortable with strokes and serving, you might start at an 8.</li>
<li><strong>How it Changes:</strong> Winning official tournament or competition matches, especially against someone with a better (lower number) rating, will improve your rating (make your number smaller). Losing, especially to someone with a worse (higher number) rating, will make your rating worse (make your number bigger).</li>
<li><strong>Doubles:</strong> Your doubles rating is separate and works similarly, based on the average rating of your team versus your opponents.</li>
</ul>
<p>I started at an 8 for both singles and doubles and have bounced between 9 and 7 as I&rsquo;ve played more.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2025/20250508-tv-linnaeushof-tennis-netherlands-min.jpg#center"/> <figcaption>
            <p>TV Linnaeushof club in Amsterdam</p>
        </figcaption>
</figure>

<h2 id="how-much-does-it-all-cost">How Much Does It All Cost?</h2>
<p>There are universal costs that you pay when you play tennis anywhere (rackets, shoes, balls). But here are some Netherlands-specific ones:</p>
<ul>
<li><strong>Club Membership:</strong> Roughly €100 to €300+ per year, depending on the club&rsquo;s location and facilities. Amsterdam city center clubs tend to be pricier.</li>
<li><strong>Coaching:</strong> Around €50-€60 per hour for the coach, plus court fees if you&rsquo;re not taking lessons at your own club.</li>
<li><strong>Tournament/Competition Fees:</strong> Usually around €15 to enter a tournament. Competition fees are often paid as a team and might be around €10 per player per season.</li>
<li><strong>Court Rental (if not a member):</strong>
<ul>
<li><strong>Outdoor (Summer):</strong> Around €20+ per hour in areas like Amsterdam.</li>
<li><strong>Indoor (Winter):</strong> Much more expensive, as courts are limited. Expect €40-€50+ per hour, especially at peak times.</li>
</ul>
</li>
<li><strong>Bar Duty Buy-Out:</strong> If you opt out of your &ldquo;bardienst,&rdquo; it&rsquo;s usually around €30 per shift. So, if you have three shifts, that&rsquo;s an extra €90.</li>
</ul>
<h2 id="the-tennis-season">The Tennis Season</h2>
<p>You can pretty much play tennis all year round if you don&rsquo;t mind the cost of indoor courts in winter.</p>
<ul>
<li><strong>Outdoor Season:</strong> Generally from mid-March to mid-November (about 8 months). Yes, it rains, and yes, it can be windy. But I&rsquo;ve found that most of the time, the weather is fine for playing. Light rain is often playable, especially on artificial surfaces. Serious wind that truly ruins a game is rare, maybe 10% of the time in my experience. July and August can get hot in the middle of the day.</li>
<li><strong>Indoor Season:</strong> Mid-November to mid-March. You&rsquo;ll need to find and book indoor courts for December, January, and February. Although they can be expensive, you <em>can</em> find indoor courts in winter. It&rsquo;s often easier and cheaper if you&rsquo;re lucky enough to be available to play during off-peak hours. I&rsquo;ve personally played at about 5 different indoor facilities around Amsterdam and one in Haarlem.</li>
</ul>
<h2 id="getting-your-tennis-gear">Getting Your Tennis Gear</h2>
<p>If you&rsquo;re new to tennis or just setting up in the Netherlands, you&rsquo;ll need some gear:</p>
<ul>
<li><strong>Tennis Racket:</strong> Obvious, but important.</li>
<li><strong>Proper Tennis Shoes:</strong> Don&rsquo;t play in running shoes. Tennis shoes are designed for side-to-side movements and will help prevent injuries.</li>
<li><strong>Tennis Balls:</strong> You&rsquo;ll need to buy cans of balls regularly.</li>
<li><strong>Racket Restringing:</strong> If you play often, your strings will eventually break or lose tension.</li>
<li><strong>Tennis Clothes:</strong> Comfortable sportswear.</li>
</ul>
<h3 id="where-to-buy">Where to Buy</h3>
<p>I do most of my tennis-specific shopping online. Some websites I&rsquo;ve used and can recommend include <a href="https://www.tennispro.nl" target="_blank" >tennispro.nl</a>
, <a href="https://www.tennis-point.nl/" target="_blank" >tennis-point.nl</a>
, <a href="https://www.tennisdirect.nl/" target="_blank" >tennisdirect.nl</a>

, <a href="https://www.tenniswarehouse-europe.com/" target="_blank" >tenniswarehouse-europe.com</a>
, <a href="https://www.kctennis.nl" target="_blank" >kctennis.nl</a>
, and <a href="https://www.tennis-voordeel.nl/" target="_blank" >tennis-voordeel.nl</a>
.</p>
<p>Tennis equipment can get expensive, but here are a few tips:</p>
<ul>
<li><strong>Look for Discounts:</strong> Online stores often have sales, especially around Black Friday, Christmas, or during Grand Slam tournaments.</li>
<li><strong>Buy in Bulk:</strong> For items you use frequently like tennis balls, racket strings, or overgrips, buying larger packs (e.g., 12 cans of balls, a pack of 60 overgrips) is usually cheaper in the long run.</li>
<li><strong>Test Rackets Before Buying:</strong> If you&rsquo;re unsure about a new racket model, many online shops offer a racket testing service. For a small fee (around €10-€15), they&rsquo;ll send you a test racket to try for a week or two. This is much cheaper than buying a €200-€300 racket you might not like! You can try a few different models this way before committing.</li>
</ul>
<h2 id="a-few-things-to-know">A Few Things to Know</h2>
<p>Based on my experience, here are a couple of common practices you&rsquo;ll see on and off the court:</p>
<ul>
<li><strong>Sweeping the Court:</strong> This isn&rsquo;t unique to the Netherlands but is very common due to the many clay and smash courts. After you finish playing (a practice session or a match), you need to sweep the court with the large brooms provided. This keeps it in good condition for the next players. In an official match, you&rsquo;ll sweep your half, and your opponent will sweep theirs.</li>
<li><strong>Post-Match Socializing:</strong> Dutch tennis community is generally quite social. It&rsquo;s common for the winning player or team in a tournament event to offer their opponent(s) a drink at the club bar after the match. Many people will hang around and chat for a bit. Competition is even more of a social event. The home team usually provides snacks and will buy drinks (coffee, tea, etc.) for the visiting team. Before, between, and especially after all the matches are done, both teams will often sit together, have refreshments, and chat about tennis and life in general.</li>
</ul>
<p>Playing tennis in the Netherlands has been a fantastic experience for me. It&rsquo;s a great way to stay active, meet new people, and feel more connected to local life. While it might seem a bit different at first, the system is well-organized, and there are tons of opportunities to play at every level.</p>
<p>I hope this guide helps you navigate the Dutch tennis scene. Grab your racket, find a club or a partner, and enjoy the game! Good luck, and maybe I&rsquo;ll see you on the court. Feel free to reach out to me via email if you&rsquo;re an intermediate tennis player in the Netherlands and looking for new people to play with.</p>
<h2 id="more-resources">More Resources</h2>
<ul>
<li>Expat Info Holland: <a href="https://expatinfoholland.nl/help-guides/sports/playing-tennis-in-netherlands/" target="_blank" >Tennis in Netherlands</a>
</li>
</ul>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Pure Independence</title>
      <link>https://saeedesmaili.com/notes/pure-independence/</link>
      <pubDate>Sat, 03 May 2025 11:54:14 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/pure-independence/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;When you’re independent you feel less desire to impress strangers, which can be an enormous financial and psychological cost.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The wild thing about all this effort is how easy it is to overestimate how much other people are thinking about you. No one is thinking about you as much as you are. They are too busy thinking about themselves.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Even when people are thinking about you, they often do it just to contextualize their own life. When someone looks at you and thinks, “I like her sweater,” what they actually may be thinking is, “That sweater would look nice on me.” I once called this the man-in-the-car-paradox: When you see someone driving a nice car, rarely do you think, “Wow, that driver is cool.” What you think is, “If I drove that car, people would think I’m cool.” Do you see the irony?&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<blockquote>
<p>When you’re independent you feel less desire to impress strangers, which can be an enormous financial and psychological cost.</p></blockquote>
<blockquote>
<p>The wild thing about all this effort is how easy it is to overestimate how much other people are thinking about you. No one is thinking about you as much as you are. They are too busy thinking about themselves.</p></blockquote>
<blockquote>
<p>Even when people are thinking about you, they often do it just to contextualize their own life. When someone looks at you and thinks, “I like her sweater,” what they actually may be thinking is, “That sweater would look nice on me.” I once called this the man-in-the-car-paradox: When you see someone driving a nice car, rarely do you think, “Wow, that driver is cool.” What you think is, “If I drove that car, people would think I’m cool.” Do you see the irony?</p></blockquote>
<blockquote>
<p>When you’re truly independent you rid yourself of this silly burden. It can be such a relief when you do. Only when you stop caring what strangers might think of you do you realize how much effort you may have previously put into their validation.</p></blockquote>
<p>But also:</p>
<blockquote>
<p>Independence does not mean you don’t care what anyone thinks of you. It means that you strategically decide whose attention you seek.</p></blockquote>
<blockquote>
<p>When you independently choose who you want to include in your small circle of life, the actions you take, the work you pursue, and even the values you hold can completely flip. Rather than trying to appease everyone (foolish, impossible) you select the life you want to live and focus your attention on a smaller group of people whose love and support you deeply desire.</p></blockquote>
<p><a href="https://collabfund.com/blog/pure-independence/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Never Been Easier to Learn</title>
      <link>https://saeedesmaili.com/notes/never-been-easier-to-learn/</link>
      <pubDate>Sat, 26 Apr 2025 14:36:15 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/never-been-easier-to-learn/</guid>
      <description>&lt;p&gt;In a discussion about LLMs and their impact on learning, &lt;code&gt;gchamonlive&lt;/code&gt; writes on Hackernews:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We can finally just take a photo of a textbook problem that has no answer reference and no discussion about it and prompt an LLM to help us understand what&amp;rsquo;s missing in our understanding of the problem, if our solution is plausible and how we could verify it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;LLM changed nothing though. It&amp;rsquo;s just boosting people&amp;rsquo;s intention. If your intention is to learn, you are in luck! It&amp;rsquo;s never been easier to teach yourself some skill for free. But if you just want to be a poser and fake it until you make it, you are gonna be brainrot waaaay faster than usual.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>In a discussion about LLMs and their impact on learning, <code>gchamonlive</code> writes on Hackernews:</p>
<blockquote>
<p>We can finally just take a photo of a textbook problem that has no answer reference and no discussion about it and prompt an LLM to help us understand what&rsquo;s missing in our understanding of the problem, if our solution is plausible and how we could verify it.</p></blockquote>
<blockquote>
<p>LLM changed nothing though. It&rsquo;s just boosting people&rsquo;s intention. If your intention is to learn, you are in luck! It&rsquo;s never been easier to teach yourself some skill for free. But if you just want to be a poser and fake it until you make it, you are gonna be brainrot waaaay faster than usual.</p></blockquote>
<p>I wholeheartedly agree with this take. While internet forums are full of arguments on benefits and dangers of LLMs on various aspects of human life including learning, from a personal point of view it&rsquo;s a waste of resources and opportunities if we don&rsquo;t make use of the recent advancements in LLMs to learn. It can be a new language (I&rsquo;m getting LLMs&rsquo; help to learn Dutch these days), a technical skill, or many other things.</p>
<p><a href="https://news.ycombinator.com/item?id=43792136" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Released a new tool: llm-url-markdown</title>
      <link>https://saeedesmaili.com/notes/released-a-new-tool-llm-url-markdown/</link>
      <pubDate>Wed, 16 Apr 2025 19:02:22 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/released-a-new-tool-llm-url-markdown/</guid>
      <description>&lt;p&gt;Recently I started using &lt;a href=&#34;https://simonwillison.net/&#34; target=&#34;_blank&#34; &gt;Simon Willison&lt;/a&gt;
&amp;rsquo;s CLI tool which is conveniently called &lt;a href=&#34;https://llm.datasette.io&#34; target=&#34;_blank&#34; &gt;llm&lt;/a&gt;
. He introduced a particularly useful &lt;a href=&#34;https://llm.datasette.io/en/stable/fragments.html&#34; target=&#34;_blank&#34; &gt;fragments&lt;/a&gt;
 feature in a recent version of the tool, that allows the user to provide extra information to the llm when working with long context models.&lt;/p&gt;
&lt;p&gt;Simon himself developed a &lt;a href=&#34;https://github.com/simonw/llm-hacker-news&#34; target=&#34;_blank&#34; &gt;llm-hacker-news&lt;/a&gt;
 plugin that fetches all the comments in a HackerNews discussion and provides that to llm as an extra context (i.e. a fragment).&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Recently I started using <a href="https://simonwillison.net/" target="_blank" >Simon Willison</a>
&rsquo;s CLI tool which is conveniently called <a href="https://llm.datasette.io" target="_blank" >llm</a>
. He introduced a particularly useful <a href="https://llm.datasette.io/en/stable/fragments.html" target="_blank" >fragments</a>
 feature in a recent version of the tool, that allows the user to provide extra information to the llm when working with long context models.</p>
<p>Simon himself developed a <a href="https://github.com/simonw/llm-hacker-news" target="_blank" >llm-hacker-news</a>
 plugin that fetches all the comments in a HackerNews discussion and provides that to llm as an extra context (i.e. a fragment).</p>
<p>Today I developed and released a simple python library which is a plugin for llm, and introduces a new fragment type to this tool. It&rsquo;s called <a href="https://github.com/saeedesmaili/llm-url-markdown" target="_blank" >llm-url-markdown</a>
, and uses the <a href="https://jina.ai/reader/" target="_blank" >Jina Reader</a>
 API to fetch the markdown content of a web url and provide that as a fragment to llm.</p>
<p>To use this plugin, first you need to make sure you have llm installed:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>brew install llm
</span></span></code></pre></div><p>or:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install llm
</span></span></code></pre></div><p>Then setup an API key for OpenAI (or follow llm&rsquo;s docs to setup local models or other cloud LLMs):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>llm keys set openai
</span></span></code></pre></div><p>Next, install <code>llm-url-markdown</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>llm install llm-url-markdown
</span></span></code></pre></div><p>That&rsquo;s it! Now you can use it with <code>md:</code> like following:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>llm -f md:github.com/simonw/llm <span style="color:#e6db74">&#39;What is the main goal of this LLM tool?&#39;</span> -m gpt-4o-mini
</span></span></code></pre></div><p><a href="https://github.com/saeedesmaili/llm-url-markdown" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Comparing local large language models for alt-text generation</title>
      <link>https://saeedesmaili.com/notes/comparing-local-large-language-models-for-alt-text-generation/</link>
      <pubDate>Mon, 31 Mar 2025 13:21:42 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/comparing-local-large-language-models-for-alt-text-generation/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m always interested in reading how people use language models for automating boring tasks or performing what they wouldn&amp;rsquo;t be able to do manually. In his post, Dries explores using several local language models for generating alt text for 10,000 photos! This is double-interesting topic to me, since &lt;a href=&#34;https://saeedesmaili.com/photos/&#34; target=&#34;_blank&#34; &gt;I also love photography&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I recommend reading the &lt;a href=&#34;https://dri.es/comparing-local-llms-for-alt-text-generation&#34; target=&#34;_blank&#34; &gt;original post&lt;/a&gt;
 if you&amp;rsquo;re interested in generating alt text with local llm, specially since he has posted a couple of follow up posts on updating his approach.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I&rsquo;m always interested in reading how people use language models for automating boring tasks or performing what they wouldn&rsquo;t be able to do manually. In his post, Dries explores using several local language models for generating alt text for 10,000 photos! This is double-interesting topic to me, since <a href="https://saeedesmaili.com/photos/" target="_blank" >I also love photography</a>
.</p>
<p>I recommend reading the <a href="https://dri.es/comparing-local-llms-for-alt-text-generation" target="_blank" >original post</a>
 if you&rsquo;re interested in generating alt text with local llm, specially since he has posted a couple of follow up posts on updating his approach.</p>
<p>His blog post made me curious in what type of photography he does, so I was fascinated to find out <a href="https://dri.es/photos" target="_blank" >he publishes many photos on his blog</a>
, neatly categorized in <a href="https://dri.es/albums" target="_blank" >photo albums</a>
. This is what I always wanted to do, but the setup sounds like too much work, but I will add a photo album section to my website at some post.</p>
<p>I also quite liked <a href="https://dri.es/album/miscellaneous-2025/" target="_blank" >his style of photography</a>
, explored a few of his recent photo albums. As he&rsquo;s taking candid photos of his own life, I was curious what camera he uses, it must be a portable one. Searching for photography posts on his blog, lead to the <a href="https://dri.es/analyzing-my-photography-history" target="_blank" >analysis of his photography history</a>
, in which he mentions he&rsquo;s been using a Leica M10-R as of 2022. I currently own a Sony a7cii, it is one of the most portable full-frame cameras out there, but I still find it cumbersome to carry when I don&rsquo;t intentionally go out for photography. That&rsquo;s why I purchased a second hand Ricoh griii last week to hopefully make it easier for myself to always carry a camera with me and take good photos of life.</p>
<p><a href="https://dri.es/comparing-local-llms-for-alt-text-generation" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Could That Meeting Be An Email?</title>
      <link>https://saeedesmaili.com/notes/could-that-meeting-be-an-email/</link>
      <pubDate>Mon, 31 Mar 2025 12:20:54 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/could-that-meeting-be-an-email/</guid>
      <description>&lt;p&gt;I liked this post&amp;rsquo;s rules of thumbs for when to avoid scheduling meetings at work:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Before calling a meeting, ask yourself: What&amp;rsquo;s the goal? If it&amp;rsquo;s just to convey information—like a status update—then yes, this meeting can (and should) be an email.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Meetings should be dialogues, not monologues. If all you&amp;rsquo;re doing is delivering information that doesn&amp;rsquo;t require back-and-forth discussion, spare your team the calendar block and just send an email.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I liked this post&rsquo;s rules of thumbs for when to avoid scheduling meetings at work:</p>
<blockquote>
<p>Before calling a meeting, ask yourself: What&rsquo;s the goal? If it&rsquo;s just to convey information—like a status update—then yes, this meeting can (and should) be an email.</p></blockquote>
<blockquote>
<p>Meetings should be dialogues, not monologues. If all you&rsquo;re doing is delivering information that doesn&rsquo;t require back-and-forth discussion, spare your team the calendar block and just send an email.</p></blockquote>
<blockquote>
<p>Many of the worst offenders aren&rsquo;t one-off meetings—they&rsquo;re recurring meetings that have outlived their usefulness. A weekly status update that&rsquo;s just a series of individual reports? That&rsquo;s not a meeting—it&rsquo;s a series of monologues that could be handled asynchronously.</p></blockquote>
<blockquote>
<p>On the flip side, some conversations shouldn&rsquo;t happen over email—especially when they involve complexity, emotion, or collaboration. These are the types of interactions where being able to read tone, ask clarifying questions, and get immediate feedback is essential.</p></blockquote>
<p><a href="https://davidburkus.com/2025/02/could-that-meeting-be-an-email/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Building a Personal Content Recommendation System, Part Two: Data Processing and Cleaning</title>
      <link>https://saeedesmaili.com/posts/building-a-personal-content-recommendation-system-data-processing-and-cleaning/</link>
      <pubDate>Wed, 26 Mar 2025 22:32:31 +0100</pubDate>
      <guid>https://saeedesmaili.com/posts/building-a-personal-content-recommendation-system-data-processing-and-cleaning/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://saeedesmaili.com/posts/building-a-content-recommendation-system-for-myself-part-one/&#34; target=&#34;_blank&#34; &gt;part one of this blog series&lt;/a&gt;
, I explored the motivation behind developing a personal recommendation system. The main goals are to learn how recommendation systems work and to build a tool that helps me find interesting blog posts and articles from feeds where only 1 in 20 posts might match my content interests.&lt;/p&gt;
&lt;p&gt;If you are interested in the technical implementation, the complete codebase is available in &lt;a href=&#34;https://github.com/saeedesmaili/content-recommendation&#34; target=&#34;_blank&#34; &gt;this github repository&lt;/a&gt;
.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>In <a href="https://saeedesmaili.com/posts/building-a-content-recommendation-system-for-myself-part-one/" target="_blank" >part one of this blog series</a>
, I explored the motivation behind developing a personal recommendation system. The main goals are to learn how recommendation systems work and to build a tool that helps me find interesting blog posts and articles from feeds where only 1 in 20 posts might match my content interests.</p>
<p>If you are interested in the technical implementation, the complete codebase is available in <a href="https://github.com/saeedesmaili/content-recommendation" target="_blank" >this github repository</a>
.</p>
<h2 id="creating-an-articles-dataset">Creating an Articles Dataset</h2>
<h3 id="step-1-initial-list-of-liked-articles">Step 1: Initial List of Liked Articles</h3>
<p>Daily browsing of RSS feeds involves scanning through many articles, where sometimes engaging titles lead me to read their opening paragraphs. Through <a href="https://saeedesmaili.com/posts/my-content-consumption-workflow/" target="_blank" >my established content workflow</a>
, I save interesting items to Pocket using Inoreader&rsquo;s built-in feature.</p>
<p>Initially, I planned to use a list of RSS items that I had clicked on. However, Inoreader doesn&rsquo;t provide an API to access this reading history, which led me to explore other options.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2025/20250326-my-rss-based-content-consumption-workflow.png#center"/> <figcaption>
            <p>My RSS-based Content Consumption Workflow</p>
        </figcaption>
</figure>

<p>Looking further into my workflow, I found a better solution: my archived items in Pocket. While I regularly read through my Pocket items, I never delete them - just archive them. This gave me a valuable collection of reading history.</p>
<p>Using the <a href="https://getpocket.com/developer/docs/v3/retrieve" target="_blank" >Pocket API</a>
, I retrieved around 4,000 URLs, dating back to December 2022. Though some archived items might be less relevant now, the dataset reflects my reading interests well. Later, I could add features like upvoting and downvoting to refine the content selection, but that&rsquo;s beyond the current scope.</p>
<p>Each item in the dataset includes this basic information:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;pocket_item_id&#34;</span>: <span style="color:#ae81ff">5598506</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;given_url&#34;</span>: <span style="color:#e6db74">&#34;https://nat.org/&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;resolved_url&#34;</span>: <span style="color:#e6db74">&#34;http://nat.org/&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;title&#34;</span>: <span style="color:#e6db74">&#34;Nat Friedman&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;time_added&#34;</span>: <span style="color:#ae81ff">1736940058</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;word_count&#34;</span>: <span style="color:#ae81ff">451</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;domain&#34;</span>: <span style="color:#e6db74">&#34;nat.org&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h3 id="step-2-text-content-of-articles">Step 2: Text Content of Articles</h3>
<p>To build an effective recommendation model, we need the actual content of each URL, not just its metadata, but unfortunately Pocket doesn&rsquo;t provide that. While I love writing scrapers, for this project I want to focus on developing the recommendation model itself.</p>
<p>The <a href="https://jina.ai/reader/" target="_blank" >Jina Reader API</a>
 offers a straightforward solution, converting webpage content into markdown format. Here&rsquo;s an example of what we get (shortened version, full content available <a href="https://r.jina.ai/https://nat.org/" target="_blank" >here</a>
):</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 1240 329"
      >
      <g transform='translate(8,16)'>
<path d='M 212,216 L 220,200' fill='none' stroke='currentColor'></path>
<path d='M 304,208 L 312,192' fill='none' stroke='currentColor'></path>
<path d='M 600,192 L 608,176' fill='none' stroke='currentColor'></path>
<circle cx='0' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='0' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='0' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='0' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='0' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='0' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='0' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='0' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='312' cy='192' r='6' stroke='currentColor' fill='#fff'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='0' y='292' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='292' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='292' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='32' y='228' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='32' y='244' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='40' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='212' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='228' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='48' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='292' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='244' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='56' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='292' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='292' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='292' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='244' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='292' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='88' y='212' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='88' y='260' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='96' y='196' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='96' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='96' y='292' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='180' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='260' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='292' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='120' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='120' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='292' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='212' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='136' y='292' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='244' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='152' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='260' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='152' y='292' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='160' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='244' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='168' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='292' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='180' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='244' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='192' y='260' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='208' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='208' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='216' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='244' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='216' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='224' y='180' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='224' y='196' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='224' y='244' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='224' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='232' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='240' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='260' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='248' y='244' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='256' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='212' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='256' y='244' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='256' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='264' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='264' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='212' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='264' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='212' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='272' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='272' y='260' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='280' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='288' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='288' y='180' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='288' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='288' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='296' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='244' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='296' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='304' y='196' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='304' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='304' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='312' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='312' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='320' y='84' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='320' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='244' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='320' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='328' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='196' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='328' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='328' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='328' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='336' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='336' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='336' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='336' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='336' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='344' y='196' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='344' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='344' y='244' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='344' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='352' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='180' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='352' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='352' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='352' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='260' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='360' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='360' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='196' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='360' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='368' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='368' y='212' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='368' y='244' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='368' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='376' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='376' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='376' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='376' y='212' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='376' y='244' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='376' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='384' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='384' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='384' y='196' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='384' y='212' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='384' y='244' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='384' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='392' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='392' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='392' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='392' y='212' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='392' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='400' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='400' y='196' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='400' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='400' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='408' y='164' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='408' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='408' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='408' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='408' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='416' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='416' y='180' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='416' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='416' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='416' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='416' y='260' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='424' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='424' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='424' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='424' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='424' y='244' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='424' y='260' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='432' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='432' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='432' y='196' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='432' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='432' y='244' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='432' y='260' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='440' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='440' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='440' y='212' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='440' y='244' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='440' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='448' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='448' y='196' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='448' y='212' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='448' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='448' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='456' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='456' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='456' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='456' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='456' y='244' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='456' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='464' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='464' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='464' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='464' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='464' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='472' y='164' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='472' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='472' y='196' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='472' y='212' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='472' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='472' y='260' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='480' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='480' y='180' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='480' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='480' y='212' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='480' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='480' y='260' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='488' y='164' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='488' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='488' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='488' y='212' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='488' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='488' y='260' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='496' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='496' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='496' y='212' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='496' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='496' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='504' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='504' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='504' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='504' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='512' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='512' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='512' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='512' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='520' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='520' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='520' y='244' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='520' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='528' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='528' y='196' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='528' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='528' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='536' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='536' y='196' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='536' y='244' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='536' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='544' y='180' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='544' y='196' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='544' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='544' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='552' y='180' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='552' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='552' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='552' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='560' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='560' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='560' y='244' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='560' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='568' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='568' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='568' y='244' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='568' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='576' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='576' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='576' y='244' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='576' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='584' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='584' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='584' y='260' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='592' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='592' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='592' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='600' y='180' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='600' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='608' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='608' y='260' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='616' y='180' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='616' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='616' y='260' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='624' y='180' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='624' y='196' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='624' y='260' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='632' y='180' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='632' y='196' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='640' y='180' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='640' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='648' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='648' y='196' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='656' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='656' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='664' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='664' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='672' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='672' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='680' y='180' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='680' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='688' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='688' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='696' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='696' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='704' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='704' y='196' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='712' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='712' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='720' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='720' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='728' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='728' y='196' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='736' y='180' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='736' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='744' y='180' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='744' y='196' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='752' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='752' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='760' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='760' y='196' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='768' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='768' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='776' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='776' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='784' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='784' y='196' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='792' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='792' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='800' y='180' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='800' y='196' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='808' y='180' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='808' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='816' y='180' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='816' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='824' y='180' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='824' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='832' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='832' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='840' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='840' y='196' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='848' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='856' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='864' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='872' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='880' y='180' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='888' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='896' y='180' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='904' y='180' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='912' y='180' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='920' y='180' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='928' y='180' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='936' y='180' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='944' y='180' fill='currentColor' style='font-size:1em'>Q</text>
<text text-anchor='middle' x='952' y='180' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='960' y='180' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='968' y='180' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='976' y='180' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='984' y='180' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='992' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1000' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1008' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1016' y='180' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='1024' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1032' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1040' y='180' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='1048' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1056' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1064' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1072' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1080' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1088' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1096' y='180' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='1104' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1112' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1120' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1128' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1136' y='180' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='1144' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1152' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1160' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1168' y='180' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='1176' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1184' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1192' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1200' y='180' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='1208' y='180' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='1216' y='180' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='1224' y='180' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<p>The converted content is excellent, but it has two main challenges:</p>
<ol>
<li>Markdown formatting adds unnecessary complexity for our use case. Plain text would work better.</li>
<li>Articles vary greatly in length - from short paragraphs to long essays - which could make comparing them via semantic similarity difficult later.</li>
</ol>
<figure class="align-center ">
    <img loading="lazy" src="/images/2025/20250326-distribution-of-documents-lengths-in-tokens.png#center"/> <figcaption>
            <p>Distribution of Documents Lengths (in Tokens)</p>
        </figcaption>
</figure>

<h3 id="step-3-summarizing-the-markdown-content">Step 3: Summarizing the Markdown Content</h3>
<p>To solve both issues at once, I used the <code>gemini-2.0-flash</code> model to create consistent-length summaries of each document. Here&rsquo;s an example summary for <code>https://nat.org/</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 5328 89"
      >
      <g transform='translate(8,16)'>
<circle cx='3496' cy='64' r='6' stroke='currentColor' fill='#fff'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='384' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='400' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='408' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='416' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='424' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='432' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='440' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='448' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='464' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='472' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='472' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='472' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='480' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='488' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='488' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='496' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='496' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='504' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='504' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='512' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='512' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='512' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='520' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='520' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='528' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='528' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='536' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='536' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='536' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='544' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='544' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='552' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='552' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='552' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='560' y='4' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='560' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='568' y='4' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='568' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='568' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='576' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='576' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='584' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='584' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='584' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='592' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='592' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='600' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='600' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='600' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='608' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='608' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='608' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='616' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='616' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='616' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='624' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='624' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='624' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='632' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='632' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='640' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='640' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='640' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='648' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='648' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='648' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='656' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='656' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='664' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='664' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='672' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='672' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='672' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='680' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='680' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='680' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='688' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='696' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='696' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='704' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='704' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='704' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='712' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='712' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='720' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='720' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='720' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='728' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='728' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='728' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='736' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='736' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='744' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='744' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='744' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='752' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='752' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='760' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='760' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='760' y='68' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='768' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='768' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='768' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='776' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='784' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='784' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='792' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='792' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='792' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='800' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='800' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='800' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='808' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='808' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='816' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='816' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='816' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='824' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='824' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='824' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='832' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='832' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='832' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='840' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='840' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='840' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='848' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='848' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='848' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='856' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='856' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='864' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='864' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='864' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='872' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='872' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='880' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='880' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='888' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='888' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='888' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='896' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='896' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='904' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='904' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='904' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='912' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='912' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='920' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='920' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='928' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='928' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='936' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='936' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='944' y='4' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='944' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='944' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='952' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='952' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='952' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='960' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='960' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='960' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='968' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='968' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='976' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='976' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='976' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='984' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='984' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='984' y='68' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='992' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='992' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1000' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1000' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='1000' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1008' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1008' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1008' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1016' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1016' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1024' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1024' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='1024' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1032' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1032' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1032' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1040' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1040' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1048' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1048' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1056' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1056' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1056' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1064' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1064' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1072' y='4' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='1072' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1072' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1080' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1080' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1088' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1088' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1088' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1096' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1096' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1096' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1104' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1104' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1112' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1112' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1112' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1120' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1120' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1120' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1128' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1136' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='1136' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1136' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1144' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1144' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1152' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1152' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1152' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1160' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1160' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1168' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1168' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1168' y='68' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='1176' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1176' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1176' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1184' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1184' y='36' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='1184' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1192' y='4' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1192' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='1200' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1200' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='1200' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1208' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1216' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1216' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1216' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1224' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1224' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1224' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1232' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1232' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1232' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1240' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1240' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1240' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='1248' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1248' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='1256' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1256' y='68' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='1264' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1264' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='1264' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1272' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1272' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1280' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1280' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1288' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1288' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1288' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1296' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1296' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1304' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1304' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1304' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='1312' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1312' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1312' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1320' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1320' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1320' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1328' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1328' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1328' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='1336' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1344' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1344' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1352' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1352' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1352' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1360' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1360' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1360' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1368' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1368' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1376' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1376' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1384' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1384' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1392' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1392' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1392' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1400' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1400' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1400' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1408' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1416' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='1416' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1416' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1424' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1424' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1424' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1432' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1432' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1432' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1440' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1440' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1440' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1448' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1456' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1456' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1456' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1464' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1464' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1464' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='1472' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1480' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1480' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1480' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1488' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1488' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1488' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1496' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1496' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1504' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1504' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1512' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1512' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1512' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1520' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1520' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1528' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1528' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1528' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1536' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1536' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1536' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1544' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1552' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1552' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1552' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1560' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='1560' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1560' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1568' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1568' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1568' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1576' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1584' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1584' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1584' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1592' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1592' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1592' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1600' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1600' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1600' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1608' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1608' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1616' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1616' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1616' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1624' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1624' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1624' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1632' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1632' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1632' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1640' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1640' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1648' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1648' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1648' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1656' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1656' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1664' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1664' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1664' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1672' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1672' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1680' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1680' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1680' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1688' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1688' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1696' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1696' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1704' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1704' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1704' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1712' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1712' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1712' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1720' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='1720' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1720' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1728' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1728' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1736' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1744' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1744' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1744' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1752' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1752' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1752' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1760' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1760' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1768' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='1768' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1776' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='1776' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1776' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1784' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='1784' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1784' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1792' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1792' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1800' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1800' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1800' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1808' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1808' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1808' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1816' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1816' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1824' y='4' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='1824' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1832' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1832' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1832' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1840' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1840' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1840' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1848' y='4' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='1848' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1856' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1856' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1864' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1864' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1864' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1872' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1872' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1880' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1880' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1888' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1888' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1888' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='1896' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1896' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1896' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1904' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1904' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1904' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1912' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1912' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1920' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='1920' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1920' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1928' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='1928' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1928' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1936' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='1936' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1944' y='4' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='1944' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1952' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1952' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1960' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1960' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1960' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1968' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1968' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1968' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1976' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1976' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1984' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='1984' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1992' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='1992' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1992' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2000' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='2000' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2000' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2008' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='2008' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2016' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2016' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2016' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2024' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2024' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='2032' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='2032' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2040' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2040' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2040' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2048' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2048' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2048' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2056' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2056' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2056' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2064' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2064' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2064' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2072' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2072' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2072' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2080' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2088' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2088' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2088' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2096' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2096' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2096' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2104' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='2104' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2112' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2112' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2120' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='2120' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2120' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2128' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2128' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2136' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2136' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2136' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2144' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2144' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2144' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2152' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='2152' y='36' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2152' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2160' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2160' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2168' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='2168' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2176' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2176' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2176' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2184' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2184' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2192' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2192' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2200' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='2200' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2200' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2208' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2208' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2216' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2216' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2224' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2224' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2224' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2232' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2232' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2240' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2240' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2240' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='2248' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2248' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2248' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2256' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2256' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2256' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2264' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2264' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2264' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='2272' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2272' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2280' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2280' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2288' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2288' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2288' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2296' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2296' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2304' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2304' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2304' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2312' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2312' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='2320' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2320' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2320' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2328' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2328' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2328' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2336' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2336' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2344' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2344' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2344' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2352' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2352' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='2352' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2360' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2360' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2368' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2368' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2368' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2376' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2376' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2376' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2384' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2384' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2384' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2392' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2392' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2400' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2400' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2400' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2408' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2408' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2408' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2416' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2416' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2416' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2424' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2424' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2432' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2432' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2432' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2440' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2440' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2440' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2448' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2448' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2448' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2456' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2456' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2456' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2472' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2472' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2472' y='68' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='2480' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2480' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2488' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2488' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2496' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2496' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2496' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2504' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='2504' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2504' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='2512' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2512' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2512' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2520' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2528' y='4' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='2528' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2528' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2536' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2536' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2536' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2544' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2544' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2544' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2552' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2552' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2560' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2560' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2560' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2568' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2568' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2568' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2576' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2576' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2576' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2584' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2584' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2592' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2592' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2600' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2600' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2600' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2608' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2608' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2608' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2616' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2616' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2624' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='2624' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2632' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2632' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2632' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2640' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2640' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2640' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2648' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2648' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2656' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2656' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2656' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2664' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2664' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2664' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2672' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2672' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2680' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2680' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2680' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2688' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2688' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2696' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2696' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2704' y='4' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='2704' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2704' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2712' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2712' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2712' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2720' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2720' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2720' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2728' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2728' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2736' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2744' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2744' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2744' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2752' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2752' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2752' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2760' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2760' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2768' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='2768' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2776' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2776' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='2776' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2784' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2784' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2792' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='2792' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2792' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2800' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2800' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2808' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2808' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2808' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2816' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2816' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2816' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2824' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2824' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2824' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2832' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2832' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2832' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2840' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2840' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2840' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2848' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2848' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2856' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2856' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2856' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2864' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2864' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2872' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2872' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2872' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2880' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2880' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2888' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2888' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2888' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2896' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2896' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2904' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2904' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2904' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2912' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2912' y='36' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2912' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2920' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2920' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2928' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2928' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2936' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2944' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2952' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2952' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2960' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='2960' y='68' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='2968' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2968' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2976' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2976' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2984' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2984' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2992' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2992' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='3000' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3000' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3008' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3008' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3016' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='3024' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='3032' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3032' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3040' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3040' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3048' y='68' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='3056' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='3056' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='3064' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3072' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3072' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='3080' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3088' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='3088' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3096' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3096' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3104' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3104' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3112' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3112' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='3120' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3128' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='3128' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3136' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='3144' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3152' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='3152' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='3160' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='3160' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='3168' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='3168' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3176' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='3192' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='3200' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3208' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3216' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3232' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='3240' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3248' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='3256' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='3272' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='3280' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3288' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='3296' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='3304' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3312' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3320' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3328' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3336' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='3352' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3360' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3368' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3384' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='3392' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3400' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='3408' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3416' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3424' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='3432' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3440' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='3448' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3456' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3464' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='3472' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3480' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3504' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='3512' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3520' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3528' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='3536' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='3544' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3552' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='3560' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='3568' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3576' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='3584' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='3600' y='68' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='3608' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3616' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3624' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3632' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3640' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3648' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3656' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='3672' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='3680' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3688' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='3696' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3704' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3712' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='3720' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='3728' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3736' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3744' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='3752' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3760' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3768' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='3784' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='3792' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='3800' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3808' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3816' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3832' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3840' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3848' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='3864' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='3872' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3880' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3888' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='3896' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='3904' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3920' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3928' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3936' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='3944' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3960' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='3968' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3976' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='3984' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3992' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='4000' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='4008' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4016' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4032' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='4040' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='4056' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='4064' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='4072' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='4080' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4088' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='4104' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='4112' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='4120' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4136' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='4144' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4152' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='4160' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4168' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4176' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='4184' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='4192' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4200' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4208' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='4216' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='4224' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4232' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='4248' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='4256' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='4264' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='4272' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4288' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='4296' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4304' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='4312' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4320' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='4328' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='4336' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='4344' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4352' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='4368' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4376' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4384' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='4400' y='68' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='4416' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='4424' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4432' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='4440' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='4448' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4456' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='4464' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4480' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='4488' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4496' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='4504' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4512' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4528' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4536' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='4544' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='4560' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='4568' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4576' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='4584' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4592' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='4600' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='4608' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4624' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='4632' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='4648' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='4656' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4664' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4680' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='4688' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='4696' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4704' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4720' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='4728' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='4736' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4744' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4760' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='4768' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4784' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='4792' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4800' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='4808' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='4816' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='4824' y='68' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='4832' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='4840' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='4856' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='4864' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='4872' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='4880' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4888' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='4904' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='4912' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='4920' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='4928' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='4944' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='4952' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='4968' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='4976' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='4984' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='5000' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='5008' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='5016' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='5024' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='5040' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='5048' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='5064' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='5072' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='5080' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='5088' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='5096' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='5104' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='5112' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='5128' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='5136' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='5144' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='5160' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='5168' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='5176' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='5184' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='5192' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='5200' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='5208' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='5216' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='5224' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='5240' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='5248' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='5256' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='5264' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='5272' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='5280' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='5288' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='5296' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='5304' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='5312' y='68' fill='currentColor' style='font-size:1em'>.</text>
</g>

    </svg>
  
</div>
<p>By having the model to wrap summaries in XML tags (<code>&lt;summary&gt; ... &lt;/summary&gt;</code>), I achieved two things:</p>
<ul>
<li>Clean extraction of just the summary text, in case LLM generates other texts before or after the summary (e.g. if it starts with <code>Sure, I can help you with summarizing the content ...</code>).</li>
<li>Easy identification of broken links and error pages. This helped remove 141 invalid entries, leaving me with 3,642 quality documents.</li>
</ul>
<p>The summaries created a more balanced distribution of text lengths:</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2025/20250326-distribution-of-summary-lengths-in-tokens.png#center"/> <figcaption>
            <p>Distribution of Summary Lengths (in Tokens)</p>
        </figcaption>
</figure>

<h2 id="next-steps">Next Steps</h2>
<p>The final dataset now contains well-organized entries with clean metadata and text summaries:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;pocket_item_id&#34;</span>: <span style="color:#ae81ff">5598506</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;given_url&#34;</span>: <span style="color:#e6db74">&#34;https://nat.org/&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;resolved_url&#34;</span>: <span style="color:#e6db74">&#34;http://nat.org/&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;title&#34;</span>: <span style="color:#e6db74">&#34;Nat Friedman&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;time_added&#34;</span>: <span style="color:#ae81ff">1736940058</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;word_count&#34;</span>: <span style="color:#ae81ff">451</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;domain&#34;</span>: <span style="color:#e6db74">&#34;nat.org&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;text&#34;</span>: <span style="color:#e6db74">&#34;Title: Nat Friedman\n\nURL Source: https://nat.org/\n\nMarkdown Content:\n\nI&#39;m an investor, ...&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;summary&#34;</span>: <span style="color:#e6db74">&#34;I&#39;m an investor, entrepreneur, and developer who&#39;s been online since 1991, considering it my true hometown. I went to ...&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>Next week, I&rsquo;ll work on creating a user profile by concatenating these text summaries and metadata and converting them into vectors using <a href="https://saeedesmaili.com/how-to-use-sentencetransformers-to-generate-text-embeddings-locally/" target="_blank" >Embedding models</a>
. I&rsquo;m also researching how modern recommendation systems work with transformers and LLMs, which will help guide this project. After all, learning is the main goal here.</p>
<p>I welcome any thoughts or questions about this series - feel free to reach out!</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Lessons in creating family photos that people want to keep</title>
      <link>https://saeedesmaili.com/notes/lessons-in-creating-family-photos-that-people-want-to-keep/</link>
      <pubDate>Sun, 23 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://saeedesmaili.com/notes/lessons-in-creating-family-photos-that-people-want-to-keep/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://saeedesmaili.com/posts/ten-favorite-photos-i-captured-in-2024/&#34; target=&#34;_blank&#34; &gt;I love taking photos&lt;/a&gt;
, taking my Sony A7cii wherever I travel. Although it&amp;rsquo;s a relatively small camera, I recently got a Ricoh gr iii to be able to carry a good camera with me everywhere, even when I don&amp;rsquo;t travel.&lt;/p&gt;
&lt;p&gt;Documenting my own life and the events influencing me and the people close to me is one of the main reasons I love photography, but I haven&amp;rsquo;t spent enough effort on doing this. That&amp;rsquo;s why this blog post from 2018 stood out to me, which offers a few tips on how to create memorable photos.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p><a href="https://saeedesmaili.com/posts/ten-favorite-photos-i-captured-in-2024/" target="_blank" >I love taking photos</a>
, taking my Sony A7cii wherever I travel. Although it&rsquo;s a relatively small camera, I recently got a Ricoh gr iii to be able to carry a good camera with me everywhere, even when I don&rsquo;t travel.</p>
<p>Documenting my own life and the events influencing me and the people close to me is one of the main reasons I love photography, but I haven&rsquo;t spent enough effort on doing this. That&rsquo;s why this blog post from 2018 stood out to me, which offers a few tips on how to create memorable photos.</p>
<blockquote>
<p>It&rsquo;s fine to take pictures that capture a moment for those who were present. But if <em>anyone</em> could have taken that photo, don&rsquo;t expect anyone to care.</p>
<p><strong>People pictures matter the most</strong>. Especially the non-staged ones. The formal pictures of special occasions, where we kids are lined up like we&rsquo;re in front of a firing squad, are not the ones that bind us.</p>
<p>The best family photos are the ones where we&rsquo;re clowning around and laughing, or where we&rsquo;re doing something together, or a moment captured without the subject realizing it. The most precious are those where the family is putting up a pup tent, or using the water pump, or packing the car for a trip.</p>
<p>In general, try to capture your family when they are actively doing something, ideally an entire process. Let it be a photo essay: &ldquo;Mom making Thanksgiving dinner&rdquo; or &ldquo;Daddy taking the kids to the petting zoo.&rdquo; Don&rsquo;t choose only the &ldquo;reveal&rdquo; moments such as Mom presenting the turkey to the table; include a picture of her hurriedly putting on lipstick before Grandpa arrives, or the kids conked out, asleep in the back seat, on the car trip home.</p>
<p>Include the photographer. I have few pictures of my father, because he was always the guy behind the camera. When he did ask someone to take a picture it was always posed, such as &ldquo;Mom and Pop standing in front of the Grand Canyon.&rdquo;</p>
<p><strong>Take photos of daily life</strong>. I’m stunned by the pictures my father <em>didn’t</em> take. There isn’t a single photo that represents what my parents did for a living. They weren’t the type to attend company picnics, fine. But I found nothing indicating “take your daughter to work” or “Mom typing up a report” or “the building I worked in” or “the woman Mom commuted to work with for 10 years.” That would be more understandable if my parents disliked their jobs, but both of them were passionate about their careers.</p></blockquote>
<p><a href="https://estherschindler.medium.com/the-old-family-photos-project-lessons-in-creating-family-photos-that-people-want-to-keep-ea3909129943" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Enhancing Text-to-SQL With Synthetic Summaries</title>
      <link>https://saeedesmaili.com/notes/enhancing-text-to-sql-with-synthetic-summaries/</link>
      <pubDate>Tue, 18 Mar 2025 09:59:25 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/enhancing-text-to-sql-with-synthetic-summaries/</guid>
      <description>&lt;p&gt;LLMs are being experimented with to do so many things today, and one of the use cases that sound compelling is getting their help to generate insights from data. What if you could find the answer to your data question without begging a data analyst in your company? But this is easier said than done. To perform this task properly, LLMs need to know about your datasets, the tables, their schemas, and values stored in them. You can provide this information in the prompt itself if your dataset is tiny, but this is not possible in most real life scenarios, since the information will be huge and either it won&amp;rsquo;t fit the LLM&amp;rsquo;s context knowledge or it will be very expensive and not feasible.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>LLMs are being experimented with to do so many things today, and one of the use cases that sound compelling is getting their help to generate insights from data. What if you could find the answer to your data question without begging a data analyst in your company? But this is easier said than done. To perform this task properly, LLMs need to know about your datasets, the tables, their schemas, and values stored in them. You can provide this information in the prompt itself if your dataset is tiny, but this is not possible in most real life scenarios, since the information will be huge and either it won&rsquo;t fit the LLM&rsquo;s context knowledge or it will be very expensive and not feasible.</p>
<p>A workaround for this problem is to use RAG to provide LLM with a few relevant sql queries that it can use to understand the tables and data structure to respond to user&rsquo;s query. But again, this is easier said than done, since typical semantic and keyword based retrieval techniques don&rsquo;t work well enough for code and sql queries.</p>
<p>The team at Timescale explain a clever trick for building text-to-sql using LLMs that aims to solve this limitation by creating synthetic summaries for sample SQL queries. The generated summaries then can be used in the retrieval process, matching user&rsquo;s query with the most relevant sample SQL queries.</p>
<blockquote>
<p>Here&rsquo;s the basic idea:</p>
<ol>
<li>We take existing SQL queries and create detailed summaries of what they do.</li>
<li>We use these summaries, rather than the raw SQL, when trying to match user questions to relevant queries.</li>
<li>We can generate more of these summaries as needed, allowing us to improve our system continually.</li>
</ol></blockquote>
<blockquote>
<p><strong>Synthetic summaries</strong>: We use AI to create detailed summaries of tables and SQL code. These summaries help us understand the information better than just looking at keywords.
<strong>Retrieval augmented in-context learning</strong>: Our system employs a two-step process to enhance SQL generation:</p>
<ul>
<li>We first identify relevant tables and snippets.</li>
<li>The retrieved tables and code examples are used to provide context-rich instructions to our large language model (LLM), enabling it to better understand and apply specific business rules when generating SQL queries.</li>
</ul></blockquote>
<blockquote>
<p>&hellip; this approach has shown some promising results:</p>
<ul>
<li>It improved accuracy in finding the right information from 81 % to 90 %.</li>
<li>It maintained good performance even when we added irrelevant data.</li>
<li>It seemed better at capturing business-specific logic than traditional methods.</li>
</ul></blockquote>
<p><a href="https://www.timescale.com/blog/enhancing-text-to-sql-with-synthetic-summaries" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Building a Personal Content Recommendation System, Part One: Introduction</title>
      <link>https://saeedesmaili.com/posts/building-a-content-recommendation-system-for-myself-part-one/</link>
      <pubDate>Sun, 16 Mar 2025 15:49:44 +0100</pubDate>
      <guid>https://saeedesmaili.com/posts/building-a-content-recommendation-system-for-myself-part-one/</guid>
      <description>&lt;p&gt;Every morning, my RSS reader greets me with hundreds of new posts. Tech blogs, indie developers&amp;rsquo; journals, photography content - they all compete for attention. While &lt;a href=&#34;https://saeedesmaili.com/posts/my-content-consumption-workflow/&#34; target=&#34;_blank&#34; &gt;I&amp;rsquo;ve gotten good at quickly scanning through these feeds&lt;/a&gt;
, I keep wondering about all the great content I might be missing from sources I&amp;rsquo;ve had to ignore simply because their signal-to-noise ratio doesn&amp;rsquo;t justify daily checking.&lt;/p&gt;
&lt;p&gt;On the other hand, the posts that I shortlist from my RSS feeds and read or listen to, end up on a curated repository of articles that have passed my personal quality threshold, so I have access to a valuable collection of content (on &lt;a href=&#34;https://getpocket.com/&#34; target=&#34;_blank&#34; &gt;Pocket&lt;/a&gt;
) that is relevant to my interests. This made me wonder, can I utilize this data, and create a content recommendation system tailored to my preferences? Can I build a system that would review new posts from feeds where only 1 in 20 posts might match my content priorities, and filter those for me?&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Every morning, my RSS reader greets me with hundreds of new posts. Tech blogs, indie developers&rsquo; journals, photography content - they all compete for attention. While <a href="https://saeedesmaili.com/posts/my-content-consumption-workflow/" target="_blank" >I&rsquo;ve gotten good at quickly scanning through these feeds</a>
, I keep wondering about all the great content I might be missing from sources I&rsquo;ve had to ignore simply because their signal-to-noise ratio doesn&rsquo;t justify daily checking.</p>
<p>On the other hand, the posts that I shortlist from my RSS feeds and read or listen to, end up on a curated repository of articles that have passed my personal quality threshold, so I have access to a valuable collection of content (on <a href="https://getpocket.com/" target="_blank" >Pocket</a>
) that is relevant to my interests. This made me wonder, can I utilize this data, and create a content recommendation system tailored to my preferences? Can I build a system that would review new posts from feeds where only 1 in 20 posts might match my content priorities, and filter those for me?</p>
<p>Over the following weeks, my goal is to build this content recommendation system, and to document my thoughts, process, and lessons learned in a blog post series, of which this is the first one. The rough process in my mind includes analyzing the corpus of previously liked content, building a model of personal interests based on content embeddings, and comparing new content against this model to predict the likelihood of interest. If you want to follow along, follow <a href="https://saeedesmaili.com/rss.xml" target="_blank" >my blog&rsquo;s RSS feed</a>
 or subscribe to my newsletter to get notified about new posts.</p>
<h2 id="the-process">The process</h2>
<p>The heart of this project is experimenting with different recommendation algorithms, but solid groundwork comes first. Before diving into the mechanics of the recommender system, I need to establish a clean, reliable dataset. Here&rsquo;s my initial roadmap:</p>
<ol>
<li>Get a list of the liked articles from Pocket
<ul>
<li>I can use Pocket API to fetch the data and store it in a sqlite db or a csv file.</li>
</ul>
</li>
<li>Extract and clean up the text content from liked articles
<ul>
<li>Using content extraction tools like <a href="https://jina.ai/reader/" target="_blank" >r.jina.ai</a>
 or <a href="https://github.com/mozilla/readability" target="_blank" >readability</a>
, which strip away advertisements and formatting while preserving the core article text.</li>
</ul>
</li>
<li>Summarize the text content into a few paragraphs using a large language model
<ul>
<li>The articles I&rsquo;ve saved on Pocket range from a few short paragraphs to tens of pages. The corpus needs to be normalized somehow, and I can use Gemini flash or a local LLM to summarize each content in 2-5 paragraphs.</li>
<li>The extracted texts and summaries will need to be inspected and cleaned up, as I anticipate some URLs returning 404 or blocking my scraper.</li>
</ul>
</li>
<li>Generate embeddings for each content summary using an embeddings API (Gemini or OpenAI) or a <a href="https://saeedesmaili.com/how-to-use-sentencetransformers-to-generate-text-embeddings-locally/" target="_blank" >local embedding model with sentence-transformers</a>
</li>
<li>Store the embeddings for comparison with new content
<ul>
<li>Probably in a sqlite db using <a href="https://github.com/asg017/sqlite-vec" target="_blank" >sqlite-vec</a>
</li>
</ul>
</li>
<li>Build the content recommendation system
<ul>
<li>Honestly I&rsquo;m not quite sure how this will be done yet.</li>
</ul>
</li>
<li>Check for new content from desired sources every day
<ul>
<li>Using GitHub Actions or some other sort of cron job.</li>
</ul>
</li>
<li>Extract the text, summarize, and generate embeddings for the new content</li>
<li>Find the ones that are close to my interests and add them to an RSS feed</li>
</ol>
<p>Admittedly, the later stages of building the recommendation system are unclear, but that’s exactly why I’m documenting this process. The immediate focus is clear: preparing a clean, reliable dataset. Meanwhile, I&rsquo;ll be diving deeper into recommendation system architectures to prepare for the more complex challenges ahead.</p>
<h2 id="open-questions">Open questions</h2>
<p>Thinking about the challenges ahead, I&rsquo;m faced with some questions I currently don&rsquo;t have answers to. If you can provide any guidance or feedback, feel free to reach out via <a href="me@saeedesmaili.com" >email</a>
, <a href="https://bsky.app/profile/saeedesmaili.com" target="_blank" >bsky</a>
, or <a href="https://twitter.com/saeedesmaili" target="_blank" >twitter</a>
.</p>
<ul>
<li>How do I build the content recommendation system?! No, but seriously, how do we compare the embeddings of liked content to those of new, unknown content?
<ul>
<li>Calculate the similarity score (cosine similarity) of the average of the liked content with the new content? But I have a diverse set of liked content in the dataset.</li>
<li>Should I cluster the liked content into categories and figure out if the new content is close enough to one of the clusters?</li>
<li>What if a new content is close to a cluster (e.g. <code>Photography</code>) but still not relevant to my interests at all (e.g. I read photography stuff only if they are related to street or landscape photography, or about the Sony camera I own)?</li>
</ul>
</li>
</ul>
<p>Read the part two of this blog series: <a href="https://saeedesmaili.com/posts/building-a-personal-content-recommendation-system-data-processing-and-cleaning/" target="_blank" >Data Processing and Cleaning</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Add Logprobs to Openai Structured Output</title>
      <link>https://saeedesmaili.com/notes/add-logprobs-to-openai-structured-output/</link>
      <pubDate>Mon, 03 Mar 2025 21:50:44 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/add-logprobs-to-openai-structured-output/</guid>
      <description>&lt;p&gt;When working with LLMs sometimes you want to know if the response you&amp;rsquo;re getting from the model is the one that at least the model itself is sort of confident about. For example, I recently worked on classifying pull requests into categories like &amp;ldquo;feature&amp;rdquo;, &amp;ldquo;bugfix&amp;rdquo;, &amp;ldquo;infrastructure&amp;rdquo;, etc with LLMs, and as part of the process we wanted to know how many categories should we assign for each PR. We were interested in assigning any number of categories that are relevant to the PR (a PR can be both a &amp;ldquo;bugfix&amp;rdquo; and &amp;ldquo;infrastructure&amp;rdquo;). It&amp;rsquo;s hard to get a proper confidence score from an LLM, but &lt;code&gt;logprobs&lt;/code&gt; probably is the closest we can get. The problem is, in a structured response generation (e.g. when you prompt the model to generate its response in a JSON format), you&amp;rsquo;re only interested in the &lt;code&gt;logprobs&lt;/code&gt; of the values, not everything. In the example generation below, we are only interested in the &lt;code&gt;logprobs&lt;/code&gt; of &amp;ldquo;bugfix&amp;rdquo;, &amp;ldquo;testing&amp;rdquo;, and &amp;ldquo;infrastructure&amp;rdquo;, but not &amp;ldquo;primary_category&amp;rdquo;, etc:&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>When working with LLMs sometimes you want to know if the response you&rsquo;re getting from the model is the one that at least the model itself is sort of confident about. For example, I recently worked on classifying pull requests into categories like &ldquo;feature&rdquo;, &ldquo;bugfix&rdquo;, &ldquo;infrastructure&rdquo;, etc with LLMs, and as part of the process we wanted to know how many categories should we assign for each PR. We were interested in assigning any number of categories that are relevant to the PR (a PR can be both a &ldquo;bugfix&rdquo; and &ldquo;infrastructure&rdquo;). It&rsquo;s hard to get a proper confidence score from an LLM, but <code>logprobs</code> probably is the closest we can get. The problem is, in a structured response generation (e.g. when you prompt the model to generate its response in a JSON format), you&rsquo;re only interested in the <code>logprobs</code> of the values, not everything. In the example generation below, we are only interested in the <code>logprobs</code> of &ldquo;bugfix&rdquo;, &ldquo;testing&rdquo;, and &ldquo;infrastructure&rdquo;, but not &ldquo;primary_category&rdquo;, etc:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;primary_category&#34;</span>: <span style="color:#e6db74">&#34;bugfix&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;other_relevant_categories&#34;</span>: [<span style="color:#e6db74">&#34;testing&#34;</span>, <span style="color:#e6db74">&#34;infrastructure&#34;</span>]
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>Today I learned there&rsquo;s a python library that helps getting these <code>logprops</code> from the OpenAI&rsquo;s structured response in a convenient way, and it&rsquo;s called <a href="https://arena-ai.github.io/structured-logprobs/" target="_blank" >structured-logprobs</a>
. Here is how to use it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> math
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> openai <span style="color:#f92672">import</span> OpenAI
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> structured_logprobs.main <span style="color:#f92672">import</span> add_logprobs
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## generate structured output with openai</span>
</span></span><span style="display:flex;"><span>client <span style="color:#f92672">=</span> OpenAI(api_key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;your-api-key&#34;</span>)
</span></span><span style="display:flex;"><span>completion <span style="color:#f92672">=</span> client<span style="color:#f92672">.</span>chat<span style="color:#f92672">.</span>completions<span style="color:#f92672">.</span>create(
</span></span><span style="display:flex;"><span>    model<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;gpt-4o&#34;</span>,
</span></span><span style="display:flex;"><span>    messages<span style="color:#f92672">=</span>[
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;role&#34;</span>: <span style="color:#e6db74">&#34;system&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;content&#34;</span>: (
</span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;&#34;&#34;Please output metadata about the following function:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">def say_hello():
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    print(&#34;Hello World&#34;)
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;&#34;&#34;</span>
</span></span><span style="display:flex;"><span>            ),
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    ],
</span></span><span style="display:flex;"><span>    logprobs<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>,
</span></span><span style="display:flex;"><span>    response_format<span style="color:#f92672">=</span>{
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;json_schema&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;json_schema&#34;</span>: {
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;answer&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;schema&#34;</span>: {
</span></span><span style="display:flex;"><span>                <span style="color:#e6db74">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;object&#34;</span>,
</span></span><span style="display:flex;"><span>                <span style="color:#e6db74">&#34;properties&#34;</span>: {
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#34;function_name&#34;</span>: {<span style="color:#e6db74">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;string&#34;</span>},
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#34;language&#34;</span>: {<span style="color:#e6db74">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;string&#34;</span>},
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#34;version&#34;</span>: {<span style="color:#e6db74">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;string&#34;</span>},
</span></span><span style="display:flex;"><span>                },
</span></span><span style="display:flex;"><span>            },
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## using the structured-logprobs library:</span>
</span></span><span style="display:flex;"><span>chat_completion <span style="color:#f92672">=</span> add_logprobs(completion)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>print(json<span style="color:#f92672">.</span>loads(chat_completion<span style="color:#f92672">.</span>value<span style="color:#f92672">.</span>choices[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">.</span>message<span style="color:#f92672">.</span>content))
</span></span></code></pre></div><p>This gives me:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ <span style="color:#f92672">&#34;function_name&#34;</span>: <span style="color:#e6db74">&#34;say_hello&#34;</span>, <span style="color:#f92672">&#34;language&#34;</span>: <span style="color:#e6db74">&#34;Python&#34;</span>, <span style="color:#f92672">&#34;version&#34;</span>: <span style="color:#e6db74">&#34;3.x&#34;</span> }
</span></span></code></pre></div><p>As you can see, I&rsquo;ve intentionally added the <code>version</code> to the expected output, and I&rsquo;m expecting the model to be less confident about its generation for <code>version</code> compared to <code>say_hello</code> and <code>langugae</code>. Let&rsquo;s examine the <code>logprobs</code> and probabilities:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>print(chat_completion<span style="color:#f92672">.</span>log_probs[<span style="color:#ae81ff">0</span>])
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;function_name&#34;</span>: <span style="color:#ae81ff">-2.6073003596138733e-6</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;language&#34;</span>: <span style="color:#ae81ff">-0.16022545099258423</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;version&#34;</span>: <span style="color:#ae81ff">-0.26306185549037764</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>Converting to probabilities to make the numbers more intuitive:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>data <span style="color:#f92672">=</span> chat_completion<span style="color:#f92672">.</span>log_probs[<span style="color:#ae81ff">0</span>]
</span></span><span style="display:flex;"><span>transformed_data <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    key <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;_prob&#34;</span>: [round(math<span style="color:#f92672">.</span>exp(log_prob), <span style="color:#ae81ff">2</span>) <span style="color:#66d9ef">for</span> log_prob <span style="color:#f92672">in</span> value]
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> isinstance(value, list)
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">else</span> round(math<span style="color:#f92672">.</span>exp(value), <span style="color:#ae81ff">2</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> key, value <span style="color:#f92672">in</span> data<span style="color:#f92672">.</span>items()
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>print(transformed_data)
</span></span></code></pre></div><p>Outputs:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ <span style="color:#f92672">&#34;function_name_prob&#34;</span>: <span style="color:#ae81ff">1.0</span>, <span style="color:#f92672">&#34;language_prob&#34;</span>: <span style="color:#ae81ff">0.85</span>, <span style="color:#f92672">&#34;version_prob&#34;</span>: <span style="color:#ae81ff">0.77</span> }
</span></span></code></pre></div><p>As expected, we get the absolute highest number (<code>1.0</code>) for <code>function_name</code>, since it&rsquo;s already in our prompt. A very high number for <code>language</code>, since our function was obviously a python function. And a lower (but still relatively high!) number for <code>version</code>. As I mentioned previously, these numbers don&rsquo;t necessarily represent the absolute correctness of the values, but they rather are extra information for us to gauge the usefulness of the generated output.</p>
<p><a href="https://arena-ai.github.io/structured-logprobs/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Adding new entries to a Supabase postgres table via REST API</title>
      <link>https://saeedesmaili.com/notes/adding-new-entries-to-a-supabase-postgres-table-via-rest-api/</link>
      <pubDate>Thu, 02 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://saeedesmaili.com/notes/adding-new-entries-to-a-supabase-postgres-table-via-rest-api/</guid>
      <description>&lt;p&gt;I read &lt;a href=&#34;https://www.swiftjectivec.com/supabase-for-ios-add-feature-request-screen/&#34; target=&#34;_blank&#34; &gt;this blog post&lt;/a&gt;
 from Jordan on how he created a simple feature request form on his iOS app using Supabase&amp;rsquo;s Swift library. I wanted to try this out on Python to see how easy would be to implement this when I need a quick way to add a form functionality in a backend service. Here is what I did:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Created a free &lt;a href=&#34;https://supabase.com/&#34; target=&#34;_blank&#34; &gt;Supabase account&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Created a new project.&lt;/li&gt;
&lt;li&gt;Created a new table in the project and called it &lt;code&gt;feature_request&lt;/code&gt;, and added a new column called &lt;code&gt;text&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Grabbed the unique API URL and API Key from &lt;code&gt;Project Settings&lt;/code&gt; &amp;gt; &lt;code&gt;API&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Made an API call in Python:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; requests
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;supabase_url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://ufcgesssclkrciknuaey.supabase.co&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;table_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;feature_request&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endpoint &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;supabase_url&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/rest/v1/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;table_name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;supabase_key &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;my-supabase-project-api-key&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## The request will fail if either of apikey or Authorization are not provided&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;headers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;apikey&amp;#34;&lt;/span&gt;: supabase_key,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;supabase_key&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Prefer&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;return=representation&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# This returns the inserted row&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;this is a new feature request ...&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;response &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;post(endpoint, json&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;data, headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;headers)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;json()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# [{&amp;#39;id&amp;#39;: 1,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#  &amp;#39;created_at&amp;#39;: &amp;#39;2025-01-02T16:52:44.738549+00:00&amp;#39;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#  &amp;#39;text&amp;#39;: &amp;#39;this is a new feature request ...&amp;#39;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And visiting the table in the Supabase dashboard confirms that the data is inserted as a new row.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I read <a href="https://www.swiftjectivec.com/supabase-for-ios-add-feature-request-screen/" target="_blank" >this blog post</a>
 from Jordan on how he created a simple feature request form on his iOS app using Supabase&rsquo;s Swift library. I wanted to try this out on Python to see how easy would be to implement this when I need a quick way to add a form functionality in a backend service. Here is what I did:</p>
<ol>
<li>Created a free <a href="https://supabase.com/" target="_blank" >Supabase account</a>
.</li>
<li>Created a new project.</li>
<li>Created a new table in the project and called it <code>feature_request</code>, and added a new column called <code>text</code>.</li>
<li>Grabbed the unique API URL and API Key from <code>Project Settings</code> &gt; <code>API</code>.</li>
<li>Made an API call in Python:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> requests
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>supabase_url <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;https://ufcgesssclkrciknuaey.supabase.co&#34;</span>
</span></span><span style="display:flex;"><span>table_name <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;feature_request&#34;</span>
</span></span><span style="display:flex;"><span>endpoint <span style="color:#f92672">=</span> <span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>supabase_url<span style="color:#e6db74">}</span><span style="color:#e6db74">/rest/v1/</span><span style="color:#e6db74">{</span>table_name<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>supabase_key <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&lt;my-supabase-project-api-key&gt;&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## The request will fail if either of apikey or Authorization are not provided</span>
</span></span><span style="display:flex;"><span>headers <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;apikey&#34;</span>: supabase_key,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Authorization&#34;</span>: <span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Bearer </span><span style="color:#e6db74">{</span>supabase_key<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Content-Type&#34;</span>: <span style="color:#e6db74">&#34;application/json&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Prefer&#34;</span>: <span style="color:#e6db74">&#34;return=representation&#34;</span>  <span style="color:#75715e"># This returns the inserted row</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>data <span style="color:#f92672">=</span> {<span style="color:#e6db74">&#34;text&#34;</span>: <span style="color:#e6db74">&#34;this is a new feature request ...&#34;</span>}
</span></span><span style="display:flex;"><span>response <span style="color:#f92672">=</span> requests<span style="color:#f92672">.</span>post(endpoint, json<span style="color:#f92672">=</span>data, headers<span style="color:#f92672">=</span>headers)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>response<span style="color:#f92672">.</span>json()
</span></span><span style="display:flex;"><span><span style="color:#75715e"># [{&#39;id&#39;: 1,</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#  &#39;created_at&#39;: &#39;2025-01-02T16:52:44.738549+00:00&#39;,</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#  &#39;text&#39;: &#39;this is a new feature request ...&#39;}]</span>
</span></span></code></pre></div><p>And visiting the table in the Supabase dashboard confirms that the data is inserted as a new row.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Ten Favorite Photos I Captured in 2024</title>
      <link>https://saeedesmaili.com/posts/ten-favorite-photos-i-captured-in-2024/</link>
      <pubDate>Sun, 22 Dec 2024 11:02:38 +0100</pubDate>
      <guid>https://saeedesmaili.com/posts/ten-favorite-photos-i-captured-in-2024/</guid>
      <description>&lt;p&gt;I purchased a Sony a7ii in 2023, while having zero understanding of the basics of cameras and photography. I recall being particularly confused about the &lt;a href=&#34;https://petapixel.com/exposure-triangle/&#34; target=&#34;_blank&#34; &gt;exposure triangle&lt;/a&gt;
, especially how aperture affects the sharpness and the depth of field of an image. After learning the basics and taking around 3500 photos with that camera, I realized its aging technology was limiting my beginner skills. I had enough experience to be able to research camera models and their features, and I decided to get a Sony a7cii at the beginning of 2024, a decision I&amp;rsquo;m still happy with today.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I purchased a Sony a7ii in 2023, while having zero understanding of the basics of cameras and photography. I recall being particularly confused about the <a href="https://petapixel.com/exposure-triangle/" target="_blank" >exposure triangle</a>
, especially how aperture affects the sharpness and the depth of field of an image. After learning the basics and taking around 3500 photos with that camera, I realized its aging technology was limiting my beginner skills. I had enough experience to be able to research camera models and their features, and I decided to get a Sony a7cii at the beginning of 2024, a decision I&rsquo;m still happy with today.</p>
<p>As I&rsquo;m drafting this post, my camera&rsquo;s shutter count is at 6663, and if I include the period of the year I was still using my old camera, I&rsquo;ve shot 7719 photos in 2024. I&rsquo;ve had many short trips in the Netherlands, and I&rsquo;ve also traveled to Norway, Sweden, Portugal, Belgium, and Turkey, with my camera being my constant companion. When reviewing the photos I took this year, I felt confident enough to select my top 10 favorites to share in this blog. So here they are, ordered by the date taken.</p>
<h2 id="january-2024">January 2024</h2>
<p>At the beginning of the year I came across a photography contest called <a href="https://www.life-framer.com/" target="_blank" >life framer</a>
, and decided to pay for the annual membership and join the contest. I knew I was nowhere close enough to win a photography contest and winning wasn&rsquo;t the point, but the monthly theme of the contest sounded like an appealing challenge to me. It would motivate me to take my camera outside and push myself to capture new moments.</p>
<p>The January theme of the contest centered on night life photography, and with no travel plans ahead, I walked towards the center of Amsterdam with the only camera I owned back then, the a7ii. After a couple of shots, I realized my camera and lens weren&rsquo;t capable of capturing anything compelling in low light situations, and this probably was the time I decided to think about switching to another camera.</p>
<p>While I was disappointingly watching the area around Pathé City, I noticed this bright advertisement panel of Anya Taylor-Joy in front of the tram stop. Oh thank god, something bright enough my poor camera could capture. I took a few uninspiring shots, and then figured this might be the time to try a long exposure shot for the first time in my photography journey.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241221-amsterdam-1.jpg#center"/> <figcaption>
            <p>#1, Amsterdam NL, Jan 2024</p>
        </figcaption>
</figure>

<h2 id="april-2024">April 2024</h2>
<p>I continued the life framer&rsquo;s monthly challenges in February (theme: animals) and March (theme: colors), but looking back at the shots, none are particularly noteworthy. I got my new a7cii camera in April and immediately loved using it. I was more motivated to carry this smaller, lighter, and more performant camera with me, and soon realized I didn&rsquo;t need an external challenge for taking photos anymore.</p>
<p>On a beautiful spring day in April, I noticed this gorgeous sunset from the balcony of my apartment in Diemen and quickly grabbed the camera to photograph the scene. I was lucky to get some birds in frame.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241221-diemen.jpg#center"/> <figcaption>
            <p>#2, Diemen NL, April 2024</p>
        </figcaption>
</figure>

<h2 id="may-2024">May 2024</h2>
<p>I&rsquo;m quite shy about photographing people in general. I love documenting candid moments of life, but I&rsquo;m always hesitant to point my lens towards strangers. As practice for getting over this fear, I grabbed my small but mighty Sony 50mm f/2.5 G lens, walked towards the center of Amsterdam, aiming to capture street life. It was a cloudy gray day and the shots lacked color or light contrast, so for the first time I decided to edit the photos in black and white to magnify the attention on the subjects.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241221-amsterdam-2.jpg#center"/> <figcaption>
            <p>#3, Amsterdam NL, May 2024</p>
        </figcaption>
</figure>

<h2 id="june-2024">June 2024</h2>
<p>We visited Madeira in June and stayed in Porto Moniz for a week. I wasn&rsquo;t prepared for the island&rsquo;s breathtaking beauty, and Madeira definitely is one of the places I&rsquo;ll have to visit more in future. I was hiking a steep uphill route around Porto Moniz, physically exhausted from climbing, turned around to view the landscape behind me, and faced this gorgeous vista.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241221-madeira-1.jpg#center"/> <figcaption>
            <p>#4, Madeira PT, June 2024</p>
        </figcaption>
</figure>

<p>We also had a short visit to Seixal and I took many photos, including this spectacular view from the balcony of a small restaurant where we grabbed lunch.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-madeira-2.jpg#center"/> <figcaption>
            <p>#4 bonus, Madeira PT, June 2024</p>
        </figcaption>
</figure>

<p>I like that I&rsquo;ve included some foreground elements in both of these pictures. They&rsquo;ve elevated the images by providing a nice perspective of the scene, helping the viewer imagine themselves in those places. I&rsquo;ve found myself drawn to this technique throughout the year.</p>
<h2 id="july-2024">July 2024</h2>
<p>To try something completely new, I joined the <a href="https://dutch-shooters.nl/" target="_blank" >Dutch Shooters</a>
 team in July to have a daylong photography trip to the Formula 1 event at Spa-Francorchamps in Belgium. I stayed at a hotel in Eindhoven the night before so I could join them early in the morning. The photography trip was excellent, with many professional and amateur photographers around the circuit. It was the perfect opportunity to practice panning shots and I managed to capture a few images of these super fast cars.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-f1.jpg#center"/> <figcaption>
            <p>bonus, Spa-Francorchamps BE, July 2024</p>
        </figcaption>
</figure>

<h2 id="august-2024">August 2024</h2>
<p>We visited Norway in August, spending the first few days exploring Oslo. I found the <a href="https://en.wikipedia.org/wiki/Oslo_Public_Library" target="_blank" >Oslo Public Library</a>
 to be a fascinating place to shoot, as it contains various types of shapes, lights, colors, people, and even some reflections.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-norway-1.jpg#center"/> <figcaption>
            <p>#5, Oslo NO, August 2024</p>
        </figcaption>
</figure>

<p>There are many of these old phone booths around Oslo converted into small libraries. I came across several while walking around and exploring the city, including this one. I took a few ordinary shots, none of them meeting my satisfaction threshold. Then I saw a gentleman approaching with books in his hands, and I captured this moment. I love how the color of his shirt matches the phone booth.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-norway-2.jpg#center"/> <figcaption>
            <p>#5 bonus, Oslo NO, August 2024</p>
        </figcaption>
</figure>

<p>We left Oslo and stayed in a cabin house around Halden for a few days. The cabin was surrounded by woodland and water, offering an absolutely peaceful experience of nature.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-norway-3.jpg#center"/> <figcaption>
            <p>#5 bonus, Halden NO, August 2024</p>
        </figcaption>
</figure>

<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-norway-4.jpg#center"/> <figcaption>
            <p>#5 bonus, Halden NO, August 2024</p>
        </figcaption>
</figure>

<h2 id="september-2024">September 2024</h2>
<p>Of course I had my camera with me during a work trip to Stockholm in September. One night when I finally found a few hours of alone time, I walked around the city to photograph some night life and got several memorable shots. Reflections always intrigue me, and here I found its combination with the empty section of the advertisement created a perfect frame to capture someone walking by. Several people passed, and this man&rsquo;s height, sweater color, and headphones made for the best composition of the evening.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-sweden-1.jpg#center"/> <figcaption>
            <p>#6, Stockholm SE, September 2024</p>
        </figcaption>
</figure>

<p>It&rsquo;s always challenging to find and compose shots at night, especially with an f/2.8 lens, as there&rsquo;s not enough light reaching the lens to work with. My attention was drawn to the colors and the light in front of this store, and I was fortunate to catch someone crossing, illuminated by the store&rsquo;s lighting.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-sweden-2.jpg#center"/> <figcaption>
            <p>#6 bonus, Stockholm SE, September 2024</p>
        </figcaption>
</figure>

<h2 id="october-2024">October 2024</h2>
<p>Autumn was quickly fading, and I desperately wanted to have a colorful autumn photo in my 2024 portfolio. I brought my camera to tennis practice, so I could go shooting afterward without needing to return home. I photographed some autumn leaves, but nothing spectacular. I lost the daylight and the theme of the day became night life photography.</p>
<p>I walked toward the center of Amsterdam and took many unremarkable shots. On my way to the city center, I came across these green lights around the building of the <a href="https://en.wikipedia.org/wiki/Van_Gogh_Museum" target="_blank" >Van Gogh Museum</a>
. I started photographing the empty but lit walls of the building, and waited for people to pass so I could potentially get a minimalistic silhouette shot, but I ended up with something even more beautiful.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-amsterdam-3.jpg#center"/> <figcaption>
            <p>#7, Amsterdam NL, October 2024</p>
        </figcaption>
</figure>

<p>Since my previous attempt at getting an autumn shot was unsuccessful, I grabbed the camera another day and explored the <a href="https://en.wikipedia.org/wiki/Amsterdamse_Bos" target="_blank" >Amsterdamse Bos</a>
 seeking the yellow and orange colors of nature. I took many shots in the following spot, where the colors on the trees in the background were stunning. I was quite pleased with this image of the family and their dog enjoying their time.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-amsterdam-4.jpg#center"/> <figcaption>
            <p>#8, Amsterdam NL, October 2024</p>
        </figcaption>
</figure>

<h2 id="november-2024">November 2024</h2>
<p>I traveled to Izmir to spend a few days with a friend. I always keep my camera bag on my lap in airplanes, in case an interesting scene appears. This time when the airplane was approaching the Istanbul airport, I captured this beautiful night scene of this megacity, with boats sailing in the water. I almost lost my lens cap while taking this shot, since the airplane landed a few moments after, and I lost control of the items on my lap. Luckily I found it lying on the ground later.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-istanbul.jpg#center"/> <figcaption>
            <p>#9, Istanbul TR, November 2024</p>
        </figcaption>
</figure>

<p>My friend and I stayed in Manisa, a small town near Izmir. We drove to Izmir daily, explored the city, played tennis, and took photos. The first two days, I was amazed by the layers of mountains in the background along the road, but I was driving and there was no safe place to stop for photography. The third day I couldn&rsquo;t resist anymore, so I stopped at a gas station, and quickly took this shot. I&rsquo;m glad that an old red car appeared in the frame as well, adding more visual interest.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-izmir-1.jpg#center"/> <figcaption>
            <p>#10, Izmir TR, November 2024</p>
        </figcaption>
</figure>

<p>I continued practicing street photography and taking photos of strangers in Turkey, hoping to gradually overcome this fear. A few times people noticed I was photographing them, and I worried they&rsquo;d be angry or at least complain, but to my surprise they asked for my Instagram account and requested me to take more photos and share them!</p>
<p>During one of our walks around Izmir, I suggested my friend visit the city&rsquo;s old <a href="https://en.wikipedia.org/wiki/Kemeralt%C4%B1" target="_blank" >Kemeraltı bazaar</a>
 hoping I could get some unique and colorful shots of the chaotic environment, but I couldn&rsquo;t capture anything compelling. When we left the bazaar, people were seated around the Clock Tower of Izmir, and I noticed this lady with a box of red roses in her hand. I waited to see if an interesting moment would unfold, and then took this shot when she handed a rose to another lady, with a bright smile on her face.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20241222-izmir-2.jpg#center"/> <figcaption>
            <p>#10 bonus, Izmir TR, November 2024</p>
        </figcaption>
</figure>

<p>Looking back at these photos, I can see how my journey in photography has evolved throughout 2024. From my hesitant first attempts at long exposures in January to confidently approaching street photography in Turkey, each image represents not just a moment captured, but a step in my growth as a photographer.</p>
<p>I recently purchased a photo printer, and these ten images will be among the first I&rsquo;ll print. There&rsquo;s something special about seeing photographs on paper rather than just on screens, and I&rsquo;m excited to experience these memories in a more tangible form. As I look forward to 2025, I&rsquo;m eager to continue exploring and developing my photographic style, particularly in areas that still challenge me, like street photography.</p>
<p>I&rsquo;d love to hear which of these photos resonates with you and why. Whether you&rsquo;re a fellow photography enthusiast or simply enjoy viewing images, feel free to <a href="mailto:me@saeedesmaili.com" >reach out</a>
 to share your thoughts or discuss photography. You can follow my photography work on <a href="https://www.instagram.com/saeed.esmaili/" target="_blank" >Instagram</a>
, <a href="https://500px.com/p/saeedesmaili?view=photos" target="_blank" >500px</a>
, or <a href="https://www.flickr.com/photos/saeedesmaili/" target="_blank" >flickr</a>
.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Label-Studio: Annotate Text and Image Data for AI and ML training</title>
      <link>https://saeedesmaili.com/notes/label-studio-annotate-text-and-image-data-for-ai-and-ml/</link>
      <pubDate>Thu, 19 Dec 2024 22:42:00 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/label-studio-annotate-text-and-image-data-for-ai-and-ml/</guid>
      <description>&lt;p&gt;A few months ago I used &lt;a href=&#34;https://streamlit.io/&#34; target=&#34;_blank&#34; &gt;streamlit&lt;/a&gt;
 to build a simple UI, so I can collect manually labeled data for a LLM fine-tuning task at work. Streamlit is fine, but the full process of creating a nice UI with required functionalities for data annotation and data storage management wasn&amp;rsquo;t trivial.&lt;/p&gt;
&lt;p&gt;Today I found out about &lt;a href=&#34;https://labelstud.io/&#34; target=&#34;_blank&#34; &gt;label-studio&lt;/a&gt;
 which is an easy to use framework (backend and frontend) for data annotation task. It provides various annotation templates for text, image, audio, and video data!&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>A few months ago I used <a href="https://streamlit.io/" target="_blank" >streamlit</a>
 to build a simple UI, so I can collect manually labeled data for a LLM fine-tuning task at work. Streamlit is fine, but the full process of creating a nice UI with required functionalities for data annotation and data storage management wasn&rsquo;t trivial.</p>
<p>Today I found out about <a href="https://labelstud.io/" target="_blank" >label-studio</a>
 which is an easy to use framework (backend and frontend) for data annotation task. It provides various annotation templates for text, image, audio, and video data!</p>
<p>I tried it with <code>uv</code> locally, but it can be self-hosted using <a href="https://github.com/HumanSignal/label-studio/blob/develop/docker-compose.yml" target="_blank" >docker-compose</a>
 as well:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>uv add label-studio
</span></span><span style="display:flex;"><span>uv run label-studio
</span></span></code></pre></div><p>Then a very nice looking UI pops out in the browser, you need to sign up (why?) and create a new project. When creating a project, I selected <code>Labeling setup &gt; Natural Language Processing &gt; Text Classification</code> and saved it with the default choices (positive, negative, neutral). I then imported <a href="https://huggingface.co/datasets/fka/awesome-chatgpt-prompts/raw/main/prompts.csv" target="_blank" >a sample dataset from huggingface</a>
 and ended up with this clean and user friendly interface for lebeling the data.</p>
<p><img alt="label-studio-screenshot" loading="lazy" src="/images/2024/20241219-label-studio-annotate-text-and-image-data-for-ai-and-ml-2.png"></p>
<p><img alt="label-studio-screenshot" loading="lazy" src="/images/2024/20241219-label-studio-annotate-text-and-image-data-for-ai-and-ml-1.png"></p>
<p>Label-studio supports multiple users, and it records which user has annotated which record and when. You can export the lebeled data in various formats including CSV. And another cool feature of label-studio is its integration with ML and AI tools, so you can run the same annotated records with a model and compare the output with the human annotated values.</p>
<p>I will use label-studio next time I have a data labeling work.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Quickly Filter and Aggregate Python Lists</title>
      <link>https://saeedesmaili.com/notes/til-quickly-filter-and-aggregate-python-lists/</link>
      <pubDate>Thu, 19 Dec 2024 20:45:19 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/til-quickly-filter-and-aggregate-python-lists/</guid>
      <description>&lt;p&gt;Today I came across this brilliant python library called &lt;a href=&#34;https://github.com/mkalioby/leopards&#34; target=&#34;_blank&#34; &gt;leopards&lt;/a&gt;
 which allows you to do some basic but frequently used filters and aggregations on python lists. I&amp;quot;ve always used &lt;a href=&#34;https://github.com/pandas-dev/pandas&#34; target=&#34;_blank&#34; &gt;pandas&lt;/a&gt;
 for any quick and adhoc work with large lists or CSV files, but leopards sounds a quick and performant alternative when you don&amp;quot;t need to do any fancy data analysis work.&lt;/p&gt;
&lt;p&gt;Leopards provides following filters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;eq&lt;/code&gt;: equals and this default filter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gt&lt;/code&gt;: greater than.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte&lt;/code&gt;: greater than or equal.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lt&lt;/code&gt;: less than&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lte&lt;/code&gt;: less than or equal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;in&lt;/code&gt;: the value in a list of a tuple.
&lt;ul&gt;
&lt;li&gt;e.g. &lt;code&gt;age__in=[10,20,30]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contains&lt;/code&gt;: contains a substring as in the example.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icontains&lt;/code&gt;: case-insensitive &lt;code&gt;contains&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;startswith&lt;/code&gt;: checks if a value starts with a query strings.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;istartswith&lt;/code&gt;: case-insensitive &lt;code&gt;startswith&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;endswith&lt;/code&gt;: checks if a value ends with a query strings.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iendswith&lt;/code&gt;: case-insensitive &lt;code&gt;endswith&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isnull&lt;/code&gt;: checks if the value matches any of NULL_VALUES which are &lt;code&gt;(&amp;quot;&amp;quot;, &amp;quot;.&amp;quot;, None, &amp;quot;None&amp;quot;, &amp;quot;null&amp;quot;, &amp;quot;NULL&amp;quot;)&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;e.g. &lt;code&gt;filter__isnull=True&lt;/code&gt; or &lt;code&gt;filter__isnull=False&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A quick example of its usage with filters:&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Today I came across this brilliant python library called <a href="https://github.com/mkalioby/leopards" target="_blank" >leopards</a>
 which allows you to do some basic but frequently used filters and aggregations on python lists. I&quot;ve always used <a href="https://github.com/pandas-dev/pandas" target="_blank" >pandas</a>
 for any quick and adhoc work with large lists or CSV files, but leopards sounds a quick and performant alternative when you don&quot;t need to do any fancy data analysis work.</p>
<p>Leopards provides following filters:</p>
<ul>
<li><code>eq</code>: equals and this default filter</li>
<li><code>gt</code>: greater than.</li>
<li><code>gte</code>: greater than or equal.</li>
<li><code>lt</code>: less than</li>
<li><code>lte</code>: less than or equal</li>
<li><code>in</code>: the value in a list of a tuple.
<ul>
<li>e.g. <code>age__in=[10,20,30]</code></li>
</ul>
</li>
<li><code>contains</code>: contains a substring as in the example.</li>
<li><code>icontains</code>: case-insensitive <code>contains</code>.</li>
<li><code>startswith</code>: checks if a value starts with a query strings.</li>
<li><code>istartswith</code>: case-insensitive <code>startswith</code>.</li>
<li><code>endswith</code>: checks if a value ends with a query strings.</li>
<li><code>iendswith</code>: case-insensitive <code>endswith</code>.</li>
<li><code>isnull</code>: checks if the value matches any of NULL_VALUES which are <code>(&quot;&quot;, &quot;.&quot;, None, &quot;None&quot;, &quot;null&quot;, &quot;NULL&quot;)</code>
<ul>
<li>e.g. <code>filter__isnull=True</code> or <code>filter__isnull=False</code></li>
</ul>
</li>
</ul>
<p>A quick example of its usage with filters:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> leopards <span style="color:#f92672">import</span> Q
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>data <span style="color:#f92672">=</span> [{<span style="color:#e6db74">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;John&#34;</span>,<span style="color:#e6db74">&#34;age&#34;</span>:<span style="color:#e6db74">&#34;16&#34;</span>}, {<span style="color:#e6db74">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;Mike&#34;</span>,<span style="color:#e6db74">&#34;age&#34;</span>:<span style="color:#e6db74">&#34;19&#34;</span>}, {<span style="color:#e6db74">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;Sarah&#34;</span>,<span style="color:#e6db74">&#34;age&#34;</span>:<span style="color:#e6db74">&#34;21&#34;</span>}]
</span></span><span style="display:flex;"><span>filtered <span style="color:#f92672">=</span> Q(data, {<span style="color:#e6db74">&#34;name__contains&#34;</span>:<span style="color:#e6db74">&#34;k&#34;</span>, <span style="color:#e6db74">&#34;age__lt&#34;</span>:<span style="color:#ae81ff">20</span>}) <span style="color:#75715e">## this returns a generator</span>
</span></span><span style="display:flex;"><span>print(list(filtered))
</span></span><span style="display:flex;"><span><span style="color:#75715e">## [{&#34;name&#34;: &#34;Mike&#34;, &#34;age&#34;: &#34;19&#34;}]</span>
</span></span></code></pre></div><p>It also provides a few aggregation functions: <code>Count</code>, <code>Max</code>, <code>Min</code>, <code>Sum</code>, <code>Avg</code></p>
<p><code>Count</code> for example can be used as following:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> leopards <span style="color:#f92672">import</span> Count
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>data <span style="color:#f92672">=</span> [{<span style="color:#e6db74">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;John&#34;</span>, <span style="color:#e6db74">&#34;age&#34;</span>: <span style="color:#e6db74">&#34;16&#34;</span>}, {<span style="color:#e6db74">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;Mike&#34;</span>, <span style="color:#e6db74">&#34;age&#34;</span>: <span style="color:#e6db74">&#34;19&#34;</span>}, {<span style="color:#e6db74">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;Sarah&#34;</span>, <span style="color:#e6db74">&#34;age&#34;</span>: <span style="color:#e6db74">&#34;21&#34;</span>},{<span style="color:#e6db74">&#34;name&#34;</span>:<span style="color:#e6db74">&#34;John&#34;</span>,<span style="color:#e6db74">&#34;age&#34;</span>:<span style="color:#e6db74">&#34;19&#34;</span>}]
</span></span><span style="display:flex;"><span>output <span style="color:#f92672">=</span> Count(data, [<span style="color:#e6db74">&#34;age&#34;</span>])
</span></span><span style="display:flex;"><span><span style="color:#75715e">## dict_values([{&#34;age&#34;: &#34;16&#34;, &#34;count&#34;: 1}, {&#34;age&#34;: &#34;19&#34;, &#34;count&#34;: 2}, {&#34;age&#34;: &#34;21&#34;, &#34;count&#34;: 1}])</span>
</span></span></code></pre></div><p>To use leopards on CSV files and perform the above filters and aggregations:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> csv
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> leopards <span style="color:#f92672">import</span> Count
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>data <span style="color:#f92672">=</span> csv<span style="color:#f92672">.</span>DictReader(open(<span style="color:#e6db74">&#34;filename.csv&#34;</span>))
</span></span><span style="display:flex;"><span>output <span style="color:#f92672">=</span> Count(data, [<span style="color:#e6db74">&#34;age&#34;</span>])
</span></span></code></pre></div><hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Pydantic Logfire for LLM and API Observability</title>
      <link>https://saeedesmaili.com/notes/til-pydantic-logfire-for-observability/</link>
      <pubDate>Thu, 19 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://saeedesmaili.com/notes/til-pydantic-logfire-for-observability/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://sentry.io/&#34; target=&#34;_blank&#34; &gt;sentry&lt;/a&gt;
 for automatically logging the errors and exceptions of my python projects. A few months ago I needed to log some information if a specific condition is true in my side project&amp;rsquo;s backend, but I wasn&amp;rsquo;t able to do this with sentry. It apparently can only work when something fails, and you can&amp;rsquo;t capture log messages if there&amp;rsquo;s no failure or exception.&lt;/p&gt;
&lt;p&gt;I looked for an affordable and user friendly observability tool and settled on using &lt;a href=&#34;https://axiom.co/&#34; target=&#34;_blank&#34; &gt;axiom&lt;/a&gt;
. It has a generous 500GB ingestion on free tier plan, but you can only view the events for the past 30 days time period. So I&amp;rsquo;ve been exporting the logs every month into a csv file, since I want to be able to view the trend of some behaviours over time.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I&rsquo;ve been using <a href="https://sentry.io/" target="_blank" >sentry</a>
 for automatically logging the errors and exceptions of my python projects. A few months ago I needed to log some information if a specific condition is true in my side project&rsquo;s backend, but I wasn&rsquo;t able to do this with sentry. It apparently can only work when something fails, and you can&rsquo;t capture log messages if there&rsquo;s no failure or exception.</p>
<p>I looked for an affordable and user friendly observability tool and settled on using <a href="https://axiom.co/" target="_blank" >axiom</a>
. It has a generous 500GB ingestion on free tier plan, but you can only view the events for the past 30 days time period. So I&rsquo;ve been exporting the logs every month into a csv file, since I want to be able to view the trend of some behaviours over time.</p>
<p>Today I came across a new observability tool from <a href="https://pydantic.dev/" target="_blank" >pydantic</a>
 team called <a href="https://pydantic.dev/logfire" target="_blank" >logfire</a>
. It sounds like an excellent tool, and a brilliant way for the team to monetize their work. Logfire has 10M events per month limit on its free tier, and its SDK can be integrated with OpenAI (for logging your LLM API calls), FastAPI, and databases. These three are the main areas that I&rsquo;d like to have observability around on my projects, and the SDK sounds very easy to implement into any new or existing project:</p>
<ol>
<li>Create a new Logfire account and <a href="https://logfire.pydantic.dev/docs/#logfire" target="_blank" >setup a project</a>
.</li>
<li>Get a <code>write token</code> and set it as an envoironment variable:</li>
</ol>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 248 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>n</text>
</g>

    </svg>
  
</div>
<ol start="3">
<li>Send data to Logfire:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> logfire
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>logfire<span style="color:#f92672">.</span>configure()
</span></span><span style="display:flex;"><span>logfire<span style="color:#f92672">.</span>info(<span style="color:#e6db74">&#34;Hello, </span><span style="color:#e6db74">{name}</span><span style="color:#e6db74">!&#34;</span>, name<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;world&#34;</span>)
</span></span></code></pre></div><ul>
<li>Integrate with OpenAI:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> logfire
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> openai
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>client <span style="color:#f92672">=</span> openai<span style="color:#f92672">.</span>AsyncClient()
</span></span><span style="display:flex;"><span>logfire<span style="color:#f92672">.</span>instrument_openai(client) <span style="color:#75715e">## Add this</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">...</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">async</span> <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">stream_openai</span>(messages: list[ChatMessage]):
</span></span><span style="display:flex;"><span>    chunks <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> client<span style="color:#f92672">.</span>chat<span style="color:#f92672">.</span>completions<span style="color:#f92672">.</span>create(
</span></span><span style="display:flex;"><span>        mode1<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;gpt-4o&#34;</span>,
</span></span><span style="display:flex;"><span>        messages<span style="color:#f92672">=</span>messages,
</span></span><span style="display:flex;"><span>        stream<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>
</span></span><span style="display:flex;"><span>    )
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">...</span>
</span></span></code></pre></div><ul>
<li>Integrate with FastAPI:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> logfire
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> fastapi <span style="color:#f92672">import</span> FastAPI
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> FastAPI()
</span></span><span style="display:flex;"><span>logfire<span style="color:#f92672">.</span>instrument_fastapi(app)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">...</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.get</span>(<span style="color:#e6db74">&#34;/1lm/ask/stream/</span><span style="color:#e6db74">{chat_id}</span><span style="color:#e6db74">&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">async</span> <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">llm_stream</span>(chat_id: str) <span style="color:#f92672">-&gt;</span> StreamingResponse:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">...</span>
</span></span></code></pre></div><ul>
<li>Integrate with Python&rsquo;s <code>logging</code> library:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> logging
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> logfire
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>logfire<span style="color:#f92672">.</span>configure()
</span></span><span style="display:flex;"><span>LOGGER <span style="color:#f92672">=</span> logging<span style="color:#f92672">.</span>getLogger(__name__)
</span></span><span style="display:flex;"><span>LOGGER<span style="color:#f92672">.</span>setLevel(logging<span style="color:#f92672">.</span>INFO)
</span></span><span style="display:flex;"><span>LOGGER<span style="color:#f92672">.</span>addHandler(logfire<span style="color:#f92672">.</span>LogfireLoggingHandler())
</span></span></code></pre></div><p>Logfire also has a 30 days retention period, but they are planning to add more options to their paid plans.</p>
<p>To view the logs you can view the live dashboard of the project, or run the following query on the explore page:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> records
</span></span></code></pre></div><p>You can use SQL syntax to further adjust the query and get what you&rsquo;re looking for in the logs.</p>
<p>It&rsquo;s not possible to export the log data from Logfire&rsquo;s UI at the moment, but this is possible with their API (<a href="https://logfire.pydantic.dev/docs/how-to-guides/query-api/" target="_blank" >more info</a>
).</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Build a search engine, not a vector DB</title>
      <link>https://saeedesmaili.com/notes/build-a-search-engine-not-a-vector-db/</link>
      <pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://saeedesmaili.com/notes/build-a-search-engine-not-a-vector-db/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;If you want to make a good RAG tool that uses your documentation, you should start by making a search engine over those documents that would be good enough for a human to use themselves.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This is exactly what I&amp;rsquo;ve been trying to communicate in my org in the past few months. It&amp;rsquo;s 2024 and we still can&amp;rsquo;t have a proper search engine in organizations to find relevant information from various sources. While this problem remains to be solved, organizations are adapting RAG and AI into their tooling, but are missing the important R of the RAG: Retrieval. I&amp;rsquo;ve been an advocate of prioritizing search engines over any AI related tool in the past few months, and I found it refreshing to read about this somewhere else:&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<blockquote>
<p>If you want to make a good RAG tool that uses your documentation, you should start by making a search engine over those documents that would be good enough for a human to use themselves.</p></blockquote>
<p>This is exactly what I&rsquo;ve been trying to communicate in my org in the past few months. It&rsquo;s 2024 and we still can&rsquo;t have a proper search engine in organizations to find relevant information from various sources. While this problem remains to be solved, organizations are adapting RAG and AI into their tooling, but are missing the important R of the RAG: Retrieval. I&rsquo;ve been an advocate of prioritizing search engines over any AI related tool in the past few months, and I found it refreshing to read about this somewhere else:</p>
<blockquote>
<p>Imagine you&rsquo;re a company that wants to build an LLM-powered documentation experience. If you think of a vector database as just providing an expanded memory to your language model, you might just embed all of your company&rsquo;s product docs, and then let users ask questions to your bot. When a user hits enter, you do a vector search for their query, find all of the chunks, load them into context, and then have your language model try to answer the question. In fact, that&rsquo;s the approach we initially took at Stripe when I worked on their AI docs product.</p>
<p>Ultimately though, I found that approach to be a dead-end. The crux is that while vector search is better along some axes than traditional search, it&rsquo;s not magic. Just like regular search, you&rsquo;ll end up with irrelevant or missing documents in your results. Language models, just like humans, can only work with what they have and those irrelevant documents will likely mislead them.</p>
<p>If you want to make a good RAG tool that uses your documentation, you should start by making a search engine over those documents that would be good enough for a human to use themselves. This is likely something your organization has considered before, and if it doesn&rsquo;t exist it&rsquo;s because building a good search engine has traditionally been a significant undertaking.</p></blockquote>
<p><a href="https://blog.elicit.com/search-vs-vector-db/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Access Google Gemini LLM via OpenAI Python Library</title>
      <link>https://saeedesmaili.com/notes/access-google-gemini-llm-via-openai-python-library/</link>
      <pubDate>Sun, 01 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://saeedesmaili.com/notes/access-google-gemini-llm-via-openai-python-library/</guid>
      <description>&lt;p&gt;Google Gemini now can be accessed via OpenAI python library:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; openai &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; OpenAI
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;client &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; OpenAI(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    api_key&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GEMINI_API_KEY&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    base_url&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://generativelanguage.googleapis.com/v1beta/openai/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## rest of the code as you would use openai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It support basic text generation, image input, function calling, structured output, and embeddings.
More info and code examples can be found on &lt;a href=&#34;https://ai.google.dev/gemini-api/docs/openai&#34; target=&#34;_blank&#34; &gt;Gemini docs&lt;/a&gt;
.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Google Gemini now can be accessed via OpenAI python library:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> openai <span style="color:#f92672">import</span> OpenAI
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>client <span style="color:#f92672">=</span> OpenAI(
</span></span><span style="display:flex;"><span>    api_key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;GEMINI_API_KEY&#34;</span>,
</span></span><span style="display:flex;"><span>    base_url<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://generativelanguage.googleapis.com/v1beta/openai/&#34;</span>
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## rest of the code as you would use openai</span>
</span></span></code></pre></div><p>It support basic text generation, image input, function calling, structured output, and embeddings.
More info and code examples can be found on <a href="https://ai.google.dev/gemini-api/docs/openai" target="_blank" >Gemini docs</a>
.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>I Have Two Friends an Introverts Guide to Not Chasing Friendships</title>
      <link>https://saeedesmaili.com/notes/i-have-two-friends-an-introverts-guide-to-not-chasing-friendships/</link>
      <pubDate>Mon, 12 Aug 2024 11:49:59 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/i-have-two-friends-an-introverts-guide-to-not-chasing-friendships/</guid>
      <description>&lt;p&gt;This excellent essay from Karolina was the best I&amp;rsquo;ve read this year. I can related with many of her point on why friendship muscle looks different for every person.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Abroad, I meet local people who don&amp;rsquo;t hang out with expats because they have their Martas. Every time I hear a Dutch or British person say &amp;ldquo;we&amp;rsquo;ve known each other since we were little&amp;rdquo;, I can&amp;rsquo;t help but feel a pang of regret. I&amp;rsquo;m moving countries, schools and jobs and leaving those valuable connections behind, while people who stay in their neighbourhood are easily bound to their friends by time and proximity.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>This excellent essay from Karolina was the best I&rsquo;ve read this year. I can related with many of her point on why friendship muscle looks different for every person.</p>
<blockquote>
<p>Abroad, I meet local people who don&rsquo;t hang out with expats because they have their Martas. Every time I hear a Dutch or British person say &ldquo;we&rsquo;ve known each other since we were little&rdquo;, I can&rsquo;t help but feel a pang of regret. I&rsquo;m moving countries, schools and jobs and leaving those valuable connections behind, while people who stay in their neighbourhood are easily bound to their friends by time and proximity.</p>
<p>And then I look at Facebook at the people who I&rsquo;ve known since I was little, and think: thank God we&rsquo;re no longer friends!</p>
<p>Old friendships will cocoon you in familiarity, but they won&rsquo;t keep up with changes in your life. Unless you make the same choices as your school friends, they will not understand you. <strong>If you live your own life, you will outgrow your old friendships.</strong></p>
<p>And indeed, I look at the types of interactions that locals have with their old friends (their cosy bbqs and gesellige borrels) and I&rsquo;m convinced that for me, they are not a solution. They do not bring me joy.</p></blockquote>
<p>As a person who moved cities and countries, I also sometimes think about my school friends, even trying to find them online, just to know what they&rsquo;re doing and what would&rsquo;ve been like if we were still friends. And almost always I&rsquo;m happy we&rsquo;re not friends anymore.</p>
<blockquote>
<h2 id="when-instead-of-trying-harder-you-stop--thats-maturity">When instead of trying harder, you stop — that&rsquo;s maturity</h2>
<p>I figured out that making an effort to see people who didn&rsquo;t make an effort to see me was too tiring. So I stopped doing that.</p>
<p>I also figured that even though it&rsquo;s meant to be good for me to see people when I don&rsquo;t feel like it, it didn&rsquo;t feel like it was good for me. So I stopped doing that, too.</p>
<p>I considered the stress that surface interactions give me and the benefit they are meant to carry. The stress balance was too high to justify engaging in them.</p>
<p>Just like I don&rsquo;t wear sunscreen when it&rsquo;s not sunny (and I know some people do), I decided I won&rsquo;t try to be more social when I&rsquo;m not lonely.</p>
<p>Because — most importantly — I realised that I was not lonely and my social life was perfectly fine.</p>
<p>It&rsquo;s not the social life from <em>Friends</em> and <em>How I Met Your Mother,</em> but it fits my personality and it brings me joy.</p></blockquote>
<p>Completely agreed.</p>
<blockquote>
<h2 id="if-theres-a-friendship-muscle-it-looks-different-for-every-person">If there&rsquo;s a friendship muscle, it looks different for every person.</h2>
<p>Don&rsquo;t torture yourself with exercises that don&rsquo;t benefit your friendship muscle and instead, find the ones that make sense for you.</p>
<h2 id="fridays-are-not-for-friends-not-for-dates-but-for-whatever-the-f-you-want">Fridays are not for friends, not for dates, but for whatever the f… you want.</h2>
<p>Some of my favourite Friday nights included cleaning the flat, doing Duolingo, writing a diary, going to the gym, eating cereal.</p></blockquote>
<p><a href="https://medium.com/@k.kozmana/i-have-two-friends-9f947491e016" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Goodbye Microsoft Hello Facebook</title>
      <link>https://saeedesmaili.com/notes/goodbye-microsoft-hello-facebook/</link>
      <pubDate>Sun, 04 Aug 2024 17:40:40 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/goodbye-microsoft-hello-facebook/</guid>
      <description>&lt;p&gt;Philip writes about how small cost saving policies at Microsoft irritated him as an employee:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We used to get Dove Bars and beers all the time. It felt like free food was on offer at least once a week, usually with a pretense of some small milestone to celebrate. Why did we cut stuff like this? (I know the boring fiscal reasons why. I&amp;rsquo;m asking the deeper &lt;em&gt;why&lt;/em&gt;, as in, &amp;ldquo;Was it worth the savings? Is Microsoft better now that we&amp;rsquo;ve cut these costs?&amp;rdquo;)&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Philip writes about how small cost saving policies at Microsoft irritated him as an employee:</p>
<blockquote>
<p>We used to get Dove Bars and beers all the time. It felt like free food was on offer at least once a week, usually with a pretense of some small milestone to celebrate. Why did we cut stuff like this? (I know the boring fiscal reasons why. I&rsquo;m asking the deeper <em>why</em>, as in, &ldquo;Was it worth the savings? Is Microsoft better now that we&rsquo;ve cut these costs?&rdquo;)</p>
<p>One day, a sign appeared on a soda fridge in RedWest saying something to the effect of, &ldquo;Did you know that drinks cost Microsoft [ed: millions of dollars] a year? Sodas are your perk at work. Don&rsquo;t bring them home.&rdquo; This depressed me on too many levels to enumerate, but I&rsquo;ll toss out a few:</p>
<ol>
<li>Someone had enough time to get these signs professionally printed and affixed to our fridges.</li>
<li>It was someone&rsquo;s salaried, 40-hour-a-week job to do things like this.</li>
<li>Someone thought soda smuggling was a big enough &ldquo;problem&rdquo; at Microsoft to draw attention to it.</li>
</ol>
<p>How much soda can a person steal? How much does that same person cost the company per hour in salary and benefits? Our most interesting profits will come from capitalizing on huge opportunities, not from micromanaging costs.</p></blockquote>
<p><a href="https://medium.com/@philipsu/goodbye-microsoft-hello-facebook-94a189d56830" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Country Specific Consent Requirements for Photographing People</title>
      <link>https://saeedesmaili.com/notes/country-specific-consent-requirements-for-photographing-people/</link>
      <pubDate>Sat, 29 Jun 2024 13:21:11 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/country-specific-consent-requirements-for-photographing-people/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m an &lt;a href=&#34;https://saeedesmaili.com/photos/&#34; target=&#34;_blank&#34; &gt;aspiring photographer&lt;/a&gt;
, and I love taking photos of moments of life on streets. Since I take my camera wherever I go, it was important to me to know the legal requirements of taking and publishing of such photos. I recently came across &lt;a href=&#34;https://commons.wikimedia.org/wiki/Commons:Country_specific_consent_requirements&#34; target=&#34;_blank&#34; &gt;this nice table&lt;/a&gt;
 on Wikimedia, which categorizes countries on if a consent is required to take photos of identifiable people, and to publish them, and to use them commercially.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I&rsquo;m an <a href="https://saeedesmaili.com/photos/" target="_blank" >aspiring photographer</a>
, and I love taking photos of moments of life on streets. Since I take my camera wherever I go, it was important to me to know the legal requirements of taking and publishing of such photos. I recently came across <a href="https://commons.wikimedia.org/wiki/Commons:Country_specific_consent_requirements" target="_blank" >this nice table</a>
 on Wikimedia, which categorizes countries on if a consent is required to take photos of identifiable people, and to publish them, and to use them commercially.</p>
<blockquote>
<p>In a number of countries consent is needed for just taking a photograph of one or more identifiable people, not to mention publishing it and/or using it commercially, even if the person is in a public place.</p></blockquote>
<p>However, there are many exceptions (orange cells) in the table, which indicates these rules are very complicated and it&rsquo;s not practical in many cases.</p>
<blockquote>
<p>This list is incomplete: <em>Just because a country isn&rsquo;t listed here, it does not reflect a fact that everyone is free to take/publish/commercially use pictures of people in public spaces in that country.</em></p></blockquote>
<p><a href="https://commons.wikimedia.org/wiki/Commons:Country_specific_consent_requirements" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Understanding Input Masking in LLM Finetuning</title>
      <link>https://saeedesmaili.com/posts/understanding-input-masking-in-llm-finetuning/</link>
      <pubDate>Sat, 29 Jun 2024 11:31:39 +0100</pubDate>
      <guid>https://saeedesmaili.com/posts/understanding-input-masking-in-llm-finetuning/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://docs.axolotl.ai/docs/dataset-formats/conversation.html&#34; target=&#34;_blank&#34; &gt;conversational alpaca or sharegpt formats&lt;/a&gt;
 for fine-tuning LLMs with &lt;a href=&#34;https://docs.axolotl.ai/&#34; target=&#34;_blank&#34; &gt;Axolotl&lt;/a&gt;
, but it always felt unnecessary to limit the model on a conversational format when the use-case doesn&amp;rsquo;t require so.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m currently working on a project to classify pull requests in my company&amp;rsquo;s code repositories. The model needs to look at the PR title, description, and code changes, then categorize the PR and explain its reasoning. I thought there must be a way to fine-tune these models with any format I see fitting this specific use-case, and sure there is: &lt;a href=&#34;https://hamel.dev/notes/llm/finetuning/09_template_free.html&#34; target=&#34;_blank&#34; &gt;Template-free Axolotl&lt;/a&gt;
&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I&rsquo;ve been using <a href="https://docs.axolotl.ai/docs/dataset-formats/conversation.html" target="_blank" >conversational alpaca or sharegpt formats</a>
 for fine-tuning LLMs with <a href="https://docs.axolotl.ai/" target="_blank" >Axolotl</a>
, but it always felt unnecessary to limit the model on a conversational format when the use-case doesn&rsquo;t require so.</p>
<p>I&rsquo;m currently working on a project to classify pull requests in my company&rsquo;s code repositories. The model needs to look at the PR title, description, and code changes, then categorize the PR and explain its reasoning. I thought there must be a way to fine-tune these models with any format I see fitting this specific use-case, and sure there is: <a href="https://hamel.dev/notes/llm/finetuning/09_template_free.html" target="_blank" >Template-free Axolotl</a>
</p>
<p>This seemed exactly what I was looking for, but the emphais on &ldquo;masking inputs&rdquo; made me confused:</p>
<blockquote>
<p>If you declare a dataset format such as <code>alpaca</code> or <code>chatml</code>, axolotl knows what is an input (i.e. human) vs. an output (i.e. the assistant) and masks the input labels so that your model can focus on predicting the outputs only. You can construct your prompts without a template by using the <code>input_output</code> format, by setting <code>type: input_output</code> in your configuration file. Unlike <code>type: completion</code>, which is also template-free, <code>type: input_output</code> allows you to mask segments of your text.</p></blockquote>
<p>This was the first time I came across the concept of input masking. It felt counterintuitive at first - why would we want our model to ignore parts of the training data? Isn&rsquo;t all of it important? Wouldn&rsquo;t masking the input prevent the model from learning to respond properly when encountering similar cases during inference time? After going deeper in the Axolotl docs and codes, I&rsquo;ve learned some stuff I&rsquo;d like to share.</p>
<h2 id="what-is-input-masking">What is input masking?</h2>
<p>Input masking is a technique where we intentionally hide parts of the input data from the model during training. It&rsquo;s like covering up certain words in a sentence and asking the model to focus on predicting only the uncovered parts. But why should we do this? There are several facts we need to know:</p>
<ul>
<li>
<p><strong>Distinction between input and output</strong>: In many fine-tuning scenarios, particularly for instruction-following or question-answering tasks, we want the model to learn to generate appropriate responses (outputs) given certain prompts or questions (inputs). By masking the input, we&rsquo;re emphasizing that the model should focus on generating the correct output rather than simply memorizing and repeating the input.</p>
</li>
<li>
<p><strong>Preventing overfitting to prompt templates</strong>: If we train the model on both the input and output, it might start to rely too heavily on specific phrasings or templates in the input. By masking the input, we encourage the model to be more flexible and generalize better to variations in how questions or instructions might be phrased.</p>
</li>
<li>
<p><strong>Focusing on task completion</strong>: The goal is often to have the model learn to perform a task or generate relevant information, not to reproduce the exact input format. Masking helps direct the model&rsquo;s attention to the core task.</p>
</li>
<li>
<p><strong>Efficiency in fine-tuning</strong>: By not training on inputs, we can potentially reduce the amount of computation needed during fine-tuning, as the model doesn&rsquo;t need to adjust its parameters to predict the input tokens.</p>
</li>
<li>
<p><strong>Handling different prompt structures</strong>: This allows for more flexibility in how prompts are structured in our training data, as the model isn&rsquo;t learning to reproduce specific prompt formats.</p>
</li>
</ul>
<h2 id="to-mask-or-not-to-mask">To mask or not to mask</h2>
<p>Based on the above facts, there are scenarios that we might want to use input masking when fine-tuning a language model:</p>
<ul>
<li>Chatbots and conversational AI</li>
<li>Question-answering models</li>
<li>Instruction-following tasks</li>
</ul>
<p>In these cases, we care more about the model generating good responses than repeating exact input phrasings. However, masking isn&rsquo;t always the best choice. We might want to avoid it when:</p>
<ul>
<li>Every detail in the input is crucial for the task</li>
<li>The model needs to understand and reference specific parts of the input</li>
<li>We&rsquo;re working with specialized or technical content where context is key</li>
</ul>
<h2 id="my-use-case-classifying-pull-requests">My use case: classifying pull requests</h2>
<p>As I mentioned previously:</p>
<blockquote>
<p>I&rsquo;m currently working on a project to classify pull requests (PRs) in my company&rsquo;s code repositories. The model needs to look at the PR title, description, and code changes, then categorize the PR and explain its reasoning.</p></blockquote>
<p>For this task, I&rsquo;ve decided not to use input masking. Here&rsquo;s why:</p>
<ul>
<li>
<p><strong>Importance of input details</strong>: In PR classification, every detail in the title, description, and code changes could be crucial for making an accurate classification. By training on the full input, we allow the model to learn important patterns and correlations between specific input features and the resulting classifications.</p>
</li>
<li>
<p><strong>Contextual understanding</strong>: PRs often contain technical jargon, project-specific terms, or code snippets that are important for understanding the nature of the changes. Training on these inputs helps the model build a better contextual understanding of my company&rsquo;s development practices and codebase.</p>
</li>
<li>
<p><strong>Reasoning requirement</strong>: Since my task includes providing reasoning for the classification, the model needs to learn how to reference and analyze specific parts of the input. This is more effectively achieved if the model is trained to process and potentially reproduce relevant parts of the input.</p>
</li>
<li>
<p><strong>Limited output structure</strong>: Unlike more open-ended generation tasks, my output has a specific structure (JSON with classification and reasoning). The risk of the model simply copying large portions of the input into the output is lower, given this constrained format.</p>
</li>
<li>
<p><strong>Potential for implicit feature extraction</strong>: By training on the full input, the model might learn to identify subtle features or patterns in PR descriptions or code changes that are indicative of certain classifications. This implicit feature extraction could lead to more accurate classifications.</p>
</li>
<li>
<p><strong>Handling variations in input</strong>: PRs can vary greatly in length, structure, and content. Training on full inputs helps the model handle this variability more effectively.</p>
</li>
</ul>
<p><a href="mailto:me@saeedesmaili.com" >Let me know</a>
 if I have missed anything or if you know a good learning resource on this topic.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Control a smart light with multiple motion sensors in Home Assistant</title>
      <link>https://saeedesmaili.com/notes/control-a-smart-light-with-multiple-motion-sensors-in-home-assistant/</link>
      <pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://saeedesmaili.com/notes/control-a-smart-light-with-multiple-motion-sensors-in-home-assistant/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://www.home-assistant.io/&#34; target=&#34;_blank&#34; &gt;Home Assistant&lt;/a&gt;
 to control many things at my smart home, including a couple of lights which are toggled on and off with motion sensors. I have one of these in the bathroom, so the motion sensor detects when I enter the bathroom and its light turns on, and the light turns back off if the motion sensor doesn&amp;rsquo;t detect any motion in a specific period (60 seconds). Setting this automation is very easy using the &lt;a href=&#34;https://www.home-assistant.io/docs/automation/using_blueprints/&#34; target=&#34;_blank&#34; &gt;motion-activated light blueprint&lt;/a&gt;
, you just need to choose the entities for the motion sensor and the light, and Home Assistant handles all the hassle of figuring out the logic for when to turn the light on or off, and what to do when a motion is detected in the cool off period.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I&rsquo;ve been using <a href="https://www.home-assistant.io/" target="_blank" >Home Assistant</a>
 to control many things at my smart home, including a couple of lights which are toggled on and off with motion sensors. I have one of these in the bathroom, so the motion sensor detects when I enter the bathroom and its light turns on, and the light turns back off if the motion sensor doesn&rsquo;t detect any motion in a specific period (60 seconds). Setting this automation is very easy using the <a href="https://www.home-assistant.io/docs/automation/using_blueprints/" target="_blank" >motion-activated light blueprint</a>
, you just need to choose the entities for the motion sensor and the light, and Home Assistant handles all the hassle of figuring out the logic for when to turn the light on or off, and what to do when a motion is detected in the cool off period.</p>
<p>The problem is, that this blueprint is limited to one motion entity, so if you want to control a light in a large area that can&rsquo;t be covered with one single sensor, you need to create a more complicated automation. This made me procrastinate on adding a second motion sensor to my bathroom for months, but when I got back to finally doing this last week, I found out that you can use the same blueprint to control a light with multiple sensors using <a href="https://www.home-assistant.io/integrations/group/" target="_blank" >Home Assistant Groups</a>
.</p>
<p>To create a new group:</p>
<ol>
<li>Visit <code>Settings</code> &gt; <code>Devices &amp; services</code> &gt; <code>Helpers</code> &gt; <code>Create Helper</code> &gt; <code>Group</code> &gt; <code>Binary sensor group</code> in your Home Assistant instance.</li>
<li>Choose a name like <code>Bathroom motion sensor group</code> .</li>
<li>Add the entities of the motion sensors in the <code>Members</code> section.</li>
<li>Click <code>Submit</code> .</li>
<li>After creating the group, edit it and choose <code>Motion</code> for <code>Show as</code> (otherwise, it won&rsquo;t show up in the motion-activated light blueprint in the next step).</li>
<li>Create a simple motion-activated light sensor using the automation blueprint, and choose the recently created group as the trigger.</li>
</ol>
<p>That&rsquo;s it. Now the light in the bathroom will automagically be toggled on and off when either of the motion sensors detect motion.</p>
<p>To make this more interesting, I wanted the light to stay on if the smart speaker in the bathroom is playing music (even if there is no motion, which means I&rsquo;m taking a shower but the shower curtain blocks the motion sensors from detecting motion). To achieve this, I needed to add the state of my smart speaker to the group created above:</p>
<ol start="7">
<li>
<p>Create a new binary sensor using <a href="https://www.home-assistant.io/integrations/template/" target="_blank" >templates</a>
 to aggregate states like <code>playing</code> and <code>paused</code> as <code>on</code> , and others ( <code>idle</code> and <code>off</code>) as <code>off</code> for the smart speaker by visiting: <code>Settings</code> &gt; <code>Devices &amp; services</code> &gt; <code>Helpers</code> &gt; <code>Create Helper</code> &gt; <code>Template</code> &gt; <code>Template a binary sensor</code>.</p>
</li>
<li>
<p>Choose a name like <code>Smart speaker is playing</code>.</p>
</li>
<li>
<p>State template: <code>{% if is_state('media_player.your_speaker_entity_id', 'playing') or is_state('media_player.your_speaker_entity_id', 'paused') %} true {% else %} false {% endif %}</code> .</p>
</li>
<li>
<p>Device class: <code>Motion</code> .</p>
</li>
<li>
<p>Now edit the group that we created in step 5, and add this new binary sensor as another member to the group.</p>
</li>
</ol>
<p>Let me know if you have any questions.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Upstream Productivity</title>
      <link>https://saeedesmaili.com/notes/upstream-productivity/</link>
      <pubDate>Thu, 13 Jun 2024 11:53:48 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/upstream-productivity/</guid>
      <description>&lt;p&gt;I like this emphasis on the impact of health on productivity:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Biological health is upstream of mental health and mental health is upstream of productivity.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Adding to this, I believe engaging in physical activities and working on improving one&amp;rsquo;s fitness has tremendous effect on productivity in long term. I play tennis regularly, the fact that I make progress in the court and I improve and become a better amateur player increases my confidence in me. I can later use that boost of confidence in my work and personal life.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I like this emphasis on the impact of health on productivity:</p>
<blockquote>
<p>Biological health is upstream of mental health and mental health is upstream of productivity.</p></blockquote>
<p>Adding to this, I believe engaging in physical activities and working on improving one&rsquo;s fitness has tremendous effect on productivity in long term. I play tennis regularly, the fact that I make progress in the court and I improve and become a better amateur player increases my confidence in me. I can later use that boost of confidence in my work and personal life.</p>
<p><a href="https://jakobgreenfeld.com/upstream-productivity/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Evidence That You Should Take Your Content Diet More Seriously</title>
      <link>https://saeedesmaili.com/notes/evidence-that-you-should-take-your-content-diet-more-seriously/</link>
      <pubDate>Thu, 13 Jun 2024 11:47:01 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/evidence-that-you-should-take-your-content-diet-more-seriously/</guid>
      <description>&lt;p&gt;Interesting point about various types of content a creator can focus on:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A surprising learning is that content funnels do not work. In theory, you produce entertaining, shortform content to get attention. Then once people are hooked they start consuming your deeper, educational, longform content. Except that this doesn&amp;rsquo;t happen. People who consume entertaining, shortform content are not interested in longform content. They just want more entertaining, shortform content.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://jakobgreenfeld.com/junk-content/&#34; target=&#34;_blank&#34; &gt;source&lt;/a&gt;
&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Interesting point about various types of content a creator can focus on:</p>
<blockquote>
<p>A surprising learning is that content funnels do not work. In theory, you produce entertaining, shortform content to get attention. Then once people are hooked they start consuming your deeper, educational, longform content. Except that this doesn&rsquo;t happen. People who consume entertaining, shortform content are not interested in longform content. They just want more entertaining, shortform content.</p></blockquote>
<p><a href="https://jakobgreenfeld.com/junk-content/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>To Chunk or Not to Chunk With the Long Context Single Embedding Models</title>
      <link>https://saeedesmaili.com/notes/to-chunk-or-not-to-chunk-with-the-long-context-single-embedding-models/</link>
      <pubDate>Sun, 02 Jun 2024 20:24:42 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/to-chunk-or-not-to-chunk-with-the-long-context-single-embedding-models/</guid>
      <description>&lt;p&gt;In his excellent write up on state of the art embedding models, Aapo Tanskanen compares the retrieval score for when the source documents are split into chunks and when they&amp;rsquo;re not:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Transformer-based single embedding models have traditionally had 512 token context windows because of the usage of the original BERT encoder. Newer models, like the BGE-M3, have expanded the token window to much larger scales. It could be tempting to forget chunking and just embed long texts as they are. However, that would mean mashing many topics and entities you might want to search for into a single vector representation, which doesn&amp;rsquo;t sound like a good idea.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>In his excellent write up on state of the art embedding models, Aapo Tanskanen compares the retrieval score for when the source documents are split into chunks and when they&rsquo;re not:</p>
<blockquote>
<p>Transformer-based single embedding models have traditionally had 512 token context windows because of the usage of the original BERT encoder. Newer models, like the BGE-M3, have expanded the token window to much larger scales. It could be tempting to forget chunking and just embed long texts as they are. However, that would mean mashing many topics and entities you might want to search for into a single vector representation, which doesn&rsquo;t sound like a good idea.</p></blockquote>
<blockquote>
<p>I conducted a quick experiment to find out if the advertised long context window truly works well. I embedded all test set articles without chunking using the BGE-M3 dense single embedding representation with the maximum 8192 context window setting. Then, we can compare test set results against the chunked version (maximum of 512 tokens per chunk).</p></blockquote>
<table>
  <thead>
      <tr>
          <th>Model</th>
          <th>MRR@1</th>
          <th>MRR@3</th>
          <th>MRR@5</th>
          <th>MRR@10</th>
          <th>MRR@20</th>
          <th>MRR@50</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>BAAI/bge-m3 dense chunked</td>
          <td><strong>0.842</strong></td>
          <td><strong>0.890</strong></td>
          <td><strong>0.892</strong></td>
          <td><strong>0.893</strong></td>
          <td><strong>0.894</strong></td>
          <td><strong>0.895</strong></td>
      </tr>
      <tr>
          <td>BAAI/bge-m3 dense no chunking</td>
          <td>0.739</td>
          <td>0.807</td>
          <td>0.820</td>
          <td>0.825</td>
          <td>0.826</td>
          <td>0.826</td>
      </tr>
  </tbody>
</table>
<blockquote>
<p>As we can see, long context single embedding retrieval gets very poor MRR@K scores compared to the chunked version. &hellip; Mashing the whole article into a single embedding clearly does not perform well when there are targeted questions about different parts of the content.</p></blockquote>
<p>This is a great finding. Another advantage of chunking the source documents and retrieving chunked texts when building a RAG service is you&rsquo;ll end up with much smaller number of tokens in your LLM prompt, and this saves you in cost and latency.</p>
<p><a href="https://www.linkedin.com/pulse/guidebook-state-of-the-art-embeddings-information-aapo-tanskanen-pc3mf" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Excuse Me Is There a Problem</title>
      <link>https://saeedesmaili.com/notes/excuse-me-is-there-a-problem/</link>
      <pubDate>Mon, 27 May 2024 15:28:13 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/excuse-me-is-there-a-problem/</guid>
      <description>&lt;p&gt;Do you have an idea for a new business or product? In his excellent blog post, Jason provides a useful diagram for differentiating between ideas and problems that worth pursuing vs the ones that don&amp;rsquo;t:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;longform.asmartbear.com/problem/86b606f6.svg&#34; loading=&#34;lazy&#34; src=&#34;https://longform.asmartbear.com/problem/86b606f6.svg&#34;&gt;
He explains each part of the diagram in details in the post. I highly recommend reading it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://longform.asmartbear.com/problem/&#34; target=&#34;_blank&#34; &gt;source&lt;/a&gt;
&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Do you have an idea for a new business or product? In his excellent blog post, Jason provides a useful diagram for differentiating between ideas and problems that worth pursuing vs the ones that don&rsquo;t:</p>
<p><img alt="longform.asmartbear.com/problem/86b606f6.svg" loading="lazy" src="https://longform.asmartbear.com/problem/86b606f6.svg">
He explains each part of the diagram in details in the post. I highly recommend reading it.</p>
<p><a href="https://longform.asmartbear.com/problem/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Lessons After a Half Billion Gpt Tokens</title>
      <link>https://saeedesmaili.com/notes/lessons-after-a-half-billion-gpt-tokens/</link>
      <pubDate>Mon, 27 May 2024 14:21:27 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/lessons-after-a-half-billion-gpt-tokens/</guid>
      <description>&lt;p&gt;Ken writes about the lessons they&amp;rsquo;ve learned building new LLM-based features into their product.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;when-it-comes-to-prompts-less-is-more&#34;&gt;When it comes to prompts, less is more&lt;/h3&gt;
&lt;p&gt;Not enumerating an exact list or instructions in the prompt produces better results, if that thing was already common knowledge. GPT is not dumb, and it actually gets confused if you over-specify.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This has been my experience as well. For a recent project, I first started with a very long and detailed prompt, asking the LLM to classify a text and produce a summary. GPT-4, GPT-3.5, Claude-3-Opus, and Claude-3-Haiku all performed average or poorly. I then experimented with shorter prompts, and with some adjustments I was able to get much better responses with a very much shorter prompt.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Ken writes about the lessons they&rsquo;ve learned building new LLM-based features into their product.</p>
<blockquote>
<h3 id="when-it-comes-to-prompts-less-is-more">When it comes to prompts, less is more</h3>
<p>Not enumerating an exact list or instructions in the prompt produces better results, if that thing was already common knowledge. GPT is not dumb, and it actually gets confused if you over-specify.</p></blockquote>
<p>This has been my experience as well. For a recent project, I first started with a very long and detailed prompt, asking the LLM to classify a text and produce a summary. GPT-4, GPT-3.5, Claude-3-Opus, and Claude-3-Haiku all performed average or poorly. I then experimented with shorter prompts, and with some adjustments I was able to get much better responses with a very much shorter prompt.</p>
<blockquote>
<h3 id="gpt-is-really-bad-at-producing-the-null-hypothesis">GPT is really bad at producing the null hypothesis</h3>
<p>&ldquo;Return an empty output if you don&rsquo;t find anything&rdquo; – is probably the most error-prone prompting language we came across. Not only does GPT often chooses to hallucinate rather than return nothing, it also causes it to just lack confidence a lot, returning blank more often than it should. It basically doesn&rsquo;t know how to say &ldquo;I don&rsquo;t know&rdquo;.</p></blockquote>
<p>Again, very true. Be cautious in asking an LLM to return &ldquo;nothing&rdquo; or to respond with &ldquo;I don&rsquo;t know&rdquo; if <em>condition</em>. I&rsquo;ve found the models from Anthropic (specially Claude-3-Haiku) to be terrible in responding negatively. They <em>really</em> want to respond with something satisfying to the prompt, even if the <em>condition</em> to respond &ldquo;I don&rsquo;t know&rdquo; is met.</p>
<p><a href="https://kenkantzer.com/lessons-after-a-half-billion-gpt-tokens/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Lucky vs Repeatable</title>
      <link>https://saeedesmaili.com/notes/lucky-vs-repeatable/</link>
      <pubDate>Fri, 03 May 2024 11:32:55 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/lucky-vs-repeatable/</guid>
      <description>&lt;p&gt;&amp;ldquo;Luck&amp;rdquo; is one of the most interesting topics to me, and I always find myself paying extra attention to anyone talking about what &amp;ldquo;luck&amp;rdquo; is and how it can be somehow controlled. Morgen makes a useful distinction between &amp;ldquo;lucky&amp;rdquo; and &amp;ldquo;repeatable&amp;rdquo; traits:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; a better way to frame luck is by asking: what isn&amp;rsquo;t repeatable? Did Jeff Bezos get lucky creating Amazon? Not in the same way a lottery winner is lucky, of course. He was visionary and ambitious and savvy to a degree you only see a few times per century.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>&ldquo;Luck&rdquo; is one of the most interesting topics to me, and I always find myself paying extra attention to anyone talking about what &ldquo;luck&rdquo; is and how it can be somehow controlled. Morgen makes a useful distinction between &ldquo;lucky&rdquo; and &ldquo;repeatable&rdquo; traits:</p>
<blockquote>
<p>&hellip; a better way to frame luck is by asking: what isn&rsquo;t repeatable? Did Jeff Bezos get lucky creating Amazon? Not in the same way a lottery winner is lucky, of course. He was visionary and ambitious and savvy to a degree you only see a few times per century.</p></blockquote>
<blockquote>
<p>But could he, starting today, without any money or name recognition, create a new multi-trillion dollar business from scratch? <em>Maybe</em>, but probably not. There are so many things that helped Amazon become what it is that can&rsquo;t be replicated – growth of the internet, market conditions, old competitors, politics, regulations, etc. Bezos is enormously skilled in a way that is not luck. But a lot of what he did was not repeatable. Those points are not contradictory.</p></blockquote>
<blockquote>
<p>It&rsquo;s so important to know the difference between the two when attempting to learn from someone. You want to try to emulate skills that are repeatable. The great thing when you ask, &ldquo;is this repeatable?&rdquo; is that you start to focus on things that you and I – ordinary lay people – have a chance of repeating ourselves. You can learn a lot from Warren Buffett&rsquo;s patience. But you can&rsquo;t replicate the market environment he had in the 1950s, so be careful copying the specific strategies he used back then.</p></blockquote>
<p><a href="https://collabfund.com/blog/lucky-vs-repeatable/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Running Python on a serverless GPU instance for machine learning inference</title>
      <link>https://saeedesmaili.com/posts/running-python-on-a-serverless-gpu-instance/</link>
      <pubDate>Mon, 22 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://saeedesmaili.com/posts/running-python-on-a-serverless-gpu-instance/</guid>
      <description>&lt;p&gt;I was experimenting with some speech-to-text work using &lt;a href=&#34;https://saeedesmaili.com/exploring-openai-whisper-with-non-english-voices/&#34; &gt;OpenAI&amp;rsquo;s Whisper models&lt;/a&gt;
 today, and transcribing a 15-minute audio file with Whisper &lt;code&gt;tiny&lt;/code&gt; model on AWS Lambda (3 vcpu) took 120 seconds. I was curious how faster this could be if I ran the same transcription model on a GPU instance, and with a quick search, &lt;a href=&#34;https://modal.com&#34; target=&#34;_blank&#34; &gt;modal.com&lt;/a&gt;
 seemed like a nice option to spin up a GPU machine, run the code, and shut down the machine, similar to how AWS Lambda works.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I was experimenting with some speech-to-text work using <a href="/exploring-openai-whisper-with-non-english-voices/" >OpenAI&rsquo;s Whisper models</a>
 today, and transcribing a 15-minute audio file with Whisper <code>tiny</code> model on AWS Lambda (3 vcpu) took 120 seconds. I was curious how faster this could be if I ran the same transcription model on a GPU instance, and with a quick search, <a href="https://modal.com" target="_blank" >modal.com</a>
 seemed like a nice option to spin up a GPU machine, run the code, and shut down the machine, similar to how AWS Lambda works.</p>
<p>The cheapest GPU instance on modal.com is Nvidia T4 which costs $0.000164 per second and uses AWS infrastructure behind the scenes. The free starter plan on modal.com includes $30 credit, enough to experiment and try their services. Although the <a href="https://modal.com/docs/reference" target="_blank" >documentation</a>
 is good enough, it took me some time to figure out how to quickly run my code on a T4 GPU without worrying about docker images, so here is a quick guide on how to run your Python code on GPU instances on modal.com from scratch.</p>
<h2 id="preparation">Preparation</h2>
<p>After creating an account on <a href="https://modal.com/" target="_blank" >modal.com</a>
, install their Python library:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install modal
</span></span></code></pre></div><p>and run the <code>setup</code> command:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>modal setup
</span></span><span style="display:flex;"><span><span style="color:#75715e">## or: python3 -m modal setup</span>
</span></span></code></pre></div><p>This will open a web browser and if you&rsquo;re logged in to your modal account, it will automatically generate a token and save it on your device.</p>
<h2 id="our-code">Our code</h2>
<p>You&rsquo;ll first need to define the environment in which your code will be running. Start <code>my_code.py</code> with:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> modal
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>image <span style="color:#f92672">=</span> modal<span style="color:#f92672">.</span>Image<span style="color:#f92672">.</span>debian_slim()
</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> modal<span style="color:#f92672">.</span>App(image<span style="color:#f92672">=</span>image)
</span></span></code></pre></div><p>Then include what you want to run remotely (on a GPU instance in this case) and wrap it with <code>@app.function</code> decorator:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#a6e22e">@app.function</span>(gpu<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;t4&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">square</span>(x):
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;This code is running on a remote worker!&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> x<span style="color:#f92672">**</span><span style="color:#ae81ff">2</span>
</span></span></code></pre></div><p>And finally, define an entry point function to call from your local machine when triggering the remote instance:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#a6e22e">@app.local_entrypoint</span>()
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">main</span>():
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;the square is&#34;</span>, square<span style="color:#f92672">.</span>remote(<span style="color:#ae81ff">42</span>))
</span></span></code></pre></div><p>So the final state of <code>my_code.py</code> should be:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> modal
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>image <span style="color:#f92672">=</span> modal<span style="color:#f92672">.</span>Image<span style="color:#f92672">.</span>debian_slim()
</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> modal<span style="color:#f92672">.</span>App(image<span style="color:#f92672">=</span>image)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.function</span>(gpu<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;t4&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">run_remote</span>(x):
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;This code is running on a remote worker!&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> x<span style="color:#f92672">**</span><span style="color:#ae81ff">2</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.local_entrypoint</span>()
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">main</span>():
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;the square is&#34;</span>, run_remote<span style="color:#f92672">.</span>remote(<span style="color:#ae81ff">42</span>))
</span></span></code></pre></div><p>Note that <code>t4</code> is the cheapest GPU available, and you can use <a href="https://modal.com/docs/reference/modal.gpu" target="_blank" >other GPU instances</a>
 if you&rsquo;d like. To run this dummy <code>run_remote</code> function on a GPU instance, trigger it with the following command on your local terminal:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>modal run my_code.py
</span></span><span style="display:flex;"><span><span style="color:#75715e">## or python3 -m modal run my_code.py</span>
</span></span></code></pre></div><p><img alt="result of running the first gpu instance" loading="lazy" src="/images/2024/20240422-modal-com-gpu-1.png"></p>
<p>Nice! We were able to run a simple function on GPU. You can view the logs by clicking on the URL in the terminal (<code>https://modal.com/&lt;your-username&gt;/apps/ap-&lt;blah-blah-blah&gt;</code>) and monitor your credit usage on <a href="https://modal.com/settings/saeedesmaili/usage" target="_blank" >your billing page</a>
.</p>
<h2 id="more-serious-code">More serious code</h2>
<p>The above sample code can easily be found on the modal&rsquo;s documentation, but stuff gets more complicated if you want to do more serious work. Getting back to my text-to-speech code, I had to add a few steps:</p>
<ul>
<li>Include a local audio file (what I want to transcribe) from my device.</li>
<li>Install Python libraries (<code>openai-whisper</code> and <code>faster-whisper</code>).</li>
<li>Install <code>ffmpeg</code> (it&rsquo;s required for <code>openai-whisper</code> to work).</li>
</ul>
<p>Let&rsquo;s start by refining our image and environment:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>image <span style="color:#f92672">=</span> (
</span></span><span style="display:flex;"><span>    modal<span style="color:#f92672">.</span>Image<span style="color:#f92672">.</span>debian_slim()
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">.</span>apt_install(<span style="color:#e6db74">&#34;ffmpeg&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">.</span>pip_install(<span style="color:#e6db74">&#34;openai-whisper&#34;</span>, <span style="color:#e6db74">&#34;faster-whisper&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">.</span>copy_local_file(
</span></span><span style="display:flex;"><span>        local_path<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/&lt;path-to-our-local-file&gt;/&lt;filename&gt;.m4a&#34;</span>,
</span></span><span style="display:flex;"><span>        remote_path<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;./tmp/&#34;</span>,
</span></span><span style="display:flex;"><span>    )
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> modal<span style="color:#f92672">.</span>App(image<span style="color:#f92672">=</span>image)
</span></span></code></pre></div><p>And update our <code>run_remote</code> function with what we&rsquo;ll need for transcribing an audio file:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#a6e22e">@app.function</span>(gpu<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;t4&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">run_remote</span>():
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;This code is running on a remote worker!&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">import</span> time
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">import</span> whisper
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">from</span> faster_whisper <span style="color:#f92672">import</span> WhisperModel
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    file_path <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;/tmp/&lt;filename&gt;.m4a&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    whisper_model <span style="color:#f92672">=</span> whisper<span style="color:#f92672">.</span>load_model(<span style="color:#e6db74">&#34;tiny.en&#34;</span>)
</span></span><span style="display:flex;"><span>    t1 <span style="color:#f92672">=</span> time<span style="color:#f92672">.</span>perf_counter()
</span></span><span style="display:flex;"><span>    result <span style="color:#f92672">=</span> whisper_model<span style="color:#f92672">.</span>transcribe(file_path)
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;time passed with openai-whisper: &#34;</span>, time<span style="color:#f92672">.</span>perf_counter() <span style="color:#f92672">-</span> t1)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    model <span style="color:#f92672">=</span> WhisperModel(<span style="color:#e6db74">&#34;tiny.en&#34;</span>, device<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;cuda&#34;</span>, compute_type<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;float16&#34;</span>)
</span></span><span style="display:flex;"><span>    t1 <span style="color:#f92672">=</span> time<span style="color:#f92672">.</span>perf_counter()
</span></span><span style="display:flex;"><span>    segments, info <span style="color:#f92672">=</span> model<span style="color:#f92672">.</span>transcribe(file_path, beam_size<span style="color:#f92672">=</span><span style="color:#ae81ff">5</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">## note: `segments` is a generator, so we&#39;ll need to iterate over it to</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">##       be able to get the transcription.</span>
</span></span><span style="display:flex;"><span>    segments_result <span style="color:#f92672">=</span> list(segments)
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;time passed with faster-whisper: &#34;</span>, time<span style="color:#f92672">.</span>perf_counter() <span style="color:#f92672">-</span> t1)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.local_entrypoint</span>()
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">main</span>():
</span></span><span style="display:flex;"><span>    run_remote<span style="color:#f92672">.</span>remote()
</span></span></code></pre></div><p>Note that we need to include the <code>import</code>s inside our <code>run_remote</code> function, as that&rsquo;s what actually will be getting executed on the remote instance.</p>
<p>This is all we need, and by running the <code>modal run my_code.py</code> command and waiting for our audio to get transcribed (twice in this case), we should get the following result (of course, the actual values of <code>time passed</code> will be different depending on what GPU instance you use and the length of the file):</p>
<p><img alt="final result of running the transcription code on a gpu instance" loading="lazy" src="/images/2024/20240422-modal-com-gpu-2.png"></p>
<p>We can see that by running this transcription process on GPU, we reduced the time it takes to do the job from 120 seconds to 31 and 14 seconds. A very nice achievement, but we should take the important factor of pricing into account as well (maybe in a future post).</p>
<h2 id="troubleshooting">Troubleshooting</h2>
<p>If you&rsquo;re getting the following error when running <code>faster-whisper</code> (or any other code) with <code>cuda</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 1104 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='472' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='480' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='488' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='496' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='504' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='512' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='520' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='528' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='536' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='544' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='552' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='560' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='568' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='576' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='584' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='592' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='600' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='608' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='616' y='4' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='624' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='640' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='648' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='656' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='664' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='672' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='680' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='696' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='704' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='712' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='720' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='736' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='744' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='752' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='760' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='768' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='776' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='792' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='800' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='808' y='4' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='816' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='824' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='832' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='848' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='856' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='864' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='872' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='880' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='896' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='904' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='920' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='928' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='936' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='944' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='960' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='968' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='976' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='984' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1000' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1008' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1024' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1032' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1040' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1048' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1056' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1064' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1072' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1080' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1088' y='4' fill='currentColor' style='font-size:1em'>y</text>
</g>

    </svg>
  
</div>
<p>you can fix it by explicitly setting the path of the <code>cuda</code> installations in your image definition using <code>env</code> (took me some time to figure out this fix):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>image <span style="color:#f92672">=</span> (
</span></span><span style="display:flex;"><span>    modal<span style="color:#f92672">.</span>Image<span style="color:#f92672">.</span>debian_slim(python_version<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;3.11&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">.</span>env(
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;LD_LIBRARY_PATH&#34;</span>: <span style="color:#e6db74">&#34;/usr/local/lib/python3.11/site-packages/nvidia/cublas/lib:/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib&#34;</span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    )
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">.</span>apt_install(<span style="color:#e6db74">&#34;ffmpeg&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">.</span>pip_install(<span style="color:#e6db74">&#34;openai-whisper&#34;</span>, <span style="color:#e6db74">&#34;faster-whisper&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">.</span>copy_local_file(
</span></span><span style="display:flex;"><span>        local_path<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/&lt;path-to-our-local-file&gt;/&lt;filename&gt;.m4a&#34;</span>,
</span></span><span style="display:flex;"><span>        remote_path<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;./tmp/&#34;</span>,
</span></span><span style="display:flex;"><span>    )
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> modal<span style="color:#f92672">.</span>App(image<span style="color:#f92672">=</span>image)
</span></span></code></pre></div><h2 id="using-jupyter-notebook">Using <code>Jupyter</code> notebook</h2>
<p>If you&rsquo;d like to have a quick exploration using a <code>jupyter</code> notebook, you can run the following command to spin up a GPU instance and experiment with your code:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>modal launch jupyter --gpu t4
</span></span></code></pre></div><p>Note that you&rsquo;ll be using your credit for the whole amount of time that this <code>jupyter</code> instance is up, even if you don&rsquo;t run any code. Make sure to stop it by terminating the command on your terminal.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Prove It</title>
      <link>https://saeedesmaili.com/notes/prove-it/</link>
      <pubDate>Thu, 11 Apr 2024 17:57:10 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/prove-it/</guid>
      <description>&lt;p&gt;This is a fantastic reminder from Herbert:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you want to do something, like really want to do it, you need to prove it. That starts with you proving it to yourself.&lt;/p&gt;
&lt;p&gt;In difficult circumstances, do you make excuses? Or do you face your problem head on? Are you willing to make difficult decisions to do what you’ve committed to? Are you willing to put out bad work in order to improve? Are you open to taking feedback—even if it hurts—in order to improve?&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>This is a fantastic reminder from Herbert:</p>
<blockquote>
<p>If you want to do something, like really want to do it, you need to prove it. That starts with you proving it to yourself.</p>
<p>In difficult circumstances, do you make excuses? Or do you face your problem head on? Are you willing to make difficult decisions to do what you’ve committed to? Are you willing to put out bad work in order to improve? Are you open to taking feedback—even if it hurts—in order to improve?</p>
<p>Doing these things proves to you that you want to do it. People will see that and gravitate towards it, because it’s so unusual. Not doing these things suggests to you that you’re pretending. People will see that too.</p></blockquote>
<p><a href="https://herbertlui.net/prove-it/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Can You Just Quickly Pull This Data for Me</title>
      <link>https://saeedesmaili.com/notes/can-you-just-quickly-pull-this-data-for-me/</link>
      <pubDate>Mon, 01 Apr 2024 11:07:21 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/can-you-just-quickly-pull-this-data-for-me/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Them: Can you just quickly pull this data for me?&lt;/p&gt;
&lt;p&gt;Me: Sure, let me just:&lt;/p&gt;
&lt;p&gt;SELECT * FROM some_ideal_clean_and_pristine.table_that_you_think_exists&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://twitter.com/sethrosen/status/1252291581320757249&#34; target=&#34;_blank&#34; &gt;source&lt;/a&gt;
&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<blockquote>
<p>Them: Can you just quickly pull this data for me?</p>
<p>Me: Sure, let me just:</p>
<p>SELECT * FROM some_ideal_clean_and_pristine.table_that_you_think_exists</p></blockquote>
<p><a href="https://twitter.com/sethrosen/status/1252291581320757249" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>An Introvert&#39;s Guide to Visibility in the Workplace</title>
      <link>https://saeedesmaili.com/notes/an-introvert-guide-to-visibility-in-the-workplace/</link>
      <pubDate>Sun, 31 Mar 2024 14:24:12 +0200</pubDate>
      <guid>https://saeedesmaili.com/notes/an-introvert-guide-to-visibility-in-the-workplace/</guid>
      <description>&lt;p&gt;Melody is basically describing me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many introverts value depth and thoughtfulness in their work over noise and showmanship. They&amp;rsquo;re content to contribute without constant recognition or the spotlight.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;And the consequences part also checks out:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While this tendency is admirable, it comes with pitfalls, especially in the modern, remote-first work world where being &amp;ldquo;out of sight&amp;rdquo; often equates to being &amp;ldquo;out of mind.&amp;rdquo; Perhaps you&amp;rsquo;ve been overlooked for a promotion because a senior leader wasn&amp;rsquo;t aware of you or your accomplishments. Or maybe your quiet demeanor has been mistaken for a lack of passion. These experiences may have awakened you to the fact that in today&amp;rsquo;s competitive workplace, hard work isn&amp;rsquo;t enough. You need to make sure your efforts are seen and acknowledged to unlock new opportunities and support.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Melody is basically describing me:</p>
<blockquote>
<p>Many introverts value depth and thoughtfulness in their work over noise and showmanship. They&rsquo;re content to contribute without constant recognition or the spotlight.</p></blockquote>
<p>And the consequences part also checks out:</p>
<blockquote>
<p>While this tendency is admirable, it comes with pitfalls, especially in the modern, remote-first work world where being &ldquo;out of sight&rdquo; often equates to being &ldquo;out of mind.&rdquo; Perhaps you&rsquo;ve been overlooked for a promotion because a senior leader wasn&rsquo;t aware of you or your accomplishments. Or maybe your quiet demeanor has been mistaken for a lack of passion. These experiences may have awakened you to the fact that in today&rsquo;s competitive workplace, hard work isn&rsquo;t enough. You need to make sure your efforts are seen and acknowledged to unlock new opportunities and support.</p></blockquote>
<p>We&rsquo;re living in a very sad world that it&rsquo;s not enough to work hard, you should make sure people know you&rsquo;re working hard, and this doesn&rsquo;t come naturally for us introverts.</p>
<p>Melody has some advice:</p>
<blockquote>
<h3 id="speak-up-early-in-meetings">Speak up early in meetings</h3>
<p>&hellip; introverts, with their tendency for introspection, can sometimes fade into the background during meetings, over-indexing on listening, deliberating too long (or overthinking) their contributions, or deferring to authority figures in the room. If you&rsquo;ve ever held back in a meeting, waiting for the &ldquo;right moment&rdquo; to jump in, you know how quickly the moment can pass you by. The longer you wait, the tougher it gets to interject, and before you know it, all the good ideas are already out on the table. As the meeting progresses, your anxiety builds, making the hurdle to speak up seem even higher. You can circumvent this cycle by challenging yourself to be the second or third person to contribute in a meeting. This pushes you to overcome the initial barrier of participation, which is often the hardest part. Plus, it gets your voice and perspectives out there early when everyone&rsquo;s still paying attention. Once you&rsquo;ve broken the ice, you&rsquo;ll likely find yourself feeling more at ease and ready to contribute even more.</p></blockquote>
<blockquote>
<h3 id="ditch-self-deprecation">Ditch self-deprecation</h3>
<p>&hellip; introverts tend to habitually downplay their ideas and achievements. But habitually using disqualifiers like &ldquo;I&rsquo;m no expert on this&rdquo; can lead others to underestimate your knowledge and capabilities, unintentionally signaling you&rsquo;re not a go-to resource or thought leader in your area, even when the opposite is true. Over time, this can diminish your authority and influence. To change how your communication is received, swap self-deprecating statements for more assertive language. For example:</p>
<ul>
<li>Instead of, &ldquo;This may not be right, but&hellip;&rdquo; try, &ldquo;Another approach could be&hellip;&rdquo;</li>
<li>Instead of, &ldquo;Just throwing this out there&hellip;&rdquo; try, &ldquo;I&rsquo;d like to propose&hellip;&rdquo;</li>
<li>Instead of, &ldquo;Sorry if this is off-topic&hellip;&rdquo; try, &ldquo;To broaden our perspective&hellip;&rdquo;</li>
<li>Instead of, &ldquo;I haven&rsquo;t looked into this much&hellip;&rdquo; try, &ldquo;My initial thoughts are&hellip;&rdquo;</li>
<li>Instead of, &ldquo;This is just my opinion&hellip;&rdquo; try, &ldquo;Based on my understanding&hellip;&rdquo;</li>
</ul></blockquote>
<blockquote>
<h3 id="leverage-asynchronous-methods-of-communication">Leverage asynchronous methods of communication</h3>
<p>Unlike real-time conversations that demand immediate responses, asynchronous communication allows for a more reflective and deliberate exchange, which is a perfect fit for introverts. This gives you the opportunity to organize your thoughts and articulate your insights without the pressure of responding on the spot.</p></blockquote>
<p><a href="https://hbr.org/2024/03/an-introverts-guide-to-visibility-in-the-workplace" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Dealing With Surprising Human Emotions: Desk Moves</title>
      <link>https://saeedesmaili.com/notes/dealing-with-surprising-human-emotions-desk-moves/</link>
      <pubDate>Fri, 22 Mar 2024 15:53:52 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/dealing-with-surprising-human-emotions-desk-moves/</guid>
      <description>&lt;p&gt;After reading this post from Lara, I finally understand why I&amp;rsquo;ve been feeling strangely uncomfortable whenever my work desks have been moved in the past.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here are humans&amp;rsquo; core needs in the &lt;a href=&#34;https://www.palomamedina.com/biceps&#34; target=&#34;_blank&#34; &gt;BICEPS&lt;/a&gt;
 model:&lt;/p&gt;
&lt;h3 id=&#34;belonging&#34;&gt;Belonging&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Community: A feeling of friendship and closeness with a group, or being part of a tight community of any size.&lt;/li&gt;
&lt;li&gt;Community well-being: People are cared for, the whole group feels happy and healthy.&lt;/li&gt;
&lt;li&gt;Connection: Feeling kinship and understanding with&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;improvementprogress&#34;&gt;Improvement/Progress&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Progress towards purpose: You are helping make progress towards an important goal for the company, your team or your own career/life.&lt;/li&gt;
&lt;li&gt;Improving the lives of others: You see how your work helps improve things for others&lt;/li&gt;
&lt;li&gt;Personal growth: Learning/seeing fast growth in yourself in skills that matter to you.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;choice&#34;&gt;Choice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Choice: Having flexibility, the chance to have more control over key parts of your world&lt;/li&gt;
&lt;li&gt;Autonomy: Having clear ownership over a domain where you can do as you wish, without asking for permission&lt;/li&gt;
&lt;li&gt;Decision-making: The ability to have make decisions about the things that matter to you&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;equalityfairness&#34;&gt;Equality/Fairness&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Access to resources (money, time, space, etc) feels fair/equitable&lt;/li&gt;
&lt;li&gt;Access to information is fair: All groups/people have access to information that is relevant to them&lt;/li&gt;
&lt;li&gt;Equal reciprocity: You support each other equally&lt;/li&gt;
&lt;li&gt;Decisions are fair and everyone is treated as equally important&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;predictability&#34;&gt;Predictability&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Resources: There&amp;rsquo;s enough certainty about resources (money, personnel hours, space) so you can focus on your job&lt;/li&gt;
&lt;li&gt;Time: There&amp;rsquo;s certainty about when things will occur/when you can prepare for them.&lt;/li&gt;
&lt;li&gt;Future challenges: You can anticipate and thus can prepare for future challenges&lt;/li&gt;
&lt;li&gt;Direction: Goals, strategy, and direction stay consistent and don&amp;rsquo;t change too often/fast&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;status&#34;&gt;Status&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Status: You hold a title/role that honors your worth among your peers/your industry&lt;/li&gt;
&lt;li&gt;Visibility: Your work is highly visible to people that matter&lt;/li&gt;
&lt;li&gt;Recognition: Your work is recognized and appreciated in ways that feel good.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://larahogan.me/blog/desk-moves/&#34; target=&#34;_blank&#34; &gt;source&lt;/a&gt;
&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>After reading this post from Lara, I finally understand why I&rsquo;ve been feeling strangely uncomfortable whenever my work desks have been moved in the past.</p>
<blockquote>
<p>Here are humans&rsquo; core needs in the <a href="https://www.palomamedina.com/biceps" target="_blank" >BICEPS</a>
 model:</p>
<h3 id="belonging">Belonging</h3>
<ul>
<li>Community: A feeling of friendship and closeness with a group, or being part of a tight community of any size.</li>
<li>Community well-being: People are cared for, the whole group feels happy and healthy.</li>
<li>Connection: Feeling kinship and understanding with</li>
</ul></blockquote>
<blockquote>
<h3 id="improvementprogress">Improvement/Progress</h3>
<ul>
<li>Progress towards purpose: You are helping make progress towards an important goal for the company, your team or your own career/life.</li>
<li>Improving the lives of others: You see how your work helps improve things for others</li>
<li>Personal growth: Learning/seeing fast growth in yourself in skills that matter to you.</li>
</ul></blockquote>
<blockquote>
<h3 id="choice">Choice</h3>
<ul>
<li>Choice: Having flexibility, the chance to have more control over key parts of your world</li>
<li>Autonomy: Having clear ownership over a domain where you can do as you wish, without asking for permission</li>
<li>Decision-making: The ability to have make decisions about the things that matter to you</li>
</ul></blockquote>
<blockquote>
<h3 id="equalityfairness">Equality/Fairness</h3>
<ul>
<li>Access to resources (money, time, space, etc) feels fair/equitable</li>
<li>Access to information is fair: All groups/people have access to information that is relevant to them</li>
<li>Equal reciprocity: You support each other equally</li>
<li>Decisions are fair and everyone is treated as equally important</li>
</ul></blockquote>
<blockquote>
<h3 id="predictability">Predictability</h3>
<ul>
<li>Resources: There&rsquo;s enough certainty about resources (money, personnel hours, space) so you can focus on your job</li>
<li>Time: There&rsquo;s certainty about when things will occur/when you can prepare for them.</li>
<li>Future challenges: You can anticipate and thus can prepare for future challenges</li>
<li>Direction: Goals, strategy, and direction stay consistent and don&rsquo;t change too often/fast</li>
</ul></blockquote>
<blockquote>
<h3 id="status">Status</h3>
<ul>
<li>Status: You hold a title/role that honors your worth among your peers/your industry</li>
<li>Visibility: Your work is highly visible to people that matter</li>
<li>Recognition: Your work is recognized and appreciated in ways that feel good.</li>
</ul></blockquote>
<p><a href="https://larahogan.me/blog/desk-moves/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>LLMs Shouldn&#39;t Write SQL</title>
      <link>https://saeedesmaili.com/notes/llms-shouldnt-write-sql/</link>
      <pubDate>Mon, 18 Mar 2024 18:44:36 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/llms-shouldnt-write-sql/</guid>
      <description>&lt;p&gt;Every day a new tools pops out claiming &amp;ldquo;Throw the data analysts and data scientists of your company away, you don&amp;rsquo;t need to write SQL anymore, everyone can use data with our groundbreaking &amp;rsquo;talk to your data&amp;rsquo; tool&amp;rdquo;, and Benn discusses this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are thousands of computational devils in details like how to handle nulls. For analysts, describing these specifics in English is inefficient and inexact. For everyone else, they wouldn&amp;rsquo;t know they need to describe them at all.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Every day a new tools pops out claiming &ldquo;Throw the data analysts and data scientists of your company away, you don&rsquo;t need to write SQL anymore, everyone can use data with our groundbreaking &rsquo;talk to your data&rsquo; tool&rdquo;, and Benn discusses this:</p>
<blockquote>
<p>There are thousands of computational devils in details like how to handle nulls. For analysts, describing these specifics in English is inefficient and inexact. For everyone else, they wouldn&rsquo;t know they need to describe them at all.</p></blockquote>
<blockquote>
<p>LLMs as a better interface to data models and semantic layers are great. LLMs as a Eucharistic for transubstantiating sketches of queries into real ones are great. But LLMs as an analyst, turning novel business questions into full queries? Seems unwise.</p></blockquote>
<p><a href="https://benn.substack.com/p/llms-shouldnt-write-sql" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Effective Ways of Dealing With Spammers</title>
      <link>https://saeedesmaili.com/notes/effective-ways-of-dealing-with-spammers/</link>
      <pubDate>Mon, 18 Mar 2024 18:39:12 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/effective-ways-of-dealing-with-spammers/</guid>
      <description>&lt;p&gt;From &lt;a href=&#34;https://news.ycombinator.com/item?id=39564678&#34; target=&#34;_blank&#34; &gt;a hackernews thread&lt;/a&gt;
 on dealing with spammers on your platform:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; one of the most effective ways of dealing with spammers is to &amp;ldquo;shadowban&amp;rdquo; them. Allow them to use your service, but don&amp;rsquo;t indicate to them that you&amp;rsquo;ve identified them as malicious. For instance, when dealing with chat spammers, allow them to chat, but do not show their chats to other users. Another level would be to allow them to chat, but only show their chat to other shadowbanned users. &amp;hellip; If the malicious actor doesn&amp;rsquo;t know they&amp;rsquo;ve been marked as malicious, they do not know they need to change their behavior.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>From <a href="https://news.ycombinator.com/item?id=39564678" target="_blank" >a hackernews thread</a>
 on dealing with spammers on your platform:</p>
<blockquote>
<p>&hellip; one of the most effective ways of dealing with spammers is to &ldquo;shadowban&rdquo; them. Allow them to use your service, but don&rsquo;t indicate to them that you&rsquo;ve identified them as malicious. For instance, when dealing with chat spammers, allow them to chat, but do not show their chats to other users. Another level would be to allow them to chat, but only show their chat to other shadowbanned users. &hellip; If the malicious actor doesn&rsquo;t know they&rsquo;ve been marked as malicious, they do not know they need to change their behavior.</p></blockquote>
<blockquote>
<p>The second most effective thing is making the malicious actor use some sort of resource. Such as a payment or a time commitment (eg new accounts can only create 1 link a day), or some other source of friction. The idea is that for legitimate users the friction is acceptably low, but for consistent spammers the cost becomes too high.</p></blockquote>
<blockquote>
<p>The 3rd thing I&rsquo;ve found effective is that lots of spam comes from robots, or perhaps robots farming tasks to humans. If you can determine how the traffic is coming in and then filter that traffic effectively without indicating failure, robots can happily spam away and you can happily filter away.</p></blockquote>
<p><a href="https://news.ycombinator.com/item?id=39566334" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Thinking Fast by Preparing Well</title>
      <link>https://saeedesmaili.com/notes/thinking-fast-by-preparing-well/</link>
      <pubDate>Thu, 14 Mar 2024 14:25:58 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/thinking-fast-by-preparing-well/</guid>
      <description>&lt;p&gt;A few days ago &lt;a href=&#34;https://news.ycombinator.com/item?id=39522734&#34; target=&#34;_blank&#34; &gt;a question was asked on Hackernews on how slow thinkers compensate for their lack of quick-wittedness&lt;/a&gt;
. Some people have responded that &lt;strong&gt;preparation is key&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sometimes what people think is quickness is actually extensive prep. I had a 30 minute meeting the other day to ask a team to do something I didn&amp;rsquo;t think they would want to do. It ended up going really smoothly and they just took my word for it, but had they not, I spend several hours preparing for that meeting, gathering data, preparing charts to illustrate the data, thinking of the possible objections and responses to said objections.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>A few days ago <a href="https://news.ycombinator.com/item?id=39522734" target="_blank" >a question was asked on Hackernews on how slow thinkers compensate for their lack of quick-wittedness</a>
. Some people have responded that <strong>preparation is key</strong>:</p>
<blockquote>
<p>Sometimes what people think is quickness is actually extensive prep. I had a 30 minute meeting the other day to ask a team to do something I didn&rsquo;t think they would want to do. It ended up going really smoothly and they just took my word for it, but had they not, I spend several hours preparing for that meeting, gathering data, preparing charts to illustrate the data, thinking of the possible objections and responses to said objections.</p></blockquote>
<blockquote>
<p>I find that I never really have a good answer on the spot, but I often have already been thinking about the problems around the workplace for long enough that I at least have a hunch or opinion. That&rsquo;s not quick-wit, it&rsquo;s just pre-thinking. But it works well enough for me.
One skill I learned during grad school was spending lots of time going over conversations or presentations or even upcoming meetings in your head. This &ldquo;warms up&rdquo; your cache, and helps you play out possible Q&amp;A, so that you have more opinions ready. And another skill I learned was actually learning to control the meeting to a certain extent. I&rsquo;d come in with something like a limited &ldquo;choose your own adventure&rdquo; conversation tree in my head, and then I&rsquo;d try to present choices or questions to those I was meeting or talking with, so that I could at least have a fallback. And finally with experience comes wit. The 10th time you enter a situation you&rsquo;re much more likely to have something to say than the 1st time. And eventually, you&rsquo;ll start to recognize similarities in conversations.</p></blockquote>
<p>I agree with theshrike79:</p>
<blockquote>
<p>This is exactly the reason all meetings should have an agenda posted beforehand. Not everyone is able to make decisions on the fly, they need the chance to prepare first.</p></blockquote>
<p><a href="https://news.ycombinator.com/item?id=39522734" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Optimizing Technical Docs for LLMs</title>
      <link>https://saeedesmaili.com/notes/optimizing-technical-docs-for-llms/</link>
      <pubDate>Tue, 12 Mar 2024 13:09:09 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/optimizing-technical-docs-for-llms/</guid>
      <description>&lt;p&gt;Many companies are integrating LLM question answering tools into their DevEx toolchain. If you&amp;rsquo;re writing documentation and you&amp;rsquo;d like to assist these tools to serve people with proper responses to the questions related to what you own, kapa.ai has a few practical tips on optimizing the technical docs for LLMs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A clear hierarchy of headings and subheadings on a page helps LLMs understand the relationships between different sections of your documentation.&lt;/li&gt;
&lt;li&gt;Troubleshooting sections formatted as Q&amp;amp;A are an effective source for LLMs as they mirror the questions users often ask, making it easier for LLMs to understand and respond to similar questions.&lt;/li&gt;
&lt;li&gt;Including small, self-standing code snippets can be helpful, especially for products that rely on large and often complex SDKs or APIs.
&lt;ul&gt;
&lt;li&gt;Have a brief description above the code to clarify its purpose and usage.&lt;/li&gt;
&lt;li&gt;Include comments within the code to explain the logic and functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Keep relevant content directly in your docs rather than in linked files such as PDFs, as LLMs have a harder time parsing these.&lt;/li&gt;
&lt;li&gt;Ensure information conveyed through screenshots is also described in text, as LLMs parse text more efficiently.&lt;/li&gt;
&lt;li&gt;Clarify all acronyms and specialized terminology within your documentation to aid LLM comprehension.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.kapa.ai/blog/optimizing-technical-documentation-for-llms&#34; target=&#34;_blank&#34; &gt;source&lt;/a&gt;
&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Many companies are integrating LLM question answering tools into their DevEx toolchain. If you&rsquo;re writing documentation and you&rsquo;d like to assist these tools to serve people with proper responses to the questions related to what you own, kapa.ai has a few practical tips on optimizing the technical docs for LLMs:</p>
<ul>
<li>A clear hierarchy of headings and subheadings on a page helps LLMs understand the relationships between different sections of your documentation.</li>
<li>Troubleshooting sections formatted as Q&amp;A are an effective source for LLMs as they mirror the questions users often ask, making it easier for LLMs to understand and respond to similar questions.</li>
<li>Including small, self-standing code snippets can be helpful, especially for products that rely on large and often complex SDKs or APIs.
<ul>
<li>Have a brief description above the code to clarify its purpose and usage.</li>
<li>Include comments within the code to explain the logic and functionality.</li>
</ul>
</li>
<li>Keep relevant content directly in your docs rather than in linked files such as PDFs, as LLMs have a harder time parsing these.</li>
<li>Ensure information conveyed through screenshots is also described in text, as LLMs parse text more efficiently.</li>
<li>Clarify all acronyms and specialized terminology within your documentation to aid LLM comprehension.</li>
</ul>
<p><a href="https://docs.kapa.ai/blog/optimizing-technical-documentation-for-llms" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Willingness to Look Stupid</title>
      <link>https://saeedesmaili.com/notes/willingness-to-look-stupid/</link>
      <pubDate>Thu, 07 Mar 2024 12:20:30 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/willingness-to-look-stupid/</guid>
      <description>&lt;p&gt;This post from Dan is one of the best reads in the past few months for me. He openly talks about instances that he might look like a stupid person, and how it&amp;rsquo;s benefiting him. I highly recommend reading the &lt;a href=&#34;https://danluu.com/look-stupid/&#34; target=&#34;_blank&#34; &gt;full blog post&lt;/a&gt;
.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; I frequently ask questions when there&amp;rsquo;s something I don&amp;rsquo;t understand or know, from basic stuff, &amp;ldquo;what does [some word] mean?&amp;rdquo; to more subtle stuff. On the flip side, one of the most common failure modes I see with junior engineers is when someone will be too afraid to look stupid to ask questions and then learn very slowly as a result; in some cases, this is so severe it results in them being put on a PIP and then getting fired.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>This post from Dan is one of the best reads in the past few months for me. He openly talks about instances that he might look like a stupid person, and how it&rsquo;s benefiting him. I highly recommend reading the <a href="https://danluu.com/look-stupid/" target="_blank" >full blog post</a>
.</p>
<blockquote>
<p>&hellip; I frequently ask questions when there&rsquo;s something I don&rsquo;t understand or know, from basic stuff, &ldquo;what does [some word] mean?&rdquo; to more subtle stuff. On the flip side, one of the most common failure modes I see with junior engineers is when someone will be too afraid to look stupid to ask questions and then learn very slowly as a result; in some cases, this is so severe it results in them being put on a PIP and then getting fired.</p></blockquote>
<blockquote>
<p>&hellip; being willing to look stupid is also highly effective at work. Besides the obvious reason that it allows you to learn faster and become more effective, it also makes it much easier to find high ROI ideas. If you go after trendy or reasonable sounding ideas, to do something really extraordinary, you have to have better ideas/execution than everyone else working on the same problem. But if you&rsquo;re thinking about ideas that most people consider too stupid to consider, you&rsquo;ll often run into ideas that are both very high ROI as well as simple and easy that anyone could&rsquo;ve done had they not dismissed the idea out of hand. It may still technically be true that you need to have better execution than anyone else who&rsquo;s trying the same thing, but if no one else trying the same thing, that&rsquo;s easy to do!</p></blockquote>
<blockquote>
<p>I don&rsquo;t actually have to be nearly as smart or work nearly as hard as most people to get good results. If I try to solve some a problem by doing what everyone else is doing and go looking for problems where everyone else is looking, if I want to do something valuable, I&rsquo;ll have to do better than a lot of people, maybe even better than everybody else if the problem is really hard. If the problem is considered trendy, a lot of very smart and hardworking people will be treading the same ground and doing better than that is very difficult. But I have a dumb thought, one that&rsquo;s too stupid sounding for anyone else to try, I don&rsquo;t necessarily have to be particularly smart or talented or hardworking to come up with valuable solutions. Often, the dumb solution is something any idiot could&rsquo;ve come up with and the reason the problem hasn&rsquo;t been solved is because no one was willing to think the dumb thought until an idiot like me looked at the problem.</p></blockquote>
<p><a href="https://danluu.com/look-stupid/" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Alfred vs Raycast</title>
      <link>https://saeedesmaili.com/notes/alfred-vs-raycast/</link>
      <pubDate>Sun, 03 Mar 2024 21:04:44 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/alfred-vs-raycast/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re into either &lt;a href=&#34;https://www.alfredapp.com/&#34; target=&#34;_blank&#34; &gt;Alfred&lt;/a&gt;
 or &lt;a href=&#34;https://www.raycast.com/&#34; target=&#34;_blank&#34; &gt;Raycast&lt;/a&gt;
, Josh has a nice comparison of these tools from his experience using them:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; for me, in the era of paid subscription software overtaking everything, I don&amp;rsquo;t need yet another $8–10/month siphon on my bank account. By the time you&amp;rsquo;ve paid for Raycast Pro for a year, you could&amp;rsquo;ve paid for Alfred for a lifetime.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I absolutely agree. Due to Alfred being a one-time purchase and its wonderful speed and performance, I tend to agree with Josh that:&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>If you&rsquo;re into either <a href="https://www.alfredapp.com/" target="_blank" >Alfred</a>
 or <a href="https://www.raycast.com/" target="_blank" >Raycast</a>
, Josh has a nice comparison of these tools from his experience using them:</p>
<blockquote>
<p>&hellip; for me, in the era of paid subscription software overtaking everything, I don&rsquo;t need yet another $8–10/month siphon on my bank account. By the time you&rsquo;ve paid for Raycast Pro for a year, you could&rsquo;ve paid for Alfred for a lifetime.</p></blockquote>
<p>I absolutely agree. Due to Alfred being a one-time purchase and its wonderful speed and performance, I tend to agree with Josh that:</p>
<blockquote>
<p>&hellip; power users (i.e., the folks who care most about getting things done as efficiently as possible) tend to gravitate towards Alfred. Conversely, users who just have a small handful of specific things they want to be easier tend to pick Raycast &hellip;</p></blockquote>
<p><a href="https://joshcollinsworth.com/blog/alfred-raycast" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Fuck You Show Me the Prompt</title>
      <link>https://saeedesmaili.com/notes/fuck-you-show-me-the-prompt/</link>
      <pubDate>Thu, 29 Feb 2024 19:14:17 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/fuck-you-show-me-the-prompt/</guid>
      <description>&lt;p&gt;Hamel dives deep into how LLM frameworks like &lt;a href=&#34;https://github.com/langchain-ai/langchain&#34; target=&#34;_blank&#34; &gt;langchain&lt;/a&gt;
, &lt;a href=&#34;https://github.com/jxnl/instructor&#34; target=&#34;_blank&#34; &gt;instructor&lt;/a&gt;
, and &lt;a href=&#34;https://github.com/guidance-ai/guidance&#34; target=&#34;_blank&#34; &gt;guidance&lt;/a&gt;
 perform tasks like formatting the response in a valid JSON output. He intercepts the API calls from these Python libraries to shed some light on how many API calls (to OpenAI&amp;rsquo;s GPT services) they make and what prompt they use. I&amp;rsquo;ve always been skeptic of the usefulness of many of the LLM &amp;ldquo;wrapper&amp;rdquo; libraries, specially for larger and more serious projects, as they are fine for quick prototypes.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>Hamel dives deep into how LLM frameworks like <a href="https://github.com/langchain-ai/langchain" target="_blank" >langchain</a>
, <a href="https://github.com/jxnl/instructor" target="_blank" >instructor</a>
, and <a href="https://github.com/guidance-ai/guidance" target="_blank" >guidance</a>
 perform tasks like formatting the response in a valid JSON output. He intercepts the API calls from these Python libraries to shed some light on how many API calls (to OpenAI&rsquo;s GPT services) they make and what prompt they use. I&rsquo;ve always been skeptic of the usefulness of many of the LLM &ldquo;wrapper&rdquo; libraries, specially for larger and more serious projects, as they are fine for quick prototypes.</p>
<p>Hamel&rsquo;s blog post makes it clear that you should not blindly trust any of the LLM libraries, because some of them are just using some (stupid) prompt &ldquo;engineering&rdquo; behind the scene to provide you with good looking output, and they&rsquo;re performance is pretty much hit and miss (unless you&rsquo;re able to view they&rsquo;re prompts and to verify they&rsquo;re not doing anything silly).</p>
<p>An example from his post, investigating the API calls for <a href="https://github.com/guardrails-ai/guardrails" target="_blank" >guardrails</a>
:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pydantic <span style="color:#f92672">import</span> BaseModel, Field
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> guardrails <span style="color:#f92672">import</span> Guard
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> openai
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">Pet</span>(BaseModel):
</span></span><span style="display:flex;"><span>    pet_type: str <span style="color:#f92672">=</span> Field(description<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Species of pet&#34;</span>)
</span></span><span style="display:flex;"><span>    name: str <span style="color:#f92672">=</span> Field(description<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;a unique pet name&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>prompt <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#34;&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    What kind of pet should I get and what should I name it?
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    $</span><span style="color:#e6db74">{gr.complete_json_suffix_v2}</span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;&#34;&#34;</span>
</span></span><span style="display:flex;"><span>guard <span style="color:#f92672">=</span> Guard<span style="color:#f92672">.</span>from_pydantic(output_class<span style="color:#f92672">=</span>Pet, prompt<span style="color:#f92672">=</span>prompt)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>validated_output, <span style="color:#f92672">*</span>rest <span style="color:#f92672">=</span> guard(
</span></span><span style="display:flex;"><span>    llm_api<span style="color:#f92672">=</span>openai<span style="color:#f92672">.</span>completions<span style="color:#f92672">.</span>create,
</span></span><span style="display:flex;"><span>    engine<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;gpt-3.5-turbo-instruct&#34;</span>
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>validated_output<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## {</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">##    &#34;pet_type&#34;: &#34;dog&#34;,</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">##    &#34;name&#34;: &#34;Buddy</span>
</span></span></code></pre></div><p>Not a valid JSON output!</p>
<blockquote>
<p>What is happening here? How is this structured output and validation working? Looking at the mitmproxy UI, I can see that the above code resulted in two LLM API calls, the first one with this prompt:</p></blockquote>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 3008 281"
      >
      <g transform='translate(8,16)'>
<path d='M 4,136 L 12,120' fill='none' stroke='currentColor'></path>
<path d='M 440,112 L 448,96' fill='none' stroke='currentColor'></path>
<path d='M 380,248 L 388,232' fill='none' stroke='currentColor'></path>
<path d='M 408,240 L 424,208' fill='none' stroke='currentColor'></path>
<path d='M 564,264 L 572,248' fill='none' stroke='currentColor'></path>
<path d='M 908,264 L 916,248' fill='none' stroke='currentColor'></path>
<path d='M 932,264 L 940,248' fill='none' stroke='currentColor'></path>
<polygon points='8.000000,80.000000 -4.000000,74.400002 -4.000000,85.599998' fill='currentColor' transform='rotate(180.000000, 0.000000, 80.000000)'></polygon>
<polygon points='8.000000,128.000000 -4.000000,122.400002 -4.000000,133.600006' fill='currentColor' transform='rotate(180.000000, 0.000000, 128.000000)'></polygon>
<polygon points='400.000000,240.000000 388.000000,234.399994 388.000000,245.600006' fill='currentColor' transform='rotate(0.000000, 392.000000, 240.000000)'></polygon>
<polygon points='408.000000,240.000000 396.000000,234.399994 396.000000,245.600006' fill='currentColor' transform='rotate(180.000000, 400.000000, 240.000000)'></polygon>
<polygon points='456.000000,112.000000 444.000000,106.400002 444.000000,117.599998' fill='currentColor' transform='rotate(0.000000, 448.000000, 112.000000)'></polygon>
<polygon points='464.000000,96.000000 452.000000,90.400002 452.000000,101.599998' fill='currentColor' transform='rotate(0.000000, 456.000000, 96.000000)'></polygon>
<polygon points='584.000000,256.000000 572.000000,250.399994 572.000000,261.600006' fill='currentColor' transform='rotate(0.000000, 576.000000, 256.000000)'></polygon>
<polygon points='928.000000,256.000000 916.000000,250.399994 916.000000,261.600006' fill='currentColor' transform='rotate(0.000000, 920.000000, 256.000000)'></polygon>
<polygon points='936.000000,256.000000 924.000000,250.399994 924.000000,261.600006' fill='currentColor' transform='rotate(180.000000, 928.000000, 256.000000)'></polygon>
<circle cx='424' cy='208' r='6' stroke='currentColor' fill='#fff'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='0' y='180' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='0' y='228' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='0' y='244' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='0' y='260' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='180' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='8' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='180' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='16' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='16' y='244' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='16' y='260' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='24' y='180' fill='currentColor' style='font-size:1em'>Y</text>
<text text-anchor='middle' x='24' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='228' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='24' y='244' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='24' y='260' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='32' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='260' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='72' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='80' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='88' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='88' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='228' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='104' y='244' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='228' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='244' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='136' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='136' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='152' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='244' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='152' y='260' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='180' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='160' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='160' y='244' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='160' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='260' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='176' y='180' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='176' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='260' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='184' y='180' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='184' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='184' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='228' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='200' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='244' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='208' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='180' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='216' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='224' y='228' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='224' y='244' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='224' y='260' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='232' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='232' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='240' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='248' y='228' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='248' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='248' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='180' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='256' y='212' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='256' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='264' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='228' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='264' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='272' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='212' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='272' y='228' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='272' y='244' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='272' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='280' y='212' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='280' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='280' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='288' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='288' y='212' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='288' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='244' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='288' y='260' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='296' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='212' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='296' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='296' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='296' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='304' y='212' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='304' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='304' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='312' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='312' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='320' y='100' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='320' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='320' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='320' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='320' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='100' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='328' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='328' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='244' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='328' y='260' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='336' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='336' y='116' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='336' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='336' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='336' y='228' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='336' y='244' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='336' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='344' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='344' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='344' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='344' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='352' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='352' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='180' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='352' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='352' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='352' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='360' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='360' y='228' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='360' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='368' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='368' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='368' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='368' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='368' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='376' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='376' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='376' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='376' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='384' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='384' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='384' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='392' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='392' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='392' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='400' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='400' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='400' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='400' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='400' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='400' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='408' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='408' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='408' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='408' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='408' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='416' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='416' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='416' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='416' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='416' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='416' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='424' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='228' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='424' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='424' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='432' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='432' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='432' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='432' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='432' y='212' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='432' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='432' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='432' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='440' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='440' y='100' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='440' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='440' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='440' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='448' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='448' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='448' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='448' y='228' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='448' y='244' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='448' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='456' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='456' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='456' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='456' y='228' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='456' y='244' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='456' y='260' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='464' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='464' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='464' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='464' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='472' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='472' y='180' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='472' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='472' y='244' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='480' y='180' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='480' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='480' y='228' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='480' y='244' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='480' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='488' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='488' y='212' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='488' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='488' y='260' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='496' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='496' y='180' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='496' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='496' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='496' y='244' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='496' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='504' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='504' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='504' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='504' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='504' y='244' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='504' y='260' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='512' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='512' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='512' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='512' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='512' y='244' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='512' y='260' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='520' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='520' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='520' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='520' y='244' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='520' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='528' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='528' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='528' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='528' y='228' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='528' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='528' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='536' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='536' y='212' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='536' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='536' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='544' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='544' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='544' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='544' y='244' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='544' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='552' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='552' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='552' y='212' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='552' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='552' y='244' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='552' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='560' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='560' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='560' y='228' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='568' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='568' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='568' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='568' y='244' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='576' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='576' y='180' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='576' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='576' y='228' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='576' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='584' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='584' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='584' y='212' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='584' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='584' y='244' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='584' y='260' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='592' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='592' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='592' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='592' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='592' y='244' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='592' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='600' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='600' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='600' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='600' y='244' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='600' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='608' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='608' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='608' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='608' y='244' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='608' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='616' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='616' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='616' y='212' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='616' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='616' y='244' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='616' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='624' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='624' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='624' y='244' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='624' y='260' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='632' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='632' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='632' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='640' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='640' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='640' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='640' y='244' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='640' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='648' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='648' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='648' y='228' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='648' y='244' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='656' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='656' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='656' y='244' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='656' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='664' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='664' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='664' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='672' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='672' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='672' y='244' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='672' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='680' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='680' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='680' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='688' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='688' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='688' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='688' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='696' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='696' y='244' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='696' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='704' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='704' y='244' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='704' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='712' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='712' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='712' y='244' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='712' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='720' y='52' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='720' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='720' y='244' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='720' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='728' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='728' y='244' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='728' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='736' y='180' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='736' y='244' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='736' y='260' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='744' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='744' y='180' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='744' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='752' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='752' y='180' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='752' y='244' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='760' y='180' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='760' y='244' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='760' y='260' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='768' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='768' y='244' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='768' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='776' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='776' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='776' y='244' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='776' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='784' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='784' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='784' y='244' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='784' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='792' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='792' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='800' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='800' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='800' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='800' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='808' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='808' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='808' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='808' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='816' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='816' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='816' y='244' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='816' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='824' y='244' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='824' y='260' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='832' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='832' y='180' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='832' y='244' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='832' y='260' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='840' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='840' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='840' y='244' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='840' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='848' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='848' y='244' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='848' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='856' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='856' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='856' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='864' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='864' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='864' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='872' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='872' y='180' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='872' y='260' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='880' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='880' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='888' y='52' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='888' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='888' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='896' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='896' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='904' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='912' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='920' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='928' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='936' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='944' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='944' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='952' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='952' y='260' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='960' y='260' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='968' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='968' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='976' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='976' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='984' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='992' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='992' y='260' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='1000' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1000' y='260' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='1008' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1016' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='1024' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1024' y='260' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='1032' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1040' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1040' y='260' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='1048' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1048' y='260' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='1056' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1056' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1064' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1064' y='260' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1072' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1072' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1080' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1080' y='260' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='1088' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1088' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1096' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1096' y='260' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='1104' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1112' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1112' y='260' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='1120' y='180' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1120' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1128' y='260' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1136' y='180' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='1136' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1144' y='180' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1144' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1152' y='180' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='1152' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1160' y='180' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1160' y='260' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='1176' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1176' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1184' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1184' y='260' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='1192' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1192' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1200' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1208' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1208' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1216' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1224' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1224' y='260' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='1232' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1240' y='180' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='1240' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1248' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1248' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1256' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1256' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1264' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1264' y='260' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1272' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1272' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1280' y='260' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1288' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1296' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1296' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1304' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1312' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1312' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1320' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1320' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1328' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1336' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1336' y='260' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='1344' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1344' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1352' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1352' y='260' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='1368' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1368' y='260' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='1376' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1376' y='260' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='1384' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1384' y='260' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='1392' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1392' y='260' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='1408' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1416' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1424' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1432' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1440' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1448' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1456' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1464' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1472' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1488' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1496' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1512' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1520' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1528' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1544' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1552' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1560' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1568' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1576' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1584' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1592' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1600' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1608' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1616' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1624' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1632' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1640' y='180' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1656' y='180' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='1664' y='180' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1672' y='180' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='1680' y='180' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1688' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1704' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1712' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1720' y='180' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1728' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='1744' y='180' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='1752' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1760' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1776' y='180' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='1784' y='180' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='1792' y='180' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='1800' y='180' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='1816' y='180' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1824' y='180' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='1832' y='180' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='1840' y='180' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='1856' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1864' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1872' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1880' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1888' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1896' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1904' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1920' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1928' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1944' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1952' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1960' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1976' y='180' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='1984' y='180' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1992' y='180' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='2008' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2016' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2024' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2032' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2040' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2048' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2056' y='180' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='2072' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2080' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2088' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2096' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2104' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2112' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2120' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2128' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2136' y='180' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2152' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2160' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2168' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2184' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2192' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2200' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2208' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2216' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2232' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2240' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2248' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2264' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2272' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2280' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2288' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2296' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2304' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2320' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2328' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2336' y='180' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='2344' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2352' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2360' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2368' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2376' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2392' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2400' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2408' y='180' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2416' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2432' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2440' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2448' y='180' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='2456' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2464' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2472' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2480' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2488' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2504' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2512' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2520' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2536' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2544' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2552' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2560' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2568' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2576' y='180' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='2592' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2600' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='2608' y='180' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='2616' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2624' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2632' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2640' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2656' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2664' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2672' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2688' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2696' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2704' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2712' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2720' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2728' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2736' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2744' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2760' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2768' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2776' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2784' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2792' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2800' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2816' y='180' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='2824' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2840' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2848' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2856' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2864' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2872' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2880' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2888' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2904' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2912' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2920' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2936' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2944' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2952' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2960' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2968' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2976' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2984' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2992' y='180' fill='currentColor' style='font-size:1em'>.</text>
</g>

    </svg>
  
</div>
<blockquote>
<p>Followed by another call with this prompt:</p></blockquote>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 3344 249"
      >
      <g transform='translate(8,16)'>
<path d='M 4,184 L 12,168' fill='none' stroke='currentColor'></path>
<path d='M 440,160 L 448,144' fill='none' stroke='currentColor'></path>
<polygon points='8.000000,128.000000 -4.000000,122.400002 -4.000000,133.600006' fill='currentColor' transform='rotate(180.000000, 0.000000, 128.000000)'></polygon>
<polygon points='8.000000,176.000000 -4.000000,170.399994 -4.000000,181.600006' fill='currentColor' transform='rotate(180.000000, 0.000000, 176.000000)'></polygon>
<polygon points='456.000000,160.000000 444.000000,154.399994 444.000000,165.600006' fill='currentColor' transform='rotate(0.000000, 448.000000, 160.000000)'></polygon>
<polygon points='464.000000,144.000000 452.000000,138.399994 452.000000,149.600006' fill='currentColor' transform='rotate(0.000000, 456.000000, 144.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='0' y='228' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='228' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='228' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='24' y='228' fill='currentColor' style='font-size:1em'>Y</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='112' y='228' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='228' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='228' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='176' y='228' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='184' y='228' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='228' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='228' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='228' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='272' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='164' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='288' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='296' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='148' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='312' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='312' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='320' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='320' y='148' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='320' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='320' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='328' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='148' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='328' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='336' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='336' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='336' y='164' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='336' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='344' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='344' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='344' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='352' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='352' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='228' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='360' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='360' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='368' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='368' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='376' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='376' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='384' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='392' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='400' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='400' y='148' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='400' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='400' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='408' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='408' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='408' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='416' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='416' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='416' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='424' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='432' y='100' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='432' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='432' y='164' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='432' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='440' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='440' y='148' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='440' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='448' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='448' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='456' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='456' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='464' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='464' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='472' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='472' y='228' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='480' y='228' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='488' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='488' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='496' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='496' y='228' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='504' y='4' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='504' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='504' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='512' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='512' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='512' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='520' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='520' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='528' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='528' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='528' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='536' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='536' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='544' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='544' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='552' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='552' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='560' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='568' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='576' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='576' y='228' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='584' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='584' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='592' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='592' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='600' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='608' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='608' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='616' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='616' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='624' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='632' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='640' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='640' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='648' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='648' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='656' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='664' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='672' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='672' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='680' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='680' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='688' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='688' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='696' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='704' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='712' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='712' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='720' y='100' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='720' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='728' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='736' y='228' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='744' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='744' y='228' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='752' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='752' y='228' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='760' y='228' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='768' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='776' y='100' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='776' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='784' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='784' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='792' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='800' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='800' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='808' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='808' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='816' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='816' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='832' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='832' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='840' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='840' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='848' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='856' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='856' y='228' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='864' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='864' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='872' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='872' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='880' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='888' y='100' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='888' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='896' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='904' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='912' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='920' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='928' y='228' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='936' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='944' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='952' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='968' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='976' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='992' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1000' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1008' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1024' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1032' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1040' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1048' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1056' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1064' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1072' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1080' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1088' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1096' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1104' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1112' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1120' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1136' y='228' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='1144' y='228' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1152' y='228' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='1160' y='228' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='1176' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1184' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1192' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1208' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1216' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1224' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1240' y='228' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='1248' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1256' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='1264' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='1272' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1288' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1296' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1312' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1320' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1336' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1344' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1352' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1368' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1376' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1384' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1392' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1408' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1416' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1424' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1432' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1440' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1448' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1456' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1464' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1472' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1488' y='228' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='1496' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='1512' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1520' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1528' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1544' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1552' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1560' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1568' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1576' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1584' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1592' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='1600' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1608' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1616' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='1624' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='1632' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1640' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1656' y='228' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='1664' y='228' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1672' y='228' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='1680' y='228' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='1688' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='1704' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1712' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='1720' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='1728' y='228' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='1744' y='228' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='1752' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1760' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1776' y='228' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='1784' y='228' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='1792' y='228' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='1800' y='228' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='1816' y='228' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1824' y='228' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='1832' y='228' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='1840' y='228' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='1856' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='1864' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1872' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='1880' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='1888' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1896' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='1904' y='228' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='1920' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1928' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='1944' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='1952' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='1960' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='1976' y='228' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='1984' y='228' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='1992' y='228' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='2008' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2016' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2024' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2032' y='228' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2040' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2048' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2056' y='228' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='2072' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2080' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2088' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2096' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2104' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2112' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2120' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2128' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2136' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2152' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2160' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2168' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2184' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2192' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2200' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2208' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2216' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2232' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2240' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2248' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2264' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2272' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2280' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2288' y='228' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='2296' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2304' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2320' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2328' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2336' y='228' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='2344' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2352' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2360' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2368' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2376' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2392' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2400' y='228' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2408' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='2416' y='228' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2432' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2440' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2448' y='228' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='2456' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='2464' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2472' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2480' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2488' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2504' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2512' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2520' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2536' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='2544' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2552' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2560' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2568' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2576' y='228' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='2592' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2600' y='228' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='2608' y='228' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='2616' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2624' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2632' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2640' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2656' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2664' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2672' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2688' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2696' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2704' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2712' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2720' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2728' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='2736' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2744' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2760' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2768' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='2776' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='2784' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2792' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2800' y='228' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='2816' y='228' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='2824' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2840' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2848' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2856' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2864' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='2872' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2880' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2888' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='2904' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='2912' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2920' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='2936' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2944' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='2952' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='2960' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='2968' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='2976' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='2984' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='2992' y='228' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='3008' y='228' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='3016' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='3032' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3040' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='3048' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='3064' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3072' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3080' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3096' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='3104' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3112' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='3120' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='3128' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3136' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3152' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='3160' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3168' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='3176' y='228' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='3184' y='228' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='3192' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3200' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3208' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3216' y='228' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='3232' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3240' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3248' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='3256' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='3264' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='3280' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='3288' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='3296' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='3304' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3312' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='3320' y='228' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='3328' y='228' fill='currentColor' style='font-size:1em'>.</text>
</g>

    </svg>
  
</div>
<blockquote>
<p>Woof. That&rsquo;s a whole lot of ceremony to get structured output!</p></blockquote>
<p><a href="https://hamel.dev/blog/posts/prompt/#examples" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>GROUP BY ALL in Bigquery</title>
      <link>https://saeedesmaili.com/notes/group-by-all-in-bigquery/</link>
      <pubDate>Wed, 28 Feb 2024 10:48:49 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/group-by-all-in-bigquery/</guid>
      <description>&lt;p&gt;I came across &lt;a href=&#34;https://www.linkedin.com/posts/axel-thevenot_group-by-all-in-preview-for-bigquery-activity-7168153238955876353-ORGY/&#34; target=&#34;_blank&#34; &gt;this Linkedin post&lt;/a&gt;
 from a Google engineer, on a new (in preview) and very interesting BigQuery syntax: &lt;code&gt;GROUP BY ALL&lt;/code&gt;. This will save time when writing and specially modifying complex SQL queries on BigQuery.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;GROUP BY ALL&lt;/code&gt; clause groups rows by inferring grouping keys from the &lt;code&gt;SELECT&lt;/code&gt; items. It will exclude expressions with aggregate and window functions, constants, and query parameters for a smart &lt;code&gt;GROUP BY&lt;/code&gt;. So instead of &lt;code&gt;GROUP BY name, city, device, browser, date&lt;/code&gt; or &lt;code&gt;GROUP BY 1, 2, 3, 4, 5&lt;/code&gt; you would use &lt;code&gt;GROUP BY ALL&lt;/code&gt;.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I came across <a href="https://www.linkedin.com/posts/axel-thevenot_group-by-all-in-preview-for-bigquery-activity-7168153238955876353-ORGY/" target="_blank" >this Linkedin post</a>
 from a Google engineer, on a new (in preview) and very interesting BigQuery syntax: <code>GROUP BY ALL</code>. This will save time when writing and specially modifying complex SQL queries on BigQuery.</p>
<p>The <code>GROUP BY ALL</code> clause groups rows by inferring grouping keys from the <code>SELECT</code> items. It will exclude expressions with aggregate and window functions, constants, and query parameters for a smart <code>GROUP BY</code>. So instead of <code>GROUP BY name, city, device, browser, date</code> or <code>GROUP BY 1, 2, 3, 4, 5</code> you would use <code>GROUP BY ALL</code>.</p>
<p>An example from <a href="https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#group_by_all" target="_blank" >documentation</a>
:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">WITH</span> PlayerStats <span style="color:#66d9ef">AS</span> (
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">SELECT</span> <span style="color:#e6db74">&#39;Adams&#39;</span> <span style="color:#66d9ef">as</span> LastName, <span style="color:#e6db74">&#39;Noam&#39;</span> <span style="color:#66d9ef">as</span> FirstName, <span style="color:#ae81ff">3</span> <span style="color:#66d9ef">as</span> PointsScored <span style="color:#66d9ef">UNION</span> <span style="color:#66d9ef">ALL</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">SELECT</span> <span style="color:#e6db74">&#39;Buchanan&#39;</span>, <span style="color:#e6db74">&#39;Jie&#39;</span>, <span style="color:#ae81ff">0</span> <span style="color:#66d9ef">UNION</span> <span style="color:#66d9ef">ALL</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">SELECT</span> <span style="color:#e6db74">&#39;Coolidge&#39;</span>, <span style="color:#e6db74">&#39;Kiran&#39;</span>, <span style="color:#ae81ff">1</span> <span style="color:#66d9ef">UNION</span> <span style="color:#66d9ef">ALL</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">SELECT</span> <span style="color:#e6db74">&#39;Adams&#39;</span>, <span style="color:#e6db74">&#39;Noam&#39;</span>, <span style="color:#ae81ff">4</span> <span style="color:#66d9ef">UNION</span> <span style="color:#66d9ef">ALL</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">SELECT</span> <span style="color:#e6db74">&#39;Buchanan&#39;</span>, <span style="color:#e6db74">&#39;Jie&#39;</span>, <span style="color:#ae81ff">13</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">SELECT</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">SUM</span>(PointsScored) <span style="color:#66d9ef">AS</span> total_points,
</span></span><span style="display:flex;"><span>  FirstName <span style="color:#66d9ef">AS</span> first_name,
</span></span><span style="display:flex;"><span>  LastName <span style="color:#66d9ef">AS</span> last_name
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">FROM</span> PlayerStats
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">GROUP</span> <span style="color:#66d9ef">BY</span> <span style="color:#66d9ef">ALL</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*--------------+------------+-----------+
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> | total_points | first_name | last_name |
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> +--------------+------------+-----------+
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> | 7            | Noam       | Adams     |
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> | 13           | Jie        | Buchanan  |
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> | 1            | Kiran      | Coolidge  |
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> +--------------+------------+-----------*/</span>
</span></span></code></pre></div><p>Another example from the Linkedin post:
<img alt="GROUP BY ALL in BigQuery" loading="lazy" src="/images/2024/20240228-group-by-all-bigquery.jpg#center"></p>
<p><a href="https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#group_by_all" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Classless Css Libraries</title>
      <link>https://saeedesmaili.com/notes/classless-css-libraries/</link>
      <pubDate>Sun, 25 Feb 2024 11:29:02 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/classless-css-libraries/</guid>
      <description>&lt;p&gt;For small web projects that you don&amp;rsquo;t want to get large CSS frameworks like Tailwind to be involved, the classless CSS libraries can be very handy. You just 1-2 lines into the &lt;code&gt;head&lt;/code&gt; of the &lt;code&gt;html&lt;/code&gt; and get beautifully styled pages. Here are a few classless CSS libraries you can use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://concrete.style/&#34; target=&#34;_blank&#34; &gt;concrete.css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://watercss.kognise.dev/&#34; target=&#34;_blank&#34; &gt;water.css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://picocss.com/&#34; target=&#34;_blank&#34; &gt;pico css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://simplecss.org/&#34; target=&#34;_blank&#34; &gt;simple css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://classless.de/&#34; target=&#34;_blank&#34; &gt;classless.de&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://andybrewer.github.io/mvp/&#34; target=&#34;_blank&#34; &gt;mvp.css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nostalgic-css.github.io/NES.css/&#34; target=&#34;_blank&#34; &gt;NES.css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dohliam/dropin-minimal-css&#34; target=&#34;_blank&#34; &gt;drop-in minimal css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://oat.ink&#34; target=&#34;_blank&#34; &gt;Oat&lt;/a&gt;
: HTML components plus some additional ones&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;usage-example&#34;&gt;Usage example&lt;/h3&gt;
&lt;p&gt;To use &lt;a href=&#34;https://watercss.kognise.dev/&#34; target=&#34;_blank&#34; &gt;water.css&lt;/a&gt;
, just paste this into the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; of your HTML:&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>For small web projects that you don&rsquo;t want to get large CSS frameworks like Tailwind to be involved, the classless CSS libraries can be very handy. You just 1-2 lines into the <code>head</code> of the <code>html</code> and get beautifully styled pages. Here are a few classless CSS libraries you can use:</p>
<ul>
<li><a href="https://concrete.style/" target="_blank" >concrete.css</a>
</li>
<li><a href="https://watercss.kognise.dev/" target="_blank" >water.css</a>
</li>
<li><a href="https://picocss.com/" target="_blank" >pico css</a>
</li>
<li><a href="https://simplecss.org/" target="_blank" >simple css</a>
</li>
<li><a href="https://classless.de/" target="_blank" >classless.de</a>
</li>
<li><a href="https://andybrewer.github.io/mvp/" target="_blank" >mvp.css</a>
</li>
<li><a href="https://nostalgic-css.github.io/NES.css/" target="_blank" >NES.css</a>
</li>
<li><a href="https://github.com/dohliam/dropin-minimal-css" target="_blank" >drop-in minimal css</a>
</li>
<li><a href="https://oat.ink" target="_blank" >Oat</a>
: HTML components plus some additional ones</li>
</ul>
<h3 id="usage-example">Usage example</h3>
<p>To use <a href="https://watercss.kognise.dev/" target="_blank" >water.css</a>
, just paste this into the <code>&lt;head&gt;</code> of your HTML:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">link</span>
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">rel</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;stylesheet&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://cdn.jsdelivr.net/npm/water.css@2/out/water.css&#34;</span>
</span></span><span style="display:flex;"><span>/&gt;
</span></span></code></pre></div><p><strong>Update 2024-06-30</strong>: A more comprehensive list of classless CSS libraries with a screenshot of how they look can be found in <a href="https://github.com/dbohdan/classless-css" target="_blank" >this repository</a>
.</p>
<p><a href="https://news.ycombinator.com/item?id=39297949" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>My RSS-based Content Consumption Workflow</title>
      <link>https://saeedesmaili.com/posts/my-content-consumption-workflow/</link>
      <pubDate>Thu, 22 Feb 2024 20:25:49 +0100</pubDate>
      <guid>https://saeedesmaili.com/posts/my-content-consumption-workflow/</guid>
      <description>&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt;: Here is a simplified diagram of how I keep reading articles, books, and other materials without overwhelming myself or having a never-ending pile of to-read items. In this blog post, I will go into the details of each part of the workflow, the tools I currently use, the alternatives I have tried, why they work for me, and what I can improve in the process. Feel free to use the above table of contents to jump to the section that is more interesting to you.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p><strong>TLDR</strong>: Here is a simplified diagram of how I keep reading articles, books, and other materials without overwhelming myself or having a never-ending pile of to-read items. In this blog post, I will go into the details of each part of the workflow, the tools I currently use, the alternatives I have tried, why they work for me, and what I can improve in the process. Feel free to use the above table of contents to jump to the section that is more interesting to you.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20240222-overall-workflow.png#center"/> <figcaption>
            <p>My Overall Workflow</p>
        </figcaption>
</figure>

<h2 id="why">Why</h2>
<p>I used to visit Twitter frequently during the day, sometimes 2-3 hours each day, to find out what&rsquo;s happening in the world and what cool stuff some cool people are talking about. But over time I realized I was a Twitter addict that consumes hours of trash content on the platform without any meaningful benefits. Twitter&rsquo;s algorithm promotes engagement seekers and influencers over actually useful content, and it&rsquo;s just been worse with Elon. I needed to spend my precious time on more useful and rewarding stuff.</p>
<p>I was also a content hoarder, saving anything I found mildly interesting in Pocket or in the browser bookmarks, and I rarely read anything from the pile of the saved items in my read-it-later apps. I had accumulated more than 1000 articles in my Pocket account over the years and had hundreds of bookmarks on Firefox and Chrome. This content clutter was very depressing to me, as I didn&rsquo;t see myself benefiting from anything that I came across.</p>
<p>Lastly, the fact that I was leaving my content consumption inputs to the hands of Twitter, Google, and other algorithms or chance wasn&rsquo;t appealing to me. I wanted to take over control of what I read, at what pace, and from whom.</p>
<h2 id="rss-feeds--other-content-inputs">RSS feeds &amp; other content inputs</h2>
<p>I have tried a few RSS feed reader apps like Feedly and Readwise Reader in the past, but I have currently settled down on using Inoreader as my RSS reader app.</p>
<h3 id="inoreader-pros">Inoreader: Pros</h3>
<p>Inoreader has many nice functionalities, but for me, the most important features are:</p>
<ul>
<li>Very smooth experience between web, android, and iOS apps (I&rsquo;m mentioning this first, as many other apps I&rsquo;ve tried are flaky)</li>
<li>Mark as read while scrolling (Very important for quickly shortlisting items from the feed. This is probably the main reason I&rsquo;ve been able to replace Inoreader with social media apps.)</li>
<li>Rules to auto-delete duplicated items or if the title contains specific words</li>
<li>Its Firefox and Chrome extensions and Android and iOS apps can easily and quickly find RSS feeds of websites</li>
<li>Subscribe to newsletters (max 20 newsletters, that&rsquo;s why I don&rsquo;t use this feature anymore. I use kill-the-newsletter instead)</li>
<li>Feed generators for websites that don&rsquo;t have an RSS feed (the max 20 feed generations limit made me start using RSS-Bridge instead of this feature)</li>
<li>Customization of sharing options (so I&rsquo;ve Pocket the first option and it allows me to quickly share an item into my Pocket account if needed)</li>
</ul>
<p>I&rsquo;ve customized Inoreader&rsquo;s app to make it more pleasing to my taste:</p>
<ul>
<li>Changed the feed layout to list, to get rid of the article thumbnails.</li>
<li>Sorted the lists chronologically, and &ldquo;oldest first&rdquo;. Firstly, I don&rsquo;t want Inoreader&rsquo;s algorithm to decide what is worth my attention. Second, by reading the oldest first, I make sure that nothing gets buried and forgotten at the end of the list, and also when I view an item in the list, the hype dust around it, whatever it is has settled a bit (note that I&rsquo;m usually reading items from 5-6 days ago, so this is not true about any kind of hype).</li>
<li>Disabled the &ldquo;popularity indicator&rdquo;, to have fewer distractions and be focused on the titles.</li>
<li>Changed the content font to a serif one (just a personal preference for reading content).</li>
</ul>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20240222-inoreader.jpg#center" width="300"/> <figcaption>
            <p>My Inoreader Feed</p>
        </figcaption>
</figure>

<h3 id="inoreader-cons">Inoreader: Cons</h3>
<p>Of course, Inoreader is not perfect:</p>
<ul>
<li>They have increased the subscription price many times in the past few years. They&rsquo;ve used to have a Black Friday discount for everyone for years, but they limited the offer to new users last year and it pissed off the existing users and many complained on Reddit.</li>
<li>Inoreader is a cool product, but they&rsquo;ve been focusing on developing new features and capabilities for the enterprise and business customers in the past two years, and they seem to be on a path to <a href="https://en.wikipedia.org/wiki/Enshittification" target="_blank" >enshitification</a>
.</li>
</ul>
<p>I&rsquo;m considering self-hosting a <a href="https://freshrss.org/" target="_blank" >FreshRSS</a>
 in the future and using it with <a href="https://github.com/seazon/FeedMe" target="_blank" >FeedMe</a>
 app if I could make sure it has all the features I need.</p>
<h3 id="rss-feeds-i-follow-using-inoreader">RSS feeds I follow using Inoreader</h3>
<ul>
<li><strong>Blogs and websites</strong>: I started following a handful of blog feeds around 18 months ago. Over time, when I came across an interesting post from a blog or website, I added its feed to Inoreader, and the total is currently 1659 RSS feeds. I recommend you do the same, but you can get an <a href="https://github.com/outcoldman/hackernews-personal-blogs" target="_blank" >OPML list of blog posts from HackerNews users</a>
, or reach out to me if you&rsquo;re interested in my OPML list.</li>
<li><strong>HackerNews and lobste.rs front page</strong>: Thousands of links are submitted to <a href="https://news.ycombinator.com/" target="_blank" >HackerNews</a>
 every day, and you probably don&rsquo;t have time to even scroll through all of them, and many of them are spam or not interesting. But thanks to the power of the community, the ~100 items that reach its front page every day are mostly interesting. The issue with its front page RSS feed is the many duplicated items in the list (I&rsquo;m not sure what exactly happens when a moderator updates an item&rsquo;s title, but many times I see the same item with different titles in my feed reader). Fortunately, I&rsquo;ve been able to remove duplicates automatically using Inoreader&rsquo;s duplication rule (I&rsquo;ve set it to remove any item with the same URL within 24 hours). <a href="https://lobste.rs/" target="_blank" >lobste.rs</a>
 is a similar but smaller community to HackerNews.</li>
<li><strong>Blogs or websites without an RSS feed</strong>: I use <a href="https://rss-bridge.org/" target="_blank" >RSS-Bridge</a>
 (mostly <a href="https://rss-bridge.org/bridge01/#bridge-CssSelectorBridge" target="_blank" >CSS Selector</a>
 and <a href="https://rss-bridge.org/bridge01/#bridge-XPathBridge" target="_blank" >XPathBridge</a>
) to create RSS feeds for blogs and websites that don&rsquo;t provide a feed (If you&rsquo;re writing on the web and don&rsquo;t provide an RSS feed to your readers, please consider adding one). I used to use Inoreader&rsquo;s feed generator, but the Pro plan has a maximum of 20 feed generations and I quickly reached the limit. Honestly, very strange limit on Inoreader&rsquo;s service.</li>
<li><strong>Email newsletters</strong>: I use <a href="https://kill-the-newsletter.com/" target="_blank" >kill-the-newsletter</a>
 to subscribe to email newsletters. It&rsquo;s a free service that provides you a unique email address and a unique RSS feed, you subscribe to the newsletter using that email address, and whenever a new email arrives, it updates your RSS feed. Very nice. I used to use Inoreader&rsquo;s newsletter feature, but the Pro plan has a max 20 newsletter subscription limit (although you can technically use the same email address in multiple newsletters). Some newsletter platforms like Substack, Ghost, and Buttondown provide an RSS feed on the newsletters&rsquo; archive page and I directly use that feed.</li>
</ul>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20240222-rss-inputs.png#center" width="300"/> <figcaption>
            <p>RSS Inputs</p>
        </figcaption>
</figure>

<h3 id="where-i-dont-use-rss">Where I don&rsquo;t use RSS</h3>
<ul>
<li><strong>News</strong>: I don&rsquo;t proactively follow any news publisher, neither general news media like the New York Times, nor tech media like Verge. Anything important will be shared either on HackerNews, or it will reach me somehow via friends and colleagues.</li>
<li><strong>YouTube</strong>: Ideally I should follow the RSS feed of the YouTube channels that I like, but I currently just browse YouTube&rsquo;s home page and if something sounds interesting, I save it into the watch later playlist (or a few other playlists that I&rsquo;ve created). Nothing fancy here, just a typical YouTube user (who sorts his YouTube watch later playlist on &ldquo;oldest first&rdquo;), so won&rsquo;t go into the details of this.</li>
<li><strong>Twitter</strong>: I deleted my Twitter account in 2021 for reasons that I mentioned at the beginning of this post. Last year I realized there are still a handful of interesting people on the platform, so I created <a href="https://twitter.com/saeedesmaili" target="_blank" >a new Twitter account</a>
 and I currently follow 60 users via a Twitter list that I&rsquo;ve created. Whenever I find someone who tweets interesting and useful stuff (like <a href="https://twitter.com/simonw" target="_blank" >@simonw</a>
 or <a href="https://twitter.com/vboykis" target="_blank" >@vicki</a>
) I add them to my list. Fortunately, Elon hasn&rsquo;t destroyed Twitter&rsquo;s list feature yet (although he surely will), so I can browse through the latest tweets from these people in chronological order without any ads. I do this every morning on Twitter&rsquo;s web app, and if there is something very interesting to read later (an article or paper, or a GitHub repo) I use the same shortlist flow as my RSS feeds, which I explain soon. I tried Inoreader&rsquo;s Twitter integration but it stopped working since Elon killed Twitter&rsquo;s API access. I also tried following my list&rsquo;s RSS feed using <a href="https://github.com/zedeus/nitter" target="_blank" >Nitter</a>
, but apparently, that&rsquo;s also going to stop working soon. The experience of reading a handful of tweets in a list on Twitter&rsquo;s web app is generally ok for now.</li>
<li><strong>Podcasts</strong>: Many (or all?) podcasts have RSS feeds, and I can follow them on Inoreader, and I used to do so, but I came to the conclusion that I&rsquo;m not a podcast person. The ratio of the &ldquo;useful information&rdquo; per &ldquo;time spent&rdquo; is extremely low with podcasts for me, so I&rsquo;ve decided to spend my listening time on audiobooks and articles (using Text-to-Speech, more on this later), or if I&rsquo;m not in the mood and I just want to entertain myself while walking or shopping for groceries, I highly prefer listening to music. Therefore, I&rsquo;m following and listening to zero podcasts now.</li>
</ul>
<h2 id="shortlisting">Shortlisting</h2>
<p>So, overall RSS feeds are the main inputs in my workflow, and as I mentioned before, <strong>I&rsquo;m following 1659 RSS feeds</strong> as of today (most of them rarely post new stuff though), which means <strong>I consume between 200 to 300 items in my Inoreader feed on average every day.</strong> Consumption in this step means scrolling through the feed, which I do throughout the day when waiting for my coffee or tea to be ready, waiting in a doctor&rsquo;s office, commuting via bus and metro, and any other place and time that I&rsquo;d go for scrolling social media apps before.</p>
<p>When scrolling my RSS feed reader, if a title grabs my attention, I open the article (or the discussion, if it&rsquo;s a HackerNews page for example), I quickly skim the content (or comments), if interesting, I shortlist the item by either saving it into my Pocket account or the Inoreader&rsquo;s starred items. Both of these saving options are easily accessible on Inoreader&rsquo;s interface.</p>
<p>Why bother saving in two separate places? Over time I&rsquo;ve realized a few facts about myself and the types of content I consume:</p>
<ol>
<li>I don&rsquo;t like reading long stuff on my phone.</li>
<li>Some content requires deep reading, reviewing, highlighting, or some other activity in parallel to reading (like trying the code in a blog post that introduces a new Python library).</li>
<li>I don&rsquo;t need to &ldquo;read&rdquo; everything, I can enjoy listening to some content.</li>
</ol>
<p>So when I shortlist an item, if it has:</p>
<ul>
<li>many visual elements that help understand the content (e.g. a photography tutorial, a how-to guide on using a Python visualization library, etc), or</li>
<li>many code snippets</li>
</ul>
<p>I save it into Inoreader&rsquo;s starred items, and I get back to these items later on my MacBook (More on this later). Otherwise, I save the item into my Pocket account, which it then gets synced with Omnivore, and <strong>I listen to these items</strong> later while doing chores at home. This part of the workflow is a bit messy, I know but I&rsquo;ve experimented with various tools to create a streamlined process of saving items from feeds and listening to them on a high-quality text-to-speech service, and this is what serves me well at the moment:</p>
<ul>
<li>
<p>Every item that must be listened to gets saved into Pocket. Why Pocket?</p>
<ul>
<li>Firstly, because Pocket is a well-known read-it-later tool that has been integrated into many other tools, including Inoreader, so I can save items from my feed to Pocket with just one tap.</li>
<li>Second, since Pocket is integrated into many tools, and the average lifetime of the productivity and reading tools is shorter than the memory of a fish, I&rsquo;m not sure if I&rsquo;ll be using Omnivore, Readwise, or any other tool next year, but I&rsquo;m fairly certain that Pocket will be around (please Mozilla, don&rsquo;t kill it) and any new tool in this ecosystem will have some sort of Pocket integration.</li>
<li>[update 2024-10-31]: Omnivore recently [accounced](<a href="https://blog.omnivore.app/p/omnivore-is-joining-elevenlabs" target="_blank" >https://blog.omnivore.app/p/omnivore-is-joining-elevenlabs</a>
) they&rsquo;re shutting down the whole project, and it made me remember the above paragraph of my blog post and I was reminded that a battle tested old school tool like Pocket is more reliable than a new tool that we don&rsquo;t know if it will exist in a year.</li>
</ul>
</li>
<li>
<p>I&rsquo;ve written a Python script to get the new items from Pocket and save them into Omnivore every day. The script is on Github and using a <code>schedule: cron</code> job on Github Actions and it&rsquo;s running once every day.</p>
</li>
</ul>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20240222-shortlist.png#center"/> <figcaption>
            <p>Shortlisting</p>
        </figcaption>
</figure>

<h2 id="reading-with-text-to-speech">Reading with text-to-speech</h2>
<p>When I realized that by listening to articles I could finally transform myself from a content hoarder to a content consumer, I looked into affordable but high-quality apps that would provide this feature. I of course started with Pocket&rsquo;s own TTS feature, but it&rsquo;s honestly just trash. I couldn&rsquo;t bear listening to Android&rsquo;s cacophonous default TTS engine voices for more than 30 seconds. I then came across this <a href="https://github.com/jing332/tts-server-android" target="_blank" >tts-server-android</a>
 thing that I think somehow replaces your Android phone&rsquo;s TTS engine with more realistic voices (I honestly don&rsquo;t how it works, and yeah, I was brave enough to install the APK file on my phone). It was ok, but still not at a level that I&rsquo;d enjoy listening to. Inoreader also offers a TTS feature for its Pro users, but it&rsquo;s mostly a joke as it has 200K characters per month (which approximates ~20 articles based on my unscientific measurements).</p>
<p>Later I found out about <a href="https://readwise.io/i/s4759" target="_blank" >Readwise Reader</a>
, which was a new product in beta from the Readwise team. <a href="https://readwise.io/" target="_blank" >Readwise</a>
 originally is a sync-your-highlights app, but they started working on their Reader app which is a &hellip; everything app?! It aims to be your feed reader, read-it-later, e-book reader, PDF reader, and many more. Luckily for me, its TTS feature was the best one I had tried until then, and $8/month was a price that I was fine paying for a good TTS app (Readwise Reader was using Microsoft TTS service, but they have switched to <a href="https://unrealspeech.com/" target="_blank" >Unreal Speech</a>
 recently). Readwise Reader has a nice (one-way) Pocket integration, and it gets the newly saved items from Pocket every time you open the app, no extra action is required.</p>
<p>After using Readwise&rsquo;s semi-human-like TTS feature for a few months (with many glitchy UX behaviors of their Android app), I was introduced to <a href="https://omnivore.app/" target="_blank" >Omnivore</a>
 with <a href="https://www.youtube.com/watch?v=B-G0J2cGhBQ" target="_blank" >this YouTube video</a>
. I started trying out Omnivore&rsquo;s TTS, and wow! The voices were impressively high-quality and the experience was the closest to a human narrator (at 1.5x speed). Omnivore is an <a href="https://github.com/omnivore-app/omnivore" target="_blank" >open-source app</a>
, and upon browsing in their codebase and issues I found out they&rsquo;re using <a href="https://play.ht/" target="_blank" >PlayHT</a>
 as their TTS engine. It&rsquo;s still a question mark to me if they are using a not-very-cheap third-party service, how and why they&rsquo;re offering this for free, and what&rsquo;s the business plan, but I&rsquo;d be happy to pay a reasonable monthly subscription to be able to continue using it. Omnivore is a free and open-source app, so I probably can&rsquo;t complain, but I will anyway:</p>
<ul>
<li>TTS is only available on the iOS app, so as an Android user I need to use my iPad or work phone to listen to my saved articles.</li>
<li>There is no stable sync between Omnivore&rsquo;s own apps. Sometimes I remove or archive an item on the web, but it&rsquo;s still available on the iOS app, even if you refresh the feed, close the app, or get back to it next week. (<a href="https://github.com/omnivore-app/omnivore/issues/2922" target="_blank" >I created an issue</a>
 on Oct 2023, but no responses yet)</li>
<li>It has a Pocket integration (told ya!), but it (used to) have an &ldquo;import&rdquo; button in the <code>settings &gt; integrations</code> page, so you&rsquo;d need to click on this button every few days to make Omnivore to fetch the newly saved items from Pocket. No auto-import, yikes, but it was fine. But why do I say &ldquo;used to&rdquo;? Because they changed they completely removed the &ldquo;import&rdquo; button a few months ago, and you have to disconnect and re-connect your Pocket integration (and login, re-authorize, etc on Pocket&rsquo;s website) each time you want to import the new items! Why?! <a href="https://github.com/omnivore-app/omnivore/issues/3256" target="_blank" >I created an issue</a>
 for this on Dec 2023, but no response from devs yet. This is why I need to write my own script to fetch my saved articles from Pocket and store them in Omnivore, and it&rsquo;s been working mostly fine in the past few months.</li>
</ul>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20240222-reading-via-tts.png#center" width="300"/> <figcaption>
            <p>Reading via TTS on Omnivore</p>
        </figcaption>
</figure>

<h2 id="deep-reading">Deep reading</h2>
<p>Text-to-speech is not suitable for content with many visual elements or code snippets. I need to see the chart when the narrator says &ldquo;&hellip; and here is how my indie app&rsquo;s revenue changed last year&rdquo;, and to read the code when you hear &ldquo;&hellip; but you can implement the same functionality with the following 10 lines of Python&rdquo;. There are also cases that I&rsquo;ll need to browse a couple of web pages (like when I come across a HackerNews thread that many interesting tools have been recommended), and this is much easier on a laptop, compared to a phone.</p>
<p>More importantly, one of the critical benefits of doing all the steps of the workflow I&rsquo;ve described so far is to somehow retain the useful information I consume. What should I do when I find a potentially useful Python library or a tip on how to fine-tune a language model? Just say &ldquo;ok, cool&rdquo; and close the tab? I at least have to take a small note about it and make it easier for myself to find it later if I ever needed it. I have a very simple <a href="https://en.wikipedia.org/wiki/Personal_knowledge_management" target="_blank" >personal knowledge management</a>
 system on <a href="https://obsidian.md/" target="_blank" >Obsidian</a>
. I can easily search for my notes using the <a href="https://github.com/scambier/obsidian-omnisearch" target="_blank" >obsidian-omnisearch</a>
 plugin&rsquo;s fuzzy and weighted search features.</p>
<p>I spend 15-30 minutes a day going through the starred items on Inoreader, sorted on &ldquo;oldest first&rdquo;. Depending on the length and depth of the saved item, I can skim, read, highlight, and take notes of 2-10 articles within this timeframe. Obviously, not everything merits a persistence on my memory, I usually find myself taking note of 15-20% of the items I read from Inoreader starred items, while others get an <code>&quot;ok, cool&quot;, close tab</code>. If an item is very long or very dense (information-wise), I usually convert it to a PDF file and save it in my &ldquo;articles&rdquo; folder on iCloud, so I can read it in another scheduled 15-30 minutes time slot on my iPad. I use an app called <a href="https://apps.apple.com/nl/app/documents-file-manager-vpn/id364901807" target="_blank" >Documents</a>
 but I&rsquo;m in a hunt for a better PDF reader for iPad.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/20240222-deep-reading.png#center"/> <figcaption>
            <p>Deep Reading and Taking Notes</p>
        </figcaption>
</figure>

<p>A side note worth mentioning is that I currently utilize open tabs of Chrome on my phone in parallel to Inoreader&rsquo;s starred feature. Sometimes I just keep an interesting link open as a tab on my phone, and thanks to Chrome&rsquo;s excellent &ldquo;tabs open on other devices&rdquo; feature, I browse them regularly on MacBook, similar to what I do with starred items on Inoreader.</p>
<h2 id="other-types-of-content">Other types of content</h2>
<ul>
<li><strong>Social media</strong>: I&rsquo;ve already talked extensively about Twitter, and I also spend 5-10 minutes a day browsing Instagram and Reddit, but usually nothing beneficial on either of them.</li>
<li><strong>Paper books</strong>: I unfortunately don&rsquo;t spend enough (or any, to be honest) time on reading books on paper. Although I&rsquo;m covering books by reading ebooks and listening to audiobooks, but I&rsquo;d love to add physical books to my days as well.</li>
<li><strong>E-books</strong>: I used to read e-books on my Kindle, but I find myself using the iPad for this.</li>
<li><strong>Audiobooks</strong>: For the same reason as liking to listen to articles, I sometimes prefer listening to books (obviously when the topic permits, meaning it&rsquo;s not full of code or math formulas). I used <a href="https://www.storytel.com/" target="_blank" >Storytel</a>
 for a few months, I&rsquo;m currently using Spotify for listening to audiobooks.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>I started using RSS and Inoreader less than 18 months ago, and I&rsquo;ve built this workflow over time, based on learnings of what has worked and what hasn&rsquo;t for me. I have experienced many benefits by doing this, including but not limited to:</p>
<ul>
<li>I don&rsquo;t feel cluttered with content. The number of my read-later items on Pocket remains steady at around 30, and take-note items on Inoreader are somewhat steady at around 170 (yeah, I need to speed this up a bit). I have replaced my pile of content with a flow of content, I consume from the pile at the same rate that I store into it.</li>
<li>By regularly exposing myself to high-quality content, I&rsquo;ve been learning many new things consistently. The ratio of the &ldquo;useful information&rdquo; per &ldquo;time spent&rdquo; has been significantly higher for me following this workflow.</li>
<li>I&rsquo;ve been known as a person who shares useful and interesting content with friends and colleagues. I have received much positive feedback at work appreciating me sharing articles and my findings.</li>
</ul>
<p>The workflow will surely change over time, as tools die and new tools emerge, and also as I as a person change. I&rsquo;ll update this post in the future with notes if I make changes to any parts of this workflow. Please reach out to me if you have any questions, or if you have any recommended tools that you think would fit or improve my workflow.</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Color Palette Generators</title>
      <link>https://saeedesmaili.com/notes/color-palette-generators/</link>
      <pubDate>Wed, 21 Feb 2024 17:30:08 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/color-palette-generators/</guid>
      <description>&lt;p&gt;I stumbled upon a hackernews thread where people have recommended many interesting tools to help with generating color palettes for various use cases. I&amp;rsquo;m creating this list for my future self, and will add other options whenever I come across one.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://uicolors.app/&#34; target=&#34;_blank&#34; &gt;uicolors.app&lt;/a&gt;
: I&amp;rsquo;ve used this one when working on redesigning the user interface for my latest side project. The nice feature of uicolors.app is its Tailwind export functionality which allows you to quickly export the color palette as a Tailwind config code snippet.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.tints.dev/&#34; target=&#34;_blank&#34; &gt;tints.dev&lt;/a&gt;
: Palette Generator + API for Tailwind CSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://colorjs.io/&#34; target=&#34;_blank&#34; &gt;colorjs.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://huemint.com/&#34; target=&#34;_blank&#34; &gt;huemint.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://adevade.github.io/color-scheme-generator/&#34; target=&#34;_blank&#34; &gt;adevade.github.io/color-scheme-generator&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://colorcolor.in/&#34; target=&#34;_blank&#34; &gt;colorcolor.in&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://colormind.io/&#34; target=&#34;_blank&#34; &gt;colormind.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://paletton.com/&#34; target=&#34;_blank&#34; &gt;paletton.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://huehive.co/&#34; target=&#34;_blank&#34; &gt;huehive.co&lt;/a&gt;
: Generate palettes with ChatGPT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=39227831&#34; target=&#34;_blank&#34; &gt;source&lt;/a&gt;
&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>I stumbled upon a hackernews thread where people have recommended many interesting tools to help with generating color palettes for various use cases. I&rsquo;m creating this list for my future self, and will add other options whenever I come across one.</p>
<ul>
<li><a href="https://uicolors.app/" target="_blank" >uicolors.app</a>
: I&rsquo;ve used this one when working on redesigning the user interface for my latest side project. The nice feature of uicolors.app is its Tailwind export functionality which allows you to quickly export the color palette as a Tailwind config code snippet.</li>
<li><a href="https://www.tints.dev/" target="_blank" >tints.dev</a>
: Palette Generator + API for Tailwind CSS</li>
<li><a href="https://colorjs.io/" target="_blank" >colorjs.io</a>
</li>
<li><a href="https://huemint.com/" target="_blank" >huemint.com</a>
</li>
<li><a href="https://adevade.github.io/color-scheme-generator/" target="_blank" >adevade.github.io/color-scheme-generator</a>
</li>
<li><a href="https://colorcolor.in/" target="_blank" >colorcolor.in</a>
</li>
<li><a href="http://colormind.io/" target="_blank" >colormind.io</a>
</li>
<li><a href="https://paletton.com/" target="_blank" >paletton.com</a>
</li>
<li><a href="https://huehive.co/" target="_blank" >huehive.co</a>
: Generate palettes with ChatGPT</li>
</ul>
<p><a href="https://news.ycombinator.com/item?id=39227831" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>There Is a Huge Gap in Generative Ai</title>
      <link>https://saeedesmaili.com/notes/there-is-a-huge-gap-in-generative-ai/</link>
      <pubDate>Tue, 20 Feb 2024 17:52:12 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/there-is-a-huge-gap-in-generative-ai/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;There is a huge gap in generative AI between the quality you observe when you&amp;rsquo;re playing with it open endedly, and the quality you observe when you try to use it for a task where you have a specific end goal in mind. This is I think where most of the hype/reality mismatch occurs.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This accurately sums up my experience using generating AI in a daily base and building products with this technology.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<blockquote>
<p>There is a huge gap in generative AI between the quality you observe when you&rsquo;re playing with it open endedly, and the quality you observe when you try to use it for a task where you have a specific end goal in mind. This is I think where most of the hype/reality mismatch occurs.</p></blockquote>
<p>This accurately sums up my experience using generating AI in a daily base and building products with this technology.</p>
<p><a href="https://x.com/moultano/status/1759281393035862238?s=20" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Office Politics</title>
      <link>https://saeedesmaili.com/notes/office-politics/</link>
      <pubDate>Tue, 20 Feb 2024 17:35:12 +0100</pubDate>
      <guid>https://saeedesmaili.com/notes/office-politics/</guid>
      <description>&lt;p&gt;If you need another reason to hate office politics, Dave Anderson shares some awful advice on how to join office politics, one of them is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;slow-down-other-teams&#34;&gt;Slow down other teams&lt;/h3&gt;
&lt;p&gt;If other teams move quickly, your team can become a bottleneck. That never looks good. When a wild animal is chasing you, you need to not be the slowest. Slow down your peer teams by asking for info, or starting processes. As a bonus, you look as if you&amp;rsquo;re holding a high bar.&lt;/p&gt;</description>
      <content:encoded>
        <![CDATA[<p>If you need another reason to hate office politics, Dave Anderson shares some awful advice on how to join office politics, one of them is:</p>
<blockquote>
<h3 id="slow-down-other-teams">Slow down other teams</h3>
<p>If other teams move quickly, your team can become a bottleneck. That never looks good. When a wild animal is chasing you, you need to not be the slowest. Slow down your peer teams by asking for info, or starting processes. As a bonus, you look as if you&rsquo;re holding a high bar.</p>
<ul>
<li>&ldquo;But have you done a user study?&rdquo;</li>
<li>&ldquo;Did you get a security review?&rdquo;</li>
<li>&ldquo;That design looks interesting! Could you get a principal review before you move forward?&rdquo;</li>
</ul>
<p>Once you&rsquo;ve slowed them down, they&rsquo;ll be a bottleneck, and it will demonstrate that your leadership is superior.</p></blockquote>
<p><a href="https://twitter.com/scarletinked/status/1759630063711232026" target="_blank" >source</a>
</p>
<hr /><p>Comment? Reply via <a href='mailto:me@saeedesmaili.com?subject=Re: Blog Post on RSS Feeds'>Email</a>, <a href='https://mastodon.world/@saeedesmaili' target='_blank'>Mastodon</a> or <a href='https://twitter.com/saeedesmaili' target='_blank'>Twitter</a>.</p>]]>
      </content:encoded>
    </item>
  </channel>
</rss>
