<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://slide.ryoga.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://slide.ryoga.dev/" rel="alternate" type="text/html" hreflang="ja" /><updated>2026-03-20T03:47:54+00:00</updated><id>https://slide.ryoga.dev/feed.xml</id><title type="html">slide</title><subtitle>Presentation slides powered by Reveal.js</subtitle><author><name>Ryoga.exe</name></author><entry><title type="html">Veryl Css</title><link href="https://slide.ryoga.dev/posts/veryl-css.html" rel="alternate" type="text/html" title="Veryl Css" /><published>2026-03-20T00:00:00+00:00</published><updated>2026-03-20T00:00:00+00:00</updated><id>https://slide.ryoga.dev/posts/veryl-css</id><content type="html" xml:base="https://slide.ryoga.dev/posts/veryl-css.html"><![CDATA[<h2 id="veryl-の-ir-で遊んでみる">Veryl の IR で遊んでみる</h2>
<h5 id="--独自-target-を生やしてみたかった話--">- 独自 target を生やしてみたかった話 -</h5>
<hr />
<p>&lt;/br&gt;</p>

<h4 id="ryogaexe">Ryoga.exe</h4>

<p><small>Kernel/VM探検隊＠つくば No3</small></p>

<hr />

<!-- .slide: style="text-align: left;" -->

<h2 id="自己紹介">自己紹介</h2>

<div style="display: flex; align-items: center; justify-content: space-between;">
  <div>
<h3>Ryoga.exe</h3>

