diff --git a/docs/_sass/custom/custom.scss b/docs/_sass/custom/custom.scss index d0f66e2d2aa3d469a1a751c59fd22626326da3d9..4676b4557d806856ae4e01e2390d9424ba63c491 100644 --- a/docs/_sass/custom/custom.scss +++ b/docs/_sass/custom/custom.scss @@ -1,3 +1,17 @@ +.main-content a { + white-space: normal; +} + .theodolite-logo { height: 18em; -} \ No newline at end of file +} + +.MJXc-display { + overflow-x: auto; +} + +table.fixed-colums { + th, td { + width: 1%; + } +} diff --git a/docs/assets/images/capacity.svg b/docs/assets/images/capacity.svg new file mode 100644 index 0000000000000000000000000000000000000000..8f2dd3edf4ed75ed5a43f36bae242f1716db2e65 --- /dev/null +++ b/docs/assets/images/capacity.svg @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="329.74pt" height="242.39287pt" viewBox="0 0 329.74 242.39287"> +<style> + text { + font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; + } +</style> +<g enable-background="new"> +<g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 0 0 L 329.74 0 L 329.74 242.39287 L 0 242.39287 Z " fill="#ffffff"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z " fill="#ffffff"/> +<clipPath id="cp0"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp0)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 81.19754 39.496877 L 81.19754 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 81.19754 39.496877 L 81.19754 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 81.19754 39.496877 L 81.19754 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="78.01785">2</tspan></text> +<clipPath id="cp1"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp1)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 109.84353 39.496877 L 109.84353 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 109.84353 39.496877 L 109.84353 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 109.84353 39.496877 L 109.84353 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="106.66384">4</tspan></text> +<clipPath id="cp2"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp2)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 138.48952 39.496877 L 138.48952 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 138.48952 39.496877 L 138.48952 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 138.48952 39.496877 L 138.48952 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="135.30983">6</tspan></text> +<clipPath id="cp3"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp3)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 167.13552 39.496877 L 167.13552 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 167.13552 39.496877 L 167.13552 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 167.13552 39.496877 L 167.13552 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="163.95583">8</tspan></text> +<clipPath id="cp4"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp4)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 195.7815 39.496877 L 195.7815 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 195.7815 39.496877 L 195.7815 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 195.7815 39.496877 L 195.7815 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="189.42212">10</tspan></text> +<clipPath id="cp5"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp5)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 224.42749 39.496877 L 224.42749 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 224.42749 39.496877 L 224.42749 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 224.42749 39.496877 L 224.42749 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="218.06812">12</tspan></text> +<clipPath id="cp6"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp6)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 253.07347 39.496877 L 253.07347 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 253.07347 39.496877 L 253.07347 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 253.07347 39.496877 L 253.07347 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="246.7141">14</tspan></text> +<clipPath id="cp7"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp7)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 281.71946 39.496877 L 281.71946 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 281.71946 39.496877 L 281.71946 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 281.71946 39.496877 L 281.71946 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="275.36009">16</tspan></text> +<clipPath id="cp8"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp8)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 310.36546 39.496877 L 310.36546 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 310.36546 39.496877 L 310.36546 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 310.36546 39.496877 L 310.36546 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="304.00608">18</tspan></text> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="11" font-family=""><tspan y="-9.7" x="127.04969">number of instances</tspan></text> +<clipPath id="cp9"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp9)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 39.496877 L 322.54 39.496877 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 51.2 39.496877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 39.496877 L 51.2 39.496877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-35.7" x="37.54375">0k</tspan></text> +<clipPath id="cp10"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp10)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 62.93352 L 322.54 62.93352 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 62.93352 L 51.2 62.93352 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 62.93352 L 51.2 62.93352 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-59.136648" x="31.184376">50k</tspan></text> +<clipPath id="cp11"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp11)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 86.37017 L 322.54 86.37017 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 86.37017 L 51.2 86.37017 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 86.37017 L 51.2 86.37017 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-82.573299" x="24.825">100k</tspan></text> +<clipPath id="cp12"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp12)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 109.806819 L 322.54 109.806819 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 109.806819 L 51.2 109.806819 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 109.806819 L 51.2 109.806819 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-106.00994" x="24.825">150k</tspan></text> +<clipPath id="cp13"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp13)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 133.24347 L 322.54 133.24347 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 133.24347 L 51.2 133.24347 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 133.24347 L 51.2 133.24347 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-129.44658" x="24.825">200k</tspan></text> +<clipPath id="cp14"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp14)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 156.68012 L 322.54 156.68012 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 156.68012 L 51.2 156.68012 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 156.68012 L 51.2 156.68012 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-152.88324" x="24.825">250k</tspan></text> +<clipPath id="cp15"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp15)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 180.11676 L 322.54 180.11676 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 180.11676 L 51.2 180.11676 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 180.11676 L 51.2 180.11676 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-176.31989" x="24.825">300k</tspan></text> +<clipPath id="cp16"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp16)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 203.5534 L 322.54 203.5534 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 203.5534 L 51.2 203.5534 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 203.5534 L 51.2 203.5534 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-199.75653" x="24.825">350k</tspan></text> +<clipPath id="cp17"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp17)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 54.7 226.99005 L 322.54 226.99005 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 226.99005 L 51.2 226.99005 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 54.7 226.99005 L 51.2 226.99005 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-223.19318" x="24.825">400k</tspan></text> +<text fill="#686868" xml:space="preserve" transform="matrix(0 -1 1 0 0 242.39287)" font-size="11" font-family=""><tspan y="16.325" x="88.81362">messages/second</tspan></text> +<clipPath id="cp18"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp18)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e24a33" d="M 66.87454 62.93352 L 81.19754 86.37017 L 95.52054 98.08849 L 109.84353 109.806819 L 124.16653 121.52514 L 138.48952 133.24347 L 152.81252 144.96179 L 167.13552 156.68012 L 181.4585 168.39844 L 195.7815 180.11676 L 210.10449 180.11676 L 224.42749 191.83509 L 238.75049 203.5534 L 253.07347 203.5534 L 267.39649 203.5534 L 281.71946 215.27173 L 296.04246 203.5534 L 310.36546 203.5534 "/> +<clipPath id="cp19"> +<path transform="matrix(1,0,0,-1,66.87454,179.45935)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp19)"> +<path transform="matrix(1,0,0,-1,66.87454,179.45935)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,66.87454,179.45935)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp20"> +<path transform="matrix(1,0,0,-1,81.19754,156.0227)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp20)"> +<path transform="matrix(1,0,0,-1,81.19754,156.0227)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,81.19754,156.0227)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp21"> +<path transform="matrix(1,0,0,-1,95.52054,144.30438)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp21)"> +<path transform="matrix(1,0,0,-1,95.52054,144.30438)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,95.52054,144.30438)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp22"> +<path transform="matrix(1,0,0,-1,109.84354,132.58606)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp22)"> +<path transform="matrix(1,0,0,-1,109.84354,132.58606)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,109.84354,132.58606)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp23"> +<path transform="matrix(1,0,0,-1,124.166538,120.86774)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp23)"> +<path transform="matrix(1,0,0,-1,124.166538,120.86774)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,124.166538,120.86774)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp24"> +<path transform="matrix(1,0,0,-1,138.48954,109.149417)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp24)"> +<path transform="matrix(1,0,0,-1,138.48954,109.149417)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,138.48954,109.149417)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp25"> +<path transform="matrix(1,0,0,-1,152.81253,97.43109)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp25)"> +<path transform="matrix(1,0,0,-1,152.81253,97.43109)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,152.81253,97.43109)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp26"> +<path transform="matrix(1,0,0,-1,167.13553,85.71277)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp26)"> +<path transform="matrix(1,0,0,-1,167.13553,85.71277)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,167.13553,85.71277)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp27"> +<path transform="matrix(1,0,0,-1,181.45853,73.994449)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp27)"> +<path transform="matrix(1,0,0,-1,181.45853,73.994449)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,181.45853,73.994449)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp28"> +<path transform="matrix(1,0,0,-1,195.78153,62.276124)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp28)"> +<path transform="matrix(1,0,0,-1,195.78153,62.276124)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,195.78153,62.276124)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp29"> +<path transform="matrix(1,0,0,-1,210.10453,62.276124)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp29)"> +<path transform="matrix(1,0,0,-1,210.10453,62.276124)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,210.10453,62.276124)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp30"> +<path transform="matrix(1,0,0,-1,224.42752,50.5578)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp30)"> +<path transform="matrix(1,0,0,-1,224.42752,50.5578)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,224.42752,50.5578)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp31"> +<path transform="matrix(1,0,0,-1,238.75052,38.839479)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp31)"> +<path transform="matrix(1,0,0,-1,238.75052,38.839479)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,238.75052,38.839479)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp32"> +<path transform="matrix(1,0,0,-1,253.07352,38.839479)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp32)"> +<path transform="matrix(1,0,0,-1,253.07352,38.839479)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,253.07352,38.839479)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp33"> +<path transform="matrix(1,0,0,-1,267.3965,38.839479)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp33)"> +<path transform="matrix(1,0,0,-1,267.3965,38.839479)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,267.3965,38.839479)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp34"> +<path transform="matrix(1,0,0,-1,281.7195,27.121155)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp34)"> +<path transform="matrix(1,0,0,-1,281.7195,27.121155)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,281.7195,27.121155)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp35"> +<path transform="matrix(1,0,0,-1,296.0425,38.839479)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp35)"> +<path transform="matrix(1,0,0,-1,296.0425,38.839479)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,296.0425,38.839479)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp36"> +<path transform="matrix(1,0,0,-1,310.3655,38.839479)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp36)"> +<path transform="matrix(1,0,0,-1,310.3655,38.839479)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,310.3655,38.839479)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +</g> +<clipPath id="cp37"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 54.7 39.496877 L 322.54 39.496877 L 322.54 235.19287 L 54.7 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp37)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#348abd" d="M 66.87454 62.93352 L 81.19754 74.65185 L 95.52054 98.08849 L 109.84353 109.806819 L 124.16653 133.24347 L 138.48952 156.68012 L 152.81252 133.24347 L 167.13552 203.5534 L 181.4585 180.11676 L 195.7815 226.99005 L 210.10449 191.83509 L 224.42749 203.5534 L 238.75049 226.99005 "/> +<clipPath id="cp38"> +<path transform="matrix(1,0,0,-1,66.87454,179.45935)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp38)"> +<path transform="matrix(1,0,0,-1,66.87454,179.45935)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,66.87454,179.45935)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp39"> +<path transform="matrix(1,0,0,-1,81.19754,167.74103)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp39)"> +<path transform="matrix(1,0,0,-1,81.19754,167.74103)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,81.19754,167.74103)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp40"> +<path transform="matrix(1,0,0,-1,95.52054,144.30438)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp40)"> +<path transform="matrix(1,0,0,-1,95.52054,144.30438)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,95.52054,144.30438)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp41"> +<path transform="matrix(1,0,0,-1,109.84354,132.58606)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp41)"> +<path transform="matrix(1,0,0,-1,109.84354,132.58606)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,109.84354,132.58606)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp42"> +<path transform="matrix(1,0,0,-1,124.166538,109.149417)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp42)"> +<path transform="matrix(1,0,0,-1,124.166538,109.149417)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,124.166538,109.149417)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp43"> +<path transform="matrix(1,0,0,-1,138.48954,85.71277)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp43)"> +<path transform="matrix(1,0,0,-1,138.48954,85.71277)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,138.48954,85.71277)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp44"> +<path transform="matrix(1,0,0,-1,152.81253,109.149417)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp44)"> +<path transform="matrix(1,0,0,-1,152.81253,109.149417)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,152.81253,109.149417)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp45"> +<path transform="matrix(1,0,0,-1,167.13553,38.839479)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp45)"> +<path transform="matrix(1,0,0,-1,167.13553,38.839479)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,167.13553,38.839479)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp46"> +<path transform="matrix(1,0,0,-1,181.45853,62.276124)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp46)"> +<path transform="matrix(1,0,0,-1,181.45853,62.276124)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,181.45853,62.276124)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp47"> +<path transform="matrix(1,0,0,-1,195.78153,15.402828)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp47)"> +<path transform="matrix(1,0,0,-1,195.78153,15.402828)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,195.78153,15.402828)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp48"> +<path transform="matrix(1,0,0,-1,210.10453,50.557798)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp48)"> +<path transform="matrix(1,0,0,-1,210.10453,50.557798)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,210.10453,50.557798)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp49"> +<path transform="matrix(1,0,0,-1,224.42752,38.839475)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp49)"> +<path transform="matrix(1,0,0,-1,224.42752,38.839475)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,224.42752,38.839475)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp50"> +<path transform="matrix(1,0,0,-1,238.75052,15.402826)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp50)"> +<path transform="matrix(1,0,0,-1,238.75052,15.402826)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,238.75052,15.402826)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="square" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#686868" d="M 54.7 39.496877 L 54.7 235.19287 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="square" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#686868" d="M 54.7 39.496877 L 322.54 39.496877 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 199.1025 44.496877 L 315.54 44.496877 C 316.87333 44.496877 317.54 45.163545 317.54 46.496877 L 317.54 86.84062 C 317.54 88.17396 316.87333 88.84062 315.54 88.84062 L 199.1025 88.84062 C 197.76917 88.84062 197.1025 88.17396 197.1025 86.84062 L 197.1025 46.496877 C 197.1025 45.163545 197.76917 44.496877 199.1025 44.496877 Z " fill="#ffffff"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".5" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#ffffff" d="M 199.1025 44.496877 L 315.54 44.496877 C 316.87333 44.496877 317.54 45.163545 317.54 46.496877 L 317.54 86.84062 C 317.54 88.17396 316.87333 88.84062 315.54 88.84062 L 199.1025 88.84062 C 197.76917 88.84062 197.1025 88.17396 197.1025 86.84062 L 197.1025 46.496877 C 197.1025 45.163545 197.76917 44.496877 199.1025 44.496877 Z "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e24a33" d="M 207.1025 74.74687 L 227.1025 74.74687 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 214.1025 71.74687 L 220.1025 71.74687 L 220.1025 77.74687 L 214.1025 77.74687 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M 214.1025 71.74687 L 220.1025 71.74687 L 220.1025 77.74687 L 214.1025 77.74687 Z "/> +<text xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-71.24687" x="235.1025">Kafka Streams</tspan></text> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#348abd" d="M 207.1025 60.075 L 227.1025 60.075 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 217.1025 55.83236 L 221.34514 60.075 L 217.1025 64.31764 L 212.85987 60.075 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 217.1025 55.83236 L 221.34514 60.075 L 217.1025 64.31764 L 212.85987 60.075 Z "/> +<text xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-56.575" x="235.1025">Flink</tspan></text> +</g> +</g> +</svg> diff --git a/docs/assets/images/demand.svg b/docs/assets/images/demand.svg new file mode 100644 index 0000000000000000000000000000000000000000..bf5aa2319bdb1005792c9184866715bef86e4a4e --- /dev/null +++ b/docs/assets/images/demand.svg @@ -0,0 +1,391 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="317.8467pt" height="242.39287pt" viewBox="0 0 317.8467 242.39287"> +<style> + text { + font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; + } +</style> +<g enable-background="new"> +<g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 0 0 L 317.8467 0 L 317.8467 242.39287 L 0 242.39287 Z " fill="#ffffff"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z " fill="#ffffff"/> +<clipPath id="cp0"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp0)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 103.41647 39.496877 L 103.41647 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 103.41647 39.496877 L 103.41647 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 103.41647 39.496877 L 103.41647 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="90.97897">100k</tspan></text> +<clipPath id="cp1"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp1)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 168.34738 39.496877 L 168.34738 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 168.34738 39.496877 L 168.34738 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 168.34738 39.496877 L 168.34738 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="155.90988">200k</tspan></text> +<clipPath id="cp2"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp2)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 233.27829 39.496877 L 233.27829 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 233.27829 39.496877 L 233.27829 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 233.27829 39.496877 L 233.27829 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="220.84079">300k</tspan></text> +<clipPath id="cp3"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp3)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 298.2092 39.496877 L 298.2092 235.19287 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 298.2092 39.496877 L 298.2092 35.996877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 298.2092 39.496877 L 298.2092 35.996877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-24.903126" x="285.7717">400k</tspan></text> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="11" font-family=""><tspan y="-9.7" x="122.9325">messages/second</tspan></text> +<clipPath id="cp4"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp4)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 39.496877 L 310.38377 39.496877 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 39.04375 39.496877 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 39.496877 L 39.04375 39.496877 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-35.7" x="29.184376">0</tspan></text> +<clipPath id="cp5"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp5)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 59.164815 L 310.38377 59.164815 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 59.164815 L 39.04375 59.164815 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 59.164815 L 39.04375 59.164815 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-55.36794" x="29.184376">2</tspan></text> +<clipPath id="cp6"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp6)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 78.832759 L 310.38377 78.832759 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 78.832759 L 39.04375 78.832759 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 78.832759 L 39.04375 78.832759 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-75.03588" x="29.184376">4</tspan></text> +<clipPath id="cp7"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp7)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 98.500698 L 310.38377 98.500698 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 98.500698 L 39.04375 98.500698 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 98.500698 L 39.04375 98.500698 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-94.70382" x="29.184376">6</tspan></text> +<clipPath id="cp8"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp8)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 118.16863 L 310.38377 118.16863 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 118.16863 L 39.04375 118.16863 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 118.16863 L 39.04375 118.16863 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-114.37176" x="29.184376">8</tspan></text> +<clipPath id="cp9"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp9)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 137.83658 L 310.38377 137.83658 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 137.83658 L 39.04375 137.83658 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 137.83658 L 39.04375 137.83658 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-134.0397" x="22.825">10</tspan></text> +<clipPath id="cp10"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp10)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 157.50452 L 310.38377 157.50452 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 157.50452 L 39.04375 157.50452 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 157.50452 L 39.04375 157.50452 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-153.70764" x="22.825">12</tspan></text> +<clipPath id="cp11"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp11)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 177.17246 L 310.38377 177.17246 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 177.17246 L 39.04375 177.17246 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 177.17246 L 39.04375 177.17246 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-173.37558" x="22.825">14</tspan></text> +<clipPath id="cp12"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp12)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 196.8404 L 310.38377 196.8404 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 196.8404 L 39.04375 196.8404 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 196.8404 L 39.04375 196.8404 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-193.04352" x="22.825">16</tspan></text> +<clipPath id="cp13"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp13)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e4e4e4" d="M 42.54375 216.50833 L 310.38377 216.50833 "/> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 216.50833 L 39.04375 216.50833 " fill="#686868"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".8" stroke-linecap="butt" stroke-linejoin="round" fill="none" stroke="#686868" d="M 42.54375 216.50833 L 39.04375 216.50833 "/> +<text fill="#686868" xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-212.71146" x="22.825">18</tspan></text> +<text fill="#686868" xml:space="preserve" transform="matrix(0 -1 1 0 0 242.39287)" font-size="11" font-family=""><tspan y="16.325" x="85.77456">number of instances</tspan></text> +<clipPath id="cp14"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp14)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e24a33" d="M 54.718297 49.330846 L 70.95102 49.330846 L 87.18375 59.164815 L 103.41647 59.164815 L 119.64921 68.99879 L 135.88193 78.832759 L 152.11466 88.666728 L 168.34738 98.500698 L 184.58011 108.33466 L 200.81284 118.16863 L 217.04557 128.00261 L 233.27829 137.83658 L 249.51102 157.50452 L 265.74375 167.33849 L 281.97648 196.8404 L 298.2092 226.3423 "/> +<clipPath id="cp15"> +<path transform="matrix(1,0,0,-1,54.718297,193.06203)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp15)"> +<path transform="matrix(1,0,0,-1,54.718297,193.06203)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,54.718297,193.06203)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp16"> +<path transform="matrix(1,0,0,-1,70.95102,193.06203)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp16)"> +<path transform="matrix(1,0,0,-1,70.95102,193.06203)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,70.95102,193.06203)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp17"> +<path transform="matrix(1,0,0,-1,87.18375,183.22806)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp17)"> +<path transform="matrix(1,0,0,-1,87.18375,183.22806)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,87.18375,183.22806)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp18"> +<path transform="matrix(1,0,0,-1,103.41647,183.22806)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp18)"> +<path transform="matrix(1,0,0,-1,103.41647,183.22806)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,103.41647,183.22806)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp19"> +<path transform="matrix(1,0,0,-1,119.6492,173.39409)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp19)"> +<path transform="matrix(1,0,0,-1,119.6492,173.39409)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,119.6492,173.39409)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp20"> +<path transform="matrix(1,0,0,-1,135.88193,163.56012)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp20)"> +<path transform="matrix(1,0,0,-1,135.88193,163.56012)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,135.88193,163.56012)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp21"> +<path transform="matrix(1,0,0,-1,152.11466,153.72615)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp21)"> +<path transform="matrix(1,0,0,-1,152.11466,153.72615)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,152.11466,153.72615)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp22"> +<path transform="matrix(1,0,0,-1,168.34738,143.89218)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp22)"> +<path transform="matrix(1,0,0,-1,168.34738,143.89218)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,168.34738,143.89218)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp23"> +<path transform="matrix(1,0,0,-1,184.58011,134.05821)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp23)"> +<path transform="matrix(1,0,0,-1,184.58011,134.05821)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,184.58011,134.05821)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp24"> +<path transform="matrix(1,0,0,-1,200.81284,124.22424)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp24)"> +<path transform="matrix(1,0,0,-1,200.81284,124.22424)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,200.81284,124.22424)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp25"> +<path transform="matrix(1,0,0,-1,217.04557,114.390277)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp25)"> +<path transform="matrix(1,0,0,-1,217.04557,114.390277)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,217.04557,114.390277)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp26"> +<path transform="matrix(1,0,0,-1,233.27829,104.556308)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp26)"> +<path transform="matrix(1,0,0,-1,233.27829,104.556308)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,233.27829,104.556308)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp27"> +<path transform="matrix(1,0,0,-1,249.51102,84.88837)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp27)"> +<path transform="matrix(1,0,0,-1,249.51102,84.88837)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,249.51102,84.88837)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp28"> +<path transform="matrix(1,0,0,-1,265.74375,75.0544)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp28)"> +<path transform="matrix(1,0,0,-1,265.74375,75.0544)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,265.74375,75.0544)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp29"> +<path transform="matrix(1,0,0,-1,281.97648,45.55249)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp29)"> +<path transform="matrix(1,0,0,-1,281.97648,45.55249)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,281.97648,45.55249)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +<clipPath id="cp30"> +<path transform="matrix(1,0,0,-1,298.2092,16.050581)" d="M -3.5 -3.5 L 3.5 -3.5 L 3.5 3.5 L -3.5 3.5 Z "/> +</clipPath> +<g clip-path="url(#cp30)"> +<path transform="matrix(1,0,0,-1,298.2092,16.050581)" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,298.2092,16.050581)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M -3 -3 L 3 -3 L 3 3 L -3 3 Z "/> +</g> +</g> +<clipPath id="cp31"> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 42.54375 39.496877 L 310.38377 39.496877 L 310.38377 235.19287 L 42.54375 235.19287 Z "/> +</clipPath> +<g clip-path="url(#cp31)"> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#348abd" d="M 54.718297 49.330846 L 70.95102 49.330846 L 87.18375 59.164815 L 103.41647 68.99879 L 119.64921 68.99879 L 135.88193 78.832759 L 152.11466 88.666728 L 168.34738 88.666728 L 184.58011 118.16863 L 200.81284 98.500698 L 217.04557 118.16863 L 233.27829 118.16863 L 249.51102 118.16863 L 265.74375 118.16863 L 281.97648 137.83658 L 298.2092 137.83658 "/> +<clipPath id="cp32"> +<path transform="matrix(1,0,0,-1,54.718297,193.06203)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp32)"> +<path transform="matrix(1,0,0,-1,54.718297,193.06203)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,54.718297,193.06203)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp33"> +<path transform="matrix(1,0,0,-1,70.95102,193.06203)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp33)"> +<path transform="matrix(1,0,0,-1,70.95102,193.06203)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,70.95102,193.06203)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp34"> +<path transform="matrix(1,0,0,-1,87.18375,183.22806)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp34)"> +<path transform="matrix(1,0,0,-1,87.18375,183.22806)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,87.18375,183.22806)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp35"> +<path transform="matrix(1,0,0,-1,103.41647,173.39409)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp35)"> +<path transform="matrix(1,0,0,-1,103.41647,173.39409)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,103.41647,173.39409)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp36"> +<path transform="matrix(1,0,0,-1,119.6492,173.39409)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp36)"> +<path transform="matrix(1,0,0,-1,119.6492,173.39409)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,119.6492,173.39409)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp37"> +<path transform="matrix(1,0,0,-1,135.88193,163.56012)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp37)"> +<path transform="matrix(1,0,0,-1,135.88193,163.56012)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,135.88193,163.56012)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp38"> +<path transform="matrix(1,0,0,-1,152.11466,153.72615)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp38)"> +<path transform="matrix(1,0,0,-1,152.11466,153.72615)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,152.11466,153.72615)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp39"> +<path transform="matrix(1,0,0,-1,168.34738,153.72615)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp39)"> +<path transform="matrix(1,0,0,-1,168.34738,153.72615)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,168.34738,153.72615)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp40"> +<path transform="matrix(1,0,0,-1,184.58011,124.22424)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp40)"> +<path transform="matrix(1,0,0,-1,184.58011,124.22424)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,184.58011,124.22424)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp41"> +<path transform="matrix(1,0,0,-1,200.81284,143.89218)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp41)"> +<path transform="matrix(1,0,0,-1,200.81284,143.89218)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,200.81284,143.89218)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp42"> +<path transform="matrix(1,0,0,-1,217.04557,124.22424)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp42)"> +<path transform="matrix(1,0,0,-1,217.04557,124.22424)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,217.04557,124.22424)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp43"> +<path transform="matrix(1,0,0,-1,233.27829,124.22424)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp43)"> +<path transform="matrix(1,0,0,-1,233.27829,124.22424)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,233.27829,124.22424)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp44"> +<path transform="matrix(1,0,0,-1,249.51102,124.22424)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp44)"> +<path transform="matrix(1,0,0,-1,249.51102,124.22424)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,249.51102,124.22424)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp45"> +<path transform="matrix(1,0,0,-1,265.74375,124.22424)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp45)"> +<path transform="matrix(1,0,0,-1,265.74375,124.22424)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,265.74375,124.22424)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp46"> +<path transform="matrix(1,0,0,-1,281.97648,104.556308)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp46)"> +<path transform="matrix(1,0,0,-1,281.97648,104.556308)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,281.97648,104.556308)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +<clipPath id="cp47"> +<path transform="matrix(1,0,0,-1,298.2092,104.556308)" d="M -4.7426407 -4.7426407 L 4.7426407 -4.7426407 L 4.7426407 4.7426407 L -4.7426407 4.7426407 Z "/> +</clipPath> +<g clip-path="url(#cp47)"> +<path transform="matrix(1,0,0,-1,298.2092,104.556308)" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,298.2092,104.556308)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 0 -4.242641 L 4.242641 0 L 0 4.242641 L -4.242641 0 Z "/> +</g> +</g> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="square" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#686868" d="M 42.54375 39.496877 L 42.54375 235.19287 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="square" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#686868" d="M 42.54375 39.496877 L 310.38377 39.496877 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 49.54375 185.84912 L 165.98125 185.84912 C 167.31459 185.84912 167.98125 186.5158 167.98125 187.84912 L 167.98125 228.19287 C 167.98125 229.52622 167.31459 230.19287 165.98125 230.19287 L 49.54375 230.19287 C 48.21042 230.19287 47.54375 229.52622 47.54375 228.19287 L 47.54375 187.84912 C 47.54375 186.5158 48.21042 185.84912 49.54375 185.84912 Z " fill="#ffffff"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width=".5" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#ffffff" d="M 49.54375 185.84912 L 165.98125 185.84912 C 167.31459 185.84912 167.98125 186.5158 167.98125 187.84912 L 167.98125 228.19287 C 167.98125 229.52622 167.31459 230.19287 165.98125 230.19287 L 49.54375 230.19287 C 48.21042 230.19287 47.54375 229.52622 47.54375 228.19287 L 47.54375 187.84912 C 47.54375 186.5158 48.21042 185.84912 49.54375 185.84912 Z "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#e24a33" d="M 57.54375 216.09912 L 77.54375 216.09912 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 64.54375 213.09912 L 70.54375 213.09912 L 70.54375 219.09912 L 64.54375 219.09912 Z " fill="#e24a33"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#e24a33" d="M 64.54375 213.09912 L 70.54375 213.09912 L 70.54375 219.09912 L 64.54375 219.09912 Z "/> +<text xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-212.59912" x="85.54375">Kafka Streams</tspan></text> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="round" fill="none" stroke="#348abd" d="M 57.54375 201.42725 L 77.54375 201.42725 "/> +<path transform="matrix(1,0,0,-1,0,242.39287)" d="M 67.54375 197.18462 L 71.78639 201.42725 L 67.54375 205.66989 L 63.30111 201.42725 Z " fill="#348abd"/> +<path transform="matrix(1,0,0,-1,0,242.39287)" stroke-width="1" stroke-linecap="butt" stroke-miterlimit="10" stroke-linejoin="miter" fill="none" stroke="#348abd" d="M 67.54375 197.18462 L 71.78639 201.42725 L 67.54375 205.66989 L 63.30111 201.42725 Z "/> +<text xml:space="preserve" transform="matrix(1 0 -0 1 0 242.39287)" font-size="10" font-family=""><tspan y="-197.92725" x="85.54375">Flink</tspan></text> +</g> +</g> +</svg> diff --git a/docs/concepts/index.md b/docs/concepts/index.md index 4bcd5a88ab1a18910e9210f8e5c9080ffb5a7203..9c4aaed0781b7e65917d06f1e267b1745f3955f7 100644 --- a/docs/concepts/index.md +++ b/docs/concepts/index.md @@ -11,9 +11,9 @@ nav_order: 2 Theodolite is a framework for benchmarking the horizontal and vertical scalability of cloud-native applications. Theodolite adopts established definitions of scalability in cloud computing for its benchmarking method. It quantifies -scalability by running isolated experiments for different load intensities and provisioned resource amounts, which assess whether specified SLOs are fulfilled. Two metrics are available: The demand metric describes how the amount of minimal required resources evolve with increasing load intensities, while the capacity metric describes how the maximal processable load evolves with increasing resources. Hence, both metrics are functions. <!--Example?--> +scalability by running isolated experiments for different load intensities and provisioned resource amounts, which assess whether specified SLOs are fulfilled. [Two metrics are available](metrics): The demand metric describes how the amount of minimal required resources evolve with increasing load intensities, while the capacity metric describes how the maximal processable load evolves with increasing resources. Hence, both metrics are functions. <!--Example?--> -Load, resources and SLOs are deliberately kept abstract in Theodolite as Theodolite supports different types of these. For example, horizontal scalability can be benchmarked by varying the amount of Kubernetes Pods, while vertical scalability can be benchmarked by varying CPU and memory constraints of Pods. +The terms load, resources and SLOs are consciously kept abstract as Theodolite leaves it to the benchmark designer to define what type of load, resources, and SLOs should be evaluated. For example, horizontal scalability can be benchmarked by varying the amount of Kubernetes Pods, while vertical scalability can be benchmarked by varying CPU and memory constraints of Pods. -To balance statistical grounding and time-efficient benchmark execution, Theodolite comes with different heuristic for -evaluating the search space of load and resource combinations. Other configuration options include the number of repetitions, the experiment and warm-up duration, as well as the amount of different load and resource values to be evaluated. \ No newline at end of file +To balance statistical grounding and time-efficient benchmark execution, Theodolite comes with different [heuristic for +evaluating the search space](search-strategies) of load and resource combinations. Other configuration options include the number of repetitions, the experiment and warm-up duration, as well as the amount of different load and resource values to be evaluated. \ No newline at end of file diff --git a/docs/concepts/metrics.md b/docs/concepts/metrics.md index eae9ab9662cd674e7ad7813339cb72a66a7247dc..662b4b2b13db4b8aee0f79224732b812d0858af9 100644 --- a/docs/concepts/metrics.md +++ b/docs/concepts/metrics.md @@ -8,35 +8,61 @@ usemathjax: true # Theodolite's Scalability Metrics +Theodolite's scalability metrics are based on the following definition: + +> Scalability is the ability of [a] system to sustain increasing workloads by making use of additional resources. -- <cite>[Herbst et al. (2013)](https://www.usenix.org/conference/icac13/technical-sessions/presentation/herbst)</cite> + +Based on this definition, scalability can be characterized by the following three attributes: + +* **Load intensity** is the input variable to which a system is subjected. Scalability is evaluated within a range of load intensities. +* **Service levels objectives (SLOs)** are measurable quality criteria that have to be fulfilled for every load intensity. +* **Provisioned resources** can be increased to meet the SLOs if load intensities increase. + + +## Scalability Metrics + +Theodolite uses these attributes to define two scalability metrics: + +| Resource Demand Metric | Load Capacity Metric | +|:----|:----| +| The resource demand metric quantifies scalability by describing how the amount of minimal required resources (i.e., all SLOs are fulfilled) evolves with increasing load intensities. | The load capacity metric quantifies scalability by describing how the maximal processable load (i.e., all SLOs are fulfilled) evolves with increasing resources. | +| {: .d-block .mx-auto } *Example: Scalability of two stream processing engines measured with the demand metric.*{: .d-block .text-center } | {: .d-block .mx-auto } *Example: Scalability of two stream processing engines measured with the capacity metric.*{: .d-block .text-center } | +{: .fixed-colums } + +<!-- ## Resource Demand Metric +{: .d-block .mx-auto } + + +## Load Capacity Metric + +{: .d-block .mx-auto } +--> + + +## Formal Definition + +For a more formal definition of both metrics, we define the load type as the set of possible load intensities for that +type, denoted as $$L$$. +Similarly, we define the resource type as the set of possible resources, denoted as $$R$$. +We also require that there exists an ordering on both sets $$L$$ and $$R$$. +We define the set of all SLOs as $$S$$ and denote an SLO $$s \in S$$ as Boolean-valued function +$$\text{slo}_s: L \times R \to \{\text{false},\text{true}\}$$ with $$\text{slo}_s(l,r) = \text{true}$$ if a system deployed with $$r$$ resource amounts does not violate SLO $$s$$ when processing load intensity $$l$$. + +We can denote our **resource demand** metric as $$\text{demand: } L \to R$$, defined as: + $$ \forall l \in L: \text{demand}(l) = \min\{r \in R \mid \forall s \in S: \text{slo}_s(l,r) = \text{true}\} $$ -## Load Capacity Metric +And similarly denote our **resource capacity** metric as $$\text{capacity: } R \to L$$, defined as: $$ \forall r \in R: \text{capacity}(r) = \max\{l \in L \mid \forall s \in S: \text{slo}_s(l,r) = \text{true}\} $$ +## Further Reading - -## Fun with Math - -$$ -\begin{aligned} - & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) - = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ - & (x_1, \ldots, x_n) \left( \begin{array}{ccc} - \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ - \vdots & \ddots & \vdots \\ - \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) - \end{array} \right) - \left( \begin{array}{c} - y_1 \\ - \vdots \\ - y_n - \end{array} \right) -\end{aligned} -$$ +S. Henning and W. Hasselbring. “[How to Measure Scalability of Distributed Stream Processing Engines?](https://research.spec.org/icpe_proceedings/2021/companion/p85.pdf)” In: International Conference on Performance Engineering. 2021. DOI: [10.1145/3447545.3451190](https://doi.org/10.1145/3447545.3451190). +<!-- TODO replace with EMSE paper one day--> diff --git a/docs/concepts/search-strategies.md b/docs/concepts/search-strategies.md index f24e0a75c8d6aeb4d38903c20a3b0950a7780d64..dc5904581fccce196978b23d5b89d243137f0ada 100644 --- a/docs/concepts/search-strategies.md +++ b/docs/concepts/search-strategies.md @@ -6,3 +6,6 @@ nav_order: 2 --- # Theodolite's Search Strategies + +Theodolite measures [its metrics](metrics) by performing isolated experiments for different load intensities and provisioned resource amounts. +However, to determine a system's resource demand or load capacity or a good approximation of those, it is often not necessary to evaluate each possible combination. Instead, Theodolite provides search strategies, which decide at benchmark runtime which combinations of load and resources to evaluate. \ No newline at end of file