Skip to content

Commit 11b41b2

Browse files
committed
doc: upgrade svgbobdoc to 0.3.0-alpha.2
The newly introduced link label feature is used to place ASCII diagrams in external files.
1 parent 2c0186f commit 11b41b2

File tree

11 files changed

+170
-458
lines changed

11 files changed

+170
-458
lines changed

Cargo.lock

Lines changed: 100 additions & 379 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/r3/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
66
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
9+
10+
This release only includes changes to the documentation.
11+
912
## [0.1.3] - 2021-10-29
1013

1114
This release only includes changes to the documentation.

src/r3/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ _full = []
2828
num-integer = { version = "0.1.42", default-features = false }
2929
num-traits = { version = "0.2.11", default-features = false }
3030
pin-utils = { version = "0.1.0" }
31-
svgbobdoc = { version = "0.3.0-alpha.1" }
31+
svgbobdoc = { version = "0.3.0-alpha.2" }
3232
tokenlock = { version = "0.3.4", default-features = false }
3333
arrayvec = { version = "0.7.1", default-features = false }
3434
bitflags = { version = "1.2.1" }

src/r3/doc/cfg_traits.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
svgbobdoc::transform_mdstr! {
2+
/// ```svgbob,[cfg_traits]
3+
/// "::r3" ╵ "::your_app"
4+
/// ╵
5+
/// ╵ build! ╵ use_port!
6+
/// ╵ ╵
7+
/// .------------------. ╵ .-----------------. ╵
8+
/// | trait KernelCfg1 | ╵ | impl KernelCfg1 | ╵
9+
/// '------------------' ╵ '-----------------' ╵
10+
/// ^ ╵ ^ | ╵
11+
/// | ╵ | v ╵
12+
/// | ╵ .------' Config data ------------.
13+
/// | ╵ | ^ ╵ |
14+
/// | ╵ | | ╵ v
15+
/// .------------. ╵ | | ╵ .-----------.
16+
/// | trait Port | ╵ +--------------+----------> | impl Port |
17+
/// '------------' ╵ | | ╵ '-----------'
18+
/// ^ ╵ | | ╵ |
19+
/// | ╵ | | ╵ |
20+
/// .------------------. ╵ | .-----------------. ╵ |
21+
/// | trait KernelCfg2 | ╵ | | impl KernelCfg2 | ╵ |
22+
/// '------------------' ╵ | '-----------------' ╵ |
23+
/// ^ ╵ | ^ ^ ╵ |
24+
/// | └ ┼ ─ ─ ─ ─|─ ─ ─ ─|─ ─ ─ ─┘ |
25+
/// | | .-----' | ╵ |
26+
/// | | | | ╵ |
27+
/// .--------------. .-------------. | ╵ |
28+
/// | trait Kernel | | impl Kernel | <---+-----+----------------'
29+
/// '--------------' '-------------' | | ╵
30+
/// ^ ^ | '-------------.
31+
/// | | | ╵ |
32+
/// | | v ╵ .--------------.
33+
/// .--------------------. .-------------------. .-- | Entry points |
34+
/// | trait PortToKernel | | impl PortToKernel | <--' ╵ '--------------'
35+
/// '--------------------' '-------------------' ╵
36+
/// ```
37+
}

src/r3/src/lib.md

Lines changed: 1 addition & 46 deletions
Large diffs are not rendered by default.

src/r3/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#![deny(unsupported_naked_functions)]
2525
#![doc = include_str!("./lib.md")]
2626
#![doc = include_str!("./common.md")]
27+
#![doc = include!("../doc/cfg_traits.rs")] // `![cfg_traits]`
2728
#![cfg_attr(
2829
feature = "_full",
2930
doc = r#"<style type="text/css">.disabled-feature-warning { display: none; }</style>"#

src/r3_port_riscv/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
66
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
9+
10+
This release only includes changes to the documentation.
11+
912
## [0.1.3] - 2021-10-29
1013