- 筑波大学情報学群情報科学類 3 年
- やる：言語処理系とFPGAとCTF
- X (Twitter)/mixi2: [@Ryoga_exe](https://x.com/Ryoga_exe)
  </div>

  <img src="/assets/img/icon.jpg" width="230" height="230" />
</div>

<hr />

<h2 id="最近作ったもの">最近作ったもの</h2>

<div>
  <ul class="r-stack">
    <li class="fragment fade-out" data-fragment-index="1">FPGA 上に RISC-V CPU を作ったりした</li>
    <li class="fragment fade-in-then-out" data-fragment-index="1">その上で動く簡易的な OS も作った</li>
    <li class="fragment" data-fragment-index="2">その上でテトリスとかが動いた</li>
  </ul>
  <div class="r-stack">
    <img src="/assets/img/veryl-css/cpu-fpga.jpg" />
    <img class="fragment" src="/assets/img/veryl-css/cpu-uart.gif" data-fragment-index="1" />
    <img class="fragment" src="/assets/img/veryl-css/cpu-tetris.gif" data-fragment-index="2" />
  </div>
</div>

<p><small class="fragment" data-fragment-index="2" style="font-size: 0.3em;">筑波大学の COJT とかいう謎授業の自由課題で作った（CPU, OS 自作して単位が貰えて最高！）</small></p>

<p>–</p>

<p><img src="/assets/img/veryl-css/veryl-logo.webp" /></p>

<p>CPU を作る中で Veryl という<br />
モダンなハードウェア記述言語に出会った</p>

<p>–</p>

<h2 id="veryl-とは">Veryl とは</h2>

<ul>
  <li>SystemVerilog ベースの新しい HDL</li>
  <li>モダンで書きやすい構文</li>
  <li>既存の SystemVerilog 資産と連携しやすい</li>
  <li>フォーマッタなどツール込みで使いやすい</li>
</ul>

<p>–</p>

<!-- .slide: data-background-iframe="https://veryl-lang.org/" -->
<!-- .slide: style="text-align: right; border-right: solid white 4px;" -->

<div class="fragment fade-out" style="background: black; color: white; display: inline-block; padding-inline: 0.5em;">Veryl の公式サイト</div>

<hr />

<auto-animate />

<h2 id="最近-ir-が導入されたらしい">最近 IR が導入されたらしい</h2>

<div style="display: flex; justify-content: center;">
  <blockquote class="twitter-tweet" data-width="320">
    <p lang="en" dir="ltr">We&#39;ve introduced a new semantic analyzer based on intermediate representation to the Veryl compiler.<br />See the blog post below for more details.<a href="https://t.co/UhI227hOXe">https://t.co/UhI227hOXe</a></p>&mdash; dalance (@dalance1982) <a href="https://twitter.com/dalance1982/status/2013814588257776119?ref_src=twsrc%5Etfw">January 21, 2026</a>
  </blockquote>
</div>

<p>–</p>

<auto-animate />

<h2 id="最近-ir-が導入されたらしい-1">最近 IR が導入されたらしい</h2>

<ul>
  <li>もともと Veryl は CST ベースの処理が多かった</li>
  <li>しかし、エラーチェック（未代入やラッチ検出）には IR のほうが向いている</li>
</ul>

<p>そこで IR が導入された</p>

<p>–</p>

<h2 id="ir-が入ると何が嬉しいのか">IR が入ると何が嬉しいのか？</h2>

<ul>
  <li>条件分岐が単純な形に落ちる</li>
  <li>generics / parameter override を反映した状態で見られる</li>
  <li>ビット単位の未代入検出/ラッチ検出がしやすい</li>
</ul>

<p>将来的には IR を評価してシミュレータも<br />
見えてくるらしい</p>

<hr />

<h2 id="思った">思った</h2>

<h3 id="独自-target-生やせるのではないか">独自 target 生やせるのではないか</h3>

<ul>
  <li>公式 target は SystemVerilog           <!-- .element: class="fragment" --></li>
  <li>でも IR が公開されているなら、遊べそう <!-- .element: class="fragment" --></li>
</ul>

<p>–</p>

<h2 id="外から触れるのか">外から触れるのか</h2>

<ul>
  <li>Veryl のリポジトリは Cargo workspace</li>
  <li><code class="language-plaintext highlighter-rouge">crates/</code> 配下に <code class="language-plaintext highlighter-rouge">analyzer</code> などの crate がある</li>
  <li><code class="language-plaintext highlighter-rouge">veryl-analyzer</code> は <code class="language-plaintext highlighter-rouge">pub mod ir;</code> を公開していて、<code class="language-plaintext highlighter-rouge">Analyzer</code> と <code class="language-plaintext highlighter-rouge">Context</code> も public に export している</li>
</ul>

<p>–</p>

<div class="language-toml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">[dependencies]</span>
<span class="py">veryl-analyzer</span> <span class="p">=</span> <span class="s">"0.19.0"</span>
<span class="py">veryl-metadata</span> <span class="p">=</span> <span class="s">"0.19.0"</span>
<span class="py">veryl-parser</span> <span class="p">=</span> <span class="s">"0.19.0"</span>
</code></pre></div></div>

<p>–</p>

<p>```rs [|8-9|11|13|15-17|19-23|33]
use std::{env, fs};</p>

<p>use veryl_analyzer::{Analyzer, Context, ir::Ir};
use veryl_metadata::Metadata;
use veryl_parser::Parser;</p>

<p>fn main() {
    let path = env::args().nth(1).unwrap();
    let code = fs::read_to_string(&amp;path).unwrap();</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>let metadata = Metadata::create_default("prj").unwrap();

let parser = Parser::parse(&amp;code, &amp;path).unwrap();

let analyzer = Analyzer::new(&amp;metadata);
let mut context = Context::default();
let mut ir = Ir::default();

let mut errors = vec![];
errors.append(&amp;mut analyzer.analyze_pass1("prj", &amp;parser.veryl));
errors.append(&amp;mut Analyzer::analyze_post_pass1());
errors.append(&amp;mut analyzer.analyze_pass2("prj", &amp;parser.veryl, &amp;mut context, Some(&amp;mut ir)));
errors.append(&amp;mut Analyzer::analyze_post_pass2());

if !errors.is_empty() {
    eprintln!("analyzer errors:");
    for e in &amp;errors {
        eprintln!("{e:?}");
    }
    eprintln!();
}

println!("{}", ir); } ``` &lt;!-- .element: style="width: 100%; font-size: 0.5em;" --&gt;
</code></pre></div></div>

<style>
  .reveal pre code {
    max-height: 600px;
  }
</style>

<p>–</p>

<div style="display: flex; align-items: center; justify-content: space-between;">

<div style="flex-shrink: 0;">

<small>input (veryl):</small>

```veryl
module Counter (
    clk: input clock,
    rst: input reset,
    o  : output logic&lt;8&gt;,
) {
    always_ff {
        if_reset {
            o = 0;
        } else {
            o += 1;
        }
    }
}
```
<!-- .element: style="margin: 0; font-size: 0.5em; width: fit-content;" -->

</div>

<div>

<small>output (ir):</small>

```
module Counter {
  input var0(clk): clock = 1'hx;
  input var1(rst): reset = 1'hx;
  output var2(o): logic&lt;8&gt; = 8'hxx;

  ff (var0, var1) {
    if_reset {
      var2 = 32'sh00000000;
    } else {
      var2 = (var2 + 32'sh00000001);
    }
  }
}
```
<!-- .element: class="fragment" style="margin: 0; font-size: 0.5em; width: fit-content;" -->

</div>

</div>

<p>–</p>

<h2 id="眺めた感じ">眺めた感じ</h2>

<h2 id="どうにか何かはできそう">どうにか何かはできそう</h2>

<hr />

<auto-animate />

<h2 id="何を-target-にするか">何を target にするか</h2>

<p>SystemVerilog との共通点を考える</p>

<p>–</p>

<auto-animate />

<h2 id="何を-target-にするか-1">何を target にするか</h2>

<p>SystemVerilog</p>

<ul>
  <li>仕様書がデカい                   <!-- .element: class="fragment" --></li>
  <li>組合せ回路が記述できる           <!-- .element: class="fragment" --></li>
  <li>フリップフロップ回路が記述できる <!-- .element: class="fragment" --></li>
  <li>CPU を作るのに使われる           <!-- .element: class="fragment" --></li>
</ul>

<p>–</p>

<auto-animate />

<div class="r-stack">
  <ul class="">
    <li class="fragment">仕様書がデカい</li>
    <li class="fragment">組合せ回路<span style="font-size: 0.5em;">（っぽいもの）</span>が記述できる</li>
    <li class="fragment">フリップフロップ回路<span style="font-size: 0.5em;">（っぽいもの）</span>が記述できる</li>
    <li class="fragment">CPU を作るのに使われる</li>
  </ul>
  <img src="https://raw.githubusercontent.com/CSS-Next/logo.css/refs/heads/main/primary/css.webp" class="r-fit-text fragment" width="400" height="400" />
</div>

<hr />

<h2 id="veryl-to-css-を試みた話">Veryl to CSS を試みた話</h2>
<hr />
<p>&lt;/br&gt;</p>

<h4 id="ryogaexe-1">Ryoga.exe</h4>

<p><small>Kernel/VM探検隊＠つくば No3</small></p>

<hr />

<h2 id="近年-css-の進化は目覚ましい">近年 CSS の進化は目覚ましい</h2>

<h3 id="css-の表現力が劇的に向上">CSS の表現力が劇的に向上</h3>

<p>–</p>

<p><small>CSS で CPU が作られたことは記憶に新しい</small></p>

<div style="display: flex; justify-content: center;">
  <blockquote class="twitter-tweet" data-width="320">
    <p lang="en" dir="ltr">i built an entire x86 CPU emulator in CSS (no javascript)<br /><br />you can write programs in C, compile them to x86 machine code with GCC, and run them inside CSS <a href="https://t.co/jU29iLZfbZ">pic.twitter.com/jU29iLZfbZ</a></p>&mdash; Rebane (@rebane2001) <a href="https://twitter.com/rebane2001/status/2026120879755628980?ref_src=twsrc%5Etfw">February 24, 2026</a>
  </blockquote>
</div>

<p>–</p>

<h2 id="しかし">しかし</h2>

<ul>
  <li>CSS で複雑なロジックを組むのは大変</li>
  <li>実は CSS は<span class="fragment"><span class="fragment highlight-red">複雑なロジックを組むのが目的の言語ではない</span></span></li>
</ul>

<p>–</p>

<auto-animate />

<h2 id="実は">実は</h2>

<p style="font-size: 2em">
  C<span data-id="c1" style="font-size: 0em">ascading </span>S<span data-id="c2" style="font-size: 0em">tyle </span>S<span data-id="c3" style="font-size: 0em">heets </span>
</p>

<p>–</p>

<auto-animate />

<h2 id="実は-1">実は</h2>

<p style="font-size: 2em">
  C<span data-id="c1">ascading </span>S<span data-id="c2">tyle </span>S<span data-id="c3">heets</span>
</p>

<p>実は文書のスタイリングが主目的</p>

<p>–</p>

<p>なので</p>

<p>複雑なロジック部分を<span class="fragment"><span class="fragment highlight-red">Veryl</span>で実装する</span>ことにより<br />
高度なCSSを実現する</p>

<p>–</p>

<div style="display: flex; align-items: center; justify-content: space-between;">

<div style="flex-shrink: 0;">

<small>input (veryl):</small>

```veryl
module Top (
    a: input  i32,
    b: input  i32,
    c: output i32,
) {
    var t0: i32;
    always_comb {
        t0 = a + b;
        c = t0 + 5;
    }
}
```
<!-- .element: style="margin: 0; font-size: 0.5em; width: fit-content;" -->

</div>

<div>

<small>output (css):</small>

```css
:root {
  --t0: calc(var(--a) + var(--b));
  --c: calc(var(--t0) - 5);
}
```
<!-- .element: class="fragment" style="margin: 0; font-size: 0.5em; width: fit-content;" -->

</div>

</div>

<hr />

<auto-animate />

<h2 id="つくったもの">つくったもの</h2>

<svg height="40" class="octicon octicon-mark-github mr-2 v-align-middle" fill="black" aria-label="GitHub" viewBox="0 0 16 16" version="1.1" width="40" role="img"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg>
<p>https://github.com/Ryoga-exe/veryl-css</p>

<p>–</p>

<auto-animate />

<h2 id="何ができるか">何ができるか</h2>

<svg height="40" class="octicon octicon-mark-github mr-2 v-align-middle" fill="black" aria-label="GitHub" viewBox="0 0 16 16" version="1.1" width="40" role="img"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg>
<p>https://github.com/Ryoga-exe/veryl-css</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">always_comb</code> / <code class="language-plaintext highlighter-rouge">alawys_ff</code> / <code class="language-plaintext highlighter-rouge">if_reset</code> / <code class="language-plaintext highlighter-rouge">if</code> / <code class="language-plaintext highlighter-rouge">case</code> / <code class="language-plaintext highlighter-rouge">var</code></li>
  <li>一部の組込み型</li>
  <li>一部の演算子</li>
</ul>

<p>を CSS にコンパイル可能</p>

<hr />

<h2 id="例">例</h2>

<p>–</p>

<div class="r-stack">

```veryl
module seg7 (
    d0 : input  u8,
    d1 : input  u8,
    d2 : input  u8,
    d3 : input  u8,
    out: output u8,
    s0 : output u8,
    s1 : output u8,
    s2 : output u8,
    s3 : output u8,
    s4 : output u8,
    s5 : output u8,
    s6 : output u8,
) {
    var data: u8;
    var seg: u8;
    always_comb {
        data = 8 * d0 + 4 * d1 + 2 * d2 + 1 * d3;
        out = data;
        case data {
            0      : seg = 8'b0111111;
            1      : seg = 8'b0000110;
            2      : seg = 8'b1011011;
            3      : seg = 8'b1001111;
            4      : seg = 8'b1100110;
            5      : seg = 8'b1101101;
            6      : seg = 8'b1111101;
            7      : seg = 8'b0000111;
            8      : seg = 8'b1111111;
            9      : seg = 8'b1101111;
            default: seg = 0;
        }
        s0 = seg[0];
        s1 = seg[1];
        s2 = seg[2];
        s3 = seg[3];
        s4 = seg[4];
        s5 = seg[5];
        s6 = seg[6];
    }
}
```

```css
/* generated by veryl-css */

@function --veryl-eq(--a <number>, --b <number>) returns <integer> {
  result: clamp(0, calc(1 - abs(sign(calc(var(--a) - var(--b))))), 1);
}

@property --veryl-cond-0 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-1 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-2 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-3 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-4 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-5 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-6 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-7 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-8 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --veryl-cond-9 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --d0 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --d1 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --d2 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --d3 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --out {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --s0 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --s1 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --s2 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --s3 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --s4 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --s5 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --s6 {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --seg7-data {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --seg7-seg {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

:root {
  --seg7-data: calc((calc((calc((calc((8) * (var(--d0)))) +
    (calc((4) * (var(--d1)))))) +
    (calc((2) * (var(--d2)))))) +
    (calc((1) * (var(--d3)))));
  --out: var(--seg7-data);
  --veryl-cond-0: --veryl-eq(var(--seg7-data), 0);
  --veryl-cond-1: --veryl-eq(var(--seg7-data), 1);
  --veryl-cond-2: --veryl-eq(var(--seg7-data), 2);
  --veryl-cond-3: --veryl-eq(var(--seg7-data), 3);
  --veryl-cond-4: --veryl-eq(var(--seg7-data), 4);
  --veryl-cond-5: --veryl-eq(var(--seg7-data), 5);
  --veryl-cond-6: --veryl-eq(var(--seg7-data), 6);
  --veryl-cond-7: --veryl-eq(var(--seg7-data), 7);
  --veryl-cond-8: --veryl-eq(var(--seg7-data), 8);
  --veryl-cond-9: --veryl-eq(var(--seg7-data), 9);
  --seg7-seg: if(style(--veryl-cond-0: 1): 63;
    else: if(style(--veryl-cond-1: 1): 6;
    else: if(style(--veryl-cond-2: 1): 91;
    else: if(style(--veryl-cond-3: 1): 79;
    else: if(style(--veryl-cond-4: 1): 102;
    else: if(style(--veryl-cond-5: 1): 109;
    else: if(style(--veryl-cond-6: 1): 125;
    else: if(style(--veryl-cond-7: 1): 7;
    else: if(style(--veryl-cond-8: 1): 127;
    else: if(style(--veryl-cond-9: 1): 111;
    else: 0))))))))));
  --s0: mod(var(--seg7-seg), 2);
  --s1: mod(round(down, var(--seg7-seg) / 2), 2);
  --s2: mod(round(down, var(--seg7-seg) / 4), 2);
  --s3: mod(round(down, var(--seg7-seg) / 8), 2);
  --s4: mod(round(down, var(--seg7-seg) / 16), 2);
  --s5: mod(round(down, var(--seg7-seg) / 32), 2);
  --s6: mod(round(down, var(--seg7-seg) / 64), 2);
}
```
<!-- .element: class="fragment" -->

&lt;/div&gt;

--

<iframe data-src="/assets/img/veryl-css/html/7seg.html" data-preload="" style="background: white;" width="100%" height="500" />

--

<div class="r-stack">

```veryl
module Counter (
    clk: input clock,
    rst: input reset,
    o  : output i32,
) {
    always_ff {
        if_reset {
            o = 0;
        } else {
            o = o + 1;
        }
    }
}
```


```css
/* generated by veryl-css */

@property --o {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

@property --rst {
  syntax: "<integer>";
  inherits: true;
  initial-value: 0;
}

body {
  --o: var(--Counter-o-hoist, 0);
  --Counter-o-next: if(style(--rst: 1): 0; else: calc((var(--o)) + (1)));
}

@keyframes hoist {
  0%, 100% {
    --Counter-o-hoist: var(--Counter-o-captured, 0);
  }
}

@keyframes capture {
  0%, 100% {
    --Counter-o-captured: var(--Counter-o-next);
  }
}
```
<!-- .element: class="fragment" -->

&lt;/div&gt;

--

<iframe data-src="/assets/img/veryl-css/html/counter.html" data-preload="" style="background: white;" width="100%" height="500" />

--

<iframe data-src="/assets/img/veryl-css/html/barcode.html" data-preload="" style="background: white;" width="100%" height="500" />

---

## 制約

- 扱える型に制限がある
- 現状 module は一つだけ
- 動作環境は新しめの Chromium ブラウザのみ
- クロックの扱いが厳密ではない
  - <span>[CSS The CPU Hack](https://dev.to/janeori/expert-css-the-cpu-hack-4ddj) という謎 CSS テクで実装しているため</span>

---

## 実装
 
<div style="border: solid gray 1px;">
  Veryl ソース
</div>

↓ veryl-parser + veryl-analyzer

<div style="border: solid gray 1px;">
  IR（型情報付き変数・文のツリー）
</div>

↓ codegen.rs

<div style="border: solid gray 1px;">
  CSS
</div>

--

本質：`emit_module()` 関数

1. clock/reset/ff 割り当て先の ID 収集
2. 変数ごとに CSS 変数名・型情報・ff 用中間変数を確定
3. comb/ff を変換
4. CSS テキストを組み立てて出力

--

`if()` の取り扱い：`eval_if_expr()`

CSS には `if()` があるが、\
単純な等値比較しか扱えない

```css
if(style(--foobar: 1): 10; else: 20;)
```
<!-- .element: style="width: fit-content" -->

<small style="margin-top: 100px">↑ 時代を先取りしすぎているため、うまくシンタックスハイライトが効かない</small>

--

#### そういえば最近のCSSのアップデートは目覚ましい

ここでおもむろに CSS WG の CSS Values and Units Module Level 4 を見てみる

--

- 端数処理: `round`
- 剰余関数: `rem`, `mod`
- 冪乗: `pow`
- 平方根: `sqrt`
- 対数: `log`
- 指数: `exp`
- 絶対値: `abs`
- `min` / `max` / <span class="fragment highlight-red" data-fragment-index="1">`clamp`</span>
- <span class="fragment highlight-red" data-fragment-index="1">符号関数: `sign`</span>
- 三角関数・逆三角関数: `sin`, `cos`, `tan`, `asin`, ...
- ネイピア数 ($e$) や円周率 ($\pi$) などの定数

--

```css
/* a &lt; b なら 1、それ以外は 0 */
@function --lt(--a <number>, --b <number>) returns <integer> {
  result: clamp(0, sign(calc(var(--b) - var(--a))), 1);
}

/* a &gt; b なら 1、それ以外は 0 */
@function --gt(--a <number>, --b <number>) returns <integer> {
  result: clamp(0, sign(calc(var(--a) - var(--b))), 1);
}
```

→ これに入れて `1` かどうかを比較すればよい

---

## まとめ

<svg height="40" class="octicon octicon-mark-github mr-2 v-align-middle" fill="black" aria-label="GitHub" viewBox="0 0 16 16" version="1.1" width="40" role="img"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> https://github.com/Ryoga-exe/veryl-css <img src="/assets/img/veryl-css/qrcode.png" width="100" />

- かなり無理矢理 CSS ターゲットを実装した
- Veryl の IR で、ある程度遊ぶことができる
- CSS は多分 HDL ではないが、可能性はある
- CSS でヘンなことをするなら仕様書を当たると良いことがある
</integer></number></number></integer></number></number></integer></integer></div></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></integer></number></number></div>]]></content><author><name>Ryoga.exe</name></author><summary type="html"><![CDATA[Veryl の IR で遊んでみる - 独自 target を生やしてみたかった話 - &lt;/br&gt;]]></summary></entry><entry><title type="html">Css Cast</title><link href="https://slide.ryoga.dev/posts/css-cast.html" rel="alternate" type="text/html" title="Css Cast" /><published>2025-05-17T00:00:00+00:00</published><updated>2025-05-17T00:00:00+00:00</updated><id>https://slide.ryoga.dev/posts/css-cast</id><content type="html" xml:base="https://slide.ryoga.dev/posts/css-cast.html"><![CDATA[<h2 id="css-黒魔術">CSS 黒魔術</h2>
<h5 id="--css-数値型変換ハック--">- CSS 数値型変換ハック -</h5>
<hr />
<p>&lt;/br&gt;</p>

