難解設定記述言語Watson

この記事は、 [ミクシィグループ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/mixi) の **19日目** の記事です。

難解プログラミング言語があるのなら、あえてチューリング完全でなくした難解設定記述言語があってもいいんじゃないかということで作ってみました。

リポジトリはこちら: [genkami/watson](https://github.com/genkami/watson)

## 基本的な使い方

Watsonは内部にチューリング完全でないスタックマシンを持っており、Watsonファイルのすべての文字はスタックマシンへの命令へとみなされます。

完全な命令の一覧は [仕様書](https://github.com/genkami/watson/blob/main/doc/spec.md) を参照してください。

### 数値
数値に関する基本的な命令は、以下のようなものがあります:

* スタックに数値 `0` を積む命令 `B`
* スタックの先頭にある値をインクリメントする命令 `u`
* スタックの先頭にある値を左に1ビットシフトする命令 `b`
* スタックの先頭2つの値を足す命令 `a` 

これらを組み合わせて、任意の数値を表すことができます:

```
$ echo 'BBuaBubaBubbbaBubbbbaBubbbbbaBubbbbbba' | watson decode -t json
123
```

### 文字列
文字列(バイト列)に関する命令は以下の2つがあります:

* スタックに空文字列を積む命令 `?`
* スタックの先頭にある数値の下位1バイトを、スタックの先頭から2番目にある文字列の末尾に追加する命令 `!`

ただし、スタックに空文字列を積むと命令テーブルが変わります。先程説明した命令 `B`, `u`, `b`, `a`, `?`, `!` は、それぞれ `S`, `h`, `a`, `k`, `$`, `-` に変化します。もう一度空文字列をスタックに積むともとに戻ります。

```
echo '
?SShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-
' | watson decode -t json
"hoge"
```

### 真偽値
`true` または `false` をとる値です。真偽値に関する命令は以下の2つがあります:

* `false` をスタックに積む命令 `z`
* スタックの先頭にある真偽値の値を反転させる命令 `o`

ただし、これらは一旦空文字列がスタックに積まれるとそれぞれ `^`, `!` に変化します。

```
$ echo 'zo' | watson decode -t json
true
```

### オブジェクト
いわゆる連想配列です。オブジェクトに関する命令は以下の2つがあります:

* 空オブジェクトをスタックに積む命令 `~`
* スタックの先頭から3番目にあるオブジェクトに、スタックの先頭から2番目にある値をキー、スタックの先頭にある値を値として追加する命令 `M`

ただし、これらは一旦空文字列がスタックに積まれるとそれぞれ `+`, `g` に変化します。

```
$ echo '
~?ShaaaaaaShaaaaakShaaak-
ShaaaaaaShaaaaakShaakShk-
ShaaaaaaShaaaaakShaaakShaak-
ShaaaaaaShaaaaakShaaakShaak-
ShaaaaaaShaaaaakShaaakShaakShakShk-$
BubbbbbbBubbbbbaBubbbbaBubbaBubaBua!
BubbbbbbBubbbbbaBubbbaBubbaBubaBua!
BubbbbbbBubbbbbaBubbbbaBuba!
BubbbbbbBubbbbbaBubbbaBubba!
BubbbbbbBubbbbbaBubba!M?
ShaaaaaaShaaaaakShaakShak-
ShaaaaaaShaaaaakShaaakShk-
ShaaaaaaShaaaaakShaaaakShak-
ShaaaaaaShaaaaakShaaaakShakShk-
ShaaaaaaShaaaaakShaaaakShaak-
^!g
' | watson decode -t json
{"first":true,"hello":"world"}
```

## 発展的な使い方
### KubernetesでNginxをデプロイする

`watson` コマンドはWatsonをYAMLに変換できるので、これまでに説明した命令を組み合わせることで簡単にKubernetesマニフェストを書くことができます。

```
$ echo '
@~?
SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-$
BBubbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-Samee+$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MMM?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-Samee+$
BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaAAME#?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MMM?
SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!~?
SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-ggg$
BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!~?
SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-vSamee+$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!~?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!?
SShkSharrkShaarrkShaaarrkShaaaaarrk-ggg$
BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!~?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!?
SShkSharrkShaarrkShaaarrkShaaaaarrk-ggg$
BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!?
SShkShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbaBubbbbbaBubbbbbba!?
SShkShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShkShaarrkShaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-gg$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkSharrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbbaBubbbbba!BBubbbbaBubbbbba!BBubbbbaBubbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!M?
SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbbaBubbbbba!BBubbbbaBubbbbba!BBubbbbaBubbbbba!BBuaBubbaBubbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!MMM?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbaBubbbbaBubbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbaBubbbbbba!BBubaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!M?
SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-vSamee+$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbbaAAME#?
SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBubbaBubbbbaBubbbbbba!BBuaBubaBubbbbbba!BBubbbbaBubbbbbba!MsMsMMMM?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbaBubbbbba!Ms~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbaBubbbbba!M?
SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubaBubbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!M?
SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-Samee+$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MM?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MM?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-Samee+$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!@~?
SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBubbaBubbbbaBubbbbbba!BBuaBubaBubbbbbba!BBubbbbaBubbbbbba!M?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!M?
SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrkg$
BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbbaAAME#sM?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-gg$
BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SShkSharrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrk-gg?
' | watson decode -t yaml | kubectl apply -f
deployment.apps/nginx created
service/nginx created
```

### 関数
Watsonには関数という概念はありませんが、Watsonファイルはスタックマシンへの命令列であるため、擬似的に関数のようなものを再現することができます。
例えば、次のような引数をスタックに積むファイル `args.watson` と関数呼び出しに相当する `function.watson` を用意して、

```
$ cat examples/function/args.watson
?
SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-%
```

```
$ cat examples/function/function.watson
+$
BBuaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-g
:$BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!%M%
```

`watson` コマンドに順番に処理させることで、次のようなことができます:

```
$ watson decode -t yaml examples/function/args.watson examples/function/function.watson
anotherValue: this value is loaded from function.watson
value: this value is loaded from args.watson
```

この機能をうまく活用することで、今までHelmやKustomizeで管理していたKubernetesマニフェスト類をより複雑に管理することができるようになるかもしれません！

## Goライブラリ
Watsonにはコマンドラインツールだけでなく、Go用のライブラリも用意されています。
使い方は `encoding/json` などとほぼ同様です。

```go
package main

import (
	"fmt"

	"github.com/genkami/watson"
)

type Person struct {
	FullName string `watson:"fullName"`
	Nickname string `watson:"nickname,omitempty"`
}

func main() {
	user := Person{
		FullName: "Yamada Taro",
	}
	buf, err := watson.Marshal(&user)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%s\n", buf)
}
```

```
$ go run main.go
~?SShakShaakShaaaaakShaaaaaak-SShkShaakShaaaakShaaaaakShaaaaaak-SShaakShaaakShaaaaakShaaaaaak-SShaakShaaakShaaaaakShaaaaaak-SShakShaakShaaakShaaaaaak-SShkShaaaaakShaaaaaak-SShkShaakShaaakShaaaaakShaaaaaak-SShkShaakShaaaaakShaaaaaak-$BBuaBubbbaBubbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbbbba!BBubbaBubbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!M
```

```
$ go run main.go | watson decode -t yaml
fullName: Yamada Taro
```

## 他のフォーマットとの相互変換
`watson` コマンドはWatsonとJSON, YAML, MessagePack, CBORとの相互変換を行うことができます。

```
$ echo 'a: 1' | watson encode -t yaml
~?SShkShaaaaarrkShaaaaaarrk-SShkg
```

```
$ echo '~?SShkShaaaaarrkShaaaaaarrk-SShkg' | watson decode -t yaml
a: 1
```

これを利用して、例えば　`watson` コマンドを使ってJSONをMessagePackに変換することもできます:

```
$ echo '{"hoge": "fuga"}' | watson encode -t json | watson decode -t msgpack |
 hexdump
0000000 81 a4 68 6f 67 65 a4 66 75 67 61
000000b
```