<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shavindra Manathunga</title>
    <description>The latest articles on DEV Community by Shavindra Manathunga (@shavindrasn).</description>
    <link>https://dev.to/shavindrasn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3886984%2F2dda8e22-ccd1-42f3-bb1b-22deba61cf63.jpg</url>
      <title>DEV Community: Shavindra Manathunga</title>
      <link>https://dev.to/shavindrasn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shavindrasn"/>
    <language>en</language>
    <item>
      <title>Turning a Desk clock into a Claude Code usage meter</title>
      <dc:creator>Shavindra Manathunga</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:14:59 +0000</pubDate>
      <link>https://dev.to/shavindrasn/turning-a-desk-clock-into-a-claude-code-usage-meter-p1p</link>
      <guid>https://dev.to/shavindrasn/turning-a-desk-clock-into-a-claude-code-usage-meter-p1p</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — &lt;code&gt;git clone … &amp;amp;&amp;amp; ./install.sh &amp;lt;clock-ip&amp;gt;&lt;/code&gt;. Needs Claude Code signed in. macOS + Linux. Repo: &lt;a href="https://github.com/shavindraSN/claude-meter" rel="noopener noreferrer"&gt;github.com/shavindraSN/claude-meter&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;When you're deep in a coding session with Claude Code, the last thing you want is to hit a rate limit unexpectedly. The usage dashboard exists, but it's two clicks away — and checking it constantly breaks focus. Claude Code's paid plans have two rate limits: a rolling 5-hour session budget and a 7-day weekly budget, both shown as percentages in Settings → Usage.&lt;/p&gt;

&lt;p&gt;I wanted a passive, always-on display that shows remaining quota the same way a clock shows time: no interaction required, just there.&lt;/p&gt;

&lt;p&gt;So I turned a clock into one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9fwrx1ibi9bkra7wzq7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9fwrx1ibi9bkra7wzq7.jpg" alt="GeekMagic SmallTV desk clock showing a full-screen 'Claude usage' card: 5h session 23% with 'resets in 2h 35m', 7d weekly 14% with 'resets Fri 8:30 AM', and cyan progress bars" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two percentages: 5-hour session quota and 7-day weekly quota. Updated every minute. Numbers match the Claude app's &lt;strong&gt;Settings → Usage&lt;/strong&gt; exactly.&lt;/p&gt;

&lt;p&gt;Here's what took me a weekend, and the two dead ends along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hardware: GeekMagic SmallTV
&lt;/h2&gt;

&lt;p&gt;I already had one of these on my desk. It's a ~$20 ESP8266-based desk clock with a 240×240 TFT screen. Stock firmware gives you a weather clock, a photo slideshow, and a "customization GIF" slot. It speaks HTTP over your Wi-Fi — no flashing, no soldering.&lt;/p&gt;

&lt;p&gt;Out of the box:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn21w3nqbkmhcpman8zt.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn21w3nqbkmhcpman8zt.webp" alt="The GeekMagic SmallTV running its stock weather clock face, showing the time, date, city name, weather icon, and temperature/humidity readouts" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What caught my eye: the corner slot where a "GIF" can play. If I could upload any image there, I could repurpose it as a usage meter without losing the stock clock or weather display.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dead end #1: parsing Claude's JSONL logs
&lt;/h2&gt;

&lt;p&gt;My first attempt avoided the API entirely. Claude Code stores every session as JSONL under &lt;code&gt;~/.claude/projects/&lt;/code&gt;. Each line has &lt;code&gt;usage.input_tokens&lt;/code&gt;, &lt;code&gt;output_tokens&lt;/code&gt;, cache reads, and cost. Sum them up, divide by the plan limit, done — right?&lt;/p&gt;