<h4 id="ryogaexe">Ryoga.exe</h4>

<p><small>UNTIL.LT #0x07</small></p>

<hr />

<!-- .slide: style="text-align: left;" -->

<h2 id="自己紹介">自己紹介</h2>

<div style="display: flex; align-items: center; justify-content: space-between;">
  <div>
<h3>Ryoga.exe</h3>

- coins 3 年
- 最近は言語処理系とFPGAをさわっています
- Twitter: @Ryoga_exe
  </div>

  <img src="https://github.com/Ryoga-exe.png" width="200" height="200" />
</div>

<hr />

<h2 id="以前作ったもの">以前作ったもの</h2>

<iframe data-src="https://repos.ryoga.dev/css-monte-carlo-pi" data-preload="" style="background: white;" width="100%" height="500"></iframe>

<p>–</p>

<p>CSS だけでモンテカルロ法を実装する</p>

<p>→ 本当に CSS はなんでもできる？</p>

<hr />

<h4 id="ビューポート幅-px-の-数値-が欲しい">「ビューポート幅 (px) の 数値 が欲しい！」</h4>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nd">:root</span> <span class="p">{</span>
  <span class="py">--px-width</span><span class="p">:</span> <span class="n">calc</span><span class="p">(</span><span class="m">100vw</span> <span class="p">/</span> <span class="m">1px</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>結果 → 無効</p>

<p>–</p>

<h3 id="css-の限界">CSS の限界</h3>

<p>現行のブラウザでの実装では <br />
<code class="language-plaintext highlighter-rouge">calc()</code> はまだ単位付き同士の除算ができない</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">div</span> <span class="p">{</span>
  <span class="nl">width</span><span class="p">:</span> <span class="n">calc</span><span class="p">(</span><span class="m">100vw</span> <span class="p">/</span> <span class="m">5px</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>–</p>

<h3 id="本当に">本当に？</h3>

<iframe data-src="https://www.w3.org/TR/css-values-4/#calc-type-checking" data-preload="" style="background: white;" width="100%" height="300"></iframe>

<p><small>↑ 余談：w3.org は埋め込みを許してくれない</small></p>

<p>https://www.w3.org/TR/css-values-4/#calc-type-checking</p>

<p>–</p>

<p>まあなんか、仕様的にはOK</p>

<p>–</p>

<p>しかし実装を待ってられない！！</p>

<p><small>実際にあなたがブラウザの実装を待っている間にも<br />ライバルはCSSで黒魔術を続けている</small></p>

<p>–</p>

<p>今日はこれを回避するテク</p>

<hr />

<p>元ネタ</p>

<p>CSS Type Casting to Numeric: tan(atan2()) Scalars - Jane Ori</p>

<p>https://dev.to/janeori/css-type-casting-to-numeric-tanatan2-scalars-582j</p>

<hr />

<auto-animate />

<h4 id="そういえば最近のcssのアップデートは目覚ましい">そういえば最近のCSSのアップデートは目覚ましい</h4>

<p>–</p>

<auto-animate />

<h4 id="そういえば最近のcssのアップデートは目覚ましい-1">そういえば最近のCSSのアップデートは目覚ましい</h4>

<p>ここでおもむろに CSS WG の CSS Values and Units Module Level 4 を見てみる</p>

<p>–</p>

<ul>
  <li>なぜかネイピア数 ($e$) や円周率 $\pi$ などの定数が追加されている</li>
  <li><code class="language-plaintext highlighter-rouge">min</code> や <code class="language-plaintext highlighter-rouge">max</code>、<code class="language-plaintext highlighter-rouge">clamp</code> といった比較関数が追加されている</li>
</ul>

<p>–</p>

<p>その他にも</p>

<ul>
  <li>端数処理: <code class="language-plaintext highlighter-rouge">round</code></li>
  <li>剰余関数: <code class="language-plaintext highlighter-rouge">rem</code>, <code class="language-plaintext highlighter-rouge">mod</code></li>
  <li>冪乗: <code class="language-plaintext highlighter-rouge">pow</code></li>
  <li>平方根: <code class="language-plaintext highlighter-rouge">sqrt</code></li>
  <li>対数: <code class="language-plaintext highlighter-rouge">log</code></li>
  <li>指数: <code class="language-plaintext highlighter-rouge">exp</code></li>
  <li>絶対値: <code class="language-plaintext highlighter-rouge">abs</code></li>
  <li>符号関数: <code class="language-plaintext highlighter-rouge">sign</code></li>
  <li>三角関数・逆三角関数: <code class="language-plaintext highlighter-rouge">sin</code>, <code class="language-plaintext highlighter-rouge">cos</code>, <code class="language-plaintext highlighter-rouge">tan</code>, <code class="language-plaintext highlighter-rouge">asin</code>, …</li>
</ul>

<p>–</p>

<p>余談：これらを組み合わせると……</p>

<ul>
  <li>黄金数: <code class="language-plaintext highlighter-rouge">calc((1 + sqrt(5)) / 2)</code></li>
  <li>ゲルフォントの定数: <code class="language-plaintext highlighter-rouge">calc(pow(e, pi))</code></li>
</ul>

<p>などが CSS で使うことができる</p>

<p>–</p>

<h2 id="いつ使うん-">いつ使うん？ <!-- .element: class="r-fit-text" --></h2>

<hr />

<h3 id="ところでこのような三角恒等式がある">ところでこのような三角恒等式がある</h3>

<p><code class="language-plaintext highlighter-rouge">\[\begin{aligned}
\tan( \mathrm{atan2}(Y, X) ) = \frac{Y}{X}
\end{aligned} \]</code></p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">atan2(y, x)</code> は傾き <code class="language-plaintext highlighter-rouge">y/x</code> の角度 $\theta$ を表す</li>
  <li>その角度に <code class="language-plaintext highlighter-rouge">tan()</code> を適用 → もとの比率 <code class="language-plaintext highlighter-rouge">y/x</code> が戻る</li>
</ul>

<p>–</p>

<p>CSS には <code class="language-plaintext highlighter-rouge">tan()</code> と <code class="language-plaintext highlighter-rouge">atan2</code> がある</p>

<p><code class="language-plaintext highlighter-rouge">tan(atan2())</code> は単なるスカラー値になる</p>

<p>ブラウザは単位付き値でも評価してくれる</p>

<p>–</p>

<p>つまり、</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nd">:root</span> <span class="p">{</span>
  <span class="py">--px-width</span><span class="p">:</span> <span class="no">tan</span><span class="p">(</span><span class="n">atan2</span><span class="p">(</span><span class="m">100vw</span><span class="p">,</span> <span class="m">1px</span><span class="p">))</span>
<span class="p">}</span>
</code></pre></div></div>

<p>とすると、<code class="language-plaintext highlighter-rouge">100vw</code> が何ピクセルであるか得られる</p>

<p>長さをキャストして <code class="language-plaintext highlighter-rouge">&lt;number&gt;</code> 型として得る</p>

<hr />

<h3 id="viewport-を取る例">Viewport を取る例</h3>

<p>https://codepen.io/Ryoga-exe/full/KwwYKym</p>

<p>–</p>

<auto-animate />

<p>その他にも</p>

<p>–</p>

<auto-animate />

<p>その他にも</p>
<ul>
  <li>フォントサイズ (<code class="language-plaintext highlighter-rouge">rem</code> → <code class="language-plaintext highlighter-rouge">px</code>)
    <ul>
      <li><code class="language-plaintext highlighter-rouge">tan(atan2(1em, 1px))</code></li>
      <li>https://codepen.io/propjockey/full/WNLLLWy</li>
    </ul>
  </li>
</ul>

<p>–</p>

<auto-animate />

<p>その他にも</p>
<ul>
  <li>Container幅 (CQ)
    <ul>
      <li><code class="language-plaintext highlighter-rouge">tan(atan2(100cqi, 1px))</code></li>
    </ul>
  </li>
</ul>

<p>–</p>

<auto-animate />

<p>その他にも</p>
<ul>
  <li>時間 (<code class="language-plaintext highlighter-rouge">s</code> → <code class="language-plaintext highlighter-rouge">ms</code>)
    <ul>
      <li>tan(atan2(12s, 1ms))</li>
    </ul>
  </li>
</ul>

<hr />

<!-- .slide: style="text-align: left;" -->
<h2 id="おわりに">おわりに</h2>

<p>みなさんも黒魔術 CSS を書こう！</p>]]></content><author><name>Ryoga.exe</name></author><summary type="html"><![CDATA[CSS 黒魔術 - CSS 数値型変換ハック - &lt;/br&gt;]]></summary></entry><entry><title type="html">Trick Of Css</title><link href="https://slide.ryoga.dev/posts/trick-of-css.html" rel="alternate" type="text/html" title="Trick Of Css" /><published>2023-12-03T00:00:00+00:00</published><updated>2023-12-03T00:00:00+00:00</updated><id>https://slide.ryoga.dev/posts/trick-of-css</id><content type="html" xml:base="https://slide.ryoga.dev/posts/trick-of-css.html"><![CDATA[<h2 id="css-黒魔術">CSS 黒魔術</h2>
<h5 id="--css-だけでモンテカルロ法を実装する--">- CSS だけでモンテカルロ法を実装する -</h5>
<hr />
<p>&lt;/br&gt;</p>