1114
This release only includes changes to the documentation.

src/r3_port_riscv/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@ emulate-lr-sc = []
1414
maintain-pie = []
1515
preload-registers = []
1616

17+
# Enable the diagram rendering by svgbob
18+
doc = ["svgbobdoc/enable"]
19+
1720
[dependencies]
1821
r3_portkit = { version = "0.1.1", path = "../r3_portkit" }
1922
r3 = { version = "0.1.1", path = "../r3" }
2023

2124
tock-registers = { version = "0.7.0" }
25+
svgbobdoc = { version = "0.3.0-alpha.2" }
2226
riscv-rt = { version = ">= 0.6.0, < 0.9.0" }
2327
riscv = { version = ">= 0.5.0, < 0.8.0" }
2428

src/r3_port_riscv/doc/interrupts.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
svgbobdoc::transform_mdstr! {
2+
/// ```svgbob,[interrupts]
3+
/// .--------------------------------------------------------------.
4+
/// | |
5+
/// | "INTERRUPT_HANDLERS" |
6+
/// | .---+----------------. |
7+
/// .--)--> | 0 | Software | |
8+
/// .-----------. | | +---+----------------+ |
9+
/// | Top-Level | --+--)--> | 1 | Timer | Interrupt Controller Driver |
10+
/// '-----------' | | +---+----------------+ .----------------------. |
11+
/// '--)--> | 2 | External | -----> | Interrupt Dispatcher | ---'
12+
/// | +---+----------------+ '----------------------'
13+
/// '--> | 3 | IC Interrupt 0 | ---.
14+
/// +---+----------------+ | .--------------------.
15+
/// | 4 | IC Interrupt 1 | '---> | Interrupt Handler |
16+
/// '---+----------------' | for IC Interrupt 0 |
17+
/// '--------------------'
18+
/// ```
19+
}

src/r3_port_riscv/src/lib.md

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -198,35 +198,3 @@ The trap handler stores a first-level state directly below the current stack poi
198198
## Processor Modes
199199