&lt;p&gt;I had it working in an afternoon. The problem: my numbers drifted from the app. Sometimes 3%, sometimes 10% off. The root cause turned out to be several accounting rules I wasn't modeling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Weekly reset is anchored to your account creation date, not a rolling 7 days.&lt;/li&gt;
&lt;li&gt;A "session" starts on the first prompt &lt;em&gt;after a reset&lt;/em&gt;, not the oldest prompt in the last 5 hours.&lt;/li&gt;
&lt;li&gt;Cache reads count differently from regular tokens.&lt;/li&gt;
&lt;li&gt;There's an Opus-specific weekly split on the Max plans.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I could have reverse-engineered all of it — but every time Anthropic updates their rate-limit rules, I'd be chasing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unlock: there's an endpoint for this
&lt;/h2&gt;

&lt;p&gt;I went looking at the Claude desktop app's network traffic and found:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://api.anthropic.com/api/oauth/usage
anthropic-beta: oauth-2025-04-20
Authorization: Bearer &amp;lt;oauth-token&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"five_hour"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"utilization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"resets_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-19T15:30:00Z"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seven_day"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"utilization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"resets_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-25T08:30:00Z"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's exactly the numbers the app shows — pre-computed by Anthropic. No token math, no plan detection, no session heuristics needed. My entire &lt;code&gt;compute_stats()&lt;/code&gt; module deleted itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  But now I needed OAuth
&lt;/h2&gt;

&lt;p&gt;The endpoint requires an OAuth bearer token with &lt;code&gt;user:inference&lt;/code&gt; scope. Building a full OAuth flow — browser redirect, PKCE, refresh handling — for a desk clock felt like overkill.&lt;/p&gt;

&lt;p&gt;Then I noticed: &lt;strong&gt;Claude Code is already doing this&lt;/strong&gt;. The CLI signs in once, caches tokens, and refreshes them automatically. That cache lives on disk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS: &lt;code&gt;security find-generic-password -s "Claude Code-credentials" -w&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Linux: &lt;code&gt;~/.claude/.credentials.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both store the same JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"claudeAiOauth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"accessToken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"refreshToken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"expiresAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;1745123456000&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"organizationUuid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So &lt;code&gt;claude-meter&lt;/code&gt; piggybacks on the CLI's auth. If you already have Claude Code signed in, it works immediately — zero separate login, zero browser redirects. When the token is close to expiry, it refreshes against &lt;code&gt;/v1/oauth/token&lt;/code&gt; and writes the new pair back to the same store, keeping the &lt;code&gt;claude&lt;/code&gt; CLI in sync.&lt;/p&gt;

&lt;p&gt;This ended up being the cleanest part of the design. No separate credential store to manage, no OAuth client to register with Anthropic, nothing for users to authenticate beyond what they've already done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dead end #2: the clock doesn't accept JPEGs
&lt;/h2&gt;

&lt;p&gt;With usage data in hand, the next step was pushing an 80×80 JPEG to the clock's customization-GIF slot.&lt;/p&gt;

&lt;p&gt;The HTTP API looked straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://192.168.1.50/upload&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;imageFile&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gif.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jpg_bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image/jpeg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns &lt;code&gt;200 OK&lt;/code&gt;. Nothing changes on screen.&lt;/p&gt;

&lt;p&gt;Different filename — &lt;code&gt;200 OK&lt;/code&gt;, nothing. Different JPEG — &lt;code&gt;200 OK&lt;/code&gt;, nothing. A real GIF exported from their desktop converter tool — &lt;code&gt;200 OK&lt;/code&gt;, and it works. Diffing the bytes revealed why.&lt;/p&gt;

&lt;p&gt;The converter's output is &lt;em&gt;not a standard image format&lt;/em&gt;. It's a custom container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reverse-engineering the container
&lt;/h2&gt;