<h4 id="ryogaexe">Ryoga.exe</h4>

<hr />

<!-- .slide: style="text-align: left;" -->
<h2 id="自己紹介">自己紹介</h2>

<div style="display: flex; align-items: center; justify-content: space-between;">
  <div>
<h3>Ryoga.exe</h3>

- 筑波大学情報学群情報科学類 1 年
- 競プロ・CTF・Web をしています
- 低レイヤも好き
- Twitter: @Ryoga_exe
  </div>

  <img src="https://github.com/Ryoga-exe.png" width="200" height="200" />
</div>

<hr />

<h2 id="最近作ったもの">最近作ったもの</h2>

<iframe data-src="https://repos.ryoga.dev/css-monte-carlo-pi" data-preload="" style="background: white;" width="100%" height="500"></iframe>

<p>–</p>

<h3 id="これは何">これは何</h3>

<ul>
  <li>見てわかる通りモンテカルロ法を使った円周率の推定  <!-- .element: class="fragment" --></li>
  <li><span class="fragment"><span class="fragment highlight-red">CSS だけで</span>実装しています</span></li>
</ul>

<p>–</p>

<auto-animate />

<h2 id="本当に-css-だけ">本当に CSS だけ？</h2>

<p>–</p>

<auto-animate />

<h2 id="本当に-css-だけ-1">本当に CSS だけ？</h2>
<h2 id="はい">はい</h2>