200200
All code executes in Machine mode. The value of `mstatus.MPP` is always `M` (`0b11`).
201-
202-
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
203-
204-
<!--
205-
FIXME: Work-around for `svgbobdoc` not supporting `#[doc = include_str!(...)]`
206-
or `rustdoc` not integrating `svgbob` yet ;)
207-
Related: <https://github.com/ivanceras/svgbob/issues/26>
208-
209-
```svgbob
210-
211-
,--------------------------------------------------------------,
212-
| |
213-
| "INTERRUPT_HANDLERS" |
214-
| ,---+----------------, |
215-
,--)-\> | 0 | Software | |
216-
,-----------, | | +---+----------------+ |
217-
| Top-Level | --+--)-\> | 1 | Timer | Interrupt Controller Driver |
218-
'-----------' | | +---+----------------+ ,----------------------, |
219-
'--)-\> | 2 | External | ----\> | Interrupt Dispatcher | ---'
220-
| +---+----------------+ '----------------------'
221-
'-\> | 3 | IC Interrupt 0 | ---,
222-
+---+----------------+ | ,--------------------,
223-
| 4 | IC Interrupt 1 | '--\> | Interrupt Handler |
224-
'---+----------------' | for IC Interrupt 0 |
225-
'--------------------'
226-
227-
```
228-
229-
The following data URI was generated by processing the above text through `svgbobdoc`. Make sure to replace `\>` with `->`.
230-
-->
231-
232-
[interrupts]: data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iYm9iIiBmb250LWZhbWlseT0iJ1NvdXJjZSBDb2RlIFBybycsJ0FuZGFsZSBNb25vJywnU2Vnb2UgVUkgTW9ubycsJ0RlamF2dSBTYW5zIE1vbm8nLG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCIgaGVpZ2h0PSIyNTYiIHdpZHRoPSI2ODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxkZWZzPgo8bWFya2VyIGlkPSJ0cmlhbmdsZSIgbWFya2VySGVpZ2h0PSI4IiBtYXJrZXJXaWR0aD0iOCIgb3JpZW50PSJhdXRvIiByZWZYPSI0IiByZWZZPSIyIiB2aWV3Qm94PSIwIDAgOCA0Ij4KPHBvbHlnb24gY2xhc3M9ImZnX2ZpbGwiIHBvaW50cz0iMCwwIDAsNCA4LDIgMCwwIi8+CjwvbWFya2VyPgo8bWFya2VyIGlkPSJjbGVhcl90cmlhbmdsZSIgbWFya2VySGVpZ2h0PSIxMCIgbWFya2VyV2lkdGg9IjEwIiBvcmllbnQ9ImF1dG8iIHJlZlg9IjEiIHJlZlk9IjciIHZpZXdCb3g9IjAgMCAyMCAxNCI+Cjxwb2x5Z29uIGNsYXNzPSJiZ19maWxsIiBwb2ludHM9IjIsMiAyLDEyIDE4LDcgMiwyIi8+CjwvbWFya2VyPgo8bWFya2VyIGlkPSJjaXJjbGUiIG1hcmtlckhlaWdodD0iNSIgbWFya2VyV2lkdGg9IjUiIG9yaWVudD0iYXV0byIgcmVmWD0iMTAiIHJlZlk9IjEwIiB2aWV3Qm94PSIwIDAgMjAgMjAiPgo8Y2lyY2xlIGNsYXNzPSJmZ19maWxsIiBjeD0iMTAiIGN5PSIxMCIgcj0iOCIvPgo8L21hcmtlcj4KPG1hcmtlciBpZD0ic3F1YXJlIiBtYXJrZXJIZWlnaHQ9IjUiIG1hcmtlcldpZHRoPSI1IiBvcmllbnQ9ImF1dG8iIHJlZlg9IjEwIiByZWZZPSIxMCIgdmlld0JveD0iMCAwIDIwIDIwIj4KPHJlY3QgY2xhc3M9ImZnX2ZpbGwiIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgeD0iMCIgeT0iMCIvPgo8L21hcmtlcj4KPG1hcmtlciBpZD0ib3Blbl9jaXJjbGUiIG1hcmtlckhlaWdodD0iMTAiIG1hcmtlcldpZHRoPSIxMCIgb3JpZW50PSJhdXRvIiByZWZYPSIxMCIgcmVmWT0iMTAiIHZpZXdCb3g9IjAgMCAyMCAyMCI+CjxjaXJjbGUgY2xhc3M9ImJnX2ZpbGwiIGN4PSIxMCIgY3k9IjEwIiByPSI0Ii8+CjwvbWFya2VyPgo8bWFya2VyIGlkPSJiaWdfb3Blbl9jaXJjbGUiIG1hcmtlckhlaWdodD0iMjAiIG1hcmtlcldpZHRoPSIyMCIgb3JpZW50PSJhdXRvIiByZWZYPSIyMCIgcmVmWT0iMjAiIHZpZXdCb3g9IjAgMCA0MCA0MCI+CjxjaXJjbGUgY2xhc3M9ImJnX2ZpbGwiIGN4PSIyMCIgY3k9IjIwIiByPSI2Ii8+CjwvbWFya2VyPgo8L2RlZnM+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgpyZWN0LmJhY2tkcm9wIHsKICAgIGZpbGw6IHdoaXRlOwp9CnRleHR7CiAgICBmaWxsOiBibGFjazsKfQoKY2lyY2xlIHsKICAgIGZpbGw6IG5vbmU7CiAgICBzdHJva2U6IGJsYWNrOwogICAgc3Ryb2tlLXdpZHRoOiAxOwp9CgpsaW5lIHsKICAgIHN0cm9rZTogYmxhY2s7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgICBzdHJva2Utb3BhY2l0eTogMTsKICAgIGZpbGwtb3BhY2l0eTogMTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgIHN0cm9rZS1saW5lam9pbjogbWl0ZXI7Cn0KCnBhdGggewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogYmxhY2s7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgICBzdHJva2Utb3BhY2l0eTogMTsKICAgIGZpbGwtb3BhY2l0eTogMTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgIHN0cm9rZS1saW5lam9pbjogbWl0ZXI7Cn0KCmxpbmUuZGFzaGVkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDU7Cn0KCi5mZ19maWxsIHsKICAgIGZpbGw6IGJsYWNrOwp9CgoKLmJnX2ZpbGwgewogICAgZmlsbDogd2hpdGU7CiAgICBzdHJva2U6IGJsYWNrOwogICAgc3Ryb2tlLXdpZHRoOiAxOwp9Cgp0c3Bhbi5oZWFkewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogbm9uZTsKfQogICAgCjwvc3R5bGU+CjxyZWN0IGNsYXNzPSJiYWNrZHJvcCIgaGVpZ2h0PSIyNTYiIHdpZHRoPSI2ODAiIHg9IjAiIHk9IjAiLz4KPGc+CjxsaW5lIHgxPSIyMCIgeDI9IjIwIiB5MT0iMTA4IiB5Mj0iMTMyIi8+CjxwYXRoIGQ9Ik0gMjAgMTMyIEEgNCA0IDAgMCAwIDI0IDEzNiIvPgo8cGF0aCBkPSJNIDI0IDEwNCBBIDQgNCAwIDAgMCAyMCAxMDgiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjI0IiB4Mj0iMTEyIiB5MT0iMTA0IiB5Mj0iMTA0Ii8+CjxwYXRoIGQ9Ik0gMTE2IDEwOCBBIDQgNCAwIDAgMCAxMTIgMTA0Ii8+CjwvZz4KPGc+CjxsaW5lIHgxPSIyNCIgeDI9IjExMiIgeTE9IjEzNiIgeTI9IjEzNiIvPgo8cGF0aCBkPSJNIDExMiAxMzYgQSA0IDQgMCAwIDAgMTE2IDEzMiIvPgo8L2c+CjxnPgo8bGluZSB4MT0iMTE2IiB4Mj0iMTE2IiB5MT0iMTA4IiB5Mj0iMTMyIi8+CjwvZz4KPGc+CjxsaW5lIHgxPSIxMjgiIHgyPSIxNDgiIHkxPSIxMjAiIHkyPSIxMjAiLz4KPGxpbmUgeDE9IjE0OCIgeDI9IjE0OCIgeTE9IjkyIiB5Mj0iMTIwIi8+CjxsaW5lIHgxPSIxNDgiIHgyPSIxNDgiIHkxPSIxMjAiIHkyPSIxNDgiLz4KPGxpbmUgeDE9IjE0OCIgeDI9IjE2OCIgeTE9IjEyMCIgeTI9IjEyMCIvPgo8bGluZSB4MT0iMTY4IiB4Mj0iMTc2IiB5MT0iMTIwIiB5Mj0iMTIwIi8+CjxsaW5lIG1hcmtlci1lbmQ9InVybCgjdHJpYW5nbGUpIiB4MT0iMTc2IiB4Mj0iMTk2IiB5MT0iMTIwIiB5Mj0iMTIwIi8+CjxwYXRoIGQ9Ik0gMTQ4IDE0OCBBIDQgNCAwIDAgMCAxNTIgMTUyIi8+CjxwYXRoIGQ9Ik0gMTUyIDg4IEEgNCA0IDAgMCAwIDE0OCA5MiIvPgo8L2c+CjxnPgo8bGluZSB4MT0iMTUyIiB4Mj0iMTY4IiB5MT0iODgiIHkyPSI4OCIvPgo8bGluZSB4MT0iMTY4IiB4Mj0iMTc2IiB5MT0iODgiIHkyPSI4OCIvPgo8bGluZSBtYXJrZXItZW5kPSJ1cmwoI3RyaWFuZ2xlKSIgeDE9IjE3NiIgeDI9IjE5NiIgeTE9Ijg4IiB5Mj0iODgiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjE1MiIgeDI9IjE2OCIgeTE9IjE1MiIgeTI9IjE1MiIvPgo8bGluZSB4MT0iMTY4IiB4Mj0iMTc2IiB5MT0iMTUyIiB5Mj0iMTUyIi8+CjxsaW5lIG1hcmtlci1lbmQ9InVybCgjdHJpYW5nbGUpIiB4MT0iMTc2IiB4Mj0iMTk2IiB5MT0iMTUyIiB5Mj0iMTUyIi8+CjwvZz4KPGc+CjxsaW5lIHgxPSIxNzIiIHgyPSIxNzIiIHkxPSIyOCIgeTI9IjgwIi8+CjxwYXRoIGQ9Ik0gMTcyIDk2IEEgMTAgMTAgMCAwIDAgMTcyIDgwIi8+CjxwYXRoIGQ9Ik0gMTc2IDI0IEEgNCA0IDAgMCAwIDE3MiAyOCIvPgo8L2c+CjxnPgo8bGluZSB4MT0iMTcyIiB4Mj0iMTcyIiB5MT0iOTYiIHkyPSIxMTIiLz4KPHBhdGggZD0iTSAxNzIgMTI4IEEgMTAgMTAgMCAwIDAgMTcyIDExMiIvPgo8L2c+CjxnPgo8bGluZSB4MT0iMTcyIiB4Mj0iMTcyIiB5MT0iMTI4IiB5Mj0iMTQ0Ii8+CjxwYXRoIGQ9Ik0gMTcyIDE2MCBBIDEwIDEwIDAgMCAwIDE3MiAxNDQiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjE3MiIgeDI9IjE3MiIgeTE9IjE2MCIgeTI9IjE4MCIvPgo8cGF0aCBkPSJNIDE3MiAxODAgQSA0IDQgMCAwIDAgMTc2IDE4NCIvPgo8L2c+CjxnPgo8bGluZSB4MT0iMTc2IiB4Mj0iNjcyIiB5MT0iMjQiIHkyPSIyNCIvPgo8cGF0aCBkPSJNIDY3NiAyOCBBIDQgNCAwIDAgMCA2NzIgMjQiLz4KPC9nPgo8Zz4KPGxpbmUgbWFya2VyLWVuZD0idXJsKCN0cmlhbmdsZSkiIHgxPSIxNzYiIHgyPSIxOTYiIHkxPSIxODQiIHkyPSIxODQiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjIxMiIgeDI9IjIxMiIgeTE9Ijc2IiB5Mj0iMTA0Ii8+CjxsaW5lIHgxPSIyMTIiIHgyPSIyMTIiIHkxPSIxMDQiIHkyPSIxMzYiLz4KPGxpbmUgeDE9IjIxMiIgeDI9IjI0NCIgeTE9IjEwNCIgeTI9IjEwNCIvPgo8bGluZSB4MT0iMjEyIiB4Mj0iMjEyIiB5MT0iMTM2IiB5Mj0iMTY4Ii8+CjxsaW5lIHgxPSIyMTIiIHgyPSIyNDQiIHkxPSIxMzYiIHkyPSIxMzYiLz4KPGxpbmUgeDE9IjIxMiIgeDI9IjIxMiIgeTE9IjE2OCIgeTI9IjIwMCIvPgo8bGluZSB4MT0iMjEyIiB4Mj0iMjQ0IiB5MT0iMTY4IiB5Mj0iMTY4Ii8+CjxsaW5lIHgxPSIyMTIiIHgyPSIyMTIiIHkxPSIyMDAiIHkyPSIyMjgiLz4KPGxpbmUgeDE9IjIxMiIgeDI9IjI0NCIgeTE9IjIwMCIgeTI9IjIwMCIvPgo8bGluZSB4MT0iMjQ0IiB4Mj0iMjQ0IiB5MT0iNzIiIHkyPSIxMDQiLz4KPGxpbmUgeDE9IjI0NCIgeDI9IjM3NiIgeTE9IjcyIiB5Mj0iNzIiLz4KPGxpbmUgeDE9IjI0NCIgeDI9IjI0NCIgeTE9IjEwNCIgeTI9IjEzNiIvPgo8bGluZSB4MT0iMjQ0IiB4Mj0iMzgwIiB5MT0iMTA0IiB5Mj0iMTA0Ii8+CjxsaW5lIHgxPSIyNDQiIHgyPSIyNDQiIHkxPSIxMzYiIHkyPSIxNjgiLz4KPGxpbmUgeDE9IjI0NCIgeDI9IjM4MCIgeTE9IjEzNiIgeTI9IjEzNiIvPgo8bGluZSB4MT0iMjQ0IiB4Mj0iMjQ0IiB5MT0iMTY4IiB5Mj0iMjAwIi8+CjxsaW5lIHgxPSIyNDQiIHgyPSIzODAiIHkxPSIxNjgiIHkyPSIxNjgiLz4KPGxpbmUgeDE9IjI0NCIgeDI9IjI0NCIgeTE9IjIwMCIgeTI9IjIzMiIvPgo8bGluZSB4MT0iMjQ0IiB4Mj0iMzgwIiB5MT0iMjAwIiB5Mj0iMjAwIi8+CjxsaW5lIHgxPSIyNDQiIHgyPSIzNzYiIHkxPSIyMzIiIHkyPSIyMzIiLz4KPGxpbmUgeDE9IjM4MCIgeDI9IjM4MCIgeTE9Ijc2IiB5Mj0iMTA0Ii8+CjxsaW5lIHgxPSIzODAiIHgyPSIzODAiIHkxPSIxMDQiIHkyPSIxMzYiLz4KPGxpbmUgeDE9IjM4MCIgeDI9IjM4MCIgeTE9IjEzNiIgeTI9IjE2OCIvPgo8bGluZSB4MT0iMzgwIiB4Mj0iMzgwIiB5MT0iMTY4IiB5Mj0iMjAwIi8+CjxsaW5lIHgxPSIzODAiIHgyPSIzODAiIHkxPSIyMDAiIHkyPSIyMjgiLz4KPHBhdGggZD0iTSAyMTIgMjI4IEEgNCA0IDAgMCAwIDIxNiAyMzIiLz4KPHBhdGggZD0iTSAyMTYgNzIgQSA0IDQgMCAwIDAgMjEyIDc2Ii8+CjxwYXRoIGQ9Ik0gMzc2IDIzMiBBIDQgNCAwIDAgMCAzODAgMjI4Ii8+CjxwYXRoIGQ9Ik0gMzgwIDc2IEEgNCA0IDAgMCAwIDM3NiA3MiIvPgo8L2c+CjxnPgo8bGluZSB4MT0iMjE2IiB4Mj0iMjQ0IiB5MT0iNzIiIHkyPSI3MiIvPgo8L2c+CjxnPgo8bGluZSB4MT0iMjE2IiB4Mj0iMjQ0IiB5MT0iMjMyIiB5Mj0iMjMyIi8+CjwvZz4KPGc+CjxsaW5lIG1hcmtlci1lbmQ9InVybCgjdHJpYW5nbGUpIiB4MT0iMzkyIiB4Mj0iNDM2IiB5MT0iMTUyIiB5Mj0iMTUyIi8+CjwvZz4KPGc+CjxsaW5lIHgxPSIzOTIiIHgyPSI0MTYiIHkxPSIxODQiIHkyPSIxODQiLz4KPHBhdGggZD0iTSA0MjAgMTg4IEEgNCA0IDAgMCAwIDQxNiAxODQiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjQyMCIgeDI9IjQyMCIgeTE9IjE4OCIgeTI9IjIxMiIvPgo8cGF0aCBkPSJNIDQyMCAyMTIgQSA0IDQgMCAwIDAgNDI0IDIxNiIvPgo8L2c+CjxnPgo8bGluZSBtYXJrZXItZW5kPSJ1cmwoI3RyaWFuZ2xlKSIgeDE9IjQyNCIgeDI9IjQ1MiIgeTE9IjIxNiIgeTI9IjIxNiIvPgo8L2c+CjxnPgo8bGluZSB4MT0iNDUyIiB4Mj0iNDUyIiB5MT0iMTQwIiB5Mj0iMTY0Ii8+CjxwYXRoIGQ9Ik0gNDUyIDE2NCBBIDQgNCAwIDAgMCA0NTYgMTY4Ii8+CjxwYXRoIGQ9Ik0gNDU2IDEzNiBBIDQgNCAwIDAgMCA0NTIgMTQwIi8+CjwvZz4KPGc+CjxsaW5lIHgxPSI0NTYiIHgyPSI2MzIiIHkxPSIxMzYiIHkyPSIxMzYiLz4KPHBhdGggZD0iTSA2MzYgMTQwIEEgNCA0IDAgMCAwIDYzMiAxMzYiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjQ1NiIgeDI9IjYzMiIgeTE9IjE2OCIgeTI9IjE2OCIvPgo8cGF0aCBkPSJNIDYzMiAxNjggQSA0IDQgMCAwIDAgNjM2IDE2NCIvPgo8L2c+CjxnPgo8bGluZSB4MT0iNDY4IiB4Mj0iNDY4IiB5MT0iMjA0IiB5Mj0iMjQ0Ii8+CjxwYXRoIGQ9Ik0gNDY4IDI0NCBBIDQgNCAwIDAgMCA0NzIgMjQ4Ii8+CjxwYXRoIGQ9Ik0gNDcyIDIwMCBBIDQgNCAwIDAgMCA0NjggMjA0Ii8+CjwvZz4KPGc+CjxsaW5lIHgxPSI0NzIiIHgyPSI2MzIiIHkxPSIyMDAiIHkyPSIyMDAiLz4KPHBhdGggZD0iTSA2MzYgMjA0IEEgNCA0IDAgMCAwIDYzMiAyMDAiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjQ3MiIgeDI9IjYzMiIgeTE9IjI0OCIgeTI9IjI0OCIvPgo8cGF0aCBkPSJNIDYzMiAyNDggQSA0IDQgMCAwIDAgNjM2IDI0NCIvPgo8L2c+CjxnPgo8bGluZSB4MT0iNjM2IiB4Mj0iNjM2IiB5MT0iMTQwIiB5Mj0iMTY0Ii8+CjwvZz4KPGc+CjxsaW5lIHgxPSI2MzYiIHgyPSI2MzYiIHkxPSIyMDQiIHkyPSIyNDQiLz4KPC9nPgo8Zz4KPGxpbmUgeDE9IjY0OCIgeDI9IjY3MiIgeTE9IjE1MiIgeTI9IjE1MiIvPgo8cGF0aCBkPSJNIDY3MiAxNTIgQSA0IDQgMCAwIDAgNjc2IDE0OCIvPgo8L2c+CjxnPgo8bGluZSB4MT0iNjc2IiB4Mj0iNjc2IiB5MT0iMjgiIHkyPSIxNDgiLz4KPC9nPgo8Zz4KPHRleHQgeD0iMzMiIHk9IjEyNCIgdGV4dExlbmd0aD0iNzIiPgpUb3AtTGV2ZWwKPC90ZXh0Pgo8L2c+CjxnPgo8dGV4dCB4PSIyMTciIHk9IjYwIiB0ZXh0TGVuZ3RoPSIxNDQiPgpJTlRFUlJVUFRfSEFORExFUlMKPC90ZXh0Pgo8L2c+CjxnPgo8dGV4dCB4PSIyMjUiIHk9IjkyIiB0ZXh0TGVuZ3RoPSI4Ij4KMAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjIyNSIgeT0iMTI0IiB0ZXh0TGVuZ3RoPSI4Ij4KMQo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjIyNSIgeT0iMTU2IiB0ZXh0TGVuZ3RoPSI4Ij4KMgo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjIyNSIgeT0iMTg4IiB0ZXh0TGVuZ3RoPSI4Ij4KMwo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjIyNSIgeT0iMjIwIiB0ZXh0TGVuZ3RoPSI4Ij4KNAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjI1NyIgeT0iOTIiIHRleHRMZW5ndGg9IjY0Ij4KU29mdHdhcmUKPC90ZXh0Pgo8L2c+CjxnPgo8dGV4dCB4PSIyNTciIHk9IjEyNCIgdGV4dExlbmd0aD0iNDAiPgpUaW1lcgo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjI1NyIgeT0iMTU2IiB0ZXh0TGVuZ3RoPSI2NCI+CkV4dGVybmFsCjwvdGV4dD4KPC9nPgo8Zz4KPHRleHQgeD0iMjU3IiB5PSIxODgiIHRleHRMZW5ndGg9IjE2Ij4KSUMKPC90ZXh0Pgo8L2c+CjxnPgo8dGV4dCB4PSIyNTciIHk9IjIyMCIgdGV4dExlbmd0aD0iMTYiPgpJQwo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjI4MSIgeT0iMTg4IiB0ZXh0TGVuZ3RoPSI3MiI+CkludGVycnVwdAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjI4MSIgeT0iMjIwIiB0ZXh0TGVuZ3RoPSI3MiI+CkludGVycnVwdAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjM2MSIgeT0iMTg4IiB0ZXh0TGVuZ3RoPSI4Ij4KMAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjM2MSIgeT0iMjIwIiB0ZXh0TGVuZ3RoPSI4Ij4KMQo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjQzMyIgeT0iMTI0IiB0ZXh0TGVuZ3RoPSI3MiI+CkludGVycnVwdAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjQ2NSIgeT0iMTU2IiB0ZXh0TGVuZ3RoPSI3MiI+CkludGVycnVwdAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjQ4MSIgeT0iMjIwIiB0ZXh0TGVuZ3RoPSI3MiI+CkludGVycnVwdAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjQ4MSIgeT0iMjM2IiB0ZXh0TGVuZ3RoPSIyNCI+CmZvcgo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjUxMyIgeT0iMTI0IiB0ZXh0TGVuZ3RoPSI4MCI+CkNvbnRyb2xsZXIKPC90ZXh0Pgo8L2c+CjxnPgo8dGV4dCB4PSI1MTMiIHk9IjIzNiIgdGV4dExlbmd0aD0iMTYiPgpJQwo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjUzNyIgeT0iMjM2IiB0ZXh0TGVuZ3RoPSI3MiI+CkludGVycnVwdAo8L3RleHQ+CjwvZz4KPGc+Cjx0ZXh0IHg9IjU0NSIgeT0iMTU2IiB0ZXh0TGVuZ3RoPSI4MCI+CkRpc3BhdGNoZXIKPC90ZXh0Pgo8L2c+CjxnPgo8dGV4dCB4PSI1NjEiIHk9IjIyMCIgdGV4dExlbmd0aD0iNTYiPgpIYW5kbGVyCjwvdGV4dD4KPC9nPgo8Zz4KPHRleHQgeD0iNjAxIiB5PSIxMjQiIHRleHRMZW5ndGg9IjQ4Ij4KRHJpdmVyCjwvdGV4dD4KPC9nPgo8Zz4KPHRleHQgeD0iNjE3IiB5PSIyMzYiIHRleHRMZW5ndGg9IjgiPgowCjwvdGV4dD4KPC9nPgo8L3N2Zz4=

0 commit comments

Comments
 (0)