&lt;p&gt;Pulling apart the converter output byte-by-byte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────┐
│       frame0 JPEG        │
├──────────────────────────┤
│  2400-byte index block   │
├──────────────────────────┤
│       frame1 JPEG        │
│       frame2 JPEG        │
│          ...             │
│      frameN-1 JPEG       │
└──────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The index block is 200 slots × 12 bytes. Record layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;u16  magic (0x01ff)
u16  id       # record 0's id = total frame count; others = frame index
u32  offset   # absolute byte offset into the file
u32  size     # frame size in bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three additional constraints the firmware doesn't document:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Quantization tables are pinned.&lt;/strong&gt; The hardware JPEG decoder silently rejects frames that don't use the specific luma/chroma qtables the converter produces. Pillow's defaults result in a black screen. I extracted the tables from a known-good converter output and hardcoded them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APP0 density matters.&lt;/strong&gt; The JFIF APP0 segment must declare 96×96 DPI. Pillow's default (0×0) causes silent rejection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum frame count is ~33.&lt;/strong&gt; Single-frame and 2-frame payloads were rejected. 33 works. 33 frames × ~2KB ≈ 64KB — likely a hardcoded firmware buffer size.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The solution: push the same 80×80 frame 33 times, wrapped in the expected container. The display stays static, the firmware validation passes.&lt;/p&gt;

&lt;p&gt;The full encoder is &lt;a href="https://github.com/shavindraSN/claude-meter/blob/main/src/claude_meter/transports/geekmagic.py" rel="noopener noreferrer"&gt;~50 lines&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running it
&lt;/h2&gt;

&lt;p&gt;Not on PyPI yet — installing from source is one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/shavindraSN/claude-meter.git
&lt;span class="nb"&gt;cd &lt;/span&gt;claude-meter
./install.sh 192.168.1.50        &lt;span class="c"&gt;# your clock's IP&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script handles the full setup: creates a venv, installs the package, writes the config, runs &lt;code&gt;claude-meter check&lt;/code&gt; to verify auth and API connectivity, and registers the background service (launchd on macOS, systemd user unit on Linux). After it completes, the clock updates automatically.&lt;/p&gt;

&lt;p&gt;Dedup is built in — if the rounded percentages haven't changed since the last push, the upload is skipped to avoid unnecessary traffic.&lt;/p&gt;

&lt;p&gt;The clock has two writable slots, so &lt;code&gt;claude-meter&lt;/code&gt; supports both:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;gif80&lt;/code&gt;&lt;/strong&gt; — 80×80 in the customization-GIF corner, alongside the stock weather clock.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabseq3qxs8suw8po6y3b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabseq3qxs8suw8po6y3b.jpg" alt="GeekMagic SmallTV in gif80 mode: stock weather clock on the left with time, date, and temperature; two small green progress bars in the bottom-right corner showing '5h 24%' and '7d 14%' Claude usage" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;photo240&lt;/code&gt;&lt;/strong&gt; — full-screen 240×240, larger numbers with reset countdowns under each bar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dzlrivzi0gcl6clc1g9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dzlrivzi0gcl6clc1g9.jpg" alt="GeekMagic SmallTV in photo240 mode: full-screen Claude usage card with large teal percentages (5h 23%, 7d 14%), cyan progress bars, reset countdowns under each bar, and the device IP at the bottom" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Switch with &lt;code&gt;claude-meter configure --mode photo240&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribute
&lt;/h2&gt;

&lt;p&gt;The project is open source under the MIT license. The core — OAuth reuse, fetch loop, renderer — is device-agnostic, and the GeekMagic-specific transport is only ~50 lines. If you have a different display (TRMNL, Inkplate, LaMetric, a Raspberry Pi PiTFT), adding support is one new file under &lt;code&gt;transports/&lt;/code&gt;. Bug reports, display ports, and feature ideas are all welcome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/shavindraSN/claude-meter" rel="noopener noreferrer"&gt;github.com/shavindraSN/claude-meter&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;A $20 clock that was showing weather is now showing something I actually check. If you've repurposed any IoT hardware for your own workflow, I'd love to see it — drop it in the comments.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>hardware</category>
      <category>python</category>
      <category>reverseengineering</category>
    </item>
  </channel>
</rss>