<div class="r-stack">
  <img class="fragment" src="/assets/img/lang.png" />
  <img class="fragment" src="/assets/img/kuromajutsu.png" width="60%" />
</div>

<hr />

<h2 id="css-の厳しいところ">CSS の厳しいところ</h2>

<ul>
  <li>乱数を得るための関数がない  <!-- .element: class="fragment" --></li>
  <li>基本的に四則演算しかできない  <!-- .element: class="fragment" --></li>
  <li>それどころか、変数の状態を再評価する機能がない  <!-- .element: class="fragment" --></li>
  <li>そもそも変数の値をまともに表示できない  <!-- .element: class="fragment" --></li>
</ul>

<p>–</p>

<h2 id="もしかして不可能">もしかして：不可能？</h2>

<div class="fragment">
  なんと The CPU Hack と呼ばれる CSS トリックと数学を頑張れば可能！

  <small>The CPU Hack - https://dev.to/janeori/expert-css-the-cpu-hack-4ddj</small>
</div>

<hr />

<!-- .slide: style="text-align: left;" -->
<h2 id="the-cpu-hack-とは">The CPU Hack とは</h2>

<p>詳しい仕組みは <a href="https://dev.to/janeori/expert-css-the-cpu-hack-4ddj">The CPU Hack の元記事</a>を参照</p>

<p>簡単に説明すると、継続的なデータの解析と、状態を再評価する機能を解除する CSS のトリック</p>

<p>アニメーションの仕様を用いてフレーム数のカウントなどができます</p>

<p>いわゆる黒魔術</p>

<p>–</p>

<h3 id="フレーム数をカウントする-css">フレーム数をカウントする CSS</h3>
<h4 id="the-cpu-hack-の本質部分のコード">The CPU Hack の本質部分のコード</h4>

<p>```css [1-7|5-6|2-3|8-16|10|15|18-24|26-37]
body {
  animation: hoist 1ms infinite, capture 1ms infinite;
  animation-play-state: paused, paused;</p>

<p>–frame-input: var(–frame-hoist, 0);
  –frame-count: calc(var(–frame-input) + 1);
}
@keyframes hoist {
  0%, 100% {
    –frame-hoist: var(–frame-captured, 0);
  }
}
@keyframes capture {
  0%, 100% {
    –frame-captured: var(–frame-count);
  }
}
.cpu {
  position: relative; list-style: none;
}
.cpu &gt; * {
  position: absolute;
  inset: 0px;
  width: 0px;
}
.cpu &gt; .phase-0 {
  width: 100%;
}
.cpu &gt; .phase-0:hover + .phase-1 {
  width: 100%;
}
.cpu &gt; .phase-1:hover + .phase-2 {
  width: 100%;
}
.cpu &gt; .phase-2:hover + .phase-3 {
  width: 100%;
}</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
---

## CSS だけで疑似乱数列を生成

CSS には乱数を得るための関数はない

--

csswg-drafts の Issue に提案として上がってはいる

![csswg-drafts](/assets/img/csswg.png)

--

mozilla の standards-positions にも上がっているが

&lt;div class="r-stack"&gt;
  &lt;img src="/assets/img/mozilla.png" /&gt;
  &lt;img class="fragment" src="/assets/img/mozilla2.png"/&gt;
&lt;/div&gt;

&lt;span class="fragment"&gt;mozilla の見解：いらんやろ&lt;/span&gt;

--

## 無いのならば作る

今回は比較的実装が容易かつシンプルな疑似乱数列生成法である &lt;span class="fragment highlight-red"&gt;Xorshift&lt;/span&gt; を採用

--

## Wikipedia の実装例を読む

```cpp
/* The state word must be initialized to non-zero */
uint32_t xorshift32(struct xorshift32_state *state)
{
	/* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */
	uint32_t x = state-&gt;a;
	x ^= x &lt;&lt; 13;
	x ^= x &gt;&gt; 17;
	x ^= x &lt;&lt; 5;
	return state-&gt;a = x;
}
</code></pre></div></div>

<p><span class="fragment">CSS にはビット演算がない、詰み</span></p>

<p>–</p>

<h2 id="数学をする">数学をする</h2>

<p>$A, B$ を 1 bit の変数とすると、以下が成り立つ</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">$A$</th>
      <th style="text-align: center">$B$</th>
      <th style="text-align: center">$A \mathbin{xor} B$</th>
      <th style="text-align: center">$(A - B)$</th>
      <th style="text-align: center">$(A - B)^2$</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
    </tr>
    <tr>
      <td style="text-align: center">0</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">-1</td>
      <td style="text-align: center">1</td>
    </tr>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
    </tr>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
    </tr>
  </tbody>
</table>

<p>–</p>

\[A \mathbin{xor} B = (A - B) \times (A - B)\]

<p>が言えるので 1bit ならば四則演算で表現可能！</p>

<p><span class="fragment">ビットシフトはビットごと個別に変数を持ち、<br />一つづつずらしていくように更新すればよさそう</span></p>

<p>–</p>

<p>つまり今回は 32bit の変数が必要なので…</p>

<p>32 個の変数を持つ <span class="fragment">(狂気の CSS)</span></p>

<p>–</p>

<h2 id="xorshift-の実装の一部">Xorshift の実装の一部</h2>

