forked from MapComplete/MapComplete
Merge branch 'develop' into theme/infrastructure
This commit is contained in:
commit
bbd7135157
66 changed files with 1961 additions and 798 deletions
20
.gitpod.yml
20
.gitpod.yml
|
|
@ -1,20 +0,0 @@
|
||||||
tasks:
|
|
||||||
- init: npm run init
|
|
||||||
command: npm run start
|
|
||||||
name: Initialize and start MapComplete
|
|
||||||
- name: Generate Layeroverview
|
|
||||||
command: npm run generate:layeroverview
|
|
||||||
|
|
||||||
ports:
|
|
||||||
- name: MapComplete Website
|
|
||||||
port: 1234
|
|
||||||
onOpen: open-browser
|
|
||||||
|
|
||||||
vscode:
|
|
||||||
extensions:
|
|
||||||
- "esbenp.prettier-vscode"
|
|
||||||
- "eamodio.gitlens"
|
|
||||||
- "github.vscode-pull-request-github"
|
|
||||||
- "svelte.svelte-vscode"
|
|
||||||
- "bradlc.vscode-tailwindcss"
|
|
||||||
- "editorconfig.editorconfig"
|
|
||||||
|
|
@ -31,17 +31,17 @@ You need at least 3GB RAM available to run MapComplete, but you'll preferably ha
|
||||||
To develop and build MapComplete, you
|
To develop and build MapComplete, you
|
||||||
|
|
||||||
0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none <repo>`)
|
0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none <repo>`)
|
||||||
1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3`
|
1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3` or `sudo dnf install python3`
|
||||||
2. Install `nvm` to easily install node:
|
2. Install `nvm` to easily install node:
|
||||||
- `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash`
|
- `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash`
|
||||||
- Restart your terminal
|
- Restart your terminal
|
||||||
- Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine)
|
- Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine)
|
||||||
4. Run `npm run init` (including **run**, not ~~`npm init`~~)which …
|
3. Run `npm run init` (including **run**, not ~~`npm init`~~)which …
|
||||||
- runs `npm ci` for you
|
- runs `npm ci` for you
|
||||||
- generates some additional dependencies and files
|
- generates some additional dependencies and files
|
||||||
- does various housekeeping and setup. This can take a few minutes the first time as some PNGs need to be created
|
- does various housekeeping and setup. This can take a few minutes the first time as some PNGs need to be created
|
||||||
5. Run `npm run start` to host a local testversion at http://localhost:1234/
|
4. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/
|
||||||
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
|
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
|
||||||
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs
|
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs
|
||||||
(e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
|
(e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
|
||||||
|
|
||||||
|
|
@ -52,31 +52,18 @@ Development using Windows
|
||||||
|
|
||||||
You need at least 3GB RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available.
|
You need at least 3GB RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available.
|
||||||
|
|
||||||
For Windows you can use the devcontainer, or the WSL subsystem.
|
For Windows you can use the WSL subsystem.
|
||||||
|
|
||||||
To use the devcontainer in Visual Studio Code:
|
|
||||||
|
|
||||||
0. Make sure you have installed
|
|
||||||
the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
|
|
||||||
extension and it's dependencies.
|
|
||||||
1. Make a fork and clone the repository.
|
|
||||||
2. After cloning, Visual Studio Code will ask you if you want to use the devcontainer.
|
|
||||||
3. Then you can either clone it again in a volume (for better performance), or open the current folder in a container.
|
|
||||||
4. By now, you should be able to run `npm run start` to host a local testversion at http://localhost:1234/index.html
|
|
||||||
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
|
|
||||||
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
|
|
||||||
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
|
|
||||||
|
|
||||||
To use the WSL in Visual Studio Code:
|
To use the WSL in Visual Studio Code:
|
||||||
|
|
||||||
0. Make sure you have installed the [Remote - WSL]() extension and it's dependencies.
|
1. Make sure you have installed the [Remote - WSL](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) extension and it's dependencies.
|
||||||
1. Open a remote WSL window using the button in the bottom left.
|
2. Open a remote WSL window using the button in the bottom left.
|
||||||
2. Make a fork and clone the repository.
|
3. Make a fork and clone the repository.
|
||||||
3. Install `npm` using `sudo apt install npm`.
|
4. Install `npm` using `sudo apt install npm`.
|
||||||
4. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the
|
5. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the
|
||||||
dependencies too
|
dependencies too
|
||||||
5. Run `npm run start` to host a local testversion at http://localhost:1234/index.html
|
6. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/index.html
|
||||||
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
|
7. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
|
||||||
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
|
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
|
||||||
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
|
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
|
||||||
|
|
||||||
|
|
@ -95,10 +82,12 @@ Note that `npm run start` is equivalent to `npm run generate:layeroverview && np
|
||||||
Automatic deployment
|
Automatic deployment
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Currently, the master branch is automatically deployed to https://mapcomplete.org/ by a Forgejo action.
|
MapComplete is automatically deployed to various locations, depending on the branch you are working on.
|
||||||
|
|
||||||
Every branch is automatically built (upon push) to `https://pietervdvn.github.io/mc/<branchname>` by a GitHub action.
|
The master branch is automatically deployed to https://mapcomplete.org/, and the development branch is available at
|
||||||
|
https://dev.mapcomplete.org/. Both are automatically deployed by a Forgejo action.
|
||||||
|
|
||||||
|
Other branches are automatically deployed to https://builds.mapcomplete.org/<branchname>.
|
||||||
|
|
||||||
Deploying a fork
|
Deploying a fork
|
||||||
----------------
|
----------------
|
||||||
|
|
@ -113,9 +102,9 @@ This script can be invoked with `npm run prepare-deploy`
|
||||||
|
|
||||||
If you want to deploy your fork:
|
If you want to deploy your fork:
|
||||||
|
|
||||||
0. `npm run prepare-deploy`
|
1. `npm run prepare-deploy`
|
||||||
1. `npm run build`
|
2. `npm run build`
|
||||||
2. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page,
|
3. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page,
|
||||||
visiting `yourwebsite/<theme>` should bring you to the appropriate theme.
|
visiting `yourwebsite/<theme>` should bring you to the appropriate theme.
|
||||||
|
|
||||||
### Getting your own API-keys
|
### Getting your own API-keys
|
||||||
|
|
|
||||||
|
|
@ -399,6 +399,41 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "cash_in-types",
|
||||||
|
"question": {
|
||||||
|
"en": "In what ways can you deposit cash at this ATM?",
|
||||||
|
"nl": "Op welke manieren kan je geld storten bij deze geldautomaat?"
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "cash_in:coins=yes",
|
||||||
|
"ifnot": "cash_in:coins=no",
|
||||||
|
"then": {
|
||||||
|
"en": "You can deposit coins at this ATM",
|
||||||
|
"nl": "Je kan munten storten bij deze geldautomaat"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "cash_in:notes=yes",
|
||||||
|
"ifnot": "cash_in:notes=no",
|
||||||
|
"then": {
|
||||||
|
"en": "You can deposit notes at this ATM",
|
||||||
|
"nl": "Je kan biljetten storten bij deze geldautomaat"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "cash_in:sealbags=yes",
|
||||||
|
"ifnot": "cash_in:sealbags=no",
|
||||||
|
"then": {
|
||||||
|
"en": "You can deposit sealed bags at this ATM",
|
||||||
|
"nl": "Je kan sealbags storten bij deze geldautomaat"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"condition": "cash_in=yes",
|
||||||
|
"multiAnswer": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "cash_out-denominations-notes",
|
"id": "cash_out-denominations-notes",
|
||||||
"question": {
|
"question": {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
height="500"
|
height="500"
|
||||||
viewBox="0 0 500 500"
|
viewBox="0 0 500 500"
|
||||||
sodipodi:docname="logo-hub.svg"
|
sodipodi:docname="logo-hub.svg"
|
||||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
|
@ -25,10 +25,10 @@
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0"
|
||||||
inkscape:deskcolor="#d1d1d1"
|
inkscape:deskcolor="#d1d1d1"
|
||||||
inkscape:zoom="0.68921927"
|
inkscape:zoom="0.68921927"
|
||||||
inkscape:cx="263.34145"
|
inkscape:cx="264.06691"
|
||||||
inkscape:cy="171.93367"
|
inkscape:cy="172.65913"
|
||||||
inkscape:window-width="1704"
|
inkscape:window-width="2560"
|
||||||
inkscape:window-height="996"
|
inkscape:window-height="1371"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="0"
|
inkscape:window-y="0"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
|
|
@ -45,17 +45,11 @@
|
||||||
d="m 436.5236,681.36291 c -6.74741,-2.13918 -14.9843,-7.26966 -34.32508,-21.37991 -68.5756,-50.02998 -120.91693,-107.10242 -149.04086,-162.51261 -17.0909,-33.67273 -25.59741,-65.40593 -26.628,-99.33465 -1.15068,-37.88281 6.06308,-71.70048 22.46148,-105.29805 30.02816,-61.52265 86.3781,-106.04268 152.70885,-120.6497 17.43029,-3.83841 28.50629,-4.98052 48.30017,-4.98052 19.79387,0 30.86987,1.14211 48.30016,4.98052 94.21933,20.7485 164.51505,100.20844 174.54536,197.3003 1.58552,15.34767 0.64021,42.86331 -1.97525,57.4944 -13.20508,73.87025 -65.11208,147.83867 -152.43593,217.22396 -13.05291,10.37151 -39.96705,29.70314 -46.65434,33.51044 -10.2471,5.83402 -23.90103,7.24594 -35.25656,3.64582 z"
|
d="m 436.5236,681.36291 c -6.74741,-2.13918 -14.9843,-7.26966 -34.32508,-21.37991 -68.5756,-50.02998 -120.91693,-107.10242 -149.04086,-162.51261 -17.0909,-33.67273 -25.59741,-65.40593 -26.628,-99.33465 -1.15068,-37.88281 6.06308,-71.70048 22.46148,-105.29805 30.02816,-61.52265 86.3781,-106.04268 152.70885,-120.6497 17.43029,-3.83841 28.50629,-4.98052 48.30017,-4.98052 19.79387,0 30.86987,1.14211 48.30016,4.98052 94.21933,20.7485 164.51505,100.20844 174.54536,197.3003 1.58552,15.34767 0.64021,42.86331 -1.97525,57.4944 -13.20508,73.87025 -65.11208,147.83867 -152.43593,217.22396 -13.05291,10.37151 -39.96705,29.70314 -46.65434,33.51044 -10.2471,5.83402 -23.90103,7.24594 -35.25656,3.64582 z"
|
||||||
id="path1"
|
id="path1"
|
||||||
sodipodi:nodetypes="sssssssssssss" />
|
sodipodi:nodetypes="sssssssssssss" />
|
||||||
<text
|
<path
|
||||||
xml:space="preserve"
|
style="font-size:177.423px;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:1px;fill:#ffffff;stroke:#ffffff;stroke-width:5.41727;paint-order:fill markers stroke"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:177.423px;font-family:MnSymbol;-inkscape-font-specification:MnSymbol;text-align:start;letter-spacing:1px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:5.41727;stroke-dasharray:none;paint-order:fill markers stroke"
|
d="M 309.7506,457.04883 V 322.20734 l 16.50034,-2.83876 v 47.19452 q 4.613,-1.77423 9.75827,-2.66135 5.32269,-1.06454 10.46795,-1.06454 11.00023,0 18.27457,3.19362 7.27435,3.01619 11.5325,8.69372 4.43557,5.50012 6.2098,13.30673 1.77423,7.80661 1.77423,17.21003 v 51.80752 h -16.50033 v -48.25906 q 0,-8.5163 -1.24197,-14.54869 -1.06453,-6.03238 -3.72588,-9.75826 -2.66134,-3.72588 -7.09692,-5.32269 -4.43557,-1.77423 -11.00023,-1.77423 -2.66134,0 -5.50011,0.35485 -2.83877,0.35484 -5.50011,0.88711 -2.48392,0.35485 -4.613,0.88712 -1.95165,0.53226 -2.83877,0.88711 v 76.64674 z m 175.76151,-2.66135 q -5.67754,1.41939 -15.08096,3.01619 -9.22599,1.59681 -21.46818,1.59681 -10.64538,0 -17.91973,-3.01619 -7.27434,-3.19361 -11.70991,-8.87115 -4.43558,-5.67754 -6.38723,-13.30673 -1.95165,-7.80661 -1.95165,-17.21003 v -51.80751 h 16.50033 v 48.25905 q 0,16.85519 5.32269,24.12953 5.32269,7.27434 17.91973,7.27434 2.66134,0 5.50011,-0.17742 2.83877,-0.17742 5.32269,-0.35484 2.48392,-0.35485 4.43558,-0.53227 2.12907,-0.35485 3.01619,-0.7097 v -77.88869 h 16.50034 z m 45.88791,-85.51788 q 3.01619,-1.95166 9.04857,-4.08073 6.20981,-2.12908 14.19384,-2.12908 9.93569,0 17.56488,3.54846 7.80661,3.54846 13.1293,9.93569 5.32269,6.38723 7.98404,15.25838 2.83877,8.87115 2.83877,19.51653 0,11.17765 -3.37104,20.22622 -3.19361,8.87115 -9.226,15.08095 -6.03238,6.20981 -14.54868,9.58085 -8.51631,3.37103 -19.16169,3.37103 -11.53249,0 -20.40364,-1.5968 -8.87115,-1.59681 -14.54869,-3.19362 V 322.20734 l 16.50034,-2.83876 z m 0,73.80796 q 2.48392,0.7097 6.9195,1.41939 4.613,0.53227 11.35507,0.53227 13.30673,0 21.29076,-8.69373 7.98404,-8.87115 7.98404,-25.01664 0,-7.09692 -1.41939,-13.30673 -1.41938,-6.2098 -4.613,-10.64538 -3.19361,-4.613 -8.33888,-7.09692 -4.96784,-2.66134 -12.06476,-2.66134 -6.74208,0 -12.41961,2.3065 -5.67754,2.30649 -8.69373,4.79042 z"
|
||||||
x="295.55676"
|
id="text1"
|
||||||
y="457.04883"
|
aria-label="hub" />
|
||||||
id="text1"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan1"
|
|
||||||
x="295.55676"
|
|
||||||
y="457.04883"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:177.423px;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:1px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:5.41727;stroke-dasharray:none">hub</tspan></text>
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 4.1 KiB |
|
|
@ -270,7 +270,8 @@
|
||||||
"ca": "Aquest fanal es troba al final d'un pal recte",
|
"ca": "Aquest fanal es troba al final d'un pal recte",
|
||||||
"cs": "Tato lampa je umístěna na vrcholu rovného stožáru",
|
"cs": "Tato lampa je umístěna na vrcholu rovného stožáru",
|
||||||
"it": "Questo lampione si trova in cima a un palo dritto"
|
"it": "Questo lampione si trova in cima a un palo dritto"
|
||||||
}
|
},
|
||||||
|
"icon": "./assets/layers/street_lamps/straight_pole.svg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"if": "lamp_mount=bent_mast",
|
"if": "lamp_mount=bent_mast",
|
||||||
|
|
@ -282,7 +283,8 @@
|
||||||
"ca": "Aquest fanal es troba al final d'un pal doblegat",
|
"ca": "Aquest fanal es troba al final d'un pal doblegat",
|
||||||
"cs": "Tato lampa je umístěna na konci ohnutého stožáru",
|
"cs": "Tato lampa je umístěna na konci ohnutého stožáru",
|
||||||
"it": "Questo lampione si trova all'estremità di un palo curvo"
|
"it": "Questo lampione si trova all'estremità di un palo curvo"
|
||||||
}
|
},
|
||||||
|
"icon": "./assets/layers/street_lamps/bent_pole_1.svg"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"condition": {
|
"condition": {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"osmTags": {
|
"osmTags": {
|
||||||
"and": [
|
"and": [
|
||||||
|
{
|
||||||
|
"or": [
|
||||||
"man_made=surveillance",
|
"man_made=surveillance",
|
||||||
|
"disused:man_made=surveillance"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"or": [
|
"or": [
|
||||||
"surveillance:type=camera",
|
"surveillance:type=camera",
|
||||||
|
|
@ -52,7 +57,15 @@
|
||||||
"es": "Cámara de vigilancia",
|
"es": "Cámara de vigilancia",
|
||||||
"cs": "Bezpečnostní kamera",
|
"cs": "Bezpečnostní kamera",
|
||||||
"sl": "Nadzorna kamera"
|
"sl": "Nadzorna kamera"
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "disused:man_made=surveillance",
|
||||||
|
"then": {
|
||||||
|
"en": "Disused surveillance camera"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"pointRendering": [
|
"pointRendering": [
|
||||||
{
|
{
|
||||||
|
|
@ -122,7 +135,13 @@
|
||||||
"then": "calc({_direction:numerical}deg - 90deg)"
|
"then": "calc({_direction:numerical}deg - 90deg)"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"iconBadges": [
|
||||||
|
{
|
||||||
|
"if": "disused:man_made=surveillance",
|
||||||
|
"then": "close:red"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lineRendering": [
|
"lineRendering": [
|
||||||
|
|
@ -237,6 +256,35 @@
|
||||||
],
|
],
|
||||||
"tagRenderings": [
|
"tagRenderings": [
|
||||||
"images",
|
"images",
|
||||||
|
{
|
||||||
|
"id": "active",
|
||||||
|
"question": {
|
||||||
|
"en": "Is this camera currently in use?",
|
||||||
|
"nl": "Is deze camera momenteel in gebruik?"
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "man_made=surveillance",
|
||||||
|
"then": {
|
||||||
|
"en": "This camera is currently in use.",
|
||||||
|
"nl": "Deze camera is momenteel in gebruik."
|
||||||
|
},
|
||||||
|
"addExtraTags": [
|
||||||
|
"disused:man_made="
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "disused:man_made=surveillance",
|
||||||
|
"then": {
|
||||||
|
"en": "This camera is not used anymore",
|
||||||
|
"nl": "Deze camera is niet meer in gebruik"
|
||||||
|
},
|
||||||
|
"addExtraTags": [
|
||||||
|
"man_made="
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "has_alpr",
|
"id": "has_alpr",
|
||||||
"question": {
|
"question": {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"id": "transit_routes",
|
"id": "transit_routes",
|
||||||
"name": {
|
"name": {
|
||||||
"en": "Bus lines",
|
"en": "Transit Routes",
|
||||||
"de": "Buslinien",
|
"de": "Buslinien",
|
||||||
"nl": "Buslijnen",
|
"nl": "OV-lijnen",
|
||||||
"da": "Buslinjer",
|
"da": "Buslinjer",
|
||||||
"ca": "Línies de bus",
|
"ca": "Línies de bus",
|
||||||
"cs": "Autobusové linky",
|
"cs": "Autobusové linky",
|
||||||
|
|
@ -11,9 +11,9 @@
|
||||||
"it": "Linee degli autobus"
|
"it": "Linee degli autobus"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"en": "Layer showing bus lines",
|
"en": "Layer showing transit routes",
|
||||||
"de": "Ebene mit Buslinien",
|
"de": "Ebene mit Buslinien",
|
||||||
"nl": "Laag met buslijnen",
|
"nl": "Laag met OV-lijnen",
|
||||||
"da": "Lag, der viser buslinjer",
|
"da": "Lag, der viser buslinjer",
|
||||||
"ca": "Capa que mostra les línies d'autobús",
|
"ca": "Capa que mostra les línies d'autobús",
|
||||||
"cs": "Vrstva zobrazující autobusové linky",
|
"cs": "Vrstva zobrazující autobusové linky",
|
||||||
|
|
@ -22,9 +22,14 @@
|
||||||
},
|
},
|
||||||
"source": {
|
"source": {
|
||||||
"osmTags": {
|
"osmTags": {
|
||||||
"and": [
|
"or": [
|
||||||
"type=route",
|
"route=bus",
|
||||||
"route=bus"
|
"route=tram",
|
||||||
|
"route=trolleybus",
|
||||||
|
"route=light_rail",
|
||||||
|
"route=subway",
|
||||||
|
"route=train",
|
||||||
|
"route=ferry"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -34,9 +39,9 @@
|
||||||
"minzoom": 15,
|
"minzoom": 15,
|
||||||
"title": {
|
"title": {
|
||||||
"render": {
|
"render": {
|
||||||
"en": "Bus line",
|
"en": "Transit route",
|
||||||
"de": "Buslinie",
|
"de": "Buslinie",
|
||||||
"nl": "Buslijn",
|
"nl": "OV-lijn",
|
||||||
"da": "Buslinje",
|
"da": "Buslinje",
|
||||||
"ca": "Línia de bus",
|
"ca": "Línia de bus",
|
||||||
"cs": "Autobusová linka",
|
"cs": "Autobusová linka",
|
||||||
|
|
@ -65,7 +70,14 @@
|
||||||
"condition": {
|
"condition": {
|
||||||
"and": [
|
"and": [
|
||||||
"id~relation/[0-9]+",
|
"id~relation/[0-9]+",
|
||||||
"_numeric_id~*"
|
"_numeric_id~*",
|
||||||
|
{
|
||||||
|
"or": [
|
||||||
|
"route=bus",
|
||||||
|
"route=tram",
|
||||||
|
"route=trolleybus"
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"render": "<a href=' https://relatify.monicz.dev/?relation={_numeric_id}&load=1' target='_blank' rel='noopener'><img alt='on relatify' textmode='🗺️' src='./assets/layers/transit_routes/relatify.png'/></a>"
|
"render": "<a href=' https://relatify.monicz.dev/?relation={_numeric_id}&load=1' target='_blank' rel='noopener'><img alt='on relatify' textmode='🗺️' src='./assets/layers/transit_routes/relatify.png'/></a>"
|
||||||
|
|
@ -90,9 +102,9 @@
|
||||||
{
|
{
|
||||||
"id": "name",
|
"id": "name",
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)",
|
"en": "What is the name for this transit route? (i.e. Bus XX: From => Via => To)",
|
||||||
"de": "Wie lautet der Name der Buslinie? (z.B. Bus XX: Von => Über => Nach)",
|
"de": "Wie lautet der Name der Buslinie? (z.B. Bus XX: Von => Über => Nach)",
|
||||||
"nl": "Wat is de naam van deze buslijn (bv. Bus XX: Van => Via => Naar)",
|
"nl": "Wat is de naam van deze OV-lijn (bv. Bus XX: Van => Via => Naar)",
|
||||||
"cs": "Jak se jmenuje tato autobusová linka? (tj. Autobus XX: Od => Přes => Do)",
|
"cs": "Jak se jmenuje tato autobusová linka? (tj. Autobus XX: Od => Přes => Do)",
|
||||||
"es": "¿Cuál es el nombre de esta línea de autobús? (es decir, Autobús XX: Desde => Vía => Hasta)",
|
"es": "¿Cuál es el nombre de esta línea de autobús? (es decir, Autobús XX: Desde => Vía => Hasta)",
|
||||||
"ca": "Quin és el nom d'aquesta línia d'autobús? (és a dir, Bus XX: De : Via ) A)",
|
"ca": "Quin és el nom d'aquesta línia d'autobús? (és a dir, Bus XX: De : Via ) A)",
|
||||||
|
|
@ -108,9 +120,9 @@
|
||||||
{
|
{
|
||||||
"id": "from",
|
"id": "from",
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the starting point for this bus line?",
|
"en": "What is the starting point for this transit route?",
|
||||||
"de": "Wo ist der Startpunkt dieser Buslinie?",
|
"de": "Wo ist der Startpunkt dieser Buslinie?",
|
||||||
"nl": "Wat is het beginpunt van deze buslijn?",
|
"nl": "Wat is het beginpunt van deze OV-lijn?",
|
||||||
"da": "Hvad er udgangspunktet for denne buslinje?",
|
"da": "Hvad er udgangspunktet for denne buslinje?",
|
||||||
"ca": "Quin és el punt inicial d'aquesta línea d'autobús?",
|
"ca": "Quin és el punt inicial d'aquesta línea d'autobús?",
|
||||||
"cs": "Jaký je výchozí bod této autobusové linky?",
|
"cs": "Jaký je výchozí bod této autobusové linky?",
|
||||||
|
|
@ -118,9 +130,9 @@
|
||||||
"it": "Qual è il punto di partenza di questa linea di autobus?"
|
"it": "Qual è il punto di partenza di questa linea di autobus?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "This bus line begins at {from}",
|
"en": "This transit route begins at {from}",
|
||||||
"de": "Die Buslinie startet von {from}",
|
"de": "Die Buslinie startet von {from}",
|
||||||
"nl": "Deze buslijn begint bij {from}",
|
"nl": "Deze OV-lijn begint bij {from}",
|
||||||
"da": "Denne buslinje starter kl. {from}",
|
"da": "Denne buslinje starter kl. {from}",
|
||||||
"fr": "Cette ligne de bus commence à {from}",
|
"fr": "Cette ligne de bus commence à {from}",
|
||||||
"ca": "Aquesta línia d'autobús comença a {from}",
|
"ca": "Aquesta línia d'autobús comença a {from}",
|
||||||
|
|
@ -138,9 +150,9 @@
|
||||||
{
|
{
|
||||||
"id": "via",
|
"id": "via",
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the via point for this bus line?",
|
"en": "What is the via point for this transit route?",
|
||||||
"de": "Über welchen Zwischenhalt fährt die Buslinie?",
|
"de": "Über welchen Zwischenhalt fährt die Buslinie?",
|
||||||
"nl": "Via welk punt gaat deze buslijn?",
|
"nl": "Via welk punt gaat deze OV-lijn?",
|
||||||
"cs": "Jaký je průjezdní bod této autobusové linky?",
|
"cs": "Jaký je průjezdní bod této autobusové linky?",
|
||||||
"ru": "Где находится конечный пункт этого автобусного маршрута?",
|
"ru": "Где находится конечный пункт этого автобусного маршрута?",
|
||||||
"es": "¿Cuál es el punto intermedio de esta línea de autobús?",
|
"es": "¿Cuál es el punto intermedio de esta línea de autobús?",
|
||||||
|
|
@ -149,9 +161,9 @@
|
||||||
"uk": "Яка кінцева зупинка цієї автобусної лінії?"
|
"uk": "Яка кінцева зупинка цієї автобусної лінії?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "This bus line goes via {via}",
|
"en": "This transit route goes via {via}",
|
||||||
"de": "Die Buslinie fährt über {via}",
|
"de": "Die Buslinie fährt über {via}",
|
||||||
"nl": "Deze buslijn gaat via {via}",
|
"nl": "Deze OV-lijn gaat via {via}",
|
||||||
"da": "Denne buslinje går via {via}",
|
"da": "Denne buslinje går via {via}",
|
||||||
"fr": "Cette ligne de bus passe par {via}",
|
"fr": "Cette ligne de bus passe par {via}",
|
||||||
"ca": "Aquesta línia d'autobús passa per {via}",
|
"ca": "Aquesta línia d'autobús passa per {via}",
|
||||||
|
|
@ -168,9 +180,9 @@
|
||||||
{
|
{
|
||||||
"id": "to",
|
"id": "to",
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the ending point for this bus line?",
|
"en": "What is the ending point for this transit route?",
|
||||||
"de": "Wo ist der Endpunkt der Buslinie?",
|
"de": "Wo ist der Endpunkt der Buslinie?",
|
||||||
"nl": "Wat is het eindpunt van deze buslijn?",
|
"nl": "Wat is het eindpunt van deze OV-lijn?",
|
||||||
"da": "Hvad er endestationen for denne buslinje?",
|
"da": "Hvad er endestationen for denne buslinje?",
|
||||||
"ca": "Quin és el punt final d'aquesta línea d'autobús?",
|
"ca": "Quin és el punt final d'aquesta línea d'autobús?",
|
||||||
"cs": "Jaký je konečný bod této autobusové linky?",
|
"cs": "Jaký je konečný bod této autobusové linky?",
|
||||||
|
|
@ -178,9 +190,9 @@
|
||||||
"it": "Qual è il punto di arrivo di questa linea di autobus?"
|
"it": "Qual è il punto di arrivo di questa linea di autobus?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "This bus line ends at {to}",
|
"en": "This transit route ends at {to}",
|
||||||
"de": "Der Endpunkt der Buslinie ist {to}",
|
"de": "Der Endpunkt der Buslinie ist {to}",
|
||||||
"nl": "Deze buslijn eindigt bij {to}",
|
"nl": "Deze OV-lijn eindigt bij {to}",
|
||||||
"da": "Denne buslinje slutter ved {to}",
|
"da": "Denne buslinje slutter ved {to}",
|
||||||
"fr": "Cette ligne de bus termine à {to}",
|
"fr": "Cette ligne de bus termine à {to}",
|
||||||
"ca": "Aquesta línia d'autobús acaba a {to}",
|
"ca": "Aquesta línia d'autobús acaba a {to}",
|
||||||
|
|
@ -198,9 +210,9 @@
|
||||||
{
|
{
|
||||||
"id": "colour",
|
"id": "colour",
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the colour for this bus line?",
|
"en": "What is the colour for this transit route?",
|
||||||
"de": "Welche Farbe hat diese Buslinie?",
|
"de": "Welche Farbe hat diese Buslinie?",
|
||||||
"nl": "Wat is de kleur van deze buslijn?",
|
"nl": "Wat is de kleur van deze OV-lijn?",
|
||||||
"da": "Hvad er farven på denne buslinje?",
|
"da": "Hvad er farven på denne buslinje?",
|
||||||
"ca": "Quin és el color d'aquest línia d'autobús?",
|
"ca": "Quin és el color d'aquest línia d'autobús?",
|
||||||
"cs": "Jakou barvu má tato autobusová linka?",
|
"cs": "Jakou barvu má tato autobusová linka?",
|
||||||
|
|
@ -208,9 +220,9 @@
|
||||||
"it": "Qual è il colore di questa linea di autobus?"
|
"it": "Qual è il colore di questa linea di autobus?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "This bus line has the color {colour}",
|
"en": "This transit route has the color {colour}",
|
||||||
"de": "Die Buslinie hat die Farbe {colour}",
|
"de": "Die Buslinie hat die Farbe {colour}",
|
||||||
"nl": "Deze buslijn heeft de kleur {colour}",
|
"nl": "Deze OV-lijn heeft de kleur {colour}",
|
||||||
"da": "Denne buslinje har farven {colour}",
|
"da": "Denne buslinje har farven {colour}",
|
||||||
"ca": "Aquesta línea d'autobús té el color {colour}",
|
"ca": "Aquesta línea d'autobús té el color {colour}",
|
||||||
"cs": "Tato autobusová linka má barvu {colour}",
|
"cs": "Tato autobusová linka má barvu {colour}",
|
||||||
|
|
@ -225,9 +237,9 @@
|
||||||
{
|
{
|
||||||
"id": "network",
|
"id": "network",
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What network does this bus line belong to?",
|
"en": "What network does this transit route belong to?",
|
||||||
"de": "Zu welchem Verkehrsverbund gehört die Buslinie?",
|
"de": "Zu welchem Verkehrsverbund gehört die Buslinie?",
|
||||||
"nl": "Bij welk netwerk hoort deze buslijn?",
|
"nl": "Bij welk netwerk hoort deze OV-lijn?",
|
||||||
"da": "Hvilket netværk tilhører denne buslinje?",
|
"da": "Hvilket netværk tilhører denne buslinje?",
|
||||||
"ca": "A quina xarxa pertany aquesta línea d'autobús?",
|
"ca": "A quina xarxa pertany aquesta línea d'autobús?",
|
||||||
"cs": "Do jaké sítě tato autobusová linka patří?",
|
"cs": "Do jaké sítě tato autobusová linka patří?",
|
||||||
|
|
@ -235,9 +247,9 @@
|
||||||
"it": "A quale rete appartiene questa linea di autobus?"
|
"it": "A quale rete appartiene questa linea di autobus?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "This bus line is part of the {network} network",
|
"en": "This transit route is part of the {network} network",
|
||||||
"de": "Die Buslinie gehört zum Verkehrsverbund {network}",
|
"de": "Die Buslinie gehört zum Verkehrsverbund {network}",
|
||||||
"nl": "Deze buslijn is onderdeel van het {network} netwerk",
|
"nl": "Deze OV-lijn is onderdeel van het {network} netwerk",
|
||||||
"ca": "Aquesta línea d'autobús és part de la xarxa {network}",
|
"ca": "Aquesta línea d'autobús és part de la xarxa {network}",
|
||||||
"fr": "Cette ligne de bus fait partie du réseau {network}",
|
"fr": "Cette ligne de bus fait partie du réseau {network}",
|
||||||
"cs": "Tato autobusová linka je součástí sítě {network}",
|
"cs": "Tato autobusová linka je součástí sítě {network}",
|
||||||
|
|
@ -254,9 +266,9 @@
|
||||||
"builtin": "operator",
|
"builtin": "operator",
|
||||||
"override": {
|
"override": {
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What company operates this bus line?",
|
"en": "What company operates this transit route?",
|
||||||
"de": "Welches Unternehmen betreibt die Buslinie?",
|
"de": "Welches Unternehmen betreibt die Buslinie?",
|
||||||
"nl": "Welk bedrijf exploiteert deze buslijn?",
|
"nl": "Welk bedrijf exploiteert deze OV-lijn?",
|
||||||
"da": "Hvilket selskab driver denne buslinje?",
|
"da": "Hvilket selskab driver denne buslinje?",
|
||||||
"ca": "Quina companyia opera aquesta línia d'autobús?",
|
"ca": "Quina companyia opera aquesta línia d'autobús?",
|
||||||
"cs": "Jaká společnost provozuje tuto autobusovou linku?",
|
"cs": "Jaká společnost provozuje tuto autobusovou linku?",
|
||||||
|
|
@ -264,9 +276,9 @@
|
||||||
"it": "Quale azienda gestisce questa linea di autobus?"
|
"it": "Quale azienda gestisce questa linea di autobus?"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"en": "This bus line is operated by {operator}",
|
"en": "This transit route is operated by {operator}",
|
||||||
"de": "Die Buslinie wird betrieben von {operator}",
|
"de": "Die Buslinie wird betrieben von {operator}",
|
||||||
"nl": "Deze buslijn wordt geëxploiteerd door {operator}",
|
"nl": "Deze OV-lijn wordt geëxploiteerd door {operator}",
|
||||||
"da": "Denne buslinje drives af {operator}",
|
"da": "Denne buslinje drives af {operator}",
|
||||||
"ca": "{operator} opera aquesta línea d'autobús",
|
"ca": "{operator} opera aquesta línea d'autobús",
|
||||||
"fr": "Cette ligne de bus est gérée par {operator}",
|
"fr": "Cette ligne de bus est gérée par {operator}",
|
||||||
|
|
|
||||||
12
assets/layers/transit_stops/ferry.svg
Normal file
12
assets/layers/transit_stops/ferry.svg
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500">
|
||||||
|
<title>ANCHOR</title>
|
||||||
|
<g stroke="black" fill="none">
|
||||||
|
<circle cx="250" cy="80" r="40" stroke-width="20"/>
|
||||||
|
<path d="M 250,125 V 440 M 150,185 H 350 M 100,347 C 130,460 370,460 400,347" stroke-width="30"/>
|
||||||
|
</g>
|
||||||
|
<g fill="black">
|
||||||
|
<circle cx="250" cy="115" r="20"/>
|
||||||
|
<path d="M 55,365 L 75,260 150,330 Z M 225,440 L 250,470 275,440 Z M 445,365 L 425,260 350,330 Z"/>
|
||||||
|
</g>
|
||||||
|
<div xmlns="" id="divScriptsUsed" style="display: none"/><script xmlns="" id="globalVarsDetection" src="moz-extension://85428172-fe12-427b-ac2a-46cc4f37cea0/js/wrs_env.js"/></svg>
|
||||||
|
After Width: | Height: | Size: 653 B |
2
assets/layers/transit_stops/ferry.svg.license
Normal file
2
assets/layers/transit_stops/ferry.svg.license
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: DePiep
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
@ -11,5 +11,35 @@
|
||||||
"sources": [
|
"sources": [
|
||||||
"https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/highway/bus_stop.svg"
|
"https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/highway/bus_stop.svg"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "ferry.svg",
|
||||||
|
"license": "CC0-1.0",
|
||||||
|
"authors": [
|
||||||
|
"DePiep"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://commons.wikimedia.org/wiki/File:BSicon_ANCHOR.svg"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "subway.svg",
|
||||||
|
"license": "CC0-1.0",
|
||||||
|
"authors": [
|
||||||
|
"Siyuwj"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://commons.wikimedia.org/wiki/File:BSicon_SUBWAY-CHN.svg"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "tram.svg",
|
||||||
|
"license": "CC0-1.0",
|
||||||
|
"authors": [
|
||||||
|
"BjørnN"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://commons.wikimedia.org/wiki/File:BSicon_TRAM1.svg"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
51
assets/layers/transit_stops/subway.svg
Normal file
51
assets/layers/transit_stops/subway.svg
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="图层_2"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
width="1100"
|
||||||
|
height="1100"
|
||||||
|
viewBox="0 0 1100 1100"
|
||||||
|
enable-background="new 0 0 500 500"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||||
|
sodipodi:docname="BSicon_SUBWAY-CHN.svg"><metadata
|
||||||
|
id="metadata17"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs15" /><sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1009"
|
||||||
|
id="namedview13"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.70710678"
|
||||||
|
inkscape:cx="931.55143"
|
||||||
|
inkscape:cy="600.05849"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="图层_2"
|
||||||
|
inkscape:document-rotation="0" /><path
|
||||||
|
id="rect893"
|
||||||
|
style="opacity:1;fill:#000000;stroke:none;stroke-width:5.35389;stroke-miterlimit:10;stroke-dasharray:none"
|
||||||
|
d="M 427.9668 280 C 372.03142 280 327 325.03142 327 380.9668 L 327 729.0332 C 327 777.76822 361.18609 818.21983 406.98242 827.82812 L 291 1000 L 351 1000 L 432.50977 879 L 661.49023 879 L 743 1000 L 803 1000 L 687.01758 827.82812 C 732.81391 818.21983 767 777.76822 767 729.0332 L 767 380.9668 C 767 325.03142 721.96858 280 666.0332 280 L 427.9668 280 z M 493.17188 298 L 600.82812 298 C 609.23298 298 616 304.76702 616 313.17188 L 616 347.42969 C 616 355.83454 609.23299 362.59961 600.82812 362.59961 L 493.17188 362.59961 C 484.76702 362.59961 478 355.83454 478 347.42969 L 478 313.17188 C 478 304.76702 484.76701 298 493.17188 298 z M 420.40039 378.5 L 670.40039 378.5 C 698.10039 378.5 720.40039 400.8 720.40039 428.5 L 720.40039 498.5 C 720.40039 526.2 698.10039 548.5 670.40039 548.5 L 420.40039 548.5 C 392.70039 548.5 370.40039 526.2 370.40039 498.5 L 370.40039 428.5 C 370.40039 400.8 392.70039 378.5 420.40039 378.5 z M 421.96289 686.87891 L 422 686.87891 C 447.95738 686.87891 469 707.92153 469 733.87891 C 469 759.83629 447.95738 780.87891 422 780.87891 C 396.04262 780.87891 375 759.83629 375 733.87891 C 374.99999 707.93601 396.02 686.89939 421.96289 686.87891 z M 671.96289 686.87891 L 672 686.87891 C 697.95738 686.87891 719 707.92153 719 733.87891 C 719 759.83629 697.95738 780.87891 672 780.87891 C 646.04262 780.87891 625 759.83629 625 733.87891 C 624.99999 707.93601 646.02 686.89939 671.96289 686.87891 z " /><path
|
||||||
|
id="path852"
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:5.30544"
|
||||||
|
d="m 125.54793,964.142 c -0.4394,-165.32487 -1.0063,-331.8464 2.5075,-497.09678 15.3487,-160.29688 130.2979,-304.99034 282.9433,-356.36484 153.4477,-54.967807 336.3503,-9.11239 445.2166,112.36708 76.1891,80.74759 118.3471,193.0285 112.2182,304.20579 0.6161,145.2861 0.2421,291.60186 0.1978,436.88875 H 901.874 c -1.1193,-164.46202 0.57953,-329.00793 -3.19737,-493.40251 -14.4252,-143.60363 -125.8634,-270.68771 -266.3193,-303.96588 -123.1472,-31.48846 -261.1871,10.39271 -345.4035,105.90361 -62.9281,67.77457 -96.4043,161.10936 -90.8869,253.39078 -1.062,146.02217 -1.1439,292.0493 -1.6739,438.074 z"
|
||||||
|
sodipodi:nodetypes="ccccccccccccc" /></svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
2
assets/layers/transit_stops/subway.svg.license
Normal file
2
assets/layers/transit_stops/subway.svg.license
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: Siyuwj
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
15
assets/layers/transit_stops/tram.svg
Normal file
15
assets/layers/transit_stops/tram.svg
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500">
|
||||||
|
<g fill="none" stroke="#000">
|
||||||
|
<path stroke-width="5" d="m102 174 54-37 54 37-54 37Z"/>
|
||||||
|
<path stroke-width="14" d="M30 220h440"/>
|
||||||
|
</g>
|
||||||
|
<path d="m40 227-30 60v34a13 13 0 0 0 13 13h454a13 13 0 0 0 13-13v-34l-30-60Zm68-14 5-5h84l5 5ZM52 343a14 14 0 0 0 44 0Zm52 0a24 24 0 0 1-4 12h38a24 24 0 0 1-4-12Zm38 0a14 14 0 0 0 44 0Zm172 0a14 14 0 0 0 44 0Zm52 0a24 24 0 0 1-4 12h38a24 24 0 0 1-4-12Zm38 0a14 14 0 0 0 44 0Z"/>
|
||||||
|
<g fill="#fff">
|
||||||
|
<path d="M67 287H47c-30 0-30 0 0-60h20Zm366 0h20c30 0 30 0 0-60h-20ZM74 227h34v99H74z"/>
|
||||||
|
<rect width="77" height="60" x="117" y="227" rx="10"/>
|
||||||
|
<rect width="77" height="60" x="203" y="227" rx="10"/>
|
||||||
|
<rect width="77" height="60" x="289" y="227" rx="10"/>
|
||||||
|
<path d="M374 227h52v99h-52z"/>
|
||||||
|
</g>
|
||||||
|
<div xmlns="" id="divScriptsUsed" style="display: none"/><script xmlns="" id="globalVarsDetection" src="moz-extension://85428172-fe12-427b-ac2a-46cc4f37cea0/js/wrs_env.js"/></svg>
|
||||||
|
After Width: | Height: | Size: 1 KiB |
2
assets/layers/transit_stops/tram.svg.license
Normal file
2
assets/layers/transit_stops/tram.svg.license
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
SPDX-FileCopyrightText: BjørnN
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
@ -22,7 +22,9 @@
|
||||||
"source": {
|
"source": {
|
||||||
"osmTags": {
|
"osmTags": {
|
||||||
"or": [
|
"or": [
|
||||||
"highway=bus_stop"
|
"highway=bus_stop",
|
||||||
|
"railway=platform",
|
||||||
|
"amenity=ferry_terminal"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -32,7 +34,7 @@
|
||||||
"en": "Transit Stop",
|
"en": "Transit Stop",
|
||||||
"de": "Haltestelle",
|
"de": "Haltestelle",
|
||||||
"da": "Stoppested",
|
"da": "Stoppested",
|
||||||
"nl": "Bushalte",
|
"nl": "OV-halte",
|
||||||
"ca": "Parada de transport públic",
|
"ca": "Parada de transport públic",
|
||||||
"cs": "Tranzitní zastávka",
|
"cs": "Tranzitní zastávka",
|
||||||
"es": "Parada de transporte",
|
"es": "Parada de transporte",
|
||||||
|
|
@ -65,13 +67,39 @@
|
||||||
{
|
{
|
||||||
"icon": {
|
"icon": {
|
||||||
"render": "./assets/layers/transit_stops/bus_stop.svg",
|
"render": "./assets/layers/transit_stops/bus_stop.svg",
|
||||||
"mappings": []
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "train=yes",
|
||||||
|
"then": "./assets/svg/train.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "subway=yes",
|
||||||
|
"then": "./assets/layers/transit_stops/subway.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "tram=yes",
|
||||||
|
"then": "./assets/layers/transit_stops/tram.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "light_rail=yes",
|
||||||
|
"then": "./assets/svg/train.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "ferry=yes",
|
||||||
|
"then": "./assets/layers/transit_stops/ferry.svg"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lineRendering": [],
|
"lineRendering": [
|
||||||
|
{
|
||||||
|
"color": "#74717190",
|
||||||
|
"fillColor": "#74717190"
|
||||||
|
}
|
||||||
|
],
|
||||||
"tagRenderings": [
|
"tagRenderings": [
|
||||||
{
|
{
|
||||||
"id": "stop_name",
|
"id": "stop_name",
|
||||||
|
|
@ -134,6 +162,30 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "ref",
|
||||||
|
"question": {
|
||||||
|
"en": "What is the platform reference of this stop?"
|
||||||
|
},
|
||||||
|
"render": {
|
||||||
|
"en": "The platform reference of this stop is <b>{ref}</b>."
|
||||||
|
},
|
||||||
|
"freeform": {
|
||||||
|
"key": "ref",
|
||||||
|
"type": "string",
|
||||||
|
"placeholder": {
|
||||||
|
"en": "e.g. A1 or 1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "ref=",
|
||||||
|
"then": {
|
||||||
|
"en": "This stop has no platform reference"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"images",
|
"images",
|
||||||
{
|
{
|
||||||
"id": "shelter",
|
"id": "shelter",
|
||||||
|
|
|
||||||
|
|
@ -1,196 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="343px" height="370px" viewBox="0 0 343 370" version="1.1">
|
|
||||||
<g id="surface1">
|
|
||||||
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:1.0568;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 117.14544 98.889271 L 203.016089 98.889271 L 203.016089 191.843045 L 117.14544 191.843045 Z M 117.14544 98.889271 " transform="matrix(3.944705,0,0,3.93576,-459.971387,-387.126315)"/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.683594 35.921875 L 21.300781 35.921875 L 21.300781 34.839844 L 23.054688 34.445312 L 23.054688 22.550781 L 21.300781 22.136719 L 21.300781 21.054688 L 26.683594 21.054688 L 26.683594 22.136719 L 24.933594 22.550781 L 24.933594 34.445312 L 26.683594 34.839844 Z M 26.683594 35.921875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.589844 24.550781 C 42.855469 24.550781 43.800781 24.878906 44.429688 25.53125 C 45.054688 26.167969 45.367188 27.210938 45.367188 28.65625 L 45.367188 35.921875 L 43.550781 35.921875 L 43.550781 28.738281 C 43.550781 26.972656 42.792969 26.09375 41.277344 26.09375 C 40.191406 26.09375 39.410156 26.40625 38.9375 27.03125 C 38.480469 27.65625 38.25 28.5625 38.25 29.757812 L 38.25 35.921875 L 36.433594 35.921875 L 36.433594 28.738281 C 36.433594 26.972656 35.667969 26.09375 34.136719 26.09375 C 33.011719 26.09375 32.230469 26.441406 31.800781 27.132812 C 31.367188 27.828125 31.152344 28.828125 31.152344 30.132812 L 31.152344 35.921875 L 29.316406 35.921875 L 29.316406 24.761719 L 30.796875 24.761719 L 31.070312 26.28125 L 31.171875 26.28125 C 31.519531 25.695312 31.988281 25.265625 32.570312 24.988281 C 33.171875 24.699219 33.804688 24.550781 34.472656 24.550781 C 36.226562 24.550781 37.367188 25.175781 37.894531 26.425781 L 38 26.425781 C 38.375 25.789062 38.882812 25.316406 39.523438 25.011719 C 40.175781 24.703125 40.867188 24.550781 41.589844 24.550781 Z M 41.589844 24.550781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 53.070312 24.574219 C 54.433594 24.574219 55.441406 24.871094 56.097656 25.46875 C 56.75 26.066406 57.078125 27.015625 57.078125 28.320312 L 57.078125 35.921875 L 55.742188 35.921875 L 55.386719 34.339844 L 55.304688 34.339844 C 54.816406 34.953125 54.300781 35.402344 53.757812 35.695312 C 53.230469 35.984375 52.492188 36.132812 51.546875 36.132812 C 50.53125 36.132812 49.6875 35.867188 49.019531 35.339844 C 48.351562 34.796875 48.019531 33.957031 48.019531 32.820312 C 48.019531 31.710938 48.457031 30.855469 49.332031 30.257812 C 50.210938 29.648438 51.558594 29.3125 53.382812 29.257812 L 55.28125 29.195312 L 55.28125 28.53125 C 55.28125 27.597656 55.082031 26.953125 54.675781 26.59375 C 54.273438 26.230469 53.703125 26.050781 52.964844 26.050781 C 52.382812 26.050781 51.824219 26.140625 51.296875 26.320312 C 50.765625 26.488281 50.273438 26.683594 49.8125 26.90625 L 49.25 25.53125 C 49.738281 25.265625 50.316406 25.042969 50.984375 24.863281 C 51.652344 24.667969 52.347656 24.574219 53.070312 24.574219 Z M 55.261719 30.464844 L 53.613281 30.527344 C 52.222656 30.585938 51.253906 30.808594 50.710938 31.195312 C 50.183594 31.585938 49.917969 32.132812 49.917969 32.839844 C 49.917969 33.464844 50.105469 33.921875 50.480469 34.214844 C 50.871094 34.507812 51.367188 34.652344 51.964844 34.652344 C 52.910156 34.652344 53.695312 34.394531 54.324219 33.882812 C 54.949219 33.355469 55.261719 32.550781 55.261719 31.464844 Z M 55.261719 30.464844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 64.507812 24.550781 C 65.246094 24.550781 65.90625 24.691406 66.492188 24.96875 C 67.089844 25.246094 67.597656 25.667969 68.015625 26.238281 L 68.121094 26.238281 L 68.371094 24.761719 L 69.832031 24.761719 L 69.832031 36.109375 C 69.832031 37.707031 69.421875 38.910156 68.601562 39.714844 C 67.792969 40.519531 66.535156 40.921875 64.824219 40.921875 C 63.179688 40.921875 61.835938 40.683594 60.792969 40.214844 L 60.792969 38.527344 C 61.894531 39.109375 63.269531 39.402344 64.925781 39.402344 C 65.886719 39.402344 66.636719 39.117188 67.179688 38.546875 C 67.738281 37.992188 68.015625 37.226562 68.015625 36.257812 L 68.015625 35.820312 C 68.015625 35.652344 68.023438 35.417969 68.035156 35.109375 C 68.050781 34.792969 68.066406 34.570312 68.078125 34.445312 L 67.996094 34.445312 C 67.242188 35.570312 66.089844 36.132812 64.53125 36.132812 C 63.082031 36.132812 61.949219 35.625 61.128906 34.609375 C 60.320312 33.597656 59.917969 32.179688 59.917969 30.363281 C 59.917969 28.585938 60.320312 27.175781 61.128906 26.132812 C 61.949219 25.078125 63.074219 24.550781 64.507812 24.550781 Z M 64.757812 26.09375 C 63.828125 26.09375 63.105469 26.46875 62.589844 27.21875 C 62.074219 27.953125 61.816406 29.007812 61.816406 30.382812 C 61.816406 31.757812 62.066406 32.8125 62.566406 33.550781 C 63.082031 34.269531 63.828125 34.632812 64.800781 34.632812 C 65.929688 34.632812 66.75 34.332031 67.265625 33.738281 C 67.78125 33.125 68.035156 32.148438 68.035156 30.800781 L 68.035156 30.363281 C 68.035156 28.835938 67.773438 27.746094 67.242188 27.09375 C 66.714844 26.425781 65.886719 26.09375 64.757812 26.09375 Z M 64.757812 26.09375 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 77.703125 24.550781 C 78.660156 24.550781 79.484375 24.761719 80.164062 25.175781 C 80.859375 25.59375 81.390625 26.183594 81.75 26.945312 C 82.128906 27.695312 82.316406 28.578125 82.316406 29.59375 L 82.316406 30.695312 L 74.652344 30.695312 C 74.683594 31.960938 75.003906 32.925781 75.613281 33.589844 C 76.242188 34.242188 77.109375 34.570312 78.222656 34.570312 C 78.933594 34.570312 79.558594 34.507812 80.101562 34.382812 C 80.660156 34.242188 81.230469 34.046875 81.8125 33.796875 L 81.8125 35.402344 C 81.242188 35.652344 80.679688 35.832031 80.125 35.945312 C 79.566406 36.070312 78.90625 36.132812 78.140625 36.132812 C 77.082031 36.132812 76.144531 35.917969 75.320312 35.484375 C 74.515625 35.054688 73.882812 34.417969 73.421875 33.570312 C 72.976562 32.707031 72.753906 31.660156 72.753906 30.425781 C 72.753906 29.203125 72.957031 28.15625 73.359375 27.28125 C 73.777344 26.40625 74.355469 25.730469 75.09375 25.261719 C 75.84375 24.789062 76.714844 24.550781 77.703125 24.550781 Z M 77.679688 26.050781 C 76.804688 26.050781 76.109375 26.335938 75.59375 26.90625 C 75.09375 27.460938 74.792969 28.238281 74.695312 29.238281 L 80.394531 29.238281 C 80.378906 28.292969 80.15625 27.53125 79.726562 26.945312 C 79.296875 26.351562 78.613281 26.050781 77.679688 26.050781 Z M 77.679688 26.050781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 95.964844 24.550781 C 97.300781 24.550781 98.3125 24.878906 98.992188 25.53125 C 99.675781 26.167969 100.015625 27.210938 100.015625 28.65625 L 100.015625 35.921875 L 98.199219 35.921875 L 98.199219 28.78125 C 98.199219 26.988281 97.363281 26.09375 95.695312 26.09375 C 94.457031 26.09375 93.601562 26.441406 93.128906 27.132812 C 92.65625 27.828125 92.417969 28.828125 92.417969 30.132812 L 92.417969 35.921875 L 90.582031 35.921875 L 90.582031 24.761719 L 92.0625 24.761719 L 92.335938 26.28125 L 92.4375 26.28125 C 92.800781 25.695312 93.300781 25.265625 93.941406 24.988281 C 94.582031 24.699219 95.257812 24.550781 95.964844 24.550781 Z M 95.964844 24.550781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 113.207031 30.320312 C 113.207031 32.167969 112.734375 33.597656 111.789062 34.609375 C 110.855469 35.625 109.589844 36.132812 107.988281 36.132812 C 107 36.132812 106.117188 35.910156 105.339844 35.464844 C 104.574219 35.007812 103.96875 34.347656 103.523438 33.488281 C 103.078125 32.613281 102.855469 31.554688 102.855469 30.320312 C 102.855469 28.472656 103.320312 27.050781 104.253906 26.050781 C 105.1875 25.050781 106.453125 24.550781 108.050781 24.550781 C 109.066406 24.550781 109.957031 24.78125 110.722656 25.238281 C 111.503906 25.683594 112.109375 26.335938 112.539062 27.195312 C 112.984375 28.042969 113.207031 29.085938 113.207031 30.320312 Z M 104.753906 30.320312 C 104.753906 31.640625 105.011719 32.6875 105.527344 33.464844 C 106.054688 34.230469 106.890625 34.609375 108.03125 34.609375 C 109.160156 34.609375 109.988281 34.230469 110.515625 33.464844 C 111.042969 32.6875 111.308594 31.640625 111.308594 30.320312 C 111.308594 29 111.042969 27.96875 110.515625 27.21875 C 109.988281 26.46875 109.152344 26.09375 108.011719 26.09375 C 106.871094 26.09375 106.042969 26.46875 105.527344 27.21875 C 105.011719 27.96875 104.753906 29 104.753906 30.320312 Z M 104.753906 30.320312 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 119.847656 34.632812 C 120.125 34.632812 120.410156 34.609375 120.703125 34.570312 C 120.996094 34.515625 121.230469 34.457031 121.410156 34.402344 L 121.410156 35.796875 C 121.21875 35.894531 120.9375 35.972656 120.578125 36.027344 C 120.214844 36.097656 119.867188 36.132812 119.53125 36.132812 C 118.949219 36.132812 118.40625 36.035156 117.90625 35.839844 C 117.417969 35.632812 117.019531 35.277344 116.714844 34.777344 C 116.410156 34.277344 116.257812 33.578125 116.257812 32.675781 L 116.257812 26.175781 L 114.667969 26.175781 L 114.667969 25.300781 L 116.277344 24.574219 L 117.007812 22.199219 L 118.09375 22.199219 L 118.09375 24.761719 L 121.328125 24.761719 L 121.328125 26.175781 L 118.09375 26.175781 L 118.09375 32.632812 C 118.09375 33.3125 118.253906 33.820312 118.574219 34.152344 C 118.90625 34.472656 119.332031 34.632812 119.847656 34.632812 Z M 119.847656 34.632812 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 133.308594 24.574219 C 134.671875 24.574219 135.683594 24.871094 136.335938 25.46875 C 136.992188 26.066406 137.316406 27.015625 137.316406 28.320312 L 137.316406 35.921875 L 135.980469 35.921875 L 135.628906 34.339844 L 135.542969 34.339844 C 135.054688 34.953125 134.542969 35.402344 134 35.695312 C 133.46875 35.984375 132.734375 36.132812 131.785156 36.132812 C 130.769531 36.132812 129.929688 35.867188 129.261719 35.339844 C 128.59375 34.796875 128.257812 33.957031 128.257812 32.820312 C 128.257812 31.710938 128.695312 30.855469 129.574219 30.257812 C 130.449219 29.648438 131.800781 29.3125 133.625 29.257812 L 135.523438 29.195312 L 135.523438 28.53125 C 135.523438 27.597656 135.320312 26.953125 134.917969 26.59375 C 134.515625 26.230469 133.941406 26.050781 133.207031 26.050781 C 132.621094 26.050781 132.066406 26.140625 131.535156 26.320312 C 131.007812 26.488281 130.511719 26.683594 130.054688 26.90625 L 129.488281 25.53125 C 129.976562 25.265625 130.554688 25.042969 131.222656 24.863281 C 131.890625 24.667969 132.585938 24.574219 133.308594 24.574219 Z M 135.5 30.464844 L 133.851562 30.527344 C 132.460938 30.585938 131.492188 30.808594 130.953125 31.195312 C 130.421875 31.585938 130.15625 32.132812 130.15625 32.839844 C 130.15625 33.464844 130.347656 33.921875 130.722656 34.214844 C 131.109375 34.507812 131.605469 34.652344 132.203125 34.652344 C 133.148438 34.652344 133.9375 34.394531 134.5625 33.882812 C 135.1875 33.355469 135.5 32.550781 135.5 31.464844 Z M 135.5 30.464844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 143.246094 35.921875 L 139.007812 24.761719 L 140.972656 24.761719 L 143.351562 31.339844 C 143.460938 31.648438 143.578125 31.988281 143.707031 32.363281 C 143.832031 32.738281 143.941406 33.097656 144.039062 33.445312 C 144.136719 33.777344 144.207031 34.0625 144.246094 34.296875 L 144.332031 34.296875 C 144.386719 34.0625 144.464844 33.769531 144.5625 33.425781 C 144.671875 33.078125 144.789062 32.714844 144.914062 32.339844 C 145.054688 31.964844 145.171875 31.632812 145.269531 31.339844 L 147.652344 24.761719 L 149.613281 24.761719 L 145.355469 35.921875 Z M 143.246094 35.921875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 155.625 24.574219 C 156.988281 24.574219 157.996094 24.871094 158.652344 25.46875 C 159.304688 26.066406 159.632812 27.015625 159.632812 28.320312 L 159.632812 35.921875 L 158.296875 35.921875 L 157.941406 34.339844 L 157.859375 34.339844 C 157.371094 34.953125 156.855469 35.402344 156.3125 35.695312 C 155.785156 35.984375 155.046875 36.132812 154.101562 36.132812 C 153.085938 36.132812 152.242188 35.867188 151.574219 35.339844 C 150.90625 34.796875 150.574219 33.957031 150.574219 32.820312 C 150.574219 31.710938 151.011719 30.855469 151.886719 30.257812 C 152.765625 29.648438 154.113281 29.3125 155.9375 29.257812 L 157.835938 29.195312 L 157.835938 28.53125 C 157.835938 27.597656 157.636719 26.953125 157.230469 26.59375 C 156.828125 26.230469 156.257812 26.050781 155.519531 26.050781 C 154.933594 26.050781 154.378906 26.140625 153.851562 26.320312 C 153.320312 26.488281 152.828125 26.683594 152.367188 26.90625 L 151.804688 25.53125 C 152.292969 25.265625 152.867188 25.042969 153.535156 24.863281 C 154.203125 24.667969 154.902344 24.574219 155.625 24.574219 Z M 157.816406 30.464844 L 156.167969 30.527344 C 154.777344 30.585938 153.808594 30.808594 153.265625 31.195312 C 152.738281 31.585938 152.472656 32.132812 152.472656 32.839844 C 152.472656 33.464844 152.660156 33.921875 153.035156 34.214844 C 153.425781 34.507812 153.917969 34.652344 154.519531 34.652344 C 155.464844 34.652344 156.25 34.394531 156.875 33.882812 C 157.503906 33.355469 157.816406 32.550781 157.816406 31.464844 Z M 157.816406 30.464844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 164.035156 20.574219 C 164.316406 20.574219 164.558594 20.671875 164.765625 20.867188 C 164.988281 21.046875 165.101562 21.335938 165.101562 21.738281 C 165.101562 22.128906 164.988281 22.421875 164.765625 22.613281 C 164.558594 22.808594 164.316406 22.90625 164.035156 22.90625 C 163.730469 22.90625 163.472656 22.808594 163.265625 22.613281 C 163.054688 22.421875 162.949219 22.128906 162.949219 21.738281 C 162.949219 21.335938 163.054688 21.046875 163.265625 20.867188 C 163.472656 20.671875 163.730469 20.574219 164.035156 20.574219 Z M 164.933594 24.761719 L 164.933594 35.921875 L 163.097656 35.921875 L 163.097656 24.761719 Z M 164.933594 24.761719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 170.320312 35.921875 L 168.484375 35.921875 L 168.484375 20.09375 L 170.320312 20.09375 Z M 170.320312 35.921875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 178.105469 24.574219 C 179.46875 24.574219 180.476562 24.871094 181.132812 25.46875 C 181.785156 26.066406 182.113281 27.015625 182.113281 28.320312 L 182.113281 35.921875 L 180.777344 35.921875 L 180.421875 34.339844 L 180.339844 34.339844 C 179.851562 34.953125 179.335938 35.402344 178.792969 35.695312 C 178.265625 35.984375 177.527344 36.132812 176.582031 36.132812 C 175.566406 36.132812 174.722656 35.867188 174.054688 35.339844 C 173.386719 34.796875 173.054688 33.957031 173.054688 32.820312 C 173.054688 31.710938 173.492188 30.855469 174.371094 30.257812 C 175.246094 29.648438 176.597656 29.3125 178.417969 29.257812 L 180.316406 29.195312 L 180.316406 28.53125 C 180.316406 27.597656 180.117188 26.953125 179.714844 26.59375 C 179.308594 26.230469 178.738281 26.050781 178 26.050781 C 177.417969 26.050781 176.859375 26.140625 176.332031 26.320312 C 175.800781 26.488281 175.308594 26.683594 174.847656 26.90625 L 174.285156 25.53125 C 174.773438 25.265625 175.351562 25.042969 176.019531 24.863281 C 176.6875 24.667969 177.382812 24.574219 178.105469 24.574219 Z M 180.296875 30.464844 L 178.648438 30.527344 C 177.257812 30.585938 176.289062 30.808594 175.746094 31.195312 C 175.21875 31.585938 174.953125 32.132812 174.953125 32.839844 C 174.953125 33.464844 175.140625 33.921875 175.515625 34.214844 C 175.90625 34.507812 176.402344 34.652344 177 34.652344 C 177.945312 34.652344 178.730469 34.394531 179.359375 33.882812 C 179.984375 33.355469 180.296875 32.550781 180.296875 31.464844 Z M 180.296875 30.464844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 187.414062 20.09375 L 187.414062 23.949219 C 187.414062 24.417969 187.402344 24.863281 187.375 25.28125 C 187.359375 25.683594 187.339844 26.003906 187.3125 26.238281 L 187.414062 26.238281 C 187.734375 25.765625 188.175781 25.371094 188.730469 25.050781 C 189.289062 24.730469 190.003906 24.574219 190.878906 24.574219 C 192.273438 24.574219 193.386719 25.058594 194.21875 26.03125 C 195.070312 26.988281 195.492188 28.425781 195.492188 30.339844 C 195.492188 32.257812 195.070312 33.703125 194.21875 34.671875 C 193.371094 35.644531 192.257812 36.132812 190.878906 36.132812 C 190.003906 36.132812 189.289062 35.972656 188.730469 35.652344 C 188.175781 35.332031 187.734375 34.953125 187.414062 34.507812 L 187.269531 34.507812 L 186.894531 35.921875 L 185.578125 35.921875 L 185.578125 20.09375 Z M 190.566406 26.09375 C 189.382812 26.09375 188.5625 26.433594 188.105469 27.113281 C 187.644531 27.792969 187.414062 28.847656 187.414062 30.277344 L 187.414062 30.363281 C 187.414062 31.738281 187.636719 32.792969 188.082031 33.527344 C 188.542969 34.25 189.382812 34.609375 190.609375 34.609375 C 191.609375 34.609375 192.355469 34.242188 192.84375 33.507812 C 193.34375 32.769531 193.59375 31.710938 193.59375 30.320312 C 193.59375 27.503906 192.585938 26.09375 190.566406 26.09375 Z M 190.566406 26.09375 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 200.253906 35.921875 L 198.417969 35.921875 L 198.417969 20.09375 L 200.253906 20.09375 Z M 200.253906 35.921875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 208.121094 24.550781 C 209.082031 24.550781 209.902344 24.761719 210.585938 25.175781 C 211.28125 25.59375 211.808594 26.183594 212.171875 26.945312 C 212.546875 27.695312 212.734375 28.578125 212.734375 29.59375 L 212.734375 30.695312 L 205.074219 30.695312 C 205.101562 31.960938 205.421875 32.925781 206.035156 33.589844 C 206.660156 34.242188 207.53125 34.570312 208.644531 34.570312 C 209.355469 34.570312 209.980469 34.507812 210.523438 34.382812 C 211.078125 34.242188 211.648438 34.046875 212.234375 33.796875 L 212.234375 35.402344 C 211.664062 35.652344 211.101562 35.832031 210.542969 35.945312 C 209.988281 36.070312 209.328125 36.132812 208.5625 36.132812 C 207.503906 36.132812 206.5625 35.917969 205.742188 35.484375 C 204.9375 35.054688 204.300781 34.417969 203.84375 33.570312 C 203.398438 32.707031 203.175781 31.660156 203.175781 30.425781 C 203.175781 29.203125 203.378906 28.15625 203.78125 27.28125 C 204.199219 26.40625 204.777344 25.730469 205.511719 25.261719 C 206.265625 24.789062 207.132812 24.550781 208.121094 24.550781 Z M 208.101562 26.050781 C 207.226562 26.050781 206.527344 26.335938 206.015625 26.90625 C 205.511719 27.460938 205.214844 28.238281 205.117188 29.238281 L 210.816406 29.238281 C 210.800781 28.292969 210.578125 27.53125 210.148438 26.945312 C 209.714844 26.351562 209.035156 26.050781 208.101562 26.050781 Z M 208.101562 26.050781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 29.066406 87.988281 L 24.160156 74.953125 L 24.078125 74.953125 C 24.117188 75.382812 24.152344 75.964844 24.179688 76.703125 C 24.207031 77.425781 24.222656 78.179688 24.222656 78.972656 L 24.222656 87.988281 L 22.488281 87.988281 L 22.488281 73.121094 L 25.265625 73.121094 L 29.859375 85.304688 L 29.941406 85.304688 L 34.617188 73.121094 L 37.375 73.121094 L 37.375 87.988281 L 35.515625 87.988281 L 35.515625 78.847656 C 35.515625 78.125 35.527344 77.410156 35.558594 76.703125 C 35.597656 75.992188 35.632812 75.417969 35.660156 74.972656 L 35.578125 74.972656 L 30.609375 87.988281 Z M 29.066406 87.988281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 45.410156 76.640625 C 46.773438 76.640625 47.78125 76.9375 48.4375 77.535156 C 49.089844 78.132812 49.417969 79.082031 49.417969 80.386719 L 49.417969 87.988281 L 48.082031 87.988281 L 47.726562 86.40625 L 47.644531 86.40625 C 47.15625 87.019531 46.640625 87.46875 46.097656 87.761719 C 45.570312 88.050781 44.832031 88.199219 43.886719 88.199219 C 42.871094 88.199219 42.027344 87.933594 41.359375 87.40625 C 40.691406 86.867188 40.359375 86.023438 40.359375 84.886719 C 40.359375 83.777344 40.796875 82.921875 41.671875 82.324219 C 42.550781 81.714844 43.898438 81.382812 45.722656 81.324219 L 47.621094 81.261719 L 47.621094 80.597656 C 47.621094 79.667969 47.421875 79.019531 47.015625 78.660156 C 46.613281 78.296875 46.042969 78.117188 45.304688 78.117188 C 44.722656 78.117188 44.164062 78.207031 43.636719 78.390625 C 43.105469 78.554688 42.613281 78.75 42.152344 78.972656 L 41.589844 77.597656 C 42.078125 77.332031 42.652344 77.113281 43.320312 76.929688 C 43.988281 76.738281 44.6875 76.640625 45.410156 76.640625 Z M 47.601562 82.535156 L 45.953125 82.597656 C 44.5625 82.652344 43.59375 82.875 43.050781 83.261719 C 42.523438 83.652344 42.257812 84.199219 42.257812 84.90625 C 42.257812 85.53125 42.445312 85.992188 42.820312 86.28125 C 43.210938 86.574219 43.703125 86.71875 44.304688 86.71875 C 45.25 86.71875 46.035156 86.460938 46.660156 85.949219 C 47.289062 85.421875 47.601562 84.617188 47.601562 83.53125 Z M 47.601562 82.535156 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 58.207031 76.617188 C 59.582031 76.617188 60.6875 77.097656 61.523438 78.054688 C 62.375 79.011719 62.796875 80.457031 62.796875 82.386719 C 62.796875 84.289062 62.375 85.734375 61.523438 86.71875 C 60.6875 87.707031 59.574219 88.199219 58.183594 88.199219 C 57.320312 88.199219 56.605469 88.039062 56.035156 87.71875 C 55.476562 87.386719 55.039062 87.003906 54.71875 86.574219 L 54.59375 86.574219 C 54.621094 86.808594 54.648438 87.109375 54.675781 87.46875 C 54.707031 87.832031 54.71875 88.144531 54.71875 88.40625 L 54.71875 92.988281 L 52.882812 92.988281 L 52.882812 76.828125 L 54.386719 76.828125 L 54.636719 78.347656 L 54.71875 78.347656 C 55.054688 77.859375 55.492188 77.453125 56.035156 77.117188 C 56.578125 76.785156 57.300781 76.617188 58.207031 76.617188 Z M 57.871094 78.160156 C 56.730469 78.160156 55.921875 78.480469 55.449219 79.117188 C 54.992188 79.757812 54.746094 80.726562 54.71875 82.035156 L 54.71875 82.386719 C 54.71875 83.761719 54.941406 84.824219 55.386719 85.574219 C 55.847656 86.308594 56.6875 86.679688 57.914062 86.679688 C 58.59375 86.679688 59.152344 86.492188 59.582031 86.117188 C 60.027344 85.742188 60.355469 85.234375 60.5625 84.59375 C 60.785156 83.941406 60.898438 83.199219 60.898438 82.367188 C 60.898438 81.089844 60.648438 80.070312 60.148438 79.304688 C 59.660156 78.542969 58.902344 78.160156 57.871094 78.160156 Z M 57.871094 78.160156 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 66.660156 72.640625 C 66.9375 72.640625 67.179688 72.738281 67.390625 72.933594 C 67.613281 73.113281 67.722656 73.40625 67.722656 73.808594 C 67.722656 74.195312 67.613281 74.488281 67.390625 74.683594 C 67.179688 74.875 66.9375 74.972656 66.660156 74.972656 C 66.351562 74.972656 66.097656 74.875 65.886719 74.683594 C 65.679688 74.488281 65.574219 74.195312 65.574219 73.808594 C 65.574219 73.40625 65.679688 73.113281 65.886719 72.933594 C 66.097656 72.738281 66.351562 72.640625 66.660156 72.640625 Z M 67.558594 76.828125 L 67.558594 87.988281 L 65.71875 87.988281 L 65.71875 76.828125 Z M 67.558594 76.828125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 72.941406 87.988281 L 71.105469 87.988281 L 71.105469 72.160156 L 72.941406 72.160156 Z M 72.941406 87.988281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 78.328125 87.988281 L 76.492188 87.988281 L 76.492188 72.160156 L 78.328125 72.160156 Z M 78.328125 87.988281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 86.113281 76.640625 C 87.476562 76.640625 88.488281 76.9375 89.140625 77.535156 C 89.792969 78.132812 90.121094 79.082031 90.121094 80.386719 L 90.121094 87.988281 L 88.785156 87.988281 L 88.429688 86.40625 L 88.347656 86.40625 C 87.859375 87.019531 87.34375 87.46875 86.804688 87.761719 C 86.273438 88.050781 85.535156 88.199219 84.589844 88.199219 C 83.574219 88.199219 82.730469 87.933594 82.0625 87.40625 C 81.394531 86.867188 81.0625 86.023438 81.0625 84.886719 C 81.0625 83.777344 81.5 82.921875 82.378906 82.324219 C 83.253906 81.714844 84.605469 81.382812 86.425781 81.324219 L 88.328125 81.261719 L 88.328125 80.597656 C 88.328125 79.667969 88.125 79.019531 87.722656 78.660156 C 87.316406 78.296875 86.746094 78.117188 86.007812 78.117188 C 85.425781 78.117188 84.867188 78.207031 84.339844 78.390625 C 83.8125 78.554688 83.316406 78.75 82.859375 78.972656 L 82.292969 77.597656 C 82.78125 77.332031 83.359375 77.113281 84.027344 76.929688 C 84.695312 76.738281 85.390625 76.640625 86.113281 76.640625 Z M 88.304688 82.535156 L 86.65625 82.597656 C 85.265625 82.652344 84.296875 82.875 83.753906 83.261719 C 83.226562 83.652344 82.960938 84.199219 82.960938 84.90625 C 82.960938 85.53125 83.148438 85.992188 83.527344 86.28125 C 83.914062 86.574219 84.410156 86.71875 85.007812 86.71875 C 85.953125 86.71875 86.738281 86.460938 87.367188 85.949219 C 87.992188 85.421875 88.304688 84.617188 88.304688 83.53125 Z M 88.304688 82.535156 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 98.804688 76.617188 C 99.015625 76.617188 99.238281 76.632812 99.472656 76.660156 C 99.722656 76.675781 99.941406 76.703125 100.121094 76.742188 L 99.890625 78.429688 C 99.710938 78.390625 99.507812 78.355469 99.285156 78.328125 C 99.078125 78.296875 98.875 78.285156 98.679688 78.285156 C 98.109375 78.285156 97.574219 78.445312 97.074219 78.765625 C 96.570312 79.070312 96.167969 79.507812 95.863281 80.074219 C 95.570312 80.632812 95.421875 81.285156 95.421875 82.035156 L 95.421875 87.988281 L 93.585938 87.988281 L 93.585938 76.828125 L 95.089844 76.828125 L 95.296875 78.867188 L 95.382812 78.867188 C 95.742188 78.257812 96.210938 77.730469 96.78125 77.285156 C 97.351562 76.839844 98.027344 76.617188 98.804688 76.617188 Z M 98.804688 76.617188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 100.453125 76.828125 L 102.417969 76.828125 L 104.839844 83.179688 C 105.046875 83.734375 105.234375 84.269531 105.402344 84.78125 C 105.570312 85.28125 105.695312 85.761719 105.777344 86.21875 L 105.859375 86.21875 C 105.945312 85.871094 106.078125 85.421875 106.257812 84.867188 C 106.4375 84.296875 106.625 83.726562 106.820312 83.15625 L 109.097656 76.828125 L 111.078125 76.828125 L 106.257812 89.53125 C 105.867188 90.585938 105.359375 91.425781 104.734375 92.050781 C 104.121094 92.675781 103.273438 92.988281 102.1875 92.988281 C 101.851562 92.988281 101.5625 92.96875 101.308594 92.925781 C 101.058594 92.898438 100.84375 92.863281 100.664062 92.820312 L 100.664062 91.363281 C 100.816406 91.390625 100.996094 91.417969 101.207031 91.445312 C 101.429688 91.476562 101.65625 91.488281 101.894531 91.488281 C 102.535156 91.488281 103.050781 91.308594 103.4375 90.949219 C 103.84375 90.585938 104.15625 90.105469 104.378906 89.511719 L 104.964844 88.03125 Z M 100.453125 76.828125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 125.566406 84.90625 C 125.566406 85.992188 125.164062 86.808594 124.355469 87.363281 C 123.546875 87.921875 122.460938 88.199219 121.097656 88.199219 C 120.320312 88.199219 119.644531 88.136719 119.074219 88.011719 C 118.515625 87.886719 118.023438 87.710938 117.59375 87.488281 L 117.59375 85.824219 C 118.039062 86.046875 118.574219 86.253906 119.199219 86.449219 C 119.839844 86.628906 120.488281 86.71875 121.140625 86.71875 C 122.074219 86.71875 122.746094 86.574219 123.164062 86.28125 C 123.582031 85.976562 123.792969 85.574219 123.792969 85.074219 C 123.792969 84.796875 123.714844 84.546875 123.5625 84.324219 C 123.410156 84.101562 123.128906 83.878906 122.726562 83.65625 C 122.335938 83.4375 121.773438 83.1875 121.035156 82.910156 C 120.3125 82.628906 119.691406 82.351562 119.179688 82.074219 C 118.664062 81.796875 118.265625 81.464844 117.988281 81.074219 C 117.710938 80.6875 117.570312 80.1875 117.570312 79.574219 C 117.570312 78.632812 117.953125 77.902344 118.71875 77.390625 C 119.5 76.875 120.515625 76.617188 121.765625 76.617188 C 122.449219 76.617188 123.082031 76.6875 123.667969 76.828125 C 124.265625 76.953125 124.820312 77.132812 125.335938 77.367188 L 124.710938 78.828125 C 124.238281 78.632812 123.742188 78.464844 123.226562 78.328125 C 122.714844 78.1875 122.183594 78.117188 121.640625 78.117188 C 120.890625 78.117188 120.3125 78.242188 119.910156 78.492188 C 119.519531 78.730469 119.324219 79.054688 119.324219 79.472656 C 119.324219 79.777344 119.414062 80.042969 119.597656 80.261719 C 119.777344 80.472656 120.074219 80.679688 120.492188 80.886719 C 120.925781 81.082031 121.496094 81.320312 122.203125 81.597656 C 122.914062 81.859375 123.519531 82.128906 124.019531 82.410156 C 124.523438 82.6875 124.90625 83.027344 125.167969 83.429688 C 125.433594 83.816406 125.566406 84.3125 125.566406 84.90625 Z M 125.566406 84.90625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 132.601562 76.617188 C 133.558594 76.617188 134.382812 76.828125 135.0625 77.242188 C 135.757812 77.660156 136.289062 78.25 136.648438 79.011719 C 137.027344 79.761719 137.214844 80.644531 137.214844 81.660156 L 137.214844 82.761719 L 129.550781 82.761719 C 129.582031 84.027344 129.902344 84.992188 130.511719 85.65625 C 131.140625 86.308594 132.007812 86.636719 133.121094 86.636719 C 133.832031 86.636719 134.457031 86.574219 135 86.449219 C 135.558594 86.308594 136.128906 86.117188 136.710938 85.867188 L 136.710938 87.46875 C 136.140625 87.71875 135.578125 87.898438 135.023438 88.011719 C 134.464844 88.136719 133.804688 88.199219 133.039062 88.199219 C 131.980469 88.199219 131.042969 87.984375 130.21875 87.550781 C 129.414062 87.121094 128.78125 86.484375 128.320312 85.636719 C 127.875 84.777344 127.652344 83.726562 127.652344 82.492188 C 127.652344 81.269531 127.855469 80.222656 128.257812 79.347656 C 128.675781 78.472656 129.253906 77.796875 129.992188 77.328125 C 130.742188 76.855469 131.613281 76.617188 132.601562 76.617188 Z M 132.578125 78.117188 C 131.703125 78.117188 131.007812 78.402344 130.492188 78.972656 C 129.992188 79.527344 129.691406 80.304688 129.59375 81.304688 L 135.292969 81.304688 C 135.277344 80.359375 135.054688 79.597656 134.625 79.011719 C 134.195312 78.417969 133.511719 78.117188 132.578125 78.117188 Z M 132.578125 78.117188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 145.269531 76.617188 C 145.480469 76.617188 145.703125 76.632812 145.9375 76.660156 C 146.1875 76.675781 146.40625 76.703125 146.585938 76.742188 L 146.355469 78.429688 C 146.175781 78.390625 145.972656 78.355469 145.75 78.328125 C 145.542969 78.296875 145.339844 78.285156 145.144531 78.285156 C 144.574219 78.285156 144.039062 78.445312 143.539062 78.765625 C 143.039062 79.070312 142.632812 79.507812 142.328125 80.074219 C 142.035156 80.632812 141.890625 81.285156 141.890625 82.035156 L 141.890625 87.988281 L 140.050781 87.988281 L 140.050781 76.828125 L 141.554688 76.828125 L 141.765625 78.867188 L 141.847656 78.867188 C 142.210938 78.257812 142.675781 77.730469 143.246094 77.285156 C 143.816406 76.839844 144.492188 76.617188 145.269531 76.617188 Z M 145.269531 76.617188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 151.136719 87.988281 L 146.898438 76.828125 L 148.859375 76.828125 L 151.242188 83.40625 C 151.351562 83.714844 151.46875 84.054688 151.59375 84.429688 C 151.722656 84.804688 151.832031 85.164062 151.929688 85.511719 C 152.027344 85.84375 152.097656 86.128906 152.136719 86.367188 L 152.222656 86.367188 C 152.277344 86.128906 152.355469 85.835938 152.453125 85.492188 C 152.5625 85.144531 152.679688 84.78125 152.804688 84.40625 C 152.945312 84.03125 153.0625 83.699219 153.160156 83.40625 L 155.539062 76.828125 L 157.503906 76.828125 L 153.246094 87.988281 Z M 151.136719 87.988281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 163.597656 76.617188 C 164.558594 76.617188 165.378906 76.828125 166.0625 77.242188 C 166.757812 77.660156 167.285156 78.25 167.648438 79.011719 C 168.023438 79.761719 168.210938 80.644531 168.210938 81.660156 L 168.210938 82.761719 L 160.550781 82.761719 C 160.578125 84.027344 160.898438 84.992188 161.511719 85.65625 C 162.136719 86.308594 163.007812 86.636719 164.121094 86.636719 C 164.828125 86.636719 165.457031 86.574219 166 86.449219 C 166.554688 86.308594 167.125 86.117188 167.710938 85.867188 L 167.710938 87.46875 C 167.140625 87.71875 166.578125 87.898438 166.019531 88.011719 C 165.464844 88.136719 164.800781 88.199219 164.035156 88.199219 C 162.980469 88.199219 162.039062 87.984375 161.21875 87.550781 C 160.410156 87.121094 159.777344 86.484375 159.320312 85.636719 C 158.875 84.777344 158.652344 83.726562 158.652344 82.492188 C 158.652344 81.269531 158.851562 80.222656 159.257812 79.347656 C 159.675781 78.472656 160.25 77.796875 160.988281 77.328125 C 161.742188 76.855469 162.609375 76.617188 163.597656 76.617188 Z M 163.578125 78.117188 C 162.699219 78.117188 162.003906 78.402344 161.488281 78.972656 C 160.988281 79.527344 160.691406 80.304688 160.59375 81.304688 L 166.289062 81.304688 C 166.277344 80.359375 166.054688 79.597656 165.621094 79.011719 C 165.191406 78.417969 164.507812 78.117188 163.578125 78.117188 Z M 163.578125 78.117188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 178.335938 84.90625 C 178.335938 85.992188 177.933594 86.808594 177.125 87.363281 C 176.316406 87.921875 175.230469 88.199219 173.867188 88.199219 C 173.089844 88.199219 172.414062 88.136719 171.84375 88.011719 C 171.285156 87.886719 170.792969 87.710938 170.363281 87.488281 L 170.363281 85.824219 C 170.808594 86.046875 171.34375 86.253906 171.96875 86.449219 C 172.609375 86.628906 173.257812 86.71875 173.910156 86.71875 C 174.84375 86.71875 175.515625 86.574219 175.933594 86.28125 C 176.351562 85.976562 176.5625 85.574219 176.5625 85.074219 C 176.5625 84.796875 176.484375 84.546875 176.332031 84.324219 C 176.179688 84.101562 175.898438 83.878906 175.496094 83.65625 C 175.105469 83.4375 174.542969 83.1875 173.804688 82.910156 C 173.082031 82.628906 172.460938 82.351562 171.949219 82.074219 C 171.433594 81.796875 171.035156 81.464844 170.757812 81.074219 C 170.480469 80.6875 170.339844 80.1875 170.339844 79.574219 C 170.339844 78.632812 170.722656 77.902344 171.488281 77.390625 C 172.269531 76.875 173.285156 76.617188 174.535156 76.617188 C 175.21875 76.617188 175.851562 76.6875 176.4375 76.828125 C 177.035156 76.953125 177.589844 77.132812 178.105469 77.367188 L 177.480469 78.828125 C 177.007812 78.632812 176.511719 78.464844 175.996094 78.328125 C 175.484375 78.1875 174.953125 78.117188 174.410156 78.117188 C 173.660156 78.117188 173.082031 78.242188 172.679688 78.492188 C 172.289062 78.730469 172.09375 79.054688 172.09375 79.472656 C 172.09375 79.777344 172.183594 80.042969 172.367188 80.261719 C 172.546875 80.472656 172.84375 80.679688 173.261719 80.886719 C 173.695312 81.082031 174.265625 81.320312 174.972656 81.597656 C 175.683594 81.859375 176.289062 82.128906 176.789062 82.410156 C 177.292969 82.6875 177.675781 83.027344 177.9375 83.429688 C 178.203125 83.816406 178.335938 84.3125 178.335938 84.90625 Z M 178.335938 84.90625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 190.210938 86.699219 C 190.492188 86.699219 190.777344 86.679688 191.070312 86.636719 C 191.359375 86.582031 191.597656 86.523438 191.777344 86.46875 L 191.777344 87.863281 C 191.582031 87.960938 191.304688 88.039062 190.941406 88.09375 C 190.582031 88.164062 190.234375 88.199219 189.898438 88.199219 C 189.316406 88.199219 188.773438 88.101562 188.269531 87.90625 C 187.785156 87.699219 187.386719 87.34375 187.082031 86.84375 C 186.773438 86.34375 186.621094 85.644531 186.621094 84.742188 L 186.621094 78.242188 L 185.035156 78.242188 L 185.035156 77.367188 L 186.644531 76.640625 L 187.375 74.265625 L 188.460938 74.265625 L 188.460938 76.828125 L 191.695312 76.828125 L 191.695312 78.242188 L 188.460938 78.242188 L 188.460938 84.699219 C 188.460938 85.378906 188.621094 85.886719 188.9375 86.21875 C 189.273438 86.539062 189.699219 86.699219 190.210938 86.699219 Z M 190.210938 86.699219 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 195.847656 72.160156 L 195.847656 76.804688 C 195.847656 77.363281 195.8125 77.882812 195.742188 78.367188 L 195.871094 78.367188 C 196.230469 77.796875 196.71875 77.367188 197.332031 77.078125 C 197.957031 76.785156 198.632812 76.640625 199.355469 76.640625 C 200.71875 76.640625 201.742188 76.964844 202.425781 77.617188 C 203.105469 78.257812 203.445312 79.292969 203.445312 80.722656 L 203.445312 87.988281 L 201.628906 87.988281 L 201.628906 80.847656 C 201.628906 79.054688 200.796875 78.160156 199.125 78.160156 C 197.875 78.160156 197.011719 78.515625 196.539062 79.222656 C 196.078125 79.917969 195.847656 80.914062 195.847656 82.222656 L 195.847656 87.988281 L 194.011719 87.988281 L 194.011719 72.160156 Z M 195.847656 72.160156 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.234375 76.617188 C 212.191406 76.617188 213.015625 76.828125 213.695312 77.242188 C 214.390625 77.660156 214.921875 78.25 215.28125 79.011719 C 215.65625 79.761719 215.847656 80.644531 215.847656 81.660156 L 215.847656 82.761719 L 208.183594 82.761719 C 208.210938 84.027344 208.53125 84.992188 209.144531 85.65625 C 209.769531 86.308594 210.640625 86.636719 211.753906 86.636719 C 212.464844 86.636719 213.089844 86.574219 213.632812 86.449219 C 214.191406 86.308594 214.761719 86.117188 215.34375 85.867188 L 215.34375 87.46875 C 214.773438 87.71875 214.210938 87.898438 213.652344 88.011719 C 213.097656 88.136719 212.4375 88.199219 211.671875 88.199219 C 210.613281 88.199219 209.675781 87.984375 208.851562 87.550781 C 208.046875 87.121094 207.414062 86.484375 206.953125 85.636719 C 206.507812 84.777344 206.285156 83.726562 206.285156 82.492188 C 206.285156 81.269531 206.488281 80.222656 206.890625 79.347656 C 207.308594 78.472656 207.886719 77.796875 208.625 77.328125 C 209.375 76.855469 210.246094 76.617188 211.234375 76.617188 Z M 211.210938 78.117188 C 210.335938 78.117188 209.640625 78.402344 209.125 78.972656 C 208.625 79.527344 208.324219 80.304688 208.226562 81.304688 L 213.925781 81.304688 C 213.910156 80.359375 213.6875 79.597656 213.257812 79.011719 C 212.824219 78.417969 212.144531 78.117188 211.210938 78.117188 Z M 211.210938 78.117188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 219.625 72.640625 C 219.902344 72.640625 220.144531 72.738281 220.355469 72.933594 C 220.578125 73.113281 220.6875 73.40625 220.6875 73.808594 C 220.6875 74.195312 220.578125 74.488281 220.355469 74.683594 C 220.144531 74.875 219.902344 74.972656 219.625 74.972656 C 219.316406 74.972656 219.058594 74.875 218.851562 74.683594 C 218.644531 74.488281 218.539062 74.195312 218.539062 73.808594 C 218.539062 73.40625 218.644531 73.113281 218.851562 72.933594 C 219.058594 72.738281 219.316406 72.640625 219.625 72.640625 Z M 220.523438 76.828125 L 220.523438 87.988281 L 218.683594 87.988281 L 218.683594 76.828125 Z M 220.523438 76.828125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 229.289062 76.617188 C 229.496094 76.617188 229.71875 76.632812 229.957031 76.660156 C 230.207031 76.675781 230.421875 76.703125 230.605469 76.742188 L 230.375 78.429688 C 230.191406 78.390625 229.992188 78.355469 229.769531 78.328125 C 229.558594 78.296875 229.359375 78.285156 229.164062 78.285156 C 228.59375 78.285156 228.058594 78.445312 227.554688 78.765625 C 227.054688 79.070312 226.652344 79.507812 226.34375 80.074219 C 226.054688 80.632812 225.90625 81.285156 225.90625 82.035156 L 225.90625 87.988281 L 224.070312 87.988281 L 224.070312 76.828125 L 225.574219 76.828125 L 225.78125 78.867188 L 225.867188 78.867188 C 226.226562 78.257812 226.691406 77.730469 227.265625 77.285156 C 227.835938 76.839844 228.507812 76.617188 229.289062 76.617188 Z M 229.289062 76.617188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 239.058594 72.640625 C 239.335938 72.640625 239.578125 72.738281 239.789062 72.933594 C 240.011719 73.113281 240.121094 73.40625 240.121094 73.808594 C 240.121094 74.195312 240.011719 74.488281 239.789062 74.683594 C 239.578125 74.875 239.335938 74.972656 239.058594 74.972656 C 238.75 74.972656 238.492188 74.875 238.285156 74.683594 C 238.078125 74.488281 237.972656 74.195312 237.972656 73.808594 C 237.972656 73.40625 238.078125 73.113281 238.285156 72.933594 C 238.492188 72.738281 238.75 72.640625 239.058594 72.640625 Z M 239.957031 76.828125 L 239.957031 87.988281 L 238.117188 87.988281 L 238.117188 76.828125 Z M 239.957031 76.828125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 255.777344 76.617188 C 257.042969 76.617188 257.992188 76.945312 258.617188 77.597656 C 259.242188 78.234375 259.554688 79.277344 259.554688 80.722656 L 259.554688 87.988281 L 257.738281 87.988281 L 257.738281 80.804688 C 257.738281 79.042969 256.980469 78.160156 255.464844 78.160156 C 254.378906 78.160156 253.601562 78.472656 253.125 79.097656 C 252.667969 79.722656 252.4375 80.632812 252.4375 81.824219 L 252.4375 87.988281 L 250.621094 87.988281 L 250.621094 80.804688 C 250.621094 79.042969 249.855469 78.160156 248.324219 78.160156 C 247.199219 78.160156 246.417969 78.507812 245.988281 79.199219 C 245.554688 79.894531 245.339844 80.894531 245.339844 82.199219 L 245.339844 87.988281 L 243.503906 87.988281 L 243.503906 76.828125 L 244.984375 76.828125 L 245.257812 78.347656 L 245.363281 78.347656 C 245.710938 77.765625 246.175781 77.332031 246.761719 77.054688 C 247.359375 76.765625 247.992188 76.617188 248.660156 76.617188 C 250.414062 76.617188 251.554688 77.242188 252.082031 78.492188 L 252.1875 78.492188 C 252.5625 77.855469 253.070312 77.382812 253.710938 77.078125 C 254.367188 76.769531 255.054688 76.617188 255.777344 76.617188 Z M 255.777344 76.617188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 267.257812 76.640625 C 268.621094 76.640625 269.632812 76.9375 270.285156 77.535156 C 270.9375 78.132812 271.265625 79.082031 271.265625 80.386719 L 271.265625 87.988281 L 269.929688 87.988281 L 269.574219 86.40625 L 269.492188 86.40625 C 269.003906 87.019531 268.488281 87.46875 267.949219 87.761719 C 267.417969 88.050781 266.679688 88.199219 265.734375 88.199219 C 264.71875 88.199219 263.875 87.933594 263.207031 87.40625 C 262.539062 86.867188 262.207031 86.023438 262.207031 84.886719 C 262.207031 83.777344 262.644531 82.921875 263.523438 82.324219 C 264.398438 81.714844 265.75 81.382812 267.570312 81.324219 L 269.472656 81.261719 L 269.472656 80.597656 C 269.472656 79.667969 269.269531 79.019531 268.867188 78.660156 C 268.460938 78.296875 267.890625 78.117188 267.152344 78.117188 C 266.570312 78.117188 266.011719 78.207031 265.484375 78.390625 C 264.957031 78.554688 264.460938 78.75 264.003906 78.972656 L 263.4375 77.597656 C 263.925781 77.332031 264.503906 77.113281 265.171875 76.929688 C 265.839844 76.738281 266.535156 76.640625 267.257812 76.640625 Z M 269.449219 82.535156 L 267.800781 82.597656 C 266.410156 82.652344 265.441406 82.875 264.898438 83.261719 C 264.371094 83.652344 264.105469 84.199219 264.105469 84.90625 C 264.105469 85.53125 264.292969 85.992188 264.671875 86.28125 C 265.058594 86.574219 265.554688 86.71875 266.152344 86.71875 C 267.097656 86.71875 267.882812 86.460938 268.511719 85.949219 C 269.136719 85.421875 269.449219 84.617188 269.449219 83.53125 Z M 269.449219 82.535156 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 278.699219 76.617188 C 279.433594 76.617188 280.097656 76.757812 280.679688 77.035156 C 281.277344 77.3125 281.785156 77.734375 282.203125 78.304688 L 282.308594 78.304688 L 282.558594 76.828125 L 284.019531 76.828125 L 284.019531 88.175781 C 284.019531 89.773438 283.609375 90.976562 282.789062 91.78125 C 281.980469 92.585938 280.722656 92.988281 279.011719 92.988281 C 277.367188 92.988281 276.027344 92.753906 274.980469 92.28125 L 274.980469 90.59375 C 276.082031 91.175781 277.457031 91.46875 279.113281 91.46875 C 280.074219 91.46875 280.828125 91.183594 281.371094 90.613281 C 281.925781 90.058594 282.203125 89.296875 282.203125 88.324219 L 282.203125 87.886719 C 282.203125 87.71875 282.210938 87.484375 282.226562 87.175781 C 282.238281 86.859375 282.253906 86.636719 282.265625 86.511719 L 282.183594 86.511719 C 281.433594 87.636719 280.277344 88.199219 278.71875 88.199219 C 277.269531 88.199219 276.136719 87.691406 275.316406 86.679688 C 274.507812 85.664062 274.105469 84.25 274.105469 82.429688 C 274.105469 80.652344 274.507812 79.242188 275.316406 78.203125 C 276.136719 77.144531 277.265625 76.617188 278.699219 76.617188 Z M 278.949219 78.160156 C 278.015625 78.160156 277.292969 78.535156 276.777344 79.285156 C 276.261719 80.019531 276.003906 81.074219 276.003906 82.449219 C 276.003906 83.824219 276.253906 84.878906 276.757812 85.617188 C 277.269531 86.335938 278.015625 86.699219 278.988281 86.699219 C 280.117188 86.699219 280.9375 86.398438 281.453125 85.804688 C 281.96875 85.191406 282.226562 84.214844 282.226562 82.867188 L 282.226562 82.429688 C 282.226562 80.902344 281.960938 79.8125 281.433594 79.160156 C 280.902344 78.492188 280.074219 78.160156 278.949219 78.160156 Z M 278.949219 78.160156 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 291.890625 76.617188 C 292.851562 76.617188 293.671875 76.828125 294.351562 77.242188 C 295.046875 77.660156 295.578125 78.25 295.9375 79.011719 C 296.316406 79.761719 296.503906 80.644531 296.503906 81.660156 L 296.503906 82.761719 L 288.84375 82.761719 C 288.871094 84.027344 289.191406 84.992188 289.800781 85.65625 C 290.429688 86.308594 291.296875 86.636719 292.410156 86.636719 C 293.121094 86.636719 293.746094 86.574219 294.289062 86.449219 C 294.847656 86.308594 295.417969 86.117188 296.003906 85.867188 L 296.003906 87.46875 C 295.429688 87.71875 294.867188 87.898438 294.3125 88.011719 C 293.753906 88.136719 293.09375 88.199219 292.328125 88.199219 C 291.269531 88.199219 290.332031 87.984375 289.511719 87.550781 C 288.703125 87.121094 288.070312 86.484375 287.609375 85.636719 C 287.164062 84.777344 286.941406 83.726562 286.941406 82.492188 C 286.941406 81.269531 287.144531 80.222656 287.546875 79.347656 C 287.964844 78.472656 288.542969 77.796875 289.28125 77.328125 C 290.03125 76.855469 290.902344 76.617188 291.890625 76.617188 Z M 291.867188 78.117188 C 290.992188 78.117188 290.296875 78.402344 289.78125 78.972656 C 289.28125 79.527344 288.980469 80.304688 288.882812 81.304688 L 294.582031 81.304688 C 294.570312 80.359375 294.347656 79.597656 293.914062 79.011719 C 293.484375 78.417969 292.800781 78.117188 291.867188 78.117188 Z M 291.867188 78.117188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 306.625 84.90625 C 306.625 85.992188 306.222656 86.808594 305.417969 87.363281 C 304.609375 87.921875 303.523438 88.199219 302.160156 88.199219 C 301.378906 88.199219 300.707031 88.136719 300.136719 88.011719 C 299.578125 87.886719 299.085938 87.710938 298.652344 87.488281 L 298.652344 85.824219 C 299.097656 86.046875 299.632812 86.253906 300.261719 86.449219 C 300.902344 86.628906 301.546875 86.71875 302.203125 86.71875 C 303.132812 86.71875 303.808594 86.574219 304.226562 86.28125 C 304.644531 85.976562 304.851562 85.574219 304.851562 85.074219 C 304.851562 84.796875 304.777344 84.546875 304.621094 84.324219 C 304.46875 84.101562 304.191406 83.878906 303.789062 83.65625 C 303.398438 83.4375 302.835938 83.1875 302.097656 82.910156 C 301.375 82.628906 300.753906 82.351562 300.238281 82.074219 C 299.722656 81.796875 299.328125 81.464844 299.050781 81.074219 C 298.769531 80.6875 298.632812 80.1875 298.632812 79.574219 C 298.632812 78.632812 299.015625 77.902344 299.78125 77.390625 C 300.558594 76.875 301.574219 76.617188 302.828125 76.617188 C 303.507812 76.617188 304.144531 76.6875 304.726562 76.828125 C 305.324219 76.953125 305.882812 77.132812 306.398438 77.367188 L 305.769531 78.828125 C 305.296875 78.632812 304.804688 78.464844 304.289062 78.328125 C 303.773438 78.1875 303.246094 78.117188 302.703125 78.117188 C 301.949219 78.117188 301.375 78.242188 300.96875 78.492188 C 300.582031 78.730469 300.386719 79.054688 300.386719 79.472656 C 300.386719 79.777344 300.476562 80.042969 300.65625 80.261719 C 300.835938 80.472656 301.136719 80.679688 301.554688 80.886719 C 301.984375 81.082031 302.554688 81.320312 303.265625 81.597656 C 303.976562 81.859375 304.582031 82.128906 305.082031 82.410156 C 305.582031 82.6875 305.964844 83.027344 306.230469 83.429688 C 306.496094 83.816406 306.625 84.3125 306.625 84.90625 Z M 306.625 84.90625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 27.394531 104.277344 L 24.578125 104.277344 L 24.578125 114.023438 L 22.742188 114.023438 L 22.742188 104.277344 L 20.777344 104.277344 L 20.777344 103.421875 L 22.742188 102.796875 L 22.742188 102.152344 C 22.742188 100.707031 23.058594 99.671875 23.699219 99.050781 C 24.339844 98.410156 25.230469 98.089844 26.371094 98.089844 C 26.816406 98.089844 27.222656 98.132812 27.582031 98.214844 C 27.957031 98.285156 28.277344 98.367188 28.542969 98.464844 L 28.0625 99.902344 C 27.839844 99.832031 27.582031 99.765625 27.289062 99.695312 C 27 99.625 26.699219 99.589844 26.394531 99.589844 C 25.78125 99.589844 25.320312 99.796875 25.015625 100.214844 C 24.722656 100.617188 24.578125 101.257812 24.578125 102.132812 L 24.578125 102.859375 L 27.394531 102.859375 Z M 27.394531 104.277344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.636719 102.652344 C 34.847656 102.652344 35.070312 102.664062 35.304688 102.695312 C 35.558594 102.707031 35.773438 102.734375 35.953125 102.777344 L 35.722656 104.464844 C 35.542969 104.421875 35.339844 104.386719 35.117188 104.359375 C 34.910156 104.332031 34.707031 104.316406 34.511719 104.316406 C 33.941406 104.316406 33.40625 104.476562 32.90625 104.796875 C 32.40625 105.101562 32 105.539062 31.695312 106.109375 C 31.402344 106.664062 31.257812 107.316406 31.257812 108.066406 L 31.257812 114.023438 L 29.421875 114.023438 L 29.421875 102.859375 L 30.921875 102.859375 L 31.132812 104.902344 L 31.214844 104.902344 C 31.578125 104.289062 32.042969 103.761719 32.613281 103.320312 C 33.183594 102.875 33.859375 102.652344 34.636719 102.652344 Z M 34.636719 102.652344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 47.351562 108.421875 C 47.351562 110.269531 46.878906 111.699219 45.929688 112.710938 C 45 113.726562 43.734375 114.230469 42.132812 114.230469 C 41.144531 114.230469 40.261719 114.007812 39.480469 113.566406 C 38.714844 113.105469 38.109375 112.449219 37.664062 111.585938 C 37.21875 110.710938 36.996094 109.65625 36.996094 108.421875 C 36.996094 106.574219 37.464844 105.152344 38.394531 104.152344 C 39.328125 103.152344 40.59375 102.652344 42.195312 102.652344 C 43.210938 102.652344 44.101562 102.882812 44.867188 103.339844 C 45.644531 103.785156 46.25 104.4375 46.683594 105.296875 C 47.128906 106.144531 47.351562 107.183594 47.351562 108.421875 Z M 38.898438 108.421875 C 38.898438 109.738281 39.152344 110.789062 39.667969 111.566406 C 40.199219 112.328125 41.03125 112.710938 42.175781 112.710938 C 43.300781 112.710938 44.128906 112.328125 44.65625 111.566406 C 45.1875 110.789062 45.453125 109.738281 45.453125 108.421875 C 45.453125 107.101562 45.1875 106.066406 44.65625 105.316406 C 44.128906 104.566406 43.292969 104.191406 42.152344 104.191406 C 41.011719 104.191406 40.183594 104.566406 39.667969 105.316406 C 39.152344 106.066406 38.898438 107.101562 38.898438 108.421875 Z M 38.898438 108.421875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 62.527344 102.652344 C 63.792969 102.652344 64.738281 102.976562 65.363281 103.628906 C 65.992188 104.269531 66.304688 105.3125 66.304688 106.753906 L 66.304688 114.023438 L 64.488281 114.023438 L 64.488281 106.839844 C 64.488281 105.074219 63.730469 104.191406 62.214844 104.191406 C 61.128906 104.191406 60.347656 104.503906 59.875 105.128906 C 59.414062 105.753906 59.1875 106.664062 59.1875 107.859375 L 59.1875 114.023438 L 57.371094 114.023438 L 57.371094 106.839844 C 57.371094 105.074219 56.605469 104.191406 55.074219 104.191406 C 53.945312 104.191406 53.167969 104.539062 52.734375 105.234375 C 52.304688 105.929688 52.089844 106.929688 52.089844 108.234375 L 52.089844 114.023438 L 50.253906 114.023438 L 50.253906 102.859375 L 51.734375 102.859375 L 52.003906 104.378906 L 52.109375 104.378906 C 52.457031 103.796875 52.925781 103.367188 53.507812 103.089844 C 54.105469 102.796875 54.738281 102.652344 55.40625 102.652344 C 57.160156 102.652344 58.300781 103.277344 58.832031 104.527344 L 58.9375 104.527344 C 59.3125 103.886719 59.820312 103.414062 60.460938 103.109375 C 61.113281 102.804688 61.800781 102.652344 62.527344 102.652344 Z M 62.527344 102.652344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 77.324219 114.023438 L 75.445312 114.023438 L 75.445312 99.152344 L 83.777344 99.152344 L 83.777344 100.796875 L 77.324219 100.796875 L 77.324219 106.066406 L 83.378906 106.066406 L 83.378906 107.710938 L 77.324219 107.710938 Z M 77.324219 114.023438 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 90.269531 102.671875 C 91.632812 102.671875 92.640625 102.972656 93.292969 103.570312 C 93.949219 104.164062 94.277344 105.117188 94.277344 106.421875 L 94.277344 114.023438 L 92.941406 114.023438 L 92.585938 112.441406 L 92.5 112.441406 C 92.015625 113.050781 91.5 113.503906 90.957031 113.792969 C 90.429688 114.085938 89.691406 114.230469 88.742188 114.230469 C 87.726562 114.230469 86.886719 113.96875 86.21875 113.441406 C 85.550781 112.898438 85.214844 112.058594 85.214844 110.921875 C 85.214844 109.808594 85.65625 108.957031 86.53125 108.359375 C 87.40625 107.746094 88.757812 107.414062 90.582031 107.359375 L 92.480469 107.296875 L 92.480469 106.628906 C 92.480469 105.699219 92.277344 105.054688 91.875 104.691406 C 91.472656 104.332031 90.902344 104.152344 90.164062 104.152344 C 89.578125 104.152344 89.023438 104.242188 88.492188 104.421875 C 87.964844 104.589844 87.46875 104.785156 87.011719 105.003906 L 86.449219 103.628906 C 86.933594 103.367188 87.511719 103.144531 88.179688 102.964844 C 88.847656 102.769531 89.542969 102.671875 90.269531 102.671875 Z M 92.460938 108.566406 L 90.808594 108.628906 C 89.417969 108.683594 88.453125 108.90625 87.910156 109.296875 C 87.378906 109.683594 87.117188 110.234375 87.117188 110.941406 C 87.117188 111.566406 87.304688 112.023438 87.679688 112.316406 C 88.070312 112.605469 88.5625 112.753906 89.160156 112.753906 C 90.109375 112.753906 90.894531 112.496094 91.519531 111.980469 C 92.144531 111.453125 92.460938 110.648438 92.460938 109.566406 Z M 92.460938 108.566406 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 102.230469 114.230469 C 101.242188 114.230469 100.355469 114.03125 99.578125 113.628906 C 98.8125 113.226562 98.207031 112.601562 97.761719 111.753906 C 97.332031 110.90625 97.113281 109.824219 97.113281 108.503906 C 97.113281 107.128906 97.34375 106.011719 97.804688 105.152344 C 98.261719 104.289062 98.882812 103.660156 99.660156 103.257812 C 100.453125 102.851562 101.351562 102.652344 102.355469 102.652344 C 102.925781 102.652344 103.472656 102.714844 104.003906 102.839844 C 104.53125 102.949219 104.964844 103.089844 105.296875 103.257812 L 104.734375 104.777344 C 104.398438 104.652344 104.011719 104.535156 103.566406 104.421875 C 103.121094 104.3125 102.703125 104.253906 102.3125 104.253906 C 100.113281 104.253906 99.015625 105.664062 99.015625 108.484375 C 99.015625 109.832031 99.277344 110.863281 99.808594 111.585938 C 100.351562 112.292969 101.148438 112.648438 102.207031 112.648438 C 102.820312 112.648438 103.355469 112.585938 103.816406 112.460938 C 104.289062 112.335938 104.71875 112.183594 105.109375 112.003906 L 105.109375 113.628906 C 104.734375 113.820312 104.316406 113.96875 103.855469 114.066406 C 103.410156 114.175781 102.867188 114.230469 102.230469 114.230469 Z M 102.230469 114.230469 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 112.082031 102.652344 C 113.042969 102.652344 113.863281 102.859375 114.542969 103.277344 C 115.238281 103.691406 115.769531 104.285156 116.128906 105.046875 C 116.507812 105.796875 116.695312 106.679688 116.695312 107.691406 L 116.695312 108.796875 L 109.035156 108.796875 C 109.0625 110.058594 109.382812 111.023438 109.992188 111.691406 C 110.621094 112.34375 111.488281 112.667969 112.601562 112.667969 C 113.3125 112.667969 113.9375 112.605469 114.480469 112.480469 C 115.039062 112.34375 115.609375 112.148438 116.191406 111.898438 L 116.191406 113.503906 C 115.621094 113.753906 115.058594 113.933594 114.503906 114.042969 C 113.945312 114.167969 113.285156 114.230469 112.519531 114.230469 C 111.460938 114.230469 110.523438 114.015625 109.703125 113.585938 C 108.894531 113.15625 108.261719 112.515625 107.800781 111.671875 C 107.355469 110.808594 107.132812 109.761719 107.132812 108.523438 C 107.132812 107.304688 107.335938 106.253906 107.738281 105.378906 C 108.15625 104.503906 108.734375 103.832031 109.472656 103.359375 C 110.222656 102.886719 111.09375 102.652344 112.082031 102.652344 Z M 112.058594 104.152344 C 111.183594 104.152344 110.488281 104.4375 109.972656 105.003906 C 109.472656 105.5625 109.171875 106.339844 109.074219 107.339844 L 114.773438 107.339844 C 114.761719 106.394531 114.539062 105.628906 114.105469 105.046875 C 113.675781 104.449219 112.992188 104.152344 112.058594 104.152344 Z M 112.058594 104.152344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 121.371094 98.195312 L 121.371094 102.046875 C 121.371094 102.519531 121.355469 102.964844 121.328125 103.382812 C 121.3125 103.785156 121.292969 104.101562 121.265625 104.339844 L 121.371094 104.339844 C 121.691406 103.867188 122.128906 103.472656 122.683594 103.152344 C 123.242188 102.832031 123.957031 102.671875 124.835938 102.671875 C 126.226562 102.671875 127.339844 103.160156 128.175781 104.128906 C 129.023438 105.089844 129.449219 106.527344 129.449219 108.441406 C 129.449219 110.359375 129.023438 111.800781 128.175781 112.773438 C 127.328125 113.746094 126.214844 114.230469 124.835938 114.230469 C 123.957031 114.230469 123.242188 114.070312 122.683594 113.753906 C 122.128906 113.433594 121.691406 113.050781 121.371094 112.605469 L 121.222656 112.605469 L 120.847656 114.023438 L 119.53125 114.023438 L 119.53125 98.195312 Z M 124.523438 104.191406 C 123.339844 104.191406 122.519531 104.535156 122.058594 105.214844 C 121.601562 105.894531 121.371094 106.949219 121.371094 108.378906 L 121.371094 108.460938 C 121.371094 109.835938 121.59375 110.890625 122.039062 111.628906 C 122.496094 112.351562 123.339844 112.710938 124.5625 112.710938 C 125.566406 112.710938 126.308594 112.34375 126.796875 111.609375 C 127.296875 110.871094 127.550781 109.808594 127.550781 108.421875 C 127.550781 105.601562 126.539062 104.191406 124.523438 104.191406 Z M 124.523438 104.191406 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 142.097656 108.421875 C 142.097656 110.269531 141.625 111.699219 140.679688 112.710938 C 139.746094 113.726562 138.480469 114.230469 136.878906 114.230469 C 135.890625 114.230469 135.007812 114.007812 134.230469 113.566406 C 133.464844 113.105469 132.859375 112.449219 132.414062 111.585938 C 131.96875 110.710938 131.746094 109.65625 131.746094 108.421875 C 131.746094 106.574219 132.210938 105.152344 133.144531 104.152344 C 134.074219 103.152344 135.34375 102.652344 136.941406 102.652344 C 137.957031 102.652344 138.847656 102.882812 139.613281 103.339844 C 140.394531 103.785156 141 104.4375 141.429688 105.296875 C 141.875 106.144531 142.097656 107.183594 142.097656 108.421875 Z M 133.644531 108.421875 C 133.644531 109.738281 133.902344 110.789062 134.417969 111.566406 C 134.945312 112.328125 135.78125 112.710938 136.921875 112.710938 C 138.046875 112.710938 138.875 112.328125 139.40625 111.566406 C 139.933594 110.789062 140.199219 109.738281 140.199219 108.421875 C 140.199219 107.101562 139.933594 106.066406 139.40625 105.316406 C 138.875 104.566406 138.042969 104.191406 136.902344 104.191406 C 135.757812 104.191406 134.929688 104.566406 134.417969 105.316406 C 133.902344 106.066406 133.644531 107.101562 133.644531 108.421875 Z M 133.644531 108.421875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 154.726562 108.421875 C 154.726562 110.269531 154.253906 111.699219 153.308594 112.710938 C 152.375 113.726562 151.109375 114.230469 149.507812 114.230469 C 148.519531 114.230469 147.636719 114.007812 146.855469 113.566406 C 146.09375 113.105469 145.488281 112.449219 145.042969 111.585938 C 144.597656 110.710938 144.375 109.65625 144.375 108.421875 C 144.375 106.574219 144.839844 105.152344 145.773438 104.152344 C 146.703125 103.152344 147.96875 102.652344 149.570312 102.652344 C 150.585938 102.652344 151.476562 102.882812 152.242188 103.339844 C 153.023438 103.785156 153.628906 104.4375 154.058594 105.296875 C 154.503906 106.144531 154.726562 107.183594 154.726562 108.421875 Z M 146.273438 108.421875 C 146.273438 109.738281 146.53125 110.789062 147.046875 111.566406 C 147.574219 112.328125 148.410156 112.710938 149.550781 112.710938 C 150.675781 112.710938 151.503906 112.328125 152.035156 111.566406 C 152.5625 110.789062 152.828125 109.738281 152.828125 108.421875 C 152.828125 107.101562 152.5625 106.066406 152.035156 105.316406 C 151.503906 104.566406 150.671875 104.191406 149.527344 104.191406 C 148.386719 104.191406 147.558594 104.566406 147.046875 105.316406 C 146.53125 106.066406 146.273438 107.101562 146.273438 108.421875 Z M 146.273438 108.421875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 159.445312 98.195312 L 159.445312 106.464844 C 159.445312 106.683594 159.429688 106.976562 159.402344 107.339844 C 159.390625 107.699219 159.375 108.011719 159.359375 108.273438 L 159.445312 108.273438 C 159.527344 108.164062 159.652344 108.003906 159.820312 107.796875 C 159.988281 107.589844 160.152344 107.378906 160.320312 107.171875 C 160.503906 106.949219 160.65625 106.769531 160.78125 106.628906 L 164.351562 102.859375 L 166.5 102.859375 L 161.96875 107.628906 L 166.8125 114.023438 L 164.601562 114.023438 L 160.71875 108.816406 L 159.445312 109.921875 L 159.445312 114.023438 L 157.628906 114.023438 L 157.628906 98.195312 Z M 159.445312 98.195312 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 181.488281 110.941406 C 181.488281 112.023438 181.082031 112.84375 180.277344 113.398438 C 179.46875 113.953125 178.382812 114.230469 177.019531 114.230469 C 176.242188 114.230469 175.566406 114.167969 174.996094 114.042969 C 174.4375 113.917969 173.945312 113.746094 173.511719 113.523438 L 173.511719 111.855469 C 173.957031 112.078125 174.496094 112.289062 175.121094 112.480469 C 175.761719 112.664062 176.40625 112.753906 177.0625 112.753906 C 177.996094 112.753906 178.667969 112.605469 179.085938 112.316406 C 179.503906 112.011719 179.714844 111.609375 179.714844 111.109375 C 179.714844 110.828125 179.636719 110.578125 179.484375 110.359375 C 179.332031 110.136719 179.050781 109.914062 178.648438 109.691406 C 178.257812 109.46875 177.695312 109.21875 176.957031 108.941406 C 176.234375 108.664062 175.613281 108.386719 175.101562 108.109375 C 174.585938 107.832031 174.1875 107.496094 173.910156 107.109375 C 173.632812 106.71875 173.492188 106.21875 173.492188 105.609375 C 173.492188 104.664062 173.875 103.9375 174.640625 103.421875 C 175.417969 102.910156 176.4375 102.652344 177.6875 102.652344 C 178.371094 102.652344 179.003906 102.722656 179.585938 102.859375 C 180.1875 102.984375 180.742188 103.164062 181.257812 103.402344 L 180.632812 104.859375 C 180.160156 104.664062 179.664062 104.5 179.148438 104.359375 C 178.632812 104.222656 178.105469 104.152344 177.5625 104.152344 C 176.8125 104.152344 176.234375 104.277344 175.832031 104.527344 C 175.441406 104.761719 175.246094 105.089844 175.246094 105.503906 C 175.246094 105.8125 175.335938 106.074219 175.515625 106.296875 C 175.699219 106.503906 175.996094 106.714844 176.414062 106.921875 C 176.847656 107.117188 177.417969 107.351562 178.125 107.628906 C 178.835938 107.894531 179.441406 108.164062 179.941406 108.441406 C 180.445312 108.71875 180.828125 109.058594 181.089844 109.460938 C 181.355469 109.851562 181.488281 110.34375 181.488281 110.941406 Z M 181.488281 110.941406 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 188.523438 102.652344 C 189.480469 102.652344 190.304688 102.859375 190.984375 103.277344 C 191.679688 103.691406 192.210938 104.285156 192.570312 105.046875 C 192.945312 105.796875 193.136719 106.679688 193.136719 107.691406 L 193.136719 108.796875 L 185.472656 108.796875 C 185.503906 110.058594 185.820312 111.023438 186.433594 111.691406 C 187.0625 112.34375 187.929688 112.667969 189.042969 112.667969 C 189.753906 112.667969 190.378906 112.605469 190.921875 112.480469 C 191.480469 112.34375 192.050781 112.148438 192.632812 111.898438 L 192.632812 113.503906 C 192.0625 113.753906 191.5 113.933594 190.941406 114.042969 C 190.386719 114.167969 189.726562 114.230469 188.960938 114.230469 C 187.902344 114.230469 186.964844 114.015625 186.140625 113.585938 C 185.335938 113.15625 184.703125 112.515625 184.242188 111.671875 C 183.796875 110.808594 183.574219 109.761719 183.574219 108.523438 C 183.574219 107.304688 183.777344 106.253906 184.179688 105.378906 C 184.597656 104.503906 185.175781 103.832031 185.914062 103.359375 C 186.664062 102.886719 187.535156 102.652344 188.523438 102.652344 Z M 188.5 104.152344 C 187.625 104.152344 186.929688 104.4375 186.414062 105.003906 C 185.914062 105.5625 185.613281 106.339844 185.515625 107.339844 L 191.214844 107.339844 C 191.199219 106.394531 190.976562 105.628906 190.546875 105.046875 C 190.113281 104.449219 189.433594 104.152344 188.5 104.152344 Z M 188.5 104.152344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 201.191406 102.652344 C 201.402344 102.652344 201.625 102.664062 201.859375 102.695312 C 202.109375 102.707031 202.328125 102.734375 202.507812 102.777344 L 202.277344 104.464844 C 202.097656 104.421875 201.894531 104.386719 201.671875 104.359375 C 201.464844 104.332031 201.261719 104.316406 201.066406 104.316406 C 200.496094 104.316406 199.960938 104.476562 199.460938 104.796875 C 198.957031 105.101562 198.554688 105.539062 198.25 106.109375 C 197.957031 106.664062 197.8125 107.316406 197.8125 108.066406 L 197.8125 114.023438 L 195.972656 114.023438 L 195.972656 102.859375 L 197.476562 102.859375 L 197.683594 104.902344 L 197.769531 104.902344 C 198.128906 104.289062 198.597656 103.761719 199.167969 103.320312 C 199.738281 102.875 200.414062 102.652344 201.191406 102.652344 Z M 201.191406 102.652344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 207.058594 114.023438 L 202.820312 102.859375 L 204.78125 102.859375 L 207.164062 109.441406 C 207.273438 109.746094 207.390625 110.085938 207.515625 110.460938 C 207.640625 110.835938 207.753906 111.199219 207.851562 111.546875 C 207.949219 111.878906 208.019531 112.164062 208.058594 112.398438 L 208.144531 112.398438 C 208.199219 112.164062 208.277344 111.871094 208.371094 111.523438 C 208.484375 111.175781 208.601562 110.816406 208.726562 110.441406 C 208.867188 110.066406 208.984375 109.734375 209.082031 109.441406 L 211.460938 102.859375 L 213.425781 102.859375 L 209.167969 114.023438 Z M 207.058594 114.023438 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 219.519531 102.652344 C 220.480469 102.652344 221.300781 102.859375 221.984375 103.277344 C 222.679688 103.691406 223.207031 104.285156 223.570312 105.046875 C 223.945312 105.796875 224.132812 106.679688 224.132812 107.691406 L 224.132812 108.796875 L 216.472656 108.796875 C 216.5 110.058594 216.820312 111.023438 217.433594 111.691406 C 218.058594 112.34375 218.929688 112.667969 220.042969 112.667969 C 220.75 112.667969 221.378906 112.605469 221.921875 112.480469 C 222.476562 112.34375 223.046875 112.148438 223.632812 111.898438 L 223.632812 113.503906 C 223.0625 113.753906 222.496094 113.933594 221.941406 114.042969 C 221.382812 114.167969 220.722656 114.230469 219.957031 114.230469 C 218.902344 114.230469 217.960938 114.015625 217.140625 113.585938 C 216.332031 113.15625 215.699219 112.515625 215.242188 111.671875 C 214.796875 110.808594 214.574219 109.761719 214.574219 108.523438 C 214.574219 107.304688 214.773438 106.253906 215.179688 105.378906 C 215.59375 104.503906 216.171875 103.832031 216.910156 103.359375 C 217.660156 102.886719 218.53125 102.652344 219.519531 102.652344 Z M 219.5 104.152344 C 218.621094 104.152344 217.925781 104.4375 217.410156 105.003906 C 216.910156 105.5625 216.609375 106.339844 216.515625 107.339844 L 222.210938 107.339844 C 222.199219 106.394531 221.976562 105.628906 221.542969 105.046875 C 221.113281 104.449219 220.429688 104.152344 219.5 104.152344 Z M 219.5 104.152344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 232.191406 102.652344 C 232.398438 102.652344 232.621094 102.664062 232.859375 102.695312 C 233.109375 102.707031 233.324219 102.734375 233.503906 102.777344 L 233.277344 104.464844 C 233.09375 104.421875 232.894531 104.386719 232.671875 104.359375 C 232.460938 104.332031 232.261719 104.316406 232.066406 104.316406 C 231.496094 104.316406 230.957031 104.476562 230.457031 104.796875 C 229.957031 105.101562 229.554688 105.539062 229.246094 106.109375 C 228.953125 106.664062 228.808594 107.316406 228.808594 108.066406 L 228.808594 114.023438 L 226.972656 114.023438 L 226.972656 102.859375 L 228.476562 102.859375 L 228.683594 104.902344 L 228.765625 104.902344 C 229.128906 104.289062 229.59375 103.761719 230.164062 103.320312 C 230.734375 102.875 231.410156 102.652344 232.191406 102.652344 Z M 232.191406 102.652344 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 242.878906 110.941406 C 242.878906 112.023438 242.472656 112.84375 241.667969 113.398438 C 240.859375 113.953125 239.773438 114.230469 238.410156 114.230469 C 237.632812 114.230469 236.957031 114.167969 236.386719 114.042969 C 235.828125 113.917969 235.335938 113.746094 234.902344 113.523438 L 234.902344 111.855469 C 235.347656 112.078125 235.886719 112.289062 236.511719 112.480469 C 237.152344 112.664062 237.796875 112.753906 238.453125 112.753906 C 239.386719 112.753906 240.058594 112.605469 240.476562 112.316406 C 240.894531 112.011719 241.101562 111.609375 241.101562 111.109375 C 241.101562 110.828125 241.027344 110.578125 240.875 110.359375 C 240.722656 110.136719 240.441406 109.914062 240.039062 109.691406 C 239.648438 109.46875 239.085938 109.21875 238.347656 108.941406 C 237.625 108.664062 237.003906 108.386719 236.492188 108.109375 C 235.976562 107.832031 235.578125 107.496094 235.300781 107.109375 C 235.023438 106.71875 234.882812 106.21875 234.882812 105.609375 C 234.882812 104.664062 235.265625 103.9375 236.03125 103.421875 C 236.808594 102.910156 237.828125 102.652344 239.078125 102.652344 C 239.761719 102.652344 240.394531 102.722656 240.976562 102.859375 C 241.578125 102.984375 242.132812 103.164062 242.648438 103.402344 L 242.023438 104.859375 C 241.546875 104.664062 241.054688 104.5 240.539062 104.359375 C 240.023438 104.222656 239.496094 104.152344 238.953125 104.152344 C 238.203125 104.152344 237.625 104.277344 237.222656 104.527344 C 236.832031 104.761719 236.636719 105.089844 236.636719 105.503906 C 236.636719 105.8125 236.726562 106.074219 236.90625 106.296875 C 237.089844 106.503906 237.386719 106.714844 237.804688 106.921875 C 238.238281 107.117188 238.808594 107.351562 239.515625 107.628906 C 240.226562 107.894531 240.832031 108.164062 241.332031 108.441406 C 241.835938 108.71875 242.214844 109.058594 242.480469 109.460938 C 242.746094 109.851562 242.878906 110.34375 242.878906 110.941406 Z M 242.878906 110.941406 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 245.320312 112.898438 C 245.320312 112.386719 245.445312 112.023438 245.695312 111.816406 C 245.945312 111.609375 246.246094 111.503906 246.59375 111.503906 C 246.957031 111.503906 247.261719 111.609375 247.511719 111.816406 C 247.777344 112.023438 247.910156 112.386719 247.910156 112.898438 C 247.910156 113.398438 247.777344 113.757812 247.511719 113.980469 C 247.261719 114.203125 246.957031 114.316406 246.59375 114.316406 C 246.246094 114.316406 245.945312 114.203125 245.695312 113.980469 C 245.445312 113.757812 245.320312 113.398438 245.320312 112.898438 Z M 245.320312 112.898438 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.371094 158.53125 L 30.253906 151.21875 L 32.28125 151.21875 L 27.3125 160.320312 L 27.3125 166.089844 L 25.433594 166.089844 L 25.433594 160.40625 L 20.464844 151.21875 L 22.511719 151.21875 Z M 26.371094 158.53125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 42.738281 160.488281 C 42.738281 162.335938 42.265625 163.765625 41.316406 164.777344 C 40.386719 165.792969 39.121094 166.296875 37.519531 166.296875 C 36.53125 166.296875 35.648438 166.078125 34.867188 165.632812 C 34.101562 165.171875 33.496094 164.515625 33.050781 163.652344 C 32.605469 162.777344 32.382812 161.722656 32.382812 160.488281 C 32.382812 158.640625 32.851562 157.21875 33.78125 156.21875 C 34.714844 155.21875 35.980469 154.71875 37.582031 154.71875 C 38.597656 154.71875 39.488281 154.949219 40.253906 155.40625 C 41.03125 155.851562 41.636719 156.503906 42.070312 157.363281 C 42.515625 158.210938 42.738281 159.253906 42.738281 160.488281 Z M 34.285156 160.488281 C 34.285156 161.808594 34.542969 162.855469 35.054688 163.632812 C 35.585938 164.394531 36.417969 164.777344 37.5625 164.777344 C 38.6875 164.777344 39.515625 164.394531 40.042969 163.632812 C 40.574219 162.855469 40.839844 161.808594 40.839844 160.488281 C 40.839844 159.167969 40.574219 158.132812 40.042969 157.382812 C 39.515625 156.636719 38.679688 156.261719 37.539062 156.261719 C 36.398438 156.261719 35.570312 156.636719 35.054688 157.382812 C 34.542969 158.132812 34.285156 159.167969 34.285156 160.488281 Z M 34.285156 160.488281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 54.992188 154.925781 L 54.992188 166.089844 L 53.488281 166.089844 L 53.214844 164.613281 L 53.132812 164.613281 C 52.769531 165.195312 52.269531 165.625 51.628906 165.902344 C 50.988281 166.167969 50.308594 166.296875 49.585938 166.296875 C 48.234375 166.296875 47.21875 165.980469 46.535156 165.339844 C 45.855469 164.6875 45.515625 163.652344 45.515625 162.238281 L 45.515625 154.925781 L 47.371094 154.925781 L 47.371094 162.113281 C 47.371094 163.890625 48.199219 164.777344 49.855469 164.777344 C 51.09375 164.777344 51.949219 164.429688 52.421875 163.738281 C 52.910156 163.042969 53.152344 162.042969 53.152344 160.738281 L 53.152344 154.925781 Z M 54.992188 154.925781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 63.757812 154.71875 C 63.964844 154.71875 64.1875 154.734375 64.425781 154.761719 C 64.675781 154.773438 64.890625 154.800781 65.074219 154.84375 L 64.84375 156.53125 C 64.664062 156.488281 64.460938 156.453125 64.238281 156.425781 C 64.027344 156.398438 63.828125 156.386719 63.632812 156.386719 C 63.0625 156.386719 62.527344 156.542969 62.023438 156.863281 C 61.523438 157.167969 61.121094 157.605469 60.816406 158.175781 C 60.523438 158.730469 60.375 159.382812 60.375 160.132812 L 60.375 166.089844 L 58.539062 166.089844 L 58.539062 154.925781 L 60.042969 154.925781 L 60.25 156.96875 L 60.335938 156.96875 C 60.695312 156.355469 61.164062 155.828125 61.734375 155.386719 C 62.304688 154.941406 62.976562 154.71875 63.757812 154.71875 Z M 63.757812 154.71875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 74.425781 150.261719 L 74.425781 154.113281 C 74.425781 154.585938 74.410156 155.03125 74.382812 155.449219 C 74.367188 155.851562 74.347656 156.167969 74.320312 156.40625 L 74.425781 156.40625 C 74.746094 155.933594 75.183594 155.539062 75.738281 155.21875 C 76.296875 154.898438 77.011719 154.738281 77.890625 154.738281 C 79.28125 154.738281 80.394531 155.226562 81.230469 156.199219 C 82.078125 157.15625 82.503906 158.59375 82.503906 160.507812 C 82.503906 162.425781 82.078125 163.867188 81.230469 164.839844 C 80.378906 165.8125 79.265625 166.296875 77.890625 166.296875 C 77.011719 166.296875 76.296875 166.140625 75.738281 165.820312 C 75.183594 165.5 74.746094 165.117188 74.425781 164.675781 L 74.277344 164.675781 L 73.902344 166.089844 L 72.585938 166.089844 L 72.585938 150.261719 Z M 77.578125 156.261719 C 76.394531 156.261719 75.574219 156.601562 75.113281 157.28125 C 74.652344 157.960938 74.425781 159.015625 74.425781 160.445312 L 74.425781 160.53125 C 74.425781 161.902344 74.648438 162.960938 75.09375 163.695312 C 75.550781 164.417969 76.394531 164.777344 77.617188 164.777344 C 78.621094 164.777344 79.363281 164.410156 79.851562 163.675781 C 80.351562 162.9375 80.601562 161.875 80.601562 160.488281 C 80.601562 157.667969 79.59375 156.261719 77.578125 156.261719 Z M 77.578125 156.261719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 90.644531 154.71875 C 90.851562 154.71875 91.074219 154.734375 91.3125 154.761719 C 91.5625 154.773438 91.777344 154.800781 91.957031 154.84375 L 91.730469 156.53125 C 91.546875 156.488281 91.347656 156.453125 91.125 156.425781 C 90.914062 156.398438 90.714844 156.386719 90.519531 156.386719 C 89.949219 156.386719 89.410156 156.542969 88.910156 156.863281 C 88.410156 157.167969 88.007812 157.605469 87.699219 158.175781 C 87.40625 158.730469 87.261719 159.382812 87.261719 160.132812 L 87.261719 166.089844 L 85.425781 166.089844 L 85.425781 154.925781 L 86.929688 154.925781 L 87.136719 156.96875 L 87.21875 156.96875 C 87.582031 156.355469 88.046875 155.828125 88.617188 155.386719 C 89.1875 154.941406 89.863281 154.71875 90.644531 154.71875 Z M 90.644531 154.71875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 103.355469 160.488281 C 103.355469 162.335938 102.882812 163.765625 101.9375 164.777344 C 101.003906 165.792969 99.738281 166.296875 98.136719 166.296875 C 97.148438 166.296875 96.265625 166.078125 95.484375 165.632812 C 94.722656 165.171875 94.117188 164.515625 93.671875 163.652344 C 93.226562 162.777344 93.003906 161.722656 93.003906 160.488281 C 93.003906 158.640625 93.46875 157.21875 94.402344 156.21875 C 95.332031 155.21875 96.597656 154.71875 98.199219 154.71875 C 99.214844 154.71875 100.105469 154.949219 100.871094 155.40625 C 101.652344 155.851562 102.257812 156.503906 102.6875 157.363281 C 103.132812 158.210938 103.355469 159.253906 103.355469 160.488281 Z M 94.902344 160.488281 C 94.902344 161.808594 95.160156 162.855469 95.675781 163.632812 C 96.203125 164.394531 97.039062 164.777344 98.179688 164.777344 C 99.304688 164.777344 100.132812 164.394531 100.664062 163.632812 C 101.191406 162.855469 101.457031 161.808594 101.457031 160.488281 C 101.457031 159.167969 101.191406 158.132812 100.664062 157.382812 C 100.132812 156.636719 99.300781 156.261719 98.15625 156.261719 C 97.015625 156.261719 96.1875 156.636719 95.675781 157.382812 C 95.160156 158.132812 94.902344 159.167969 94.902344 160.488281 Z M 94.902344 160.488281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 114.984375 166.070312 L 113.0625 159.78125 C 112.882812 159.210938 112.722656 158.65625 112.582031 158.113281 C 112.457031 157.558594 112.359375 157.128906 112.289062 156.824219 L 112.207031 156.824219 C 112.152344 157.128906 112.058594 157.558594 111.933594 158.113281 C 111.808594 158.65625 111.648438 159.21875 111.453125 159.800781 L 109.449219 166.070312 L 107.363281 166.070312 L 104.296875 154.90625 L 106.195312 154.90625 L 107.738281 160.863281 C 107.890625 161.460938 108.039062 162.0625 108.175781 162.675781 C 108.316406 163.285156 108.414062 163.792969 108.46875 164.195312 L 108.554688 164.195312 C 108.609375 163.957031 108.671875 163.667969 108.742188 163.320312 C 108.824219 162.972656 108.914062 162.613281 109.011719 162.238281 C 109.109375 161.847656 109.207031 161.5 109.304688 161.195312 L 111.289062 154.90625 L 113.292969 154.90625 L 115.210938 161.195312 C 115.367188 161.667969 115.511719 162.183594 115.652344 162.738281 C 115.804688 163.292969 115.90625 163.773438 115.964844 164.175781 L 116.046875 164.175781 C 116.089844 163.828125 116.179688 163.347656 116.320312 162.738281 C 116.472656 162.125 116.632812 161.5 116.796875 160.863281 L 118.363281 154.90625 L 120.242188 154.90625 L 117.132812 166.070312 Z M 114.984375 166.070312 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 129.53125 163.007812 C 129.53125 164.089844 129.128906 164.910156 128.320312 165.464844 C 127.515625 166.019531 126.429688 166.296875 125.066406 166.296875 C 124.285156 166.296875 123.609375 166.234375 123.039062 166.109375 C 122.484375 165.984375 121.988281 165.8125 121.558594 165.589844 L 121.558594 163.925781 C 122.003906 164.144531 122.539062 164.355469 123.164062 164.550781 C 123.804688 164.730469 124.453125 164.820312 125.105469 164.820312 C 126.039062 164.820312 126.714844 164.675781 127.132812 164.382812 C 127.546875 164.078125 127.757812 163.675781 127.757812 163.175781 C 127.757812 162.898438 127.679688 162.648438 127.527344 162.425781 C 127.375 162.203125 127.097656 161.980469 126.691406 161.757812 C 126.304688 161.535156 125.738281 161.285156 125.003906 161.007812 C 124.277344 160.730469 123.660156 160.453125 123.144531 160.175781 C 122.628906 159.898438 122.234375 159.566406 121.953125 159.175781 C 121.675781 158.785156 121.535156 158.289062 121.535156 157.675781 C 121.535156 156.730469 121.917969 156.003906 122.683594 155.488281 C 123.464844 154.976562 124.480469 154.71875 125.734375 154.71875 C 126.414062 154.71875 127.046875 154.789062 127.632812 154.925781 C 128.230469 155.050781 128.789062 155.234375 129.300781 155.46875 L 128.675781 156.925781 C 128.203125 156.730469 127.707031 156.566406 127.195312 156.425781 C 126.679688 156.289062 126.148438 156.21875 125.609375 156.21875 C 124.855469 156.21875 124.277344 156.34375 123.875 156.59375 C 123.484375 156.828125 123.289062 157.15625 123.289062 157.570312 C 123.289062 157.878906 123.382812 158.140625 123.5625 158.363281 C 123.742188 158.570312 124.042969 158.78125 124.460938 158.988281 C 124.890625 159.183594 125.460938 159.417969 126.171875 159.695312 C 126.878906 159.960938 127.484375 160.230469 127.988281 160.507812 C 128.488281 160.785156 128.871094 161.125 129.136719 161.527344 C 129.398438 161.917969 129.53125 162.410156 129.53125 163.007812 Z M 129.53125 163.007812 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 136.566406 154.71875 C 137.527344 154.71875 138.347656 154.925781 139.03125 155.34375 C 139.726562 155.761719 140.253906 156.351562 140.617188 157.113281 C 140.992188 157.863281 141.179688 158.746094 141.179688 159.757812 L 141.179688 160.863281 L 133.519531 160.863281 C 133.546875 162.125 133.867188 163.089844 134.480469 163.757812 C 135.105469 164.410156 135.976562 164.738281 137.089844 164.738281 C 137.796875 164.738281 138.425781 164.675781 138.96875 164.550781 C 139.523438 164.410156 140.09375 164.214844 140.679688 163.964844 L 140.679688 165.570312 C 140.109375 165.820312 139.542969 166 138.988281 166.109375 C 138.429688 166.234375 137.769531 166.296875 137.003906 166.296875 C 135.945312 166.296875 135.007812 166.082031 134.1875 165.652344 C 133.378906 165.222656 132.746094 164.582031 132.289062 163.738281 C 131.84375 162.875 131.621094 161.828125 131.621094 160.59375 C 131.621094 159.371094 131.820312 158.320312 132.222656 157.445312 C 132.640625 156.574219 133.21875 155.898438 133.957031 155.425781 C 134.707031 154.953125 135.578125 154.71875 136.566406 154.71875 Z M 136.546875 156.21875 C 135.667969 156.21875 134.972656 156.503906 134.457031 157.070312 C 133.957031 157.628906 133.65625 158.40625 133.558594 159.40625 L 139.257812 159.40625 C 139.246094 158.460938 139.023438 157.695312 138.589844 157.113281 C 138.160156 156.515625 137.476562 156.21875 136.546875 156.21875 Z M 136.546875 156.21875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 149.238281 154.71875 C 149.445312 154.71875 149.667969 154.734375 149.90625 154.761719 C 150.15625 154.773438 150.371094 154.800781 150.550781 154.84375 L 150.324219 156.53125 C 150.140625 156.488281 149.941406 156.453125 149.71875 156.425781 C 149.507812 156.398438 149.304688 156.386719 149.113281 156.386719 C 148.542969 156.386719 148.003906 156.542969 147.503906 156.863281 C 147.003906 157.167969 146.601562 157.605469 146.292969 158.175781 C 146 158.730469 145.855469 159.382812 145.855469 160.132812 L 145.855469 166.089844 L 144.019531 166.089844 L 144.019531 154.925781 L 145.519531 154.925781 L 145.730469 156.96875 L 145.8125 156.96875 C 146.175781 156.355469 146.640625 155.828125 147.210938 155.386719 C 147.78125 154.941406 148.457031 154.71875 149.238281 154.71875 Z M 149.238281 154.71875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 163.390625 154.71875 C 164.765625 154.71875 165.875 155.199219 166.707031 156.15625 C 167.558594 157.113281 167.980469 158.558594 167.980469 160.488281 C 167.980469 162.390625 167.558594 163.832031 166.707031 164.820312 C 165.875 165.804688 164.761719 166.296875 163.367188 166.296875 C 162.503906 166.296875 161.789062 166.140625 161.21875 165.820312 C 160.660156 165.484375 160.222656 165.105469 159.902344 164.675781 L 159.777344 164.675781 C 159.804688 164.910156 159.832031 165.207031 159.863281 165.570312 C 159.890625 165.929688 159.902344 166.242188 159.902344 166.507812 L 159.902344 171.089844 L 158.066406 171.089844 L 158.066406 154.925781 L 159.570312 154.925781 L 159.820312 156.449219 L 159.902344 156.449219 C 160.238281 155.960938 160.675781 155.550781 161.21875 155.21875 C 161.761719 154.886719 162.484375 154.71875 163.390625 154.71875 Z M 163.054688 156.261719 C 161.914062 156.261719 161.105469 156.578125 160.632812 157.21875 C 160.175781 157.855469 159.929688 158.828125 159.902344 160.132812 L 159.902344 160.488281 C 159.902344 161.863281 160.125 162.925781 160.570312 163.675781 C 161.03125 164.410156 161.871094 164.777344 163.097656 164.777344 C 163.777344 164.777344 164.335938 164.589844 164.765625 164.214844 C 165.210938 163.839844 165.539062 163.335938 165.75 162.695312 C 165.972656 162.042969 166.082031 161.300781 166.082031 160.46875 C 166.082031 159.191406 165.832031 158.167969 165.332031 157.40625 C 164.84375 156.640625 164.085938 156.261719 163.054688 156.261719 Z M 163.054688 156.261719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 176.121094 154.71875 C 176.332031 154.71875 176.554688 154.734375 176.789062 154.761719 C 177.042969 154.773438 177.257812 154.800781 177.4375 154.84375 L 177.207031 156.53125 C 177.027344 156.488281 176.824219 156.453125 176.601562 156.425781 C 176.394531 156.398438 176.191406 156.386719 175.996094 156.386719 C 175.425781 156.386719 174.890625 156.542969 174.390625 156.863281 C 173.890625 157.167969 173.484375 157.605469 173.179688 158.175781 C 172.886719 158.730469 172.742188 159.382812 172.742188 160.132812 L 172.742188 166.089844 L 170.902344 166.089844 L 170.902344 154.925781 L 172.40625 154.925781 L 172.617188 156.96875 L 172.699219 156.96875 C 173.0625 156.355469 173.527344 155.828125 174.097656 155.386719 C 174.667969 154.941406 175.34375 154.71875 176.121094 154.71875 Z M 176.121094 154.71875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 188.835938 160.488281 C 188.835938 162.335938 188.363281 163.765625 187.414062 164.777344 C 186.484375 165.792969 185.214844 166.296875 183.617188 166.296875 C 182.628906 166.296875 181.746094 166.078125 180.964844 165.632812 C 180.199219 165.171875 179.59375 164.515625 179.148438 163.652344 C 178.703125 162.777344 178.480469 161.722656 178.480469 160.488281 C 178.480469 158.640625 178.949219 157.21875 179.878906 156.21875 C 180.8125 155.21875 182.078125 154.71875 183.679688 154.71875 C 184.695312 154.71875 185.585938 154.949219 186.351562 155.40625 C 187.128906 155.851562 187.734375 156.503906 188.167969 157.363281 C 188.613281 158.210938 188.835938 159.253906 188.835938 160.488281 Z M 180.378906 160.488281 C 180.378906 161.808594 180.636719 162.855469 181.152344 163.632812 C 181.683594 164.394531 182.515625 164.777344 183.65625 164.777344 C 184.785156 164.777344 185.613281 164.394531 186.140625 163.632812 C 186.671875 162.855469 186.933594 161.808594 186.933594 160.488281 C 186.933594 159.167969 186.671875 158.132812 186.140625 157.382812 C 185.613281 156.636719 184.777344 156.261719 183.636719 156.261719 C 182.496094 156.261719 181.667969 156.636719 181.152344 157.382812 C 180.636719 158.132812 180.378906 159.167969 180.378906 160.488281 Z M 180.378906 160.488281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 193.574219 150.261719 L 193.574219 154.113281 C 193.574219 154.585938 193.558594 155.03125 193.53125 155.449219 C 193.515625 155.851562 193.496094 156.167969 193.46875 156.40625 L 193.574219 156.40625 C 193.894531 155.933594 194.332031 155.539062 194.886719 155.21875 C 195.445312 154.898438 196.160156 154.738281 197.039062 154.738281 C 198.429688 154.738281 199.542969 155.226562 200.378906 156.199219 C 201.226562 157.15625 201.652344 158.59375 201.652344 160.507812 C 201.652344 162.425781 201.226562 163.867188 200.378906 164.839844 C 199.53125 165.8125 198.417969 166.296875 197.039062 166.296875 C 196.160156 166.296875 195.445312 166.140625 194.886719 165.820312 C 194.332031 165.5 193.894531 165.117188 193.574219 164.675781 L 193.425781 164.675781 L 193.050781 166.089844 L 191.734375 166.089844 L 191.734375 150.261719 Z M 196.726562 156.261719 C 195.542969 156.261719 194.722656 156.601562 194.261719 157.28125 C 193.804688 157.960938 193.574219 159.015625 193.574219 160.445312 L 193.574219 160.53125 C 193.574219 161.902344 193.796875 162.960938 194.242188 163.695312 C 194.699219 164.417969 195.542969 164.777344 196.765625 164.777344 C 197.769531 164.777344 198.511719 164.410156 199 163.675781 C 199.5 162.9375 199.753906 161.875 199.753906 160.488281 C 199.753906 157.667969 198.742188 156.261719 196.726562 156.261719 Z M 196.726562 156.261719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 208.8125 154.738281 C 210.175781 154.738281 211.183594 155.039062 211.839844 155.636719 C 212.492188 156.230469 212.820312 157.183594 212.820312 158.488281 L 212.820312 166.089844 L 211.484375 166.089844 L 211.128906 164.507812 L 211.042969 164.507812 C 210.558594 165.117188 210.042969 165.570312 209.5 165.859375 C 208.972656 166.152344 208.234375 166.296875 207.289062 166.296875 C 206.273438 166.296875 205.429688 166.035156 204.761719 165.507812 C 204.09375 164.964844 203.761719 164.125 203.761719 162.988281 C 203.761719 161.875 204.199219 161.023438 205.074219 160.425781 C 205.953125 159.8125 207.300781 159.480469 209.125 159.425781 L 211.023438 159.363281 L 211.023438 158.695312 C 211.023438 157.765625 210.820312 157.121094 210.417969 156.761719 C 210.015625 156.398438 209.445312 156.21875 208.707031 156.21875 C 208.121094 156.21875 207.566406 156.308594 207.035156 156.488281 C 206.507812 156.65625 206.015625 156.851562 205.554688 157.070312 L 204.992188 155.699219 C 205.476562 155.433594 206.054688 155.210938 206.722656 155.03125 C 207.390625 154.835938 208.085938 154.738281 208.8125 154.738281 Z M 211.003906 160.632812 L 209.355469 160.695312 C 207.960938 160.75 206.996094 160.972656 206.453125 161.363281 C 205.921875 161.75 205.660156 162.300781 205.660156 163.007812 C 205.660156 163.632812 205.847656 164.089844 206.222656 164.382812 C 206.613281 164.675781 207.105469 164.820312 207.703125 164.820312 C 208.652344 164.820312 209.4375 164.5625 210.0625 164.050781 C 210.691406 163.523438 211.003906 162.714844 211.003906 161.632812 Z M 211.003906 160.632812 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 218.121094 150.261719 L 218.121094 154.113281 C 218.121094 154.585938 218.105469 155.03125 218.078125 155.449219 C 218.066406 155.851562 218.042969 156.167969 218.015625 156.40625 L 218.121094 156.40625 C 218.441406 155.933594 218.878906 155.539062 219.4375 155.21875 C 219.992188 154.898438 220.710938 154.738281 221.585938 154.738281 C 222.976562 154.738281 224.089844 155.226562 224.925781 156.199219 C 225.773438 157.15625 226.199219 158.59375 226.199219 160.507812 C 226.199219 162.425781 225.773438 163.867188 224.925781 164.839844 C 224.078125 165.8125 222.964844 166.296875 221.585938 166.296875 C 220.710938 166.296875 219.992188 166.140625 219.4375 165.820312 C 218.878906 165.5 218.441406 165.117188 218.121094 164.675781 L 217.976562 164.675781 L 217.597656 166.089844 L 216.285156 166.089844 L 216.285156 150.261719 Z M 221.273438 156.261719 C 220.089844 156.261719 219.269531 156.601562 218.808594 157.28125 C 218.351562 157.960938 218.121094 159.015625 218.121094 160.445312 L 218.121094 160.53125 C 218.121094 161.902344 218.34375 162.960938 218.789062 163.695312 C 219.25 164.417969 220.089844 164.777344 221.316406 164.777344 C 222.316406 164.777344 223.0625 164.410156 223.546875 163.675781 C 224.050781 162.9375 224.300781 161.875 224.300781 160.488281 C 224.300781 157.667969 223.289062 156.261719 221.273438 156.261719 Z M 221.273438 156.261719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 230.957031 166.089844 L 229.121094 166.089844 L 229.121094 150.261719 L 230.957031 150.261719 Z M 230.957031 166.089844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 232.753906 154.925781 L 234.714844 154.925781 L 237.136719 161.277344 C 237.347656 161.835938 237.535156 162.371094 237.699219 162.882812 C 237.867188 163.382812 237.992188 163.863281 238.078125 164.320312 L 238.160156 164.320312 C 238.242188 163.972656 238.375 163.523438 238.558594 162.964844 C 238.738281 162.398438 238.925781 161.828125 239.121094 161.257812 L 241.394531 154.925781 L 243.378906 154.925781 L 238.558594 167.632812 C 238.167969 168.6875 237.660156 169.527344 237.03125 170.152344 C 236.421875 170.777344 235.570312 171.089844 234.488281 171.089844 C 234.152344 171.089844 233.859375 171.066406 233.609375 171.027344 C 233.359375 171 233.144531 170.964844 232.960938 170.921875 L 232.960938 169.464844 C 233.117188 169.492188 233.296875 169.519531 233.503906 169.546875 C 233.726562 169.574219 233.957031 169.589844 234.195312 169.589844 C 234.835938 169.589844 235.347656 169.410156 235.738281 169.046875 C 236.140625 168.6875 236.457031 168.207031 236.679688 167.609375 L 237.261719 166.132812 Z M 232.753906 154.925781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 252.417969 150.261719 L 252.417969 154.113281 C 252.417969 154.585938 252.402344 155.03125 252.375 155.449219 C 252.363281 155.851562 252.339844 156.167969 252.3125 156.40625 L 252.417969 156.40625 C 252.738281 155.933594 253.175781 155.539062 253.730469 155.21875 C 254.289062 154.898438 255.003906 154.738281 255.882812 154.738281 C 257.273438 154.738281 258.386719 155.226562 259.222656 156.199219 C 260.070312 157.15625 260.496094 158.59375 260.496094 160.507812 C 260.496094 162.425781 260.070312 163.867188 259.222656 164.839844 C 258.375 165.8125 257.261719 166.296875 255.882812 166.296875 C 255.003906 166.296875 254.289062 166.140625 253.730469 165.820312 C 253.175781 165.5 252.738281 165.117188 252.417969 164.675781 L 252.269531 164.675781 L 251.894531 166.089844 L 250.582031 166.089844 L 250.582031 150.261719 Z M 255.570312 156.261719 C 254.386719 156.261719 253.566406 156.601562 253.105469 157.28125 C 252.648438 157.960938 252.417969 159.015625 252.417969 160.445312 L 252.417969 160.53125 C 252.417969 161.902344 252.640625 162.960938 253.085938 163.695312 C 253.542969 164.417969 254.386719 164.777344 255.609375 164.777344 C 256.613281 164.777344 257.355469 164.410156 257.84375 163.675781 C 258.34375 162.9375 258.597656 161.875 258.597656 160.488281 C 258.597656 157.667969 257.585938 156.261719 255.570312 156.261719 Z M 255.570312 156.261719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 265.253906 166.089844 L 263.417969 166.089844 L 263.417969 150.261719 L 265.253906 150.261719 Z M 265.253906 166.089844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 278.53125 160.488281 C 278.53125 162.335938 278.058594 163.765625 277.109375 164.777344 C 276.179688 165.792969 274.914062 166.296875 273.3125 166.296875 C 272.324219 166.296875 271.441406 166.078125 270.660156 165.632812 C 269.894531 165.171875 269.289062 164.515625 268.84375 163.652344 C 268.398438 162.777344 268.175781 161.722656 268.175781 160.488281 C 268.175781 158.640625 268.644531 157.21875 269.574219 156.21875 C 270.507812 155.21875 271.773438 154.71875 273.375 154.71875 C 274.390625 154.71875 275.28125 154.949219 276.046875 155.40625 C 276.824219 155.851562 277.429688 156.503906 277.863281 157.363281 C 278.308594 158.210938 278.53125 159.253906 278.53125 160.488281 Z M 270.078125 160.488281 C 270.078125 161.808594 270.335938 162.855469 270.847656 163.632812 C 271.378906 164.394531 272.210938 164.777344 273.355469 164.777344 C 274.480469 164.777344 275.308594 164.394531 275.835938 163.632812 C 276.367188 162.855469 276.632812 161.808594 276.632812 160.488281 C 276.632812 159.167969 276.367188 158.132812 275.835938 157.382812 C 275.308594 156.636719 274.472656 156.261719 273.332031 156.261719 C 272.191406 156.261719 271.363281 156.636719 270.847656 157.382812 C 270.335938 158.132812 270.078125 159.167969 270.078125 160.488281 Z M 270.078125 160.488281 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 285.921875 166.296875 C 284.933594 166.296875 284.046875 166.097656 283.269531 165.695312 C 282.503906 165.292969 281.898438 164.667969 281.453125 163.820312 C 281.023438 162.972656 280.804688 161.890625 280.804688 160.570312 C 280.804688 159.195312 281.035156 158.078125 281.496094 157.21875 C 281.953125 156.355469 282.574219 155.726562 283.351562 155.324219 C 284.144531 154.921875 285.042969 154.71875 286.046875 154.71875 C 286.617188 154.71875 287.164062 154.78125 287.695312 154.90625 C 288.222656 155.015625 288.65625 155.15625 288.988281 155.324219 L 288.425781 156.84375 C 288.089844 156.71875 287.703125 156.601562 287.257812 156.488281 C 286.8125 156.378906 286.394531 156.324219 286.003906 156.324219 C 283.804688 156.324219 282.707031 157.730469 282.707031 160.550781 C 282.707031 161.898438 282.96875 162.929688 283.5 163.652344 C 284.042969 164.363281 284.839844 164.714844 285.898438 164.714844 C 286.511719 164.714844 287.046875 164.652344 287.507812 164.527344 C 287.980469 164.402344 288.410156 164.25 288.800781 164.070312 L 288.800781 165.695312 C 288.425781 165.890625 288.007812 166.035156 287.546875 166.132812 C 287.101562 166.242188 286.558594 166.296875 285.921875 166.296875 Z M 285.921875 166.296875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 293.269531 150.261719 L 293.269531 158.53125 C 293.269531 158.753906 293.253906 159.042969 293.226562 159.40625 C 293.210938 159.765625 293.199219 160.078125 293.183594 160.34375 L 293.269531 160.34375 C 293.351562 160.230469 293.476562 160.070312 293.644531 159.863281 C 293.808594 159.65625 293.976562 159.445312 294.144531 159.238281 C 294.324219 159.015625 294.476562 158.835938 294.605469 158.695312 L 298.171875 154.925781 L 300.324219 154.925781 L 295.792969 159.695312 L 300.636719 166.089844 L 298.421875 166.089844 L 294.539062 160.882812 L 293.269531 161.988281 L 293.269531 166.089844 L 291.453125 166.089844 L 291.453125 150.261719 Z M 293.269531 150.261719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 309.882812 163.007812 C 309.882812 164.089844 309.480469 164.910156 308.671875 165.464844 C 307.867188 166.019531 306.78125 166.296875 305.417969 166.296875 C 304.636719 166.296875 303.960938 166.234375 303.390625 166.109375 C 302.835938 165.984375 302.339844 165.8125 301.910156 165.589844 L 301.910156 163.925781 C 302.355469 164.144531 302.890625 164.355469 303.515625 164.550781 C 304.15625 164.730469 304.804688 164.820312 305.457031 164.820312 C 306.390625 164.820312 307.066406 164.675781 307.484375 164.382812 C 307.898438 164.078125 308.109375 163.675781 308.109375 163.175781 C 308.109375 162.898438 308.03125 162.648438 307.878906 162.425781 C 307.726562 162.203125 307.449219 161.980469 307.042969 161.757812 C 306.65625 161.535156 306.089844 161.285156 305.355469 161.007812 C 304.628906 160.730469 304.011719 160.453125 303.496094 160.175781 C 302.980469 159.898438 302.585938 159.566406 302.304688 159.175781 C 302.027344 158.785156 301.886719 158.289062 301.886719 157.675781 C 301.886719 156.730469 302.269531 156.003906 303.035156 155.488281 C 303.816406 154.976562 304.832031 154.71875 306.085938 154.71875 C 306.765625 154.71875 307.398438 154.789062 307.984375 154.925781 C 308.582031 155.050781 309.140625 155.234375 309.652344 155.46875 L 309.027344 156.925781 C 308.554688 156.730469 308.058594 156.566406 307.546875 156.425781 C 307.03125 156.289062 306.5 156.21875 305.960938 156.21875 C 305.207031 156.21875 304.628906 156.34375 304.226562 156.59375 C 303.835938 156.828125 303.640625 157.15625 303.640625 157.570312 C 303.640625 157.878906 303.734375 158.140625 303.914062 158.363281 C 304.09375 158.570312 304.394531 158.78125 304.8125 158.988281 C 305.242188 159.183594 305.8125 159.417969 306.523438 159.695312 C 307.230469 159.960938 307.835938 160.230469 308.339844 160.507812 C 308.839844 160.785156 309.222656 161.125 309.488281 161.527344 C 309.75 161.917969 309.882812 162.410156 309.882812 163.007812 Z M 309.882812 163.007812 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.726562 192.332031 C 25.738281 192.332031 24.855469 192.128906 24.078125 191.726562 C 23.3125 191.324219 22.707031 190.699219 22.261719 189.851562 C 21.828125 189.007812 21.613281 187.921875 21.613281 186.605469 C 21.613281 185.230469 21.84375 184.113281 22.300781 183.25 C 22.761719 182.390625 23.378906 181.757812 24.160156 181.355469 C 24.953125 180.953125 25.851562 180.753906 26.851562 180.753906 C 27.421875 180.753906 27.972656 180.816406 28.5 180.941406 C 29.03125 181.050781 29.460938 181.191406 29.796875 181.355469 L 29.230469 182.875 C 28.898438 182.75 28.507812 182.632812 28.0625 182.523438 C 27.617188 182.410156 27.199219 182.355469 26.8125 182.355469 C 24.613281 182.355469 23.511719 183.765625 23.511719 186.582031 C 23.511719 187.929688 23.777344 188.964844 24.304688 189.6875 C 24.847656 190.394531 25.648438 190.75 26.707031 190.75 C 27.320312 190.75 27.855469 190.6875 28.3125 190.5625 C 28.785156 190.4375 29.21875 190.285156 29.609375 190.101562 L 29.609375 191.726562 C 29.230469 191.921875 28.816406 192.066406 28.355469 192.164062 C 27.910156 192.277344 27.367188 192.332031 26.726562 192.332031 Z M 26.726562 192.332031 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.984375 186.519531 C 41.984375 188.367188 41.511719 189.796875 40.566406 190.8125 C 39.632812 191.824219 38.367188 192.332031 36.769531 192.332031 C 35.78125 192.332031 34.894531 192.109375 34.117188 191.664062 C 33.351562 191.207031 32.746094 190.546875 32.300781 189.6875 C 31.855469 188.8125 31.632812 187.757812 31.632812 186.519531 C 31.632812 184.675781 32.097656 183.25 33.03125 182.25 C 33.964844 181.253906 35.230469 180.753906 36.832031 180.753906 C 37.847656 180.753906 38.738281 180.980469 39.503906 181.441406 C 40.28125 181.882812 40.886719 182.535156 41.316406 183.398438 C 41.761719 184.246094 41.984375 185.285156 41.984375 186.519531 Z M 33.53125 186.519531 C 33.53125 187.839844 33.789062 188.886719 34.304688 189.667969 C 34.832031 190.429688 35.667969 190.8125 36.808594 190.8125 C 37.9375 190.8125 38.765625 190.429688 39.292969 189.667969 C 39.820312 188.886719 40.085938 187.839844 40.085938 186.519531 C 40.085938 185.203125 39.820312 184.167969 39.292969 183.417969 C 38.765625 182.667969 37.929688 182.292969 36.789062 182.292969 C 35.648438 182.292969 34.820312 182.667969 34.304688 183.417969 C 33.789062 184.167969 33.53125 185.203125 33.53125 186.519531 Z M 33.53125 186.519531 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 50.273438 180.753906 C 51.609375 180.753906 52.617188 181.078125 53.300781 181.730469 C 53.980469 182.371094 54.324219 183.410156 54.324219 184.855469 L 54.324219 192.125 L 52.507812 192.125 L 52.507812 184.980469 C 52.507812 183.1875 51.671875 182.292969 50 182.292969 C 48.761719 182.292969 47.90625 182.640625 47.433594 183.335938 C 46.960938 184.027344 46.726562 185.027344 46.726562 186.332031 L 46.726562 192.125 L 44.886719 192.125 L 44.886719 180.960938 L 46.371094 180.960938 L 46.640625 182.480469 L 46.746094 182.480469 C 47.105469 181.898438 47.609375 181.46875 48.25 181.191406 C 48.886719 180.898438 49.5625 180.753906 50.273438 180.753906 Z M 50.273438 180.753906 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 61.523438 190.832031 C 61.800781 190.832031 62.085938 190.8125 62.378906 190.769531 C 62.671875 190.714844 62.910156 190.660156 63.089844 190.601562 L 63.089844 192 C 62.894531 192.097656 62.617188 192.171875 62.253906 192.226562 C 61.894531 192.296875 61.546875 192.332031 61.210938 192.332031 C 60.625 192.332031 60.082031 192.234375 59.582031 192.039062 C 59.097656 191.832031 58.699219 191.476562 58.394531 190.976562 C 58.085938 190.476562 57.933594 189.777344 57.933594 188.875 L 57.933594 182.375 L 56.347656 182.375 L 56.347656 181.503906 L 57.953125 180.773438 L 58.683594 178.398438 L 59.769531 178.398438 L 59.769531 180.960938 L 63.007812 180.960938 L 63.007812 182.375 L 59.769531 182.375 L 59.769531 188.832031 C 59.769531 189.511719 59.929688 190.019531 60.25 190.351562 C 60.585938 190.671875 61.007812 190.832031 61.523438 190.832031 Z M 61.523438 190.832031 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 69.644531 180.753906 C 70.605469 180.753906 71.425781 180.960938 72.105469 181.378906 C 72.804688 181.792969 73.332031 182.382812 73.695312 183.148438 C 74.070312 183.898438 74.257812 184.777344 74.257812 185.792969 L 74.257812 186.894531 L 66.597656 186.894531 C 66.625 188.160156 66.945312 189.125 67.558594 189.792969 C 68.183594 190.445312 69.054688 190.769531 70.167969 190.769531 C 70.875 190.769531 71.503906 190.707031 72.042969 190.582031 C 72.601562 190.445312 73.171875 190.25 73.757812 190 L 73.757812 191.601562 C 73.1875 191.851562 72.621094 192.035156 72.066406 192.144531 C 71.507812 192.269531 70.847656 192.332031 70.082031 192.332031 C 69.023438 192.332031 68.085938 192.117188 67.265625 191.6875 C 66.457031 191.253906 65.824219 190.617188 65.363281 189.769531 C 64.917969 188.910156 64.695312 187.859375 64.695312 186.625 C 64.695312 185.402344 64.898438 184.355469 65.300781 183.480469 C 65.71875 182.605469 66.296875 181.933594 67.035156 181.460938 C 67.785156 180.988281 68.65625 180.753906 69.644531 180.753906 Z M 69.625 182.25 C 68.746094 182.25 68.050781 182.535156 67.535156 183.105469 C 67.035156 183.660156 66.734375 184.4375 66.636719 185.4375 L 72.335938 185.4375 C 72.324219 184.492188 72.101562 183.730469 71.667969 183.148438 C 71.238281 182.550781 70.554688 182.25 69.625 182.25 Z M 69.625 182.25 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 82.480469 180.753906 C 83.816406 180.753906 84.828125 181.078125 85.507812 181.730469 C 86.191406 182.371094 86.53125 183.410156 86.53125 184.855469 L 86.53125 192.125 L 84.714844 192.125 L 84.714844 184.980469 C 84.714844 183.1875 83.878906 182.292969 82.210938 182.292969 C 80.972656 182.292969 80.117188 182.640625 79.644531 183.335938 C 79.167969 184.027344 78.933594 185.027344 78.933594 186.332031 L 78.933594 192.125 L 77.097656 192.125 L 77.097656 180.960938 L 78.578125 180.960938 L 78.851562 182.480469 L 78.953125 182.480469 C 79.316406 181.898438 79.816406 181.46875 80.457031 181.191406 C 81.097656 180.898438 81.773438 180.753906 82.480469 180.753906 Z M 82.480469 180.753906 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 93.734375 190.832031 C 94.011719 190.832031 94.296875 190.8125 94.589844 190.769531 C 94.882812 190.714844 95.117188 190.660156 95.296875 190.601562 L 95.296875 192 C 95.105469 192.097656 94.824219 192.171875 94.464844 192.226562 C 94.101562 192.296875 93.753906 192.332031 93.417969 192.332031 C 92.835938 192.332031 92.292969 192.234375 91.792969 192.039062 C 91.304688 191.832031 90.90625 191.476562 90.601562 190.976562 C 90.296875 190.476562 90.140625 189.777344 90.140625 188.875 L 90.140625 182.375 L 88.554688 182.375 L 88.554688 181.503906 L 90.164062 180.773438 L 90.894531 178.398438 L 91.980469 178.398438 L 91.980469 180.960938 L 95.214844 180.960938 L 95.214844 182.375 L 91.980469 182.375 L 91.980469 188.832031 C 91.980469 189.511719 92.140625 190.019531 92.460938 190.351562 C 92.792969 190.671875 93.21875 190.832031 93.734375 190.832031 Z M 93.734375 190.832031 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 110.246094 189.042969 C 110.246094 190.125 109.839844 190.945312 109.035156 191.5 C 108.226562 192.054688 107.140625 192.332031 105.777344 192.332031 C 104.996094 192.332031 104.324219 192.269531 103.753906 192.144531 C 103.195312 192.019531 102.703125 191.847656 102.269531 191.625 L 102.269531 189.957031 C 102.714844 190.179688 103.25 190.386719 103.878906 190.582031 C 104.519531 190.761719 105.164062 190.851562 105.820312 190.851562 C 106.75 190.851562 107.425781 190.707031 107.84375 190.414062 C 108.261719 190.109375 108.46875 189.707031 108.46875 189.207031 C 108.46875 188.929688 108.394531 188.679688 108.242188 188.457031 C 108.085938 188.234375 107.808594 188.015625 107.40625 187.792969 C 107.015625 187.570312 106.453125 187.320312 105.714844 187.042969 C 104.992188 186.765625 104.371094 186.488281 103.855469 186.207031 C 103.34375 185.929688 102.945312 185.597656 102.667969 185.210938 C 102.386719 184.820312 102.25 184.320312 102.25 183.710938 C 102.25 182.765625 102.632812 182.035156 103.398438 181.523438 C 104.175781 181.007812 105.191406 180.753906 106.445312 180.753906 C 107.128906 180.753906 107.761719 180.820312 108.34375 180.960938 C 108.941406 181.085938 109.5 181.265625 110.015625 181.503906 L 109.386719 182.960938 C 108.914062 182.765625 108.421875 182.597656 107.90625 182.460938 C 107.390625 182.320312 106.863281 182.25 106.320312 182.25 C 105.570312 182.25 104.992188 182.375 104.585938 182.625 C 104.199219 182.863281 104.003906 183.1875 104.003906 183.605469 C 104.003906 183.910156 104.09375 184.175781 104.273438 184.398438 C 104.457031 184.605469 104.753906 184.8125 105.171875 185.023438 C 105.601562 185.214844 106.171875 185.453125 106.882812 185.730469 C 107.59375 185.992188 108.199219 186.265625 108.699219 186.542969 C 109.199219 186.820312 109.582031 187.160156 109.847656 187.5625 C 110.113281 187.953125 110.246094 188.445312 110.246094 189.042969 Z M 110.246094 189.042969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 117.277344 180.753906 C 118.238281 180.753906 119.058594 180.960938 119.742188 181.378906 C 120.4375 181.792969 120.964844 182.382812 121.328125 183.148438 C 121.703125 183.898438 121.890625 184.777344 121.890625 185.792969 L 121.890625 186.894531 L 114.230469 186.894531 C 114.257812 188.160156 114.578125 189.125 115.191406 189.792969 C 115.816406 190.445312 116.6875 190.769531 117.800781 190.769531 C 118.511719 190.769531 119.136719 190.707031 119.679688 190.582031 C 120.234375 190.445312 120.804688 190.25 121.390625 190 L 121.390625 191.601562 C 120.820312 191.851562 120.257812 192.035156 119.699219 192.144531 C 119.144531 192.269531 118.484375 192.332031 117.71875 192.332031 C 116.660156 192.332031 115.71875 192.117188 114.898438 191.6875 C 114.09375 191.253906 113.457031 190.617188 113 189.769531 C 112.554688 188.910156 112.332031 187.859375 112.332031 186.625 C 112.332031 185.402344 112.535156 184.355469 112.9375 183.480469 C 113.355469 182.605469 113.933594 181.933594 114.667969 181.460938 C 115.421875 180.988281 116.289062 180.753906 117.277344 180.753906 Z M 117.257812 182.25 C 116.382812 182.25 115.683594 182.535156 115.171875 183.105469 C 114.667969 183.660156 114.371094 184.4375 114.273438 185.4375 L 119.972656 185.4375 C 119.957031 184.492188 119.734375 183.730469 119.304688 183.148438 C 118.871094 182.550781 118.191406 182.25 117.257812 182.25 Z M 117.257812 182.25 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 129.949219 180.753906 C 130.15625 180.753906 130.378906 180.765625 130.617188 180.792969 C 130.867188 180.808594 131.082031 180.835938 131.265625 180.878906 L 131.035156 182.5625 C 130.855469 182.523438 130.652344 182.488281 130.429688 182.460938 C 130.21875 182.433594 130.019531 182.417969 129.824219 182.417969 C 129.253906 182.417969 128.71875 182.578125 128.214844 182.898438 C 127.714844 183.203125 127.3125 183.640625 127.007812 184.210938 C 126.714844 184.765625 126.566406 185.417969 126.566406 186.167969 L 126.566406 192.125 L 124.730469 192.125 L 124.730469 180.960938 L 126.234375 180.960938 L 126.441406 183 L 126.527344 183 C 126.886719 182.390625 127.355469 181.863281 127.925781 181.417969 C 128.496094 180.972656 129.171875 180.753906 129.949219 180.753906 Z M 129.949219 180.753906 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 135.816406 192.125 L 131.578125 180.960938 L 133.539062 180.960938 L 135.917969 187.542969 C 136.03125 187.847656 136.148438 188.1875 136.273438 188.5625 C 136.398438 188.9375 136.511719 189.296875 136.609375 189.644531 C 136.707031 189.976562 136.773438 190.261719 136.816406 190.5 L 136.898438 190.5 C 136.957031 190.261719 137.03125 189.972656 137.128906 189.625 C 137.242188 189.277344 137.359375 188.917969 137.484375 188.542969 C 137.625 188.167969 137.742188 187.832031 137.839844 187.542969 L 140.21875 180.960938 L 142.179688 180.960938 L 137.921875 192.125 Z M 135.816406 192.125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 148.277344 180.753906 C 149.238281 180.753906 150.058594 180.960938 150.738281 181.378906 C 151.4375 181.792969 151.964844 182.382812 152.328125 183.148438 C 152.703125 183.898438 152.890625 184.777344 152.890625 185.792969 L 152.890625 186.894531 L 145.230469 186.894531 C 145.257812 188.160156 145.578125 189.125 146.1875 189.792969 C 146.816406 190.445312 147.683594 190.769531 148.796875 190.769531 C 149.507812 190.769531 150.132812 190.707031 150.675781 190.582031 C 151.234375 190.445312 151.804688 190.25 152.390625 190 L 152.390625 191.601562 C 151.816406 191.851562 151.253906 192.035156 150.699219 192.144531 C 150.140625 192.269531 149.480469 192.332031 148.714844 192.332031 C 147.65625 192.332031 146.71875 192.117188 145.898438 191.6875 C 145.089844 191.253906 144.457031 190.617188 143.996094 189.769531 C 143.550781 188.910156 143.328125 187.859375 143.328125 186.625 C 143.328125 185.402344 143.53125 184.355469 143.933594 183.480469 C 144.351562 182.605469 144.929688 181.933594 145.667969 181.460938 C 146.417969 180.988281 147.289062 180.753906 148.277344 180.753906 Z M 148.253906 182.25 C 147.378906 182.25 146.683594 182.535156 146.167969 183.105469 C 145.667969 183.660156 145.367188 184.4375 145.269531 185.4375 L 150.96875 185.4375 C 150.957031 184.492188 150.734375 183.730469 150.300781 183.148438 C 149.871094 182.550781 149.1875 182.25 148.253906 182.25 Z M 148.253906 182.25 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 159.695312 192.332031 C 158.304688 192.332031 157.191406 191.851562 156.355469 190.894531 C 155.519531 189.921875 155.101562 188.480469 155.101562 186.5625 C 155.101562 184.648438 155.519531 183.203125 156.355469 182.230469 C 157.203125 181.246094 158.324219 180.753906 159.714844 180.753906 C 160.578125 180.753906 161.28125 180.910156 161.824219 181.230469 C 162.378906 181.550781 162.832031 181.9375 163.179688 182.398438 L 163.304688 182.398438 C 163.292969 182.21875 163.265625 181.953125 163.222656 181.605469 C 163.195312 181.246094 163.179688 180.960938 163.179688 180.753906 L 163.179688 176.296875 L 165.019531 176.296875 L 165.019531 192.125 L 163.535156 192.125 L 163.265625 190.625 L 163.179688 190.625 C 162.847656 191.097656 162.402344 191.5 161.84375 191.832031 C 161.289062 192.164062 160.570312 192.332031 159.695312 192.332031 Z M 159.988281 190.8125 C 161.167969 190.8125 161.996094 190.492188 162.472656 189.851562 C 162.957031 189.199219 163.203125 188.222656 163.203125 186.917969 L 163.203125 186.582031 C 163.203125 185.195312 162.972656 184.132812 162.511719 183.398438 C 162.054688 182.648438 161.203125 182.273438 159.964844 182.273438 C 158.976562 182.273438 158.234375 182.667969 157.734375 183.460938 C 157.246094 184.238281 157.003906 185.285156 157.003906 186.605469 C 157.003906 187.9375 157.246094 188.972656 157.734375 189.707031 C 158.234375 190.445312 158.984375 190.8125 159.988281 190.8125 Z M 159.988281 190.8125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 175.832031 176.296875 L 175.832031 180.148438 C 175.832031 180.621094 175.816406 181.066406 175.789062 181.480469 C 175.773438 181.882812 175.753906 182.203125 175.726562 182.4375 L 175.832031 182.4375 C 176.148438 181.96875 176.589844 181.570312 177.144531 181.253906 C 177.703125 180.933594 178.417969 180.773438 179.296875 180.773438 C 180.6875 180.773438 181.800781 181.257812 182.636719 182.230469 C 183.484375 183.1875 183.910156 184.625 183.910156 186.542969 C 183.910156 188.457031 183.484375 189.902344 182.636719 190.875 C 181.785156 191.847656 180.671875 192.332031 179.296875 192.332031 C 178.417969 192.332031 177.703125 192.171875 177.144531 191.851562 C 176.589844 191.535156 176.148438 191.152344 175.832031 190.707031 L 175.683594 190.707031 L 175.308594 192.125 L 173.992188 192.125 L 173.992188 176.296875 Z M 178.980469 182.292969 C 177.800781 182.292969 176.976562 182.632812 176.519531 183.3125 C 176.058594 183.996094 175.832031 185.050781 175.832031 186.480469 L 175.832031 186.5625 C 175.832031 187.9375 176.054688 188.992188 176.5 189.730469 C 176.957031 190.449219 177.800781 190.8125 179.023438 190.8125 C 180.027344 190.8125 180.769531 190.445312 181.257812 189.707031 C 181.757812 188.972656 182.007812 187.910156 182.007812 186.519531 C 182.007812 183.703125 181 182.292969 178.980469 182.292969 Z M 178.980469 182.292969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 184.660156 180.960938 L 186.621094 180.960938 L 189.042969 187.3125 C 189.253906 187.867188 189.441406 188.402344 189.605469 188.917969 C 189.773438 189.417969 189.898438 189.894531 189.984375 190.351562 L 190.066406 190.351562 C 190.148438 190.007812 190.28125 189.554688 190.464844 189 C 190.644531 188.429688 190.832031 187.859375 191.027344 187.292969 L 193.300781 180.960938 L 195.285156 180.960938 L 190.464844 193.664062 C 190.074219 194.71875 189.566406 195.558594 188.9375 196.183594 C 188.328125 196.808594 187.476562 197.121094 186.394531 197.121094 C 186.058594 197.121094 185.765625 197.101562 185.515625 197.058594 C 185.265625 197.03125 185.050781 196.996094 184.867188 196.957031 L 184.867188 195.496094 C 185.023438 195.523438 185.203125 195.554688 185.410156 195.582031 C 185.632812 195.609375 185.863281 195.621094 186.101562 195.621094 C 186.742188 195.621094 187.253906 195.441406 187.644531 195.082031 C 188.046875 194.71875 188.363281 194.242188 188.585938 193.644531 L 189.167969 192.164062 Z M 184.660156 180.960938 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 207.640625 182.375 L 204.824219 182.375 L 204.824219 192.125 L 202.988281 192.125 L 202.988281 182.375 L 201.023438 182.375 L 201.023438 181.523438 L 202.988281 180.898438 L 202.988281 180.253906 C 202.988281 178.808594 203.308594 177.773438 203.949219 177.148438 C 204.585938 176.511719 205.476562 176.191406 206.621094 176.191406 C 207.066406 176.191406 207.46875 176.234375 207.832031 176.316406 C 208.207031 176.386719 208.527344 176.46875 208.789062 176.566406 L 208.308594 178.003906 C 208.085938 177.933594 207.832031 177.863281 207.539062 177.792969 C 207.246094 177.726562 206.945312 177.691406 206.640625 177.691406 C 206.027344 177.691406 205.570312 177.898438 205.261719 178.316406 C 204.96875 178.71875 204.824219 179.355469 204.824219 180.230469 L 204.824219 180.960938 L 207.640625 180.960938 Z M 207.640625 182.375 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 213.90625 180.773438 C 215.269531 180.773438 216.277344 181.070312 216.929688 181.667969 C 217.585938 182.265625 217.914062 183.214844 217.914062 184.523438 L 217.914062 192.125 L 216.578125 192.125 L 216.222656 190.539062 L 216.136719 190.539062 C 215.652344 191.152344 215.136719 191.601562 214.59375 191.894531 C 214.066406 192.1875 213.328125 192.332031 212.378906 192.332031 C 211.363281 192.332031 210.523438 192.066406 209.855469 191.539062 C 209.1875 191 208.851562 190.160156 208.851562 189.019531 C 208.851562 187.910156 209.292969 187.054688 210.167969 186.457031 C 211.042969 185.847656 212.394531 185.515625 214.21875 185.460938 L 216.117188 185.398438 L 216.117188 184.730469 C 216.117188 183.800781 215.914062 183.152344 215.511719 182.792969 C 215.109375 182.433594 214.539062 182.25 213.800781 182.25 C 213.214844 182.25 212.660156 182.34375 212.128906 182.523438 C 211.601562 182.6875 211.105469 182.882812 210.648438 183.105469 L 210.085938 181.730469 C 210.570312 181.46875 211.148438 181.246094 211.816406 181.066406 C 212.484375 180.871094 213.179688 180.773438 213.90625 180.773438 Z M 216.097656 186.667969 L 214.445312 186.730469 C 213.054688 186.785156 212.089844 187.007812 211.546875 187.394531 C 211.015625 187.785156 210.753906 188.332031 210.753906 189.042969 C 210.753906 189.667969 210.941406 190.125 211.316406 190.414062 C 211.707031 190.707031 212.199219 190.851562 212.796875 190.851562 C 213.746094 190.851562 214.53125 190.597656 215.15625 190.082031 C 215.78125 189.554688 216.097656 188.75 216.097656 187.667969 Z M 216.097656 186.667969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 225.867188 192.332031 C 224.878906 192.332031 223.992188 192.128906 223.214844 191.726562 C 222.449219 191.324219 221.84375 190.699219 221.398438 189.851562 C 220.96875 189.007812 220.75 187.921875 220.75 186.605469 C 220.75 185.230469 220.980469 184.113281 221.441406 183.25 C 221.898438 182.390625 222.519531 181.757812 223.296875 181.355469 C 224.089844 180.953125 224.988281 180.753906 225.992188 180.753906 C 226.5625 180.753906 227.109375 180.816406 227.640625 180.941406 C 228.167969 181.050781 228.601562 181.191406 228.933594 181.355469 L 228.371094 182.875 C 228.035156 182.75 227.648438 182.632812 227.203125 182.523438 C 226.757812 182.410156 226.339844 182.355469 225.949219 182.355469 C 223.75 182.355469 222.652344 183.765625 222.652344 186.582031 C 222.652344 187.929688 222.914062 188.964844 223.445312 189.6875 C 223.988281 190.394531 224.785156 190.75 225.84375 190.75 C 226.457031 190.75 226.992188 190.6875 227.453125 190.5625 C 227.925781 190.4375 228.355469 190.285156 228.746094 190.101562 L 228.746094 191.726562 C 228.371094 191.921875 227.953125 192.066406 227.492188 192.164062 C 227.046875 192.277344 226.503906 192.332031 225.867188 192.332031 Z M 225.867188 192.332031 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 235.71875 180.753906 C 236.679688 180.753906 237.5 180.960938 238.179688 181.378906 C 238.875 181.792969 239.40625 182.382812 239.765625 183.148438 C 240.144531 183.898438 240.332031 184.777344 240.332031 185.792969 L 240.332031 186.894531 L 232.671875 186.894531 C 232.699219 188.160156 233.019531 189.125 233.628906 189.792969 C 234.257812 190.445312 235.125 190.769531 236.238281 190.769531 C 236.949219 190.769531 237.574219 190.707031 238.117188 190.582031 C 238.675781 190.445312 239.246094 190.25 239.828125 190 L 239.828125 191.601562 C 239.257812 191.851562 238.695312 192.035156 238.140625 192.144531 C 237.582031 192.269531 236.921875 192.332031 236.15625 192.332031 C 235.097656 192.332031 234.160156 192.117188 233.339844 191.6875 C 232.53125 191.253906 231.898438 190.617188 231.4375 189.769531 C 230.992188 188.910156 230.769531 187.859375 230.769531 186.625 C 230.769531 185.402344 230.972656 184.355469 231.375 183.480469 C 231.792969 182.605469 232.371094 181.933594 233.109375 181.460938 C 233.859375 180.988281 234.730469 180.753906 235.71875 180.753906 Z M 235.695312 182.25 C 234.820312 182.25 234.125 182.535156 233.609375 183.105469 C 233.109375 183.660156 232.808594 184.4375 232.710938 185.4375 L 238.410156 185.4375 C 238.398438 184.492188 238.175781 183.730469 237.742188 183.148438 C 237.3125 182.550781 236.628906 182.25 235.695312 182.25 Z M 235.695312 182.25 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 245.007812 176.296875 L 245.007812 180.148438 C 245.007812 180.621094 244.992188 181.066406 244.964844 181.480469 C 244.953125 181.882812 244.929688 182.203125 244.902344 182.4375 L 245.007812 182.4375 C 245.328125 181.96875 245.765625 181.570312 246.320312 181.253906 C 246.878906 180.933594 247.59375 180.773438 248.472656 180.773438 C 249.863281 180.773438 250.976562 181.257812 251.8125 182.230469 C 252.660156 183.1875 253.085938 184.625 253.085938 186.542969 C 253.085938 188.457031 252.660156 189.902344 251.8125 190.875 C 250.964844 191.847656 249.851562 192.332031 248.472656 192.332031 C 247.59375 192.332031 246.878906 192.171875 246.320312 191.851562 C 245.765625 191.535156 245.328125 191.152344 245.007812 190.707031 L 244.859375 190.707031 L 244.484375 192.125 L 243.167969 192.125 L 243.167969 176.296875 Z M 248.160156 182.292969 C 246.976562 182.292969 246.15625 182.632812 245.695312 183.3125 C 245.238281 183.996094 245.007812 185.050781 245.007812 186.480469 L 245.007812 186.5625 C 245.007812 187.9375 245.230469 188.992188 245.675781 189.730469 C 246.132812 190.449219 246.976562 190.8125 248.199219 190.8125 C 249.203125 190.8125 249.945312 190.445312 250.433594 189.707031 C 250.933594 188.972656 251.1875 187.910156 251.1875 186.519531 C 251.1875 183.703125 250.175781 182.292969 248.160156 182.292969 Z M 248.160156 182.292969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 265.734375 186.519531 C 265.734375 188.367188 265.261719 189.796875 264.316406 190.8125 C 263.382812 191.824219 262.117188 192.332031 260.515625 192.332031 C 259.527344 192.332031 258.644531 192.109375 257.867188 191.664062 C 257.101562 191.207031 256.496094 190.546875 256.050781 189.6875 C 255.605469 188.8125 255.382812 187.757812 255.382812 186.519531 C 255.382812 184.675781 255.847656 183.25 256.78125 182.25 C 257.710938 181.253906 258.980469 180.753906 260.578125 180.753906 C 261.59375 180.753906 262.484375 180.980469 263.25 181.441406 C 264.03125 181.882812 264.636719 182.535156 265.066406 183.398438 C 265.511719 184.246094 265.734375 185.285156 265.734375 186.519531 Z M 257.28125 186.519531 C 257.28125 187.839844 257.539062 188.886719 258.054688 189.667969 C 258.582031 190.429688 259.417969 190.8125 260.558594 190.8125 C 261.683594 190.8125 262.511719 190.429688 263.042969 189.667969 C 263.570312 188.886719 263.835938 187.839844 263.835938 186.519531 C 263.835938 185.203125 263.570312 184.167969 263.042969 183.417969 C 262.511719 182.667969 261.679688 182.292969 260.539062 182.292969 C 259.394531 182.292969 258.566406 182.667969 258.054688 183.417969 C 257.539062 184.167969 257.28125 185.203125 257.28125 186.519531 Z M 257.28125 186.519531 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 278.363281 186.519531 C 278.363281 188.367188 277.890625 189.796875 276.945312 190.8125 C 276.011719 191.824219 274.746094 192.332031 273.144531 192.332031 C 272.15625 192.332031 271.273438 192.109375 270.492188 191.664062 C 269.730469 191.207031 269.125 190.546875 268.679688 189.6875 C 268.234375 188.8125 268.011719 187.757812 268.011719 186.519531 C 268.011719 184.675781 268.476562 183.25 269.410156 182.25 C 270.339844 181.253906 271.605469 180.753906 273.207031 180.753906 C 274.222656 180.753906 275.113281 180.980469 275.878906 181.441406 C 276.660156 181.882812 277.265625 182.535156 277.695312 183.398438 C 278.140625 184.246094 278.363281 185.285156 278.363281 186.519531 Z M 269.910156 186.519531 C 269.910156 187.839844 270.167969 188.886719 270.683594 189.667969 C 271.210938 190.429688 272.046875 190.8125 273.1875 190.8125 C 274.3125 190.8125 275.140625 190.429688 275.671875 189.667969 C 276.199219 188.886719 276.464844 187.839844 276.464844 186.519531 C 276.464844 185.203125 276.199219 184.167969 275.671875 183.417969 C 275.140625 182.667969 274.308594 182.292969 273.164062 182.292969 C 272.023438 182.292969 271.195312 182.667969 270.683594 183.417969 C 270.167969 184.167969 269.910156 185.203125 269.910156 186.519531 Z M 269.910156 186.519531 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 283.082031 176.296875 L 283.082031 184.5625 C 283.082031 184.785156 283.066406 185.078125 283.039062 185.4375 C 283.027344 185.800781 283.011719 186.113281 282.996094 186.375 L 283.082031 186.375 C 283.164062 186.265625 283.289062 186.105469 283.457031 185.894531 C 283.625 185.6875 283.789062 185.480469 283.957031 185.273438 C 284.140625 185.050781 284.292969 184.867188 284.417969 184.730469 L 287.988281 180.960938 L 290.136719 180.960938 L 285.605469 185.730469 L 290.449219 192.125 L 288.238281 192.125 L 284.355469 186.917969 L 283.082031 188.019531 L 283.082031 192.125 L 281.265625 192.125 L 281.265625 176.296875 Z M 283.082031 176.296875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 296.898438 187.355469 L 296.898438 185.730469 L 301.953125 185.730469 L 301.953125 187.355469 Z M 296.898438 187.355469 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 31.382812 218.136719 L 29.460938 211.847656 C 29.28125 211.277344 29.121094 210.722656 28.980469 210.179688 C 28.855469 209.625 28.757812 209.195312 28.6875 208.890625 L 28.605469 208.890625 C 28.550781 209.195312 28.460938 209.625 28.335938 210.179688 C 28.210938 210.722656 28.050781 211.285156 27.855469 211.867188 L 25.851562 218.136719 L 23.761719 218.136719 L 20.695312 206.972656 L 22.59375 206.972656 L 24.140625 212.929688 C 24.292969 213.527344 24.4375 214.128906 24.578125 214.742188 C 24.714844 215.351562 24.8125 215.859375 24.871094 216.261719 L 24.953125 216.261719 C 25.007812 216.027344 25.070312 215.734375 25.140625 215.386719 C 25.222656 215.039062 25.316406 214.679688 25.414062 214.304688 C 25.507812 213.914062 25.605469 213.566406 25.703125 213.261719 L 27.6875 206.972656 L 29.691406 206.972656 L 31.613281 213.261719 C 31.765625 213.734375 31.910156 214.25 32.050781 214.804688 C 32.203125 215.359375 32.308594 215.839844 32.363281 216.242188 L 32.445312 216.242188 C 32.488281 215.894531 32.578125 215.414062 32.71875 214.804688 C 32.871094 214.191406 33.03125 213.566406 33.199219 212.929688 L 34.765625 206.972656 L 36.640625 206.972656 L 33.53125 218.136719 Z M 31.382812 218.136719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 40.484375 202.328125 L 40.484375 206.972656 C 40.484375 207.527344 40.449219 208.050781 40.378906 208.535156 L 40.503906 208.535156 C 40.867188 207.964844 41.351562 207.535156 41.964844 207.242188 C 42.589844 206.953125 43.265625 206.804688 43.988281 206.804688 C 45.355469 206.804688 46.375 207.132812 47.058594 207.785156 C 47.742188 208.425781 48.082031 209.457031 48.082031 210.886719 L 48.082031 218.15625 L 46.265625 218.15625 L 46.265625 211.011719 C 46.265625 209.222656 45.429688 208.328125 43.761719 208.328125 C 42.507812 208.328125 41.644531 208.679688 41.171875 209.390625 C 40.710938 210.082031 40.484375 211.082031 40.484375 212.386719 L 40.484375 218.15625 L 38.644531 218.15625 L 38.644531 202.328125 Z M 40.484375 202.328125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 52.484375 202.808594 C 52.765625 202.808594 53.007812 202.90625 53.214844 203.097656 C 53.4375 203.28125 53.550781 203.570312 53.550781 203.972656 C 53.550781 204.363281 53.4375 204.65625 53.214844 204.847656 C 53.007812 205.042969 52.765625 205.140625 52.484375 205.140625 C 52.179688 205.140625 51.921875 205.042969 51.714844 204.847656 C 51.503906 204.65625 51.398438 204.363281 51.398438 203.972656 C 51.398438 203.570312 51.503906 203.28125 51.714844 203.097656 C 51.921875 202.90625 52.179688 202.808594 52.484375 202.808594 Z M 53.382812 206.992188 L 53.382812 218.15625 L 51.546875 218.15625 L 51.546875 206.992188 Z M 53.382812 206.992188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 61.417969 218.367188 C 60.433594 218.367188 59.546875 218.164062 58.769531 217.761719 C 58.003906 217.359375 57.398438 216.734375 56.953125 215.886719 C 56.519531 215.039062 56.304688 213.957031 56.304688 212.636719 C 56.304688 211.261719 56.535156 210.144531 56.996094 209.285156 C 57.453125 208.425781 58.074219 207.792969 58.851562 207.390625 C 59.644531 206.988281 60.542969 206.785156 61.546875 206.785156 C 62.117188 206.785156 62.664062 206.847656 63.195312 206.972656 C 63.722656 207.085938 64.15625 207.222656 64.488281 207.390625 L 63.925781 208.910156 C 63.589844 208.785156 63.199219 208.667969 62.753906 208.554688 C 62.308594 208.445312 61.894531 208.390625 61.503906 208.390625 C 59.304688 208.390625 58.207031 209.796875 58.207031 212.617188 C 58.207031 213.964844 58.46875 215 59 215.71875 C 59.542969 216.429688 60.339844 216.78125 61.398438 216.78125 C 62.011719 216.78125 62.546875 216.71875 63.007812 216.59375 C 63.480469 216.46875 63.910156 216.316406 64.300781 216.136719 L 64.300781 217.761719 C 63.925781 217.957031 63.507812 218.101562 63.046875 218.199219 C 62.601562 218.308594 62.058594 218.367188 61.417969 218.367188 Z M 61.417969 218.367188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 68.789062 202.328125 L 68.789062 206.972656 C 68.789062 207.527344 68.753906 208.050781 68.683594 208.535156 L 68.808594 208.535156 C 69.171875 207.964844 69.65625 207.535156 70.269531 207.242188 C 70.898438 206.953125 71.570312 206.804688 72.296875 206.804688 C 73.660156 206.804688 74.683594 207.132812 75.363281 207.785156 C 76.046875 208.425781 76.386719 209.457031 76.386719 210.886719 L 76.386719 218.15625 L 74.570312 218.15625 L 74.570312 211.011719 C 74.570312 209.222656 73.734375 208.328125 72.066406 208.328125 C 70.8125 208.328125 69.949219 208.679688 69.476562 209.390625 C 69.019531 210.082031 68.789062 211.082031 68.789062 212.386719 L 68.789062 218.15625 L 66.953125 218.15625 L 66.953125 202.328125 Z M 68.789062 202.328125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 86.21875 202.808594 C 86.496094 202.808594 86.738281 202.90625 86.949219 203.097656 C 87.171875 203.28125 87.28125 203.570312 87.28125 203.972656 C 87.28125 204.363281 87.171875 204.65625 86.949219 204.847656 C 86.738281 205.042969 86.496094 205.140625 86.21875 205.140625 C 85.910156 205.140625 85.65625 205.042969 85.445312 204.847656 C 85.238281 204.65625 85.132812 204.363281 85.132812 203.972656 C 85.132812 203.570312 85.238281 203.28125 85.445312 203.097656 C 85.65625 202.90625 85.910156 202.808594 86.21875 202.808594 Z M 87.117188 206.992188 L 87.117188 218.15625 L 85.277344 218.15625 L 85.277344 206.992188 Z M 87.117188 206.992188 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 97.949219 215.074219 C 97.949219 216.15625 97.546875 216.976562 96.738281 217.53125 C 95.929688 218.085938 94.847656 218.367188 93.480469 218.367188 C 92.703125 218.367188 92.027344 218.304688 91.457031 218.179688 C 90.902344 218.054688 90.40625 217.878906 89.976562 217.65625 L 89.976562 215.992188 C 90.421875 216.214844 90.957031 216.421875 91.582031 216.617188 C 92.222656 216.796875 92.871094 216.886719 93.523438 216.886719 C 94.457031 216.886719 95.132812 216.742188 95.550781 216.449219 C 95.964844 216.144531 96.175781 215.742188 96.175781 215.242188 C 96.175781 214.964844 96.097656 214.714844 95.945312 214.492188 C 95.792969 214.269531 95.515625 214.046875 95.109375 213.824219 C 94.722656 213.601562 94.15625 213.351562 93.417969 213.074219 C 92.695312 212.796875 92.078125 212.519531 91.5625 212.242188 C 91.046875 211.964844 90.652344 211.632812 90.371094 211.242188 C 90.09375 210.855469 89.953125 210.355469 89.953125 209.742188 C 89.953125 208.800781 90.335938 208.070312 91.101562 207.554688 C 91.882812 207.042969 92.898438 206.785156 94.148438 206.785156 C 94.832031 206.785156 95.464844 206.855469 96.050781 206.992188 C 96.648438 207.117188 97.203125 207.300781 97.71875 207.535156 L 97.09375 208.992188 C 96.621094 208.800781 96.125 208.632812 95.613281 208.492188 C 95.097656 208.355469 94.566406 208.285156 94.023438 208.285156 C 93.273438 208.285156 92.695312 208.410156 92.292969 208.660156 C 91.902344 208.894531 91.707031 209.222656 91.707031 209.640625 C 91.707031 209.945312 91.796875 210.207031 91.980469 210.429688 C 92.160156 210.636719 92.460938 210.847656 92.878906 211.054688 C 93.308594 211.25 93.878906 211.484375 94.589844 211.761719 C 95.296875 212.027344 95.902344 212.296875 96.40625 212.574219 C 96.90625 212.851562 97.289062 213.191406 97.554688 213.597656 C 97.816406 213.984375 97.949219 214.476562 97.949219 215.074219 Z M 97.949219 215.074219 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 110.054688 206.785156 C 110.792969 206.785156 111.453125 206.925781 112.039062 207.203125 C 112.636719 207.480469 113.144531 207.902344 113.5625 208.472656 L 113.667969 208.472656 L 113.917969 206.992188 L 115.378906 206.992188 L 115.378906 218.34375 C 115.378906 219.941406 114.96875 221.140625 114.148438 221.949219 C 113.339844 222.753906 112.082031 223.15625 110.371094 223.15625 C 108.726562 223.15625 107.382812 222.917969 106.339844 222.449219 L 106.339844 220.761719 C 107.441406 221.34375 108.816406 221.636719 110.472656 221.636719 C 111.433594 221.636719 112.183594 221.351562 112.726562 220.78125 C 113.285156 220.226562 113.5625 219.460938 113.5625 218.492188 L 113.5625 218.054688 C 113.5625 217.886719 113.570312 217.648438 113.585938 217.34375 C 113.597656 217.027344 113.613281 216.804688 113.625 216.679688 L 113.542969 216.679688 C 112.789062 217.804688 111.636719 218.367188 110.078125 218.367188 C 108.628906 218.367188 107.496094 217.859375 106.675781 216.84375 C 105.867188 215.832031 105.464844 214.414062 105.464844 212.597656 C 105.464844 210.820312 105.867188 209.410156 106.675781 208.367188 C 107.496094 207.3125 108.621094 206.785156 110.054688 206.785156 Z M 110.308594 208.328125 C 109.375 208.328125 108.652344 208.703125 108.136719 209.453125 C 107.621094 210.1875 107.363281 211.242188 107.363281 212.617188 C 107.363281 213.992188 107.613281 215.046875 108.113281 215.78125 C 108.628906 216.503906 109.375 216.867188 110.347656 216.867188 C 111.476562 216.867188 112.296875 216.566406 112.8125 215.96875 C 113.328125 215.359375 113.585938 214.378906 113.585938 213.035156 L 113.585938 212.597656 C 113.585938 211.070312 113.320312 209.980469 112.789062 209.328125 C 112.261719 208.660156 111.433594 208.328125 110.308594 208.328125 Z M 110.308594 208.328125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 128.65625 212.554688 C 128.65625 214.402344 128.183594 215.832031 127.234375 216.84375 C 126.304688 217.859375 125.035156 218.367188 123.4375 218.367188 C 122.449219 218.367188 121.566406 218.144531 120.785156 217.699219 C 120.019531 217.242188 119.414062 216.582031 118.96875 215.71875 C 118.523438 214.84375 118.300781 213.789062 118.300781 212.554688 C 118.300781 210.707031 118.769531 209.285156 119.699219 208.285156 C 120.632812 207.285156 121.898438 206.785156 123.5 206.785156 C 124.515625 206.785156 125.40625 207.015625 126.171875 207.472656 C 126.949219 207.917969 127.554688 208.570312 127.988281 209.429688 C 128.433594 210.277344 128.65625 211.320312 128.65625 212.554688 Z M 120.199219 212.554688 C 120.199219 213.875 120.457031 214.921875 120.972656 215.699219 C 121.503906 216.464844 122.335938 216.84375 123.476562 216.84375 C 124.605469 216.84375 125.433594 216.464844 125.960938 215.699219 C 126.492188 214.921875 126.753906 213.875 126.753906 212.554688 C 126.753906 211.234375 126.492188 210.203125 125.960938 209.453125 C 125.433594 208.703125 124.597656 208.328125 123.457031 208.328125 C 122.316406 208.328125 121.488281 208.703125 120.972656 209.453125 C 120.457031 210.203125 120.199219 211.234375 120.199219 212.554688 Z M 120.199219 212.554688 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 141.285156 212.554688 C 141.285156 214.402344 140.8125 215.832031 139.863281 216.84375 C 138.933594 217.859375 137.664062 218.367188 136.066406 218.367188 C 135.078125 218.367188 134.195312 218.144531 133.414062 217.699219 C 132.648438 217.242188 132.042969 216.582031 131.597656 215.71875 C 131.152344 214.84375 130.929688 213.789062 130.929688 212.554688 C 130.929688 210.707031 131.398438 209.285156 132.328125 208.285156 C 133.261719 207.285156 134.527344 206.785156 136.128906 206.785156 C 137.144531 206.785156 138.035156 207.015625 138.800781 207.472656 C 139.578125 207.917969 140.183594 208.570312 140.617188 209.429688 C 141.0625 210.277344 141.285156 211.320312 141.285156 212.554688 Z M 132.828125 212.554688 C 132.828125 213.875 133.085938 214.921875 133.601562 215.699219 C 134.132812 216.464844 134.964844 216.84375 136.105469 216.84375 C 137.234375 216.84375 138.0625 216.464844 138.589844 215.699219 C 139.121094 214.921875 139.382812 213.875 139.382812 212.554688 C 139.382812 211.234375 139.121094 210.203125 138.589844 209.453125 C 138.0625 208.703125 137.226562 208.328125 136.085938 208.328125 C 134.945312 208.328125 134.117188 208.703125 133.601562 209.453125 C 133.085938 210.203125 132.828125 211.234375 132.828125 212.554688 Z M 132.828125 212.554688 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 148.152344 218.367188 C 146.761719 218.367188 145.648438 217.886719 144.8125 216.929688 C 143.976562 215.957031 143.558594 214.511719 143.558594 212.597656 C 143.558594 210.679688 143.976562 209.234375 144.8125 208.265625 C 145.660156 207.277344 146.78125 206.785156 148.171875 206.785156 C 149.035156 206.785156 149.738281 206.945312 150.28125 207.265625 C 150.835938 207.585938 151.289062 207.972656 151.636719 208.429688 L 151.761719 208.429688 C 151.75 208.25 151.722656 207.988281 151.679688 207.640625 C 151.652344 207.277344 151.636719 206.992188 151.636719 206.785156 L 151.636719 202.328125 L 153.472656 202.328125 L 153.472656 218.15625 L 151.992188 218.15625 L 151.722656 216.65625 L 151.636719 216.65625 C 151.304688 217.128906 150.859375 217.53125 150.300781 217.867188 C 149.746094 218.199219 149.027344 218.367188 148.152344 218.367188 Z M 148.445312 216.84375 C 149.625 216.84375 150.453125 216.527344 150.925781 215.886719 C 151.414062 215.234375 151.660156 214.253906 151.660156 212.949219 L 151.660156 212.617188 C 151.660156 211.230469 151.429688 210.167969 150.96875 209.429688 C 150.511719 208.679688 149.660156 208.304688 148.421875 208.304688 C 147.433594 208.304688 146.691406 208.703125 146.1875 209.492188 C 145.703125 210.269531 145.457031 211.320312 145.457031 212.636719 C 145.457031 213.972656 145.703125 215.003906 146.1875 215.742188 C 146.691406 216.476562 147.441406 216.84375 148.445312 216.84375 Z M 148.445312 216.84375 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 156.75 217.03125 C 156.75 216.519531 156.875 216.15625 157.128906 215.949219 C 157.378906 215.742188 157.675781 215.636719 158.023438 215.636719 C 158.386719 215.636719 158.691406 215.742188 158.941406 215.949219 C 159.207031 216.15625 159.339844 216.519531 159.339844 217.03125 C 159.339844 217.53125 159.207031 217.894531 158.941406 218.117188 C 158.691406 218.335938 158.386719 218.449219 158.023438 218.449219 C 157.675781 218.449219 157.378906 218.335938 157.128906 218.117188 C 156.875 217.894531 156.75 217.53125 156.75 217.03125 Z M 156.75 217.03125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.683594 270.222656 L 21.300781 270.222656 L 21.300781 269.140625 L 23.054688 268.746094 L 23.054688 256.851562 L 21.300781 256.4375 L 21.300781 255.355469 L 26.683594 255.355469 L 26.683594 256.4375 L 24.933594 256.851562 L 24.933594 268.746094 L 26.683594 269.140625 Z M 26.683594 270.222656 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.472656 260.476562 L 31.652344 260.476562 L 31.652344 270.222656 L 29.816406 270.222656 L 29.816406 260.476562 L 27.855469 260.476562 L 27.855469 259.621094 L 29.816406 259 L 29.816406 258.351562 C 29.816406 256.910156 30.136719 255.875 30.777344 255.25 C 31.417969 254.609375 32.308594 254.292969 33.449219 254.292969 C 33.894531 254.292969 34.296875 254.332031 34.660156 254.417969 C 35.035156 254.484375 35.355469 254.570312 35.621094 254.667969 L 35.140625 256.101562 C 34.917969 256.035156 34.660156 255.964844 34.367188 255.894531 C 34.074219 255.824219 33.777344 255.789062 33.46875 255.789062 C 32.855469 255.789062 32.398438 256 32.09375 256.414062 C 31.800781 256.820312 31.652344 257.457031 31.652344 258.332031 L 31.652344 259.0625 L 34.472656 259.0625 Z M 34.472656 260.476562 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 40.171875 259.0625 L 42.132812 259.0625 L 44.554688 265.414062 C 44.761719 265.96875 44.949219 266.503906 45.117188 267.015625 C 45.285156 267.515625 45.410156 267.996094 45.492188 268.453125 L 45.578125 268.453125 C 45.660156 268.105469 45.792969 267.65625 45.972656 267.101562 C 46.152344 266.53125 46.34375 265.960938 46.535156 265.390625 L 48.8125 259.0625 L 50.796875 259.0625 L 45.972656 271.765625 C 45.582031 272.820312 45.074219 273.660156 44.449219 274.285156 C 43.835938 274.910156 42.988281 275.222656 41.902344 275.222656 C 41.570312 275.222656 41.277344 275.203125 41.027344 275.160156 C 40.777344 275.132812 40.558594 275.097656 40.378906 275.054688 L 40.378906 273.597656 C 40.53125 273.625 40.710938 273.652344 40.921875 273.679688 C 41.144531 273.707031 41.375 273.722656 41.609375 273.722656 C 42.25 273.722656 42.765625 273.542969 43.15625 273.179688 C 43.558594 272.820312 43.871094 272.339844 44.09375 271.746094 L 44.679688 270.265625 Z M 40.171875 259.0625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 62.296875 264.621094 C 62.296875 266.46875 61.824219 267.898438 60.878906 268.910156 C 59.945312 269.925781 58.679688 270.433594 57.078125 270.433594 C 56.089844 270.433594 55.207031 270.210938 54.425781 269.765625 C 53.660156 269.308594 53.054688 268.648438 52.609375 267.789062 C 52.164062 266.914062 51.941406 265.855469 51.941406 264.621094 C 51.941406 262.773438 52.410156 261.351562 53.339844 260.351562 C 54.273438 259.351562 55.539062 258.851562 57.140625 258.851562 C 58.15625 258.851562 59.046875 259.082031 59.8125 259.539062 C 60.59375 259.984375 61.195312 260.636719 61.628906 261.496094 C 62.074219 262.34375 62.296875 263.386719 62.296875 264.621094 Z M 53.84375 264.621094 C 53.84375 265.941406 54.101562 266.988281 54.613281 267.765625 C 55.144531 268.53125 55.980469 268.910156 57.121094 268.910156 C 58.246094 268.910156 59.074219 268.53125 59.605469 267.765625 C 60.132812 266.988281 60.398438 265.941406 60.398438 264.621094 C 60.398438 263.300781 60.132812 262.269531 59.605469 261.519531 C 59.074219 260.769531 58.238281 260.394531 57.097656 260.394531 C 55.957031 260.394531 55.128906 260.769531 54.613281 261.519531 C 54.101562 262.269531 53.84375 263.300781 53.84375 264.621094 Z M 53.84375 264.621094 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 74.550781 259.0625 L 74.550781 270.222656 L 73.046875 270.222656 L 72.773438 268.746094 L 72.691406 268.746094 C 72.328125 269.328125 71.828125 269.757812 71.1875 270.035156 C 70.546875 270.300781 69.867188 270.433594 69.144531 270.433594 C 67.792969 270.433594 66.777344 270.113281 66.09375 269.472656 C 65.414062 268.820312 65.074219 267.789062 65.074219 266.371094 L 65.074219 259.0625 L 66.929688 259.0625 L 66.929688 266.246094 C 66.929688 268.023438 67.757812 268.910156 69.414062 268.910156 C 70.652344 268.910156 71.507812 268.566406 71.980469 267.871094 C 72.46875 267.175781 72.710938 266.175781 72.710938 264.871094 L 72.710938 259.0625 Z M 74.550781 259.0625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 92.667969 270.203125 L 90.746094 263.914062 C 90.566406 263.34375 90.40625 262.789062 90.269531 262.246094 C 90.140625 261.691406 90.046875 261.261719 89.976562 260.957031 L 89.890625 260.957031 C 89.835938 261.261719 89.746094 261.691406 89.621094 262.246094 C 89.496094 262.789062 89.335938 263.351562 89.140625 263.933594 L 87.136719 270.203125 L 85.050781 270.203125 L 81.980469 259.039062 L 83.878906 259.039062 L 85.425781 264.996094 C 85.578125 265.59375 85.722656 266.199219 85.863281 266.808594 C 86.003906 267.417969 86.101562 267.925781 86.15625 268.328125 L 86.238281 268.328125 C 86.292969 268.09375 86.355469 267.800781 86.425781 267.453125 C 86.511719 267.105469 86.601562 266.746094 86.699219 266.371094 C 86.796875 265.980469 86.894531 265.636719 86.992188 265.328125 L 88.972656 259.039062 L 90.976562 259.039062 L 92.898438 265.328125 C 93.050781 265.800781 93.195312 266.316406 93.335938 266.871094 C 93.488281 267.425781 93.59375 267.90625 93.648438 268.308594 L 93.734375 268.308594 C 93.773438 267.960938 93.863281 267.480469 94.003906 266.871094 C 94.15625 266.261719 94.316406 265.636719 94.484375 264.996094 L 96.050781 259.039062 L 97.929688 259.039062 L 94.816406 270.203125 Z M 92.667969 270.203125 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 104.167969 258.875 C 105.535156 258.875 106.542969 259.171875 107.195312 259.769531 C 107.851562 260.367188 108.175781 261.316406 108.175781 262.621094 L 108.175781 270.222656 L 106.839844 270.222656 L 106.488281 268.640625 L 106.402344 268.640625 C 105.917969 269.25 105.402344 269.703125 104.859375 269.996094 C 104.328125 270.285156 103.59375 270.433594 102.644531 270.433594 C 101.628906 270.433594 100.789062 270.167969 100.121094 269.640625 C 99.453125 269.097656 99.117188 268.257812 99.117188 267.121094 C 99.117188 266.011719 99.558594 265.15625 100.433594 264.558594 C 101.308594 263.949219 102.660156 263.613281 104.484375 263.558594 L 106.382812 263.496094 L 106.382812 262.832031 C 106.382812 261.898438 106.179688 261.253906 105.777344 260.894531 C 105.375 260.53125 104.804688 260.351562 104.066406 260.351562 C 103.480469 260.351562 102.925781 260.441406 102.394531 260.621094 C 101.867188 260.789062 101.371094 260.984375 100.914062 261.207031 L 100.351562 259.832031 C 100.835938 259.566406 101.414062 259.34375 102.082031 259.164062 C 102.75 258.96875 103.445312 258.875 104.167969 258.875 Z M 106.363281 264.765625 L 104.710938 264.828125 C 103.320312 264.886719 102.355469 265.105469 101.8125 265.496094 C 101.28125 265.886719 101.019531 266.433594 101.019531 267.140625 C 101.019531 267.765625 101.207031 268.222656 101.582031 268.515625 C 101.972656 268.808594 102.464844 268.953125 103.0625 268.953125 C 104.011719 268.953125 104.796875 268.695312 105.421875 268.183594 C 106.046875 267.65625 106.363281 266.851562 106.363281 265.765625 Z M 106.363281 264.765625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 117.027344 258.851562 C 118.363281 258.851562 119.375 259.179688 120.054688 259.832031 C 120.738281 260.46875 121.078125 261.511719 121.078125 262.957031 L 121.078125 270.222656 L 119.261719 270.222656 L 119.261719 263.082031 C 119.261719 261.289062 118.425781 260.394531 116.757812 260.394531 C 115.519531 260.394531 114.664062 260.742188 114.1875 261.433594 C 113.714844 262.128906 113.480469 263.128906 113.480469 264.433594 L 113.480469 270.222656 L 111.644531 270.222656 L 111.644531 259.0625 L 113.125 259.0625 L 113.394531 260.582031 L 113.5 260.582031 C 113.863281 259.996094 114.363281 259.566406 115.003906 259.289062 C 115.644531 259 116.320312 258.851562 117.027344 258.851562 Z M 117.027344 258.851562 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 128.28125 268.933594 C 128.558594 268.933594 128.84375 268.910156 129.136719 268.871094 C 129.425781 268.816406 129.664062 268.757812 129.84375 268.703125 L 129.84375 270.097656 C 129.648438 270.195312 129.371094 270.273438 129.011719 270.328125 C 128.648438 270.398438 128.300781 270.433594 127.964844 270.433594 C 127.382812 270.433594 126.839844 270.335938 126.339844 270.140625 C 125.851562 269.933594 125.453125 269.578125 125.148438 269.078125 C 124.84375 268.578125 124.6875 267.878906 124.6875 266.976562 L 124.6875 260.476562 L 123.101562 260.476562 L 123.101562 259.601562 L 124.710938 258.875 L 125.441406 256.5 L 126.527344 256.5 L 126.527344 259.0625 L 129.761719 259.0625 L 129.761719 260.476562 L 126.527344 260.476562 L 126.527344 266.933594 C 126.527344 267.613281 126.6875 268.121094 127.007812 268.453125 C 127.339844 268.773438 127.765625 268.933594 128.28125 268.933594 Z M 128.28125 268.933594 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 141.242188 268.933594 C 141.519531 268.933594 141.804688 268.910156 142.097656 268.871094 C 142.390625 268.816406 142.625 268.757812 142.808594 268.703125 L 142.808594 270.097656 C 142.613281 270.195312 142.335938 270.273438 141.972656 270.328125 C 141.609375 270.398438 141.261719 270.433594 140.929688 270.433594 C 140.34375 270.433594 139.800781 270.335938 139.300781 270.140625 C 138.8125 269.933594 138.417969 269.578125 138.109375 269.078125 C 137.804688 268.578125 137.652344 267.878906 137.652344 266.976562 L 137.652344 260.476562 L 136.066406 260.476562 L 136.066406 259.601562 L 137.671875 258.875 L 138.402344 256.5 L 139.488281 256.5 L 139.488281 259.0625 L 142.722656 259.0625 L 142.722656 260.476562 L 139.488281 260.476562 L 139.488281 266.933594 C 139.488281 267.613281 139.648438 268.121094 139.96875 268.453125 C 140.300781 268.773438 140.726562 268.933594 141.242188 268.933594 Z M 141.242188 268.933594 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 154.769531 264.621094 C 154.769531 266.46875 154.296875 267.898438 153.347656 268.910156 C 152.417969 269.925781 151.148438 270.433594 149.550781 270.433594 C 148.5625 270.433594 147.679688 270.210938 146.898438 269.765625 C 146.132812 269.308594 145.527344 268.648438 145.082031 267.789062 C 144.636719 266.914062 144.414062 265.855469 144.414062 264.621094 C 144.414062 262.773438 144.882812 261.351562 145.8125 260.351562 C 146.746094 259.351562 148.011719 258.851562 149.613281 258.851562 C 150.628906 258.851562 151.519531 259.082031 152.285156 259.539062 C 153.0625 259.984375 153.667969 260.636719 154.101562 261.496094 C 154.546875 262.34375 154.769531 263.386719 154.769531 264.621094 Z M 146.3125 264.621094 C 146.3125 265.941406 146.570312 266.988281 147.085938 267.765625 C 147.617188 268.53125 148.449219 268.910156 149.589844 268.910156 C 150.71875 268.910156 151.546875 268.53125 152.074219 267.765625 C 152.605469 266.988281 152.867188 265.941406 152.867188 264.621094 C 152.867188 263.300781 152.605469 262.269531 152.074219 261.519531 C 151.546875 260.769531 150.710938 260.394531 149.570312 260.394531 C 148.429688 260.394531 147.601562 260.769531 147.085938 261.519531 C 146.570312 262.269531 146.3125 263.300781 146.3125 264.621094 Z M 146.3125 264.621094 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 170.382812 267.140625 C 170.382812 268.222656 169.980469 269.042969 169.171875 269.597656 C 168.363281 270.15625 167.277344 270.433594 165.914062 270.433594 C 165.136719 270.433594 164.460938 270.371094 163.890625 270.246094 C 163.332031 270.121094 162.839844 269.945312 162.410156 269.722656 L 162.410156 268.058594 C 162.855469 268.28125 163.390625 268.488281 164.015625 268.683594 C 164.65625 268.863281 165.304688 268.953125 165.957031 268.953125 C 166.890625 268.953125 167.5625 268.808594 167.980469 268.515625 C 168.398438 268.210938 168.609375 267.808594 168.609375 267.308594 C 168.609375 267.03125 168.53125 266.78125 168.378906 266.558594 C 168.226562 266.335938 167.945312 266.113281 167.542969 265.890625 C 167.152344 265.667969 166.589844 265.417969 165.851562 265.140625 C 165.128906 264.863281 164.507812 264.585938 163.996094 264.308594 C 163.480469 264.03125 163.082031 263.699219 162.804688 263.308594 C 162.527344 262.921875 162.386719 262.421875 162.386719 261.808594 C 162.386719 260.867188 162.769531 260.136719 163.535156 259.621094 C 164.316406 259.109375 165.332031 258.851562 166.582031 258.851562 C 167.265625 258.851562 167.898438 258.921875 168.484375 259.0625 C 169.082031 259.1875 169.636719 259.367188 170.152344 259.601562 L 169.527344 261.058594 C 169.054688 260.867188 168.558594 260.699219 168.042969 260.558594 C 167.53125 260.421875 167 260.351562 166.457031 260.351562 C 165.707031 260.351562 165.128906 260.476562 164.726562 260.726562 C 164.335938 260.964844 164.140625 261.289062 164.140625 261.707031 C 164.140625 262.011719 164.230469 262.273438 164.414062 262.496094 C 164.59375 262.707031 164.890625 262.914062 165.308594 263.121094 C 165.742188 263.316406 166.3125 263.550781 167.019531 263.828125 C 167.730469 264.09375 168.335938 264.363281 168.835938 264.640625 C 169.339844 264.921875 169.722656 265.261719 169.984375 265.664062 C 170.25 266.050781 170.382812 266.542969 170.382812 267.140625 Z M 170.382812 267.140625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 177.417969 258.851562 C 178.375 258.851562 179.199219 259.0625 179.878906 259.476562 C 180.574219 259.894531 181.105469 260.484375 181.464844 261.246094 C 181.84375 261.996094 182.03125 262.878906 182.03125 263.890625 L 182.03125 264.996094 L 174.367188 264.996094 C 174.398438 266.261719 174.71875 267.226562 175.328125 267.890625 C 175.957031 268.542969 176.824219 268.871094 177.9375 268.871094 C 178.648438 268.871094 179.273438 268.808594 179.816406 268.683594 C 180.375 268.542969 180.945312 268.347656 181.527344 268.097656 L 181.527344 269.703125 C 180.957031 269.953125 180.394531 270.132812 179.839844 270.246094 C 179.28125 270.371094 178.621094 270.433594 177.855469 270.433594 C 176.796875 270.433594 175.859375 270.21875 175.035156 269.785156 C 174.230469 269.355469 173.597656 268.71875 173.136719 267.871094 C 172.691406 267.007812 172.46875 265.960938 172.46875 264.726562 C 172.46875 263.503906 172.671875 262.457031 173.074219 261.582031 C 173.492188 260.707031 174.070312 260.03125 174.808594 259.5625 C 175.558594 259.089844 176.429688 258.851562 177.417969 258.851562 Z M 177.394531 260.351562 C 176.519531 260.351562 175.824219 260.636719 175.308594 261.207031 C 174.808594 261.761719 174.507812 262.539062 174.410156 263.539062 L 180.109375 263.539062 C 180.09375 262.59375 179.871094 261.832031 179.441406 261.246094 C 179.011719 260.652344 178.328125 260.351562 177.394531 260.351562 Z M 177.394531 260.351562 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 189.191406 258.851562 C 190.148438 258.851562 190.972656 259.0625 191.652344 259.476562 C 192.347656 259.894531 192.878906 260.484375 193.238281 261.246094 C 193.613281 261.996094 193.804688 262.878906 193.804688 263.890625 L 193.804688 264.996094 L 186.140625 264.996094 C 186.167969 266.261719 186.488281 267.226562 187.101562 267.890625 C 187.726562 268.542969 188.597656 268.871094 189.710938 268.871094 C 190.421875 268.871094 191.046875 268.808594 191.589844 268.683594 C 192.148438 268.542969 192.71875 268.347656 193.300781 268.097656 L 193.300781 269.703125 C 192.730469 269.953125 192.167969 270.132812 191.609375 270.246094 C 191.054688 270.371094 190.394531 270.433594 189.628906 270.433594 C 188.570312 270.433594 187.632812 270.21875 186.808594 269.785156 C 186.003906 269.355469 185.371094 268.71875 184.910156 267.871094 C 184.464844 267.007812 184.242188 265.960938 184.242188 264.726562 C 184.242188 263.503906 184.445312 262.457031 184.847656 261.582031 C 185.265625 260.707031 185.84375 260.03125 186.582031 259.5625 C 187.332031 259.089844 188.203125 258.851562 189.191406 258.851562 Z M 189.167969 260.351562 C 188.292969 260.351562 187.597656 260.636719 187.082031 261.207031 C 186.582031 261.761719 186.28125 262.539062 186.183594 263.539062 L 191.882812 263.539062 C 191.867188 262.59375 191.644531 261.832031 191.214844 261.246094 C 190.78125 260.652344 190.101562 260.351562 189.167969 260.351562 Z M 189.167969 260.351562 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 205.804688 268.933594 C 206.082031 268.933594 206.367188 268.910156 206.660156 268.871094 C 206.953125 268.816406 207.191406 268.757812 207.371094 268.703125 L 207.371094 270.097656 C 207.175781 270.195312 206.898438 270.273438 206.535156 270.328125 C 206.175781 270.398438 205.828125 270.433594 205.492188 270.433594 C 204.90625 270.433594 204.363281 270.335938 203.863281 270.140625 C 203.378906 269.933594 202.980469 269.578125 202.675781 269.078125 C 202.367188 268.578125 202.214844 267.878906 202.214844 266.976562 L 202.214844 260.476562 L 200.628906 260.476562 L 200.628906 259.601562 L 202.234375 258.875 L 202.964844 256.5 L 204.050781 256.5 L 204.050781 259.0625 L 207.289062 259.0625 L 207.289062 260.476562 L 204.050781 260.476562 L 204.050781 266.933594 C 204.050781 267.613281 204.210938 268.121094 204.53125 268.453125 C 204.867188 268.773438 205.289062 268.933594 205.804688 268.933594 Z M 205.804688 268.933594 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.441406 254.394531 L 211.441406 259.039062 C 211.441406 259.59375 211.40625 260.117188 211.335938 260.601562 L 211.460938 260.601562 C 211.824219 260.03125 212.3125 259.601562 212.921875 259.3125 C 213.550781 259.019531 214.222656 258.875 214.949219 258.875 C 216.3125 258.875 217.335938 259.199219 218.015625 259.851562 C 218.699219 260.492188 219.039062 261.523438 219.039062 262.957031 L 219.039062 270.222656 L 217.222656 270.222656 L 217.222656 263.082031 C 217.222656 261.289062 216.386719 260.394531 214.71875 260.394531 C 213.464844 260.394531 212.601562 260.746094 212.128906 261.457031 C 211.671875 262.148438 211.441406 263.148438 211.441406 264.453125 L 211.441406 270.222656 L 209.605469 270.222656 L 209.605469 254.394531 Z M 211.441406 254.394531 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 223.445312 254.875 C 223.722656 254.875 223.964844 254.972656 224.175781 255.167969 C 224.398438 255.347656 224.507812 255.636719 224.507812 256.039062 C 224.507812 256.429688 224.398438 256.722656 224.175781 256.914062 C 223.964844 257.109375 223.722656 257.207031 223.445312 257.207031 C 223.136719 257.207031 222.878906 257.109375 222.671875 256.914062 C 222.460938 256.722656 222.359375 256.429688 222.359375 256.039062 C 222.359375 255.636719 222.460938 255.347656 222.671875 255.167969 C 222.878906 254.972656 223.136719 254.875 223.445312 254.875 Z M 224.339844 259.0625 L 224.339844 270.222656 L 222.503906 270.222656 L 222.503906 259.0625 Z M 224.339844 259.0625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 235.175781 267.140625 C 235.175781 268.222656 234.773438 269.042969 233.964844 269.597656 C 233.15625 270.15625 232.070312 270.433594 230.707031 270.433594 C 229.929688 270.433594 229.253906 270.371094 228.683594 270.246094 C 228.125 270.121094 227.632812 269.945312 227.199219 269.722656 L 227.199219 268.058594 C 227.644531 268.28125 228.183594 268.488281 228.808594 268.683594 C 229.449219 268.863281 230.097656 268.953125 230.75 268.953125 C 231.683594 268.953125 232.355469 268.808594 232.773438 268.515625 C 233.191406 268.210938 233.402344 267.808594 233.402344 267.308594 C 233.402344 267.03125 233.324219 266.78125 233.171875 266.558594 C 233.019531 266.335938 232.738281 266.113281 232.335938 265.890625 C 231.945312 265.667969 231.382812 265.417969 230.644531 265.140625 C 229.921875 264.863281 229.300781 264.585938 228.789062 264.308594 C 228.273438 264.03125 227.875 263.699219 227.597656 263.308594 C 227.320312 262.921875 227.179688 262.421875 227.179688 261.808594 C 227.179688 260.867188 227.5625 260.136719 228.328125 259.621094 C 229.109375 259.109375 230.125 258.851562 231.375 258.851562 C 232.058594 258.851562 232.691406 258.921875 233.277344 259.0625 C 233.875 259.1875 234.429688 259.367188 234.945312 259.601562 L 234.320312 261.058594 C 233.847656 260.867188 233.351562 260.699219 232.835938 260.558594 C 232.324219 260.421875 231.792969 260.351562 231.25 260.351562 C 230.5 260.351562 229.921875 260.476562 229.519531 260.726562 C 229.128906 260.964844 228.933594 261.289062 228.933594 261.707031 C 228.933594 262.011719 229.023438 262.273438 229.203125 262.496094 C 229.386719 262.707031 229.683594 262.914062 230.101562 263.121094 C 230.535156 263.316406 231.105469 263.550781 231.8125 263.828125 C 232.523438 264.09375 233.128906 264.363281 233.628906 264.640625 C 234.132812 264.921875 234.515625 265.261719 234.777344 265.664062 C 235.042969 266.050781 235.175781 266.542969 235.175781 267.140625 Z M 235.175781 267.140625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 244.253906 254.875 C 244.535156 254.875 244.777344 254.972656 244.984375 255.167969 C 245.207031 255.347656 245.320312 255.636719 245.320312 256.039062 C 245.320312 256.429688 245.207031 256.722656 244.984375 256.914062 C 244.777344 257.109375 244.535156 257.207031 244.253906 257.207031 C 243.949219 257.207031 243.691406 257.109375 243.484375 256.914062 C 243.273438 256.722656 243.167969 256.429688 243.167969 256.039062 C 243.167969 255.636719 243.273438 255.347656 243.484375 255.167969 C 243.691406 254.972656 243.949219 254.875 244.253906 254.875 Z M 245.152344 259.0625 L 245.152344 270.222656 L 243.316406 270.222656 L 243.316406 259.0625 Z M 245.152344 259.0625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 260.976562 258.851562 C 262.242188 258.851562 263.1875 259.179688 263.8125 259.832031 C 264.441406 260.46875 264.753906 261.511719 264.753906 262.957031 L 264.753906 270.222656 L 262.9375 270.222656 L 262.9375 263.039062 C 262.9375 261.273438 262.179688 260.394531 260.664062 260.394531 C 259.578125 260.394531 258.796875 260.707031 258.324219 261.332031 C 257.863281 261.957031 257.636719 262.863281 257.636719 264.058594 L 257.636719 270.222656 L 255.820312 270.222656 L 255.820312 263.039062 C 255.820312 261.273438 255.054688 260.394531 253.523438 260.394531 C 252.394531 260.394531 251.617188 260.742188 251.183594 261.433594 C 250.753906 262.128906 250.539062 263.128906 250.539062 264.433594 L 250.539062 270.222656 L 248.703125 270.222656 L 248.703125 259.0625 L 250.183594 259.0625 L 250.453125 260.582031 L 250.558594 260.582031 C 250.90625 259.996094 251.375 259.566406 251.957031 259.289062 C 252.554688 259 253.1875 258.851562 253.855469 258.851562 C 255.609375 258.851562 256.75 259.476562 257.28125 260.726562 L 257.386719 260.726562 C 257.761719 260.089844 258.269531 259.617188 258.910156 259.3125 C 259.5625 259.003906 260.25 258.851562 260.976562 258.851562 Z M 260.976562 258.851562 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 272.457031 258.875 C 273.820312 258.875 274.828125 259.171875 275.484375 259.769531 C 276.136719 260.367188 276.464844 261.316406 276.464844 262.621094 L 276.464844 270.222656 L 275.128906 270.222656 L 274.773438 268.640625 L 274.691406 268.640625 C 274.203125 269.25 273.6875 269.703125 273.144531 269.996094 C 272.617188 270.285156 271.878906 270.433594 270.933594 270.433594 C 269.917969 270.433594 269.074219 270.167969 268.40625 269.640625 C 267.738281 269.097656 267.40625 268.257812 267.40625 267.121094 C 267.40625 266.011719 267.84375 265.15625 268.71875 264.558594 C 269.597656 263.949219 270.945312 263.613281 272.769531 263.558594 L 274.667969 263.496094 L 274.667969 262.832031 C 274.667969 261.898438 274.46875 261.253906 274.0625 260.894531 C 273.660156 260.53125 273.089844 260.351562 272.351562 260.351562 C 271.765625 260.351562 271.210938 260.441406 270.683594 260.621094 C 270.152344 260.789062 269.660156 260.984375 269.199219 261.207031 L 268.636719 259.832031 C 269.125 259.566406 269.699219 259.34375 270.367188 259.164062 C 271.035156 258.96875 271.730469 258.875 272.457031 258.875 Z M 274.648438 264.765625 L 273 264.828125 C 271.605469 264.886719 270.640625 265.105469 270.097656 265.496094 C 269.570312 265.886719 269.304688 266.433594 269.304688 267.140625 C 269.304688 267.765625 269.492188 268.222656 269.867188 268.515625 C 270.257812 268.808594 270.75 268.953125 271.351562 268.953125 C 272.296875 268.953125 273.082031 268.695312 273.707031 268.183594 C 274.335938 267.65625 274.648438 266.851562 274.648438 265.765625 Z M 274.648438 264.765625 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 283.894531 258.851562 C 284.632812 258.851562 285.292969 258.992188 285.878906 259.269531 C 286.476562 259.546875 286.984375 259.96875 287.402344 260.539062 L 287.507812 260.539062 L 287.757812 259.0625 L 289.21875 259.0625 L 289.21875 270.410156 C 289.21875 272.007812 288.808594 273.210938 287.984375 274.015625 C 287.179688 274.820312 285.917969 275.222656 284.207031 275.222656 C 282.566406 275.222656 281.222656 274.984375 280.179688 274.515625 L 280.179688 272.828125 C 281.277344 273.410156 282.65625 273.703125 284.3125 273.703125 C 285.273438 273.703125 286.023438 273.417969 286.566406 272.847656 C 287.125 272.292969 287.402344 271.527344 287.402344 270.558594 L 287.402344 270.121094 C 287.402344 269.953125 287.410156 269.71875 287.421875 269.410156 C 287.4375 269.09375 287.449219 268.871094 287.464844 268.746094 L 287.382812 268.746094 C 286.628906 269.871094 285.472656 270.433594 283.914062 270.433594 C 282.46875 270.433594 281.335938 269.925781 280.511719 268.910156 C 279.707031 267.898438 279.300781 266.480469 279.300781 264.664062 C 279.300781 262.886719 279.707031 261.476562 280.511719 260.433594 C 281.335938 259.378906 282.460938 258.851562 283.894531 258.851562 Z M 284.144531 260.394531 C 283.214844 260.394531 282.488281 260.769531 281.972656 261.519531 C 281.460938 262.253906 281.203125 263.308594 281.203125 264.683594 C 281.203125 266.058594 281.453125 267.113281 281.953125 267.847656 C 282.46875 268.570312 283.214844 268.933594 284.1875 268.933594 C 285.3125 268.933594 286.136719 268.632812 286.648438 268.035156 C 287.164062 267.425781 287.421875 266.449219 287.421875 265.101562 L 287.421875 264.664062 C 287.421875 263.136719 287.160156 262.046875 286.628906 261.394531 C 286.101562 260.726562 285.273438 260.394531 284.144531 260.394531 Z M 284.144531 260.394531 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 297.085938 258.851562 C 298.046875 258.851562 298.867188 259.0625 299.550781 259.476562 C 300.246094 259.894531 300.773438 260.484375 301.136719 261.246094 C 301.511719 261.996094 301.699219 262.878906 301.699219 263.890625 L 301.699219 264.996094 L 294.039062 264.996094 C 294.066406 266.261719 294.386719 267.226562 295 267.890625 C 295.625 268.542969 296.496094 268.871094 297.609375 268.871094 C 298.320312 268.871094 298.945312 268.808594 299.488281 268.683594 C 300.042969 268.542969 300.613281 268.347656 301.199219 268.097656 L 301.199219 269.703125 C 300.628906 269.953125 300.066406 270.132812 299.507812 270.246094 C 298.953125 270.371094 298.292969 270.433594 297.527344 270.433594 C 296.46875 270.433594 295.527344 270.21875 294.707031 269.785156 C 293.902344 269.355469 293.265625 268.71875 292.808594 267.871094 C 292.363281 267.007812 292.140625 265.960938 292.140625 264.726562 C 292.140625 263.503906 292.34375 262.457031 292.746094 261.582031 C 293.164062 260.707031 293.742188 260.03125 294.476562 259.5625 C 295.230469 259.089844 296.097656 258.851562 297.085938 258.851562 Z M 297.066406 260.351562 C 296.191406 260.351562 295.492188 260.636719 294.980469 261.207031 C 294.476562 261.761719 294.179688 262.539062 294.082031 263.539062 L 299.78125 263.539062 C 299.765625 262.59375 299.542969 261.832031 299.113281 261.246094 C 298.679688 260.652344 298 260.351562 297.066406 260.351562 Z M 297.066406 260.351562 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 306.625 267.808594 L 306.773438 268.035156 C 306.59375 268.773438 306.328125 269.578125 305.980469 270.453125 C 305.644531 271.339844 305.3125 272.160156 304.976562 272.910156 L 303.621094 272.910156 C 303.816406 272.117188 304.011719 271.25 304.207031 270.308594 C 304.414062 269.363281 304.566406 268.53125 304.664062 267.808594 Z M 306.625 267.808594 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 26.207031 296.464844 C 24.8125 296.464844 23.699219 295.988281 22.867188 295.027344 C 22.03125 294.054688 21.613281 292.613281 21.613281 290.695312 C 21.613281 288.78125 22.03125 287.335938 22.867188 286.363281 C 23.714844 285.378906 24.835938 284.886719 26.226562 284.886719 C 27.089844 284.886719 27.792969 285.046875 28.335938 285.363281 C 28.890625 285.683594 29.34375 286.074219 29.691406 286.53125 L 29.816406 286.53125 C 29.800781 286.351562 29.773438 286.085938 29.734375 285.738281 C 29.707031 285.378906 29.691406 285.09375 29.691406 284.886719 L 29.691406 280.429688 L 31.527344 280.429688 L 31.527344 296.257812 L 30.046875 296.257812 L 29.773438 294.757812 L 29.691406 294.757812 C 29.355469 295.230469 28.910156 295.632812 28.355469 295.964844 C 27.796875 296.300781 27.082031 296.464844 26.207031 296.464844 Z M 26.496094 294.945312 C 27.679688 294.945312 28.507812 294.625 28.980469 293.988281 C 29.46875 293.335938 29.710938 292.355469 29.710938 291.050781 L 29.710938 290.71875 C 29.710938 289.328125 29.484375 288.265625 29.023438 287.53125 C 28.5625 286.78125 27.714844 286.40625 26.476562 286.40625 C 25.488281 286.40625 24.746094 286.800781 24.242188 287.59375 C 23.757812 288.371094 23.511719 289.417969 23.511719 290.738281 C 23.511719 292.070312 23.757812 293.105469 24.242188 293.839844 C 24.746094 294.578125 25.496094 294.945312 26.496094 294.945312 Z M 26.496094 294.945312 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 36.015625 280.90625 C 36.292969 280.90625 36.539062 281.003906 36.746094 281.199219 C 36.96875 281.378906 37.082031 281.671875 37.082031 282.074219 C 37.082031 282.464844 36.96875 282.753906 36.746094 282.949219 C 36.539062 283.144531 36.292969 283.242188 36.015625 283.242188 C 35.710938 283.242188 35.453125 283.144531 35.242188 282.949219 C 35.035156 282.753906 34.929688 282.464844 34.929688 282.074219 C 34.929688 281.671875 35.035156 281.378906 35.242188 281.199219 C 35.453125 281.003906 35.710938 280.90625 36.015625 280.90625 Z M 36.914062 285.09375 L 36.914062 296.257812 L 35.078125 296.257812 L 35.078125 285.09375 Z M 36.914062 285.09375 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 47.746094 293.175781 C 47.746094 294.257812 47.34375 295.078125 46.535156 295.632812 C 45.730469 296.1875 44.644531 296.464844 43.28125 296.464844 C 42.5 296.464844 41.824219 296.402344 41.253906 296.277344 C 40.699219 296.152344 40.203125 295.980469 39.773438 295.757812 L 39.773438 294.089844 C 40.21875 294.3125 40.753906 294.523438 41.378906 294.714844 C 42.019531 294.898438 42.667969 294.988281 43.320312 294.988281 C 44.253906 294.988281 44.929688 294.839844 45.347656 294.550781 C 45.765625 294.242188 45.972656 293.839844 45.972656 293.339844 C 45.972656 293.0625 45.898438 292.8125 45.742188 292.589844 C 45.589844 292.371094 45.3125 292.148438 44.910156 291.925781 C 44.519531 291.703125 43.957031 291.453125 43.21875 291.175781 C 42.492188 290.898438 41.875 290.621094 41.359375 290.34375 C 40.84375 290.066406 40.449219 289.730469 40.171875 289.34375 C 39.890625 288.953125 39.753906 288.453125 39.753906 287.84375 C 39.753906 286.898438 40.136719 286.171875 40.902344 285.65625 C 41.679688 285.144531 42.695312 284.886719 43.949219 284.886719 C 44.628906 284.886719 45.261719 284.957031 45.847656 285.09375 C 46.445312 285.21875 47.003906 285.398438 47.519531 285.636719 L 46.890625 287.09375 C 46.417969 286.898438 45.925781 286.734375 45.410156 286.59375 C 44.894531 286.453125 44.367188 286.386719 43.824219 286.386719 C 43.070312 286.386719 42.492188 286.511719 42.089844 286.761719 C 41.699219 286.996094 41.507812 287.324219 41.507812 287.738281 C 41.507812 288.042969 41.597656 288.308594 41.777344 288.53125 C 41.957031 288.738281 42.257812 288.945312 42.675781 289.15625 C 43.105469 289.351562 43.675781 289.585938 44.386719 289.863281 C 45.097656 290.128906 45.703125 290.398438 46.203125 290.675781 C 46.703125 290.953125 47.085938 291.292969 47.351562 291.695312 C 47.617188 292.085938 47.746094 292.578125 47.746094 293.175781 Z M 47.746094 293.175781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 54.699219 284.90625 C 56.0625 284.90625 57.070312 285.207031 57.726562 285.800781 C 58.378906 286.398438 58.707031 287.351562 58.707031 288.65625 L 58.707031 296.257812 L 57.371094 296.257812 L 57.015625 294.675781 L 56.933594 294.675781 C 56.445312 295.285156 55.929688 295.738281 55.386719 296.027344 C 54.859375 296.320312 54.121094 296.464844 53.175781 296.464844 C 52.160156 296.464844 51.316406 296.203125 50.648438 295.675781 C 49.980469 295.132812 49.648438 294.292969 49.648438 293.152344 C 49.648438 292.042969 50.085938 291.1875 50.960938 290.59375 C 51.839844 289.980469 53.1875 289.648438 55.011719 289.59375 L 56.910156 289.53125 L 56.910156 288.863281 C 56.910156 287.933594 56.710938 287.289062 56.304688 286.925781 C 55.902344 286.566406 55.332031 286.386719 54.59375 286.386719 C 54.007812 286.386719 53.453125 286.476562 52.925781 286.65625 C 52.394531 286.824219 51.902344 287.015625 51.441406 287.238281 L 50.878906 285.863281 C 51.367188 285.601562 51.941406 285.378906 52.609375 285.199219 C 53.277344 285.003906 53.976562 284.90625 54.699219 284.90625 Z M 56.890625 290.800781 L 55.242188 290.863281 C 53.847656 290.917969 52.882812 291.140625 52.339844 291.53125 C 51.8125 291.917969 51.546875 292.464844 51.546875 293.175781 C 51.546875 293.800781 51.734375 294.257812 52.109375 294.550781 C 52.5 294.839844 52.992188 294.988281 53.59375 294.988281 C 54.539062 294.988281 55.324219 294.730469 55.949219 294.214844 C 56.578125 293.6875 56.890625 292.882812 56.890625 291.800781 Z M 56.890625 290.800781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 64.007812 280.429688 L 64.007812 284.28125 C 64.007812 284.753906 63.996094 285.199219 63.964844 285.613281 C 63.953125 286.015625 63.933594 286.335938 63.902344 286.574219 L 64.007812 286.574219 C 64.328125 286.101562 64.765625 285.703125 65.324219 285.386719 C 65.878906 285.066406 66.597656 284.90625 67.472656 284.90625 C 68.863281 284.90625 69.976562 285.394531 70.8125 286.363281 C 71.660156 287.324219 72.085938 288.757812 72.085938 290.675781 C 72.085938 292.589844 71.660156 294.035156 70.8125 295.007812 C 69.964844 295.980469 68.851562 296.464844 67.472656 296.464844 C 66.597656 296.464844 65.878906 296.304688 65.324219 295.988281 C 64.765625 295.667969 64.328125 295.285156 64.007812 294.839844 L 63.863281 294.839844 L 63.488281 296.257812 L 62.171875 296.257812 L 62.171875 280.429688 Z M 67.160156 286.425781 C 65.976562 286.425781 65.15625 286.765625 64.695312 287.449219 C 64.238281 288.128906 64.007812 289.183594 64.007812 290.613281 L 64.007812 290.695312 C 64.007812 292.070312 64.230469 293.125 64.675781 293.863281 C 65.136719 294.585938 65.976562 294.945312 67.203125 294.945312 C 68.203125 294.945312 68.949219 294.578125 69.433594 293.839844 C 69.9375 293.105469 70.1875 292.042969 70.1875 290.65625 C 70.1875 287.835938 69.179688 286.425781 67.160156 286.425781 Z M 67.160156 286.425781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 76.847656 296.257812 L 75.007812 296.257812 L 75.007812 280.429688 L 76.847656 280.429688 Z M 76.847656 296.257812 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 84.714844 284.886719 C 85.675781 284.886719 86.496094 285.09375 87.179688 285.511719 C 87.875 285.925781 88.402344 286.515625 88.765625 287.28125 C 89.140625 288.03125 89.328125 288.914062 89.328125 289.925781 L 89.328125 291.03125 L 81.667969 291.03125 C 81.695312 292.292969 82.015625 293.257812 82.628906 293.925781 C 83.253906 294.578125 84.125 294.902344 85.238281 294.902344 C 85.945312 294.902344 86.574219 294.839844 87.117188 294.714844 C 87.671875 294.578125 88.242188 294.382812 88.828125 294.132812 L 88.828125 295.738281 C 88.257812 295.988281 87.695312 296.167969 87.136719 296.277344 C 86.578125 296.402344 85.917969 296.464844 85.152344 296.464844 C 84.097656 296.464844 83.15625 296.25 82.335938 295.820312 C 81.527344 295.390625 80.894531 294.75 80.4375 293.902344 C 79.992188 293.042969 79.769531 291.996094 79.769531 290.757812 C 79.769531 289.539062 79.96875 288.488281 80.375 287.613281 C 80.789062 286.738281 81.367188 286.066406 82.105469 285.59375 C 82.859375 285.121094 83.726562 284.886719 84.714844 284.886719 Z M 84.695312 286.386719 C 83.816406 286.386719 83.121094 286.671875 82.605469 287.238281 C 82.105469 287.792969 81.808594 288.570312 81.710938 289.570312 L 87.40625 289.570312 C 87.394531 288.628906 87.171875 287.863281 86.738281 287.28125 C 86.308594 286.683594 85.625 286.386719 84.695312 286.386719 Z M 84.695312 286.386719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 104.878906 293.175781 C 104.878906 294.257812 104.476562 295.078125 103.667969 295.632812 C 102.863281 296.1875 101.777344 296.464844 100.414062 296.464844 C 99.632812 296.464844 98.957031 296.402344 98.386719 296.277344 C 97.832031 296.152344 97.335938 295.980469 96.90625 295.757812 L 96.90625 294.089844 C 97.351562 294.3125 97.886719 294.523438 98.511719 294.714844 C 99.152344 294.898438 99.800781 294.988281 100.453125 294.988281 C 101.386719 294.988281 102.0625 294.839844 102.480469 294.550781 C 102.898438 294.242188 103.105469 293.839844 103.105469 293.339844 C 103.105469 293.0625 103.027344 292.8125 102.875 292.589844 C 102.722656 292.371094 102.445312 292.148438 102.039062 291.925781 C 101.652344 291.703125 101.085938 291.453125 100.351562 291.175781 C 99.625 290.898438 99.007812 290.621094 98.492188 290.34375 C 97.976562 290.066406 97.582031 289.730469 97.300781 289.34375 C 97.023438 288.953125 96.886719 288.453125 96.886719 287.84375 C 96.886719 286.898438 97.265625 286.171875 98.03125 285.65625 C 98.8125 285.144531 99.828125 284.886719 101.082031 284.886719 C 101.761719 284.886719 102.394531 284.957031 102.980469 285.09375 C 103.578125 285.21875 104.136719 285.398438 104.648438 285.636719 L 104.023438 287.09375 C 103.550781 286.898438 103.054688 286.734375 102.542969 286.59375 C 102.027344 286.453125 101.496094 286.386719 100.957031 286.386719 C 100.203125 286.386719 99.625 286.511719 99.222656 286.761719 C 98.832031 286.996094 98.636719 287.324219 98.636719 287.738281 C 98.636719 288.042969 98.730469 288.308594 98.910156 288.53125 C 99.089844 288.738281 99.390625 288.945312 99.808594 289.15625 C 100.238281 289.351562 100.808594 289.585938 101.519531 289.863281 C 102.230469 290.128906 102.832031 290.398438 103.335938 290.675781 C 103.835938 290.953125 104.21875 291.292969 104.484375 291.695312 C 104.746094 292.085938 104.878906 292.578125 104.878906 293.175781 Z M 104.878906 293.175781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 111.328125 294.964844 C 111.609375 294.964844 111.894531 294.945312 112.183594 294.902344 C 112.476562 294.847656 112.714844 294.792969 112.894531 294.738281 L 112.894531 296.132812 C 112.699219 296.230469 112.421875 296.304688 112.058594 296.363281 C 111.699219 296.429688 111.351562 296.464844 111.015625 296.464844 C 110.433594 296.464844 109.890625 296.367188 109.386719 296.175781 C 108.902344 295.964844 108.503906 295.613281 108.199219 295.113281 C 107.890625 294.613281 107.738281 293.910156 107.738281 293.007812 L 107.738281 286.511719 L 106.152344 286.511719 L 106.152344 285.636719 L 107.761719 284.90625 L 108.492188 282.53125 L 109.578125 282.53125 L 109.578125 285.09375 L 112.8125 285.09375 L 112.8125 286.511719 L 109.578125 286.511719 L 109.578125 292.964844 C 109.578125 293.648438 109.734375 294.152344 110.054688 294.488281 C 110.390625 294.804688 110.816406 294.964844 111.328125 294.964844 Z M 111.328125 294.964844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 120.347656 284.886719 C 120.554688 284.886719 120.777344 284.898438 121.015625 284.925781 C 121.265625 284.941406 121.480469 284.96875 121.664062 285.011719 L 121.433594 286.699219 C 121.25 286.65625 121.050781 286.621094 120.828125 286.59375 C 120.617188 286.566406 120.417969 286.550781 120.222656 286.550781 C 119.652344 286.550781 119.117188 286.710938 118.613281 287.03125 C 118.113281 287.335938 117.710938 287.773438 117.402344 288.34375 C 117.113281 288.898438 116.964844 289.550781 116.964844 290.300781 L 116.964844 296.257812 L 115.128906 296.257812 L 115.128906 285.09375 L 116.632812 285.09375 L 116.839844 287.136719 L 116.925781 287.136719 C 117.285156 286.523438 117.75 285.996094 118.324219 285.550781 C 118.894531 285.109375 119.566406 284.886719 120.347656 284.886719 Z M 120.347656 284.886719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 124.6875 280.90625 C 124.96875 280.90625 125.210938 281.003906 125.417969 281.199219 C 125.640625 281.378906 125.753906 281.671875 125.753906 282.074219 C 125.753906 282.464844 125.640625 282.753906 125.417969 282.949219 C 125.210938 283.144531 124.96875 283.242188 124.6875 283.242188 C 124.382812 283.242188 124.125 283.144531 123.917969 282.949219 C 123.707031 282.753906 123.605469 282.464844 123.605469 282.074219 C 123.605469 281.671875 123.707031 281.378906 123.917969 281.199219 C 124.125 281.003906 124.382812 280.90625 124.6875 280.90625 Z M 125.585938 285.09375 L 125.585938 296.257812 L 123.75 296.257812 L 123.75 285.09375 Z M 125.585938 285.09375 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 133.625 296.464844 C 132.636719 296.464844 131.75 296.265625 130.972656 295.863281 C 130.207031 295.457031 129.601562 294.835938 129.15625 293.988281 C 128.726562 293.140625 128.507812 292.058594 128.507812 290.738281 C 128.507812 289.363281 128.738281 288.246094 129.199219 287.386719 C 129.65625 286.523438 130.277344 285.890625 131.054688 285.488281 C 131.847656 285.085938 132.746094 284.886719 133.75 284.886719 C 134.320312 284.886719 134.867188 284.949219 135.398438 285.074219 C 135.925781 285.183594 136.359375 285.324219 136.691406 285.488281 L 136.128906 287.011719 C 135.792969 286.886719 135.40625 286.765625 134.960938 286.65625 C 134.515625 286.546875 134.097656 286.488281 133.707031 286.488281 C 131.507812 286.488281 130.410156 287.898438 130.410156 290.71875 C 130.410156 292.0625 130.671875 293.097656 131.203125 293.820312 C 131.746094 294.527344 132.542969 294.882812 133.601562 294.882812 C 134.214844 294.882812 134.75 294.820312 135.210938 294.695312 C 135.683594 294.570312 136.113281 294.417969 136.503906 294.238281 L 136.503906 295.863281 C 136.128906 296.054688 135.710938 296.203125 135.25 296.300781 C 134.804688 296.410156 134.261719 296.464844 133.625 296.464844 Z M 133.625 296.464844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 142.890625 294.964844 C 143.167969 294.964844 143.453125 294.945312 143.746094 294.902344 C 144.039062 294.847656 144.277344 294.792969 144.457031 294.738281 L 144.457031 296.132812 C 144.261719 296.230469 143.984375 296.304688 143.621094 296.363281 C 143.261719 296.429688 142.910156 296.464844 142.578125 296.464844 C 141.992188 296.464844 141.449219 296.367188 140.949219 296.175781 C 140.460938 295.964844 140.066406 295.613281 139.761719 295.113281 C 139.453125 294.613281 139.300781 293.910156 139.300781 293.007812 L 139.300781 286.511719 L 137.714844 286.511719 L 137.714844 285.636719 L 139.320312 284.90625 L 140.050781 282.53125 L 141.136719 282.53125 L 141.136719 285.09375 L 144.375 285.09375 L 144.375 286.511719 L 141.136719 286.511719 L 141.136719 292.964844 C 141.136719 293.648438 141.296875 294.152344 141.617188 294.488281 C 141.953125 294.804688 142.375 294.964844 142.890625 294.964844 Z M 142.890625 294.964844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 155.855469 294.964844 C 156.132812 294.964844 156.417969 294.945312 156.710938 294.902344 C 157 294.847656 157.238281 294.792969 157.417969 294.738281 L 157.417969 296.132812 C 157.222656 296.230469 156.945312 296.304688 156.585938 296.363281 C 156.222656 296.429688 155.875 296.464844 155.539062 296.464844 C 154.957031 296.464844 154.414062 296.367188 153.914062 296.175781 C 153.425781 295.964844 153.027344 295.613281 152.722656 295.113281 C 152.417969 294.613281 152.261719 293.910156 152.261719 293.007812 L 152.261719 286.511719 L 150.675781 286.511719 L 150.675781 285.636719 L 152.285156 284.90625 L 153.015625 282.53125 L 154.101562 282.53125 L 154.101562 285.09375 L 157.335938 285.09375 L 157.335938 286.511719 L 154.101562 286.511719 L 154.101562 292.964844 C 154.101562 293.648438 154.261719 294.152344 154.582031 294.488281 C 154.914062 294.804688 155.339844 294.964844 155.855469 294.964844 Z M 155.855469 294.964844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 164.871094 284.886719 C 165.082031 284.886719 165.304688 284.898438 165.539062 284.925781 C 165.789062 284.941406 166.003906 284.96875 166.1875 285.011719 L 165.957031 286.699219 C 165.777344 286.65625 165.574219 286.621094 165.351562 286.59375 C 165.144531 286.566406 164.941406 286.550781 164.746094 286.550781 C 164.175781 286.550781 163.640625 286.710938 163.140625 287.03125 C 162.636719 287.335938 162.234375 287.773438 161.929688 288.34375 C 161.636719 288.898438 161.488281 289.550781 161.488281 290.300781 L 161.488281 296.257812 L 159.652344 296.257812 L 159.652344 285.09375 L 161.15625 285.09375 L 161.363281 287.136719 L 161.449219 287.136719 C 161.808594 286.523438 162.277344 285.996094 162.847656 285.550781 C 163.417969 285.109375 164.09375 284.886719 164.871094 284.886719 Z M 164.871094 284.886719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 172.09375 284.90625 C 173.457031 284.90625 174.464844 285.207031 175.121094 285.800781 C 175.773438 286.398438 176.101562 287.351562 176.101562 288.65625 L 176.101562 296.257812 L 174.765625 296.257812 L 174.410156 294.675781 L 174.328125 294.675781 C 173.839844 295.285156 173.324219 295.738281 172.78125 296.027344 C 172.253906 296.320312 171.515625 296.464844 170.570312 296.464844 C 169.554688 296.464844 168.710938 296.203125 168.042969 295.675781 C 167.375 295.132812 167.042969 294.292969 167.042969 293.152344 C 167.042969 292.042969 167.480469 291.1875 168.355469 290.59375 C 169.234375 289.980469 170.582031 289.648438 172.40625 289.59375 L 174.304688 289.53125 L 174.304688 288.863281 C 174.304688 287.933594 174.105469 287.289062 173.699219 286.925781 C 173.296875 286.566406 172.726562 286.386719 171.988281 286.386719 C 171.40625 286.386719 170.847656 286.476562 170.320312 286.65625 C 169.789062 286.824219 169.296875 287.015625 168.835938 287.238281 L 168.273438 285.863281 C 168.761719 285.601562 169.339844 285.378906 170.007812 285.199219 C 170.675781 285.003906 171.371094 284.90625 172.09375 284.90625 Z M 174.285156 290.800781 L 172.636719 290.863281 C 171.246094 290.917969 170.277344 291.140625 169.734375 291.53125 C 169.207031 291.917969 168.941406 292.464844 168.941406 293.175781 C 168.941406 293.800781 169.128906 294.257812 169.503906 294.550781 C 169.894531 294.839844 170.390625 294.988281 170.988281 294.988281 C 171.933594 294.988281 172.71875 294.730469 173.347656 294.214844 C 173.972656 293.6875 174.285156 292.882812 174.285156 291.800781 Z M 174.285156 290.800781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 184.054688 296.464844 C 183.066406 296.464844 182.183594 296.265625 181.402344 295.863281 C 180.636719 295.457031 180.03125 294.835938 179.585938 293.988281 C 179.15625 293.140625 178.941406 292.058594 178.941406 290.738281 C 178.941406 289.363281 179.171875 288.246094 179.628906 287.386719 C 180.089844 286.523438 180.707031 285.890625 181.488281 285.488281 C 182.28125 285.085938 183.179688 284.886719 184.179688 284.886719 C 184.75 284.886719 185.300781 284.949219 185.828125 285.074219 C 186.359375 285.183594 186.789062 285.324219 187.125 285.488281 L 186.558594 287.011719 C 186.226562 286.886719 185.835938 286.765625 185.390625 286.65625 C 184.945312 286.546875 184.527344 286.488281 184.136719 286.488281 C 181.9375 286.488281 180.839844 287.898438 180.839844 290.71875 C 180.839844 292.0625 181.105469 293.097656 181.632812 293.820312 C 182.175781 294.527344 182.976562 294.882812 184.035156 294.882812 C 184.644531 294.882812 185.183594 294.820312 185.640625 294.695312 C 186.113281 294.570312 186.546875 294.417969 186.933594 294.238281 L 186.933594 295.863281 C 186.558594 296.054688 186.140625 296.203125 185.683594 296.300781 C 185.238281 296.410156 184.695312 296.464844 184.054688 296.464844 Z M 184.054688 296.464844 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.402344 280.429688 L 191.402344 288.695312 C 191.402344 288.917969 191.386719 289.210938 191.359375 289.570312 C 191.347656 289.933594 191.332031 290.246094 191.320312 290.507812 L 191.402344 290.507812 C 191.484375 290.398438 191.609375 290.238281 191.777344 290.03125 C 191.945312 289.820312 192.113281 289.613281 192.277344 289.40625 C 192.460938 289.183594 192.613281 289.003906 192.738281 288.863281 L 196.308594 285.09375 L 198.457031 285.09375 L 193.929688 289.863281 L 198.769531 296.257812 L 196.558594 296.257812 L 192.675781 291.050781 L 191.402344 292.15625 L 191.402344 296.257812 L 189.585938 296.257812 L 189.585938 280.429688 Z M 191.402344 280.429688 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 201.671875 280.90625 C 201.949219 280.90625 202.195312 281.003906 202.402344 281.199219 C 202.625 281.378906 202.738281 281.671875 202.738281 282.074219 C 202.738281 282.464844 202.625 282.753906 202.402344 282.949219 C 202.195312 283.144531 201.949219 283.242188 201.671875 283.242188 C 201.367188 283.242188 201.109375 283.144531 200.898438 282.949219 C 200.691406 282.753906 200.585938 282.464844 200.585938 282.074219 C 200.585938 281.671875 200.691406 281.378906 200.898438 281.199219 C 201.109375 281.003906 201.367188 280.90625 201.671875 280.90625 Z M 202.570312 285.09375 L 202.570312 296.257812 L 200.734375 296.257812 L 200.734375 285.09375 Z M 202.570312 285.09375 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.503906 284.886719 C 212.839844 284.886719 213.847656 285.210938 214.53125 285.863281 C 215.210938 286.503906 215.554688 287.542969 215.554688 288.988281 L 215.554688 296.257812 L 213.738281 296.257812 L 213.738281 289.113281 C 213.738281 287.324219 212.902344 286.425781 211.234375 286.425781 C 209.992188 286.425781 209.136719 286.773438 208.664062 287.46875 C 208.191406 288.164062 207.957031 289.164062 207.957031 290.46875 L 207.957031 296.257812 L 206.117188 296.257812 L 206.117188 285.09375 L 207.601562 285.09375 L 207.871094 286.613281 L 207.976562 286.613281 C 208.339844 286.03125 208.839844 285.601562 209.480469 285.324219 C 210.121094 285.03125 210.792969 284.886719 211.503906 284.886719 Z M 211.503906 284.886719 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 222.984375 284.886719 C 223.722656 284.886719 224.382812 285.023438 224.96875 285.300781 C 225.566406 285.582031 226.074219 286.003906 226.492188 286.574219 L 226.597656 286.574219 L 226.847656 285.09375 L 228.308594 285.09375 L 228.308594 296.445312 C 228.308594 298.042969 227.898438 299.242188 227.074219 300.046875 C 226.269531 300.851562 225.007812 301.253906 223.296875 301.253906 C 221.65625 301.253906 220.3125 301.019531 219.269531 300.546875 L 219.269531 298.859375 C 220.367188 299.445312 221.746094 299.734375 223.402344 299.734375 C 224.363281 299.734375 225.113281 299.449219 225.65625 298.882812 C 226.214844 298.324219 226.492188 297.5625 226.492188 296.589844 L 226.492188 296.152344 C 226.492188 295.988281 226.5 295.75 226.511719 295.445312 C 226.527344 295.125 226.539062 294.902344 226.554688 294.777344 L 226.46875 294.777344 C 225.71875 295.902344 224.5625 296.464844 223.003906 296.464844 C 221.558594 296.464844 220.425781 295.957031 219.601562 294.945312 C 218.796875 293.929688 218.390625 292.515625 218.390625 290.695312 C 218.390625 288.917969 218.796875 287.511719 219.601562 286.46875 C 220.425781 285.414062 221.550781 284.886719 222.984375 284.886719 Z M 223.234375 286.425781 C 222.304688 286.425781 221.578125 286.800781 221.0625 287.550781 C 220.550781 288.289062 220.292969 289.34375 220.292969 290.71875 C 220.292969 292.09375 220.542969 293.148438 221.042969 293.882812 C 221.558594 294.605469 222.304688 294.964844 223.277344 294.964844 C 224.402344 294.964844 225.226562 294.667969 225.738281 294.070312 C 226.253906 293.460938 226.511719 292.480469 226.511719 291.132812 L 226.511719 290.695312 C 226.511719 289.167969 226.246094 288.078125 225.71875 287.425781 C 225.191406 286.761719 224.363281 286.425781 223.234375 286.425781 Z M 223.234375 286.425781 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 27.5625 310.917969 C 28.941406 310.917969 30.046875 311.398438 30.882812 312.355469 C 31.730469 313.3125 32.15625 314.757812 32.15625 316.6875 C 32.15625 318.589844 31.730469 320.035156 30.882812 321.019531 C 30.046875 322.007812 28.933594 322.5 27.542969 322.5 C 26.679688 322.5 25.960938 322.339844 25.390625 322.019531 C 24.835938 321.6875 24.394531 321.304688 24.078125 320.875 L 23.949219 320.875 C 23.980469 321.109375 24.007812 321.410156 24.035156 321.769531 C 24.0625 322.132812 24.078125 322.445312 24.078125 322.707031 L 24.078125 327.289062 L 22.238281 327.289062 L 22.238281 311.128906 L 23.742188 311.128906 L 23.992188 312.648438 L 24.078125 312.648438 C 24.410156 312.160156 24.847656 311.753906 25.390625 311.417969 C 25.933594 311.085938 26.65625 310.917969 27.5625 310.917969 Z M 27.226562 312.460938 C 26.085938 312.460938 25.28125 312.78125 24.808594 313.417969 C 24.347656 314.058594 24.105469 315.027344 24.078125 316.335938 L 24.078125 316.6875 C 24.078125 318.0625 24.300781 319.125 24.746094 319.875 C 25.203125 320.609375 26.046875 320.980469 27.269531 320.980469 C 27.953125 320.980469 28.507812 320.792969 28.941406 320.417969 C 29.386719 320.042969 29.710938 319.535156 29.921875 318.894531 C 30.144531 318.242188 30.253906 317.5 30.253906 316.667969 C 30.253906 315.390625 30.003906 314.371094 29.503906 313.605469 C 29.015625 312.84375 28.257812 312.460938 27.226562 312.460938 Z M 27.226562 312.460938 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 40.296875 310.917969 C 40.503906 310.917969 40.726562 310.933594 40.964844 310.960938 C 41.214844 310.976562 41.429688 311.003906 41.609375 311.042969 L 41.382812 312.730469 C 41.199219 312.691406 41 312.65625 40.777344 312.628906 C 40.566406 312.597656 40.363281 312.585938 40.171875 312.585938 C 39.601562 312.585938 39.0625 312.746094 38.5625 313.0625 C 38.0625 313.371094 37.660156 313.808594 37.351562 314.375 C 37.058594 314.933594 36.914062 315.585938 36.914062 316.335938 L 36.914062 322.289062 L 35.078125 322.289062 L 35.078125 311.128906 L 36.578125 311.128906 L 36.789062 313.167969 L 36.871094 313.167969 C 37.234375 312.558594 37.699219 312.03125 38.269531 311.585938 C 38.839844 311.140625 39.515625 310.917969 40.296875 310.917969 Z M 40.296875 310.917969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 53.007812 316.6875 C 53.007812 318.535156 52.535156 319.964844 51.589844 320.980469 C 50.65625 321.992188 49.390625 322.5 47.789062 322.5 C 46.800781 322.5 45.917969 322.277344 45.136719 321.832031 C 44.371094 321.375 43.765625 320.714844 43.320312 319.855469 C 42.875 318.980469 42.652344 317.925781 42.652344 316.6875 C 42.652344 314.839844 43.121094 313.417969 44.050781 312.417969 C 44.984375 311.417969 46.25 310.917969 47.851562 310.917969 C 48.867188 310.917969 49.757812 311.148438 50.523438 311.605469 C 51.304688 312.050781 51.910156 312.703125 52.339844 313.5625 C 52.785156 314.410156 53.007812 315.453125 53.007812 316.6875 Z M 44.554688 316.6875 C 44.554688 318.007812 44.8125 319.054688 45.324219 319.832031 C 45.855469 320.597656 46.691406 320.980469 47.832031 320.980469 C 48.957031 320.980469 49.785156 320.597656 50.316406 319.832031 C 50.84375 319.054688 51.109375 318.007812 51.109375 316.6875 C 51.109375 315.371094 50.84375 314.335938 50.316406 313.585938 C 49.785156 312.835938 48.949219 312.460938 47.808594 312.460938 C 46.667969 312.460938 45.839844 312.835938 45.324219 313.585938 C 44.8125 314.335938 44.554688 315.371094 44.554688 316.6875 Z M 44.554688 316.6875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 59.644531 321 C 59.925781 321 60.210938 320.980469 60.5 320.9375 C 60.792969 320.882812 61.03125 320.824219 61.210938 320.769531 L 61.210938 322.164062 C 61.015625 322.261719 60.738281 322.339844 60.375 322.394531 C 60.015625 322.464844 59.667969 322.5 59.332031 322.5 C 58.746094 322.5 58.207031 322.402344 57.703125 322.207031 C 57.21875 322 56.820312 321.644531 56.515625 321.144531 C 56.207031 320.644531 56.054688 319.945312 56.054688 319.042969 L 56.054688 312.542969 L 54.46875 312.542969 L 54.46875 311.667969 L 56.074219 310.941406 L 56.808594 308.566406 L 57.890625 308.566406 L 57.890625 311.128906 L 61.128906 311.128906 L 61.128906 312.542969 L 57.890625 312.542969 L 57.890625 319 C 57.890625 319.679688 58.050781 320.1875 58.371094 320.519531 C 58.707031 320.839844 59.128906 321 59.644531 321 Z M 59.644531 321 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 67.765625 310.917969 C 68.726562 310.917969 69.546875 311.128906 70.230469 311.542969 C 70.925781 311.960938 71.453125 312.550781 71.816406 313.3125 C 72.191406 314.0625 72.378906 314.945312 72.378906 315.960938 L 72.378906 317.0625 L 64.71875 317.0625 C 64.746094 318.328125 65.066406 319.292969 65.679688 319.957031 C 66.304688 320.609375 67.175781 320.9375 68.289062 320.9375 C 68.996094 320.9375 69.625 320.875 70.167969 320.75 C 70.722656 320.609375 71.292969 320.417969 71.878906 320.167969 L 71.878906 321.769531 C 71.308594 322.019531 70.742188 322.199219 70.1875 322.3125 C 69.628906 322.4375 68.96875 322.5 68.203125 322.5 C 67.144531 322.5 66.207031 322.285156 65.386719 321.851562 C 64.578125 321.421875 63.945312 320.785156 63.488281 319.9375 C 63.042969 319.078125 62.820312 318.027344 62.820312 316.792969 C 62.820312 315.570312 63.019531 314.523438 63.421875 313.648438 C 63.839844 312.773438 64.417969 312.097656 65.15625 311.628906 C 65.90625 311.15625 66.777344 310.917969 67.765625 310.917969 Z M 67.746094 312.417969 C 66.867188 312.417969 66.171875 312.703125 65.65625 313.273438 C 65.15625 313.828125 64.855469 314.605469 64.757812 315.605469 L 70.457031 315.605469 C 70.445312 314.660156 70.222656 313.898438 69.789062 313.3125 C 69.359375 312.71875 68.675781 312.417969 67.746094 312.417969 Z M 67.746094 312.417969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 79.707031 322.5 C 78.71875 322.5 77.832031 322.296875 77.054688 321.894531 C 76.289062 321.492188 75.683594 320.867188 75.238281 320.019531 C 74.808594 319.171875 74.589844 318.089844 74.589844 316.773438 C 74.589844 315.398438 74.820312 314.28125 75.28125 313.417969 C 75.738281 312.558594 76.359375 311.925781 77.136719 311.523438 C 77.929688 311.121094 78.828125 310.917969 79.832031 310.917969 C 80.402344 310.917969 80.949219 310.980469 81.480469 311.105469 C 82.007812 311.21875 82.441406 311.355469 82.773438 311.523438 L 82.210938 313.042969 C 81.875 312.917969 81.488281 312.800781 81.042969 312.691406 C 80.597656 312.578125 80.179688 312.523438 79.789062 312.523438 C 77.589844 312.523438 76.492188 313.933594 76.492188 316.75 C 76.492188 318.097656 76.753906 319.132812 77.285156 319.855469 C 77.828125 320.5625 78.628906 320.917969 79.683594 320.917969 C 80.296875 320.917969 80.832031 320.855469 81.292969 320.730469 C 81.765625 320.605469 82.195312 320.449219 82.585938 320.269531 L 82.585938 321.894531 C 82.210938 322.089844 81.792969 322.234375 81.332031 322.332031 C 80.886719 322.445312 80.34375 322.5 79.707031 322.5 Z M 79.707031 322.5 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 88.972656 321 C 89.25 321 89.539062 320.980469 89.828125 320.9375 C 90.121094 320.882812 90.359375 320.824219 90.539062 320.769531 L 90.539062 322.164062 C 90.34375 322.261719 90.066406 322.339844 89.703125 322.394531 C 89.34375 322.464844 88.996094 322.5 88.660156 322.5 C 88.074219 322.5 87.535156 322.402344 87.03125 322.207031 C 86.546875 322 86.148438 321.644531 85.84375 321.144531 C 85.535156 320.644531 85.382812 319.945312 85.382812 319.042969 L 85.382812 312.542969 L 83.796875 312.542969 L 83.796875 311.667969 L 85.402344 310.941406 L 86.132812 308.566406 L 87.21875 308.566406 L 87.21875 311.128906 L 90.457031 311.128906 L 90.457031 312.542969 L 87.21875 312.542969 L 87.21875 319 C 87.21875 319.679688 87.378906 320.1875 87.699219 320.519531 C 88.035156 320.839844 88.457031 321 88.972656 321 Z M 88.972656 321 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 93.710938 306.941406 C 93.992188 306.941406 94.234375 307.039062 94.441406 307.234375 C 94.664062 307.414062 94.777344 307.703125 94.777344 308.109375 C 94.777344 308.496094 94.664062 308.789062 94.441406 308.980469 C 94.234375 309.175781 93.992188 309.273438 93.710938 309.273438 C 93.40625 309.273438 93.148438 309.175781 92.941406 308.980469 C 92.730469 308.789062 92.625 308.496094 92.625 308.109375 C 92.625 307.703125 92.730469 307.414062 92.941406 307.234375 C 93.148438 307.039062 93.40625 306.941406 93.710938 306.941406 Z M 94.609375 311.128906 L 94.609375 322.289062 L 92.773438 322.289062 L 92.773438 311.128906 Z M 94.609375 311.128906 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 107.886719 316.6875 C 107.886719 318.535156 107.414062 319.964844 106.464844 320.980469 C 105.535156 321.992188 104.265625 322.5 102.667969 322.5 C 101.679688 322.5 100.796875 322.277344 100.015625 321.832031 C 99.25 321.375 98.644531 320.714844 98.199219 319.855469 C 97.753906 318.980469 97.53125 317.925781 97.53125 316.6875 C 97.53125 314.839844 98 313.417969 98.929688 312.417969 C 99.863281 311.417969 101.128906 310.917969 102.730469 310.917969 C 103.746094 310.917969 104.636719 311.148438 105.402344 311.605469 C 106.179688 312.050781 106.785156 312.703125 107.21875 313.5625 C 107.664062 314.410156 107.886719 315.453125 107.886719 316.6875 Z M 99.429688 316.6875 C 99.429688 318.007812 99.6875 319.054688 100.203125 319.832031 C 100.734375 320.597656 101.566406 320.980469 102.707031 320.980469 C 103.835938 320.980469 104.664062 320.597656 105.191406 319.832031 C 105.722656 319.054688 105.984375 318.007812 105.984375 316.6875 C 105.984375 315.371094 105.722656 314.335938 105.191406 313.585938 C 104.664062 312.835938 103.828125 312.460938 102.6875 312.460938 C 101.546875 312.460938 100.71875 312.835938 100.203125 313.585938 C 99.6875 314.335938 99.429688 315.371094 99.429688 316.6875 Z M 99.429688 316.6875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 116.171875 310.917969 C 117.507812 310.917969 118.515625 311.246094 119.199219 311.898438 C 119.882812 312.535156 120.222656 313.578125 120.222656 315.023438 L 120.222656 322.289062 L 118.40625 322.289062 L 118.40625 315.148438 C 118.40625 313.355469 117.570312 312.460938 115.902344 312.460938 C 114.664062 312.460938 113.808594 312.808594 113.332031 313.5 C 112.859375 314.195312 112.625 315.195312 112.625 316.5 L 112.625 322.289062 L 110.785156 322.289062 L 110.785156 311.128906 L 112.269531 311.128906 L 112.539062 312.648438 L 112.644531 312.648438 C 113.007812 312.066406 113.507812 311.632812 114.148438 311.355469 C 114.789062 311.066406 115.460938 310.917969 116.171875 310.917969 Z M 116.171875 310.917969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 134.269531 312.542969 L 131.453125 312.542969 L 131.453125 322.289062 L 129.617188 322.289062 L 129.617188 312.542969 L 127.652344 312.542969 L 127.652344 311.691406 L 129.617188 311.066406 L 129.617188 310.417969 C 129.617188 308.976562 129.933594 307.941406 130.574219 307.316406 C 131.214844 306.675781 132.105469 306.359375 133.246094 306.359375 C 133.691406 306.359375 134.097656 306.398438 134.457031 306.484375 C 134.832031 306.550781 135.152344 306.636719 135.417969 306.734375 L 134.9375 308.171875 C 134.714844 308.101562 134.457031 308.03125 134.164062 307.960938 C 133.875 307.890625 133.574219 307.859375 133.269531 307.859375 C 132.65625 307.859375 132.195312 308.066406 131.890625 308.484375 C 131.597656 308.886719 131.453125 309.523438 131.453125 310.398438 L 131.453125 311.128906 L 134.269531 311.128906 Z M 134.269531 312.542969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 146.023438 316.6875 C 146.023438 318.535156 145.550781 319.964844 144.601562 320.980469 C 143.671875 321.992188 142.402344 322.5 140.804688 322.5 C 139.816406 322.5 138.933594 322.277344 138.152344 321.832031 C 137.386719 321.375 136.78125 320.714844 136.335938 319.855469 C 135.890625 318.980469 135.667969 317.925781 135.667969 316.6875 C 135.667969 314.839844 136.136719 313.417969 137.066406 312.417969 C 138 311.417969 139.265625 310.917969 140.867188 310.917969 C 141.882812 310.917969 142.773438 311.148438 143.539062 311.605469 C 144.316406 312.050781 144.921875 312.703125 145.355469 313.5625 C 145.800781 314.410156 146.023438 315.453125 146.023438 316.6875 Z M 137.566406 316.6875 C 137.566406 318.007812 137.824219 319.054688 138.339844 319.832031 C 138.871094 320.597656 139.703125 320.980469 140.84375 320.980469 C 141.972656 320.980469 142.800781 320.597656 143.328125 319.832031 C 143.859375 319.054688 144.121094 318.007812 144.121094 316.6875 C 144.121094 315.371094 143.859375 314.335938 143.328125 313.585938 C 142.800781 312.835938 141.964844 312.460938 140.824219 312.460938 C 139.683594 312.460938 138.855469 312.835938 138.339844 313.585938 C 137.824219 314.335938 137.566406 315.371094 137.566406 316.6875 Z M 137.566406 316.6875 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 154.140625 310.917969 C 154.351562 310.917969 154.574219 310.933594 154.808594 310.960938 C 155.0625 310.976562 155.277344 311.003906 155.457031 311.042969 L 155.226562 312.730469 C 155.046875 312.691406 154.84375 312.65625 154.621094 312.628906 C 154.414062 312.597656 154.210938 312.585938 154.015625 312.585938 C 153.445312 312.585938 152.910156 312.746094 152.410156 313.0625 C 151.910156 313.371094 151.503906 313.808594 151.199219 314.375 C 150.90625 314.933594 150.761719 315.585938 150.761719 316.335938 L 150.761719 322.289062 L 148.921875 322.289062 L 148.921875 311.128906 L 150.425781 311.128906 L 150.636719 313.167969 L 150.71875 313.167969 C 151.082031 312.558594 151.546875 312.03125 152.117188 311.585938 C 152.6875 311.140625 153.363281 310.917969 154.140625 310.917969 Z M 154.140625 310.917969 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 166.707031 321 C 166.988281 321 167.273438 320.980469 167.5625 320.9375 C 167.855469 320.882812 168.09375 320.824219 168.273438 320.769531 L 168.273438 322.164062 C 168.078125 322.261719 167.800781 322.339844 167.4375 322.394531 C 167.078125 322.464844 166.730469 322.5 166.394531 322.5 C 165.8125 322.5 165.269531 322.402344 164.765625 322.207031 C 164.28125 322 163.882812 321.644531 163.578125 321.144531 C 163.269531 320.644531 163.117188 319.945312 163.117188 319.042969 L 163.117188 312.542969 L 161.53125 312.542969 L 161.53125 311.667969 L 163.140625 310.941406 L 163.871094 308.566406 L 164.953125 308.566406 L 164.953125 311.128906 L 168.191406 311.128906 L 168.191406 312.542969 L 164.953125 312.542969 L 164.953125 319 C 164.953125 319.679688 165.113281 320.1875 165.433594 320.519531 C 165.769531 320.839844 166.195312 321 166.707031 321 Z M 166.707031 321 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 172.34375 306.460938 L 172.34375 311.105469 C 172.34375 311.660156 172.308594 312.183594 172.238281 312.667969 L 172.367188 312.667969 C 172.726562 312.097656 173.214844 311.667969 173.828125 311.378906 C 174.453125 311.085938 175.128906 310.941406 175.851562 310.941406 C 177.214844 310.941406 178.238281 311.265625 178.917969 311.917969 C 179.601562 312.558594 179.941406 313.59375 179.941406 315.023438 L 179.941406 322.289062 L 178.125 322.289062 L 178.125 315.148438 C 178.125 313.355469 177.292969 312.460938 175.621094 312.460938 C 174.371094 312.460938 173.507812 312.816406 173.035156 313.523438 C 172.574219 314.21875 172.34375 315.214844 172.34375 316.523438 L 172.34375 322.289062 L 170.507812 322.289062 L 170.507812 306.460938 Z M 172.34375 306.460938 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 184.347656 306.941406 C 184.625 306.941406 184.867188 307.039062 185.078125 307.234375 C 185.300781 307.414062 185.410156 307.703125 185.410156 308.109375 C 185.410156 308.496094 185.300781 308.789062 185.078125 308.980469 C 184.867188 309.175781 184.625 309.273438 184.347656 309.273438 C 184.039062 309.273438 183.785156 309.175781 183.574219 308.980469 C 183.367188 308.789062 183.261719 308.496094 183.261719 308.109375 C 183.261719 307.703125 183.367188 307.414062 183.574219 307.234375 C 183.785156 307.039062 184.039062 306.941406 184.347656 306.941406 Z M 185.246094 311.128906 L 185.246094 322.289062 L 183.40625 322.289062 L 183.40625 311.128906 Z M 185.246094 311.128906 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 196.078125 319.207031 C 196.078125 320.292969 195.675781 321.109375 194.867188 321.664062 C 194.058594 322.222656 192.976562 322.5 191.609375 322.5 C 190.832031 322.5 190.15625 322.4375 189.585938 322.3125 C 189.03125 322.1875 188.535156 322.011719 188.105469 321.789062 L 188.105469 320.125 C 188.550781 320.347656 189.085938 320.554688 189.710938 320.75 C 190.351562 320.929688 191 321.019531 191.652344 321.019531 C 192.585938 321.019531 193.261719 320.875 193.675781 320.582031 C 194.09375 320.277344 194.304688 319.875 194.304688 319.375 C 194.304688 319.097656 194.226562 318.847656 194.074219 318.625 C 193.921875 318.402344 193.644531 318.179688 193.238281 317.957031 C 192.847656 317.738281 192.285156 317.488281 191.546875 317.207031 C 190.824219 316.929688 190.207031 316.652344 189.691406 316.375 C 189.175781 316.097656 188.777344 315.765625 188.5 315.375 C 188.222656 314.988281 188.082031 314.488281 188.082031 313.875 C 188.082031 312.933594 188.464844 312.203125 189.230469 311.691406 C 190.011719 311.175781 191.027344 310.917969 192.277344 310.917969 C 192.960938 310.917969 193.59375 310.988281 194.179688 311.128906 C 194.777344 311.253906 195.332031 311.433594 195.847656 311.667969 L 195.222656 313.125 C 194.75 312.933594 194.253906 312.765625 193.738281 312.628906 C 193.226562 312.488281 192.695312 312.417969 192.152344 312.417969 C 191.402344 312.417969 190.824219 312.542969 190.421875 312.792969 C 190.03125 313.03125 189.835938 313.355469 189.835938 313.773438 C 189.835938 314.078125 189.925781 314.34375 190.109375 314.5625 C 190.289062 314.773438 190.589844 314.980469 191.003906 315.1875 C 191.4375 315.382812 192.007812 315.621094 192.71875 315.898438 C 193.425781 316.160156 194.03125 316.429688 194.535156 316.710938 C 195.035156 316.988281 195.417969 317.328125 195.679688 317.730469 C 195.945312 318.117188 196.078125 318.609375 196.078125 319.207031 Z M 196.078125 319.207031 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 211.503906 319.207031 C 211.503906 320.292969 211.101562 321.109375 210.292969 321.664062 C 209.484375 322.222656 208.402344 322.5 207.035156 322.5 C 206.257812 322.5 205.582031 322.4375 205.011719 322.3125 C 204.457031 322.1875 203.960938 322.011719 203.53125 321.789062 L 203.53125 320.125 C 203.976562 320.347656 204.511719 320.554688 205.136719 320.75 C 205.777344 320.929688 206.425781 321.019531 207.078125 321.019531 C 208.011719 321.019531 208.6875 320.875 209.101562 320.582031 C 209.519531 320.277344 209.730469 319.875 209.730469 319.375 C 209.730469 319.097656 209.652344 318.847656 209.5 318.625 C 209.347656 318.402344 209.070312 318.179688 208.664062 317.957031 C 208.277344 317.738281 207.710938 317.488281 206.972656 317.207031 C 206.25 316.929688 205.632812 316.652344 205.117188 316.375 C 204.601562 316.097656 204.203125 315.765625 203.925781 315.375 C 203.648438 314.988281 203.507812 314.488281 203.507812 313.875 C 203.507812 312.933594 203.890625 312.203125 204.65625 311.691406 C 205.4375 311.175781 206.453125 310.917969 207.703125 310.917969 C 208.386719 310.917969 209.019531 310.988281 209.605469 311.128906 C 210.203125 311.253906 210.757812 311.433594 211.273438 311.667969 L 210.648438 313.125 C 210.175781 312.933594 209.679688 312.765625 209.167969 312.628906 C 208.652344 312.488281 208.121094 312.417969 207.578125 312.417969 C 206.828125 312.417969 206.25 312.542969 205.847656 312.792969 C 205.457031 313.03125 205.261719 313.355469 205.261719 313.773438 C 205.261719 314.078125 205.351562 314.34375 205.535156 314.5625 C 205.714844 314.773438 206.015625 314.980469 206.429688 315.1875 C 206.863281 315.382812 207.433594 315.621094 208.144531 315.898438 C 208.851562 316.160156 209.457031 316.429688 209.960938 316.710938 C 210.460938 316.988281 210.84375 317.328125 211.105469 317.730469 C 211.371094 318.117188 211.503906 318.609375 211.503906 319.207031 Z M 211.503906 319.207031 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 215.15625 306.941406 C 215.433594 306.941406 215.679688 307.039062 215.886719 307.234375 C 216.109375 307.414062 216.222656 307.703125 216.222656 308.109375 C 216.222656 308.496094 216.109375 308.789062 215.886719 308.980469 C 215.679688 309.175781 215.433594 309.273438 215.15625 309.273438 C 214.851562 309.273438 214.59375 309.175781 214.382812 308.980469 C 214.175781 308.789062 214.070312 308.496094 214.070312 308.109375 C 214.070312 307.703125 214.175781 307.414062 214.382812 307.234375 C 214.59375 307.039062 214.851562 306.941406 215.15625 306.941406 Z M 216.054688 311.128906 L 216.054688 322.289062 L 214.21875 322.289062 L 214.21875 311.128906 Z M 216.054688 311.128906 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 223.339844 321 C 223.617188 321 223.902344 320.980469 224.195312 320.9375 C 224.488281 320.882812 224.722656 320.824219 224.90625 320.769531 L 224.90625 322.164062 C 224.710938 322.261719 224.433594 322.339844 224.070312 322.394531 C 223.707031 322.464844 223.359375 322.5 223.027344 322.5 C 222.441406 322.5 221.898438 322.402344 221.398438 322.207031 C 220.910156 322 220.515625 321.644531 220.207031 321.144531 C 219.902344 320.644531 219.75 319.945312 219.75 319.042969 L 219.75 312.542969 L 218.164062 312.542969 L 218.164062 311.667969 L 219.769531 310.941406 L 220.5 308.566406 L 221.585938 308.566406 L 221.585938 311.128906 L 224.820312 311.128906 L 224.820312 312.542969 L 221.585938 312.542969 L 221.585938 319 C 221.585938 319.679688 221.746094 320.1875 222.066406 320.519531 C 222.398438 320.839844 222.824219 321 223.339844 321 Z M 223.339844 321 "/>
|
|
||||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 231.460938 310.917969 C 232.417969 310.917969 233.242188 311.128906 233.921875 311.542969 C 234.617188 311.960938 235.148438 312.550781 235.507812 313.3125 C 235.886719 314.0625 236.074219 314.945312 236.074219 315.960938 L 236.074219 317.0625 L 228.410156 317.0625 C 228.441406 318.328125 228.761719 319.292969 229.371094 319.957031 C 230 320.609375 230.867188 320.9375 231.980469 320.9375 C 232.691406 320.9375 233.316406 320.875 233.859375 320.75 C 234.417969 320.609375 234.988281 320.417969 235.570312 320.167969 L 235.570312 321.769531 C 235 322.019531 234.4375 322.199219 233.882812 322.3125 C 233.324219 322.4375 232.664062 322.5 231.898438 322.5 C 230.839844 322.5 229.902344 322.285156 229.078125 321.851562 C 228.273438 321.421875 227.640625 320.785156 227.179688 319.9375 C 226.734375 319.078125 226.511719 318.027344 226.511719 316.792969 C 226.511719 315.570312 226.714844 314.523438 227.117188 313.648438 C 227.535156 312.773438 228.113281 312.097656 228.851562 311.628906 C 229.601562 311.15625 230.472656 310.917969 231.460938 310.917969 Z M 231.4375 312.417969 C 230.5625 312.417969 229.867188 312.703125 229.351562 313.273438 C 228.851562 313.828125 228.550781 314.605469 228.453125 315.605469 L 234.152344 315.605469 C 234.136719 314.660156 233.914062 313.898438 233.484375 313.3125 C 233.054688 312.71875 232.371094 312.417969 231.4375 312.417969 Z M 231.4375 312.417969 "/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 220 KiB |
|
|
@ -1,14 +1,14 @@
|
||||||
{
|
{
|
||||||
"id": "transit",
|
"id": "transit",
|
||||||
"title": {
|
"title": {
|
||||||
"en": "Bus routes",
|
"en": "Transit routes",
|
||||||
"de": "Buslinien",
|
"de": "Buslinien",
|
||||||
"fr": "Lignes de bus",
|
"fr": "Lignes de bus",
|
||||||
"da": "Busruter",
|
"da": "Busruter",
|
||||||
"nb_NO": "Bussruter",
|
"nb_NO": "Bussruter",
|
||||||
"ca": "Rutes de bus",
|
"ca": "Rutes de bus",
|
||||||
"pa_PK": "بس روٹ",
|
"pa_PK": "بس روٹ",
|
||||||
"nl": "Busroutes",
|
"nl": "OV-lijnen",
|
||||||
"es": "Rutas de autobús",
|
"es": "Rutas de autobús",
|
||||||
"cs": "Autobusové linky",
|
"cs": "Autobusové linky",
|
||||||
"zh_Hant": "公車路線",
|
"zh_Hant": "公車路線",
|
||||||
|
|
|
||||||
|
|
@ -26,17 +26,67 @@
|
||||||
"name": "Dataset Afvalbakken Assen",
|
"name": "Dataset Afvalbakken Assen",
|
||||||
"description": "Laag op basis van externe data",
|
"description": "Laag op basis van externe data",
|
||||||
"source": {
|
"source": {
|
||||||
"osmTags": "OBJECTID~*",
|
"osmTags": "Historisch_~*",
|
||||||
"geoJson": "https://opendata.arcgis.com/datasets/5b6953ac5a9d4616a7dc75ab0beeac2f_0.geojson"
|
"geoJson": "https://opendata.arcgis.com/datasets/5b6953ac5a9d4616a7dc75ab0beeac2f_0.geojson"
|
||||||
},
|
},
|
||||||
"calculatedTags": [
|
"calculatedTags": [
|
||||||
"_closest_osm_waste_basket=closest(feat)('waste_basket')?.properties?.id",
|
"_closest_osm_waste_basket=closest(feat)('waste_basket')?.properties?.id",
|
||||||
"_closest_osm_waste_basket_distance=distanceTo(feat)(feat.properties._closest_osm_waste_basket)",
|
"_closest_osm_waste_basket_distance=distanceTo(feat)(feat.properties._closest_osm_waste_basket)",
|
||||||
"_has_closeby_feature=Number(feat.properties._closest_osm_waste_basket_distance) < 10 ? 'yes' : 'no'"
|
"_has_closeby_feature=Number(feat.properties._closest_osm_waste_basket_distance) < 10 ? 'yes' : 'no'",
|
||||||
|
"_waste=(feat.properties.Type_ === 'Capitol 60L' || feat.properties.Type_ === 'Restafval') ? 'trash' : (feat.properties.Type_ === 'Hondenpoep' ? 'dog_excrement' : '')",
|
||||||
|
"_tags='amenity=waste_basket' + (feat.properties._waste ? ';waste=' + feat.properties._waste : '') + ';operator=Gemeente Assen;operator:wikidata=Q798'"
|
||||||
],
|
],
|
||||||
"title": "Afvalbak in dataset",
|
"title": "Afvalbak in dataset",
|
||||||
"tagRenderings": [
|
"tagRenderings": [
|
||||||
"all_tags"
|
{
|
||||||
|
"id": "import",
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"type": "import_button",
|
||||||
|
"targetLayer": "waste_basket",
|
||||||
|
"tags": "_tags",
|
||||||
|
"text": "Voeg deze afvalbak toe"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"condition": "_has_closeby_feature=no"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tag-hint",
|
||||||
|
"render": "Deze afvalbak krijgt de volgende tags: <b>{_tags}</b>",
|
||||||
|
"condition": "_has_closeby_feature=no"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "imported",
|
||||||
|
"render": "Deze afvalbak is (waarschijnlijk) al toegevoegd. <a href=#{_closest_osm_waste_basket}>Bekijk het punt</a>.",
|
||||||
|
"condition": "_has_closeby_feature=yes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tag-apply",
|
||||||
|
"condition": "_has_closeby_feature=yes",
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"type": "tag_apply",
|
||||||
|
"tags_to_apply": "$_tags",
|
||||||
|
"id_of_object_to_apply_this_one": "_closest_osm_waste_basket",
|
||||||
|
"message": "Voeg alle tags toe aan de bestaande afvalbak",
|
||||||
|
"image": "./assets/svg/addSmall.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "type",
|
||||||
|
"render": "<b>Type:</b> {Type_}",
|
||||||
|
"condition": "Type_~*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "colour",
|
||||||
|
"render": "<b>Kleur:</b> {Kleur_}",
|
||||||
|
"condition": "Kleur_~*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "minimap_with_poi",
|
||||||
|
"render": "{minimap(18, id, _closest_osm_waste_basket)}"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"pointRendering": [
|
"pointRendering": [
|
||||||
{
|
{
|
||||||
|
|
@ -46,12 +96,13 @@
|
||||||
],
|
],
|
||||||
"marker": [
|
"marker": [
|
||||||
{
|
{
|
||||||
"icon": {
|
"icon": "circle",
|
||||||
"render": "circle:red",
|
"color": {
|
||||||
|
"render": "red",
|
||||||
"mappings": [
|
"mappings": [
|
||||||
{
|
{
|
||||||
"if": "_has_closeby_feature=yes",
|
"if": "_has_closeby_feature=yes",
|
||||||
"then": "circle:#008000aa"
|
"then": "green"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -61,7 +112,27 @@
|
||||||
"anchor": "center"
|
"anchor": "center"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lineRendering": []
|
"lineRendering": [],
|
||||||
|
"filter": [
|
||||||
|
{
|
||||||
|
"id": "closeby",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"default": true,
|
||||||
|
"question": "Alle vuilnisbakken"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"osmTags": "_has_closeby_feature=yes",
|
||||||
|
"question": "Met nabijgelegen vuilnisbak"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"osmTags": "_has_closeby_feature=no",
|
||||||
|
"question": "Zonder nabijgelegen vuilnisbak"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"#": "ignore-possible-duplicate"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"recycling",
|
"recycling",
|
||||||
{
|
{
|
||||||
|
|
@ -69,20 +140,73 @@
|
||||||
"name": "Dataset Recyclingcontainers Assen",
|
"name": "Dataset Recyclingcontainers Assen",
|
||||||
"description": "Laag op basis van externe data",
|
"description": "Laag op basis van externe data",
|
||||||
"source": {
|
"source": {
|
||||||
"osmTags": "OBJECTID~*",
|
"osmTags": "Subtype_~*",
|
||||||
"geoJson": "https://opendata.arcgis.com/datasets/edb893998e27461b8ed82aad9854d27d_0.geojson"
|
"geoJson": "https://services1.arcgis.com/p5QhXC0i0sZjprM1/arcgis/rest/services/Dataset_ondergrondse_containers_2022_Assen_(view)/FeatureServer/0/query?outFields=*&where=1%3D1&f=geojson"
|
||||||
},
|
},
|
||||||
"calculatedTags": [
|
"calculatedTags": [
|
||||||
"_closest_osm_recycling=closest(feat)('recycling')?.properties?.id",
|
"_closest_osm_recycling=closest(feat)('recycling')?.properties?.id",
|
||||||
"_closest_osm_waste_disposal=closest(feat)('waste_disposal')?.properties?.id",
|
"_closest_osm_waste_disposal=closest(feat)('waste_disposal')?.properties?.id",
|
||||||
"_closest_osm_recycling_distance=distanceTo(feat)(feat.properties._closest_osm_recycling)",
|
"_closest_osm_recycling_distance=distanceTo(feat)(feat.properties._closest_osm_recycling)",
|
||||||
"_closest_osm_waste_disposal_distance=distanceTo(feat)(feat.properties._closest_osm_waste_disposal)",
|
"_closest_osm_waste_disposal_distance=distanceTo(feat)(feat.properties._closest_osm_waste_disposal)",
|
||||||
|
"_closest_feature=(Number(feat.properties._closest_osm_recycling_distance) <= Number(feat.properties._closest_osm_waste_disposal_distance) ? feat.properties._closest_osm_recycling : feat.properties._closest_osm_waste_disposal)",
|
||||||
"_has_closeby_recycling=Number(feat.properties._closest_osm_recycling_distance) < 10 ? 'yes' : 'no'",
|
"_has_closeby_recycling=Number(feat.properties._closest_osm_recycling_distance) < 10 ? 'yes' : 'no'",
|
||||||
"_has_closeby_waste_disposal=Number(feat.properties._closest_osm_waste_disposal_distance) < 10 ? 'yes' : 'no'"
|
"_has_closeby_waste_disposal=Number(feat.properties._closest_osm_waste_disposal_distance) < 10 ? 'yes' : 'no'",
|
||||||
|
"_has_closeby_feature=feat.properties._has_closeby_recycling === 'yes' || feat.properties._has_closeby_waste_disposal === 'yes' ? 'yes' : 'no'",
|
||||||
|
"_amenity=feat.properties.Type__ === 'Restafval' ? 'amenity=waste_disposal;access=residents' : 'amenity=recycling;recycling_type=container'",
|
||||||
|
"_recycling_tags=feat.properties.Type__ === 'Glas' ? 'recycling:glass_bottles=yes' : (feat.properties.Type__ === 'Kleding' ? 'recycling:clothes=yes;recyling:shoes=yes' : (feat.properties.Type__ === 'Papier' ? 'recycling:paper=yes' : (feat.properties.Type__ === 'PMD' ? 'recycling:pmd=yes' : (feat.properties.Type__ === 'BIO' ? 'recycling:green_waste=yes' : ''))))",
|
||||||
|
"_tags=feat.properties._amenity + (feat.properties._recycling_tags ? ';' + feat.properties._recycling_tags : '') + ';operator=Gemeente Assen;operator:wikidata=Q798'"
|
||||||
],
|
],
|
||||||
"title": "Recyclingcontainer in dataset",
|
"title": "Recyclingcontainer in dataset",
|
||||||
"tagRenderings": [
|
"tagRenderings": [
|
||||||
"all_tags"
|
{
|
||||||
|
"id": "import",
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"type": "import_button",
|
||||||
|
"targetLayer": "recycling",
|
||||||
|
"tags": "_tags",
|
||||||
|
"text": "Voeg deze recyclingcontainer toe"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"condition": "_has_closeby_feature=no"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tag-hint",
|
||||||
|
"render": "Deze recyclingcontainer krijgt de volgende tags: <b>{_tags}</b>",
|
||||||
|
"condition": "_has_closeby_feature=no"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "imported",
|
||||||
|
"render": "Deze recyclingcontainer is (waarschijnlijk) al toegevoegd. <a href=#{_closest_osm_waste_basket}>Bekijk het punt</a>.",
|
||||||
|
"condition": "_has_closeby_feature=yes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tag-apply",
|
||||||
|
"condition": "_has_closeby_feature=yes",
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"type": "tag_apply",
|
||||||
|
"tags_to_apply": "$_tags",
|
||||||
|
"id_of_object_to_apply_this_one": "_closest_feature",
|
||||||
|
"message": "Voeg alle tags toe aan de bestaande recyclingcontainer",
|
||||||
|
"image": "./assets/svg/addSmall.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "type",
|
||||||
|
"render": "<b>Type:</b> {Type_}",
|
||||||
|
"condition": "Type_~*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "colour",
|
||||||
|
"render": "<b>Kleur:</b> {Kleur_}",
|
||||||
|
"condition": "Kleur_~*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "minimap_with_poi",
|
||||||
|
"render": "{minimap(18, id, _closest_feature)}"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"pointRendering": [
|
"pointRendering": [
|
||||||
{
|
{
|
||||||
|
|
@ -92,16 +216,18 @@
|
||||||
],
|
],
|
||||||
"marker": [
|
"marker": [
|
||||||
{
|
{
|
||||||
"icon": {
|
"icon": "circle",
|
||||||
"render": "circle:red",
|
"color": {
|
||||||
|
"render": "red",
|
||||||
"mappings": [
|
"mappings": [
|
||||||
{
|
{
|
||||||
"if": "_has_closeby_recycling=yes",
|
"if": {
|
||||||
"then": "circle:#008000aa"
|
"or": [
|
||||||
|
"_has_closeby_recycling=yes",
|
||||||
|
"_has_closeby_waste_disposal=yes"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
"then": "green"
|
||||||
"if": "_has_closeby_waste_disposal=yes",
|
|
||||||
"then": "circle:#008000aa"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -111,8 +237,45 @@
|
||||||
"anchor": "center"
|
"anchor": "center"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lineRendering": []
|
"lineRendering": [],
|
||||||
|
"filter": [
|
||||||
|
{
|
||||||
|
"id": "closeby",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"default": true,
|
||||||
|
"question": "Alle recyclingcontainers"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"osmTags": "_has_closeby_feature=yes",
|
||||||
|
"question": "Met nabijgelegen recyclingcontainer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"osmTags": "_has_closeby_feature=no",
|
||||||
|
"question": "Zonder nabijgelegen recyclingcontainer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"#": "ignore-possible-duplicate"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"waste_disposal"
|
"waste_disposal"
|
||||||
|
],
|
||||||
|
"tileLayerSources": [
|
||||||
|
{
|
||||||
|
"id": "assen_lufo",
|
||||||
|
"name": "Assen Luchtfoto",
|
||||||
|
"best": true,
|
||||||
|
"attribution": {
|
||||||
|
"text": "Gemeente Assen"
|
||||||
|
},
|
||||||
|
"category": "photo",
|
||||||
|
"type": "wms",
|
||||||
|
"url": "https://map.rlin.eu/service?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=assen&CRS={proj}&STYLES=&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",
|
||||||
|
"defaultState": false,
|
||||||
|
"isOverlay": false,
|
||||||
|
"min_zoom": 0,
|
||||||
|
"max_zoom": 22
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
263
assets/themes/zhv/zhv.json
Normal file
263
assets/themes/zhv/zhv.json
Normal file
|
|
@ -0,0 +1,263 @@
|
||||||
|
{
|
||||||
|
"id": "zhv",
|
||||||
|
"title": {
|
||||||
|
"en": "ZHV Import Tool"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"en": "Small theme allowing import of bus stops from the Zentrales Haltestellenverzeichnis in Germany."
|
||||||
|
},
|
||||||
|
"icon": "./assets/layers/transit_stops/bus_stop.svg",
|
||||||
|
"hideFromOverview": true,
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"id": "zhv",
|
||||||
|
"name": {
|
||||||
|
"en": "Public transport stops in ZHV"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"render": {
|
||||||
|
"en": "Public transport stop in ZHV"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minzoom": 15,
|
||||||
|
"source": {
|
||||||
|
"geoJson": "https://robinlinde.github.io/tiles/zhv_haltestellen/{z}/{x}/{y}.json",
|
||||||
|
"geoJsonZoomLevel": 15,
|
||||||
|
"osmTags": "Type~Q"
|
||||||
|
},
|
||||||
|
"tagRenderings": [
|
||||||
|
{
|
||||||
|
"id": "name",
|
||||||
|
"render": {
|
||||||
|
"en": "This stop is called {Name}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "id",
|
||||||
|
"render": {
|
||||||
|
"en": "The ID of this stop is {_ifopt}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "closest_stop",
|
||||||
|
"render": {
|
||||||
|
"en": "The closest stop in OSM is <a href=#{_closest_osm_stop}>{_closest_osm_stop_name}</a>."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "import",
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"type": "import_button",
|
||||||
|
"targetLayer": "transit_stops",
|
||||||
|
"tags": "_tags",
|
||||||
|
"text": {
|
||||||
|
"en": "Add this stop"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"or": [
|
||||||
|
"_has_closeby_feature=no",
|
||||||
|
"_has_closeby_feature=maybe"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tag-hint",
|
||||||
|
"render": {
|
||||||
|
"en": "This stop will get the following tags: <b>{_tags}</b>"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"or": [
|
||||||
|
"_has_closeby_feature=no",
|
||||||
|
"_has_closeby_feature=maybe"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "imported",
|
||||||
|
"render": {
|
||||||
|
"en": "This stop is (probably) already added. <a href=#{_closest_osm_stop_id}>View the point</a>."
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"or": [
|
||||||
|
"_has_closeby_feature=yes",
|
||||||
|
"_has_closeby_feature=maybe"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "minimap_with_poi",
|
||||||
|
"render": "{minimap(18, id, _closest_osm_stop_id):height:10rem}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pointRendering": [
|
||||||
|
{
|
||||||
|
"marker": [
|
||||||
|
{
|
||||||
|
"icon": "circle",
|
||||||
|
"color": {
|
||||||
|
"render": "red",
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "_has_closeby_feature=yes",
|
||||||
|
"then": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "_has_closeby_feature=maybe",
|
||||||
|
"then": "orange"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"location": [
|
||||||
|
"point",
|
||||||
|
"centroid"
|
||||||
|
],
|
||||||
|
"iconSize": "20,20"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"calculatedTags": [
|
||||||
|
"_closest_osm_stop_id=closest(feat)('all_transit_stops')?.properties?.id",
|
||||||
|
"_closest_osm_stop_distance=distanceTo(feat)(feat.properties._closest_osm_stop_id)",
|
||||||
|
"_closest_osm_stop_name=closest(feat)('all_transit_stops')?.properties?.name",
|
||||||
|
"_closest_osm_stop_ifopt=closest(feat)('all_transit_stops')?.properties?.['ref:IFOPT']",
|
||||||
|
"_has_closeby_feature=(feat.properties._closest_osm_stop_ifopt === feat.properties._ifopt) ? 'yes' : (feat.properties._closest_osm_stop_distance < 15 ? 'yes' : (feat.properties._closest_osm_stop_distance > 25 ? 'no' : 'maybe'))",
|
||||||
|
"_ifopt=feat.properties.DHID",
|
||||||
|
"_tags='public_transport=platform;ref:IFOPT='+feat.properties._ifopt+';name='+feat.properties.Name"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtin": "transit_stops",
|
||||||
|
"override": {
|
||||||
|
"#": "We're getting all public_transport=platforms since when importing ZHV stops, we don't add the type-specific tags.",
|
||||||
|
"source": {
|
||||||
|
"osmTags": "public_transport=platform"
|
||||||
|
},
|
||||||
|
"id": "all_transit_stops",
|
||||||
|
"name": {
|
||||||
|
"en": "Public transport stops in OSM"
|
||||||
|
},
|
||||||
|
"tagRenderings+": [
|
||||||
|
{
|
||||||
|
"id": "type",
|
||||||
|
"question": {
|
||||||
|
"en": "What kind of transit types is this stop used for?"
|
||||||
|
},
|
||||||
|
"condition": "_geometry:type=Point",
|
||||||
|
"multiAnswer": true,
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "bus=yes",
|
||||||
|
"ifnot": {
|
||||||
|
"and": [
|
||||||
|
"bus=",
|
||||||
|
"highway="
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"then": {
|
||||||
|
"en": "This stop is used for bus transit."
|
||||||
|
},
|
||||||
|
"addExtraTags": [
|
||||||
|
"highway=bus_stop"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "train=yes",
|
||||||
|
"ifnot": "train=",
|
||||||
|
"then": {
|
||||||
|
"en": "This stop is used for train transit."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "light_rail=yes",
|
||||||
|
"ifnot": "light_rail=",
|
||||||
|
"then": {
|
||||||
|
"en": "This stop is used for light rail transit."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "subway=yes",
|
||||||
|
"ifnot": "subway=",
|
||||||
|
"then": {
|
||||||
|
"en": "This stop is used for subway transit."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "tram=yes",
|
||||||
|
"ifnot": "tram=",
|
||||||
|
"then": {
|
||||||
|
"en": "This stop is used for tram transit."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "ferry=yes",
|
||||||
|
"ifnot": "ferry=",
|
||||||
|
"then": {
|
||||||
|
"en": "This stop is used for ferry transit."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ifopt",
|
||||||
|
"question": {
|
||||||
|
"en": "What is the IFOPT reference of this stop?"
|
||||||
|
},
|
||||||
|
"render": {
|
||||||
|
"en": "The IFOPT reference of this stop is {ref:IFOPT}."
|
||||||
|
},
|
||||||
|
"freeform": {
|
||||||
|
"key": "ref:IFOPT",
|
||||||
|
"type": "string",
|
||||||
|
"placeholder": {
|
||||||
|
"en": "e.g. NL:Q:15003950 or de:03457:15801::2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "zhv_stop",
|
||||||
|
"condition": "_has_closeby_feature=yes",
|
||||||
|
"render": {
|
||||||
|
"en": "There is a ZHV stop nearby: <a href=#{_closest_zhv_stop_id}>{_closest_zhv_stop_name}</a>."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "zhv_apply",
|
||||||
|
"condition": {
|
||||||
|
"and": [
|
||||||
|
"_has_closeby_feature=yes",
|
||||||
|
"ref:IFOPT!~*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"type": "tag_apply",
|
||||||
|
"tags_to_apply": "ref:IFOPT=$_ifopt",
|
||||||
|
"id_of_object_to_apply_this_one": "_closest_osm_stop_id",
|
||||||
|
"message": {
|
||||||
|
"en": "Add IFOPT to this stop"
|
||||||
|
},
|
||||||
|
"image": "./assets/svg/addSmall.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "minimap_with_poi",
|
||||||
|
"condition": "_has_closeby_feature=yes",
|
||||||
|
"render": "{minimap(18, id, _closest_zhv_stop_id):height:10rem}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"calculatedTags": [
|
||||||
|
"_closest_zhv_stop_id=closest(feat)('zhv')?.properties?.id",
|
||||||
|
"_closest_zhv_stop_distance=distanceTo(feat)(feat.properties._closest_zhv_stop_id)",
|
||||||
|
"_closest_zhv_stop_name=closest(feat)('zhv')?.properties?.Name",
|
||||||
|
"_has_closeby_feature=feat.properties._closest_zhv_stop_distance < 25",
|
||||||
|
"_ifopt=closest(feat)('zhv')?.properties?.DHID"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -810,9 +810,12 @@
|
||||||
"deleteConfirm": "Permantently delete this review",
|
"deleteConfirm": "Permantently delete this review",
|
||||||
"deleteText": "This cannot be undone",
|
"deleteText": "This cannot be undone",
|
||||||
"deleteTitle": "Delete this review?",
|
"deleteTitle": "Delete this review?",
|
||||||
|
"disabledForPrivacy": "Reviews are disabled due to your privacy settings.",
|
||||||
"edit": "Edit review",
|
"edit": "Edit review",
|
||||||
|
"editPrivacySettings": "Edit your privacy settings",
|
||||||
"i_am_affiliated": "I am affiliated with this object",
|
"i_am_affiliated": "I am affiliated with this object",
|
||||||
"i_am_affiliated_explanation": "Check if you are an owner, creator, employee, …",
|
"i_am_affiliated_explanation": "Check if you are an owner, creator, employee, …",
|
||||||
|
"loadOnce": "Load reviews once",
|
||||||
"no_reviews_yet": "There are no reviews yet. Be the first one!",
|
"no_reviews_yet": "There are no reviews yet. Be the first one!",
|
||||||
"non_place_review": "One review is not about a place and is not shown here.",
|
"non_place_review": "One review is not about a place and is not shown here.",
|
||||||
"non_place_reviews": "{n} reviews are not about a place and are not shown here.",
|
"non_place_reviews": "{n} reviews are not about a place and are not shown here.",
|
||||||
|
|
|
||||||
|
|
@ -779,6 +779,20 @@
|
||||||
},
|
},
|
||||||
"question": "Can you deposit cash into this ATM?"
|
"question": "Can you deposit cash into this ATM?"
|
||||||
},
|
},
|
||||||
|
"cash_in-types": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "You can deposit coins at this ATM"
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"then": "You can deposit notes at this ATM"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"then": "You can deposit sealed bags at this ATM"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"question": "In what ways can you deposit cash at this ATM?"
|
||||||
|
},
|
||||||
"cash_out": {
|
"cash_out": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
|
|
@ -12529,6 +12543,17 @@
|
||||||
"question": "What exactly is surveilled here?",
|
"question": "What exactly is surveilled here?",
|
||||||
"render": "Surveills a {surveillance:zone}"
|
"render": "Surveills a {surveillance:zone}"
|
||||||
},
|
},
|
||||||
|
"active": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "This camera is currently in use."
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"then": "This camera is not used anymore"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"question": "Is this camera currently in use?"
|
||||||
|
},
|
||||||
"camera:mount": {
|
"camera:mount": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
|
|
@ -12587,6 +12612,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "Disused surveillance camera"
|
||||||
|
}
|
||||||
|
},
|
||||||
"render": "Surveillance Camera"
|
"render": "Surveillance Camera"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -13462,37 +13492,37 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transit_routes": {
|
"transit_routes": {
|
||||||
"description": "Layer showing bus lines",
|
"description": "Layer showing transit routes",
|
||||||
"name": "Bus lines",
|
"name": "Transit Routes",
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
"colour": {
|
"colour": {
|
||||||
"question": "What is the colour for this bus line?",
|
"question": "What is the colour for this transit route?",
|
||||||
"render": "This bus line has the color {colour}"
|
"render": "This transit route has the color {colour}"
|
||||||
},
|
},
|
||||||
"from": {
|
"from": {
|
||||||
"question": "What is the starting point for this bus line?",
|
"question": "What is the starting point for this transit route?",
|
||||||
"render": "This bus line begins at {from}"
|
"render": "This transit route begins at {from}"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"question": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)"
|
"question": "What is the name for this transit route? (i.e. Bus XX: From => Via => To)"
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"question": "What network does this bus line belong to?",
|
"question": "What network does this transit route belong to?",
|
||||||
"render": "This bus line is part of the {network} network"
|
"render": "This transit route is part of the {network} network"
|
||||||
},
|
},
|
||||||
"operator": {
|
"operator": {
|
||||||
"override": {
|
"override": {
|
||||||
"question": "What company operates this bus line?",
|
"question": "What company operates this transit route?",
|
||||||
"render": "This bus line is operated by {operator}"
|
"render": "This transit route is operated by {operator}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"to": {
|
"to": {
|
||||||
"question": "What is the ending point for this bus line?",
|
"question": "What is the ending point for this transit route?",
|
||||||
"render": "This bus line ends at {to}"
|
"render": "This transit route ends at {to}"
|
||||||
},
|
},
|
||||||
"via": {
|
"via": {
|
||||||
"question": "What is the via point for this bus line?",
|
"question": "What is the via point for this transit route?",
|
||||||
"render": "This bus line goes via {via}"
|
"render": "This transit route goes via {via}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
|
|
@ -13501,7 +13531,7 @@
|
||||||
"then": "{name}"
|
"then": "{name}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"render": "Bus line"
|
"render": "Transit route"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transit_stops": {
|
"transit_stops": {
|
||||||
|
|
@ -13595,6 +13625,18 @@
|
||||||
},
|
},
|
||||||
"question": "Is this stop lit?"
|
"question": "Is this stop lit?"
|
||||||
},
|
},
|
||||||
|
"ref": {
|
||||||
|
"freeform": {
|
||||||
|
"placeholder": "e.g. A1 or 1"
|
||||||
|
},
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "This stop has no platform reference"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"question": "What is the platform reference of this stop?",
|
||||||
|
"render": "The platform reference of this stop is <b>{ref}</b>."
|
||||||
|
},
|
||||||
"shelter": {
|
"shelter": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
|
|
|
||||||
|
|
@ -757,6 +757,20 @@
|
||||||
},
|
},
|
||||||
"question": "Kan je geld storten bij deze geldautomaat?"
|
"question": "Kan je geld storten bij deze geldautomaat?"
|
||||||
},
|
},
|
||||||
|
"cash_in-types": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "Je kan munten storten bij deze geldautomaat"
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"then": "Je kan biljetten storten bij deze geldautomaat"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"then": "Je kan sealbags storten bij deze geldautomaat"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"question": "Op welke manieren kan je geld storten bij deze geldautomaat?"
|
||||||
|
},
|
||||||
"cash_out": {
|
"cash_out": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
|
|
@ -9926,6 +9940,17 @@
|
||||||
"question": "Wat wordt hier precies bewaakt?",
|
"question": "Wat wordt hier precies bewaakt?",
|
||||||
"render": "Bewaakt een {surveillance:zone}"
|
"render": "Bewaakt een {surveillance:zone}"
|
||||||
},
|
},
|
||||||
|
"active": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "Deze camera is momenteel in gebruik."
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"then": "Deze camera is niet meer in gebruik"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"question": "Is deze camera momenteel in gebruik?"
|
||||||
|
},
|
||||||
"camera:mount": {
|
"camera:mount": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
|
|
@ -10568,37 +10593,37 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transit_routes": {
|
"transit_routes": {
|
||||||
"description": "Laag met buslijnen",
|
"description": "Laag met OV-lijnen",
|
||||||
"name": "Buslijnen",
|
"name": "OV-lijnen",
|
||||||
"tagRenderings": {
|
"tagRenderings": {
|
||||||
"colour": {
|
"colour": {
|
||||||
"question": "Wat is de kleur van deze buslijn?",
|
"question": "Wat is de kleur van deze OV-lijn?",
|
||||||
"render": "Deze buslijn heeft de kleur {colour}"
|
"render": "Deze OV-lijn heeft de kleur {colour}"
|
||||||
},
|
},
|
||||||
"from": {
|
"from": {
|
||||||
"question": "Wat is het beginpunt van deze buslijn?",
|
"question": "Wat is het beginpunt van deze OV-lijn?",
|
||||||
"render": "Deze buslijn begint bij {from}"
|
"render": "Deze OV-lijn begint bij {from}"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"question": "Wat is de naam van deze buslijn (bv. Bus XX: Van => Via => Naar)"
|
"question": "Wat is de naam van deze OV-lijn (bv. Bus XX: Van => Via => Naar)"
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"question": "Bij welk netwerk hoort deze buslijn?",
|
"question": "Bij welk netwerk hoort deze OV-lijn?",
|
||||||
"render": "Deze buslijn is onderdeel van het {network} netwerk"
|
"render": "Deze OV-lijn is onderdeel van het {network} netwerk"
|
||||||
},
|
},
|
||||||
"operator": {
|
"operator": {
|
||||||
"override": {
|
"override": {
|
||||||
"question": "Welk bedrijf exploiteert deze buslijn?",
|
"question": "Welk bedrijf exploiteert deze OV-lijn?",
|
||||||
"render": "Deze buslijn wordt geëxploiteerd door {operator}"
|
"render": "Deze OV-lijn wordt geëxploiteerd door {operator}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"to": {
|
"to": {
|
||||||
"question": "Wat is het eindpunt van deze buslijn?",
|
"question": "Wat is het eindpunt van deze OV-lijn?",
|
||||||
"render": "Deze buslijn eindigt bij {to}"
|
"render": "Deze OV-lijn eindigt bij {to}"
|
||||||
},
|
},
|
||||||
"via": {
|
"via": {
|
||||||
"question": "Via welk punt gaat deze buslijn?",
|
"question": "Via welk punt gaat deze OV-lijn?",
|
||||||
"render": "Deze buslijn gaat via {via}"
|
"render": "Deze OV-lijn gaat via {via}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
|
|
@ -10607,7 +10632,7 @@
|
||||||
"then": "{name}"
|
"then": "{name}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"render": "Buslijn"
|
"render": "OV-lijn"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transit_stops": {
|
"transit_stops": {
|
||||||
|
|
@ -10698,7 +10723,7 @@
|
||||||
"then": "Halte {name}"
|
"then": "Halte {name}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"render": "Bushalte"
|
"render": "OV-halte"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tree_node": {
|
"tree_node": {
|
||||||
|
|
|
||||||
|
|
@ -1370,7 +1370,7 @@
|
||||||
},
|
},
|
||||||
"transit": {
|
"transit": {
|
||||||
"description": "Plan your trip with the help of the public transport system.",
|
"description": "Plan your trip with the help of the public transport system.",
|
||||||
"title": "Bus routes"
|
"title": "Transit routes"
|
||||||
},
|
},
|
||||||
"trees": {
|
"trees": {
|
||||||
"description": "Map all the trees!",
|
"description": "Map all the trees!",
|
||||||
|
|
@ -1511,5 +1511,88 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": "Winter Service"
|
"title": "Winter Service"
|
||||||
|
},
|
||||||
|
"zhv": {
|
||||||
|
"description": "Small theme allowing import of bus stops from the Zentrales Haltestellenverzeichnis in Germany.",
|
||||||
|
"layers": {
|
||||||
|
"0": {
|
||||||
|
"name": "Public transport stops in ZHV",
|
||||||
|
"tagRenderings": {
|
||||||
|
"closest_stop": {
|
||||||
|
"render": "The closest stop in OSM is <a href=#{_closest_osm_stop}>{_closest_osm_stop_name}</a>."
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"render": "The ID of this stop is {_ifopt}"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"text": "Add this stop"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imported": {
|
||||||
|
"render": "This stop is (probably) already added. <a href=#{_closest_osm_stop_id}>View the point</a>."
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"render": "This stop is called {Name}"
|
||||||
|
},
|
||||||
|
"tag-hint": {
|
||||||
|
"render": "This stop will get the following tags: <b>{_tags}</b>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"render": "Public transport stop in ZHV"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"override": {
|
||||||
|
"name": "Public transport stops in OSM",
|
||||||
|
"tagRenderings+": {
|
||||||
|
"0": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "This stop is used for bus transit."
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"then": "This stop is used for train transit."
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"then": "This stop is used for light rail transit."
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"then": "This stop is used for subway transit."
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"then": "This stop is used for tram transit."
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"then": "This stop is used for ferry transit."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"question": "What kind of transit types is this stop used for?"
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"freeform": {
|
||||||
|
"placeholder": "e.g. NL:Q:15003950 or de:03457:15801::2"
|
||||||
|
},
|
||||||
|
"question": "What is the IFOPT reference of this stop?",
|
||||||
|
"render": "The IFOPT reference of this stop is {ref:IFOPT}."
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"render": "There is a ZHV stop nearby: <a href=#{_closest_zhv_stop_id}>{_closest_zhv_stop_name}</a>."
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"render": {
|
||||||
|
"special": {
|
||||||
|
"message": "Add IFOPT to this stop"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"title": "ZHV Import Tool"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1359,7 +1359,7 @@
|
||||||
},
|
},
|
||||||
"transit": {
|
"transit": {
|
||||||
"description": "Plan je trip met behulp van het openbaar vervoer.",
|
"description": "Plan je trip met behulp van het openbaar vervoer.",
|
||||||
"title": "Busroutes"
|
"title": "OV-lijnen"
|
||||||
},
|
},
|
||||||
"trees": {
|
"trees": {
|
||||||
"description": "Breng bomen in kaart!",
|
"description": "Breng bomen in kaart!",
|
||||||
|
|
|
||||||
8
package-lock.json
generated
8
package-lock.json
generated
|
|
@ -84,7 +84,7 @@
|
||||||
"showdown": "^2.1.0",
|
"showdown": "^2.1.0",
|
||||||
"svelte": "^3.59.2",
|
"svelte": "^3.59.2",
|
||||||
"svg-path-parser": "^1.1.0",
|
"svg-path-parser": "^1.1.0",
|
||||||
"tag2link": "^2025.3.21",
|
"tag2link": "^2025.5.21",
|
||||||
"tailwind-merge": "^1.14.0",
|
"tailwind-merge": "^1.14.0",
|
||||||
"tailwindcss": "^3.4.17",
|
"tailwindcss": "^3.4.17",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
|
|
@ -26604,9 +26604,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/tag2link": {
|
"node_modules/tag2link": {
|
||||||
"version": "2025.3.21",
|
"version": "2025.5.21",
|
||||||
"resolved": "https://registry.npmjs.org/tag2link/-/tag2link-2025.3.21.tgz",
|
"resolved": "https://registry.npmjs.org/tag2link/-/tag2link-2025.5.21.tgz",
|
||||||
"integrity": "sha512-JvRTQdY/z0vAEFUzL7rhLndNiDnStlurW+1jgXL5FW+GppR2T/dq2lXMEppbFNxJ9C4h5b+ykjcMPH791YeLdA==",
|
"integrity": "sha512-vcz6/6U5V3QYPA7geLrtzLMqhCwg6OvoGP665DbGgPRSWASjFn0J4jA/NyifD3Tmp2yf8RnEuI6QBvhXGBVSHg==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/tailwind-merge": {
|
"node_modules/tailwind-merge": {
|
||||||
|
|
|
||||||
|
|
@ -249,7 +249,7 @@
|
||||||
"showdown": "^2.1.0",
|
"showdown": "^2.1.0",
|
||||||
"svelte": "^3.59.2",
|
"svelte": "^3.59.2",
|
||||||
"svg-path-parser": "^1.1.0",
|
"svg-path-parser": "^1.1.0",
|
||||||
"tag2link": "^2025.3.21",
|
"tag2link": "^2025.5.21",
|
||||||
"tailwind-merge": "^1.14.0",
|
"tailwind-merge": "^1.14.0",
|
||||||
"tailwindcss": "^3.4.17",
|
"tailwindcss": "^3.4.17",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
|
|
|
||||||
|
|
@ -8357,6 +8357,10 @@ svg.apply-fill path {
|
||||||
margin-right: 0.25rem;
|
margin-right: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sm\:mr-2 {
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.sm\:mt-2 {
|
.sm\:mt-2 {
|
||||||
margin-top: 0.5rem;
|
margin-top: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
@ -8583,6 +8587,10 @@ svg.apply-fill path {
|
||||||
margin-right: 0.5rem;
|
margin-right: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.md\:mr-4 {
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
.md\:ms-2 {
|
.md\:ms-2 {
|
||||||
margin-inline-start: 0.5rem;
|
margin-inline-start: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ class HandleErrors extends Script {
|
||||||
" is identical to previously seen changeset, not writing to file"
|
" is identical to previously seen changeset, not writing to file"
|
||||||
)*/
|
)*/
|
||||||
} else {
|
} else {
|
||||||
const changesetWithMsg = `<!-- User: ${parsed.message.username} (${parsed.message.userid}) ${parsed.message.layout}; Version ${parsed.message.version}; Not uploaded due to ${parsed.message.message} -->
|
const changesetWithMsg = `<!-- User: ${parsed.message.username} (${parsed.message.userid}) ${parsed.message.theme}; Version ${parsed.message.version}; Not uploaded due to ${parsed.message.message} -->
|
||||||
${changeset}`
|
${changeset}`
|
||||||
writeFileSync(path, changesetWithMsg, "utf8")
|
writeFileSync(path, changesetWithMsg, "utf8")
|
||||||
createdChangesets.add(changeset)
|
createdChangesets.add(changeset)
|
||||||
|
|
@ -115,14 +115,13 @@ ${changeset}`
|
||||||
console.log("Written refused", path)
|
console.log("Written refused", path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private readonly osmConnection = new OsmConnection()
|
||||||
|
private readonly downloader = new OsmObjectDownloader(this.osmConnection.Backend(), undefined)
|
||||||
|
|
||||||
async main(args: string[]): Promise<void> {
|
async fixForFile(path: string){
|
||||||
const osmConnection = new OsmConnection()
|
|
||||||
const downloader = new OsmObjectDownloader(osmConnection.Backend(), undefined)
|
|
||||||
|
|
||||||
const path = args[0]
|
|
||||||
const lines = readFileSync(path, "utf8").split("\n")
|
const lines = readFileSync(path, "utf8").split("\n")
|
||||||
|
const osmConnection = this.osmConnection
|
||||||
|
const downloader = this.downloader
|
||||||
const createdChangesets = new Set<string>()
|
const createdChangesets = new Set<string>()
|
||||||
const refusedFiles: Set<string> = new Set<string>()
|
const refusedFiles: Set<string> = new Set<string>()
|
||||||
refusedFiles.add("[]")
|
refusedFiles.add("[]")
|
||||||
|
|
@ -143,7 +142,7 @@ ${changeset}`
|
||||||
try {
|
try {
|
||||||
const parsed: ErrorMessage = JSON.parse(line)
|
const parsed: ErrorMessage = JSON.parse(line)
|
||||||
const e = parsed.message
|
const e = parsed.message
|
||||||
if (e.layout === "grb") {
|
if (e.theme === "grb") {
|
||||||
console.log("Skipping GRB ")
|
console.log("Skipping GRB ")
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
@ -182,6 +181,18 @@ ${changeset}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async main(args: string[]): Promise<void> {
|
||||||
|
if(args[0] === undefined){
|
||||||
|
console.log("Please specify the error file to handle")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const path of args) {
|
||||||
|
await this.fixForFile(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
new HandleErrors().run()
|
new HandleErrors().run()
|
||||||
|
|
|
||||||
58
scripts/importscripts/zhv.ts
Normal file
58
scripts/importscripts/zhv.ts
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { readFileSync, writeFileSync } from "fs"
|
||||||
|
import Script from "../Script"
|
||||||
|
import { parse } from "papaparse"
|
||||||
|
import { FeatureCollection, Point } from "geojson"
|
||||||
|
|
||||||
|
class ZHVcsv2GeoJson extends Script {
|
||||||
|
constructor() {
|
||||||
|
super("Converts a CSV file with ZHV data to GeoJSON format. Usage: csv-file output-file")
|
||||||
|
}
|
||||||
|
|
||||||
|
async main(args: string[]): Promise<void> {
|
||||||
|
const csvFile = args[0]
|
||||||
|
const outputFile = args[1]
|
||||||
|
|
||||||
|
if (!csvFile || !outputFile) {
|
||||||
|
console.error("Usage: csv-file output-file")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the CSV file and parse it using PapaParse
|
||||||
|
const text = readFileSync(csvFile, "utf-8")
|
||||||
|
const parsed = parse(text, {
|
||||||
|
header: true,
|
||||||
|
dynamicTyping: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(`Parsed ${parsed.data.length} rows from ${csvFile}`)
|
||||||
|
console.log(`First row:`, parsed.data[0])
|
||||||
|
|
||||||
|
// Drop all rows that do not have a valid latitude and longitude
|
||||||
|
parsed.data = parsed.data.filter((row: any) => {
|
||||||
|
return row["Latitude"] && row["Longitude"]
|
||||||
|
})
|
||||||
|
|
||||||
|
// Convert the parsed data to GeoJSON format
|
||||||
|
const geoJson: FeatureCollection<Point> = {
|
||||||
|
type: "FeatureCollection",
|
||||||
|
features: parsed.data.map((row: any) => ({
|
||||||
|
type: "Feature",
|
||||||
|
geometry: {
|
||||||
|
type: "Point",
|
||||||
|
coordinates: [
|
||||||
|
parseFloat(row["Longitude"].replace(",", ".")),
|
||||||
|
parseFloat(row["Latitude"].replace(",", ".")),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
properties: row,
|
||||||
|
})),
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`First feature:`, geoJson.features[0])
|
||||||
|
|
||||||
|
// Write the GeoJSON output to the specified file
|
||||||
|
writeFileSync(outputFile, JSON.stringify(geoJson), "utf-8")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new ZHVcsv2GeoJson().run()
|
||||||
|
|
@ -1,25 +1,27 @@
|
||||||
import { Store, UIEventSource } from "../UIEventSource"
|
import { Store, UIEventSource } from "../UIEventSource"
|
||||||
import FilteredLayer from "../../Models/FilteredLayer"
|
import FilteredLayer from "../../Models/FilteredLayer"
|
||||||
import { Feature } from "geojson"
|
import { Feature, Geometry } from "geojson"
|
||||||
|
import { OsmTags } from "../../Models/OsmFeature"
|
||||||
|
|
||||||
export interface FeatureSource<T extends Feature = Feature> {
|
export interface FeatureSource<T extends Feature = Feature<Geometry, OsmTags>> {
|
||||||
features: Store<T[]>
|
features: Store<T[]>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface UpdatableFeatureSource<T extends Feature = Feature> extends FeatureSource<T> {
|
export interface UpdatableFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> extends FeatureSource<T> {
|
||||||
/**
|
/**
|
||||||
* Forces an update and downloads the data, even if the feature source is supposed to be active
|
* Forces an update and downloads the data, even if the feature source is supposed to be active
|
||||||
*/
|
*/
|
||||||
updateAsync()
|
updateAsync(): void
|
||||||
}
|
}
|
||||||
export interface WritableFeatureSource<T extends Feature = Feature> extends FeatureSource<T> {
|
|
||||||
|
export interface WritableFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> extends FeatureSource<T> {
|
||||||
features: UIEventSource<T[]>
|
features: UIEventSource<T[]>
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A feature source which only contains features for the defined layer
|
* A feature source which only contains features for the defined layer
|
||||||
*/
|
*/
|
||||||
export interface FeatureSourceForLayer<T extends Feature = Feature> extends FeatureSource<T> {
|
export interface FeatureSourceForLayer<T extends Feature = Feature<Geometry, OsmTags>> extends FeatureSource<T> {
|
||||||
readonly layer: FilteredLayer
|
readonly layer: FilteredLayer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,21 +5,23 @@ import { Feature } from "geojson"
|
||||||
import { UIEventSource } from "../UIEventSource"
|
import { UIEventSource } from "../UIEventSource"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Constructs multiple featureStores based on the given layers, where every constructed feature source will contain features only matching the given layer
|
||||||
|
*
|
||||||
* In some rare cases, some elements are shown on multiple layers (when 'passthrough' is enabled)
|
* In some rare cases, some elements are shown on multiple layers (when 'passthrough' is enabled)
|
||||||
* If this is the case, multiple objects with a different _matching_layer_id are generated.
|
* If this is the case, multiple objects with a different _matching_layer_id are generated.
|
||||||
* In any case, this featureSource marks the objects with _matching_layer_id
|
* In any case, this featureSource marks the objects with _matching_layer_id
|
||||||
*/
|
*/
|
||||||
export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = FeatureSource> {
|
export default class PerLayerFeatureSourceSplitter<T extends Feature, SRC extends FeatureSource<T>> {
|
||||||
public readonly perLayer: ReadonlyMap<string, T>
|
public readonly perLayer: ReadonlyMap<string, SRC>
|
||||||
constructor(
|
constructor(
|
||||||
layers: FilteredLayer[],
|
layers: FilteredLayer[],
|
||||||
upstream: FeatureSource,
|
upstream: FeatureSource<T>,
|
||||||
options?: {
|
options?: {
|
||||||
constructStore?: (features: UIEventSource<Feature[]>, layer: FilteredLayer) => T
|
constructStore?: (features: UIEventSource<T[]>, layer: FilteredLayer) => SRC
|
||||||
handleLeftovers?: (featuresWithoutLayer: Feature[]) => void
|
handleLeftovers?: (featuresWithoutLayer: T[]) => void
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const knownLayers = new Map<string, T>()
|
const knownLayers = new Map<string, SRC>()
|
||||||
/**
|
/**
|
||||||
* Keeps track of the ids that are included per layer.
|
* Keeps track of the ids that are included per layer.
|
||||||
* Used to know if the downstream feature source needs to be pinged
|
* Used to know if the downstream feature source needs to be pinged
|
||||||
|
|
@ -30,12 +32,12 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
|
||||||
const constructStore =
|
const constructStore =
|
||||||
options?.constructStore ?? ((store, layer) => new SimpleFeatureSource(layer, store))
|
options?.constructStore ?? ((store, layer) => new SimpleFeatureSource(layer, store))
|
||||||
for (const layer of layers) {
|
for (const layer of layers) {
|
||||||
const src = new UIEventSource<Feature[]>([])
|
const src = new UIEventSource<T[]>([])
|
||||||
layerSources.set(layer.layerDef.id, src)
|
layerSources.set(layer.layerDef.id, src)
|
||||||
knownLayers.set(layer.layerDef.id, <T>constructStore(src, layer))
|
knownLayers.set(layer.layerDef.id, <SRC>constructStore(src, layer))
|
||||||
}
|
}
|
||||||
|
|
||||||
upstream.features.addCallbackAndRunD((features) => {
|
upstream.features.addCallbackAndRunD((features: T[]) => {
|
||||||
if (layers === undefined) {
|
if (layers === undefined) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -49,7 +51,7 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
|
||||||
*/
|
*/
|
||||||
const hasChanged: boolean[] = layers.map(() => false)
|
const hasChanged: boolean[] = layers.map(() => false)
|
||||||
const newIndices: Set<string>[] = layers.map(() => new Set<string>())
|
const newIndices: Set<string>[] = layers.map(() => new Set<string>())
|
||||||
const noLayerFound: Feature[] = []
|
const noLayerFound: T[] = []
|
||||||
|
|
||||||
for (const layer of layers) {
|
for (const layer of layers) {
|
||||||
featuresPerLayer.set(layer.layerDef.id, [])
|
featuresPerLayer.set(layer.layerDef.id, [])
|
||||||
|
|
@ -113,7 +115,7 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public forEach(f: (featureSource: T) => void) {
|
public forEach(f: ((src: SRC) => void)) {
|
||||||
for (const fs of this.perLayer.values()) {
|
for (const fs of this.perLayer.values()) {
|
||||||
f(fs)
|
f(fs)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
import { Store, UIEventSource } from "../../UIEventSource"
|
import { Store, UIEventSource } from "../../UIEventSource"
|
||||||
import FilteredLayer from "../../../Models/FilteredLayer"
|
import FilteredLayer from "../../../Models/FilteredLayer"
|
||||||
import { FeatureSource } from "../FeatureSource"
|
import { FeatureSource } from "../FeatureSource"
|
||||||
import { Feature } from "geojson"
|
import { Feature, Geometry } from "geojson"
|
||||||
import { GlobalFilter } from "../../../Models/GlobalFilter"
|
import { GlobalFilter } from "../../../Models/GlobalFilter"
|
||||||
|
import { OsmTags } from "../../../Models/OsmFeature"
|
||||||
|
|
||||||
export default class FilteringFeatureSource implements FeatureSource {
|
export default class FilteringFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> implements FeatureSource<T> {
|
||||||
public features: UIEventSource<Feature[]> = new UIEventSource([])
|
public readonly features: UIEventSource<T[]> = new UIEventSource([])
|
||||||
private readonly upstream: FeatureSource
|
private readonly upstream: FeatureSource<T>
|
||||||
private readonly _fetchStore?: (id: string) => Store<Record<string, string>>
|
private readonly _fetchStore?: (id: string) => Store<Record<string, string>>
|
||||||
private readonly _globalFilters?: Store<GlobalFilter[]>
|
private readonly _globalFilters?: Store<GlobalFilter[]>
|
||||||
private readonly _alreadyRegistered = new Set<Store<any>>()
|
private readonly _alreadyRegistered = new Set<Store<any>>()
|
||||||
|
|
@ -18,7 +19,7 @@ export default class FilteringFeatureSource implements FeatureSource {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
layer: FilteredLayer,
|
layer: FilteredLayer,
|
||||||
upstream: FeatureSource,
|
upstream: FeatureSource<T>,
|
||||||
fetchStore?: (id: string) => Store<Record<string, string>>,
|
fetchStore?: (id: string) => Store<Record<string, string>>,
|
||||||
globalFilters?: Store<GlobalFilter[]>,
|
globalFilters?: Store<GlobalFilter[]>,
|
||||||
metataggingUpdated?: Store<any>,
|
metataggingUpdated?: Store<any>,
|
||||||
|
|
@ -40,7 +41,7 @@ export default class FilteringFeatureSource implements FeatureSource {
|
||||||
})
|
})
|
||||||
|
|
||||||
layer.appliedFilters.forEach((value) =>
|
layer.appliedFilters.forEach((value) =>
|
||||||
value.addCallback((_) => {
|
value.addCallback(() => {
|
||||||
this.update()
|
this.update()
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
@ -68,7 +69,7 @@ export default class FilteringFeatureSource implements FeatureSource {
|
||||||
|
|
||||||
private update() {
|
private update() {
|
||||||
const layer = this._layer
|
const layer = this._layer
|
||||||
const features: Feature[] = this.upstream.features.data ?? []
|
const features: T[] = this.upstream.features.data ?? []
|
||||||
const includedFeatureIds = new Set<string>()
|
const includedFeatureIds = new Set<string>()
|
||||||
const globalFilters = this._globalFilters?.data?.map((f) => f)
|
const globalFilters = this._globalFilters?.data?.map((f) => f)
|
||||||
const zoomlevel = this._zoomlevel?.data
|
const zoomlevel = this._zoomlevel?.data
|
||||||
|
|
@ -121,10 +122,9 @@ export default class FilteringFeatureSource implements FeatureSource {
|
||||||
}
|
}
|
||||||
this._alreadyRegistered.add(src)
|
this._alreadyRegistered.add(src)
|
||||||
|
|
||||||
const self = this
|
|
||||||
// Add a callback as a changed tag might change the filter
|
// Add a callback as a changed tag might change the filter
|
||||||
src.addCallbackAndRunD((_) => {
|
src.addCallbackAndRunD(() => {
|
||||||
self._is_dirty.setData(true)
|
this._is_dirty.setData(true)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
38
src/Logic/FeatureSource/Sources/IfVisibleFeatureSource.ts
Normal file
38
src/Logic/FeatureSource/Sources/IfVisibleFeatureSource.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { FeatureSource } from "../FeatureSource"
|
||||||
|
import { Feature } from "geojson"
|
||||||
|
import { Store, UIEventSource } from "../../UIEventSource"
|
||||||
|
|
||||||
|
export class IfVisibleFeatureSource<T extends Feature> implements FeatureSource<T> {
|
||||||
|
|
||||||
|
private readonly _features: UIEventSource<T[]> = new UIEventSource<T[]>([])
|
||||||
|
public readonly features: Store<T[]> = this._features
|
||||||
|
|
||||||
|
constructor(upstream: FeatureSource<T>, visible: Store<boolean>) {
|
||||||
|
|
||||||
|
let dirty = false
|
||||||
|
upstream.features.addCallbackAndRun(features => {
|
||||||
|
if (!visible.data) {
|
||||||
|
dirty = true
|
||||||
|
this._features.set([])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this._features.set(features)
|
||||||
|
dirty = false
|
||||||
|
})
|
||||||
|
|
||||||
|
visible.addCallbackAndRun(isVisible => {
|
||||||
|
if (isVisible && dirty) {
|
||||||
|
this._features.set(upstream.features.data)
|
||||||
|
dirty = false
|
||||||
|
}
|
||||||
|
if (!visible) {
|
||||||
|
this._features.set([])
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,24 +1,19 @@
|
||||||
import { Feature as GeojsonFeature, Geometry } from "geojson"
|
import { Feature, Feature as GeojsonFeature, Geometry } from "geojson"
|
||||||
|
|
||||||
import { Store, UIEventSource } from "../../UIEventSource"
|
import { Store, UIEventSource } from "../../UIEventSource"
|
||||||
import { FeatureSourceForTile, UpdatableFeatureSource } from "../FeatureSource"
|
import { FeatureSourceForTile, UpdatableFeatureSource } from "../FeatureSource"
|
||||||
import { MvtToGeojson } from "mvt-to-geojson"
|
import { MvtToGeojson } from "mvt-to-geojson"
|
||||||
|
import { OsmTags } from "../../../Models/OsmFeature"
|
||||||
|
|
||||||
export default class MvtSource implements FeatureSourceForTile, UpdatableFeatureSource {
|
export default class MvtSource implements FeatureSourceForTile, UpdatableFeatureSource {
|
||||||
public readonly features: Store<GeojsonFeature<Geometry, { [name: string]: any }>[]>
|
public readonly features: Store<GeojsonFeature<Geometry, OsmTags>[]>
|
||||||
public readonly x: number
|
public readonly x: number
|
||||||
public readonly y: number
|
public readonly y: number
|
||||||
public readonly z: number
|
public readonly z: number
|
||||||
private readonly _url: string
|
private readonly _url: string
|
||||||
private readonly _layerName: string
|
|
||||||
private readonly _features: UIEventSource<
|
private readonly _features: UIEventSource<
|
||||||
GeojsonFeature<
|
GeojsonFeature<Geometry, OsmTags>[]
|
||||||
Geometry,
|
> = new UIEventSource<GeojsonFeature<Geometry, OsmTags>[]>([])
|
||||||
{
|
|
||||||
[name: string]: any
|
|
||||||
}
|
|
||||||
>[]
|
|
||||||
> = new UIEventSource<GeojsonFeature<Geometry, { [p: string]: any }>[]>([])
|
|
||||||
private currentlyRunning: Promise<any>
|
private currentlyRunning: Promise<any>
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
|
@ -26,11 +21,9 @@ export default class MvtSource implements FeatureSourceForTile, UpdatableFeature
|
||||||
x: number,
|
x: number,
|
||||||
y: number,
|
y: number,
|
||||||
z: number,
|
z: number,
|
||||||
layerName?: string,
|
|
||||||
isActive?: Store<boolean>
|
isActive?: Store<boolean>
|
||||||
) {
|
) {
|
||||||
this._url = url
|
this._url = url
|
||||||
this._layerName = layerName
|
|
||||||
this.x = x
|
this.x = x
|
||||||
this.y = y
|
this.y = y
|
||||||
this.z = z
|
this.z = z
|
||||||
|
|
@ -61,7 +54,7 @@ export default class MvtSource implements FeatureSourceForTile, UpdatableFeature
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const buffer = await result.arrayBuffer()
|
const buffer = await result.arrayBuffer()
|
||||||
const features = MvtToGeojson.fromBuffer(buffer, this.x, this.y, this.z)
|
const features = <Feature<Geometry, OsmTags>[]>MvtToGeojson.fromBuffer(buffer, this.x, this.y, this.z)
|
||||||
for (const feature of features) {
|
for (const feature of features) {
|
||||||
const properties = feature.properties
|
const properties = feature.properties
|
||||||
if (!properties["osm_type"]) {
|
if (!properties["osm_type"]) {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ import { Utils } from "../../../Utils"
|
||||||
import { TagsFilter } from "../../Tags/TagsFilter"
|
import { TagsFilter } from "../../Tags/TagsFilter"
|
||||||
import { BBox } from "../../BBox"
|
import { BBox } from "../../BBox"
|
||||||
import { OsmTags } from "../../../Models/OsmFeature"
|
import { OsmTags } from "../../../Models/OsmFeature"
|
||||||
;("use strict")
|
|
||||||
|
("use strict")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A wrapper around the 'Overpass'-object.
|
* A wrapper around the 'Overpass'-object.
|
||||||
|
|
@ -138,7 +139,6 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
this.runningQuery.setData(true)
|
this.runningQuery.setData(true)
|
||||||
console.trace("Overpass feature source: querying geojson")
|
|
||||||
data = (await overpass.queryGeoJson(bounds))[0]
|
data = (await overpass.queryGeoJson(bounds))[0]
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.retries.data++
|
this.retries.data++
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,15 @@
|
||||||
import { UIEventSource } from "../../UIEventSource"
|
import { UIEventSource } from "../../UIEventSource"
|
||||||
import FilteredLayer from "../../../Models/FilteredLayer"
|
import FilteredLayer from "../../../Models/FilteredLayer"
|
||||||
import { FeatureSourceForLayer } from "../FeatureSource"
|
import { FeatureSourceForLayer } from "../FeatureSource"
|
||||||
import { Feature } from "geojson"
|
import { Feature, Geometry } from "geojson"
|
||||||
|
import { OsmTags } from "../../../Models/OsmFeature"
|
||||||
|
|
||||||
export default class SimpleFeatureSource implements FeatureSourceForLayer {
|
export default class SimpleFeatureSource<T extends Feature = Feature<Geometry, OsmTags>> implements FeatureSourceForLayer<T> {
|
||||||
public readonly features: UIEventSource<Feature[]>
|
public readonly features: UIEventSource<T[]>
|
||||||
public readonly layer: FilteredLayer
|
public readonly layer: FilteredLayer
|
||||||
|
|
||||||
constructor(layer: FilteredLayer, featureSource?: UIEventSource<Feature[]>) {
|
constructor(layer: FilteredLayer, featureSource?: UIEventSource<T[]>) {
|
||||||
this.layer = layer
|
this.layer = layer
|
||||||
this.features = featureSource ?? new UIEventSource<Feature[]>([])
|
this.features = featureSource ?? new UIEventSource<T[]>([])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,170 @@
|
||||||
|
import { FeatureSource } from "../FeatureSource"
|
||||||
|
import { Feature, Point } from "geojson"
|
||||||
|
import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource"
|
||||||
|
import { GeoOperations } from "../../GeoOperations"
|
||||||
|
import { Tiles } from "../../../Models/TileRange"
|
||||||
|
|
||||||
|
export interface ClusteringOptions {
|
||||||
|
/**
|
||||||
|
* If the zoomlevel is (strictly) above the specified value, don't cluster no matter how many features the tile contains.
|
||||||
|
*/
|
||||||
|
dontClusterAboveZoom?: number
|
||||||
|
/**
|
||||||
|
* If the number of features in a _tile_ is equal or more then this number,
|
||||||
|
* drop those features and emit a summary tile instead
|
||||||
|
*/
|
||||||
|
cutoff?: 20 | number
|
||||||
|
|
||||||
|
showSummaryAt?: "tilecenter" | "average"
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SummaryProperties {
|
||||||
|
id: string,
|
||||||
|
total: number,
|
||||||
|
tile_id: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ClusteringFeatureSource<T extends Feature<Point> = Feature<Point>> implements FeatureSource<T> {
|
||||||
|
|
||||||
|
private readonly id: string
|
||||||
|
private readonly showSummaryAt: "tilecenter" | "average"
|
||||||
|
features: Store<T[]>
|
||||||
|
|
||||||
|
/**
|
||||||
|
*The clustering feature source works _only_ on points and is a preprocessing step for the ShowDataLayer.
|
||||||
|
* If a tile contains many points, a 'summary' point is emitted instead in 'summaryPoints'.
|
||||||
|
* The points from the summary will _not_ be emitted in 'this.features' in that case.
|
||||||
|
*
|
||||||
|
* We ignore the polygons, as polygons get smaller when zoomed out and thus don't clutter the map too much
|
||||||
|
*/
|
||||||
|
constructor(upstream: FeatureSource<T>,
|
||||||
|
currentZoomlevel: Store<number>,
|
||||||
|
id: string,
|
||||||
|
options?: ClusteringOptions) {
|
||||||
|
this.id = id
|
||||||
|
this.showSummaryAt = options?.showSummaryAt ?? "average"
|
||||||
|
const clusterCutoff = options?.dontClusterAboveZoom ?? 17
|
||||||
|
const doCluster = options?.dontClusterAboveZoom === undefined ? new ImmutableStore(true) : currentZoomlevel.map(zoom => zoom <= clusterCutoff)
|
||||||
|
const cutoff = options?.cutoff ?? 20
|
||||||
|
const summaryPoints = new UIEventSource<Feature<Point, SummaryProperties>[]>([])
|
||||||
|
currentZoomlevel = currentZoomlevel.stabilized(500).map(z => Math.floor(z))
|
||||||
|
this.features = (upstream.features.map(features => {
|
||||||
|
if (!doCluster.data) {
|
||||||
|
summaryPoints.set([])
|
||||||
|
return features
|
||||||
|
}
|
||||||
|
|
||||||
|
const z = currentZoomlevel.data
|
||||||
|
const perTile = GeoOperations.spreadIntoBboxes(features, z)
|
||||||
|
const resultingFeatures = []
|
||||||
|
const summary: Feature<Point, SummaryProperties>[] = []
|
||||||
|
for (const tileIndex of perTile.keys()) {
|
||||||
|
const tileFeatures: Feature<Point>[] = perTile.get(tileIndex)
|
||||||
|
if (tileFeatures.length > cutoff) {
|
||||||
|
summary.push(this.createSummaryFeature(tileFeatures, tileIndex))
|
||||||
|
} else {
|
||||||
|
resultingFeatures.push(...tileFeatures)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
summaryPoints.set(summary)
|
||||||
|
return resultingFeatures
|
||||||
|
|
||||||
|
}, [doCluster, currentZoomlevel]))
|
||||||
|
|
||||||
|
ClusterGrouping.singleton.registerSource(summaryPoints)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private createSummaryFeature(features: Feature<Point>[], tileId: number): Feature<Point, SummaryProperties> {
|
||||||
|
|
||||||
|
let lon: number
|
||||||
|
let lat: number
|
||||||
|
const [z, x, y] = Tiles.tile_from_index(tileId)
|
||||||
|
if (this.showSummaryAt === "tilecenter") {
|
||||||
|
[lon, lat] = Tiles.centerPointOf(z, x, y)
|
||||||
|
} else {
|
||||||
|
let lonSum = 0
|
||||||
|
let latSum = 0
|
||||||
|
for (const feature of features) {
|
||||||
|
const [lon, lat] = feature.geometry.coordinates
|
||||||
|
lonSum += lon
|
||||||
|
latSum += lat
|
||||||
|
}
|
||||||
|
lon = lonSum / features.length
|
||||||
|
lat = latSum / features.length
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type: "Feature",
|
||||||
|
geometry: {
|
||||||
|
type: "Point",
|
||||||
|
coordinates: [lon, lat]
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
id: "summary_" + this.id + "_" + tileId,
|
||||||
|
tile_id: tileId,
|
||||||
|
total: features.length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Groups multiple summaries together
|
||||||
|
*/
|
||||||
|
export class ClusterGrouping implements FeatureSource<Feature<Point, { total_metric: string }>> {
|
||||||
|
private readonly _features: UIEventSource<Feature<Point, { total_metric: string }>[]> = new UIEventSource([])
|
||||||
|
public readonly features: Store<Feature<Point, { total_metric: string }>[]> = this._features
|
||||||
|
|
||||||
|
public static readonly singleton = new ClusterGrouping()
|
||||||
|
|
||||||
|
public readonly isDirty = new UIEventSource(false)
|
||||||
|
|
||||||
|
private constructor() {
|
||||||
|
this.isDirty.stabilized(200).addCallback(dirty => {
|
||||||
|
if (dirty) {
|
||||||
|
this.update()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private allSource: Store<Feature<Point, { total: number, tile_id: number }>[]>[] = []
|
||||||
|
|
||||||
|
private update() {
|
||||||
|
const countPerTile = new Map<number, number>()
|
||||||
|
for (const source of this.allSource) {
|
||||||
|
for (const f of source.data) {
|
||||||
|
const id = f.properties.tile_id
|
||||||
|
const count = f.properties.total + (countPerTile.get(id) ?? 0)
|
||||||
|
countPerTile.set(id, count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const features: Feature<Point, { total_metric: string, id: string }>[] = []
|
||||||
|
const now = new Date().getTime() + ""
|
||||||
|
for (const tileId of countPerTile.keys()) {
|
||||||
|
const coordinates = Tiles.centerPointOf(tileId)
|
||||||
|
features.push({
|
||||||
|
type: "Feature",
|
||||||
|
properties: {
|
||||||
|
total_metric: "" + countPerTile.get(tileId),
|
||||||
|
id: "clustered_all_" + tileId + "_" + now // We add the date to force a fresh ID every time, this makes sure values are updated
|
||||||
|
},
|
||||||
|
geometry: {
|
||||||
|
type: "Point",
|
||||||
|
coordinates
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this._features.set(features)
|
||||||
|
this.isDirty.set(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
public registerSource(features: Store<Feature<Point, SummaryProperties>[]>) {
|
||||||
|
this.allSource.push(features)
|
||||||
|
features.addCallbackAndRun(() => {
|
||||||
|
//this.isDirty.set(true)
|
||||||
|
this.update()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import DynamicTileSource from "./DynamicTileSource"
|
import DynamicTileSource from "./DynamicTileSource"
|
||||||
import { Store, UIEventSource } from "../../UIEventSource"
|
import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource"
|
||||||
import { BBox } from "../../BBox"
|
import { BBox } from "../../BBox"
|
||||||
import StaticFeatureSource from "../Sources/StaticFeatureSource"
|
import StaticFeatureSource from "../Sources/StaticFeatureSource"
|
||||||
import { Feature, Point } from "geojson"
|
import { Feature, Point } from "geojson"
|
||||||
|
|
@ -20,7 +20,7 @@ export class SummaryTileSourceRewriter implements FeatureSource {
|
||||||
public readonly totalNumberOfFeatures: Store<number> = this._totalNumberOfFeatures
|
public readonly totalNumberOfFeatures: Store<number> = this._totalNumberOfFeatures
|
||||||
constructor(
|
constructor(
|
||||||
summarySource: SummaryTileSource,
|
summarySource: SummaryTileSource,
|
||||||
filteredLayers: ReadonlyMap<string, FilteredLayer>
|
filteredLayers: ReadonlyMap<string, FilteredLayer>,
|
||||||
) {
|
) {
|
||||||
this.filteredLayers = Array.from(filteredLayers.values()).filter(
|
this.filteredLayers = Array.from(filteredLayers.values()).filter(
|
||||||
(l) => !Constants.isPriviliged(l.layerDef)
|
(l) => !Constants.isPriviliged(l.layerDef)
|
||||||
|
|
@ -73,11 +73,18 @@ export class SummaryTileSource extends DynamicTileSource {
|
||||||
zoom: Store<number>
|
zoom: Store<number>
|
||||||
},
|
},
|
||||||
options?: {
|
options?: {
|
||||||
isActive?: Store<boolean>
|
isActive?: Store<boolean>,
|
||||||
|
availableLayers?: Store<Set<string>>
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const layersSummed = layers.join("+")
|
|
||||||
const zDiff = 2
|
const zDiff = 2
|
||||||
|
const layersSummed = (options?.availableLayers??new ImmutableStore(undefined)).map(available => {
|
||||||
|
console.log("Determining 'layersSummed' with currently available:", available)
|
||||||
|
if(available === undefined){
|
||||||
|
return layers.join("+")
|
||||||
|
}
|
||||||
|
return layers.filter(l => available.has(l)).join("+")
|
||||||
|
})
|
||||||
super(
|
super(
|
||||||
zoomRounded,
|
zoomRounded,
|
||||||
0, // minzoom
|
0, // minzoom
|
||||||
|
|
@ -85,7 +92,7 @@ export class SummaryTileSource extends DynamicTileSource {
|
||||||
const features = SummaryTileSource.downloadTile(
|
const features = SummaryTileSource.downloadTile(
|
||||||
tileIndex,
|
tileIndex,
|
||||||
cacheserver,
|
cacheserver,
|
||||||
layersSummed
|
layersSummed.data
|
||||||
)
|
)
|
||||||
const [z] = Tiles.tile_from_index(tileIndex)
|
const [z] = Tiles.tile_from_index(tileIndex)
|
||||||
return new StaticFeatureSource(
|
return new StaticFeatureSource(
|
||||||
|
|
@ -110,6 +117,9 @@ export class SummaryTileSource extends DynamicTileSource {
|
||||||
cacheserver: string,
|
cacheserver: string,
|
||||||
layersSummed: string
|
layersSummed: string
|
||||||
): Store<Feature<Point>[]> {
|
): Store<Feature<Point>[]> {
|
||||||
|
if(layersSummed === ""){
|
||||||
|
return new ImmutableStore([])
|
||||||
|
}
|
||||||
const [z, x, y] = Tiles.tile_from_index(tileIndex)
|
const [z, x, y] = Tiles.tile_from_index(tileIndex)
|
||||||
let coordinates = Tiles.centerPointOf(z, x, y)
|
let coordinates = Tiles.centerPointOf(z, x, y)
|
||||||
const url = `${cacheserver}/summary/${layersSummed}/${z}/${x}/${y}.json`
|
const url = `${cacheserver}/summary/${layersSummed}/${z}/${x}/${y}.json`
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,12 @@ import {
|
||||||
MultiPolygon,
|
MultiPolygon,
|
||||||
Point,
|
Point,
|
||||||
Polygon,
|
Polygon,
|
||||||
Position,
|
Position
|
||||||
} from "geojson"
|
} from "geojson"
|
||||||
import { Tiles } from "../Models/TileRange"
|
import { Tiles } from "../Models/TileRange"
|
||||||
import { Utils } from "../Utils"
|
import { Utils } from "../Utils"
|
||||||
;("use strict")
|
|
||||||
|
("use strict")
|
||||||
|
|
||||||
export class GeoOperations {
|
export class GeoOperations {
|
||||||
private static readonly _earthRadius: number = 6378137
|
private static readonly _earthRadius: number = 6378137
|
||||||
|
|
@ -536,10 +537,23 @@ export class GeoOperations {
|
||||||
* @param features
|
* @param features
|
||||||
* @param zoomlevel
|
* @param zoomlevel
|
||||||
*/
|
*/
|
||||||
public static spreadIntoBboxes(features: Feature[], zoomlevel: number): Map<number, Feature[]> {
|
public static spreadIntoBboxes<T extends Feature = Feature>(features: T[], zoomlevel: number): Map<number, T[]> {
|
||||||
const perBbox = new Map<number, Feature[]>()
|
const perBbox = new Map<number, T[]>()
|
||||||
|
const z = zoomlevel
|
||||||
for (const feature of features) {
|
for (const feature of features) {
|
||||||
|
if (feature.geometry.type === "Point") {
|
||||||
|
const [lon, lat] = feature.geometry.coordinates
|
||||||
|
const tileXYZ = Tiles.embedded_tile(lat, lon, z)
|
||||||
|
const tileNumber = Tiles.tile_index(z, tileXYZ.x, tileXYZ.y)
|
||||||
|
let newFeatureList = perBbox.get(tileNumber)
|
||||||
|
if (newFeatureList === undefined) {
|
||||||
|
newFeatureList = []
|
||||||
|
perBbox.set(tileNumber, newFeatureList)
|
||||||
|
}
|
||||||
|
newFeatureList.push(feature)
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
const bbox = BBox.get(feature)
|
const bbox = BBox.get(feature)
|
||||||
const tilerange = bbox.expandToTileBounds(zoomlevel).containingTileRange(zoomlevel)
|
const tilerange = bbox.expandToTileBounds(zoomlevel).containingTileRange(zoomlevel)
|
||||||
Tiles.MapRange(tilerange, (x, y) => {
|
Tiles.MapRange(tilerange, (x, y) => {
|
||||||
|
|
|
||||||
|
|
@ -369,7 +369,7 @@ export default class UserRelatedState {
|
||||||
|
|
||||||
private static initUserSettingsState(): LayerConfig {
|
private static initUserSettingsState(): LayerConfig {
|
||||||
try {
|
try {
|
||||||
return new LayerConfig(<LayerConfigJson>usersettings, "userinformationpanel")
|
return new LayerConfig(<LayerConfigJson><any>usersettings, "userinformationpanel")
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
@ -655,7 +655,7 @@ export default class UserRelatedState {
|
||||||
|
|
||||||
for (const key in featureSwitches) {
|
for (const key in featureSwitches) {
|
||||||
if (featureSwitches[key].addCallbackAndRun) {
|
if (featureSwitches[key].addCallbackAndRun) {
|
||||||
featureSwitches[key].addCallbackAndRun((v) => {
|
featureSwitches[key].addCallbackAndRun((v: string) => {
|
||||||
const oldV = amendedPrefs.data["__" + key]
|
const oldV = amendedPrefs.data["__" + key]
|
||||||
if (oldV === v) {
|
if (oldV === v) {
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,17 @@ import { Utils } from "../../Utils"
|
||||||
import { Feature, Position } from "geojson"
|
import { Feature, Position } from "geojson"
|
||||||
import { GeoOperations } from "../GeoOperations"
|
import { GeoOperations } from "../GeoOperations"
|
||||||
import { SpecialVisualizationState } from "../../UI/SpecialVisualization"
|
import { SpecialVisualizationState } from "../../UI/SpecialVisualization"
|
||||||
|
import { WithUserRelatedState } from "../../Models/ThemeViewState/WithUserRelatedState"
|
||||||
|
|
||||||
|
export interface ReviewCollection {
|
||||||
|
readonly subjectUri?: Store<string>
|
||||||
|
readonly loadingAllowed: UIEventSource<boolean>
|
||||||
|
removeReviewLocally(review: Review): void
|
||||||
|
|
||||||
|
deleteReview(review: Review & { signature: string }): Promise<void>
|
||||||
|
|
||||||
|
createReview(review: Omit<Review, "sub">): Promise<void>
|
||||||
|
}
|
||||||
|
|
||||||
export class MangroveIdentity {
|
export class MangroveIdentity {
|
||||||
private readonly keypair: UIEventSource<CryptoKeyPair> = new UIEventSource<CryptoKeyPair>(
|
private readonly keypair: UIEventSource<CryptoKeyPair> = new UIEventSource<CryptoKeyPair>(
|
||||||
|
|
@ -134,12 +145,13 @@ export class MangroveIdentity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tracks all reviews of a given feature, allows to create a new review (and inserts this into the list)
|
* Tracks all reviews of a given feature, allows to create a new review (and inserts this into the list)
|
||||||
*
|
*
|
||||||
* This object will start fetching the reviews as soon as it is constructed
|
* This object will start fetching the reviews as soon as it is constructed
|
||||||
*/
|
*/
|
||||||
export default class FeatureReviews {
|
export default class FeatureReviews implements ReviewCollection {
|
||||||
/**
|
/**
|
||||||
* See https://gitlab.com/open-reviews/mangrove/-/blob/master/servers/reviewer/src/review.rs#L269 and https://source.mapcomplete.org/MapComplete/MapComplete/issues/1775
|
* See https://gitlab.com/open-reviews/mangrove/-/blob/master/servers/reviewer/src/review.rs#L269 and https://source.mapcomplete.org/MapComplete/MapComplete/issues/1775
|
||||||
*/
|
*/
|
||||||
|
|
@ -147,10 +159,11 @@ export default class FeatureReviews {
|
||||||
private static readonly _featureReviewsCache: Record<string, FeatureReviews> = {}
|
private static readonly _featureReviewsCache: Record<string, FeatureReviews> = {}
|
||||||
public readonly subjectUri: Store<string>
|
public readonly subjectUri: Store<string>
|
||||||
public readonly average: Store<number | null>
|
public readonly average: Store<number | null>
|
||||||
|
public readonly loadingAllowed: UIEventSource<boolean>
|
||||||
private readonly _reviews: UIEventSource<
|
private readonly _reviews: UIEventSource<
|
||||||
(Review & { kid: string; signature: string; madeByLoggedInUser: Store<boolean> })[]
|
(Review & { kid: string; signature: string; madeByLoggedInUser: Store<boolean> })[]
|
||||||
> = new UIEventSource(undefined)
|
> = new UIEventSource(undefined)
|
||||||
public readonly reviews: Store<(Review & { signature: string, madeByLoggedInUser: Store<boolean> })[]> =
|
public readonly reviews: Store<(Review & { kid: string, signature: string, madeByLoggedInUser: Store<boolean> })[]> =
|
||||||
this._reviews
|
this._reviews
|
||||||
private readonly _lat: number
|
private readonly _lat: number
|
||||||
private readonly _lon: number
|
private readonly _lon: number
|
||||||
|
|
@ -158,23 +171,21 @@ export default class FeatureReviews {
|
||||||
private readonly _name: Store<string>
|
private readonly _name: Store<string>
|
||||||
private readonly _identity: MangroveIdentity
|
private readonly _identity: MangroveIdentity
|
||||||
private readonly _testmode: Store<boolean>
|
private readonly _testmode: Store<boolean>
|
||||||
public readonly loadingAllowed: UIEventSource<boolean | null>
|
|
||||||
private readonly _reportError: (msg: string, extra: string) => Promise<void>
|
private readonly _reportError: (msg: string, extra: string) => Promise<void>
|
||||||
|
|
||||||
private constructor(
|
private constructor(
|
||||||
feature: Feature,
|
feature: Feature,
|
||||||
tagsSource: UIEventSource<Record<string, string>>,
|
tagsSource: UIEventSource<Record<string, string>>,
|
||||||
mangroveIdentity: MangroveIdentity,
|
mangroveIdentity: MangroveIdentity,
|
||||||
|
loadingAllowed?: UIEventSource<boolean>,
|
||||||
options?: Readonly<{
|
options?: Readonly<{
|
||||||
nameKey?: "name" | string
|
nameKey?: "name" | string
|
||||||
fallbackName?: string
|
fallbackName?: string
|
||||||
uncertaintyRadius?: number
|
uncertaintyRadius?: number,
|
||||||
}>,
|
}>,
|
||||||
testmode?: Store<boolean>,
|
testmode?: Store<boolean>,
|
||||||
loadingAllowed?: UIEventSource<boolean | null>,
|
|
||||||
reportError?: (msg: string, extra: string) => Promise<void>
|
reportError?: (msg: string, extra: string) => Promise<void>
|
||||||
) {
|
) {
|
||||||
this.loadingAllowed = loadingAllowed
|
|
||||||
this._reportError = reportError
|
this._reportError = reportError
|
||||||
const centerLonLat = GeoOperations.centerpointCoordinates(feature)
|
const centerLonLat = GeoOperations.centerpointCoordinates(feature)
|
||||||
;[this._lon, this._lat] = centerLonLat
|
;[this._lon, this._lat] = centerLonLat
|
||||||
|
|
@ -221,14 +232,17 @@ export default class FeatureReviews {
|
||||||
})
|
})
|
||||||
|
|
||||||
this.subjectUri = this.ConstructSubjectUri()
|
this.subjectUri = this.ConstructSubjectUri()
|
||||||
|
this.loadingAllowed = loadingAllowed
|
||||||
this.subjectUri.mapD(
|
this.subjectUri.mapD(
|
||||||
async (sub) => {
|
async (sub) => {
|
||||||
|
if (!loadingAllowed.data) {
|
||||||
|
return
|
||||||
|
}
|
||||||
const reviews = await MangroveReviews.getReviews({ sub })
|
const reviews = await MangroveReviews.getReviews({ sub })
|
||||||
console.debug("Got reviews for", feature, reviews, sub)
|
console.debug("Got reviews for", feature, reviews, sub)
|
||||||
this.addReviews(reviews.reviews, this._name.data)
|
this.addReviews(reviews.reviews, this._name.data)
|
||||||
},
|
},
|
||||||
[this._name]
|
[this._name, loadingAllowed]
|
||||||
)
|
)
|
||||||
/* We also construct all subject queries _without_ encoding the name to work around a previous bug
|
/* We also construct all subject queries _without_ encoding the name to work around a previous bug
|
||||||
* See https://github.com/giggls/opencampsitemap/issues/30
|
* See https://github.com/giggls/opencampsitemap/issues/30
|
||||||
|
|
@ -267,6 +281,7 @@ export default class FeatureReviews {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a featureReviewsFor or fetches it from the cache
|
* Construct a featureReviewsFor or fetches it from the cache
|
||||||
*
|
*
|
||||||
|
|
@ -288,7 +303,7 @@ export default class FeatureReviews {
|
||||||
tagsSource: UIEventSource<Record<string, string>>,
|
tagsSource: UIEventSource<Record<string, string>>,
|
||||||
mangroveIdentity: MangroveIdentity,
|
mangroveIdentity: MangroveIdentity,
|
||||||
options: { nameKey: string; fallbackName: string },
|
options: { nameKey: string; fallbackName: string },
|
||||||
state?: SpecialVisualizationState
|
state?: SpecialVisualizationState & WithUserRelatedState,
|
||||||
): FeatureReviews {
|
): FeatureReviews {
|
||||||
const key =
|
const key =
|
||||||
feature.properties.id +
|
feature.properties.id +
|
||||||
|
|
@ -300,34 +315,14 @@ export default class FeatureReviews {
|
||||||
if (cached !== undefined) {
|
if (cached !== undefined) {
|
||||||
return cached
|
return cached
|
||||||
}
|
}
|
||||||
const themeIsSensitive = state?.theme?.enableMorePrivacy ?? false
|
|
||||||
const settings =
|
|
||||||
state?.osmConnection?.getPreference<"always" | "yes" | "ask" | "hidden">(
|
|
||||||
"reviews-allowed"
|
|
||||||
) ?? new ImmutableStore("yes")
|
|
||||||
const loadingAllowed = new UIEventSource(false)
|
|
||||||
settings.addCallbackAndRun((s) => {
|
|
||||||
if (s === "hidden") {
|
|
||||||
loadingAllowed.set(null)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (s === "always") {
|
|
||||||
loadingAllowed.set(true)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (themeIsSensitive || s === "ask") {
|
|
||||||
loadingAllowed.set(false)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
loadingAllowed.set(true)
|
|
||||||
})
|
|
||||||
const featureReviews = new FeatureReviews(
|
const featureReviews = new FeatureReviews(
|
||||||
feature,
|
feature,
|
||||||
tagsSource,
|
tagsSource,
|
||||||
mangroveIdentity,
|
mangroveIdentity,
|
||||||
|
new UIEventSource(state?.loadReviews?.data ?? true),
|
||||||
options,
|
options,
|
||||||
state?.featureSwitchIsTesting,
|
state?.featureSwitchIsTesting,
|
||||||
loadingAllowed,
|
|
||||||
(msg, extra) => state?.reportError(msg, extra)
|
(msg, extra) => state?.reportError(msg, extra)
|
||||||
)
|
)
|
||||||
FeatureReviews._featureReviewsCache[key] = featureReviews
|
FeatureReviews._featureReviewsCache[key] = featureReviews
|
||||||
|
|
@ -458,7 +453,7 @@ export default class FeatureReviews {
|
||||||
this.removeReviewLocally(review)
|
this.removeReviewLocally(review)
|
||||||
}
|
}
|
||||||
|
|
||||||
public removeReviewLocally(review: Review){
|
public removeReviewLocally(review: Review): void {
|
||||||
this._reviews.set(
|
this._reviews.set(
|
||||||
this._reviews.data?.filter(r => r !== review)
|
this._reviews.data?.filter(r => r !== review)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,11 @@ export class IconConfig extends WithContextLoader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const allowed_location_codes = ["point", "centroid", "start", "end", "projected_centerpoint", "polygon_centroid", "waypoints"] as const
|
||||||
|
export type PointRenderingLocation = typeof allowed_location_codes[number]
|
||||||
|
|
||||||
export default class PointRenderingConfig extends WithContextLoader {
|
export default class PointRenderingConfig extends WithContextLoader {
|
||||||
static readonly allowed_location_codes: ReadonlySet<string> = new Set<string>([
|
static readonly allowed_location_codes_set: ReadonlySet<PointRenderingLocation> = new Set<PointRenderingLocation>([
|
||||||
"point",
|
"point",
|
||||||
"centroid",
|
"centroid",
|
||||||
"start",
|
"start",
|
||||||
|
|
@ -41,16 +44,7 @@ export default class PointRenderingConfig extends WithContextLoader {
|
||||||
"polygon_centroid",
|
"polygon_centroid",
|
||||||
"waypoints",
|
"waypoints",
|
||||||
])
|
])
|
||||||
public readonly location: Set<
|
public readonly location: Set<PointRenderingLocation>
|
||||||
| "point"
|
|
||||||
| "centroid"
|
|
||||||
| "start"
|
|
||||||
| "end"
|
|
||||||
| "projected_centerpoint"
|
|
||||||
| "polygon_centroid"
|
|
||||||
| "waypoints"
|
|
||||||
| string
|
|
||||||
>
|
|
||||||
|
|
||||||
public readonly marker: IconConfig[]
|
public readonly marker: IconConfig[]
|
||||||
public readonly iconBadges: { if: TagsFilter; then: TagRenderingConfig }[]
|
public readonly iconBadges: { if: TagsFilter; then: TagRenderingConfig }[]
|
||||||
|
|
@ -77,10 +71,10 @@ export default class PointRenderingConfig extends WithContextLoader {
|
||||||
json.location = [json.location]
|
json.location = [json.location]
|
||||||
}
|
}
|
||||||
|
|
||||||
this.location = new Set(json.location)
|
this.location = new Set(<PointRenderingLocation[]>json.location)
|
||||||
|
|
||||||
this.location.forEach((l) => {
|
this.location.forEach((l) => {
|
||||||
const allowed = PointRenderingConfig.allowed_location_codes
|
const allowed = PointRenderingConfig.allowed_location_codes_set
|
||||||
if (!allowed.has(l)) {
|
if (!allowed.has(l)) {
|
||||||
throw `A point rendering has an invalid location: '${l}' is not one of ${Array.from(
|
throw `A point rendering has an invalid location: '${l}' is not one of ${Array.from(
|
||||||
allowed
|
allowed
|
||||||
|
|
@ -313,10 +307,9 @@ export default class PointRenderingConfig extends WithContextLoader {
|
||||||
}
|
}
|
||||||
const cssLabel = this.labelCss?.GetRenderValue(tags.data)?.txt
|
const cssLabel = this.labelCss?.GetRenderValue(tags.data)?.txt
|
||||||
const cssClassesLabel = this.labelCssClasses?.GetRenderValue(tags.data)?.txt
|
const cssClassesLabel = this.labelCssClasses?.GetRenderValue(tags.data)?.txt
|
||||||
const self = this
|
|
||||||
return new VariableUiElement(
|
return new VariableUiElement(
|
||||||
tags.map((tags) => {
|
tags.map((tags) => {
|
||||||
const label = self.label
|
const label = this.label
|
||||||
?.GetRenderValue(tags)
|
?.GetRenderValue(tags)
|
||||||
?.Subs(tags)
|
?.Subs(tags)
|
||||||
?.SetClass("flex items-center justify-center absolute marker-label")
|
?.SetClass("flex items-center justify-center absolute marker-label")
|
||||||
|
|
|
||||||
|
|
@ -255,27 +255,4 @@ export class UserMapFeatureswitchState extends WithUserRelatedState {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Shows the current GPS-location marker on the given map.
|
|
||||||
* This is used to show the location on _other_ maps, e.g. on the map to add a new feature.
|
|
||||||
*
|
|
||||||
* This is _NOT_ to be used on the main map!
|
|
||||||
*/
|
|
||||||
public showCurrentLocationOn(map: Store<MlMap>) {
|
|
||||||
const id = "gps_location"
|
|
||||||
const layer = this.theme.getLayer(id)
|
|
||||||
if (layer === undefined) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (map === this.map) {
|
|
||||||
throw "Invalid use of showCurrentLocationOn"
|
|
||||||
}
|
|
||||||
const features = this.geolocation.currentUserLocation
|
|
||||||
return new ShowDataLayer(map, {
|
|
||||||
features,
|
|
||||||
layer,
|
|
||||||
metaTags: this.userRelatedState.preferencesAsTags,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import { Changes } from "../../Logic/Osm/Changes"
|
import { Changes } from "../../Logic/Osm/Changes"
|
||||||
import { NewGeometryFromChangesFeatureSource } from "../../Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource"
|
import {
|
||||||
|
NewGeometryFromChangesFeatureSource
|
||||||
|
} from "../../Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource"
|
||||||
import { WithLayoutSourceState } from "./WithLayoutSourceState"
|
import { WithLayoutSourceState } from "./WithLayoutSourceState"
|
||||||
import ThemeConfig from "../ThemeConfig/ThemeConfig"
|
import ThemeConfig from "../ThemeConfig/ThemeConfig"
|
||||||
import { Utils } from "../../Utils"
|
import { Utils } from "../../Utils"
|
||||||
|
|
@ -18,9 +20,7 @@ import { Map as MlMap } from "maplibre-gl"
|
||||||
import FilteringFeatureSource from "../../Logic/FeatureSource/Sources/FilteringFeatureSource"
|
import FilteringFeatureSource from "../../Logic/FeatureSource/Sources/FilteringFeatureSource"
|
||||||
import ShowDataLayer from "../../UI/Map/ShowDataLayer"
|
import ShowDataLayer from "../../UI/Map/ShowDataLayer"
|
||||||
import SelectedElementTagsUpdater from "../../Logic/Actors/SelectedElementTagsUpdater"
|
import SelectedElementTagsUpdater from "../../Logic/Actors/SelectedElementTagsUpdater"
|
||||||
import NoElementsInViewDetector, {
|
import NoElementsInViewDetector, { FeatureViewState } from "../../Logic/Actors/NoElementsInViewDetector"
|
||||||
FeatureViewState,
|
|
||||||
} from "../../Logic/Actors/NoElementsInViewDetector"
|
|
||||||
|
|
||||||
export class WithChangesState extends WithLayoutSourceState {
|
export class WithChangesState extends WithLayoutSourceState {
|
||||||
readonly changes: Changes
|
readonly changes: Changes
|
||||||
|
|
@ -219,14 +219,24 @@ export class WithChangesState extends WithLayoutSourceState {
|
||||||
)
|
)
|
||||||
filteringFeatureSource.set(layerName, filtered)
|
filteringFeatureSource.set(layerName, filtered)
|
||||||
|
|
||||||
new ShowDataLayer(map, {
|
ShowDataLayer.showLayerClustered(map,
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
layer: fs.layer.layerDef,
|
||||||
|
features: filtered,
|
||||||
|
doShowLayer,
|
||||||
|
metaTags: this.userRelatedState.preferencesAsTags,
|
||||||
|
selectedElement: this.selectedElement,
|
||||||
|
fetchStore: (id) => this.featureProperties.getStore(id)
|
||||||
|
})
|
||||||
|
/*new ShowDataLayer(map, {
|
||||||
layer: fs.layer.layerDef,
|
layer: fs.layer.layerDef,
|
||||||
features: filtered,
|
features: filtered,
|
||||||
doShowLayer,
|
doShowLayer,
|
||||||
metaTags: this.userRelatedState.preferencesAsTags,
|
metaTags: this.userRelatedState.preferencesAsTags,
|
||||||
selectedElement: this.selectedElement,
|
selectedElement: this.selectedElement,
|
||||||
fetchStore: (id) => this.featureProperties.getStore(id),
|
fetchStore: (id) => this.featureProperties.getStore(id),
|
||||||
})
|
})*/
|
||||||
})
|
})
|
||||||
return filteringFeatureSource
|
return filteringFeatureSource
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,12 +18,14 @@ import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||||
import NearbyFeatureSource from "../../Logic/FeatureSource/Sources/NearbyFeatureSource"
|
import NearbyFeatureSource from "../../Logic/FeatureSource/Sources/NearbyFeatureSource"
|
||||||
import {
|
import {
|
||||||
SummaryTileSource,
|
SummaryTileSource,
|
||||||
SummaryTileSourceRewriter,
|
SummaryTileSourceRewriter
|
||||||
} from "../../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource"
|
} from "../../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource"
|
||||||
import { ShowDataLayerOptions } from "../../UI/Map/ShowDataLayerOptions"
|
import { ShowDataLayerOptions } from "../../UI/Map/ShowDataLayerOptions"
|
||||||
|
import { ClusterGrouping } from "../../Logic/FeatureSource/TiledFeatureSource/ClusteringFeatureSource"
|
||||||
|
|
||||||
export class WithSpecialLayers extends WithChangesState {
|
export class WithSpecialLayers extends WithChangesState {
|
||||||
readonly favourites: FavouritesFeatureSource
|
readonly favourites: FavouritesFeatureSource
|
||||||
|
private mvtAvailableLayers: Store<Set<string>>
|
||||||
/**
|
/**
|
||||||
* When hovering (in the popup) an image, the location of the image will be revealed on the main map.
|
* When hovering (in the popup) an image, the location of the image will be revealed on the main map.
|
||||||
* This store contains those images that should be shown, probably only the currently hovered image
|
* This store contains those images that should be shown, probably only the currently hovered image
|
||||||
|
|
@ -43,6 +45,7 @@ export class WithSpecialLayers extends WithChangesState {
|
||||||
|
|
||||||
constructor(theme: ThemeConfig, mvtAvailableLayers: Store<Set<string>>) {
|
constructor(theme: ThemeConfig, mvtAvailableLayers: Store<Set<string>>) {
|
||||||
super(theme, mvtAvailableLayers)
|
super(theme, mvtAvailableLayers)
|
||||||
|
this.mvtAvailableLayers = mvtAvailableLayers
|
||||||
|
|
||||||
this.favourites = new FavouritesFeatureSource(this)
|
this.favourites = new FavouritesFeatureSource(this)
|
||||||
|
|
||||||
|
|
@ -61,6 +64,7 @@ export class WithSpecialLayers extends WithChangesState {
|
||||||
this.closestFeatures.registerSource(this.favourites, "favourite")
|
this.closestFeatures.registerSource(this.favourites, "favourite")
|
||||||
|
|
||||||
this.featureSummary = this.setupSummaryLayer()
|
this.featureSummary = this.setupSummaryLayer()
|
||||||
|
this.setupClusterLayer()
|
||||||
this.initActorsSpecialLayers()
|
this.initActorsSpecialLayers()
|
||||||
this.drawSelectedElement()
|
this.drawSelectedElement()
|
||||||
this.drawSpecialLayers()
|
this.drawSpecialLayers()
|
||||||
|
|
@ -111,6 +115,7 @@ export class WithSpecialLayers extends WithChangesState {
|
||||||
this.mapProperties,
|
this.mapProperties,
|
||||||
{
|
{
|
||||||
isActive: this.mapProperties.zoom.map((z) => z < maxzoom),
|
isActive: this.mapProperties.zoom.map((z) => z < maxzoom),
|
||||||
|
availableLayers: this.mvtAvailableLayers
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -128,6 +133,18 @@ export class WithSpecialLayers extends WithChangesState {
|
||||||
return source
|
return source
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On high zoom levels, the clusters will be gathered in the GroupClustering.
|
||||||
|
* This method is responsible for drawing it
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private setupClusterLayer(): void {
|
||||||
|
new ShowDataLayer(this.map, {
|
||||||
|
features: ClusterGrouping.singleton,
|
||||||
|
layer: new LayerConfig(<LayerConfigJson>(<unknown>summaryLayer), "summaryLayer")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
protected registerSpecialLayer(flayer: FilteredLayer, source: FeatureSource) {
|
protected registerSpecialLayer(flayer: FilteredLayer, source: FeatureSource) {
|
||||||
if (!source?.features) {
|
if (!source?.features) {
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import { OsmConnection } from "../../Logic/Osm/OsmConnection"
|
||||||
import UserRelatedState from "../../Logic/State/UserRelatedState"
|
import UserRelatedState from "../../Logic/State/UserRelatedState"
|
||||||
import { QueryParameters } from "../../Logic/Web/QueryParameters"
|
import { QueryParameters } from "../../Logic/Web/QueryParameters"
|
||||||
import FeatureSwitchState from "../../Logic/State/FeatureSwitchState"
|
import FeatureSwitchState from "../../Logic/State/FeatureSwitchState"
|
||||||
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||||
import LayerConfig from "../ThemeConfig/LayerConfig"
|
import LayerConfig from "../ThemeConfig/LayerConfig"
|
||||||
import { LastClickFeatureSource } from "../../Logic/FeatureSource/Sources/LastClickFeatureSource"
|
import { LastClickFeatureSource } from "../../Logic/FeatureSource/Sources/LastClickFeatureSource"
|
||||||
import { GeocodingUtils } from "../../Logic/Search/GeocodingProvider"
|
import { GeocodingUtils } from "../../Logic/Search/GeocodingProvider"
|
||||||
|
|
@ -18,6 +18,9 @@ export class WithUserRelatedState {
|
||||||
|
|
||||||
readonly osmConnection: OsmConnection
|
readonly osmConnection: OsmConnection
|
||||||
readonly userRelatedState: UserRelatedState
|
readonly userRelatedState: UserRelatedState
|
||||||
|
readonly loadReviews: Store<boolean>
|
||||||
|
|
||||||
|
|
||||||
readonly overlayLayerStates: ReadonlyMap<
|
readonly overlayLayerStates: ReadonlyMap<
|
||||||
string,
|
string,
|
||||||
{ readonly isDisplayed: UIEventSource<boolean> }
|
{ readonly isDisplayed: UIEventSource<boolean> }
|
||||||
|
|
@ -62,6 +65,7 @@ export class WithUserRelatedState {
|
||||||
this.featureSwitches,
|
this.featureSwitches,
|
||||||
rasterLayer
|
rasterLayer
|
||||||
)
|
)
|
||||||
|
this.loadReviews = this.constructIsLoadingReviewsAllowed()
|
||||||
|
|
||||||
if (!this.theme.official) {
|
if (!this.theme.official) {
|
||||||
// Add custom themes to the "visited custom themes"
|
// Add custom themes to the "visited custom themes"
|
||||||
|
|
@ -113,4 +117,31 @@ export class WithUserRelatedState {
|
||||||
}
|
}
|
||||||
return this.theme.getMatchingLayer(properties)
|
return this.theme.getMatchingLayer(properties)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private constructIsLoadingReviewsAllowed() : UIEventSource<boolean>{
|
||||||
|
const loadingAllowed = new UIEventSource(false)
|
||||||
|
|
||||||
|
const themeIsSensitive = this.theme?.enableMorePrivacy ?? false
|
||||||
|
const settings =
|
||||||
|
this?.osmConnection?.getPreference<"always" | "yes" | "ask" | "hidden">(
|
||||||
|
"reviews-allowed",
|
||||||
|
) ?? new ImmutableStore("yes")
|
||||||
|
settings.addCallbackAndRun((s) => {
|
||||||
|
if (s === "hidden") {
|
||||||
|
loadingAllowed.set(null)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (s === "always") {
|
||||||
|
loadingAllowed.set(true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (themeIsSensitive || s === "ask") {
|
||||||
|
loadingAllowed.set(false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
loadingAllowed.set(true)
|
||||||
|
})
|
||||||
|
return loadingAllowed
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,20 @@ export class Tiles {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the centerpoint [lon, lat] of the specified tile
|
* Returns the centerpoint [lon, lat] of the specified tile
|
||||||
* @param z
|
* @param z OR tileId
|
||||||
* @param x
|
* @param x
|
||||||
* @param y
|
* @param y
|
||||||
*/
|
*/
|
||||||
static centerPointOf(z: number, x: number, y: number): [number, number] {
|
static centerPointOf(z: number, x: number, y: number): [number, number] ;
|
||||||
|
static centerPointOf(tileId: number): [number, number] ;
|
||||||
|
|
||||||
|
static centerPointOf(zOrId: number, x?: number, y?: number): [number, number] {
|
||||||
|
let z: number
|
||||||
|
if (x === undefined) {
|
||||||
|
[z, x, y] = Tiles.tile_from_index(zOrId)
|
||||||
|
} else {
|
||||||
|
z = zOrId
|
||||||
|
}
|
||||||
return [
|
return [
|
||||||
(Tiles.tile2long(x, z) + Tiles.tile2long(x + 1, z)) / 2,
|
(Tiles.tile2long(x, z) + Tiles.tile2long(x + 1, z)) / 2,
|
||||||
(Tiles.tile2lat(y, z) + Tiles.tile2lat(y + 1, z)) / 2,
|
(Tiles.tile2lat(y, z) + Tiles.tile2lat(y + 1, z)) / 2,
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,8 @@
|
||||||
</DrawerLeft>
|
</DrawerLeft>
|
||||||
<div class="flex w-screen flex-col p-2 sm:p-4">
|
<div class="flex w-screen flex-col p-2 sm:p-4">
|
||||||
<InsetSpacer height={AndroidPolyfill.getInsetSizes().top}/>
|
<InsetSpacer height={AndroidPolyfill.getInsetSizes().top}/>
|
||||||
<div class="flex w-full justify-between overflow-hidden">
|
<!-- Top menu bar -->
|
||||||
|
<div class="flex w-full justify-between overflow-hidden pb-4">
|
||||||
<button on:click={() => guistate.pageStates.menu.set(true)} class="m-0 rounded-full p-2">
|
<button on:click={() => guistate.pageStates.menu.set(true)} class="m-0 rounded-full p-2">
|
||||||
<MenuIcon class="h-6 w-6 cursor-pointer" />
|
<MenuIcon class="h-6 w-6 cursor-pointer" />
|
||||||
</button>
|
</button>
|
||||||
|
|
@ -174,15 +175,16 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4 flex overflow-hidden break-words">
|
<!-- Introduction pane -->
|
||||||
|
<div class="flex overflow-hidden break-words">
|
||||||
<div class="m-3 hidden flex-none md:block">
|
<div class="m-3 hidden flex-none md:block">
|
||||||
<Logo alt="MapComplete Logo" class="h-12 w-12 sm:h-24 sm:w-24" />
|
<Logo alt="MapComplete Logo" class="h-12 w-12 sm:h-24 sm:w-24" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="link-underline flex w-full flex-col">
|
<div class="link-underline flex w-full flex-col">
|
||||||
<div class="flex flex-wrap">
|
<div class="flex items-center">
|
||||||
<div class="m-1 flex-none md:hidden">
|
<div class="m-1 flex-none md:hidden">
|
||||||
<Logo alt="MapComplete Logo" class="mr-4 h-10 w-10 sm:h-20 sm:w-20" />
|
<Logo alt="MapComplete Logo" class="mr-1 sm:mr-2 md:mr-4 h-10 w-10 sm:h-20 sm:w-20" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<h1 class="m-0 break-words font-extrabold tracking-tight md:text-6xl">
|
<h1 class="m-0 break-words font-extrabold tracking-tight md:text-6xl">
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if $showButton}
|
{#if $showButton}
|
||||||
<div class="flex flex-col">
|
|
||||||
<button class="as-link sidebar-button" on:click={openJosm}>
|
<button class="as-link sidebar-button" on:click={openJosm}>
|
||||||
<Josm_logo class="h-6 w-6" />
|
<Josm_logo class="h-6 w-6" />
|
||||||
<Tr t={t.editJosm} />
|
<Tr t={t.editJosm} />
|
||||||
|
|
@ -47,5 +46,4 @@
|
||||||
{:else}
|
{:else}
|
||||||
<Tr cls="alert shrink-0 w-fit" t={t.josmNotOpened} />
|
<Tr cls="alert shrink-0 w-fit" t={t.josmNotOpened} />
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-radius: 0.25rem !important;
|
border-radius: 0.25rem !important;
|
||||||
padding: 0.4rem 0.75rem !important;
|
padding: 0.5rem 0.75rem !important;
|
||||||
text-decoration: none !important;
|
text-decoration: none !important;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: start;
|
text-align: start;
|
||||||
|
|
@ -58,7 +58,7 @@
|
||||||
.sidebar-unit > button svg,
|
.sidebar-unit > button svg,
|
||||||
.sidebar-unit > button img
|
.sidebar-unit > button img
|
||||||
) {
|
) {
|
||||||
margin-right: 0.5rem;
|
margin-right: 0.2rem;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@
|
||||||
import ImageUploadQueue from "../../Logic/ImageProviders/ImageUploadQueue"
|
import ImageUploadQueue from "../../Logic/ImageProviders/ImageUploadQueue"
|
||||||
import QueuedImagesView from "../Image/QueuedImagesView.svelte"
|
import QueuedImagesView from "../Image/QueuedImagesView.svelte"
|
||||||
import InsetSpacer from "../Base/InsetSpacer.svelte"
|
import InsetSpacer from "../Base/InsetSpacer.svelte"
|
||||||
|
import UserCircle from "@rgossiaux/svelte-heroicons/solid/UserCircle"
|
||||||
|
|
||||||
export let state: {
|
export let state: {
|
||||||
favourites: FavouritesFeatureSource
|
favourites: FavouritesFeatureSource
|
||||||
|
|
@ -133,9 +134,11 @@
|
||||||
<SidebarUnit>
|
<SidebarUnit>
|
||||||
<LoginToggle {state}>
|
<LoginToggle {state}>
|
||||||
<LoginButton osmConnection={state.osmConnection} slot="not-logged-in" />
|
<LoginButton osmConnection={state.osmConnection} slot="not-logged-in" />
|
||||||
<div class="flex items-center gap-x-4">
|
<div class="flex items-center gap-x-4 w-fit m-2">
|
||||||
{#if $userdetails.img}
|
{#if $userdetails.img}
|
||||||
<img alt="avatar" src={$userdetails.img} class="h-14 w-14 rounded-full" />
|
<img alt="avatar" src={$userdetails.img} class="h-12 w-12 rounded-full" />
|
||||||
|
{:else}
|
||||||
|
<UserCircle class="h-14 w-14" color="gray"/>
|
||||||
{/if}
|
{/if}
|
||||||
<b>{$userdetails.name}</b>
|
<b>{$userdetails.name}</b>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,11 @@
|
||||||
export let feature: Feature
|
export let feature: Feature
|
||||||
export let readonly = false
|
export let readonly = false
|
||||||
export let sourceUrl: Store<string>
|
export let sourceUrl: Store<string>
|
||||||
|
/**
|
||||||
|
* A switch that signals that the information should be downloaded.
|
||||||
|
* The actual 'download' code is _not_ implemented here
|
||||||
|
*/
|
||||||
|
export let downloadInformation : UIEventSource<boolean>
|
||||||
export let collapsed: boolean
|
export let collapsed: boolean
|
||||||
const t = Translations.t.external
|
const t = Translations.t.external
|
||||||
|
|
||||||
|
|
@ -49,8 +53,14 @@
|
||||||
<LoginToggle {state} silentFail>
|
<LoginToggle {state} silentFail>
|
||||||
{#if !$sourceUrl || !$enableLogin}
|
{#if !$sourceUrl || !$enableLogin}
|
||||||
<!-- empty block -->
|
<!-- empty block -->
|
||||||
|
{:else if !$downloadInformation}
|
||||||
|
<button on:click={() => downloadInformation.set(true)}>
|
||||||
|
Attempt to download information from the website {$sourceUrl}
|
||||||
|
</button>
|
||||||
{:else if $externalData === undefined}
|
{:else if $externalData === undefined}
|
||||||
|
<div class="flex justify-center">
|
||||||
<Loading />
|
<Loading />
|
||||||
|
</div>
|
||||||
{:else if $externalData["error"] !== undefined}
|
{:else if $externalData["error"] !== undefined}
|
||||||
<div class="subtle low-interaction rounded p-2 px-4 italic">
|
<div class="subtle low-interaction rounded p-2 px-4 italic">
|
||||||
<Tr t={Translations.t.external.error} />
|
<Tr t={Translations.t.external.error} />
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,10 @@
|
||||||
* Shows an image with attribution
|
* Shows an image with attribution
|
||||||
*/
|
*/
|
||||||
import ImageAttribution from "./ImageAttribution.svelte"
|
import ImageAttribution from "./ImageAttribution.svelte"
|
||||||
import { ImmutableStore, Store } from "../../Logic/UIEventSource"
|
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||||
|
|
||||||
import type { HotspotProperties, ProvidedImage } from "../../Logic/ImageProviders/ImageProvider"
|
import type { HotspotProperties, ProvidedImage } from "../../Logic/ImageProviders/ImageProvider"
|
||||||
import { Mapillary } from "../../Logic/ImageProviders/Mapillary"
|
import { Mapillary } from "../../Logic/ImageProviders/Mapillary"
|
||||||
import { UIEventSource } from "../../Logic/UIEventSource"
|
|
||||||
import { MagnifyingGlassPlusIcon } from "@babeard/svelte-heroicons/outline"
|
import { MagnifyingGlassPlusIcon } from "@babeard/svelte-heroicons/outline"
|
||||||
import { CloseButton } from "flowbite-svelte"
|
import { CloseButton } from "flowbite-svelte"
|
||||||
import ImageOperations from "./ImageOperations.svelte"
|
import ImageOperations from "./ImageOperations.svelte"
|
||||||
|
|
@ -24,15 +23,9 @@
|
||||||
import Panorama360 from "../../assets/svg/Panorama360.svelte"
|
import Panorama360 from "../../assets/svg/Panorama360.svelte"
|
||||||
import { ExternalLinkIcon } from "@rgossiaux/svelte-heroicons/solid"
|
import { ExternalLinkIcon } from "@rgossiaux/svelte-heroicons/solid"
|
||||||
import { ExclamationTriangle as TriangleOutline } from "@babeard/svelte-heroicons/outline/ExclamationTriangle"
|
import { ExclamationTriangle as TriangleOutline } from "@babeard/svelte-heroicons/outline/ExclamationTriangle"
|
||||||
import LoginToggle from "../Base/LoginToggle.svelte"
|
|
||||||
|
|
||||||
export let image: Partial<ProvidedImage> & { id: string; url: string }
|
export let image: Partial<ProvidedImage> & { id: string; url: string }
|
||||||
let fallbackImage: string = undefined
|
|
||||||
if (image?.provider === Mapillary.singleton) {
|
|
||||||
fallbackImage = "./assets/svg/blocked.svg"
|
|
||||||
}
|
|
||||||
|
|
||||||
let imgEl: HTMLImageElement
|
|
||||||
export let imgClass: string = undefined
|
export let imgClass: string = undefined
|
||||||
export let state: ThemeViewState = undefined
|
export let state: ThemeViewState = undefined
|
||||||
export let attributionFormat: "minimal" | "medium" | "large" = "medium"
|
export let attributionFormat: "minimal" | "medium" | "large" = "medium"
|
||||||
|
|
@ -147,6 +140,7 @@
|
||||||
Not found
|
Not found
|
||||||
</div>
|
</div>
|
||||||
This image is probably incorrect or deleted.
|
This image is probably incorrect or deleted.
|
||||||
|
{image.url}
|
||||||
<slot name="not-found-extra" />
|
<slot name="not-found-extra" />
|
||||||
{:else}
|
{:else}
|
||||||
<div class="alert flex items-center">
|
<div class="alert flex items-center">
|
||||||
|
|
@ -191,7 +185,6 @@
|
||||||
{/if}
|
{/if}
|
||||||
<img
|
<img
|
||||||
class:hidden={!loaded}
|
class:hidden={!loaded}
|
||||||
bind:this={imgEl}
|
|
||||||
on:load={() => (loaded = true)}
|
on:load={() => (loaded = true)}
|
||||||
class={imgClass ?? ""}
|
class={imgClass ?? ""}
|
||||||
class:cursor-zoom-in={canZoom}
|
class:cursor-zoom-in={canZoom}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
provider: AllImageProviders.byName(image.provider),
|
provider: AllImageProviders.byName(image.provider),
|
||||||
date,
|
date,
|
||||||
id: Object.values(image.osmTags)[0],
|
id: Object.values(image.osmTags)[0],
|
||||||
isSpherical: image.details.isSpherical,
|
isSpherical: image.details?.isSpherical ?? false,
|
||||||
license,
|
license,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
{#if language !== $current}
|
{#if language !== $current}
|
||||||
({language_translations[language]?.[$current] ?? language})
|
({language_translations[language]?.[$current] ?? language})
|
||||||
{/if}
|
{/if}
|
||||||
{#if $preferredLanguages.indexOf(language) >= 0}
|
{#if $preferredLanguages?.indexOf(language) >= 0}
|
||||||
⭐
|
⭐
|
||||||
{/if}
|
{/if}
|
||||||
</option>
|
</option>
|
||||||
|
|
@ -78,6 +78,9 @@
|
||||||
({language})
|
({language})
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if $preferredLanguages?.indexOf(language) >= 0}
|
||||||
|
⭐
|
||||||
|
{/if}
|
||||||
</option>
|
</option>
|
||||||
{/each}
|
{/each}
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
|
|
|
||||||
277
src/UI/Map/PointRenderingLayer.ts
Normal file
277
src/UI/Map/PointRenderingLayer.ts
Normal file
|
|
@ -0,0 +1,277 @@
|
||||||
|
import PointRenderingConfig, {
|
||||||
|
allowed_location_codes,
|
||||||
|
PointRenderingLocation
|
||||||
|
} from "../../Models/ThemeConfig/PointRenderingConfig"
|
||||||
|
import { ImmutableStore, Store } from "../../Logic/UIEventSource"
|
||||||
|
import { type Alignment, Map as MlMap, Marker } from "maplibre-gl"
|
||||||
|
import { Feature, Geometry, Point } from "geojson"
|
||||||
|
import { OsmId, OsmTags } from "../../Models/OsmFeature"
|
||||||
|
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
|
||||||
|
import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
|
||||||
|
import { IfVisibleFeatureSource } from "../../Logic/FeatureSource/Sources/IfVisibleFeatureSource"
|
||||||
|
import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"
|
||||||
|
import { GeoOperations } from "../../Logic/GeoOperations"
|
||||||
|
|
||||||
|
export class PointRenderingLayer {
|
||||||
|
private readonly _config: PointRenderingConfig
|
||||||
|
private readonly _fetchStore?: (id: string) => Store<Record<string, string>>
|
||||||
|
private readonly _map: MlMap
|
||||||
|
private readonly _onClick: (feature: Feature) => void
|
||||||
|
private readonly _allMarkers: Map<OsmId, Map<PointRenderingLocation, Marker>> = new Map()
|
||||||
|
private readonly _selectedElement: Store<{ properties: { id?: string } }>
|
||||||
|
private readonly _markedAsSelected: HTMLElement[] = []
|
||||||
|
private readonly _metatags: Store<Record<string, string>>
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
map: MlMap,
|
||||||
|
layer: LayerConfig,
|
||||||
|
features: FeatureSource<Feature<Geometry, { id: string }>>,
|
||||||
|
config: PointRenderingConfig,
|
||||||
|
metatags?: Store<Record<string, string>>,
|
||||||
|
visibility?: Store<boolean>,
|
||||||
|
fetchStore?: (id: string) => Store<Record<string, string>>,
|
||||||
|
onClick?: (feature: Feature) => void,
|
||||||
|
selectedElement?: Store<{ properties: { id?: string } }>,
|
||||||
|
preprocess?: <T extends Feature<Point>>(fs: FeatureSource<T>) => FeatureSource<T>
|
||||||
|
) {
|
||||||
|
this._config = config
|
||||||
|
this._map = map
|
||||||
|
this._metatags = metatags
|
||||||
|
this._fetchStore = fetchStore
|
||||||
|
this._onClick = onClick
|
||||||
|
this._selectedElement = selectedElement
|
||||||
|
visibility ??= new ImmutableStore(true)
|
||||||
|
if (!features?.features) {
|
||||||
|
throw (
|
||||||
|
"Could not setup a PointRenderingLayer; features?.features is undefined/null. The layer is " +
|
||||||
|
layer.id
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basically 'features', but only if 'visible' is true
|
||||||
|
*/
|
||||||
|
const featuresIfVisibleStore: Store<(Feature<Point, { id: string }> & {
|
||||||
|
locationType: PointRenderingLocation
|
||||||
|
})[]> =
|
||||||
|
new IfVisibleFeatureSource(features, visibility).features.map(features =>
|
||||||
|
PointRenderingLayer.extractLocations(features, config.location)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
let featuresToDraw: FeatureSource<Feature<Point, { id: string }> & { locationType: PointRenderingLocation }>
|
||||||
|
if (preprocess) {
|
||||||
|
featuresToDraw = preprocess(new StaticFeatureSource(featuresIfVisibleStore))
|
||||||
|
} else {
|
||||||
|
featuresToDraw = new StaticFeatureSource(featuresIfVisibleStore)
|
||||||
|
}
|
||||||
|
|
||||||
|
featuresToDraw.features?.addCallbackAndRunD((features) => {
|
||||||
|
this.updateFeatures(features)
|
||||||
|
this.hideUnneededElements(features)
|
||||||
|
})
|
||||||
|
|
||||||
|
selectedElement?.addCallbackAndRun((selected) => {
|
||||||
|
this._markedAsSelected.forEach((el) => el.classList.remove("selected"))
|
||||||
|
this._markedAsSelected.splice(0, this._markedAsSelected.length)
|
||||||
|
if (selected === undefined) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
allowed_location_codes.forEach((code) => {
|
||||||
|
const marker = this._allMarkers.get(<OsmId>selected.properties.id)
|
||||||
|
?.get(code)
|
||||||
|
?.getElement()
|
||||||
|
if (marker === undefined) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
marker.classList?.add("selected")
|
||||||
|
this._markedAsSelected.push(marker)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All locations that this layer should be rendered
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private static extractLocations(features: Feature<Geometry, {
|
||||||
|
id: string
|
||||||
|
}>[], locations: Set<PointRenderingLocation>): (Feature<Point, { id: string }> & {
|
||||||
|
locationType: PointRenderingLocation
|
||||||
|
})[] {
|
||||||
|
const resultingFeatures: (Feature<Point, { id: string }> & { locationType: PointRenderingLocation })[] = []
|
||||||
|
|
||||||
|
function registerFeature(feature: Feature<any, {
|
||||||
|
id: string
|
||||||
|
}>, location: [number, number], locationType: PointRenderingLocation) {
|
||||||
|
resultingFeatures.push({
|
||||||
|
...feature,
|
||||||
|
locationType,
|
||||||
|
geometry: {
|
||||||
|
type: "Point",
|
||||||
|
coordinates: location
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const feature of features) {
|
||||||
|
for (const location of locations) {
|
||||||
|
if (feature?.geometry === undefined) {
|
||||||
|
console.warn(
|
||||||
|
"Got an invalid feature:",
|
||||||
|
feature,
|
||||||
|
" while rendering",
|
||||||
|
location
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (location === "waypoints") {
|
||||||
|
if (feature.geometry.type === "LineString") {
|
||||||
|
for (const loc of feature.geometry.coordinates) {
|
||||||
|
registerFeature(feature, <[number, number]>loc, location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
feature.geometry.type === "MultiLineString" ||
|
||||||
|
feature.geometry.type === "Polygon"
|
||||||
|
) {
|
||||||
|
for (const coors of feature.geometry.coordinates) {
|
||||||
|
for (const loc of coors) {
|
||||||
|
registerFeature(feature, <[number, number]>loc, location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
const loc = GeoOperations.featureToCoordinateWithRenderingType(feature, location)
|
||||||
|
if (loc === undefined) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
registerFeature(feature, loc, location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultingFeatures
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hides (or shows) all markers as needed which are in the cache
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private hideUnneededElements(featuresToDraw: Feature<Geometry, { id: string }>[]) {
|
||||||
|
const idsToShow = new Set(featuresToDraw.map(f => f.properties.id))
|
||||||
|
|
||||||
|
for (const key of this._allMarkers.keys()) {
|
||||||
|
const shouldBeShown = idsToShow.has(key)
|
||||||
|
for (const marker of this._allMarkers.get(key).values()) {
|
||||||
|
|
||||||
|
if (!shouldBeShown) {
|
||||||
|
marker.addClassName("hidden")
|
||||||
|
} else {
|
||||||
|
marker.removeClassName("hidden")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private updateFeatures(allPointLocations: (Feature<Point> & { locationType: PointRenderingLocation })[]) {
|
||||||
|
const cache = this._allMarkers
|
||||||
|
for (const feature of allPointLocations) {
|
||||||
|
const id = <OsmId>feature.properties.id
|
||||||
|
const locationType: PointRenderingLocation = feature.locationType
|
||||||
|
|
||||||
|
|
||||||
|
let marker = cache.get(id)?.get(locationType)
|
||||||
|
if (marker) {
|
||||||
|
const oldLoc = marker.getLngLat()
|
||||||
|
const loc = feature.geometry.coordinates
|
||||||
|
if (loc[0] !== oldLoc.lng && loc[1] !== oldLoc.lat) {
|
||||||
|
marker.setLngLat(<[number, number]>loc)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
marker = this.addPoint(feature)
|
||||||
|
if (!cache.has(id)) {
|
||||||
|
cache.set(id, new Map())
|
||||||
|
}
|
||||||
|
cache.get(id).set(locationType, marker)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._selectedElement?.data?.properties?.id === id) {
|
||||||
|
marker.getElement().classList.add("selected")
|
||||||
|
this._markedAsSelected.push(marker.getElement())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render the relevant marker at the explicitly given location.
|
||||||
|
*/
|
||||||
|
private addPoint(feature: Feature<Point>): Marker {
|
||||||
|
/*
|
||||||
|
new Marker()
|
||||||
|
.setLngLat(feature.geometry.coordinates)
|
||||||
|
.addTo(this._map)*/
|
||||||
|
|
||||||
|
|
||||||
|
let store: Store<Record<string, string>>
|
||||||
|
if (this._fetchStore) {
|
||||||
|
store = this._fetchStore(feature.properties.id)
|
||||||
|
} else {
|
||||||
|
store = new ImmutableStore(<OsmTags>feature.properties)
|
||||||
|
}
|
||||||
|
const { html, iconAnchor } = this._config.RenderIcon(store, { metatags: this._metatags })
|
||||||
|
html.SetClass("marker")
|
||||||
|
if (this._onClick !== undefined) {
|
||||||
|
html.SetClass("cursor-pointer")
|
||||||
|
}
|
||||||
|
const element = html.ConstructElement()
|
||||||
|
|
||||||
|
store.addCallbackAndRunD((tags) => {
|
||||||
|
if (tags._deleted === "yes") {
|
||||||
|
html.SetClass("grayscale")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (this._onClick) {
|
||||||
|
element.addEventListener("click", (ev) => {
|
||||||
|
ev.preventDefault()
|
||||||
|
this._onClick(feature)
|
||||||
|
// Workaround to signal the MapLibreAdaptor to ignore this click
|
||||||
|
ev["consumed"] = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const marker = new Marker({ element })
|
||||||
|
.setLngLat(<[number, number]>feature.geometry.coordinates)
|
||||||
|
.setOffset(iconAnchor)
|
||||||
|
.addTo(this._map)
|
||||||
|
|
||||||
|
store
|
||||||
|
.map((tags) => this._config.pitchAlignment.GetRenderValue(tags).Subs(tags).txt)
|
||||||
|
.addCallbackAndRun((pitchAligment) =>
|
||||||
|
marker.setPitchAlignment(<Alignment>pitchAligment)
|
||||||
|
)
|
||||||
|
store
|
||||||
|
.map((tags) => this._config.rotationAlignment.GetRenderValue(tags).Subs(tags).txt)
|
||||||
|
.addCallbackAndRun((pitchAligment) =>
|
||||||
|
marker.setRotationAlignment(<Alignment>pitchAligment)
|
||||||
|
)
|
||||||
|
|
||||||
|
if (feature.geometry.type === "Point") {
|
||||||
|
// When the tags get 'pinged', check that the location didn't change
|
||||||
|
store.addCallbackAndRunD(() => {
|
||||||
|
// Check if the location is still the same
|
||||||
|
const oldLoc = marker.getLngLat()
|
||||||
|
const newloc = (<Point>feature.geometry).coordinates
|
||||||
|
if (newloc[0] === oldLoc.lng && newloc[1] === oldLoc.lat) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
marker.setLngLat({ lon: newloc[0], lat: newloc[1] })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return marker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,14 +1,11 @@
|
||||||
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
|
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||||
import type { AddLayerObject, Alignment, Map as MlMap } from "maplibre-gl"
|
import type { AddLayerObject, Map as MlMap } from "maplibre-gl"
|
||||||
import { GeoJSONSource, Marker } from "maplibre-gl"
|
import { GeoJSONSource } from "maplibre-gl"
|
||||||
import { ShowDataLayerOptions } from "./ShowDataLayerOptions"
|
import { ShowDataLayerOptions } from "./ShowDataLayerOptions"
|
||||||
import { GeoOperations } from "../../Logic/GeoOperations"
|
|
||||||
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
|
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
|
||||||
import PointRenderingConfig from "../../Models/ThemeConfig/PointRenderingConfig"
|
import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
|
||||||
import { OsmTags } from "../../Models/OsmFeature"
|
|
||||||
import { FeatureSource, FeatureSourceForLayer } from "../../Logic/FeatureSource/FeatureSource"
|
|
||||||
import { BBox } from "../../Logic/BBox"
|
import { BBox } from "../../Logic/BBox"
|
||||||
import { Feature, Point } from "geojson"
|
import { Feature, Geometry } from "geojson"
|
||||||
import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig"
|
import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig"
|
||||||
import { Utils } from "../../Utils"
|
import { Utils } from "../../Utils"
|
||||||
import * as range_layer from "../../../assets/layers/range/range.json"
|
import * as range_layer from "../../../assets/layers/range/range.json"
|
||||||
|
|
@ -17,209 +14,9 @@ import FilteredLayer from "../../Models/FilteredLayer"
|
||||||
import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource"
|
import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource"
|
||||||
import { TagsFilter } from "../../Logic/Tags/TagsFilter"
|
import { TagsFilter } from "../../Logic/Tags/TagsFilter"
|
||||||
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
|
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
|
||||||
|
import { PointRenderingLayer } from "./PointRenderingLayer"
|
||||||
class PointRenderingLayer {
|
import { ClusteringFeatureSource } from "../../Logic/FeatureSource/TiledFeatureSource/ClusteringFeatureSource"
|
||||||
private readonly _config: PointRenderingConfig
|
import { OsmTags } from "../../Models/OsmFeature"
|
||||||
private readonly _visibility?: Store<boolean>
|
|
||||||
private readonly _fetchStore?: (id: string) => Store<Record<string, string>>
|
|
||||||
private readonly _map: MlMap
|
|
||||||
private readonly _onClick: (feature: Feature) => void
|
|
||||||
private readonly _allMarkers: Map<string, Marker> = new Map<string, Marker>()
|
|
||||||
private readonly _selectedElement: Store<{ properties: { id?: string } }>
|
|
||||||
private readonly _markedAsSelected: HTMLElement[] = []
|
|
||||||
private readonly _metatags: Store<Record<string, string>>
|
|
||||||
private _dirty = false
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
map: MlMap,
|
|
||||||
layer: LayerConfig,
|
|
||||||
features: FeatureSource,
|
|
||||||
config: PointRenderingConfig,
|
|
||||||
metatags?: Store<Record<string, string>>,
|
|
||||||
visibility?: Store<boolean>,
|
|
||||||
fetchStore?: (id: string) => Store<Record<string, string>>,
|
|
||||||
onClick?: (feature: Feature) => void,
|
|
||||||
selectedElement?: Store<{ properties: { id?: string } }>
|
|
||||||
) {
|
|
||||||
this._visibility = visibility
|
|
||||||
this._config = config
|
|
||||||
this._map = map
|
|
||||||
this._metatags = metatags
|
|
||||||
this._fetchStore = fetchStore
|
|
||||||
this._onClick = onClick
|
|
||||||
this._selectedElement = selectedElement
|
|
||||||
if (!features?.features) {
|
|
||||||
throw (
|
|
||||||
"Could not setup a PointRenderingLayer; features?.features is undefined/null. The layer is " +
|
|
||||||
layer.id
|
|
||||||
)
|
|
||||||
}
|
|
||||||
features.features?.addCallbackAndRunD((features) => this.updateFeatures(features))
|
|
||||||
visibility?.addCallbackAndRunD((visible) => {
|
|
||||||
if (visible === true && this._dirty) {
|
|
||||||
this.updateFeatures(features.features.data)
|
|
||||||
}
|
|
||||||
this.setVisibility(visible)
|
|
||||||
})
|
|
||||||
selectedElement?.addCallbackAndRun((selected) => {
|
|
||||||
this._markedAsSelected.forEach((el) => el.classList.remove("selected"))
|
|
||||||
this._markedAsSelected.splice(0, this._markedAsSelected.length)
|
|
||||||
if (selected === undefined) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
PointRenderingConfig.allowed_location_codes.forEach((code) => {
|
|
||||||
const marker = this._allMarkers
|
|
||||||
.get(selected.properties?.id + "-" + code)
|
|
||||||
?.getElement()
|
|
||||||
if (marker === undefined) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
marker?.classList?.add("selected")
|
|
||||||
this._markedAsSelected.push(marker)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private updateFeatures(features: Feature[]) {
|
|
||||||
if (this._visibility?.data === false) {
|
|
||||||
this._dirty = true
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this._dirty = false
|
|
||||||
const cache = this._allMarkers
|
|
||||||
const unseenKeys = new Set(cache.keys())
|
|
||||||
for (const location of this._config.location) {
|
|
||||||
for (const feature of features) {
|
|
||||||
if (feature?.geometry === undefined) {
|
|
||||||
console.warn(
|
|
||||||
"Got an invalid feature:",
|
|
||||||
features,
|
|
||||||
" while rendering",
|
|
||||||
location,
|
|
||||||
"of",
|
|
||||||
this._config
|
|
||||||
)
|
|
||||||
}
|
|
||||||
const id = feature.properties.id + "-" + location
|
|
||||||
unseenKeys.delete(id)
|
|
||||||
|
|
||||||
if (location === "waypoints") {
|
|
||||||
if (feature.geometry.type === "LineString") {
|
|
||||||
for (const loc of feature.geometry.coordinates) {
|
|
||||||
this.addPoint(feature, <[number, number]>loc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
feature.geometry.type === "MultiLineString" ||
|
|
||||||
feature.geometry.type === "Polygon"
|
|
||||||
) {
|
|
||||||
for (const coors of feature.geometry.coordinates) {
|
|
||||||
for (const loc of coors) {
|
|
||||||
this.addPoint(feature, <[number, number]>loc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
const loc = GeoOperations.featureToCoordinateWithRenderingType(feature, location)
|
|
||||||
if (loc === undefined) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cache.has(id)) {
|
|
||||||
const cached = cache.get(id)
|
|
||||||
const oldLoc = cached.getLngLat()
|
|
||||||
if (loc[0] !== oldLoc.lng && loc[1] !== oldLoc.lat) {
|
|
||||||
cached.setLngLat(loc)
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
const marker = this.addPoint(feature, loc)
|
|
||||||
if (this._selectedElement?.data === feature.properties.id) {
|
|
||||||
marker.getElement().classList.add("selected")
|
|
||||||
this._markedAsSelected.push(marker.getElement())
|
|
||||||
}
|
|
||||||
cache.set(id, marker)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const unseenKey of unseenKeys) {
|
|
||||||
cache.get(unseenKey).remove()
|
|
||||||
cache.delete(unseenKey)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private setVisibility(visible: boolean) {
|
|
||||||
for (const marker of this._allMarkers.values()) {
|
|
||||||
if (visible) {
|
|
||||||
marker.getElement().classList.remove("hidden")
|
|
||||||
} else {
|
|
||||||
marker.getElement().classList.add("hidden")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private addPoint(feature: Feature, loc: [number, number]): Marker {
|
|
||||||
let store: Store<Record<string, string>>
|
|
||||||
if (this._fetchStore) {
|
|
||||||
store = this._fetchStore(feature.properties.id)
|
|
||||||
} else {
|
|
||||||
store = new ImmutableStore(<OsmTags>feature.properties)
|
|
||||||
}
|
|
||||||
const { html, iconAnchor } = this._config.RenderIcon(store, { metatags: this._metatags })
|
|
||||||
html.SetClass("marker")
|
|
||||||
if (this._onClick !== undefined) {
|
|
||||||
html.SetClass("cursor-pointer")
|
|
||||||
}
|
|
||||||
const el = html.ConstructElement()
|
|
||||||
|
|
||||||
store.addCallbackAndRunD((tags) => {
|
|
||||||
if (tags._deleted === "yes") {
|
|
||||||
html.SetClass("grayscale")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (this._onClick) {
|
|
||||||
el.addEventListener("click", (ev) => {
|
|
||||||
ev.preventDefault()
|
|
||||||
this._onClick(feature)
|
|
||||||
// Workaround to signal the MapLibreAdaptor to ignore this click
|
|
||||||
ev["consumed"] = true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const marker = new Marker({ element: el })
|
|
||||||
.setLngLat(loc)
|
|
||||||
.setOffset(iconAnchor)
|
|
||||||
.addTo(this._map)
|
|
||||||
store
|
|
||||||
.map((tags) => this._config.pitchAlignment.GetRenderValue(tags).Subs(tags).txt)
|
|
||||||
.addCallbackAndRun((pitchAligment) =>
|
|
||||||
marker.setPitchAlignment(<Alignment>pitchAligment)
|
|
||||||
)
|
|
||||||
store
|
|
||||||
.map((tags) => this._config.rotationAlignment.GetRenderValue(tags).Subs(tags).txt)
|
|
||||||
.addCallbackAndRun((pitchAligment) =>
|
|
||||||
marker.setRotationAlignment(<Alignment>pitchAligment)
|
|
||||||
)
|
|
||||||
|
|
||||||
if (feature.geometry.type === "Point") {
|
|
||||||
// When the tags get 'pinged', check that the location didn't change
|
|
||||||
store.addCallbackAndRunD(() => {
|
|
||||||
// Check if the location is still the same
|
|
||||||
const oldLoc = marker.getLngLat()
|
|
||||||
const newloc = (<Point>feature.geometry).coordinates
|
|
||||||
if (newloc[0] === oldLoc.lng && newloc[1] === oldLoc.lat) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
marker.setLngLat({ lon: newloc[0], lat: newloc[1] })
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return marker
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class LineRenderingLayer {
|
class LineRenderingLayer {
|
||||||
/**
|
/**
|
||||||
|
|
@ -564,7 +361,7 @@ export default class ShowDataLayer {
|
||||||
layers: LayerConfig[],
|
layers: LayerConfig[],
|
||||||
options?: Partial<Omit<ShowDataLayerOptions, "features" | "layer">>
|
options?: Partial<Omit<ShowDataLayerOptions, "features" | "layer">>
|
||||||
) {
|
) {
|
||||||
const perLayer: PerLayerFeatureSourceSplitter<FeatureSourceForLayer> =
|
const perLayer =
|
||||||
new PerLayerFeatureSourceSplitter(
|
new PerLayerFeatureSourceSplitter(
|
||||||
layers.filter((l) => l.source !== null).map((l) => new FilteredLayer(l)),
|
layers.filter((l) => l.source !== null).map((l) => new FilteredLayer(l)),
|
||||||
features,
|
features,
|
||||||
|
|
@ -582,18 +379,41 @@ export default class ShowDataLayer {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
perLayer.forEach((fs) => {
|
perLayer.forEach((features) => {
|
||||||
new ShowDataLayer(mlmap, {
|
new ShowDataLayer(mlmap, {
|
||||||
layer: fs.layer.layerDef,
|
layer: features.layer.layerDef,
|
||||||
features: fs,
|
features,
|
||||||
...(options ?? {}),
|
...(options ?? {}),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the data, unless they are clustered.
|
||||||
|
* This method does _not_ add the clusters themselves to the map,
|
||||||
|
* this should be done independently. In a themeViewGui, this is done by the 'addSpecialLayers'
|
||||||
|
* @see ClusterGrouping
|
||||||
|
* @param mlmap
|
||||||
|
* @param state
|
||||||
|
* @param options
|
||||||
|
*/
|
||||||
|
public static showLayerClustered(mlmap: Store<MlMap>,
|
||||||
|
state: { mapProperties: { zoom: UIEventSource<number> } },
|
||||||
|
options: ShowDataLayerOptions & { layer: LayerConfig }
|
||||||
|
) {
|
||||||
|
options.preprocessPoints = feats =>
|
||||||
|
new ClusteringFeatureSource(feats, state.mapProperties.zoom.map(z => z + 2),
|
||||||
|
options.layer.id,
|
||||||
|
{
|
||||||
|
cutoff: 7,
|
||||||
|
showSummaryAt: "tilecenter"
|
||||||
|
})
|
||||||
|
new ShowDataLayer(mlmap, options)
|
||||||
|
}
|
||||||
|
|
||||||
public static showRange(
|
public static showRange(
|
||||||
map: Store<MlMap>,
|
map: Store<MlMap>,
|
||||||
features: FeatureSource,
|
features: FeatureSource<Feature<Geometry, OsmTags>>,
|
||||||
doShowLayer?: Store<boolean>
|
doShowLayer?: Store<boolean>
|
||||||
): ShowDataLayer {
|
): ShowDataLayer {
|
||||||
return new ShowDataLayer(map, {
|
return new ShowDataLayer(map, {
|
||||||
|
|
@ -603,8 +423,6 @@ export default class ShowDataLayer {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public destruct() {}
|
|
||||||
|
|
||||||
private static zoomToCurrentFeatures(map: MlMap, features: Feature[]) {
|
private static zoomToCurrentFeatures(map: MlMap, features: Feature[]) {
|
||||||
if (!features || !map || features.length == 0) {
|
if (!features || !map || features.length == 0) {
|
||||||
return
|
return
|
||||||
|
|
@ -635,6 +453,7 @@ export default class ShowDataLayer {
|
||||||
layer,
|
layer,
|
||||||
drawLines,
|
drawLines,
|
||||||
drawMarkers,
|
drawMarkers,
|
||||||
|
preprocessPoints
|
||||||
} = this._options
|
} = this._options
|
||||||
let onClick = this._options.onClick
|
let onClick = this._options.onClick
|
||||||
if (!onClick && selectedElement && layer.title !== undefined) {
|
if (!onClick && selectedElement && layer.title !== undefined) {
|
||||||
|
|
@ -672,7 +491,8 @@ export default class ShowDataLayer {
|
||||||
doShowLayer,
|
doShowLayer,
|
||||||
fetchStore,
|
fetchStore,
|
||||||
onClick,
|
onClick,
|
||||||
selectedElement
|
selectedElement,
|
||||||
|
preprocessPoints
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
|
import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource"
|
||||||
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||||
import { Feature } from "geojson"
|
import { Feature, Geometry, Point } from "geojson"
|
||||||
|
import { OsmTags } from "../../Models/OsmFeature"
|
||||||
|
|
||||||
export interface ShowDataLayerOptions {
|
export interface ShowDataLayerOptions {
|
||||||
/**
|
/**
|
||||||
* Features to show
|
* Features to show
|
||||||
*/
|
*/
|
||||||
features: FeatureSource
|
features: FeatureSource<Feature<Geometry, OsmTags>>
|
||||||
/**
|
/**
|
||||||
* Indication of the current selected element; overrides some filters.
|
* Indication of the current selected element; overrides some filters.
|
||||||
* When a feature is tapped, the feature will be put in there
|
* When a feature is tapped, the feature will be put in there
|
||||||
|
|
@ -31,5 +32,6 @@ export interface ShowDataLayerOptions {
|
||||||
onClick?: (feature: Feature) => void
|
onClick?: (feature: Feature) => void
|
||||||
metaTags?: Store<Record<string, string>>
|
metaTags?: Store<Record<string, string>>
|
||||||
|
|
||||||
prefix?: string
|
prefix?: string,
|
||||||
|
preprocessPoints?: <T extends Feature<Point>>(fs: FeatureSource<T>) => FeatureSource<T>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
let average = reviews.average
|
let average = reviews.average
|
||||||
let allReviews: Store<
|
let allReviews: Store<
|
||||||
(Review & {
|
(Review & {
|
||||||
|
kid: string,
|
||||||
signature: string,
|
signature: string,
|
||||||
madeByLoggedInUser: Store<boolean>
|
madeByLoggedInUser: Store<boolean>
|
||||||
})[]
|
})[]
|
||||||
|
|
@ -32,7 +33,7 @@
|
||||||
let subject: Store<string> = reviews.subjectUri
|
let subject: Store<string> = reviews.subjectUri
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<ReviewPrivacyShield {reviews} guistate={state.guistate}>
|
<ReviewPrivacyShield loadingAllowed={reviews.loadingAllowed} guistate={state.guistate}>
|
||||||
<div class="border-2 border-dashed border-gray-300 p-2 flex flex-col gap-y-2">
|
<div class="border-2 border-dashed border-gray-300 p-2 flex flex-col gap-y-2">
|
||||||
{#if $allReviews?.length > 1}
|
{#if $allReviews?.length > 1}
|
||||||
<StarsBar score={$average} />
|
<StarsBar score={$average} />
|
||||||
|
|
@ -43,7 +44,7 @@
|
||||||
</div>
|
</div>
|
||||||
{:else if $allReviews.length > 0}
|
{:else if $allReviews.length > 0}
|
||||||
{#each $allReviews as review}
|
{#each $allReviews as review}
|
||||||
<SingleReview {review} {state} {tags} {feature} {layer} {reviews}/>
|
<SingleReview {review} {state} {tags} {feature} {layer} {reviews} showMenu={false}/>
|
||||||
{/each}
|
{/each}
|
||||||
{:else}
|
{:else}
|
||||||
<div class="subtle m-2 italic flex justify-center">
|
<div class="subtle m-2 italic flex justify-center">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import FeatureReviews from "../../Logic/Web/MangroveReviews"
|
import FeatureReviews from "../../Logic/Web/MangroveReviews"
|
||||||
|
import type { ReviewCollection } from "../../Logic/Web/MangroveReviews"
|
||||||
import StarsBar from "./StarsBar.svelte"
|
import StarsBar from "./StarsBar.svelte"
|
||||||
import SpecialTranslation from "../Popup/TagRendering/SpecialTranslation.svelte"
|
import SpecialTranslation from "../Popup/TagRendering/SpecialTranslation.svelte"
|
||||||
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
|
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||||
|
|
@ -10,7 +11,7 @@
|
||||||
import Tr from "../Base/Tr.svelte"
|
import Tr from "../Base/Tr.svelte"
|
||||||
import If from "../Base/If.svelte"
|
import If from "../Base/If.svelte"
|
||||||
import Loading from "../Base/Loading.svelte"
|
import Loading from "../Base/Loading.svelte"
|
||||||
import { MangroveReviews, Review } from "mangrove-reviews-typescript"
|
import { Review } from "mangrove-reviews-typescript"
|
||||||
import { placeholder } from "../../Utils/placeholder"
|
import { placeholder } from "../../Utils/placeholder"
|
||||||
import { ExclamationTriangle } from "@babeard/svelte-heroicons/solid/ExclamationTriangle"
|
import { ExclamationTriangle } from "@babeard/svelte-heroicons/solid/ExclamationTriangle"
|
||||||
import ReviewPrivacyShield from "./ReviewPrivacyShield.svelte"
|
import ReviewPrivacyShield from "./ReviewPrivacyShield.svelte"
|
||||||
|
|
@ -25,9 +26,9 @@
|
||||||
* The form to create a new review.
|
* The form to create a new review.
|
||||||
* This is multi-stepped.
|
* This is multi-stepped.
|
||||||
*/
|
*/
|
||||||
export let reviews: FeatureReviews
|
export let reviews: ReviewCollection
|
||||||
export let editReview: Review & { signature: string } = undefined
|
export let editReview: Review & { signature: string } = undefined
|
||||||
let subject: Store<string> = editReview !== undefined ? new ImmutableStore(editReview.sub) : reviews.subjectUri
|
export let subject: Store<string> = editReview !== undefined ? new ImmutableStore(editReview.sub) : reviews.subjectUri
|
||||||
let score = editReview?.rating ?? 0
|
let score = editReview?.rating ?? 0
|
||||||
let confirmedScore = editReview?.rating
|
let confirmedScore = editReview?.rating
|
||||||
let isAffiliated = new UIEventSource(editReview?.metadata?.is_affiliated ?? false)
|
let isAffiliated = new UIEventSource(editReview?.metadata?.is_affiliated ?? false)
|
||||||
|
|
@ -49,7 +50,11 @@
|
||||||
|
|
||||||
let uploadFailed: string = undefined
|
let uploadFailed: string = undefined
|
||||||
let isTesting = state?.featureSwitchIsTesting
|
let isTesting = state?.featureSwitchIsTesting
|
||||||
|
let debug = state.featureSwitches.featureSwitchIsDebugging
|
||||||
|
|
||||||
|
/**
|
||||||
|
* only for this feature, copy upstream value to start with
|
||||||
|
*/
|
||||||
async function save() {
|
async function save() {
|
||||||
if (hasError.data) {
|
if (hasError.data) {
|
||||||
return
|
return
|
||||||
|
|
@ -98,11 +103,9 @@
|
||||||
_state = "done"
|
_state = "done"
|
||||||
}
|
}
|
||||||
|
|
||||||
let test = state.featureSwitches.featureSwitchIsTesting
|
|
||||||
let debug = state.featureSwitches.featureSwitchIsDebugging
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<ReviewPrivacyShield hiddenIfNotAllowed {reviews} guistate={state.guistate}>
|
<ReviewPrivacyShield hiddenIfNotAllowed loadingAllowed={reviews.loadingAllowed} guistate={state.guistate}>
|
||||||
{#if uploadFailed}
|
{#if uploadFailed}
|
||||||
<div class="alert flex">
|
<div class="alert flex">
|
||||||
<ExclamationTriangle class="h-6 w-6" />
|
<ExclamationTriangle class="h-6 w-6" />
|
||||||
|
|
@ -188,7 +191,7 @@
|
||||||
|
|
||||||
<Tr cls="subtle mt-4" t={t.tos} />
|
<Tr cls="subtle mt-4" t={t.tos} />
|
||||||
{/if}
|
{/if}
|
||||||
{#if $debug || $test}
|
{#if $debug || $isTesting}
|
||||||
<span class="subtle self-end">{$subject}</span>
|
<span class="subtle self-end">{$subject}</span>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -2,29 +2,31 @@
|
||||||
/**
|
/**
|
||||||
* Due to privacy, we cannot load reviews unless allowed in the privacy policy
|
* Due to privacy, we cannot load reviews unless allowed in the privacy policy
|
||||||
*/
|
*/
|
||||||
import FeatureReviews from "../../Logic/Web/MangroveReviews"
|
|
||||||
import { MenuState } from "../../Models/MenuState"
|
import { MenuState } from "../../Models/MenuState"
|
||||||
import { ImmutableStore } from "../../Logic/UIEventSource"
|
import { UIEventSource } from "../../Logic/UIEventSource"
|
||||||
|
import Translations from "../i18n/Translations"
|
||||||
|
import Tr from "../Base/Tr.svelte"
|
||||||
|
|
||||||
export let guistate: MenuState
|
export let guistate: MenuState
|
||||||
export let reviews: FeatureReviews
|
export let loadingAllowed : UIEventSource<boolean>
|
||||||
export let hiddenIfNotAllowed: boolean = false
|
export let hiddenIfNotAllowed: boolean = false
|
||||||
let allowed = reviews?.loadingAllowed ?? new ImmutableStore(true)
|
let t = Translations.t.reviews
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if $allowed}
|
{#if $loadingAllowed}
|
||||||
<slot />
|
<slot />
|
||||||
{:else if !hiddenIfNotAllowed && $allowed !== null}
|
{:else if !hiddenIfNotAllowed && $loadingAllowed !== null}
|
||||||
<div class="low-interaction mx-1 flex flex-col rounded">
|
<div class="low-interaction mx-1 flex flex-col rounded">
|
||||||
Reviews are disabled due to your privacy settings.
|
<Tr t={t.disabledForPrivacy}/>
|
||||||
<button on:click={() => reviews.loadingAllowed.set(true)} class="primary">
|
<button on:click={() => {loadingAllowed.set(true)}} class="primary">
|
||||||
Load reviews once
|
<Tr t={t.loadOnce}/>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
class="as-link self-end"
|
class="as-link self-end"
|
||||||
on:click={() => guistate.openUsersettings("mangrove-reviews-allowed")}
|
on:click={() => guistate.openUsersettings("mangrove-reviews-allowed")}
|
||||||
>
|
>
|
||||||
Edit your privacy settings
|
<Tr t={t.editPrivacySettings}/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { SpecialVisualizationState } from "../SpecialVisualization"
|
|
||||||
import Translations from "../i18n/Translations"
|
import Translations from "../i18n/Translations"
|
||||||
import Tr from "../Base/Tr.svelte"
|
import Tr from "../Base/Tr.svelte"
|
||||||
import LoginToggle from "../Base/LoginToggle.svelte"
|
import LoginToggle from "../Base/LoginToggle.svelte"
|
||||||
|
|
@ -7,11 +6,14 @@
|
||||||
import SingleReview from "./SingleReview.svelte"
|
import SingleReview from "./SingleReview.svelte"
|
||||||
import Mangrove_logo from "../../assets/svg/Mangrove_logo.svelte"
|
import Mangrove_logo from "../../assets/svg/Mangrove_logo.svelte"
|
||||||
import Loading from "../Base/Loading.svelte"
|
import Loading from "../Base/Loading.svelte"
|
||||||
|
import { OsmConnection } from "../../Logic/Osm/OsmConnection"
|
||||||
|
import { MangroveIdentity } from "../../Logic/Web/MangroveReviews"
|
||||||
|
import ThemeViewState from "../../Models/ThemeViewState"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A panel showing all the reviews by the logged-in user
|
* A panel showing all the reviews by the logged-in user
|
||||||
*/
|
*/
|
||||||
export let state: SpecialVisualizationState
|
export let state: ThemeViewState & {osmConnection: OsmConnection, userRelatedState: { mangroveIdentity: MangroveIdentity }}
|
||||||
let allReviews = state.userRelatedState.mangroveIdentity.getAllReviews()
|
let allReviews = state.userRelatedState.mangroveIdentity.getAllReviews()
|
||||||
let reviews = state.userRelatedState.mangroveIdentity.getGeoReviews()
|
let reviews = state.userRelatedState.mangroveIdentity.getGeoReviews()
|
||||||
let kid = state.userRelatedState.mangroveIdentity.getKeyId()
|
let kid = state.userRelatedState.mangroveIdentity.getKeyId()
|
||||||
|
|
|
||||||
|
|
@ -17,17 +17,24 @@
|
||||||
import ReviewForm from "./ReviewForm.svelte"
|
import ReviewForm from "./ReviewForm.svelte"
|
||||||
import type { Feature } from "geojson"
|
import type { Feature } from "geojson"
|
||||||
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
|
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
|
||||||
import FeatureReviews, { MangroveIdentity } from "../../Logic/Web/MangroveReviews"
|
import { MangroveIdentity } from "../../Logic/Web/MangroveReviews"
|
||||||
|
import type { ReviewCollection } from "../../Logic/Web/MangroveReviews"
|
||||||
|
|
||||||
import ShieldExclamation from "@babeard/svelte-heroicons/solid/ShieldExclamation"
|
import ShieldExclamation from "@babeard/svelte-heroicons/solid/ShieldExclamation"
|
||||||
import Delete_icon from "../../assets/svg/Delete_icon.svelte"
|
import Delete_icon from "../../assets/svg/Delete_icon.svelte"
|
||||||
import ValidatedInput from "../InputElement/ValidatedInput.svelte"
|
import ValidatedInput from "../InputElement/ValidatedInput.svelte"
|
||||||
|
import type { MapProperties } from "../../Models/MapProperties"
|
||||||
|
|
||||||
|
|
||||||
export let state: ThemeViewState = undefined
|
export let state: ThemeViewState & {
|
||||||
|
mapProperties?: MapProperties,
|
||||||
|
userRelatedState?: { mangroveIdentity: MangroveIdentity }
|
||||||
|
} = undefined
|
||||||
export let tags: UIEventSource<Record<string, string>> = undefined
|
export let tags: UIEventSource<Record<string, string>> = undefined
|
||||||
export let feature: Feature = undefined
|
export let feature: Feature = undefined
|
||||||
export let layer: LayerConfig = undefined
|
export let layer: LayerConfig = undefined
|
||||||
export let reviews: FeatureReviews
|
export let reviews: ReviewCollection
|
||||||
|
export let showMenu: boolean
|
||||||
|
|
||||||
export let review: Review & {
|
export let review: Review & {
|
||||||
kid: string
|
kid: string
|
||||||
|
|
@ -212,7 +219,7 @@
|
||||||
{date}
|
{date}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{#if review.signature}
|
{#if review.signature && showMenu !== undefined}
|
||||||
<div class="self-start">
|
<div class="self-start">
|
||||||
<DotMenu>
|
<DotMenu>
|
||||||
{#if $byLoggedInUser}
|
{#if $byLoggedInUser}
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ class LinkedDataFromWebsite extends SpecialVisualization {
|
||||||
funcName = "linked_data_from_website"
|
funcName = "linked_data_from_website"
|
||||||
group = "data_import"
|
group = "data_import"
|
||||||
docs =
|
docs =
|
||||||
"Attempts to load (via a proxy) the specified website and parsed ld+json from there. Suitable data will be offered to import into OSM. Note: this element is added by default"
|
"Attempts to load (via a proxy) the specified website and parsed ld+json from there. Suitable data will be offered to import into OSM. Note: this element is added by default; but is disabled if the theme has the 'more privacy' flag set"
|
||||||
args = [
|
args = [
|
||||||
{
|
{
|
||||||
name: "key",
|
name: "key",
|
||||||
|
|
@ -146,12 +146,16 @@ class LinkedDataFromWebsite extends SpecialVisualization {
|
||||||
argument: string[],
|
argument: string[],
|
||||||
feature: Feature,
|
feature: Feature,
|
||||||
layer: LayerConfig
|
layer: LayerConfig
|
||||||
): BaseUIElement {
|
): SvelteUIElement {
|
||||||
|
if(state.theme.enableMorePrivacy){
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
const key = argument[0] ?? "website"
|
const key = argument[0] ?? "website"
|
||||||
const useProxy = argument[1] !== "no"
|
const useProxy = argument[1] !== "no"
|
||||||
const readonly = argument[3] === "readonly"
|
const readonly = argument[3] === "readonly"
|
||||||
const isClosed = (argument[4] ?? "yes") === "yes"
|
const isClosed = (argument[4] ?? "yes") === "yes"
|
||||||
|
const downloadInformation = new UIEventSource(false)
|
||||||
const countryStore: Store<string | undefined> = tags.mapD((tags) => tags._country)
|
const countryStore: Store<string | undefined> = tags.mapD((tags) => tags._country)
|
||||||
const sourceUrl: Store<string | undefined> = tags.mapD((tags) => {
|
const sourceUrl: Store<string | undefined> = tags.mapD((tags) => {
|
||||||
if (!tags[key] || tags[key] === "undefined") {
|
if (!tags[key] || tags[key] === "undefined") {
|
||||||
|
|
@ -161,6 +165,9 @@ class LinkedDataFromWebsite extends SpecialVisualization {
|
||||||
})
|
})
|
||||||
const externalData: Store<{ success: GeoJsonProperties } | { error }> = sourceUrl.bindD(
|
const externalData: Store<{ success: GeoJsonProperties } | { error }> = sourceUrl.bindD(
|
||||||
(url) => {
|
(url) => {
|
||||||
|
if(!downloadInformation.data){
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
const country = countryStore.data
|
const country = countryStore.data
|
||||||
if (url.startsWith("https://data.velopark.be/")) {
|
if (url.startsWith("https://data.velopark.be/")) {
|
||||||
return Stores.FromPromiseWithErr(
|
return Stores.FromPromiseWithErr(
|
||||||
|
|
@ -208,13 +215,15 @@ class LinkedDataFromWebsite extends SpecialVisualization {
|
||||||
})()
|
})()
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
[countryStore]
|
[countryStore, downloadInformation]
|
||||||
)
|
)
|
||||||
|
|
||||||
externalData.addCallbackAndRunD((lod) =>
|
externalData.addCallbackAndRunD((lod) =>
|
||||||
console.log("linked_data_from_website received the following data:", lod)
|
console.log("linked_data_from_website received the following data:", lod)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return new SvelteUIElement(ComparisonTool, {
|
return new SvelteUIElement(ComparisonTool, {
|
||||||
feature,
|
feature,
|
||||||
state,
|
state,
|
||||||
|
|
@ -223,6 +232,7 @@ class LinkedDataFromWebsite extends SpecialVisualization {
|
||||||
externalData,
|
externalData,
|
||||||
sourceUrl,
|
sourceUrl,
|
||||||
readonly,
|
readonly,
|
||||||
|
downloadInformation,
|
||||||
collapsed: isClosed,
|
collapsed: isClosed,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,6 @@
|
||||||
import DrawerLeft from "./Base/DrawerLeft.svelte"
|
import DrawerLeft from "./Base/DrawerLeft.svelte"
|
||||||
import DrawerRight from "./Base/DrawerRight.svelte"
|
import DrawerRight from "./Base/DrawerRight.svelte"
|
||||||
import SearchResults from "./Search/SearchResults.svelte"
|
import SearchResults from "./Search/SearchResults.svelte"
|
||||||
import Hash from "../Logic/Web/Hash"
|
|
||||||
import Searchbar from "./Base/Searchbar.svelte"
|
import Searchbar from "./Base/Searchbar.svelte"
|
||||||
import ChevronRight from "@babeard/svelte-heroicons/mini/ChevronRight"
|
import ChevronRight from "@babeard/svelte-heroicons/mini/ChevronRight"
|
||||||
import { Drawer } from "flowbite-svelte"
|
import { Drawer } from "flowbite-svelte"
|
||||||
|
|
@ -67,7 +66,6 @@
|
||||||
let selectedElement: UIEventSource<Feature> = new UIEventSource<Feature>(undefined)
|
let selectedElement: UIEventSource<Feature> = new UIEventSource<Feature>(undefined)
|
||||||
let compass = Orientation.singleton.alpha
|
let compass = Orientation.singleton.alpha
|
||||||
let compassLoaded = Orientation.singleton.gotMeasurement
|
let compassLoaded = Orientation.singleton.gotMeasurement
|
||||||
let hash = Hash.hash
|
|
||||||
let addNewFeatureMode = state.userRelatedState.addNewFeatureMode
|
let addNewFeatureMode = state.userRelatedState.addNewFeatureMode
|
||||||
let gpsAvailable = state.geolocation.geolocationState.gpsAvailable
|
let gpsAvailable = state.geolocation.geolocationState.gpsAvailable
|
||||||
let gpsButtonAriaLabel = state.geolocation.geolocationState.gpsStateExplanation
|
let gpsButtonAriaLabel = state.geolocation.geolocationState.gpsStateExplanation
|
||||||
|
|
|
||||||
84
test/Logic/FeatureSource/ClusteringFeatureSource.spec.ts
Normal file
84
test/Logic/FeatureSource/ClusteringFeatureSource.spec.ts
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
import { FeatureCollection, Point } from "geojson"
|
||||||
|
import { describe, it } from "vitest"
|
||||||
|
import StaticFeatureSource from "../../../src/Logic/FeatureSource/Sources/StaticFeatureSource"
|
||||||
|
import {
|
||||||
|
ClusterGrouping,
|
||||||
|
ClusteringFeatureSource
|
||||||
|
} from "../../../src/Logic/FeatureSource/TiledFeatureSource/ClusteringFeatureSource"
|
||||||
|
import { UIEventSource } from "../../../src/Logic/UIEventSource"
|
||||||
|
import { expect } from "chai"
|
||||||
|
|
||||||
|
const points: FeatureCollection<Point> = {
|
||||||
|
"type": "FeatureCollection",
|
||||||
|
"features": [
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {name: "a"},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
9.759318139161195,
|
||||||
|
55.56552169756637
|
||||||
|
],
|
||||||
|
"type": "Point"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {name: "b"},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
9.759768615515327,
|
||||||
|
55.56569930560951
|
||||||
|
],
|
||||||
|
"type": "Point"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {name: "c"},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
9.75879327221594,
|
||||||
|
55.56569229478089
|
||||||
|
],
|
||||||
|
"type": "Point"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {name: "d"},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
9.759380131319915,
|
||||||
|
55.56507066300628
|
||||||
|
],
|
||||||
|
"type": "Point"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("ClusteringFeatureSource", () => {
|
||||||
|
it("smallTest", () => {
|
||||||
|
const source = new StaticFeatureSource(points.features)
|
||||||
|
const zoom = new UIEventSource(19)
|
||||||
|
// On zoomlevel 19, all points are in a different tile
|
||||||
|
const clusteringSource = new ClusteringFeatureSource(source, zoom, "test", {
|
||||||
|
cutoff: 2,
|
||||||
|
dontClusterAboveZoom: 100
|
||||||
|
})
|
||||||
|
const allClusters = ClusterGrouping.singleton.features
|
||||||
|
expect(allClusters.data.length).to.eq(0)
|
||||||
|
expect(clusteringSource.features.data.length).to.eq(4)
|
||||||
|
|
||||||
|
zoom.set(13)
|
||||||
|
|
||||||
|
expect(allClusters.data.length).to.eq(1)
|
||||||
|
expect(allClusters.data[0].properties["total_metric"]).to.eq("4")
|
||||||
|
expect(clusteringSource.features.data.length).to.eq(0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
})
|
||||||
Loading…
Add table
Add a link
Reference in a new issue