aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Kunze <eric.kunze@arm.com>2021-08-12 11:01:14 -0700
committerEric Kunze <eric.kunze@arm.com>2022-06-01 17:29:37 -0700
commit44a13479195a591b436d28efada8953b3cff36ba (patch)
tree99536c957a76ed022a1f0f98af84b2784643487a
parent7e4148c05a9b7533beb3bc0a5730b4f783e7d87a (diff)
downloadspecification-44a13479195a591b436d28efada8953b3cff36ba.tar.gz
Add FFT operators to MI/MT profiles
Adds FFT2D for complex->complex FFT Adds RFFT2D for real->complex FFT Change-Id: Id50f96b8f66f17c3020767c002f0c1f41a76d62e Signed-off-by: Eric Kunze <eric.kunze@arm.com>
-rw-r--r--Makefile10
-rw-r--r--chapters/pseudocode.adoc12
-rw-r--r--chapters/tensor_ops.adoc112
-rw-r--r--figures/forward_fft2d.svg312
-rw-r--r--figures/inverse_fft2d.svg306
-rw-r--r--tools/dictionary.dic6
-rwxr-xr-xtools/get_descriptions.py3
-rw-r--r--tosa_spec.adoc1
8 files changed, 760 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index cbbbe6a..b7cd640 100644
--- a/Makefile
+++ b/Makefile
@@ -22,23 +22,29 @@ COMMON_ARGS= -a revnumber="$(TOSAREVISION)"
SPECSRC := tosa_spec.adoc
ADOCFILES = $(wildcard chapters/[A-Za-z]*.adoc)
SPECFILES = $(ADOCFILES) tosa.css
+FIGURES = $(wildcard figures/*.svg)
.DELETE_ON_ERROR:
-.PHONY: all html pdf clean spell
+.PHONY: all html pdf clean spell copy_html_figures
all: spell html pdf
-html: $(HTMLDIR)/tosa_spec.html
+html: copy_html_figures $(HTMLDIR)/tosa_spec.html
pdf: $(PDFDIR)/tosa_spec.pdf
clean:
$(RM) $(HTMLDIR)/tosa_spec.html
+ rm -rf $(HTMLDIR)/figures
$(RM) $(PDFDIR)/tosa_spec.pdf
spell: out/spell.txt
+copy_html_figures: $(FIGURES)
+ $(MKDIR) -p $(HTMLDIR)/figures
+ cp $(FIGURES) $(HTMLDIR)/figures
+
.PRECIOUS: out/spell.txt
out/spell.txt: $(ADOCFILES) FORCE
@echo Running spell check
diff --git a/chapters/pseudocode.adoc b/chapters/pseudocode.adoc
index d22d180..993c6e7 100644
--- a/chapters/pseudocode.adoc
+++ b/chapters/pseudocode.adoc
@@ -212,4 +212,16 @@ int32_t tensor_size(int32_t input[]) {
}
return size;
}
+
+float_t pi()
+ returns value of pi
+
+float_t sin(angle)
+ return sine of angle given in radians
+
+float_t cos(angle)
+ return cosine of angle given in radians
+
+bool power_of_two(int32_t value)
+ return true if value is a power of two, false otherwise
----
diff --git a/chapters/tensor_ops.adoc b/chapters/tensor_ops.adoc
index 47768d4..b3f6f5a 100644
--- a/chapters/tensor_ops.adoc
+++ b/chapters/tensor_ops.adoc
@@ -333,6 +333,70 @@ for_each(0 <= n<N, 0 <= oy < OH, 0 <= ox < OW; 0 <= c < C, 0 <= m < M) {
|MI, MT|floating-point|float_t|float_t|float_t
|===
+==== FFT2D
+
+Performs a batched complex 2D Fast Fourier Transform over the input.
+The complex input values are constructed from the corresponding values in the input_real and input_imag tensors.
+The resulting values in the output are split into the output_real and output_imag tensors.
+No normalization is applied on either the forward or inverse versions of the operation.
+
+// output[h][w] = \sum_{m=0}^{H-1}\sum_{n=0}^{W-1}input[m][n] * \exp\left(-2\pi i\left(\frac{mh}{H} + \frac{nw}{W}\right)\right)
+
+.Calculation for the forward FFT2D calculation (direction=false)
+image::forward_fft2d.svg["forward FFT definition", align="center"]
+
+// output[h][w] = \sum_{m=0}^{H-1}\sum_{n=0}^{W-1}input[m][n] * \exp\left(2\pi i\left(\frac{mh}{H} + \frac{nw}{W}\right)\right)
+
+.Calculation for the inverse FFT2D calculation (direction=true)
+image::inverse_fft2d.svg["inverse FFT definition", align="center"]
+
+*Arguments:*
+
+|===
+|Argument|Type|Name|Shape|Description
+
+|Input|in_out_t*|input_real|[N,H,W]|Real part of the complex input. H,W must be powers of two.
+|Input|in_out_t*|input_imag|[N,H,W]|Imaginary part of the complex input. H,W must be powers of two.
+|Attribute|bool_t|inverse|-|false for forward FFT, true for inverse FFT
+|Output|in_out_t*|output_real|[N,H,W]|Real part of the complex output
+|Output|in_out_t*|output_imag|[N,H,W]|Imaginary part of the complex output.
+|===
+
+*Operation Function*
+
+[source,c++]
+----
+ERROR_IF(!power_of_two(H));
+ERROR_IF(!power_of_two(W));
+
+float sign_val = 1.0;
+
+if (inverse) {
+ sign_val = -1.0;
+}
+
+for_each(0 <= n < N, 0 <= oy < H, 0 <= ox < W) {
+ in_out_t sum_real = 0.0;
+ in_out_t sum_imag = 0.0;
+ for_each(0 <= iy < H, 0 <= ix < W) {
+ in_out_t val_real = tensor_read<in_out_t>(input_real, [N,H,W], [n,iy,ix]);
+ in_out_t val_imag = tensor_read<in_out_t>(input_imag, [N,H,W], [n,iy,ix]);
+ float_t a = sign_val * 2 * pi() * ((iy * oy) / H + (ix * ox) / W);
+ sum_real += val_real * cos(a) + val_imag * sin(a);
+ sum_imag += -val_real * sin(a) + val_imag * cos(a);
+ }
+ tensor_write<in_out_t>(output_real, [N,H,W], [n,oy,ox], sum_real);
+ tensor_write<in_out_t>(output_imag, [N,H,W], [n,oy,ox], sum_imag);
+}
+----
+
+*Supported Data Types:*
+
+|===
+|Profile|Mode|in_out_t
+|MI,MT|floating-point|float
+|===
+
==== FULLY_CONNECTED
Performs a fully connected network.
@@ -479,6 +543,54 @@ for_each(0 <= n < N, 0 <= oy < H, 0 <= ox < W, 0 <= c < C ) {
|MI, MT|floating-point|float_t
|===
+==== RFFT2D
+
+Performs a batched 2D real-valued Fast Fourier Transform over the input where the input tensor consists of real values producing complex valued output.
+The complex output values will be split into the output_real and output_imag tensor arguments.
+RFFT2D takes advantage of Hermitian symmetry to only calculate the first half of the output.
+Imaginary values with locations h=0,H/2 or w=0,W/2 are zero.
+
+image::forward_fft2d.svg["forward FFT definition", align="center"]
+
+*Arguments:*
+
+|===
+|Argument|Type|Name|Shape|Description
+
+|Input|in_out_t*|input|[N,H,W]|Real input. H,W must be powers of two.
+|Output|in_out_t*|output_real|[N,H/2 + 1,W/2 + 1]|Real part of the complex output
+|Output|in_out_t*|output_imag|[N,H/2 + 1,W/2 + 1]|Imaginary part of the complex output.
+|===
+
+*Operation Function*
+
+[source,c++]
+----
+ERROR_IF(!power_of_two(H));
+ERROR_IF(!power_of_two(W));
+
+for_each(0 <= n < N, 0 <= oy < H/2 + 1, 0 <= ox < W/2 + 1) {
+ in_out_t sum_real = 0.0;
+ in_out_t sum_imag = 0.0;
+ for_each(0 <= iy < H, 0 <= ix < W) {
+ in_out_t val_real = tensor_read<in_out_t>(input_real, [N,H,W], [n,iy,ix]);
+ float_t a = 2 * pi() * ((iy * oy) / H + (ix * ox) / W);
+ sum_real += val_real * cos(a);
+ sum_imag += -val_real * sin(a);
+ }
+ tensor_write<in_out_t>(output_real, [N,H,W], [n,oy,ox], sum_real);
+ tensor_write<in_out_t>(output_imag, [N,H,W], [n,oy,ox], sum_imag);
+}
+----
+
+*Supported Data Types:*
+
+|===
+|Profile|Mode|in_out_t
+|MI,MT|floating-point|float
+|===
+
+
==== TRANSPOSE_CONV2D
Performs a 2D transposed convolution over the given tensor input, using the weights tensor.
diff --git a/figures/forward_fft2d.svg b/figures/forward_fft2d.svg
new file mode 100644
index 0000000..e012656
--- /dev/null
+++ b/figures/forward_fft2d.svg
@@ -0,0 +1,312 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="354.405212pt" height="36.941726pt" viewBox="0 0 354.405212 36.941726" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 0.59375 2.125 L 0.59375 -8.46875 L 6.59375 -8.46875 L 6.59375 2.125 Z M 1.265625 1.453125 L 5.9375 1.453125 L 5.9375 -7.78125 L 1.265625 -7.78125 Z M 1.265625 1.453125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 3.078125 -0.40625 C 3.660156 -0.40625 4.144531 -0.632812 4.53125 -1.09375 C 4.914062 -1.550781 5.191406 -2.226562 5.359375 -3.125 C 5.441406 -3.53125 5.484375 -3.890625 5.484375 -4.203125 C 5.484375 -4.578125 5.425781 -4.890625 5.3125 -5.140625 C 5.101562 -5.585938 4.707031 -5.8125 4.125 -5.8125 C 3.550781 -5.8125 3.070312 -5.582031 2.6875 -5.125 C 2.300781 -4.675781 2.023438 -4.007812 1.859375 -3.125 C 1.773438 -2.71875 1.734375 -2.359375 1.734375 -2.046875 C 1.734375 -1.660156 1.789062 -1.34375 1.90625 -1.09375 C 2.113281 -0.632812 2.503906 -0.40625 3.078125 -0.40625 Z M 2.96875 0.171875 C 2.0625 0.171875 1.394531 -0.128906 0.96875 -0.734375 C 0.664062 -1.148438 0.515625 -1.65625 0.515625 -2.25 C 0.515625 -2.519531 0.539062 -2.8125 0.59375 -3.125 C 0.789062 -4.113281 1.222656 -4.90625 1.890625 -5.5 C 2.554688 -6.101562 3.34375 -6.40625 4.25 -6.40625 C 5.15625 -6.40625 5.828125 -6.101562 6.265625 -5.5 C 6.554688 -5.082031 6.703125 -4.578125 6.703125 -3.984375 C 6.703125 -3.710938 6.675781 -3.425781 6.625 -3.125 C 6.425781 -2.125 5.992188 -1.320312 5.328125 -0.71875 C 4.671875 -0.125 3.882812 0.171875 2.96875 0.171875 Z M 2.96875 0.171875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 5.8125 -6.234375 L 6.890625 -6.234375 L 5.796875 -0.625 L 6.8125 -0.625 L 6.703125 0 L 4.59375 0 L 4.8125 -1.109375 C 4.53125 -0.691406 4.207031 -0.375 3.84375 -0.15625 C 3.488281 0.0625 3.101562 0.171875 2.6875 0.171875 C 2 0.171875 1.53125 -0.0234375 1.28125 -0.421875 C 1.125 -0.660156 1.046875 -0.976562 1.046875 -1.375 C 1.046875 -1.632812 1.082031 -1.929688 1.15625 -2.265625 L 1.796875 -5.609375 L 0.828125 -5.609375 L 0.9375 -6.234375 L 3 -6.234375 L 2.296875 -2.609375 C 2.222656 -2.203125 2.1875 -1.863281 2.1875 -1.59375 C 2.1875 -1.363281 2.21875 -1.179688 2.28125 -1.046875 C 2.40625 -0.765625 2.707031 -0.625 3.1875 -0.625 C 3.6875 -0.625 4.101562 -0.804688 4.4375 -1.171875 C 4.769531 -1.535156 5.003906 -2.066406 5.140625 -2.765625 Z M 5.8125 -6.234375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 1.609375 -5.609375 L 0.65625 -5.609375 L 0.78125 -6.234375 L 1.734375 -6.234375 L 2.109375 -8.15625 L 3.1875 -8.15625 L 2.8125 -6.234375 L 4.84375 -6.234375 L 4.71875 -5.609375 L 2.6875 -5.609375 L 1.921875 -1.640625 C 1.859375 -1.335938 1.828125 -1.097656 1.828125 -0.921875 C 1.828125 -0.796875 1.84375 -0.703125 1.875 -0.640625 C 1.945312 -0.484375 2.117188 -0.40625 2.390625 -0.40625 C 2.671875 -0.40625 2.894531 -0.488281 3.0625 -0.65625 C 3.226562 -0.820312 3.347656 -1.09375 3.421875 -1.46875 L 4.234375 -1.46875 C 4.097656 -0.894531 3.863281 -0.476562 3.53125 -0.21875 C 3.207031 0.0390625 2.757812 0.171875 2.1875 0.171875 C 1.570312 0.171875 1.160156 0.03125 0.953125 -0.25 C 0.828125 -0.414062 0.765625 -0.65625 0.765625 -0.96875 C 0.765625 -1.164062 0.789062 -1.390625 0.84375 -1.640625 Z M 1.609375 -5.609375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.75 -3.421875 L 2.625 -2.8125 C 2.5625 -2.5 2.53125 -2.21875 2.53125 -1.96875 C 2.53125 -1.613281 2.59375 -1.320312 2.71875 -1.09375 C 2.9375 -0.695312 3.316406 -0.5 3.859375 -0.5 C 4.410156 -0.5 4.867188 -0.71875 5.234375 -1.15625 C 5.609375 -1.601562 5.878906 -2.257812 6.046875 -3.125 C 6.117188 -3.507812 6.15625 -3.859375 6.15625 -4.171875 C 6.15625 -4.535156 6.101562 -4.832031 6 -5.0625 C 5.800781 -5.5 5.425781 -5.71875 4.875 -5.71875 C 4.332031 -5.71875 3.878906 -5.519531 3.515625 -5.125 C 3.148438 -4.738281 2.894531 -4.171875 2.75 -3.421875 Z M 2.09375 -5.609375 L 1.0625 -5.609375 L 1.171875 -6.234375 L 3.296875 -6.234375 L 3.109375 -5.25 C 3.390625 -5.644531 3.710938 -5.9375 4.078125 -6.125 C 4.441406 -6.3125 4.863281 -6.40625 5.34375 -6.40625 C 6.113281 -6.40625 6.675781 -6.097656 7.03125 -5.484375 C 7.28125 -5.085938 7.40625 -4.613281 7.40625 -4.0625 C 7.40625 -3.757812 7.375 -3.445312 7.3125 -3.125 C 7.113281 -2.144531 6.710938 -1.347656 6.109375 -0.734375 C 5.515625 -0.128906 4.832031 0.171875 4.0625 0.171875 C 3.582031 0.171875 3.195312 0.078125 2.90625 -0.109375 C 2.613281 -0.296875 2.40625 -0.582031 2.28125 -0.96875 L 1.59375 2.5 L 0.515625 2.5 Z M 2.09375 -5.609375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 0.578125 0 L 2.234375 -8.5 L 1.203125 -8.5 L 1.3125 -9.125 L 3.421875 -9.125 L 2.65625 -5.125 C 2.9375 -5.539062 3.253906 -5.859375 3.609375 -6.078125 C 3.972656 -6.296875 4.363281 -6.40625 4.78125 -6.40625 C 5.46875 -6.40625 5.9375 -6.207031 6.1875 -5.8125 C 6.34375 -5.570312 6.421875 -5.253906 6.421875 -4.859375 C 6.421875 -4.585938 6.382812 -4.289062 6.3125 -3.96875 L 5.671875 -0.625 L 6.625 -0.625 L 6.515625 0 L 4.46875 0 L 5.171875 -3.625 C 5.242188 -4.019531 5.28125 -4.351562 5.28125 -4.625 C 5.28125 -4.863281 5.25 -5.050781 5.1875 -5.1875 C 5.0625 -5.46875 4.757812 -5.609375 4.28125 -5.609375 C 3.78125 -5.609375 3.363281 -5.425781 3.03125 -5.0625 C 2.695312 -4.695312 2.460938 -4.164062 2.328125 -3.46875 L 1.65625 0 Z M 0.578125 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 7.015625 -1.359375 C 7.535156 -1.921875 7.851562 -2.304688 7.96875 -2.515625 C 8.394531 -3.296875 8.820312 -4.328125 9.25 -5.609375 L 8.34375 -5.59375 L 8.46875 -6.234375 L 10.03125 -6.234375 L 9.90625 -5.59375 L 9.890625 -5.59375 C 9.492188 -4.144531 9.109375 -3.070312 8.734375 -2.375 C 8.171875 -1.375 7.582031 -0.582031 6.96875 0 L 6.078125 0 L 5.4375 -4.65625 L 3 0 L 2.140625 0 L 1.375 -5.609375 L 0.671875 -5.59375 L 0.796875 -6.234375 L 2.40625 -6.234375 L 3.0625 -1.359375 L 5.609375 -6.234375 L 6.359375 -6.234375 Z M 7.015625 -1.359375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1.890625 -8.15625 C 1.929688 -8.34375 2.03125 -8.5 2.1875 -8.625 C 2.34375 -8.757812 2.507812 -8.828125 2.6875 -8.828125 C 2.863281 -8.828125 3.007812 -8.757812 3.125 -8.625 C 3.195312 -8.53125 3.234375 -8.421875 3.234375 -8.296875 C 3.234375 -8.253906 3.226562 -8.207031 3.21875 -8.15625 C 3.1875 -7.976562 3.09375 -7.820312 2.9375 -7.6875 C 2.78125 -7.5625 2.609375 -7.5 2.421875 -7.5 C 2.242188 -7.5 2.101562 -7.5625 2 -7.6875 C 1.914062 -7.789062 1.875 -7.90625 1.875 -8.03125 C 1.875 -8.070312 1.878906 -8.113281 1.890625 -8.15625 Z M 1.8125 -0.625 L 2.828125 -0.625 L 2.703125 0 L 0.609375 0 L 1.6875 -5.609375 L 0.65625 -5.609375 L 0.78125 -6.234375 L 2.890625 -6.234375 Z M 1.8125 -0.625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 0.84375 0 L 1.9375 -5.609375 L 0.90625 -5.609375 L 1.015625 -6.234375 L 3.125 -6.234375 L 2.921875 -5.125 C 3.203125 -5.539062 3.519531 -5.859375 3.875 -6.078125 C 4.238281 -6.296875 4.628906 -6.40625 5.046875 -6.40625 C 5.734375 -6.40625 6.203125 -6.207031 6.453125 -5.8125 C 6.609375 -5.570312 6.6875 -5.253906 6.6875 -4.859375 C 6.6875 -4.585938 6.648438 -4.289062 6.578125 -3.96875 L 5.9375 -0.625 L 6.890625 -0.625 L 6.78125 0 L 4.734375 0 L 5.4375 -3.625 C 5.507812 -4.019531 5.546875 -4.351562 5.546875 -4.625 C 5.546875 -4.863281 5.515625 -5.050781 5.453125 -5.1875 C 5.316406 -5.46875 5.015625 -5.609375 4.546875 -5.609375 C 4.046875 -5.609375 3.628906 -5.425781 3.296875 -5.0625 C 2.960938 -4.695312 2.726562 -4.164062 2.59375 -3.46875 L 1.921875 0 Z M 0.84375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 6.5625 -5.015625 C 6.863281 -5.472656 7.195312 -5.816406 7.5625 -6.046875 C 7.925781 -6.285156 8.328125 -6.40625 8.765625 -6.40625 C 9.410156 -6.40625 9.859375 -6.203125 10.109375 -5.796875 C 10.242188 -5.546875 10.3125 -5.222656 10.3125 -4.828125 C 10.3125 -4.578125 10.28125 -4.289062 10.21875 -3.96875 L 9.578125 -0.625 L 10.546875 -0.625 L 10.4375 0 L 8.375 0 L 9.125 -3.84375 C 9.1875 -4.144531 9.21875 -4.40625 9.21875 -4.625 C 9.21875 -4.863281 9.179688 -5.054688 9.109375 -5.203125 C 8.972656 -5.472656 8.6875 -5.609375 8.25 -5.609375 C 7.769531 -5.609375 7.367188 -5.425781 7.046875 -5.0625 C 6.722656 -4.695312 6.492188 -4.164062 6.359375 -3.46875 L 5.6875 0 L 4.609375 0 L 5.375 -3.875 C 5.425781 -4.164062 5.453125 -4.421875 5.453125 -4.640625 C 5.453125 -4.878906 5.414062 -5.066406 5.34375 -5.203125 C 5.207031 -5.472656 4.921875 -5.609375 4.484375 -5.609375 C 4.003906 -5.609375 3.601562 -5.425781 3.28125 -5.0625 C 2.957031 -4.695312 2.726562 -4.164062 2.59375 -3.46875 L 1.921875 0 L 0.84375 0 L 1.9375 -5.609375 L 0.90625 -5.609375 L 1.015625 -6.234375 L 3.125 -6.234375 L 2.921875 -5.125 C 3.191406 -5.539062 3.503906 -5.859375 3.859375 -6.078125 C 4.210938 -6.296875 4.582031 -6.40625 4.96875 -6.40625 C 5.457031 -6.40625 5.835938 -6.28125 6.109375 -6.03125 C 6.390625 -5.789062 6.539062 -5.453125 6.5625 -5.015625 Z M 6.5625 -5.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M -0.109375 0 L 0 -0.625 L 0.984375 -0.625 L 1.953125 -5.609375 L 0.921875 -5.609375 L 1.03125 -6.234375 L 8.0625 -6.234375 L 7.9375 -5.609375 L 6.921875 -5.609375 L 5.953125 -0.625 L 6.90625 -0.625 L 6.796875 0 L 3.8125 0 L 3.9375 -0.625 L 4.859375 -0.625 L 5.84375 -5.609375 L 3.03125 -5.609375 L 2.0625 -0.625 L 3 -0.625 L 2.875 0 Z M -0.109375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M -0.1875 0 L -0.078125 -0.625 L 1.046875 -0.625 L 2.5 -8.125 L 1.390625 -8.125 L 1.515625 -8.75 L 4.921875 -8.75 L 4.8125 -8.125 L 3.6875 -8.125 L 3.109375 -5.09375 L 7.640625 -5.09375 L 8.234375 -8.125 L 7.109375 -8.125 L 7.234375 -8.75 L 10.65625 -8.75 L 10.53125 -8.125 L 9.421875 -8.125 L 7.953125 -0.625 L 9.078125 -0.625 L 8.953125 0 L 5.53125 0 L 5.65625 -0.625 L 6.78125 -0.625 L 7.5 -4.390625 L 2.96875 -4.390625 L 2.234375 -0.625 L 3.34375 -0.625 L 3.234375 0 Z M -0.1875 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 8.296875 0 L 7.34375 0 L 6.71875 -7.109375 L 3.328125 0 L 2.375 0 L 1.65625 -8.125 L 0.78125 -8.125 L 0.90625 -8.75 L 4.109375 -8.75 L 3.984375 -8.125 L 2.890625 -8.125 L 3.453125 -1.65625 L 6.828125 -8.75 L 7.78125 -8.75 L 8.40625 -1.578125 L 11.515625 -8.125 L 10.5 -8.125 L 10.625 -8.75 L 13.15625 -8.75 L 13.03125 -8.125 L 12.171875 -8.125 Z M 8.296875 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1.0625 0 L 1.0625 -6.25 L 5.34375 -6.25 L 5.34375 0 Z M 5.203125 -0.15625 L 5.203125 -6.09375 L 1.203125 -6.09375 L 1.203125 -0.15625 Z M 5.203125 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 1.734375 11.59375 L 1.734375 -0.40625 L 3.375 -0.40625 L 3.375 0 L 2.0625 0 L 2.0625 11.1875 L 3.375 11.1875 L 3.375 11.59375 Z M 1.734375 11.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.078125 0 L 1.078125 -6.25 L 5.359375 -6.25 L 5.359375 0 Z M 5.21875 -0.15625 L 5.21875 -6.09375 L 1.203125 -6.09375 L 1.203125 -0.15625 Z M 5.21875 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 0.1875 11.59375 L 0.1875 11.1875 L 1.484375 11.1875 L 1.484375 0 L 0.1875 0 L 0.1875 -0.40625 L 1.828125 -0.40625 L 1.828125 11.59375 Z M 0.1875 11.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 0.59375 2.125 L 0.59375 -8.46875 L 6.59375 -8.46875 L 6.59375 2.125 Z M 1.265625 1.453125 L 5.9375 1.453125 L 5.9375 -7.78125 L 1.265625 -7.78125 Z M 1.265625 1.453125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 1.265625 -5.421875 L 8.78125 -5.421875 L 8.78125 -4.484375 L 1.265625 -4.484375 Z M 1.265625 -3.03125 L 8.78125 -3.03125 L 8.78125 -2.09375 L 1.265625 -2.09375 Z M 1.265625 -3.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 5.8125 -7.25 L 3.515625 -6.1875 L 5.8125 -5.09375 L 5.359375 -4.40625 L 3.328125 -5.671875 L 3.40625 -3.453125 L 2.609375 -3.453125 L 2.671875 -5.671875 L 0.640625 -4.40625 L 0.1875 -5.09375 L 2.484375 -6.171875 L 0.1875 -7.25 L 0.640625 -7.953125 L 2.671875 -6.671875 L 2.609375 -8.90625 L 3.40625 -8.90625 L 3.328125 -6.671875 L 5.359375 -7.953125 Z M 5.8125 -7.25 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 6.5 -3 L 1.859375 -3 L 1.859375 -2.953125 C 1.859375 -2.109375 2.015625 -1.472656 2.328125 -1.046875 C 2.648438 -0.617188 3.117188 -0.40625 3.734375 -0.40625 C 4.203125 -0.40625 4.585938 -0.53125 4.890625 -0.78125 C 5.191406 -1.03125 5.40625 -1.398438 5.53125 -1.890625 L 6.40625 -1.890625 C 6.226562 -1.203125 5.90625 -0.6875 5.4375 -0.34375 C 4.976562 0 4.375 0.171875 3.625 0.171875 C 2.707031 0.171875 1.972656 -0.125 1.421875 -0.71875 C 0.867188 -1.320312 0.59375 -2.125 0.59375 -3.125 C 0.59375 -4.101562 0.863281 -4.894531 1.40625 -5.5 C 1.957031 -6.101562 2.671875 -6.40625 3.546875 -6.40625 C 4.492188 -6.40625 5.21875 -6.113281 5.71875 -5.53125 C 6.21875 -4.945312 6.476562 -4.101562 6.5 -3 Z M 5.234375 -3.625 C 5.210938 -4.351562 5.054688 -4.898438 4.765625 -5.265625 C 4.484375 -5.628906 4.078125 -5.8125 3.546875 -5.8125 C 3.054688 -5.8125 2.664062 -5.625 2.375 -5.25 C 2.09375 -4.882812 1.921875 -4.34375 1.859375 -3.625 Z M 5.234375 -3.625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 3.5 -3.796875 L 4.796875 -5.609375 L 3.96875 -5.609375 L 3.96875 -6.234375 L 6.359375 -6.234375 L 6.359375 -5.609375 L 5.53125 -5.609375 L 3.859375 -3.296875 L 5.8125 -0.625 L 6.625 -0.625 L 6.625 0 L 3.75 0 L 3.75 -0.625 L 4.53125 -0.625 L 3.1875 -2.484375 L 1.828125 -0.625 L 2.625 -0.625 L 2.625 0 L 0.265625 0 L 0.265625 -0.625 L 1.09375 -0.625 L 2.8125 -2.984375 L 0.921875 -5.609375 L 0.140625 -5.609375 L 0.140625 -6.234375 L 2.9375 -6.234375 L 2.9375 -5.609375 L 2.1875 -5.609375 Z M 3.5 -3.796875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 2.46875 -3.421875 L 2.46875 -2.8125 C 2.46875 -2.0625 2.609375 -1.488281 2.890625 -1.09375 C 3.179688 -0.695312 3.597656 -0.5 4.140625 -0.5 C 4.691406 -0.5 5.109375 -0.71875 5.390625 -1.15625 C 5.671875 -1.601562 5.8125 -2.257812 5.8125 -3.125 C 5.8125 -3.976562 5.671875 -4.625 5.390625 -5.0625 C 5.109375 -5.5 4.691406 -5.71875 4.140625 -5.71875 C 3.597656 -5.71875 3.179688 -5.519531 2.890625 -5.125 C 2.609375 -4.738281 2.46875 -4.171875 2.46875 -3.421875 Z M 1.390625 -5.609375 L 0.34375 -5.609375 L 0.34375 -6.234375 L 2.46875 -6.234375 L 2.46875 -5.25 C 2.675781 -5.644531 2.941406 -5.9375 3.265625 -6.125 C 3.585938 -6.3125 3.992188 -6.40625 4.484375 -6.40625 C 5.242188 -6.40625 5.863281 -6.097656 6.34375 -5.484375 C 6.832031 -4.878906 7.078125 -4.09375 7.078125 -3.125 C 7.078125 -2.144531 6.832031 -1.347656 6.34375 -0.734375 C 5.863281 -0.128906 5.242188 0.171875 4.484375 0.171875 C 3.992188 0.171875 3.585938 0.078125 3.265625 -0.109375 C 2.941406 -0.296875 2.675781 -0.582031 2.46875 -0.96875 L 2.46875 1.875 L 3.484375 1.875 L 3.484375 2.5 L 0.34375 2.5 L 0.34375 1.875 L 1.390625 1.875 Z M 1.390625 -5.609375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 1.265625 -4.234375 L 8.78125 -4.234375 L 8.78125 -3.28125 L 1.265625 -3.28125 Z M 1.265625 -4.234375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 1.53125 -6.65625 L 0.875 -6.65625 L 0.875 -8.21875 C 1.289062 -8.445312 1.710938 -8.617188 2.140625 -8.734375 C 2.566406 -8.847656 2.984375 -8.90625 3.390625 -8.90625 C 4.296875 -8.90625 5.007812 -8.679688 5.53125 -8.234375 C 6.0625 -7.796875 6.328125 -7.203125 6.328125 -6.453125 C 6.328125 -5.585938 5.734375 -4.5625 4.546875 -3.375 C 4.453125 -3.28125 4.378906 -3.210938 4.328125 -3.171875 L 2.125 -0.96875 L 5.765625 -0.96875 L 5.765625 -2.046875 L 6.453125 -2.046875 L 6.453125 0 L 0.8125 0 L 0.8125 -0.640625 L 3.46875 -3.28125 C 4.050781 -3.875 4.46875 -4.414062 4.71875 -4.90625 C 4.96875 -5.394531 5.09375 -5.910156 5.09375 -6.453125 C 5.09375 -7.035156 4.9375 -7.492188 4.625 -7.828125 C 4.320312 -8.160156 3.90625 -8.328125 3.375 -8.328125 C 2.8125 -8.328125 2.378906 -8.1875 2.078125 -7.90625 C 1.773438 -7.632812 1.59375 -7.21875 1.53125 -6.65625 Z M 1.53125 -6.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-8">
+<path style="stroke:none;" d="M 5.5 -7.53125 L 5.5 -4.234375 L 8.78125 -4.234375 L 8.78125 -3.28125 L 5.5 -3.28125 L 5.5 0 L 4.5625 0 L 4.5625 -3.28125 L 1.265625 -3.28125 L 1.265625 -4.234375 L 4.5625 -4.234375 L 4.5625 -7.53125 Z M 5.5 -7.53125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 1.5 0 L 1.5 -7.5 L 7.5 -7.5 L 7.5 0 Z M 7.3125 -0.1875 L 7.3125 -7.3125 L 1.6875 -7.3125 L 1.6875 -0.1875 Z M 7.3125 -0.1875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 0.796875 16.796875 C 0.710938 16.796875 0.671875 16.753906 0.671875 16.671875 C 0.671875 16.640625 0.679688 16.609375 0.703125 16.578125 L 7.046875 9.203125 L 0.703125 0.53125 C 0.679688 0.507812 0.671875 0.488281 0.671875 0.46875 L 0.671875 0.109375 C 0.671875 0.078125 0.679688 0.0507812 0.703125 0.03125 C 0.734375 0.0078125 0.765625 0 0.796875 0 L 15.1875 0 L 16.640625 3.375 L 16.296875 3.375 C 15.921875 2.519531 15.296875 1.882812 14.421875 1.46875 C 13.554688 1.0625 12.648438 0.8125 11.703125 0.71875 C 10.753906 0.625 9.65625 0.578125 8.40625 0.578125 L 2.859375 0.578125 L 8.515625 8.3125 C 8.535156 8.34375 8.546875 8.375 8.546875 8.40625 C 8.546875 8.425781 8.535156 8.453125 8.515625 8.484375 L 2.296875 15.734375 L 8.515625 15.734375 C 9.742188 15.734375 10.832031 15.6875 11.78125 15.59375 C 12.738281 15.5 13.644531 15.242188 14.5 14.828125 C 15.363281 14.410156 15.960938 13.78125 16.296875 12.9375 L 16.640625 12.9375 L 15.1875 16.796875 Z M 0.796875 16.796875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-0">
+<path style="stroke:none;" d="M 0.421875 1.5 L 0.421875 -6 L 4.6875 -6 L 4.6875 1.5 Z M 0.90625 1.03125 L 4.203125 1.03125 L 4.203125 -5.53125 L 0.90625 -5.53125 Z M 0.90625 1.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-1">
+<path style="stroke:none;" d="M 4.65625 -3.5625 C 4.875 -3.882812 5.113281 -4.128906 5.375 -4.296875 C 5.632812 -4.460938 5.914062 -4.546875 6.21875 -4.546875 C 6.675781 -4.546875 6.992188 -4.398438 7.171875 -4.109375 C 7.273438 -3.929688 7.328125 -3.707031 7.328125 -3.4375 C 7.328125 -3.25 7.300781 -3.039062 7.25 -2.8125 L 6.796875 -0.4375 L 7.484375 -0.4375 L 7.40625 0 L 5.953125 0 L 6.46875 -2.71875 C 6.507812 -2.9375 6.53125 -3.125 6.53125 -3.28125 C 6.53125 -3.445312 6.507812 -3.582031 6.46875 -3.6875 C 6.363281 -3.875 6.160156 -3.96875 5.859375 -3.96875 C 5.515625 -3.96875 5.226562 -3.835938 5 -3.578125 C 4.769531 -3.328125 4.609375 -2.957031 4.515625 -2.46875 L 4.03125 0 L 3.265625 0 L 3.8125 -2.75 C 3.84375 -2.957031 3.859375 -3.132812 3.859375 -3.28125 C 3.859375 -3.457031 3.835938 -3.59375 3.796875 -3.6875 C 3.691406 -3.875 3.488281 -3.96875 3.1875 -3.96875 C 2.84375 -3.96875 2.554688 -3.835938 2.328125 -3.578125 C 2.097656 -3.328125 1.9375 -2.957031 1.84375 -2.46875 L 1.359375 0 L 0.59375 0 L 1.375 -3.984375 L 0.640625 -3.984375 L 0.71875 -4.421875 L 2.21875 -4.421875 L 2.078125 -3.640625 C 2.265625 -3.929688 2.484375 -4.15625 2.734375 -4.3125 C 2.984375 -4.46875 3.25 -4.546875 3.53125 -4.546875 C 3.875 -4.546875 4.144531 -4.457031 4.34375 -4.28125 C 4.539062 -4.113281 4.644531 -3.875 4.65625 -3.5625 Z M 4.65625 -3.5625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-2">
+<path style="stroke:none;" d="M -0.140625 0 L -0.046875 -0.4375 L 0.734375 -0.4375 L 1.78125 -5.765625 L 0.984375 -5.765625 L 1.078125 -6.203125 L 3.5 -6.203125 L 3.40625 -5.765625 L 2.625 -5.765625 L 2.203125 -3.625 L 5.421875 -3.625 L 5.84375 -5.765625 L 5.046875 -5.765625 L 5.140625 -6.203125 L 7.5625 -6.203125 L 7.46875 -5.765625 L 6.6875 -5.765625 L 5.640625 -0.4375 L 6.4375 -0.4375 L 6.359375 0 L 3.921875 0 L 4.015625 -0.4375 L 4.8125 -0.4375 L 5.328125 -3.109375 L 2.109375 -3.109375 L 1.578125 -0.4375 L 2.375 -0.4375 L 2.296875 0 Z M -0.140625 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-3">
+<path style="stroke:none;" d="M 0.59375 0 L 1.375 -3.96875 L 0.640625 -3.96875 L 0.71875 -4.421875 L 2.21875 -4.421875 L 2.078125 -3.640625 C 2.273438 -3.929688 2.5 -4.15625 2.75 -4.3125 C 3.007812 -4.46875 3.285156 -4.546875 3.578125 -4.546875 C 4.066406 -4.546875 4.398438 -4.40625 4.578125 -4.125 C 4.679688 -3.945312 4.734375 -3.71875 4.734375 -3.4375 C 4.734375 -3.257812 4.710938 -3.050781 4.671875 -2.8125 L 4.203125 -0.4375 L 4.890625 -0.4375 L 4.8125 0 L 3.359375 0 L 3.859375 -2.5625 C 3.910156 -2.851562 3.9375 -3.09375 3.9375 -3.28125 C 3.9375 -3.445312 3.914062 -3.582031 3.875 -3.6875 C 3.78125 -3.882812 3.566406 -3.984375 3.234375 -3.984375 C 2.867188 -3.984375 2.566406 -3.851562 2.328125 -3.59375 C 2.097656 -3.332031 1.9375 -2.957031 1.84375 -2.46875 L 1.359375 0 Z M 0.59375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-4">
+<path style="stroke:none;" d="M 5.890625 0 L 5.203125 0 L 4.765625 -5.046875 L 2.359375 0 L 1.6875 0 L 1.171875 -5.765625 L 0.5625 -5.765625 L 0.640625 -6.203125 L 2.90625 -6.203125 L 2.828125 -5.765625 L 2.046875 -5.765625 L 2.453125 -1.171875 L 4.84375 -6.203125 L 5.515625 -6.203125 L 5.96875 -1.125 L 8.171875 -5.765625 L 7.453125 -5.765625 L 7.546875 -6.203125 L 9.328125 -6.203125 L 9.25 -5.765625 L 8.625 -5.765625 Z M 5.890625 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-0">
+<path style="stroke:none;" d="M 0.421875 1.5 L 0.421875 -6 L 4.6875 -6 L 4.6875 1.5 Z M 0.90625 1.03125 L 4.203125 1.03125 L 4.203125 -5.53125 L 0.90625 -5.53125 Z M 0.90625 1.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-1">
+<path style="stroke:none;" d="M 0.90625 -3.84375 L 6.234375 -3.84375 L 6.234375 -3.1875 L 0.90625 -3.1875 Z M 0.90625 -2.15625 L 6.234375 -2.15625 L 6.234375 -1.484375 L 0.90625 -1.484375 Z M 0.90625 -2.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-2">
+<path style="stroke:none;" d="M 2.703125 -0.296875 C 3.128906 -0.296875 3.445312 -0.523438 3.65625 -0.984375 C 3.863281 -1.453125 3.96875 -2.15625 3.96875 -3.09375 C 3.96875 -4.039062 3.863281 -4.742188 3.65625 -5.203125 C 3.445312 -5.671875 3.128906 -5.90625 2.703125 -5.90625 C 2.285156 -5.90625 1.96875 -5.671875 1.75 -5.203125 C 1.539062 -4.742188 1.4375 -4.039062 1.4375 -3.09375 C 1.4375 -2.15625 1.539062 -1.453125 1.75 -0.984375 C 1.96875 -0.523438 2.285156 -0.296875 2.703125 -0.296875 Z M 2.703125 0.125 C 2.035156 0.125 1.507812 -0.15625 1.125 -0.71875 C 0.75 -1.289062 0.5625 -2.082031 0.5625 -3.09375 C 0.5625 -4.113281 0.75 -4.90625 1.125 -5.46875 C 1.507812 -6.03125 2.035156 -6.3125 2.703125 -6.3125 C 3.378906 -6.3125 3.90625 -6.03125 4.28125 -5.46875 C 4.664062 -4.90625 4.859375 -4.113281 4.859375 -3.09375 C 4.859375 -2.082031 4.664062 -1.289062 4.28125 -0.71875 C 3.90625 -0.15625 3.378906 0.125 2.703125 0.125 Z M 2.703125 0.125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-3">
+<path style="stroke:none;" d="M 0.90625 -3 L 6.234375 -3 L 6.234375 -2.328125 L 0.90625 -2.328125 Z M 0.90625 -3 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-4">
+<path style="stroke:none;" d="M 1.203125 0 L 1.203125 -0.4375 L 2.296875 -0.4375 L 2.296875 -5.609375 L 1.046875 -4.796875 L 1.046875 -5.34375 L 2.546875 -6.3125 L 3.125 -6.3125 L 3.125 -0.4375 L 4.203125 -0.4375 L 4.203125 0 Z M 1.203125 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-0">
+<path style="stroke:none;" d="M 1.5 0 L 1.5 -6.265625 L 7.5 -6.265625 L 7.5 0 Z M 7.3125 -0.15625 L 7.3125 -6.109375 L 1.6875 -6.109375 L 1.6875 -0.15625 Z M 7.3125 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-1">
+<path style="stroke:none;" d="M 8.5625 29.65625 C 7.457031 28.675781 6.53125 27.597656 5.78125 26.421875 C 5.039062 25.253906 4.453125 24.023438 4.015625 22.734375 C 3.585938 21.453125 3.28125 20.132812 3.09375 18.78125 C 2.914062 17.425781 2.828125 16.046875 2.828125 14.640625 C 2.828125 13.234375 2.914062 11.851562 3.09375 10.5 C 3.28125 9.144531 3.585938 7.820312 4.015625 6.53125 C 4.453125 5.238281 5.039062 4.003906 5.78125 2.828125 C 6.53125 1.660156 7.457031 0.59375 8.5625 -0.375 C 8.613281 -0.394531 8.644531 -0.40625 8.65625 -0.40625 L 9 -0.40625 C 9.019531 -0.40625 9.039062 -0.394531 9.0625 -0.375 C 9.082031 -0.351562 9.09375 -0.332031 9.09375 -0.3125 C 9.09375 -0.28125 9.085938 -0.257812 9.078125 -0.25 C 8.066406 0.738281 7.226562 1.820312 6.5625 3 C 5.90625 4.175781 5.394531 5.398438 5.03125 6.671875 C 4.664062 7.953125 4.410156 9.238281 4.265625 10.53125 C 4.117188 11.832031 4.046875 13.203125 4.046875 14.640625 C 4.046875 16.078125 4.117188 17.441406 4.265625 18.734375 C 4.410156 20.023438 4.664062 21.3125 5.03125 22.59375 C 5.394531 23.875 5.90625 25.097656 6.5625 26.265625 C 7.226562 27.441406 8.066406 28.53125 9.078125 29.53125 C 9.085938 29.539062 9.09375 29.5625 9.09375 29.59375 C 9.09375 29.613281 9.082031 29.632812 9.0625 29.65625 C 9.039062 29.675781 9.019531 29.6875 9 29.6875 L 8.65625 29.6875 C 8.644531 29.6875 8.628906 29.679688 8.609375 29.671875 C 8.597656 29.660156 8.582031 29.65625 8.5625 29.65625 Z M 8.5625 29.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-2">
+<path style="stroke:none;" d="M 0.5 29.6875 C 0.4375 29.6875 0.40625 29.65625 0.40625 29.59375 C 0.40625 29.5625 0.410156 29.539062 0.421875 29.53125 C 1.410156 28.550781 2.238281 27.46875 2.90625 26.28125 C 3.582031 25.09375 4.101562 23.859375 4.46875 22.578125 C 4.832031 21.304688 5.085938 20.023438 5.234375 18.734375 C 5.378906 17.441406 5.453125 16.078125 5.453125 14.640625 C 5.453125 13.203125 5.378906 11.832031 5.234375 10.53125 C 5.085938 9.238281 4.832031 7.957031 4.46875 6.6875 C 4.101562 5.414062 3.582031 4.179688 2.90625 2.984375 C 2.238281 1.796875 1.410156 0.71875 0.421875 -0.25 C 0.410156 -0.257812 0.40625 -0.28125 0.40625 -0.3125 C 0.40625 -0.375 0.4375 -0.40625 0.5 -0.40625 L 0.84375 -0.40625 C 0.851562 -0.40625 0.878906 -0.394531 0.921875 -0.375 C 2.023438 0.582031 2.953125 1.648438 3.703125 2.828125 C 4.453125 4.015625 5.039062 5.253906 5.46875 6.546875 C 5.90625 7.847656 6.210938 9.160156 6.390625 10.484375 C 6.566406 11.816406 6.65625 13.203125 6.65625 14.640625 C 6.65625 16.078125 6.566406 17.457031 6.390625 18.78125 C 6.210938 20.113281 5.90625 21.425781 5.46875 22.71875 C 5.039062 24.019531 4.453125 25.257812 3.703125 26.4375 C 2.953125 27.613281 2.023438 28.6875 0.921875 29.65625 C 0.878906 29.675781 0.851562 29.6875 0.84375 29.6875 Z M 0.5 29.6875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph8-0">
+<path style="stroke:none;" d="M 1.421875 0 L 1.421875 -6.265625 L 7.09375 -6.265625 L 7.09375 0 Z M 6.90625 -0.15625 L 6.90625 -6.109375 L 1.59375 -6.109375 L 1.59375 -0.15625 Z M 6.90625 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph8-1">
+<path style="stroke:none;" d="M 8.09375 29.65625 C 7.050781 28.675781 6.175781 27.597656 5.46875 26.421875 C 4.769531 25.253906 4.21875 24.023438 3.8125 22.734375 C 3.40625 21.453125 3.113281 20.132812 2.9375 18.78125 C 2.757812 17.425781 2.671875 16.046875 2.671875 14.640625 C 2.671875 13.234375 2.757812 11.851562 2.9375 10.5 C 3.113281 9.144531 3.40625 7.820312 3.8125 6.53125 C 4.21875 5.238281 4.769531 4.003906 5.46875 2.828125 C 6.175781 1.660156 7.050781 0.59375 8.09375 -0.375 C 8.144531 -0.394531 8.175781 -0.40625 8.1875 -0.40625 L 8.515625 -0.40625 C 8.535156 -0.40625 8.550781 -0.394531 8.5625 -0.375 C 8.582031 -0.351562 8.59375 -0.332031 8.59375 -0.3125 C 8.59375 -0.28125 8.585938 -0.257812 8.578125 -0.25 C 7.628906 0.738281 6.835938 1.820312 6.203125 3 C 5.578125 4.175781 5.09375 5.398438 4.75 6.671875 C 4.40625 7.953125 4.164062 9.238281 4.03125 10.53125 C 3.894531 11.832031 3.828125 13.203125 3.828125 14.640625 C 3.828125 16.078125 3.894531 17.441406 4.03125 18.734375 C 4.164062 20.023438 4.40625 21.3125 4.75 22.59375 C 5.101562 23.875 5.59375 25.097656 6.21875 26.265625 C 6.84375 27.441406 7.628906 28.53125 8.578125 29.53125 C 8.585938 29.539062 8.59375 29.5625 8.59375 29.59375 C 8.59375 29.613281 8.582031 29.632812 8.5625 29.65625 C 8.539062 29.675781 8.523438 29.6875 8.515625 29.6875 L 8.1875 29.6875 C 8.175781 29.6875 8.160156 29.679688 8.140625 29.671875 C 8.128906 29.660156 8.113281 29.65625 8.09375 29.65625 Z M 8.09375 29.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph9-0">
+<path style="stroke:none;" d="M 1.421875 0 L 1.421875 -6.265625 L 7.078125 -6.265625 L 7.078125 0 Z M 6.890625 -0.15625 L 6.890625 -6.109375 L 1.59375 -6.109375 L 1.59375 -0.15625 Z M 6.890625 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph9-1">
+<path style="stroke:none;" d="M 0.46875 29.6875 C 0.40625 29.6875 0.375 29.65625 0.375 29.59375 C 0.375 29.5625 0.378906 29.539062 0.390625 29.53125 C 1.328125 28.550781 2.113281 27.46875 2.75 26.28125 C 3.382812 25.09375 3.875 23.859375 4.21875 22.578125 C 4.5625 21.304688 4.800781 20.023438 4.9375 18.734375 C 5.070312 17.441406 5.140625 16.078125 5.140625 14.640625 C 5.140625 13.203125 5.070312 11.832031 4.9375 10.53125 C 4.800781 9.238281 4.5625 7.957031 4.21875 6.6875 C 3.875 5.414062 3.382812 4.179688 2.75 2.984375 C 2.113281 1.796875 1.328125 0.71875 0.390625 -0.25 C 0.378906 -0.257812 0.375 -0.28125 0.375 -0.3125 C 0.375 -0.375 0.40625 -0.40625 0.46875 -0.40625 L 0.796875 -0.40625 C 0.804688 -0.40625 0.832031 -0.394531 0.875 -0.375 C 1.90625 0.582031 2.773438 1.648438 3.484375 2.828125 C 4.203125 4.015625 4.765625 5.253906 5.171875 6.546875 C 5.578125 7.847656 5.863281 9.160156 6.03125 10.484375 C 6.207031 11.816406 6.296875 13.203125 6.296875 14.640625 C 6.296875 16.078125 6.207031 17.457031 6.03125 18.78125 C 5.863281 20.113281 5.578125 21.425781 5.171875 22.71875 C 4.765625 24.019531 4.207031 25.257812 3.5 26.4375 C 2.789062 27.613281 1.914062 28.6875 0.875 29.65625 C 0.832031 29.675781 0.804688 29.6875 0.796875 29.6875 Z M 0.46875 29.6875 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="0.15625" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="7.378906" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-3" x="14.941406" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-4" x="20.597656" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="28.511719" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-3" x="36.074219" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="40.519531" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="44.640625" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="52.414062" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="53.855469" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="57.878906" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="69.050781" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-1" x="74.277344" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph4-1" x="91.417969" y="10.880859"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-1" x="86.9375" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-1" x="97.804688" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-2" x="107.757812" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-2" x="88.492188" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-3" x="98.769531" y="6.326172"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-4" x="107.578125" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph4-1" x="119.15625" y="10.880859"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-3" x="115.972656" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-1" x="124.242188" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-2" x="134.199219" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-4" x="115" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-3" x="127.046875" y="6.326172"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-4" x="135.855469" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="142.597656" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="146.328125" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-4" x="154.035156" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="161.949219" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-3" x="169.511719" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="173.957031" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-9" x="177.8125" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="189.507812" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="190.945312" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="194.804688" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="202.839844" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-2" x="207.8125" y="23.041016"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-3" x="216.355469" y="23.044922"/>
+ <use xlink:href="#glyph3-4" x="223.355469" y="23.044922"/>
+ <use xlink:href="#glyph3-5" x="230.355469" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph7-1" x="235.941406" y="4.634631"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-6" x="246.425781" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-7" x="255.730469" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-10" x="263.625" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="272.410156" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph8-1" x="274.308594" y="4.634631"/>
+</g>
+<path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 284.902344 -3.763344 L 303.320312 -3.763344 " transform="matrix(1,0,0,1,0,23.044594)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-9" x="284.726562" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="296.027344" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-11" x="288.871094" y="31.666016"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-8" x="306.710938" y="23.041016"/>
+</g>
+<path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 320.164062 -3.763344 L 338.230469 -3.763344 " transform="matrix(1,0,0,1,0,23.044594)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="319.988281" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="327.539062" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-12" x="322.230469" y="31.666016"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph9-1" x="339.855469" y="4.634631"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph7-2" x="347.078125" y="4.634631"/>
+</g>
+</g>
+</svg>
diff --git a/figures/inverse_fft2d.svg b/figures/inverse_fft2d.svg
new file mode 100644
index 0000000..59a9f26
--- /dev/null
+++ b/figures/inverse_fft2d.svg
@@ -0,0 +1,306 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="344.226829pt" height="36.941726pt" viewBox="0 0 344.226829 36.941726" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 0.59375 2.125 L 0.59375 -8.46875 L 6.59375 -8.46875 L 6.59375 2.125 Z M 1.265625 1.453125 L 5.9375 1.453125 L 5.9375 -7.78125 L 1.265625 -7.78125 Z M 1.265625 1.453125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 3.078125 -0.40625 C 3.660156 -0.40625 4.144531 -0.632812 4.53125 -1.09375 C 4.914062 -1.550781 5.191406 -2.226562 5.359375 -3.125 C 5.441406 -3.53125 5.484375 -3.890625 5.484375 -4.203125 C 5.484375 -4.578125 5.425781 -4.890625 5.3125 -5.140625 C 5.101562 -5.585938 4.707031 -5.8125 4.125 -5.8125 C 3.550781 -5.8125 3.070312 -5.582031 2.6875 -5.125 C 2.300781 -4.675781 2.023438 -4.007812 1.859375 -3.125 C 1.773438 -2.71875 1.734375 -2.359375 1.734375 -2.046875 C 1.734375 -1.660156 1.789062 -1.34375 1.90625 -1.09375 C 2.113281 -0.632812 2.503906 -0.40625 3.078125 -0.40625 Z M 2.96875 0.171875 C 2.0625 0.171875 1.394531 -0.128906 0.96875 -0.734375 C 0.664062 -1.148438 0.515625 -1.65625 0.515625 -2.25 C 0.515625 -2.519531 0.539062 -2.8125 0.59375 -3.125 C 0.789062 -4.113281 1.222656 -4.90625 1.890625 -5.5 C 2.554688 -6.101562 3.34375 -6.40625 4.25 -6.40625 C 5.15625 -6.40625 5.828125 -6.101562 6.265625 -5.5 C 6.554688 -5.082031 6.703125 -4.578125 6.703125 -3.984375 C 6.703125 -3.710938 6.675781 -3.425781 6.625 -3.125 C 6.425781 -2.125 5.992188 -1.320312 5.328125 -0.71875 C 4.671875 -0.125 3.882812 0.171875 2.96875 0.171875 Z M 2.96875 0.171875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 5.8125 -6.234375 L 6.890625 -6.234375 L 5.796875 -0.625 L 6.8125 -0.625 L 6.703125 0 L 4.59375 0 L 4.8125 -1.109375 C 4.53125 -0.691406 4.207031 -0.375 3.84375 -0.15625 C 3.488281 0.0625 3.101562 0.171875 2.6875 0.171875 C 2 0.171875 1.53125 -0.0234375 1.28125 -0.421875 C 1.125 -0.660156 1.046875 -0.976562 1.046875 -1.375 C 1.046875 -1.632812 1.082031 -1.929688 1.15625 -2.265625 L 1.796875 -5.609375 L 0.828125 -5.609375 L 0.9375 -6.234375 L 3 -6.234375 L 2.296875 -2.609375 C 2.222656 -2.203125 2.1875 -1.863281 2.1875 -1.59375 C 2.1875 -1.363281 2.21875 -1.179688 2.28125 -1.046875 C 2.40625 -0.765625 2.707031 -0.625 3.1875 -0.625 C 3.6875 -0.625 4.101562 -0.804688 4.4375 -1.171875 C 4.769531 -1.535156 5.003906 -2.066406 5.140625 -2.765625 Z M 5.8125 -6.234375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 1.609375 -5.609375 L 0.65625 -5.609375 L 0.78125 -6.234375 L 1.734375 -6.234375 L 2.109375 -8.15625 L 3.1875 -8.15625 L 2.8125 -6.234375 L 4.84375 -6.234375 L 4.71875 -5.609375 L 2.6875 -5.609375 L 1.921875 -1.640625 C 1.859375 -1.335938 1.828125 -1.097656 1.828125 -0.921875 C 1.828125 -0.796875 1.84375 -0.703125 1.875 -0.640625 C 1.945312 -0.484375 2.117188 -0.40625 2.390625 -0.40625 C 2.671875 -0.40625 2.894531 -0.488281 3.0625 -0.65625 C 3.226562 -0.820312 3.347656 -1.09375 3.421875 -1.46875 L 4.234375 -1.46875 C 4.097656 -0.894531 3.863281 -0.476562 3.53125 -0.21875 C 3.207031 0.0390625 2.757812 0.171875 2.1875 0.171875 C 1.570312 0.171875 1.160156 0.03125 0.953125 -0.25 C 0.828125 -0.414062 0.765625 -0.65625 0.765625 -0.96875 C 0.765625 -1.164062 0.789062 -1.390625 0.84375 -1.640625 Z M 1.609375 -5.609375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.75 -3.421875 L 2.625 -2.8125 C 2.5625 -2.5 2.53125 -2.21875 2.53125 -1.96875 C 2.53125 -1.613281 2.59375 -1.320312 2.71875 -1.09375 C 2.9375 -0.695312 3.316406 -0.5 3.859375 -0.5 C 4.410156 -0.5 4.867188 -0.71875 5.234375 -1.15625 C 5.609375 -1.601562 5.878906 -2.257812 6.046875 -3.125 C 6.117188 -3.507812 6.15625 -3.859375 6.15625 -4.171875 C 6.15625 -4.535156 6.101562 -4.832031 6 -5.0625 C 5.800781 -5.5 5.425781 -5.71875 4.875 -5.71875 C 4.332031 -5.71875 3.878906 -5.519531 3.515625 -5.125 C 3.148438 -4.738281 2.894531 -4.171875 2.75 -3.421875 Z M 2.09375 -5.609375 L 1.0625 -5.609375 L 1.171875 -6.234375 L 3.296875 -6.234375 L 3.109375 -5.25 C 3.390625 -5.644531 3.710938 -5.9375 4.078125 -6.125 C 4.441406 -6.3125 4.863281 -6.40625 5.34375 -6.40625 C 6.113281 -6.40625 6.675781 -6.097656 7.03125 -5.484375 C 7.28125 -5.085938 7.40625 -4.613281 7.40625 -4.0625 C 7.40625 -3.757812 7.375 -3.445312 7.3125 -3.125 C 7.113281 -2.144531 6.710938 -1.347656 6.109375 -0.734375 C 5.515625 -0.128906 4.832031 0.171875 4.0625 0.171875 C 3.582031 0.171875 3.195312 0.078125 2.90625 -0.109375 C 2.613281 -0.296875 2.40625 -0.582031 2.28125 -0.96875 L 1.59375 2.5 L 0.515625 2.5 Z M 2.09375 -5.609375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 0.578125 0 L 2.234375 -8.5 L 1.203125 -8.5 L 1.3125 -9.125 L 3.421875 -9.125 L 2.65625 -5.125 C 2.9375 -5.539062 3.253906 -5.859375 3.609375 -6.078125 C 3.972656 -6.296875 4.363281 -6.40625 4.78125 -6.40625 C 5.46875 -6.40625 5.9375 -6.207031 6.1875 -5.8125 C 6.34375 -5.570312 6.421875 -5.253906 6.421875 -4.859375 C 6.421875 -4.585938 6.382812 -4.289062 6.3125 -3.96875 L 5.671875 -0.625 L 6.625 -0.625 L 6.515625 0 L 4.46875 0 L 5.171875 -3.625 C 5.242188 -4.019531 5.28125 -4.351562 5.28125 -4.625 C 5.28125 -4.863281 5.25 -5.050781 5.1875 -5.1875 C 5.0625 -5.46875 4.757812 -5.609375 4.28125 -5.609375 C 3.78125 -5.609375 3.363281 -5.425781 3.03125 -5.0625 C 2.695312 -4.695312 2.460938 -4.164062 2.328125 -3.46875 L 1.65625 0 Z M 0.578125 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 7.015625 -1.359375 C 7.535156 -1.921875 7.851562 -2.304688 7.96875 -2.515625 C 8.394531 -3.296875 8.820312 -4.328125 9.25 -5.609375 L 8.34375 -5.59375 L 8.46875 -6.234375 L 10.03125 -6.234375 L 9.90625 -5.59375 L 9.890625 -5.59375 C 9.492188 -4.144531 9.109375 -3.070312 8.734375 -2.375 C 8.171875 -1.375 7.582031 -0.582031 6.96875 0 L 6.078125 0 L 5.4375 -4.65625 L 3 0 L 2.140625 0 L 1.375 -5.609375 L 0.671875 -5.59375 L 0.796875 -6.234375 L 2.40625 -6.234375 L 3.0625 -1.359375 L 5.609375 -6.234375 L 6.359375 -6.234375 Z M 7.015625 -1.359375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1.890625 -8.15625 C 1.929688 -8.34375 2.03125 -8.5 2.1875 -8.625 C 2.34375 -8.757812 2.507812 -8.828125 2.6875 -8.828125 C 2.863281 -8.828125 3.007812 -8.757812 3.125 -8.625 C 3.195312 -8.53125 3.234375 -8.421875 3.234375 -8.296875 C 3.234375 -8.253906 3.226562 -8.207031 3.21875 -8.15625 C 3.1875 -7.976562 3.09375 -7.820312 2.9375 -7.6875 C 2.78125 -7.5625 2.609375 -7.5 2.421875 -7.5 C 2.242188 -7.5 2.101562 -7.5625 2 -7.6875 C 1.914062 -7.789062 1.875 -7.90625 1.875 -8.03125 C 1.875 -8.070312 1.878906 -8.113281 1.890625 -8.15625 Z M 1.8125 -0.625 L 2.828125 -0.625 L 2.703125 0 L 0.609375 0 L 1.6875 -5.609375 L 0.65625 -5.609375 L 0.78125 -6.234375 L 2.890625 -6.234375 Z M 1.8125 -0.625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 0.84375 0 L 1.9375 -5.609375 L 0.90625 -5.609375 L 1.015625 -6.234375 L 3.125 -6.234375 L 2.921875 -5.125 C 3.203125 -5.539062 3.519531 -5.859375 3.875 -6.078125 C 4.238281 -6.296875 4.628906 -6.40625 5.046875 -6.40625 C 5.734375 -6.40625 6.203125 -6.207031 6.453125 -5.8125 C 6.609375 -5.570312 6.6875 -5.253906 6.6875 -4.859375 C 6.6875 -4.585938 6.648438 -4.289062 6.578125 -3.96875 L 5.9375 -0.625 L 6.890625 -0.625 L 6.78125 0 L 4.734375 0 L 5.4375 -3.625 C 5.507812 -4.019531 5.546875 -4.351562 5.546875 -4.625 C 5.546875 -4.863281 5.515625 -5.050781 5.453125 -5.1875 C 5.316406 -5.46875 5.015625 -5.609375 4.546875 -5.609375 C 4.046875 -5.609375 3.628906 -5.425781 3.296875 -5.0625 C 2.960938 -4.695312 2.726562 -4.164062 2.59375 -3.46875 L 1.921875 0 Z M 0.84375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 6.5625 -5.015625 C 6.863281 -5.472656 7.195312 -5.816406 7.5625 -6.046875 C 7.925781 -6.285156 8.328125 -6.40625 8.765625 -6.40625 C 9.410156 -6.40625 9.859375 -6.203125 10.109375 -5.796875 C 10.242188 -5.546875 10.3125 -5.222656 10.3125 -4.828125 C 10.3125 -4.578125 10.28125 -4.289062 10.21875 -3.96875 L 9.578125 -0.625 L 10.546875 -0.625 L 10.4375 0 L 8.375 0 L 9.125 -3.84375 C 9.1875 -4.144531 9.21875 -4.40625 9.21875 -4.625 C 9.21875 -4.863281 9.179688 -5.054688 9.109375 -5.203125 C 8.972656 -5.472656 8.6875 -5.609375 8.25 -5.609375 C 7.769531 -5.609375 7.367188 -5.425781 7.046875 -5.0625 C 6.722656 -4.695312 6.492188 -4.164062 6.359375 -3.46875 L 5.6875 0 L 4.609375 0 L 5.375 -3.875 C 5.425781 -4.164062 5.453125 -4.421875 5.453125 -4.640625 C 5.453125 -4.878906 5.414062 -5.066406 5.34375 -5.203125 C 5.207031 -5.472656 4.921875 -5.609375 4.484375 -5.609375 C 4.003906 -5.609375 3.601562 -5.425781 3.28125 -5.0625 C 2.957031 -4.695312 2.726562 -4.164062 2.59375 -3.46875 L 1.921875 0 L 0.84375 0 L 1.9375 -5.609375 L 0.90625 -5.609375 L 1.015625 -6.234375 L 3.125 -6.234375 L 2.921875 -5.125 C 3.191406 -5.539062 3.503906 -5.859375 3.859375 -6.078125 C 4.210938 -6.296875 4.582031 -6.40625 4.96875 -6.40625 C 5.457031 -6.40625 5.835938 -6.28125 6.109375 -6.03125 C 6.390625 -5.789062 6.539062 -5.453125 6.5625 -5.015625 Z M 6.5625 -5.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M -0.109375 0 L 0 -0.625 L 0.984375 -0.625 L 1.953125 -5.609375 L 0.921875 -5.609375 L 1.03125 -6.234375 L 8.0625 -6.234375 L 7.9375 -5.609375 L 6.921875 -5.609375 L 5.953125 -0.625 L 6.90625 -0.625 L 6.796875 0 L 3.8125 0 L 3.9375 -0.625 L 4.859375 -0.625 L 5.84375 -5.609375 L 3.03125 -5.609375 L 2.0625 -0.625 L 3 -0.625 L 2.875 0 Z M -0.109375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M -0.1875 0 L -0.078125 -0.625 L 1.046875 -0.625 L 2.5 -8.125 L 1.390625 -8.125 L 1.515625 -8.75 L 4.921875 -8.75 L 4.8125 -8.125 L 3.6875 -8.125 L 3.109375 -5.09375 L 7.640625 -5.09375 L 8.234375 -8.125 L 7.109375 -8.125 L 7.234375 -8.75 L 10.65625 -8.75 L 10.53125 -8.125 L 9.421875 -8.125 L 7.953125 -0.625 L 9.078125 -0.625 L 8.953125 0 L 5.53125 0 L 5.65625 -0.625 L 6.78125 -0.625 L 7.5 -4.390625 L 2.96875 -4.390625 L 2.234375 -0.625 L 3.34375 -0.625 L 3.234375 0 Z M -0.1875 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 8.296875 0 L 7.34375 0 L 6.71875 -7.109375 L 3.328125 0 L 2.375 0 L 1.65625 -8.125 L 0.78125 -8.125 L 0.90625 -8.75 L 4.109375 -8.75 L 3.984375 -8.125 L 2.890625 -8.125 L 3.453125 -1.65625 L 6.828125 -8.75 L 7.78125 -8.75 L 8.40625 -1.578125 L 11.515625 -8.125 L 10.5 -8.125 L 10.625 -8.75 L 13.15625 -8.75 L 13.03125 -8.125 L 12.171875 -8.125 Z M 8.296875 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1.0625 0 L 1.0625 -6.25 L 5.34375 -6.25 L 5.34375 0 Z M 5.203125 -0.15625 L 5.203125 -6.09375 L 1.203125 -6.09375 L 1.203125 -0.15625 Z M 5.203125 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 1.734375 11.59375 L 1.734375 -0.40625 L 3.375 -0.40625 L 3.375 0 L 2.0625 0 L 2.0625 11.1875 L 3.375 11.1875 L 3.375 11.59375 Z M 1.734375 11.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.078125 0 L 1.078125 -6.25 L 5.359375 -6.25 L 5.359375 0 Z M 5.21875 -0.15625 L 5.21875 -6.09375 L 1.203125 -6.09375 L 1.203125 -0.15625 Z M 5.21875 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 0.1875 11.59375 L 0.1875 11.1875 L 1.484375 11.1875 L 1.484375 0 L 0.1875 0 L 0.1875 -0.40625 L 1.828125 -0.40625 L 1.828125 11.59375 Z M 0.1875 11.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 0.59375 2.125 L 0.59375 -8.46875 L 6.59375 -8.46875 L 6.59375 2.125 Z M 1.265625 1.453125 L 5.9375 1.453125 L 5.9375 -7.78125 L 1.265625 -7.78125 Z M 1.265625 1.453125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 1.265625 -5.421875 L 8.78125 -5.421875 L 8.78125 -4.484375 L 1.265625 -4.484375 Z M 1.265625 -3.03125 L 8.78125 -3.03125 L 8.78125 -2.09375 L 1.265625 -2.09375 Z M 1.265625 -3.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 5.8125 -7.25 L 3.515625 -6.1875 L 5.8125 -5.09375 L 5.359375 -4.40625 L 3.328125 -5.671875 L 3.40625 -3.453125 L 2.609375 -3.453125 L 2.671875 -5.671875 L 0.640625 -4.40625 L 0.1875 -5.09375 L 2.484375 -6.171875 L 0.1875 -7.25 L 0.640625 -7.953125 L 2.671875 -6.671875 L 2.609375 -8.90625 L 3.40625 -8.90625 L 3.328125 -6.671875 L 5.359375 -7.953125 Z M 5.8125 -7.25 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 6.5 -3 L 1.859375 -3 L 1.859375 -2.953125 C 1.859375 -2.109375 2.015625 -1.472656 2.328125 -1.046875 C 2.648438 -0.617188 3.117188 -0.40625 3.734375 -0.40625 C 4.203125 -0.40625 4.585938 -0.53125 4.890625 -0.78125 C 5.191406 -1.03125 5.40625 -1.398438 5.53125 -1.890625 L 6.40625 -1.890625 C 6.226562 -1.203125 5.90625 -0.6875 5.4375 -0.34375 C 4.976562 0 4.375 0.171875 3.625 0.171875 C 2.707031 0.171875 1.972656 -0.125 1.421875 -0.71875 C 0.867188 -1.320312 0.59375 -2.125 0.59375 -3.125 C 0.59375 -4.101562 0.863281 -4.894531 1.40625 -5.5 C 1.957031 -6.101562 2.671875 -6.40625 3.546875 -6.40625 C 4.492188 -6.40625 5.21875 -6.113281 5.71875 -5.53125 C 6.21875 -4.945312 6.476562 -4.101562 6.5 -3 Z M 5.234375 -3.625 C 5.210938 -4.351562 5.054688 -4.898438 4.765625 -5.265625 C 4.484375 -5.628906 4.078125 -5.8125 3.546875 -5.8125 C 3.054688 -5.8125 2.664062 -5.625 2.375 -5.25 C 2.09375 -4.882812 1.921875 -4.34375 1.859375 -3.625 Z M 5.234375 -3.625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 3.5 -3.796875 L 4.796875 -5.609375 L 3.96875 -5.609375 L 3.96875 -6.234375 L 6.359375 -6.234375 L 6.359375 -5.609375 L 5.53125 -5.609375 L 3.859375 -3.296875 L 5.8125 -0.625 L 6.625 -0.625 L 6.625 0 L 3.75 0 L 3.75 -0.625 L 4.53125 -0.625 L 3.1875 -2.484375 L 1.828125 -0.625 L 2.625 -0.625 L 2.625 0 L 0.265625 0 L 0.265625 -0.625 L 1.09375 -0.625 L 2.8125 -2.984375 L 0.921875 -5.609375 L 0.140625 -5.609375 L 0.140625 -6.234375 L 2.9375 -6.234375 L 2.9375 -5.609375 L 2.1875 -5.609375 Z M 3.5 -3.796875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 2.46875 -3.421875 L 2.46875 -2.8125 C 2.46875 -2.0625 2.609375 -1.488281 2.890625 -1.09375 C 3.179688 -0.695312 3.597656 -0.5 4.140625 -0.5 C 4.691406 -0.5 5.109375 -0.71875 5.390625 -1.15625 C 5.671875 -1.601562 5.8125 -2.257812 5.8125 -3.125 C 5.8125 -3.976562 5.671875 -4.625 5.390625 -5.0625 C 5.109375 -5.5 4.691406 -5.71875 4.140625 -5.71875 C 3.597656 -5.71875 3.179688 -5.519531 2.890625 -5.125 C 2.609375 -4.738281 2.46875 -4.171875 2.46875 -3.421875 Z M 1.390625 -5.609375 L 0.34375 -5.609375 L 0.34375 -6.234375 L 2.46875 -6.234375 L 2.46875 -5.25 C 2.675781 -5.644531 2.941406 -5.9375 3.265625 -6.125 C 3.585938 -6.3125 3.992188 -6.40625 4.484375 -6.40625 C 5.242188 -6.40625 5.863281 -6.097656 6.34375 -5.484375 C 6.832031 -4.878906 7.078125 -4.09375 7.078125 -3.125 C 7.078125 -2.144531 6.832031 -1.347656 6.34375 -0.734375 C 5.863281 -0.128906 5.242188 0.171875 4.484375 0.171875 C 3.992188 0.171875 3.585938 0.078125 3.265625 -0.109375 C 2.941406 -0.296875 2.675781 -0.582031 2.46875 -0.96875 L 2.46875 1.875 L 3.484375 1.875 L 3.484375 2.5 L 0.34375 2.5 L 0.34375 1.875 L 1.390625 1.875 Z M 1.390625 -5.609375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 1.53125 -6.65625 L 0.875 -6.65625 L 0.875 -8.21875 C 1.289062 -8.445312 1.710938 -8.617188 2.140625 -8.734375 C 2.566406 -8.847656 2.984375 -8.90625 3.390625 -8.90625 C 4.296875 -8.90625 5.007812 -8.679688 5.53125 -8.234375 C 6.0625 -7.796875 6.328125 -7.203125 6.328125 -6.453125 C 6.328125 -5.585938 5.734375 -4.5625 4.546875 -3.375 C 4.453125 -3.28125 4.378906 -3.210938 4.328125 -3.171875 L 2.125 -0.96875 L 5.765625 -0.96875 L 5.765625 -2.046875 L 6.453125 -2.046875 L 6.453125 0 L 0.8125 0 L 0.8125 -0.640625 L 3.46875 -3.28125 C 4.050781 -3.875 4.46875 -4.414062 4.71875 -4.90625 C 4.96875 -5.394531 5.09375 -5.910156 5.09375 -6.453125 C 5.09375 -7.035156 4.9375 -7.492188 4.625 -7.828125 C 4.320312 -8.160156 3.90625 -8.328125 3.375 -8.328125 C 2.8125 -8.328125 2.378906 -8.1875 2.078125 -7.90625 C 1.773438 -7.632812 1.59375 -7.21875 1.53125 -6.65625 Z M 1.53125 -6.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 5.5 -7.53125 L 5.5 -4.234375 L 8.78125 -4.234375 L 8.78125 -3.28125 L 5.5 -3.28125 L 5.5 0 L 4.5625 0 L 4.5625 -3.28125 L 1.265625 -3.28125 L 1.265625 -4.234375 L 4.5625 -4.234375 L 4.5625 -7.53125 Z M 5.5 -7.53125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 1.5 0 L 1.5 -7.5 L 7.5 -7.5 L 7.5 0 Z M 7.3125 -0.1875 L 7.3125 -7.3125 L 1.6875 -7.3125 L 1.6875 -0.1875 Z M 7.3125 -0.1875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 0.796875 16.796875 C 0.710938 16.796875 0.671875 16.753906 0.671875 16.671875 C 0.671875 16.640625 0.679688 16.609375 0.703125 16.578125 L 7.046875 9.203125 L 0.703125 0.53125 C 0.679688 0.507812 0.671875 0.488281 0.671875 0.46875 L 0.671875 0.109375 C 0.671875 0.078125 0.679688 0.0507812 0.703125 0.03125 C 0.734375 0.0078125 0.765625 0 0.796875 0 L 15.1875 0 L 16.640625 3.375 L 16.296875 3.375 C 15.921875 2.519531 15.296875 1.882812 14.421875 1.46875 C 13.554688 1.0625 12.648438 0.8125 11.703125 0.71875 C 10.753906 0.625 9.65625 0.578125 8.40625 0.578125 L 2.859375 0.578125 L 8.515625 8.3125 C 8.535156 8.34375 8.546875 8.375 8.546875 8.40625 C 8.546875 8.425781 8.535156 8.453125 8.515625 8.484375 L 2.296875 15.734375 L 8.515625 15.734375 C 9.742188 15.734375 10.832031 15.6875 11.78125 15.59375 C 12.738281 15.5 13.644531 15.242188 14.5 14.828125 C 15.363281 14.410156 15.960938 13.78125 16.296875 12.9375 L 16.640625 12.9375 L 15.1875 16.796875 Z M 0.796875 16.796875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-0">
+<path style="stroke:none;" d="M 0.421875 1.5 L 0.421875 -6 L 4.6875 -6 L 4.6875 1.5 Z M 0.90625 1.03125 L 4.203125 1.03125 L 4.203125 -5.53125 L 0.90625 -5.53125 Z M 0.90625 1.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-1">
+<path style="stroke:none;" d="M 4.65625 -3.5625 C 4.875 -3.882812 5.113281 -4.128906 5.375 -4.296875 C 5.632812 -4.460938 5.914062 -4.546875 6.21875 -4.546875 C 6.675781 -4.546875 6.992188 -4.398438 7.171875 -4.109375 C 7.273438 -3.929688 7.328125 -3.707031 7.328125 -3.4375 C 7.328125 -3.25 7.300781 -3.039062 7.25 -2.8125 L 6.796875 -0.4375 L 7.484375 -0.4375 L 7.40625 0 L 5.953125 0 L 6.46875 -2.71875 C 6.507812 -2.9375 6.53125 -3.125 6.53125 -3.28125 C 6.53125 -3.445312 6.507812 -3.582031 6.46875 -3.6875 C 6.363281 -3.875 6.160156 -3.96875 5.859375 -3.96875 C 5.515625 -3.96875 5.226562 -3.835938 5 -3.578125 C 4.769531 -3.328125 4.609375 -2.957031 4.515625 -2.46875 L 4.03125 0 L 3.265625 0 L 3.8125 -2.75 C 3.84375 -2.957031 3.859375 -3.132812 3.859375 -3.28125 C 3.859375 -3.457031 3.835938 -3.59375 3.796875 -3.6875 C 3.691406 -3.875 3.488281 -3.96875 3.1875 -3.96875 C 2.84375 -3.96875 2.554688 -3.835938 2.328125 -3.578125 C 2.097656 -3.328125 1.9375 -2.957031 1.84375 -2.46875 L 1.359375 0 L 0.59375 0 L 1.375 -3.984375 L 0.640625 -3.984375 L 0.71875 -4.421875 L 2.21875 -4.421875 L 2.078125 -3.640625 C 2.265625 -3.929688 2.484375 -4.15625 2.734375 -4.3125 C 2.984375 -4.46875 3.25 -4.546875 3.53125 -4.546875 C 3.875 -4.546875 4.144531 -4.457031 4.34375 -4.28125 C 4.539062 -4.113281 4.644531 -3.875 4.65625 -3.5625 Z M 4.65625 -3.5625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-2">
+<path style="stroke:none;" d="M -0.140625 0 L -0.046875 -0.4375 L 0.734375 -0.4375 L 1.78125 -5.765625 L 0.984375 -5.765625 L 1.078125 -6.203125 L 3.5 -6.203125 L 3.40625 -5.765625 L 2.625 -5.765625 L 2.203125 -3.625 L 5.421875 -3.625 L 5.84375 -5.765625 L 5.046875 -5.765625 L 5.140625 -6.203125 L 7.5625 -6.203125 L 7.46875 -5.765625 L 6.6875 -5.765625 L 5.640625 -0.4375 L 6.4375 -0.4375 L 6.359375 0 L 3.921875 0 L 4.015625 -0.4375 L 4.8125 -0.4375 L 5.328125 -3.109375 L 2.109375 -3.109375 L 1.578125 -0.4375 L 2.375 -0.4375 L 2.296875 0 Z M -0.140625 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-3">
+<path style="stroke:none;" d="M 0.59375 0 L 1.375 -3.96875 L 0.640625 -3.96875 L 0.71875 -4.421875 L 2.21875 -4.421875 L 2.078125 -3.640625 C 2.273438 -3.929688 2.5 -4.15625 2.75 -4.3125 C 3.007812 -4.46875 3.285156 -4.546875 3.578125 -4.546875 C 4.066406 -4.546875 4.398438 -4.40625 4.578125 -4.125 C 4.679688 -3.945312 4.734375 -3.71875 4.734375 -3.4375 C 4.734375 -3.257812 4.710938 -3.050781 4.671875 -2.8125 L 4.203125 -0.4375 L 4.890625 -0.4375 L 4.8125 0 L 3.359375 0 L 3.859375 -2.5625 C 3.910156 -2.851562 3.9375 -3.09375 3.9375 -3.28125 C 3.9375 -3.445312 3.914062 -3.582031 3.875 -3.6875 C 3.78125 -3.882812 3.566406 -3.984375 3.234375 -3.984375 C 2.867188 -3.984375 2.566406 -3.851562 2.328125 -3.59375 C 2.097656 -3.332031 1.9375 -2.957031 1.84375 -2.46875 L 1.359375 0 Z M 0.59375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-4">
+<path style="stroke:none;" d="M 5.890625 0 L 5.203125 0 L 4.765625 -5.046875 L 2.359375 0 L 1.6875 0 L 1.171875 -5.765625 L 0.5625 -5.765625 L 0.640625 -6.203125 L 2.90625 -6.203125 L 2.828125 -5.765625 L 2.046875 -5.765625 L 2.453125 -1.171875 L 4.84375 -6.203125 L 5.515625 -6.203125 L 5.96875 -1.125 L 8.171875 -5.765625 L 7.453125 -5.765625 L 7.546875 -6.203125 L 9.328125 -6.203125 L 9.25 -5.765625 L 8.625 -5.765625 Z M 5.890625 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-0">
+<path style="stroke:none;" d="M 0.421875 1.5 L 0.421875 -6 L 4.6875 -6 L 4.6875 1.5 Z M 0.90625 1.03125 L 4.203125 1.03125 L 4.203125 -5.53125 L 0.90625 -5.53125 Z M 0.90625 1.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-1">
+<path style="stroke:none;" d="M 0.90625 -3.84375 L 6.234375 -3.84375 L 6.234375 -3.1875 L 0.90625 -3.1875 Z M 0.90625 -2.15625 L 6.234375 -2.15625 L 6.234375 -1.484375 L 0.90625 -1.484375 Z M 0.90625 -2.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-2">
+<path style="stroke:none;" d="M 2.703125 -0.296875 C 3.128906 -0.296875 3.445312 -0.523438 3.65625 -0.984375 C 3.863281 -1.453125 3.96875 -2.15625 3.96875 -3.09375 C 3.96875 -4.039062 3.863281 -4.742188 3.65625 -5.203125 C 3.445312 -5.671875 3.128906 -5.90625 2.703125 -5.90625 C 2.285156 -5.90625 1.96875 -5.671875 1.75 -5.203125 C 1.539062 -4.742188 1.4375 -4.039062 1.4375 -3.09375 C 1.4375 -2.15625 1.539062 -1.453125 1.75 -0.984375 C 1.96875 -0.523438 2.285156 -0.296875 2.703125 -0.296875 Z M 2.703125 0.125 C 2.035156 0.125 1.507812 -0.15625 1.125 -0.71875 C 0.75 -1.289062 0.5625 -2.082031 0.5625 -3.09375 C 0.5625 -4.113281 0.75 -4.90625 1.125 -5.46875 C 1.507812 -6.03125 2.035156 -6.3125 2.703125 -6.3125 C 3.378906 -6.3125 3.90625 -6.03125 4.28125 -5.46875 C 4.664062 -4.90625 4.859375 -4.113281 4.859375 -3.09375 C 4.859375 -2.082031 4.664062 -1.289062 4.28125 -0.71875 C 3.90625 -0.15625 3.378906 0.125 2.703125 0.125 Z M 2.703125 0.125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-3">
+<path style="stroke:none;" d="M 0.90625 -3 L 6.234375 -3 L 6.234375 -2.328125 L 0.90625 -2.328125 Z M 0.90625 -3 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-4">
+<path style="stroke:none;" d="M 1.203125 0 L 1.203125 -0.4375 L 2.296875 -0.4375 L 2.296875 -5.609375 L 1.046875 -4.796875 L 1.046875 -5.34375 L 2.546875 -6.3125 L 3.125 -6.3125 L 3.125 -0.4375 L 4.203125 -0.4375 L 4.203125 0 Z M 1.203125 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-0">
+<path style="stroke:none;" d="M 1.5 0 L 1.5 -6.265625 L 7.5 -6.265625 L 7.5 0 Z M 7.3125 -0.15625 L 7.3125 -6.109375 L 1.6875 -6.109375 L 1.6875 -0.15625 Z M 7.3125 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-1">
+<path style="stroke:none;" d="M 8.5625 29.65625 C 7.457031 28.675781 6.53125 27.597656 5.78125 26.421875 C 5.039062 25.253906 4.453125 24.023438 4.015625 22.734375 C 3.585938 21.453125 3.28125 20.132812 3.09375 18.78125 C 2.914062 17.425781 2.828125 16.046875 2.828125 14.640625 C 2.828125 13.234375 2.914062 11.851562 3.09375 10.5 C 3.28125 9.144531 3.585938 7.820312 4.015625 6.53125 C 4.453125 5.238281 5.039062 4.003906 5.78125 2.828125 C 6.53125 1.660156 7.457031 0.59375 8.5625 -0.375 C 8.613281 -0.394531 8.644531 -0.40625 8.65625 -0.40625 L 9 -0.40625 C 9.019531 -0.40625 9.039062 -0.394531 9.0625 -0.375 C 9.082031 -0.351562 9.09375 -0.332031 9.09375 -0.3125 C 9.09375 -0.28125 9.085938 -0.257812 9.078125 -0.25 C 8.066406 0.738281 7.226562 1.820312 6.5625 3 C 5.90625 4.175781 5.394531 5.398438 5.03125 6.671875 C 4.664062 7.953125 4.410156 9.238281 4.265625 10.53125 C 4.117188 11.832031 4.046875 13.203125 4.046875 14.640625 C 4.046875 16.078125 4.117188 17.441406 4.265625 18.734375 C 4.410156 20.023438 4.664062 21.3125 5.03125 22.59375 C 5.394531 23.875 5.90625 25.097656 6.5625 26.265625 C 7.226562 27.441406 8.066406 28.53125 9.078125 29.53125 C 9.085938 29.539062 9.09375 29.5625 9.09375 29.59375 C 9.09375 29.613281 9.082031 29.632812 9.0625 29.65625 C 9.039062 29.675781 9.019531 29.6875 9 29.6875 L 8.65625 29.6875 C 8.644531 29.6875 8.628906 29.679688 8.609375 29.671875 C 8.597656 29.660156 8.582031 29.65625 8.5625 29.65625 Z M 8.5625 29.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-2">
+<path style="stroke:none;" d="M 0.5 29.6875 C 0.4375 29.6875 0.40625 29.65625 0.40625 29.59375 C 0.40625 29.5625 0.410156 29.539062 0.421875 29.53125 C 1.410156 28.550781 2.238281 27.46875 2.90625 26.28125 C 3.582031 25.09375 4.101562 23.859375 4.46875 22.578125 C 4.832031 21.304688 5.085938 20.023438 5.234375 18.734375 C 5.378906 17.441406 5.453125 16.078125 5.453125 14.640625 C 5.453125 13.203125 5.378906 11.832031 5.234375 10.53125 C 5.085938 9.238281 4.832031 7.957031 4.46875 6.6875 C 4.101562 5.414062 3.582031 4.179688 2.90625 2.984375 C 2.238281 1.796875 1.410156 0.71875 0.421875 -0.25 C 0.410156 -0.257812 0.40625 -0.28125 0.40625 -0.3125 C 0.40625 -0.375 0.4375 -0.40625 0.5 -0.40625 L 0.84375 -0.40625 C 0.851562 -0.40625 0.878906 -0.394531 0.921875 -0.375 C 2.023438 0.582031 2.953125 1.648438 3.703125 2.828125 C 4.453125 4.015625 5.039062 5.253906 5.46875 6.546875 C 5.90625 7.847656 6.210938 9.160156 6.390625 10.484375 C 6.566406 11.816406 6.65625 13.203125 6.65625 14.640625 C 6.65625 16.078125 6.566406 17.457031 6.390625 18.78125 C 6.210938 20.113281 5.90625 21.425781 5.46875 22.71875 C 5.039062 24.019531 4.453125 25.257812 3.703125 26.4375 C 2.953125 27.613281 2.023438 28.6875 0.921875 29.65625 C 0.878906 29.675781 0.851562 29.6875 0.84375 29.6875 Z M 0.5 29.6875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph8-0">
+<path style="stroke:none;" d="M 1.421875 0 L 1.421875 -6.265625 L 7.09375 -6.265625 L 7.09375 0 Z M 6.90625 -0.15625 L 6.90625 -6.109375 L 1.59375 -6.109375 L 1.59375 -0.15625 Z M 6.90625 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph8-1">
+<path style="stroke:none;" d="M 8.09375 29.65625 C 7.050781 28.675781 6.175781 27.597656 5.46875 26.421875 C 4.769531 25.253906 4.21875 24.023438 3.8125 22.734375 C 3.40625 21.453125 3.113281 20.132812 2.9375 18.78125 C 2.757812 17.425781 2.671875 16.046875 2.671875 14.640625 C 2.671875 13.234375 2.757812 11.851562 2.9375 10.5 C 3.113281 9.144531 3.40625 7.820312 3.8125 6.53125 C 4.21875 5.238281 4.769531 4.003906 5.46875 2.828125 C 6.175781 1.660156 7.050781 0.59375 8.09375 -0.375 C 8.144531 -0.394531 8.175781 -0.40625 8.1875 -0.40625 L 8.515625 -0.40625 C 8.535156 -0.40625 8.550781 -0.394531 8.5625 -0.375 C 8.582031 -0.351562 8.59375 -0.332031 8.59375 -0.3125 C 8.59375 -0.28125 8.585938 -0.257812 8.578125 -0.25 C 7.628906 0.738281 6.835938 1.820312 6.203125 3 C 5.578125 4.175781 5.09375 5.398438 4.75 6.671875 C 4.40625 7.953125 4.164062 9.238281 4.03125 10.53125 C 3.894531 11.832031 3.828125 13.203125 3.828125 14.640625 C 3.828125 16.078125 3.894531 17.441406 4.03125 18.734375 C 4.164062 20.023438 4.40625 21.3125 4.75 22.59375 C 5.101562 23.875 5.59375 25.097656 6.21875 26.265625 C 6.84375 27.441406 7.628906 28.53125 8.578125 29.53125 C 8.585938 29.539062 8.59375 29.5625 8.59375 29.59375 C 8.59375 29.613281 8.582031 29.632812 8.5625 29.65625 C 8.539062 29.675781 8.523438 29.6875 8.515625 29.6875 L 8.1875 29.6875 C 8.175781 29.6875 8.160156 29.679688 8.140625 29.671875 C 8.128906 29.660156 8.113281 29.65625 8.09375 29.65625 Z M 8.09375 29.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph9-0">
+<path style="stroke:none;" d="M 1.421875 0 L 1.421875 -6.265625 L 7.078125 -6.265625 L 7.078125 0 Z M 6.890625 -0.15625 L 6.890625 -6.109375 L 1.59375 -6.109375 L 1.59375 -0.15625 Z M 6.890625 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph9-1">
+<path style="stroke:none;" d="M 0.46875 29.6875 C 0.40625 29.6875 0.375 29.65625 0.375 29.59375 C 0.375 29.5625 0.378906 29.539062 0.390625 29.53125 C 1.328125 28.550781 2.113281 27.46875 2.75 26.28125 C 3.382812 25.09375 3.875 23.859375 4.21875 22.578125 C 4.5625 21.304688 4.800781 20.023438 4.9375 18.734375 C 5.070312 17.441406 5.140625 16.078125 5.140625 14.640625 C 5.140625 13.203125 5.070312 11.832031 4.9375 10.53125 C 4.800781 9.238281 4.5625 7.957031 4.21875 6.6875 C 3.875 5.414062 3.382812 4.179688 2.75 2.984375 C 2.113281 1.796875 1.328125 0.71875 0.390625 -0.25 C 0.378906 -0.257812 0.375 -0.28125 0.375 -0.3125 C 0.375 -0.375 0.40625 -0.40625 0.46875 -0.40625 L 0.796875 -0.40625 C 0.804688 -0.40625 0.832031 -0.394531 0.875 -0.375 C 1.90625 0.582031 2.773438 1.648438 3.484375 2.828125 C 4.203125 4.015625 4.765625 5.253906 5.171875 6.546875 C 5.578125 7.847656 5.863281 9.160156 6.03125 10.484375 C 6.207031 11.816406 6.296875 13.203125 6.296875 14.640625 C 6.296875 16.078125 6.207031 17.457031 6.03125 18.78125 C 5.863281 20.113281 5.578125 21.425781 5.171875 22.71875 C 4.765625 24.019531 4.207031 25.257812 3.5 26.4375 C 2.789062 27.613281 1.914062 28.6875 0.875 29.65625 C 0.832031 29.675781 0.804688 29.6875 0.796875 29.6875 Z M 0.46875 29.6875 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="0.15625" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="7.378906" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-3" x="14.941406" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-4" x="20.597656" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="28.511719" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-3" x="36.074219" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="40.519531" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="44.640625" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="52.414062" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="53.855469" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="57.878906" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="69.050781" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-1" x="74.277344" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph4-1" x="91.417969" y="10.880859"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-1" x="86.9375" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-1" x="97.804688" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-2" x="107.757812" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-2" x="88.492188" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-3" x="98.769531" y="6.326172"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-4" x="107.578125" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph4-1" x="119.15625" y="10.880859"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-3" x="115.972656" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-1" x="124.242188" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-2" x="134.199219" y="36.822266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-4" x="115" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-3" x="127.046875" y="6.326172"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-4" x="135.855469" y="6.322266"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="142.597656" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="146.328125" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-4" x="154.035156" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="161.949219" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-3" x="169.511719" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="173.957031" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-9" x="177.8125" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="189.507812" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="190.945312" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="194.804688" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="202.839844" y="13.681787"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-2" x="207.8125" y="23.041016"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-3" x="216.355469" y="23.044922"/>
+ <use xlink:href="#glyph3-4" x="223.355469" y="23.044922"/>
+ <use xlink:href="#glyph3-5" x="230.355469" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph7-1" x="235.941406" y="4.634631"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-6" x="245.550781" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-10" x="253.445312" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="262.234375" y="23.044922"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph8-1" x="264.128906" y="4.634631"/>
+</g>
+<path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 274.722656 -3.763344 L 293.140625 -3.763344 " transform="matrix(1,0,0,1,0,23.044594)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-9" x="274.546875" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="285.847656" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-11" x="278.695312" y="31.666016"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-7" x="296.535156" y="23.041016"/>
+</g>
+<path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 309.984375 -3.763344 L 328.050781 -3.763344 " transform="matrix(1,0,0,1,0,23.044594)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="309.808594" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="317.359375" y="13.349609"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-12" x="312.050781" y="31.666016"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph9-1" x="329.675781" y="4.634631"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph7-2" x="336.898438" y="4.634631"/>
+</g>
+</g>
+</svg>
diff --git a/tools/dictionary.dic b/tools/dictionary.dic
index 94ef782..29be61e 100644
--- a/tools/dictionary.dic
+++ b/tools/dictionary.dic
@@ -20,10 +20,14 @@ CPUs
denormalizing
DEPTHWISE
Elementwise
+FFT
+fft
foreach
Fulbourn
GPUs
Hadamard
+Hermitian
+imag
INTDIV
licence
Licence
@@ -49,12 +53,14 @@ README
Rescale
RESCALE
rescaled
+RFFT
RSQRT
sigmoid
Sigmoid
SIGMOID
SIMD
subtensor
+svg
tanh
TANH
TensorFlow
diff --git a/tools/get_descriptions.py b/tools/get_descriptions.py
index 3f2ee05..beded87 100755
--- a/tools/get_descriptions.py
+++ b/tools/get_descriptions.py
@@ -49,5 +49,8 @@ for name in args.filenames:
# not useful there
if re.match(r'[\[\*]', text):
in_description = False
+ # skip comments
+ elif re.match(r'\w*\/\/', text):
+ continue
else:
print(text)
diff --git a/tosa_spec.adoc b/tosa_spec.adoc
index 130d98e..1b4eecd 100644
--- a/tosa_spec.adoc
+++ b/tosa_spec.adoc
@@ -12,6 +12,7 @@
:toc: left
:toclevels: 3
:source-highliter: coderay
+:imagesdir: figures
include::chapters/tosa_license.adoc[]