<p>(乱数の初期値は 2463534242)</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">body</span> <span class="p">{</span>
  <span class="nl">animation</span><span class="p">:</span> <span class="n">hoist</span> <span class="m">1ms</span> <span class="n">infinite</span><span class="p">,</span> <span class="n">capture</span> <span class="m">1ms</span> <span class="n">infinite</span><span class="p">;</span>
  <span class="nl">animation-play-state</span><span class="p">:</span> <span class="n">paused</span><span class="p">,</span> <span class="n">paused</span><span class="p">;</span>

  <span class="py">--p31-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p31-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p30-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p30-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p29-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p29-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p28-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p28-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p27-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p27-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p26-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p26-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p25-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p25-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p24-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p24-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p23-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p23-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p22-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p22-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p21-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p21-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p20-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p20-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p19-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p19-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p18-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p18-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p17-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p17-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p16-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p16-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p15-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p15-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p14-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p14-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p13-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p13-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p12-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p12-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p11-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p11-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p10-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p10-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p09-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p09-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p08-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p08-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p07-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p07-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p06-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p06-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p05-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p05-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p04-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p04-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p03-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p03-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p02-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p02-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
  <span class="py">--p01-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p01-hoist</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
  <span class="py">--p00-input</span><span class="p">:</span> <span class="n">var</span><span class="p">(</span><span class="n">--p00-hoist</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>

  <span class="c">/*
    q = (p_in xor (p_in &lt;&lt; 13))
    r = (q xor (q &gt;&gt; 17))
    p = (r xor (r &lt;&lt; 5))
  */</span>
  <span class="py">--q31</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p31-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p18-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p31-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p18-input</span><span class="p">)));</span>
  <span class="py">--q30</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p30-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p17-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p30-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p17-input</span><span class="p">)));</span>
  <span class="py">--q29</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p29-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p16-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p29-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p16-input</span><span class="p">)));</span>
  <span class="py">--q28</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p28-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p15-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p28-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p15-input</span><span class="p">)));</span>
  <span class="py">--q27</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p27-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p14-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p27-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p14-input</span><span class="p">)));</span>
  <span class="py">--q26</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p26-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p13-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p26-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p13-input</span><span class="p">)));</span>
  <span class="py">--q25</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p25-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p12-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p25-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p12-input</span><span class="p">)));</span>
  <span class="py">--q24</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p24-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p11-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p24-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p11-input</span><span class="p">)));</span>
  <span class="py">--q23</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p23-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p10-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p23-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p10-input</span><span class="p">)));</span>
  <span class="py">--q22</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p22-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p09-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p22-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p09-input</span><span class="p">)));</span>
  <span class="py">--q21</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p21-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p08-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p21-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p08-input</span><span class="p">)));</span>
  <span class="py">--q20</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p20-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p07-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p20-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p07-input</span><span class="p">)));</span>
  <span class="py">--q19</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p19-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p06-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p19-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p06-input</span><span class="p">)));</span>
  <span class="py">--q18</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p18-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p05-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p18-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p05-input</span><span class="p">)));</span>
  <span class="py">--q17</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p17-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p04-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p17-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p04-input</span><span class="p">)));</span>
  <span class="py">--q16</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p16-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p03-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p16-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p03-input</span><span class="p">)));</span>
  <span class="py">--q15</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p15-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p02-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p15-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p02-input</span><span class="p">)));</span>
  <span class="py">--q14</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p14-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p01-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p14-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p01-input</span><span class="p">)));</span>
  <span class="py">--q13</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p13-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p00-input</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p13-input</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--p00-input</span><span class="p">)));</span>
  <span class="py">--q12</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p12-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p12-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q11</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p11-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p11-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q10</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p10-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p10-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q09</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p09-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p09-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q08</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p08-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p08-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q07</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p07-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p07-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q06</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p06-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p06-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q05</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p05-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p05-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q04</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p04-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p04-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q03</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p03-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p03-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q02</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p02-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p02-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q01</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p01-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p01-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--q00</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--p00-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--p00-input</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>

  <span class="py">--r31</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q31</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q31</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r30</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q30</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q30</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r29</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q29</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q29</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r28</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q28</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q28</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r27</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q27</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q27</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r26</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q26</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q26</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r25</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q25</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q25</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r24</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q24</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q24</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r23</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q23</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q23</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r22</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q22</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q22</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r21</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q21</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q21</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r20</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q20</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q20</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r19</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q19</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q19</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r18</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q18</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q18</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r17</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q17</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q17</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r16</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q16</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q16</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r15</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q15</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q15</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--r14</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q14</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q31</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q14</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q31</span><span class="p">)));</span>
  <span class="py">--r13</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q13</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q30</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q13</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q30</span><span class="p">)));</span>
  <span class="py">--r12</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q12</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q29</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q12</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q29</span><span class="p">)));</span>
  <span class="py">--r11</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q11</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q28</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q11</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q28</span><span class="p">)));</span>
  <span class="py">--r10</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q10</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q27</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q10</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q27</span><span class="p">)));</span>
  <span class="py">--r09</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q09</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q26</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q09</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q26</span><span class="p">)));</span>
  <span class="py">--r08</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q08</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q25</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q08</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q25</span><span class="p">)));</span>
  <span class="py">--r07</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q07</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q24</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q07</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q24</span><span class="p">)));</span>
  <span class="py">--r06</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q06</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q23</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q06</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q23</span><span class="p">)));</span>
  <span class="py">--r05</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q05</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q22</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q05</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q22</span><span class="p">)));</span>
  <span class="py">--r04</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q04</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q21</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q04</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q21</span><span class="p">)));</span>
  <span class="py">--r03</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q03</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q20</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q03</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q20</span><span class="p">)));</span>
  <span class="py">--r02</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q02</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q19</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q02</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q19</span><span class="p">)));</span>
  <span class="py">--r01</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q01</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q18</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q01</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q18</span><span class="p">)));</span>
  <span class="py">--r00</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--q00</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q17</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--q00</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--q17</span><span class="p">)));</span>

  <span class="py">--p31</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r31</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r26</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r31</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r26</span><span class="p">)));</span>
  <span class="py">--p30</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r30</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r25</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r30</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r25</span><span class="p">)));</span>
  <span class="py">--p29</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r29</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r24</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r29</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r24</span><span class="p">)));</span>
  <span class="py">--p28</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r28</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r23</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r28</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r23</span><span class="p">)));</span>
  <span class="py">--p27</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r27</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r22</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r27</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r22</span><span class="p">)));</span>
  <span class="py">--p26</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r26</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r21</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r26</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r21</span><span class="p">)));</span>
  <span class="py">--p25</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r25</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r20</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r25</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r20</span><span class="p">)));</span>
  <span class="py">--p24</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r24</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r19</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r24</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r19</span><span class="p">)));</span>
  <span class="py">--p23</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r23</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r18</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r23</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r18</span><span class="p">)));</span>
  <span class="py">--p22</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r22</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r17</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r22</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r17</span><span class="p">)));</span>
  <span class="py">--p21</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r21</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r16</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r21</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r16</span><span class="p">)));</span>
  <span class="py">--p20</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r20</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r15</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r20</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r15</span><span class="p">)));</span>
  <span class="py">--p19</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r19</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r14</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r19</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r14</span><span class="p">)));</span>
  <span class="py">--p18</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r18</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r13</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r18</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r13</span><span class="p">)));</span>
  <span class="py">--p17</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r17</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r12</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r17</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r12</span><span class="p">)));</span>
  <span class="py">--p16</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r16</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r11</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r16</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r11</span><span class="p">)));</span>
  <span class="py">--p15</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r15</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r10</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r15</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r10</span><span class="p">)));</span>
  <span class="py">--p14</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r14</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r09</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r14</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r09</span><span class="p">)));</span>
  <span class="py">--p13</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r13</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r08</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r13</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r08</span><span class="p">)));</span>
  <span class="py">--p12</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r12</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r07</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r12</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r07</span><span class="p">)));</span>
  <span class="py">--p11</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r11</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r06</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r11</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r06</span><span class="p">)));</span>
  <span class="py">--p10</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r10</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r05</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r10</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r05</span><span class="p">)));</span>
  <span class="py">--p09</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r09</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r04</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r09</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r04</span><span class="p">)));</span>
  <span class="py">--p08</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r08</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r03</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r08</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r03</span><span class="p">)));</span>
  <span class="py">--p07</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r07</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r02</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r07</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r02</span><span class="p">)));</span>
  <span class="py">--p06</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r06</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r01</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r06</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r01</span><span class="p">)));</span>
  <span class="py">--p05</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r05</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r00</span><span class="p">))</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r05</span><span class="p">)</span> <span class="n">-</span> <span class="n">var</span><span class="p">(</span><span class="n">--r00</span><span class="p">)));</span>
  <span class="py">--p04</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r04</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r04</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--p03</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r03</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r03</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--p02</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r02</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r02</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--p01</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r01</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r01</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
  <span class="py">--p00</span><span class="p">:</span> <span class="n">calc</span><span class="p">((</span><span class="n">var</span><span class="p">(</span><span class="n">--r00</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">)</span> <span class="err">*</span> <span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">--r00</span><span class="p">)</span> <span class="n">-</span> <span class="m">0</span><span class="p">));</span>
<span class="p">}</span>
</code></pre></div></div>

<p>–</p>

<p>なんとか乱数列ぽいのができた</p>

<p>次に、このビット列から数値を得る</p>

<p>–</p>

<p>上位 16 ビットを x 座標に<br />下位ビットを y 座標に割り当てた</p>

<p>10 進数にしたのち、範囲を $[0, 1]$ に収めるため、<br />最大値の $65535$ で割っている</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">body</span> <span class="p">{</span>
  <span class="py">--x</span><span class="p">:</span> <span class="n">calc</span><span class="p">(</span>
    <span class="p">(</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p31</span><span class="p">)</span> <span class="err">*</span> <span class="m">32768</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p30</span><span class="p">)</span> <span class="err">*</span> <span class="m">16384</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p29</span><span class="p">)</span> <span class="err">*</span> <span class="m">8192</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p28</span><span class="p">)</span> <span class="err">*</span> <span class="m">4096</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p27</span><span class="p">)</span> <span class="err">*</span> <span class="m">2048</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p26</span><span class="p">)</span> <span class="err">*</span> <span class="m">1024</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p25</span><span class="p">)</span> <span class="err">*</span> <span class="m">512</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p24</span><span class="p">)</span> <span class="err">*</span> <span class="m">256</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p23</span><span class="p">)</span> <span class="err">*</span> <span class="m">128</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p22</span><span class="p">)</span> <span class="err">*</span> <span class="m">64</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p21</span><span class="p">)</span> <span class="err">*</span> <span class="m">32</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p20</span><span class="p">)</span> <span class="err">*</span> <span class="m">16</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p19</span><span class="p">)</span> <span class="err">*</span> <span class="m">8</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p18</span><span class="p">)</span> <span class="err">*</span> <span class="m">4</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p17</span><span class="p">)</span> <span class="err">*</span> <span class="m">2</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p16</span><span class="p">)</span> <span class="err">*</span> <span class="m">1</span>
    <span class="p">)</span> <span class="p">/</span> <span class="m">65535</span>
  <span class="p">);</span>
  <span class="py">--y</span><span class="p">:</span> <span class="n">calc</span><span class="p">(</span>
    <span class="p">(</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p15</span><span class="p">)</span> <span class="err">*</span> <span class="m">32768</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p14</span><span class="p">)</span> <span class="err">*</span> <span class="m">16384</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p13</span><span class="p">)</span> <span class="err">*</span> <span class="m">8192</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p12</span><span class="p">)</span> <span class="err">*</span> <span class="m">4096</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p11</span><span class="p">)</span> <span class="err">*</span> <span class="m">2048</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p10</span><span class="p">)</span> <span class="err">*</span> <span class="m">1024</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p09</span><span class="p">)</span> <span class="err">*</span> <span class="m">512</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p08</span><span class="p">)</span> <span class="err">*</span> <span class="m">256</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p07</span><span class="p">)</span> <span class="err">*</span> <span class="m">128</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p06</span><span class="p">)</span> <span class="err">*</span> <span class="m">64</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p05</span><span class="p">)</span> <span class="err">*</span> <span class="m">32</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p04</span><span class="p">)</span> <span class="err">*</span> <span class="m">16</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p03</span><span class="p">)</span> <span class="err">*</span> <span class="m">8</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p02</span><span class="p">)</span> <span class="err">*</span> <span class="m">4</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p01</span><span class="p">)</span> <span class="err">*</span> <span class="m">2</span> <span class="err">+</span>
      <span class="n">var</span><span class="p">(</span><span class="n">--p00</span><span class="p">)</span> <span class="err">*</span> <span class="m">1</span>
    <span class="p">)</span> <span class="p">/</span> <span class="m">65535</span>
  <span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<hr />

<h2 id="点が円の内部にあるかの判定">点が円の内部にあるかの判定</h2>

<p>しかし、もちろん CSS には if 文などない</p>

<p>–</p>

<!-- .slide: style="text-align: left;" -->
<p>ここでもまた数学を頑張る</p>

<p>「点 $(x, y)$ が円内にあるとき変数 $c$ をインクリメントする」は</p>

<p>「変数 $c$ に $f(x, y)$ を足す (ただし、関数 $f(x, y)$ は点 $(x, y)$ が円内にあるときは $1$ を、そうでないときは $0$ を返すような関数)」と書けそう</p>

<p>ではそんな $f(x, y)$ を考えてみる</p>

<p>–</p>

<!-- .slide: style="text-align: left;" -->
<p>円の半径が $r$ でその中心が $(0, 0)$ のとき、点 $(x, y)$ がこの円の中に入っているかどうかは $x^2 + y^2 \leq r^2$ で表せる</p>

<p>つまり $f(x, y) = g(x^2 + y^2)$ (ただし $g(t)$ は $t$ が $r^2$ 以下であるとき $1$ を、そうでないときは $0$ を返すような関数) と表現できる</p>

<p>CSS で表現できるのは四則演算や最も近い整数に丸める処理 (Round)、そして max, min, clamp といった処理です。この中で関数 $g(t)$ を表現してみる</p>

<p>–</p>

<p>試行錯誤すると以下のようなものが見つかった</p>

\[\operatorname{floor}\left(\max\left(\min\left(-t\ +\ 2,\ 1\right),\ 0\right)\right)\]

<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464356/e3d7f088-90df-a427-97c6-bd2b31da836e.png" alt="g(t) のグラフ" /></p>

<p>–</p>

<p>やった！実装ができます</p>

<p>→ うれしい、CSS はパズルです</p>

<hr />

<h2 id="変数を表示する">変数を表示する</h2>

<p>CSS 変数を表示するには <a href="https://developer.mozilla.org/ja/docs/Web/CSS/CSS_counter_styles/Using_CSS_counters">CSS カウンター</a>を使用する</p>

<p>例えば変数 <code class="language-plaintext highlighter-rouge">--hoge</code> を表示したいとき、</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"display-hoge"</span><span class="nt">&gt;&lt;/div&gt;</span>
</code></pre></div></div>

<p>のような div 要素を作り</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.display-hoge</span><span class="nd">::after</span> <span class="p">{</span>
  <span class="nl">counter-reset</span><span class="p">:</span> <span class="n">hoge</span> <span class="n">var</span><span class="p">(</span><span class="n">--hoge</span><span class="p">);</span>
  <span class="nl">content</span><span class="p">:</span> <span class="s1">"--hoge: "</span> <span class="n">counter</span><span class="p">(</span><span class="n">hoge</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>–</p>

<h2 id="mdn-を読む">MDN を読む</h2>

<p>しかし、<a href="https://developer.mozilla.org/ja/docs/Web/CSS/counter-reset">MDN Web Docs で counter-reset</a> について調べてみると、カウンターの初期値には <a href="https://developer.mozilla.org/ja/docs/Web/CSS/integer"><code class="language-plaintext highlighter-rouge">&lt;integer&gt;</code></a> 型、つまり整数型しか指定できない</p>

<p>–</p>

<h2 id="仕様書を読む">仕様書を読む</h2>

<!-- .slide: style="text-align: left;" -->
<p><a href="https://drafts.csswg.org/css-values/">W3C の CSS Values and Units Module Level 4</a> <br />でこれらの型について定義されている。</p>

<p>これの [5.2.1. Computation and Combination of <integer>](https://drafts.csswg.org/css-values/#combine-integers)<br />を読むと…</integer></p>

<p><span class="fragment">実数型であるところの <code class="language-plaintext highlighter-rouge">&lt;number&gt;</code> を <code class="language-plaintext highlighter-rouge">&lt;integer&gt;</code> に変換すると、結果は最も近い整数に丸められることがわかる。</span></p>

<p><span class="fragment">例えば、先程のコードで <code class="language-plaintext highlighter-rouge">--hoge</code> が 2.5 であるとき、3 と表示されてしまう</span></p>

<p>–</p>

<h2 id="困った">困った</h2>

<p>数学を頑張ってゴリ押す</p>

<p>–</p>

<!-- .slide: style="text-align: left;" -->
<p>例えば $x = 1.23$ という $x$ があったとする</p>

<p>整数部分は $\operatorname{floor}(x)$ と表すことができ、<br />また小数部分は $x - \operatorname{floor}(x)$ と表せる</p>

<p>これを $y$ とおくと、$y = 0.23$ なので、$10y = 2.3$</p>

<p>$x$ を $10y$ で置き換えて同様のことをすると<br />$\operatorname{floor}(x) = 2$ となり、少数第一位の桁を取り出すことができる！</p>

<p>–</p>

<!-- .slide: style="text-align: left;" -->
<p>$\operatorname{floor}(x) = \operatorname{round}(x - 0.5)$ なのでこの方法は CSS で表現が可能！</p>

<p>これを繰り返すことによって少数点以下の各桁を得ることができる！</p>

<p><span class="fragment">もちろん変数による CSS には繰り返し処理など無いので</span>
<span class="fragment">ゴミカスごちゃごちゃ CSS を書く</span></p>

<p>–</p>

<h3 id="小数点以下まで表示する例">小数点以下まで表示する例</h3>

<p>例えば先程のコードで <code class="language-plaintext highlighter-rouge">--hoge</code> が 1.234 のとき、<br />小数点以下 3 桁を表示するには以下のようにする</p>

<p>```css [|2|5|8|10|12-15|17-21|22-28]
.display-hoge::after {
  –hoge: 1.234;</p>

<p>/* hoge の整数部分 (=1) */
  –floor-hoge: calc(var(–hoge) - 0.5);</p>

<p>/* hoge の少数部分 * 10 (=2.34) <em>/
  –hoge-decimal00-in: calc((var(–hoge) - var(–floor-hoge)) * 10);
  /</em> (hoge の少数部分 * 10) の整数部分 (=2) <em>/
  –hoge-decimal00: calc(var(–hoge-decimal00-in) - 0.5);
  /</em> 以下同様に繰り返す */
  –hoge-decimal01-in: calc((var(–hoge-decimal00-in) - var(–hoge-decimal00)) * 10);
  –hoge-decimal01: calc(var(–hoge-decimal01-in) - 0.5);
  –hoge-decimal02-in: calc((var(–hoge-decimal01-in) - var(–hoge-decimal01)) * 10);
  –hoge-decimal02: calc(var(–hoge-decimal02-in) - 0.5);</p>

<p>counter-reset:
    floor-hoge var(–floor-hoge)
    hoge-decimal00 var(hoge-decimal00)
    hoge-decimal01 var(hoge-decimal01)
    hoge-decimal02 var(hoge-decimal02);
  content:
    “–hoge: “
    counter(floor-hoge)
    “.”
    counter(floor-decimal00)
    counter(floor-decimal01)
    counter(floor-decimal02);
}
```</p>

<hr />

<!-- .slide: style="text-align: left;" -->
<h2 id="終わりに">終わりに</h2>

<p>みなさんも黒魔術 CSS を書こう！</p>

<p>–</p>

<!-- .slide: style="text-align: left;" -->
<h2 id="end">End</h2>

<p>made with reveal.js and Jekyll</p>]]></content><author><name>Ryoga.exe</name></author><summary type="html"><![CDATA[CSS 黒魔術 - CSS だけでモンテカルロ法を実装する - &lt;/br&gt;]]></summary></entry><entry><title type="html">Example</title><link href="https://slide.ryoga.dev/posts/example.html" rel="alternate" type="text/html" title="Example" /><published>2021-04-08T00:00:00+00:00</published><updated>2021-04-08T00:00:00+00:00</updated><id>https://slide.ryoga.dev/posts/example</id><content type="html" xml:base="https://slide.ryoga.dev/posts/example.html"><![CDATA[<h2 id="example-slide">Example slide</h2>
<h5 id="--example-subtitle--">- example subtitle -</h5>
<hr />
<p>&lt;/br&gt;</p>

<h4 id="ryogaexe">Ryoga.exe</h4>

<hr />

<h2 id="hello-there">HELLO THERE!</h2>

<hr />

<h2 id="vertical-slides">VERTICAL SLIDES</h2>

<p>–</p>

<h3 id="basement-level-1">BASEMENT LEVEL 1</h3>

<p>–</p>

<h3 id="basement-level-2">BASEMENT LEVEL 2</h3>

<hr />

<h2 id="fragments">FRAGMENTS</h2>

<ul>
  <li>List1</li>
  <li>List2</li>
  <li>List3</li>
</ul>

<p>–</p>

<ul>
  <li>Fade in                   <!-- .element: class="fragment" --></li>
  <li>Fade out                  <!-- .element: class="fragment fade-out" --></li>
  <li>Highlight red             <!-- .element: class="fragment highlight-red" --></li>
  <li>Fade in, then out         <!-- .element: class="fragment fade-in-then-out" --></li>
  <li>Slide up while fading in  <!-- .element: class="fragment fade-up" --></li>
</ul>

<hr />

<h3 id="code-highlight">CODE HIGHLIGHT</h3>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
  <span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
  <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Hello world!"</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<hr />

<h3 id="code">CODE</h3>

<p>```cpp [1|4-21|6|9|12|15]
#include <iostream>
using namespace std;</iostream></p>

<p>int main() {
  for (int i = 0; i &lt;= 100; i++) {
    if (i % 3 == 0) {
      cout « “Fizz “;
    }
    else if (i % 5 == 0) {
      cout « “Buzz “;
    }
    else if (i % 15 == 0) {
      cout « “FizzBuzz “;
    }
    else {
      cout « i « ” “;
    }
  }
  cout « endl;
  return 0;
}
```</p>

<hr />

<h3 id="auto-animate">AUTO-ANIMATE</h3>

<hr />

<auto-animate />

<pre data-id="code-animation"><code data-trim="" data-line-numbers="">
  let planets = [
    { name: 'mars', diameter: 6779 },
  ]
</code></pre>

<p>–</p>

<auto-animate />

<pre data-id="code-animation"><code data-trim="" data-line-numbers="">
  let planets = [
    { name: 'mars', diameter: 6779 },
    { name: 'earth', diameter: 12742 },
    { name: 'jupiter', diameter: 139820 }
  ]
</code></pre>

<p>–</p>

<auto-animate />

<pre data-id="code-animation"><code data-trim="" data-line-numbers="">
  let circumferenceReducer = ( c, planet ) =&gt; {
    return c + planet.diameter * Math.PI;
  }

  let planets = [
    { name: 'mars', diameter: 6779 },
    { name: 'earth', diameter: 12742 },
    { name: 'jupiter', diameter: 139820 }
  ]

  let c = planets.reduce( circumferenceReducer, 0 )
</code></pre>

<hr />

<auto-animate />

<div data-id="box" style="height: 50px; background: salmon;"></div>

<p>–</p>

<auto-animate />

<div data-id="box" style="height: 200px; background: blue;"></div>

<hr />

<auto-animate />

<h1 id="implicit">IMPLICIT</h1>

<p>–</p>

<auto-animate />

<h1 id="implicit-1">IMPLICIT</h1>
<h1 id="animation">ANIMATION</h1>

<hr />

<auto-animate />

<ul>
  <li>C++</li>
  <li>Java</li>
  <li>Python</li>
</ul>

<p>–</p>

<auto-animate />

<ul>
  <li>C++</li>
  <li>JavaScript</li>
  <li>Java</li>
  <li>Go</li>
  <li>Python</li>
</ul>

<hr />

<h2 id="fit-text-">FIT TEXT <!-- .element: class="r-fit-text" --></h2>
<h2 id="can-be-used-for-multiple-headlines-">CAN BE USED FOR MULTIPLE HEADLINES <!-- .element: class="r-fit-text" --></h2>

<hr />

<h3 id="stack">STACK</h3>
<div class="r-stack">
  <img class="fragment" src="https://pbs.twimg.com/profile_banners/1079733554118983680/1632674779/1500x500" width="600" height="200" />
  <img class="fragment" src="https://pbs.twimg.com/media/FLVULnFXEAIhVMU?format=png&amp;name=900x900" width="406" height="321" />
</div>

<hr />

<background>#aaa</background>
<h2 id="background">Background</h2>

<p>–</p>

<background-image>https://pbs.twimg.com/media/FMfke2NVQAEUhAS?format=jpg&amp;name=4096x4096</background-image>

<div style="background-color: rgba(0, 0, 0, 0.9); color: #fff; padding: 20px;">
  <h2>background-image</h2>
</div>

<hr />

<transition>zoom-in fade-out</transition>
<h2 id="transition">Transition</h2>

<hr />

<h2 id="note">Note</h2>

<p>Note: aaaaaaaaaa</p>

<hr />

<h2 id="table">TABLE</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: left">header1</th>
      <th style="text-align: right">header2</th>
      <th style="text-align: center">header3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">align left</td>
      <td style="text-align: right">align right</td>
      <td style="text-align: center">align center</td>
    </tr>
    <tr>
      <td style="text-align: left">a</td>
      <td style="text-align: right">b</td>
      <td style="text-align: center">c</td>
    </tr>
  </tbody>
</table>

<p>–</p>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CPU</td>
      <td>Intel™ core-i7 9700K</td>
    </tr>
    <tr>
      <td>RAM</td>
      <td>DDR4 32GB</td>
    </tr>
    <tr>
      <td>GPU</td>
      <td>GeForce RTX2060</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="image">Image</h2>

<p><img src="/assets/img/test.png" alt="Image" /></p>

<hr />

<h2 id="the-lorenz-equations">The Lorenz Equations</h2>
<p><code class="language-plaintext highlighter-rouge">\[\begin{aligned}
\dot{x} &amp;amp; = \sigma(y-x) \\
\dot{y} &amp;amp; = \rho x - y - xz \\
\dot{z} &amp;amp; = -\beta z + xy
\end{aligned} \]</code></p>

<hr />

<!-- .slide: style="text-align: right;" -->
<h2 id="right">RIGHT</h2>

<p>–</p>

<!-- .slide: style="text-align: left;" -->
<h2 id="left">LEFT</h2>

<hr />

<!-- .slide: style="text-align: left;" -->
<h2 id="end">End</h2>

<p>made with reveal.js and Jekyll</p>]]></content><author><name>Ryoga.exe</name></author><summary type="html"><![CDATA[Example slide - example subtitle - &lt;/br&gt;]]></summary></entry></feed>